题目要求:

代码实现如下:

在这里插入代码片#include#include#includeint number;//全局变量,记录全部人的个数//结构体,定义单个学生的信息 typedef struct student{int year;int month;int day;int start;int end;char arr[10];char name[10];char type[10];}Student;Student *Input(Student *P,int num);void Print();void Change(struct student *P) ;void Search(struct student *p);void Sort(struct student *p);void out(struct student *P);int main(){Student *P=NULL;Student *Pr=NULL;printf("============================================\n");printf("============================================\n");printf("============================================\n");printf("**************欢迎来到考勤系统**************\n");printf("============================================\n"); printf("============================================\n");printf("============================================\n");printf(".............请按任意键进入考勤系统.......\n");getchar();system("cls");//调用System输出函数 Print(); while (1){printf("请选择操作的命令:\n");int item, num;scanf("%d", &item);switch (item){case 1://录入信息{system("cls"); printf("请输入学生的总人数:");scanf("%d",&num);P = Input(Pr,num);out(P);}break;case 2://修改学生信息{system("cls");Change(P);}break;case 3://查询学生信息{system("cls");Search(P);}break;case 4://排序{system("cls");Sort(P);}break; case 5://退出系统{//程序结束system("cls");exit(0);}break;default:printf("用户输入错误,请重新输入\n");break;}}if(P!=NULL){free(P);}//return 0; }//显示系统  void Print() { printf("-------------------------------------------------\n");printf("-----------------学生管理系统--------------------\n");printf("-----------------1.录入学生信息------------------\n");printf("-----------------2.修改学生信息------------------\n");printf("-----------------3.查询学生信息------------------\n");printf("-----------------4.某段时间内旷课信息------------\n");printf("-----------------5.退出系统----------------------\n"); } //输入学生信息  Student *Input(Student *P,int num) {//循环开辟空间,存储程序;P = (struct student *)malloc(sizeof(struct student) * num); int i=0; for(i=0;i<num;i++) { printf("请输入第%d学生的出勤信息:\n",i+1);printf("输入的格式是:缺课日期 第几节课 课程名称 学生姓名 缺课类型\n"); scanf("%d-%d-%d",&P[i].year,&P[i].month,&P[i].day); scanf("%d-%d",&P[i].start,&P[i].end);scanf("%s%s%s",P[i].arr,P[i].name,P[i].type); /*printf("请输入缺课日期如2022-1-2\n"); scanf("%d",&P[i].year); printf("请输入缺课日期如2022-1-2\n"); scanf("%d",&P[i].month); printf("请输入缺课日期如2022-1-2\n"); scanf("%d",&P[i].day);*/ //printf("请输入缺课的具体节数:\n"); //scanf("%d-%d",P->start,P->end); //printf("请输入课程名称:\n");// scanf("%s",P->arr) ;// printf("请输入学生姓名:\n");// scanf("%s",P->name);// printf("请输入学生的缺课类型:\n");// scanf("%s",P->type);number++; printf("此学生的信息已录入!录入的信息如下:\n"); printf("%d-%d-%d %d-%d %s %s %s\n",P[i].year,P[i].month,P[i].day,P[i].start,P[i].end,P[i].arr,P[i].name,P[i].type);}printf("学生信息录入完毕!!!!!!!\n"); printf("%d个学生的信息如下:\n",number); for(i=0;i<number;i++) { printf("%d-%d-%d %d-%d %s %s %s\n",P[i].year,P[i].month,P[i].day,P[i].start,P[i].end,P[i].arr,P[i].name,P[i].type); }//system("cls");Print(); return P; } //修改学生信息 void Change(struct student *P){ char name[20]; printf("请输入要修改学生的名字:\n"); scanf("%s",name); int i=0; int a; for(i=0;i<=number;i++) { if(strcmp(P[i].name,name)==0) { a=i; break; }} if(a==i) { printf("请您对%s同学的出勤情况做一个修改:\n",P[a].name); printf("输入的格式是:缺课日期 第几节课 课程名称 学生姓名 缺课类型\n"); scanf("%d-%d-%d",&P[i].year,&P[i].month,&P[i].day); scanf("%d-%d",&P[i].start,&P[i].end);scanf("%s%s%s",P[i].arr,P[i].name,P[i].type);} else printf("对不起没有要修改的学生信息!\n"); printf("%s同学修改后的个人信息如下:\n",P[i].name);printf("%d-%d-%d %d-%d %s %s %s\n",P[i].year,P[i].month,P[i].day,P[i].start,P[i].end,P[i].arr,P[i].name,P[i].type);Print();} //查询学生的出勤信息void Search(struct student *p){printf("请输入要查询的学生姓名:\n");char name[20];scanf("%s",&name);int i=0,num=0;for(i=0;i<number;i++){if(strcmp(p[i].name,name)==0){num=i;break;}}if(i==num){printf("缺课日期 第几节课 课程名称 学生姓名 缺课类型\n");printf("%d-%d-%d %d-%d %s %s %s\n",p[i].year,p[i].month,p[i].day,p[i].start,p[i].end,p[i].arr,p[i].name,p[i].type);}else{printf("对不起,我们没有查询到此人的出勤信息!\n");}Print();}//冒泡排序-按照缺课的次数输出void name(struct student *A){ struct student temp; int i=0,j=0; for( i=0;i<number-1;i++) { for( j=0;j<number-i-1;j++) {if(A[j].name[0]>A[j+1].name[0]) { temp=A[j]; A[j]=A[j+1]; A[j+1]=temp; } } } for(i=0;i<number;i++) { printf("%d-%d-%d %d-%d %s %s %s\n",A[i].year,A[i].month,A[i].day,A[i].start,A[i].end,A[i].arr,A[i].name,A[i].type); }} //排序代码 void Sort(struct student *p) { //输入两个时间段struct student *A;A = (struct student *)malloc(sizeof(struct student) * number); int a,b,c,ae,be,ce; printf("请输入开始查找日期:\n"); scanf("%d-%d-%d",&a,&b,&c); printf("请输入截止日期:\n"); scanf("%d-%d-%d",&ae,&be,&ce); int i=0; for(i=0;i<number;i++) { if(p[i].year<=ae&&p[i].year>=a)//年份优先,然后是月,然后是具体的某一天{if(p[i].month<=be&&p[i].month>=b){if(p[i].day<=ce&&p[i].day>=c){A[i].year=p[i].year;A[i].month=p[i].month;A[i].day=p[i].day;A[i].start=p[i].start;A[i].end=p[i].end;strcpy(A[i].arr,p[i].arr);strcpy(A[i].name,p[i].name);strcpy(A[i].type,p[i].type);//复制到新的数组中去 }}}} //调用排序函数输出排序结果 name(A) ; }//输出总结果void out(struct student *P){int i=0;printf("以下是%d个学生的出勤信息:\n",number);for(i=0;i<number;i++){printf("%d-%d-%d %d-%d %s %s %s\n",P[i].year,P[i].month,P[i].day,P[i].start,P[i].end,P[i].arr,P[i].name,P[i].type);} }