题目要求:


代码实现如下:
在这里插入代码片
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int 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);}elseprintf("对不起没有要修改的学生信息!\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); }} 















