已全部实现和优化: (1)允许通过菜单选择要操作的功能(字符) 选项,具体任务如下: 可以录入试卷基本信息:录入选择题的题干、选项和答案,可以录入多题,并允许 查看和删除等操作; --------》试卷管理(已实现) (2)考试的时候,考生先录入学号和姓名,并开始作答案,答题结束后,显示考生的成绩和各题的答案,允许多位考生作答---》用for循环看后台考生; -----》考试管理;(已完成) (3)考试结束后,可以进行相关考试成绩的统计分析,比如打印所有考生的成绩单,平均分、 最高或最低 -----》成绩的管理; 老师版面和学生版面(已实现) , 扩展功能: (4)一个试卷中,实现多种题型,比如再增加判断题和多选题等;----》考试加试卷管理(已实现) (5)为每个考试指定考试开始和结束时间,考生只能在这个时间内进行作答,同时答过程中,如果考试时间结束,也会强制结束考试
//试卷管理操作: #include#include #include #include #include #include #include //#include "试卷管理之学生管理函数.c"------>先写在一个函数里在问老师 //结构 struct Xuesheng { char school_number[15];//学号 char name[15]; char Sex[3]; int age; char pass_class[15];// 班级 char chinese_nation[15];//民族 char pass_schoolage[30];//入学年份 int sum=0;//总分(该科目成绩) struct Xuesheng *next; }; struct Panduangti { int pd_flag=1;//1表示要输出 int number3; //序号 char stem3[100]; //题干 char answer3[2]; //答案-->T或F int score3; //分值 }; //单选题 struct ChoiceQuestion { int number; //序号 char stem[100]; //题干 char optionA[30]; //选项A char optionB[30]; //选项B char optionC[30]; //选项C char optionD[30]; //选项D char answer[2]; //答案 int score; //分值 int shangchu_flag1=1;//1表示不删除。 }; struct Douxuanti { int shangchu2_flag2=1; //1表示不删除 int number2; //序号 char stem2[100]; //题干 char optionA2[30]; //选项A char optionB2[30]; //选项B char optionC2[30]; //选项C char optionD2[30]; //选项D char answer2[10]; //答案 int score2; //分值 }; struct Exam { char name[80]="暂无内容"; //考试名称 int beginTime1=0,beginTime2=0; //开考时间 int endTime1=0,endTime2=0; //结束时间 int sum1;//单选题的数量 int sum2;//多选题的数量 int sum3;//判断题的数量 int sum4=1;//学生数量; struct ChoiceQuestion cq[100]; //单选题,如果还有其它题型,可以再加变量 struct Douxuanti dx[100];//多选题 struct Panduangti pd[100];//判段题 int zhon_sum=0;//统计我设置的设置的总分 long long second=0;//统计有多少秒 }; //全局变量 struct Exam exam;//-->试卷的全局变量 struct Xuesheng *student_head;//访问学生信息的头指针 struct Xuesheng xs;//用于操作学生的全局变量 long long zhanghao=19832841458;//老师账号 long long mima=12345678;//老师密码 clock_t start,end;//统计时间的变量 //函数 void jingru(int x);//----->最开头的功能 void gongnen(int x);//--->功能2 void shijuan();//----> 试卷基本信息 void dangxuanti();//---->单选题 void douxuanti();//---->多选题 void panduangti();//---->判断题 struct Xuesheng *xuesheng();//----->学生信息 struct Xuesheng *lookandremove(struct Xuesheng *head) ; //-------->查看和修改信息 //void Biankuan();//------------>将学生所有信息纳入一个边框中,自动执行 //----->设计首页面的边框比设置学生的容易,因为学生要开多个二维数组 void sijuanguanli();//试卷管理 void kaoshiguanli(struct Xuesheng *head);//考试管理 void chengjiguanli(struct Xuesheng *head);//成绩管理 long long textsecond(int begin1,int begin2,int end1,int end2);//统计设置的时间段有多少秒 void sequence(char a[]); //主函数 int main() { for(int i=0; i<=54; i++) printf("*"); printf("欢迎进入考试系统"); for(int i=0; i<=48; i++) printf("*"); printf("n"); //页面的设计 int x; while(1) { printf("==================================n"); printf("|| (1)试卷和信息管理 ||n"); printf("|| (2)考试管理 ||n"); printf("|| (3)成绩分析和统计 ||n"); printf("|| (4)退出考试系统 ||n"); printf("==================================n"); printf(" 请选择你的操作:"); scanf("%d",&x); if(x==4) { printf("---退出系统---"); printf("n"); printf("n"); printf("--未来可期,不负新时代--n"); break; } else if(x<=0||x>4) { printf("n"); printf("没有该操作,请重新选择n"); continue; } jingru(x); printf("n"); for(int i=0; i<=50; i++) printf("*"); printf("欢迎进入考试系统"); for(int i=0; i<=52; i++) printf("*"); printf("n"); x=1; } if(x==4) { } return 0; } void jingru(int x) { switch(x) { case 1: sijuanguanli(); break; case 2: kaoshiguanli(student_head); break; case 3: chengjiguanli(student_head); break; } } //试卷管理页面 void sijuanguanli() { system("cls"); printf("n"); for(int i=0; i<=47; i++) printf("*"); printf("欢迎进入试卷和信息管理页面"); for(int i=0; i<=45; i++) printf("*"); printf("n"); //页面的设计 int x; while(1) { printf("--------------------------------------n"); printf("| (1)录入试卷基本信息 |n"); printf("| (2)录入学生信息 |n"); printf("| (3)查看与修改信息 |n"); printf("| (4)退出试卷管理操作 |n"); printf("--------------------------------------n"); printf(" 请选择你的操作:"); scanf("%d",&x); if(x==4) break; else if(x<=0||x>4) { printf("n"); printf("没有该操作,请重新选择n"); continue; } gongnen(x); system("cls"); printf("n"); for(int i=0; i<=47; i++) printf("*"); printf("欢迎进入试卷和信息管理页面"); for(int i=0; i<=45; i++) printf("*"); printf("n"); } } //操作功能集合体 ---->操作的调用 void gongnen(int x) { switch(x) { case 1: shijuan(); break; case 2: student_head=xuesheng(); //void Biankuan(student_head); break; case 3: student_head=lookandremove(student_head);//要接收含学生信息的头指针 break; } } //试卷基本信息 void shijuan() { system("cls"); printf("n"); for(int i=0; i<=45; i++) printf("*"); printf("已进入录入试卷基本信息操作"); for(int i=0; i<=42; i++) printf("*"); printf("n");//页面的设计 int x=1; printf("请设计考试的名称:"); scanf("%s",exam.name); printf("设计成功:%sn",exam.name); printf("n"); loop: printf("请设计考试的开始时间:");//一定用英文 scanf("%d:%d",&exam.beginTime1,&exam.beginTime2) ; if(exam.beginTime1<0||exam.beginTime1>23) { //小时 printf("设置错误,请重新设置n"); goto loop; } if(exam.beginTime2<0||exam.beginTime2>=60) { printf("设置错误,请重新设置n"); goto loop; } printf("设计成功:%02d:%02dn",exam.beginTime1,exam.beginTime2); printf("n"); printf("请设计考试的结束时间:"); scanf("%d:%d",&exam.endTime1,&exam.endTime2); if(exam.endTime1<0||exam.endTime1>23) { printf("设置错误,请重新设置n"); goto loop; } if(exam.endTime2<0||exam.endTime2>=60) { printf("设置错误,请重新设置n"); goto loop; } printf("设计成功:%02d:%02dn",exam.endTime1,exam.endTime2); //统计秒数 exam.second=textsecond( exam.beginTime1,exam.beginTime2,exam.endTime1,exam.endTime2); for(int j=0; j<=2; j++) printf("n"); while(x) { printf(" (1)进行设计单选题n"); printf(" (2)进行设计多选题n"); printf(" (3)进行设计判段题n"); printf(" (4)退出录入试卷基本信息操作n"); printf(" 请进行你的操作:"); scanf("%d",&x); if(x==4) break ; else if(x<=0||x>4) { while(x<=0||x>4) { printf("没有该操作,请重新选择n"); printf("请重新进行选择你的操作:"); scanf("%d",&x); if(x>0&&x<=4) break; } } switch(x) { case 1: dangxuanti(); break; case 2: douxuanti(); break; case 3: panduangti(); break; } printf("n"); for(int i=0; i<=50; i++) printf("*"); printf("已进入录入试卷基本信息操作"); for(int i=0; i<=42; i++) printf("*"); printf("n");//页面的设计 x=1; } } //单选题 void dangxuanti() { system("cls"); printf("n"); for(int i=0; i<=50; i++) printf("*"); printf("进行设计单选题"); for(int i=0; i<=54; i++) printf("*"); printf("n");//页面的设计 int i,y; printf("请确认设置几道单选题:"); scanf("%d",&exam.sum1); printf("n"); getchar(); for(i=1; i<=exam.sum1; i++) { exam.cq[i].number=i;//序号 printf("请设置%d题的分值:",i); scanf("%d",&exam.cq[i].score); exam.zhon_sum+=exam.cq[i].score; getchar(); printf("请输入第%d道题的题目:",i); scanf("%s",exam.cq[i].stem); printf("n"); printf("请设置选项A的内容:"); scanf("%s",exam.cq[i].optionA); printf("设置成功:%sn",exam.cq[i].optionA); printf("n"); printf("请设置选项B的内容:"); scanf("%s",exam.cq[i].optionB); printf("设置成功:%sn",exam.cq[i].optionB); printf("n"); printf("请设置选项C的内容:"); scanf("%s",exam.cq[i].optionC); printf("设置成功:%sn",exam.cq[i].optionC); printf("n"); printf("请设置选项D的内容:"); scanf("%s",exam.cq[i].optionD); printf("设置成功:%sn",exam.cq[i].optionD); printf("n"); dan_loop: printf("请设计该题的答案为:"); scanf("%s",exam.cq[i].answer); //判断答案设置是否正确 if(y=strlen(exam.cq[i].answer)>=2){ printf("答案设置错误,这是单选题,请重新设置n"); goto dan_loop; } if(exam.cq[i].answer[0]!='A'&&exam.cq[i].answer[0]!='B'&&exam.cq[i].answer[0]!='C'&&exam.cq[i].answer[0]!='D'){ printf("答案设置错误,请重新设置n"); goto dan_loop; } printf("设置成功:%sn",exam.cq[i].answer); printf("n"); if(i!=exam.sum1) for(int j=0; j<20; j++) printf("~"); printf("n"); } printf("n"); printf("全部设置完成"); } //多选题 void douxuanti() { system("cls"); printf("n"); for(int i=0; i<=50; i++) printf("*"); printf("进行设计多选题"); for(int i=0; i<=54; i++) printf("*"); printf("n");//页面的设计 int i; printf("请设置多选题的数量:"); scanf("%d",&exam.sum2); printf("n"); getchar(); for(i=1; i<=exam.sum2; i++) { exam.dx[i].number2=i;//序号 printf("请设置第%d题的分值:",i); scanf("%d",&exam.dx[i].score2); exam.zhon_sum+=exam.dx[i].score2; getchar(); printf("请输入第%d道题的题目:",i); scanf("%s",exam.dx[i].stem2); printf("n"); printf("请设置选项A的内容:"); scanf("%s",exam.dx[i].optionA2); printf("设置成功:%sn",exam.dx[i].optionA2); printf("n"); printf("请设置选项B的内容:"); scanf("%s",exam.dx[i].optionB2); printf("设置成功:%sn",exam.dx[i].optionB2); printf("n"); printf("请设置选项C的内容:"); scanf("%s",exam.dx[i].optionC2); printf("设置成功:%sn",exam.dx[i].optionC2); printf("n"); printf("请设置选项D的内容:"); scanf("%s",exam.dx[i].optionD2); printf("设置成功:%sn",exam.dx[i].optionD2); printf("n"); printf("请设计该题的答案为:"); scanf("%s",exam.dx[i].answer2); //要判断答案是否设置正确 int y=strlen(exam.dx[i].answer2); int chandu; for(int j=0;j 'D') { printf("第%d题的答案设置错误:",i); printf("%sn",exam.dx[i].answer2); printf("请重新设置第%d的答案为:",i); scanf("%s",exam.dx[i].answer2); y=strlen(exam.dx[i].answer2); j=0; } else j++; } sequence(exam.dx[i].answer2); printf("已设置成功答案为:%sn",exam.dx[i].answer2); printf("n"); if(i!=exam.sum2) for(int j=0; j<20; j++) printf("~"); printf("n"); } printf("n"); printf("全部设置完成"); } //判断题 void panduangti() { system("cls"); printf("n"); for(int i=0; i<=50; i++) printf("*"); printf("进行设计判断题"); for(int i=0; i<=54; i++) printf("*"); printf("n");//页面的设计 int i,x; printf("请设置判断题的数量:"); scanf("%d",&exam.sum3); printf("n"); getchar(); for(i=1; i<=exam.sum3; i++) { exam.pd[i].number3=i; printf("请设置判断题的分值:"); scanf("%d",&exam.pd[i].score3); exam.zhon_sum+=exam.pd[i].score3; getchar(); printf("请设置第%d的题目:",i); scanf("%s",exam.pd[i].stem3); printf("设置成功:%sn",exam.pd[i].stem3); printf("n"); printf("请确认第%d题的答案n",i); printf("(1)正确n(2)错误n"); printf("设置为:"); scanf("%d",&x) ; //进行答案的格式判断 if(x!=1&&x!=2) { while(x!=1&&x!=2) { printf("没有该设置,请重新设置答案:"); scanf("%d",&x); if(x==1||x==2) break; } } if(x==1) { exam.pd[i].answer3[0]='T'; printf("已设置为:%s(正确)n",exam.pd[i].answer3); } else if (x==2) { exam.pd[i].answer3[0]='F'; printf("已设置为:%s(错误)n",exam.pd[i].answer3); } //} printf("n"); if(i!=exam.sum3) for(int j=0; j<20; j++) printf("~"); printf("n"); } printf("全部设置完成"); } //学生管理 struct Xuesheng *xuesheng() { system("cls"); printf("n"); for(int i=0; i<=45; i++) printf("*"); printf("已进入录入学生信息管理页面"); for(int i=0; i<=42; i++) printf("*"); printf("n"); //页面的设计 struct Xuesheng *head,*tran; head=tran=NULL; printf("请确认要录入的学生个数:"); scanf("%d",&exam.sum4); printf("n"); getchar(); for(int i=1; i<=exam.sum4; i++) { //学号,姓名,性别,年龄,成绩 ,班级,民族,入学年份 struct Xuesheng *p=(struct Xuesheng *)malloc(sizeof(struct Xuesheng )); p->next=NULL; printf("录入第%d个学生的信息n",i); printf("请输入第%d个学生的姓名:",i);//1 scanf("%s",xs.name); printf("录入成功:%sn",xs.name); printf("n"); printf("请输入该学生的性别:");//2 scanf("%s",xs.Sex); printf("录入成功:%sn",xs.Sex); printf("n"); printf("请输入该学生的年龄:");//3 scanf("%d",&xs.age) ; printf("录入成功:%dn",xs.age); printf("n"); getchar(); printf("请输入该学生的学号:");//4 scanf("%s",xs.school_number); printf("录入成功:%sn",xs.school_number); printf("n"); printf("请输入该学生的民族:");//5 scanf("%s",xs.chinese_nation); printf("录入成功:%sn",xs.chinese_nation); printf("n"); printf("请输入该学生的班级:");//6 scanf("%s",xs.pass_class) ; printf("录入成功:%sn",xs.pass_class); printf("n"); printf("请输入该学生的入学年份:");//7 scanf("%s",xs.pass_schoolage); printf("录入成功:%sn",xs.pass_schoolage); printf("n"); p->age=xs.age; p->sum=0; getchar(); strcpy(p->chinese_nation,xs.chinese_nation); strcpy(p->name,xs.name); strcpy(p->pass_class,xs.pass_class); strcpy(p->pass_schoolage,xs.pass_schoolage); strcpy(p->Sex,xs.Sex); strcpy(p->school_number,xs.school_number); if(head==NULL) { head=p; tran=p; } else { tran->next=p; tran=p; } printf("n"); if(i!=exam.sum4) for(int j=0; j<20; j++) printf("~"); printf("n"); } printf("已全部将学生信息录入成功,正在退出n"); return head; } //查看和改变信息 struct Xuesheng *lookandremove(struct Xuesheng *head) { system("cls"); printf("n"); for(int i=0; i<=45; i++) printf("*"); printf("已进入查看信息页面"); for(int i=0; i<=50; i++) printf("*"); printf("n"); //页面的设计 struct Xuesheng *head2=head; struct Xuesheng *tran=head; struct Xuesheng *tran1=head; struct Xuesheng *p=head; int x; int head_flag=0; while(1) { printf("-----------------------------------n"); printf("| (1)查看试卷的信息 |n"); printf("| (2)查看学生信息 |n"); printf("| (3)修改试卷信息 |n"); printf("| (4)修改学生信息 |n"); printf("| (5)退出查看信息页面 |n"); printf("-----------------------------------n"); printf(" 请选择你的操作:"); scanf("%d",&x); if(x==5) { if(head_flag==0) { return p; } else { head_flag=0; return head; } } if(x!=1&&x!=2&&x!=3&&x!=4) { while(x!=1||x!=2||x!=3||x!=4) { printf("没有该操作n"); printf("请重新选择你的操作:"); scanf("%d",&x); if(x==1||x==2||x==3||x==4) break; } } //查看试卷信息 if(x==1) {//查看试卷信息 system("cls"); printf("n"); for(int j=0; j<40; j++) printf("~~~"); printf("n"); printf("正在查看试卷内容,以下为试卷内容n"); printf("n"); printf("n"); //试卷页面设计 for(int i=0; i<=50; i++) printf(" "); printf("%s",exam.name); for(int i=0; i<=50; i++) printf(" "); printf("n"); for(int i=0; i<=40; i++) printf(" "); printf("考试时间:%02d:%02d~~%02d:%02d",exam.beginTime1,exam.beginTime2,exam.endTime1,exam.endTime2); for(int i=0; i<=50; i++) printf(" "); printf("n"); printf("n"); //下面为各类题目 printf("一、单选题n");//---->再将格式优化一下 printf("n"); int biaozhixuhao=0; for(int i=1; i<=exam.sum1; i++) { if(exam.cq[i].shangchu_flag1!=0) { biaozhixuhao++; printf(" %d.%s(%d分)n",biaozhixuhao,exam.cq[i].stem,exam.dx[i].score2); printf(" A.%s B.%s C.%s D.%sn",exam.cq[i].optionA,exam.cq[i].optionB,exam.cq[i].optionC,exam.cq[i].optionD); printf(" 正确答案:%sn",exam.cq[i].answer); printf("n"); } } biaozhixuhao=0; printf("二、多选题n"); printf("n"); int x2=0; for(int i=1; i<=exam.sum2; i++) { if(exam.dx[i].shangchu2_flag2!=0) { x2++; printf(" %d.%s(%d分)n",x2,exam.dx[i].stem2,exam.dx[i].score2); printf(" A.%s B.%s C.%s D.%sn",exam.dx[i].optionA2,exam.dx[i].optionB2,exam.dx[i].optionC2,exam.dx[i].optionD2); printf(" 正确答案:%sn",exam.dx[i].answer2); printf("n"); } } x2=0; if(exam.sum3==0) { printf("结束n"); } else { printf("三、判断题n"); printf("n"); for(int i=1; i<=exam.sum3; i++) { if(exam.pd[i].pd_flag==1) { printf(" %d.%s(%d分)n",i,exam.pd[i].stem3,exam.pd[i].score3); printf(" T Fn"); printf(" 正确答案:%sn",exam.pd[i].answer3); printf("n"); } } } printf("n"); for(int i=0; i<=50; i++) printf("*"); printf("已进入查看信息页面"); for(int i=0; i<=50; i++) printf("*"); printf("n"); } //看学生信息 else if(x==2) {//查看学生信息 ---->要接收含学生信息的头指针 //页面设计 system("cls"); printf("n"); for(int j=0; j<40; j++) printf("~~~"); printf("n"); printf("正在查看学生信息,以下为学生信息n"); printf("n"); printf("n"); for(int i=1; i<=exam.sum4; i++) { if(head==NULL) break; printf("n"); printf(" 第%d个学生的信息如下:n",i); for(int j=0; j<=40; j++) printf("*"); printf("n"); printf(" 姓名:%s n",head->name);//10+13+4=27--->13 printf(" 年龄:%d n",head->age); printf(" 性别:%s n",head->Sex); printf(" 班级:%s n",head->pass_class); printf(" 学号:%s n",head->school_number); printf(" 民族:%s n",head->chinese_nation); printf(" 入学年份:%s n",head->pass_schoolage); printf(" 总分:%s n",head->sum); for(int j=0; j<=40; j++) printf("*"); printf("n"); head=head->next; } if(head_flag==0) { head=p; } else { head=head2; } printf("n"); for(int i=0; i<=50; i++) printf("*"); printf("已进入查看信息页面"); for(int i=0; i<=50; i++) printf("*"); printf("n"); } //修改试卷信息 else if(x==3) { system("cls"); printf("n"); for(int j=0; j<40; j++) printf("~~~"); printf("n"); printf("正在修改试卷信息,以下为试卷信息n"); printf("n"); printf("n"); //页面设计 int k; while(1) { printf("n"); printf("(1)修改考试名称n"); printf("(2)修改考试时间n"); printf("(3)修改单选题n"); printf("(4)修改多选题n"); printf("(5)修改判断题n"); printf("(6)退出修改试卷n"); printf("请选择你的操作:"); scanf("%d",&k); if(k==6) break; if(k!=1&&k!=2&&k!=3&&k!=4&&k!=5) { while(k!=1&&k!=2&&k!=3&&k!=4&&k!=5) { printf("没有该操作,请重新操作:"); scanf("%d",&k); if(k==1||k==2||k==3||k==4||k==5) break; } } if(k==1) { system("cls"); printf("n"); printf("目前考试名称为:%sn",exam.name); printf("将考试名称改为:"); scanf("%s",exam.name); printf("已将考试名称改为:%s",exam.name); } if(k==2) { system("cls"); printf("n"); printf("目前考试时间为:%d:%d~~%d:%dn",exam.beginTime1,exam.beginTime2,exam.endTime1,exam.endTime2); printf("将考试开始时间改为:") ; scanf("%d:%d",&exam.beginTime1,&exam.beginTime2); printf("将考试结束时间修改为:"); scanf("%d:%d",&exam.endTime1,exam.endTime2); printf("已将考试时间修改为:%02d:%02d~~%02d:%02d",exam.beginTime1,exam.beginTime2,exam.endTime1,exam.endTime2); printf("n"); exam.second=textsecond( exam.beginTime1,exam.beginTime2,exam.endTime1,exam.endTime2); } if(k==3) { system("cls"); printf("n"); printf("目前的单选题如下:n"); for(int i=1; i<=exam.sum1; i++) { printf(" %d.%s(%d)n",i,exam.cq[i].stem,exam.dx[i].score2); printf(" A.%s B.%s C.%s D.%sn",exam.cq[i].optionA,exam.cq[i].optionB,exam.cq[i].optionC,exam.cq[i].optionD); printf(" 正确答案:%sn",exam.cq[i].answer); printf("n"); } int a,q; while(1) { printf("n"); printf("(1)修改内容n"); printf("(2)删除内容n"); printf("(3)退出修改<<单选题>>n"); printf("请选择你的操作:"); scanf("%d",&a); if(a==3) break; if(a!=1&&a!=2) { while(a!=1&&a!=2) { printf("没有该操作,请重新操作:"); scanf("%d",&a); if(a==1||a==2) break; } } int xuhao_flag1=0; if(a==1) { //int xuhao_flag1=0; printf("请输入要修改的题目的序号:"); scanf("%d",&q); for(int i=1; i<=exam.sum1; i++) { if(i==q) { xuhao_flag1=1; printf("已找到第%d题",i); printf("当前题目为:%sn",exam.cq[q].stem); printf("请输入要改变的题目:") ; scanf("%s",&exam.cq[q].stem); printf("修改成功:%sn",exam.cq[q].stem); printf("当前的选项A为:%sn",exam.cq[q].optionA); scanf("修改为:%s",exam.cq[q].optionA); printf("修改成功:%sn",exam.cq[q].optionA); printf("当前的选项B为:%sn",exam.cq[q].optionB); scanf("修改为:%s",exam.cq[q].optionB); printf("修改成功:%sn",exam.cq[q].optionB); printf("当前的选项C为:%sn",exam.cq[q].optionC); scanf("修改为:%s",exam.cq[q].optionC); printf("修改成功:%sn",exam.cq[q].optionC); printf("当前的选项D为:%sn",exam.cq[q].optionD); scanf("修改为:%s",exam.cq[q].optionD); printf("修改成功:%sn",exam.cq[q].optionD); break; } } if(xuhao_flag1==0) { printf("没有该序号"); } xuhao_flag1=0; } else if(a==2) { printf("进入删除单选题n"); printf("请输入要删除题目的序号:"); scanf("%d",&q); for(int i=1; i<=exam.sum1; i++) { if(i==q) { xuhao_flag1=1; printf("已找到第%d题",i); printf("当前题目为:%sn",exam.cq[q].stem); exam.cq[i].shangchu_flag1=0; printf("已将第%d题删除n",q); xuhao_flag1=1; break; } } if(xuhao_flag1==0) { printf("没有该序号"); } xuhao_flag1=0; } } } //修改多选题 if(k==4) { system("cls"); int dxt; while(1) { printf("n"); printf("(1)修改内容n"); printf("(2)删除内容n"); printf("(3)退出修改<<多选题>>n"); printf("请选择你的操作:"); scanf("%d",&dxt); if(dxt==3) break; if(dxt!=1&&dxt!=2) {//为什么不能是||这个符号 while(dxt!=1&&dxt!=2) { printf("没有该操作,请重新操作:"); scanf("%d",&dxt); if(dxt==1||dxt==2) break; } } int x1; int xuhao_flag2=0; if(dxt==1) { xuhao_flag2=0; printf("请输入要修改的题目的序号:"); scanf("%d",&x1); for(int i=1; i<=exam.sum2; i++) { if(i==x1) { xuhao_flag2=1; printf("已找到第%d题",i); printf("当前题目为:%sn",exam.dx[i].stem2); printf("请输入要改变的题目:") ; scanf("%s",&exam.dx[i].stem2); printf("修改成功:%sn",exam.dx[i].stem2); printf("当前的选项A为:%sn",exam.dx[i].optionA2); scanf("修改为:%s",exam.dx[i].optionA2); printf("修改成功:%sn",exam.dx[i].optionA2); printf("当前的选项B为:%sn",exam.dx[i].optionB2); scanf("修改为:%s",exam.dx[i].optionB2); printf("修改成功:%sn",exam.dx[i].optionB2); printf("当前的选项C为:%sn",exam.dx[i].optionC2); scanf("修改为:%s",exam.dx[i].optionC2); printf("修改成功:%sn",exam.dx[i].optionC2); printf("当前的选项D为:%sn",exam.dx[i].optionD2); scanf("修改为:%s",exam.dx[i].optionD2); printf("修改成功:%sn",exam.dx[i].optionD2); break; } } if(xuhao_flag2==0) { printf("没有该序号"); } xuhao_flag2=0; } else if(x1==2) { xuhao_flag2=0; printf("进入删除多选题n"); printf("请输入要删除题目的序号:"); scanf("%d",&dxt); for(int i=1; i<=exam.sum2; i++) { if(i==dxt) { xuhao_flag2=1; printf("已找到第%d题",i); printf("当前题目为:%sn",exam.dx[i].stem2); exam.dx[i].shangchu2_flag2=0; printf("已将第%d题删除n",dxt); xuhao_flag2=1; break; } } if(xuhao_flag2==0) { printf("没有该序号"); } xuhao_flag2=0; } } } //修改判断题 if(k==5) { system("cls"); int a1; while(1) { printf("n"); printf("(1)修改内容n"); printf("(2)删除内容n"); printf("(3)退出修改<<多选题>>n"); printf("请选择你的操作:"); scanf("%d",&a1); if(a1==3) break; if(a1!=1&&a1!=2) { while(a1!=1&&a1!=2) { printf("没有该操作,请重新操作:"); scanf("%d",&a1); if(a1==1||a1==2) break; } } //(1)修改内容 int a2,panduan_flag=0; if(a1==1) { printf("n"); printf("请输入要修改的题目序号:"); scanf("%d",&a2); for(int i=1; i<=exam.sum3; i++) { if(a2==i) { printf("已找到序号为%d的题目n",a2); printf("目前题目为:%sn",exam.pd[i].stem3); printf("修改为:"); scanf("%s",exam.pd[i].stem3); printf("修改成功:%s",exam.pd[i].stem3); printf("目前的分值为:%d",exam.pd[i].score3); printf("将分值修改为:"); scanf("%d",&exam.pd[i].score3); printf("修改成功:%d",exam.pd[i].score3); printf("目前的答案为:%C",exam.pd[i].answer3); printf("将答案修改为:"); scanf("%c",&exam.pd[i].answer3); printf("修改成功:%c",exam.pd[i].answer3); panduan_flag=1; break; } } if(panduan_flag==0) { printf("没有找到该序号的题目n"); } panduan_flag=0; } //(2)删除内容 if(a1==2) { panduan_flag=0; printf("请输入要修改的题目序号:"); scanf("%d",&a2); for(int i=1; i<=exam.sum3; i++) { if(a2==i) { printf("已将序号为%d的题目删除n",a2); exam.pd[i].pd_flag=0; panduan_flag=1; break; } } if(panduan_flag==0) { printf("没有找到该序号的题目n"); } panduan_flag=0; } } } //if结束 } } //修改学生资料, else if(x==4) { system("cls"); printf("n"); for(int j=0; j<40; j++) printf("~~~"); printf("n"); printf("正在修改学生资料,以下为学生资料n"); printf("n"); printf("n"); //页面设计 int m,xuesheng_flag=0; int xs_sum; char xuehao[13]; while(1) { printf("(1)删除学生n"); //printf("(2)增加学生n"); // printf("(3)修改学生信息n"); printf("(2)退出<<修改学生资料>>"); printf("请选择你的操作:"); scanf("%d",&m); if(m==2) break; if(m!=1) {//为什么不能是||这个符号 while(m!=1) { printf("没有该操作,请重新操作:"); scanf("%d",&m); if(m==1) break; } } if(m==1) { printf("n"); printf("请输入要删除的学生的学号:"); scanf("%s",xuehao) ; while(tran) { if(strcmp(xuehao,tran->school_number)==0) { printf("已找到学号为%s的学生n",tran->school_number); if(head2==tran) { head2=head->next; } if(tran!=NULL&&tran->next==NULL) { tran1->next=NULL; } else { tran1->next=tran->next; } printf("已将学号为%s的学生删除n",tran->school_number); xuesheng_flag=1; exam.sum4=exam.sum4-1; head_flag=1; break; } tran1=tran; tran=tran->next; } if(xuesheng_flag=0) { printf("没有找到学号为%s的学生n",xuehao); } xuesheng_flag=0; head=head2; // return head; } } } } } //考试系统 void kaoshiguanli(struct Xuesheng *head) { system("cls"); struct Xuesheng *head1=head; // struct Xuesheng *; printf("n"); for(int i=0; i<=54; i++) printf("*"); printf("进入考试"); for(int i=0; i<=56; i++) printf("*"); printf("n"); //页面的设计 char ks_name[10];//输入的名字 char ks_xuehao[15];//输入的学号 int ks_flag=0;//有没有找到的标志 char ks_answer[2];//单选题 char ks_answer1[5];//多选题 if(exam.sum4==0||head1==NULL) { printf("没有考生信息,该考试不存在n"); } //多位考生答卷 for(int i=0; i<=exam.sum4; i++) { if(head1==NULL) break; //开头 for(int i=0; i<=50; i++) printf(" "); printf("科目:%s",exam.name); for(int i=0; i<=50; i++) printf(" "); printf("n"); for(int i=0; i<=40; i++) printf(" "); printf("考试时间:%02d:%02d~~%02d:%02d",exam.beginTime1,exam.beginTime2,exam.endTime1,exam.endTime2); for(int i=0; i<=50; i++) printf(" "); printf("n"); printf("n"); //进行判断是否有该学号学生 printf("如要退出则输入退出n"); printf("请先进行登入n"); printf("请输入你的名字:"); scanf("%s",ks_name); printf("请输入你的学号:"); scanf("%s",ks_xuehao); for(int j=1; j<=exam.sum4; j++) { if(strcmp(ks_xuehao,head->school_number)==0&&strcmp(ks_name,head->name)==0) { printf("登入成功n"); printf("n"); ks_flag=1; break; } head=head->next; } if(ks_flag==0) { printf("没有该考生信息n"); break; ks_flag=0; i=i-1; break; } ks_flag=0; head1->sum=0; int k_loop=0; int x2=0; double k_y; //试卷内容-->做题 printf("一、单选题n");//---->再将格式优化一下 printf("n"); start=0; start=clock(); x2=0; for(int k=1; k<=exam.sum1; k++) { if(exam.cq[k].shangchu_flag1!=0) { x2++; printf(" %d.%s(%d分)n",x2,exam.cq[k].stem,exam.cq[k].score); printf(" A.%s B.%s C.%s D.%sn",exam.cq[k].optionA,exam.cq[k].optionB,exam.cq[k].optionC,exam.cq[k].optionD); printf("请输入你的答案:"); scanf("%s",ks_answer); end =clock(); printf("耗时:%lf secondsn",(double)(end-start)/CLOCKS_PER_SEC); if(strcmp(ks_answer,exam.cq[k].answer)==0) { head1->sum+=exam.cq[k].score; } if((double)(end-start)/CLOCKS_PER_SEC>=exam.second) { k_loop=1; printf("考试时间到,考试结束n"); break; } printf("n"); } end =clock(); if((double)(end-start)/CLOCKS_PER_SEC>=exam.second) { k_loop=1; printf("考试时间到,考试结束"); break; } } if(k_loop==1) { printf("考试答案如下:n"); //显示成绩和各题答案: printf("一、单选题n");//---->再将格式优化一下 printf("n"); x2=0; //start=clock(); for(int k=1; k<=exam.sum1; k++) { if(exam.cq[k].shangchu_flag1!=0) { x2++; printf(" %d.%s(%d分)n",x2,exam.cq[k].stem,exam.cq[k].score); printf(" A.%s B.%s C.%s D.%sn",exam.cq[k].optionA,exam.cq[k].optionB,exam.cq[k].optionC,exam.cq[k].optionD); printf(" 正确答案:%sn",exam.cq[k].answer); printf("n"); } } x2=0; printf("二、多选题n"); printf("n"); x2=0; for(int k=1; k<=exam.sum2; k++) { if(exam.dx[k].shangchu2_flag2!=0) { x2++; printf(" %d.%s(%d分)n",x2,exam.dx[k].stem2,exam.dx[k].score2); printf(" A.%s B.%s C.%s D.%sn",exam.dx[k].optionA2,exam.dx[k].optionB2,exam.dx[k].optionC2,exam.dx[k].optionD2); printf(" 正确答案:%sn",exam.dx[k].answer2); printf("n"); } } x2=0; if(exam.sum3==0) { printf("结束n"); } else { printf("三、判断题n"); printf("n"); for(int k=1; k<=exam.sum3; k++) { x2++; if(exam.pd[k].pd_flag==1) { printf(" %d.%s(%d分)n",x2,exam.pd[k].stem3,exam.pd[k].score3); printf(" T Fn"); printf(" 正确答案:%sn",exam.pd[k].answer3); printf("n"); } } } printf("考试结束,总分为%d",exam.zhon_sum); printf("你的成绩为:%d",head1->sum); printf("n"); head1=head1->next; x2=0; k_loop=0; continue; } x2=0; printf("二、多选题n"); printf("n"); x2=0; for(int k=1; k<=exam.sum2; k++) { if(exam.dx[k].shangchu2_flag2!=0) { x2++; printf(" %d.%s(%d分)n",x2,exam.dx[k].stem2,exam.dx[k].score2); printf(" A.%s B.%s C.%s D.%sn",exam.dx[k].optionA2,exam.dx[k].optionB2,exam.dx[k].optionC2,exam.dx[k].optionD2); printf("请输入你的答案:"); scanf("%s",ks_answer1); end =clock(); printf("耗时:%lf secondsn",(double)(end-start)/CLOCKS_PER_SEC); sequence(ks_answer1); if(strcmp(ks_answer1,exam.dx[k].answer2)==0) { head1->sum+=exam.dx[k].score2; } if((double)(end-start)/CLOCKS_PER_SEC>=exam.second) { k_loop=1; printf("考试时间到,考试结束n"); break; } printf("n"); } end =clock(); if((double)(end-start)/CLOCKS_PER_SEC>=exam.second) { k_loop=1; printf("考试时间到,考试结束n"); break; } } x2=0; if(k_loop==1) { printf("考试答案如下:n"); //显示成绩和各题答案: printf("一、单选题n");//---->再将格式优化一下 printf("n"); x2=0; //start=clock(); for(int k=1; k<=exam.sum1; k++) { if(exam.cq[k].shangchu_flag1!=0) { x2++; printf(" %d.%s(%d分)n",x2,exam.cq[k].stem,exam.cq[k].score); printf(" A.%s B.%s C.%s D.%sn",exam.cq[k].optionA,exam.cq[k].optionB,exam.cq[k].optionC,exam.cq[k].optionD); printf(" 正确答案:%sn",exam.cq[k].answer); printf("n"); } } x2=0; printf("二、多选题n"); printf("n"); x2=0; for(int k=1; k<=exam.sum2; k++) { if(exam.dx[k].shangchu2_flag2!=0) { x2++; printf(" %d.%s(%d分)n",x2,exam.dx[k].stem2,exam.dx[k].score2); printf(" A.%s B.%s C.%s D.%sn",exam.dx[k].optionA2,exam.dx[k].optionB2,exam.dx[k].optionC2,exam.dx[k].optionD2); printf(" 正确答案:%sn",exam.dx[k].answer2); printf("n"); } } x2=0; if(exam.sum3==0) { printf("结束n"); } else { printf("三、判断题n"); printf("n"); for(int k=1; k<=exam.sum3; k++) { if(exam.pd[k].pd_flag==1) { x2++; printf(" %d.%s(%d分)n",x2,exam.pd[k].stem3,exam.pd[k].score3); printf(" T Fn"); printf(" 正确答案:%sn",exam.pd[k].answer3); printf("n"); } } } printf("考试结束,总分为%d",exam.zhon_sum); printf("你的成绩为:%d",head1->sum); printf("n"); head1=head1->next; k_loop=0; continue; } if(exam.sum3==0) { printf("结束n"); } else { printf("三、判断题n"); printf("n"); for(int k=1; k<=exam.sum3; k++) { if(exam.pd[k].pd_flag==1) { x2++; printf(" %d.%s(%d分)n",i,exam.pd[k].stem3,exam.pd[k].score3); printf(" T Fn"); printf("请输入你的答案:"); scanf("%s",ks_answer); end =clock(); printf("耗时:%f secondsn",(double)(end-start)/CLOCKS_PER_SEC); if(strcmp(ks_answer,exam.pd[k].answer3)==0) { head1->sum+=exam.pd[k].score3; } printf("n"); if((double)(end-start)/CLOCKS_PER_SEC>=exam.second) { printf("考试时间到,考试结束n"); break; } } end =clock(); if((double)(end-start)/CLOCKS_PER_SEC>=exam.second) { printf("考试时间到,考试结束n"); break; } } } printf("n"); printf("考试答案如下:n"); //显示成绩和各题答案: printf("一、单选题n");//---->再将格式优化一下 printf("n"); x2=0; //start=clock(); for(int k=1; k<=exam.sum1; k++) { if(exam.cq[k].shangchu_flag1!=0) { x2++; printf(" %d.%s(%d分)n",x2,exam.cq[k].stem,exam.cq[k].score); printf(" A.%s B.%s C.%s D.%sn",exam.cq[k].optionA,exam.cq[k].optionB,exam.cq[k].optionC,exam.cq[k].optionD); printf(" 正确答案:%sn",exam.cq[k].answer); printf("n"); } } x2=0; printf("二、多选题n"); printf("n"); x2=0; for(int k=1; k<=exam.sum2; k++) { if(exam.dx[k].shangchu2_flag2!=0) { x2++; printf(" %d.%s(%d分)n",x2,exam.dx[k].stem2,exam.dx[k].score2); printf(" A.%s B.%s C.%s D.%sn",exam.dx[k].optionA2,exam.dx[k].optionB2,exam.dx[k].optionC2,exam.dx[k].optionD2); printf(" 正确答案:%sn",exam.dx[k].answer2); printf("n"); } } x2=0; if(exam.sum3==0) { printf("结束n"); } else { printf("三、判断题n"); printf("n"); for(int k=1; k<=exam.sum3; k++) { if(exam.pd[k].pd_flag==1) { x2++; printf(" %d.%s(%d分)n",x2,exam.pd[k].stem3,exam.pd[k].score3); printf(" T Fn"); printf(" 正确答案:%sn",exam.pd[k].answer3); printf("n"); } } } printf("考试结束,总分为%d",exam.zhon_sum); printf("你的成绩为:%d",head1->sum); printf("n"); head1=head1->next; } } //成绩管理 void chengjiguanli(struct Xuesheng *head) { system("cls"); struct Xuesheng *tran1=head; struct Xuesheng *tran2=head; struct Xuesheng *min=head; struct Xuesheng *max=head; double ave_sum=0; char ks_name[10];//输入的名字 char ks_xuehao[15];//输入的学号 printf("n"); for(int i=0; i<=50; i++) printf("*"); printf("进入成绩分析以统计页面"); for(int i=0; i<=46; i++) printf("*"); printf("n"); //页面的设计 int x; long long zhang,mi; while(1) { printf("n"); printf("--------------------------------n"); printf("| (1)进入老师查看 |n"); printf("| (2)进入学生成绩查看 |n"); printf("| (3)退出成绩分析以统计 |n"); printf("--------------------------------n"); printf("请选择你的操作:"); scanf("%d",&x); if(x==3) break; else if(x<=0||x>3) { printf("n"); printf("没有该操作,请重新选择n"); continue; } if(x==1) { system("cls"); printf("n"); for(int i=0; i<=50; i++) printf("*"); printf("欢迎进入老师查看页面"); for(int i=0; i<=48; i++) printf("*"); printf("n"); //页面的设计 printf("请输入老师帐号:"); scanf("%lld",&zhang); printf("请输入老师的密码:"); scanf("%lld",&mi); if(zhang==zhanghao&&mi==mima) { printf("n"); for(int i=0; i<=50; i++) printf("*"); printf("成功进入老师查看页面"); for(int i=0; i<=48; i++) printf("*"); printf("n"); if(head==NULL) { printf("没有考试成绩n"); continue; } printf("以下为考试名称为%s的成绩分析n",exam.name); printf("n"); //进行排序和平均分 while(tran1) { ave_sum+=tran1->sum; if(max->sum<=tran1->sum) { max=tran1; } if(min->sum>=tran1->sum) { min=tran1; } tran1=tran1->next; } ave_sum=ave_sum/exam.sum4; //将成绩单输出 printf("------------------------------------------------------------------------------------n"); printf("| 姓名 | 学号 | 科目 | 成绩 |n ") ; printf("-------------------------------------------------------------------------------------n"); while(tran2) { printf(" %s ",tran2->name); printf(" %s ",tran2->school_number); printf(" %s ",exam.name); printf(" %d ",tran2->sum); printf("n"); tran2=tran2->next; } printf("n"); printf(" 最高分为:%d分",max->sum); printf(" 最第分为:%d分n",min->sum); } else { printf("账号或密码错误n"); continue; } } else if(x==2) { system("cls"); printf("n"); for(int i=0; i<=50; i++) printf("*"); printf("欢迎进入学生查看页面"); for(int i=0; i<=48; i++) printf("*"); printf("n"); //页面的设计 //进行判断是否有该学号学生 printf("请先进行登入n"); printf("请输入你的名字:"); scanf("%s",ks_name); printf("请输入你的学号:"); scanf("%s",ks_xuehao); int ks_flag=0; for(int j=1; j<=exam.sum4; j++) { if(strcmp(ks_xuehao,head->school_number)==0&&strcmp(ks_name,head->name)==0) { printf("登入成功n"); printf("n"); ks_flag=1; break; } head=head->next; } if(ks_flag==0) { printf("没有该考生信息n"); ks_flag=0; continue; } ks_flag=0; printf("学生名字:%sn",head->name); printf("C语言成绩:%dn",head->sum); if(head->sum<=exam.zhon_sum/2) { printf("学习建议:基础较差,要巩固课本的基础>_ o 不能实现跨天考试,只能一天内 long long textsecond(int begin1,int begin2,int end1,int end2) { printf("n"); long long t_miaoshu=0,t_sum=0; int i,t_flag=0; //用循环来统有多少分钟 while(begin1<=end1) { for(int j=begin2; j<=60; j++) { t_sum++; if(j==60) { begin1+=1; j=0; } if(begin1==end1&&j==end2) { t_flag=1; break; } } if(t_flag==1) { break; } } t_sum=(t_sum-1)*60; return t_sum; } //调整多选题的选项的降序从A~D void sequence(char a[]){ int y=strlen(a); char s_store; if(y!=1) { for(int i=0;i<(y-1);i++){ for(int j=i+1;j



