You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

359 lines
8.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define SIZE 50
FILE *fp;//定义文件
int n,m=0;//定义全局变量
struct student //定义学生缺课信息结构体
{
char name[100];
int number;
char course[20];
int di;
int time;
int chidao;
int zaotui;
int qingjia;
int kuangke;
}stu[SIZE];
struct kuangke//定义旷课结构体1学生姓名旷课次数
{
char name[20];
int number;
}kuangke[SIZE];
struct kuangke2//定义旷课结构体2课程名称旷课次数
{
char name[20];
int number;
}kuangke2[SIZE];
struct kuangke temp;//旷课信息交换1
struct kuangke2 temp2;//旷课信息交换2
void tongji1printf()//统计方法1排序函数
{
int i,j;
printf("统计后的结果为;\n");
printf("旷课学生姓名 旷课次数\n");
for(i=0;i<=m;i++)
{
for(j=i+1;j<=m+1;j++)
{
if(kuangke[i].number<kuangke[j].number)
{
temp=kuangke[i];
kuangke[i]=kuangke[j];
kuangke[j]=temp;
}
}
}
for(i=0;i<=m;i++)
printf("%s %d \n",kuangke[i].name,kuangke[i].number);
}
void tongji2printf()//统计方法2排序函数
{
int i,j,k;
printf("请输入课程门数\n");
scanf("%d",&k);
for(i=0;i<k;i++)
{
printf("请输入第%d门课程的名称\n",i+1);
scanf("%s",kuangke2[i].name);
}
for(j=0;j<k;j++)
{
for(i=0;i<=m;i++)
{
if(strcmp(kuangke2[j].name,kuangke[i].name)==0)
{
kuangke2[j].number=kuangke2[j].number+kuangke[i].number;
}
}
}
for(i=0;i<k;i++)
for(j=i+1;j<k+1;j++)
{
if(kuangke2[i].number<kuangke2[j].number)
{
temp2=kuangke2[i];
kuangke2[i]=kuangke2[j];
kuangke2[j]=temp2;
}
}
printf("统计后的结果\n");
for(j=0;j<k;j++)
{
printf(" 课程名称 旷课人次\n");
printf(" %s %d \n",kuangke2[j].name,kuangke2[j].number);
}
}
void save()//写入文件函数
{
FILE *fp;
int j;
if((fp=fopen("study","wb"))==NULL)//打开文件
{
printf("文件打开失败\n");
exit(0);
}
for(j=0;j<SIZE;j++)
{
if(fwrite(&stu[j],sizeof(struct student),1,fp)!=1)//写入文件
printf("文件写入失败\n");
}
fclose(fp); //关闭文件
}
void load()//读出文件函数
{
FILE *fp;
int j;
if((fp=fopen("study","rb"))==NULL)//打开文件
{
printf("文件打开失败\n");
exit(0);
}
for(j=0;feof(fp)==0;j++)
{
fread(&stu[j],sizeof(struct student),1,fp);//读出文件
}
fclose(fp);
}
void tongji1()//统计某段时间内,旷课学生姓名及旷课次数,按旷课次数由多到少排序
{
int time1,time2;
int i,flag=0,k;
printf("请输入起始时间和终止时间\n");
scanf("%d %d",&time1,&time2);
load();
for(i=0,k=0;i<SIZE;i++)
{
if(stu[i].time>=time1&&stu[i].time<=time2)
{
if(stu[i].kuangke>0)
{
strcpy(kuangke[k].name,stu[i].name);
kuangke[k].number=stu[i].kuangke;
m=k;//m记录旷课总人次
k++;
}
}
else
flag++;
}
if(flag==SIZE)
printf("输入信息有误\n");
else
tongji1printf();
}
void tongji2()//统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序;
{
int time1,time2;
int i,flag=0,k;
printf("请输入起始时间和终止时间\n");
scanf("%d %d",&time1,&time2);
load();
for(i=0,k=0;i<SIZE;i++)
{
if(stu[i].time>=time1&&stu[i].time<=time2)
{
if(stu[i].kuangke>0)
{
strcpy(kuangke[k].name,stu[i].course);
kuangke[k].number=stu[i].kuangke;
m=k;//m记录旷课总人次
k++;
}
}
else
flag++;
}
if(flag==SIZE)
printf("输入信息有误\n");
else
tongji2printf();
}
void create()//录入学生缺课记录函数
{
void save();
int i,n;
printf("开始录入学生缺课记录\n");
printf("请输入学生总人数\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个学生的缺课信息\n",i+1);
printf("姓名 学号 课程名称 第几节课 缺课日期 迟到次数 早退次数 请假次数 旷课次数\n");
scanf("%s %d %s %d %d %d %d %d %d",stu[i].name,&stu[i].number,stu[i].course,&stu[i].di,&stu[i].time,&stu[i].chidao,&stu[i].zaotui,&stu[i].qingjia,&stu[i].kuangke);
}
save();
}
void xiugai()//修改函数
{
void save();
void load();
int i,k,flag=0;
int number;
load();
printf("以防学生出现重名现象造成的不必要麻烦\n");
printf("请输入需要修改信息的学生学号\n");
scanf("%d",&number);
for(i=0;i<SIZE;i++)
{
if(number==stu[i].number)
{
printf("该学生的缺课信息\n");
printf("姓名 学号 课程名称 第几节课 缺课日期 迟到次数 早退次数 请假次数 旷课次数\n");
printf("%s %d %s %d %d %d %d %d %d\n",stu[i].name,stu[i].number,stu[i].course,stu[i].di,stu[i].time,stu[i].chidao,stu[i].zaotui,stu[i].qingjia,stu[i].kuangke);
do
{
printf("请选择需要修改的项目\n");
printf("1.课程名称 2.第几节课 3.缺课日期 4.迟到次数\n");
printf("5.早退次数 6.请假次数 7.旷课次数 8.退出\n");
scanf("%d",&k);
printf("请输入修改信息\n");
switch(k)
{
case 1:scanf("%s",stu[i].course);break;
case 2:scanf("%d",&stu[i].di);break;
case 3:scanf("%d",&stu[i].time);break;
case 4:scanf("%d",&stu[i].chidao);break;
case 5:scanf("%d",&stu[i].zaotui);break;
case 6:scanf("%d",&stu[i].qingjia);break;
case 7:scanf("%d",&stu[i].kuangke);break;
case 8: break;
default:printf("无该菜单选项,请重新输入\n\n");
}
}while(k!=8);
printf("%d号学生修改后的信息为\n",number);
printf("姓名 学号 课程名称 第几节课 缺课日期 迟到次数 早退次数 请假次数 旷课次数\n");
printf("%s %d %s %d %d %d %d %d %d\n",stu[i].name,stu[i].number,stu[i].course,stu[i].di,stu[i].time,stu[i].chidao,stu[i].zaotui,stu[i].qingjia,stu[i].kuangke);
save();
}
}
}
void chaxun()//查询函数
{
void load();
int i,flag=0,number,item;
char name[20];
load();
do
{
printf("请输入查询方式\n");
printf("1.学号查询 2.姓名查询 3.退出\n");
scanf("%d",&item);
if(item==1)
{
printf("请输入学生学号:");
scanf("%d",&number);
for(i=0;i<SIZE;i++)
{
if(number==stu[i].number)
{
printf("姓名 学号 课程名称 第几节课 缺课日期 迟到次数 早退次数 请假次数 旷课次数\n");
printf("%s %d %s %d %d %d %d %d %d\n",stu[i].name,stu[i].number,stu[i].course,stu[i].di,stu[i].time,stu[i].chidao,stu[i].zaotui,stu[i].qingjia,stu[i].kuangke);
}
else
flag++;
}
if(flag==SIZE)
printf("输入信息有误\n");
}
else if(item==2)
{
printf("请输入学生姓名\n");
scanf("%s",name);
for(i=0;i<SIZE;i++)
{
if(strcmp(name,stu[i].name)==0)
{
printf("姓名 学号 课程名称 第几节课 缺课日期 迟到次数 早退次数 请假次数 旷课次数\n");
printf("%s %d %s %d %d %d %d %d %d\n",stu[i].name,stu[i].number,stu[i].course,stu[i].di,stu[i].time,stu[i].chidao,stu[i].zaotui,stu[i].qingjia,stu[i].kuangke);
}
else
flag++;
}
if(flag==SIZE)
printf("输入信息有误\n");
else if(item==3)
break;
}
else
printf("请输入正确的查询方式\n");
}while(item!=3);
}
int main()
{
int x;
do
{
printf("\n");
printf("\n");
printf("\n");
printf("########################\n");
printf("# 学生考勤系统 #\n");
printf("# 欢迎您 #\n");
printf("########################\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("################################\n");
printf("#录入信息输入时间是请以月日格式#\n");
printf("#例如11月1日以1101形式输入 #\n");
printf("#请选择所需功能,输入对应数字:#\n");
printf("# 1.录入学生的缺课记录 #\n");
printf("# 2.修改某个学生的缺课记录 #\n");
printf("# 3.查询某个学生的缺课情况 #\n");
printf("# 4.旷课学生姓名及旷课次数 #\n");
printf("# 5.有学生旷课课程及旷课人次 #\n");
printf("# 6.退出系统 #\n");
scanf("%d",&x);
switch(x)
{
case 1:create();break;
case 2:xiugai();break;
case 3:chaxun();break;
case 4:tongji1();break;
case 5:tongji2();break;
case 6:break;
default:printf("***输入有误,请重输:\n");
}
} while (x != 6);
}