一、课程设计的目的提高程序设计能力,检验课堂教学内容,掌程序设计的基本方法和调试技能。二、课程设计报告正文题目该系统应该具有下列功能:(1)录入某位学生的学生证信息。(2)给定学号,显示某位学生的学生证信息。(3)给定某个班级的班号,显示该班所有学生的学生证信息。(4)给定某位学生的学号,修改该学生的学生证信息。(5)给定某位学生的学号,删除该学生的学生证信息。(6)提供一些统计给类信息的功能。【输入要求】应用程序运行后,在屏幕上显示一个菜单。用户可以根据要求,选定相应的操作项目。进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。【输出要求】(1)应用程序运行后,要在屏幕上显示一个菜单。(2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。【提示】设计时可采用结构体类型和一维数组类型,用来保存学生证的内容。三、分析由于题目要求给出清晰明确懂得信息,所以在程序中要提供各种不同功能的模块。四、总体设计五、具体设计及分析1.主函数信息输入模块信息查询模块信息修改模块信息删除模块信息统计模块功能选择系统模块主函数主要提供菜单界面以及各模板函数的调用。以结构体的形式定义。通过直到型循环以及switch语句来实现各功能模块的调用以及循环。#includestdio.h#defineM30main()/*主函数菜单*/{intn,w;do{puts(\t\t***********************MENU*************************\n\n);puts(\t\t\t\t1.录入\n);puts(\t\t\t\t2.查询\n);puts(\t\t\t\t3.修改\n);puts(\t\t\t\t4.删除\n);puts(\t\t\t\t5.统计\n);puts(\t\t\t\t6.退出\n);puts(\n\t\t****************************************************\n);printf(请选择你需要做什么(1-6):[]\b\b);scanf(%d,&n);if(n1||n6){w=1;getchar();}elsew=0;}while(w==1);switch(n){case1:scanf_student();break;case2:search();break;case3:revise();break;case4:delete_student();break;case5:stat();break;case6:exit(0);}}structstudent/*定义结构体*/{charnum[10];charclass_num[10];charname[10];charsex[4];charnation[10];charnative[10];intborn;intave;}2.各功能模块的设计(1)输入模块主要用于录入学生的学生证信息,调用添加各文件函数intscanf_student(){intn;n=load();/*调用加载文件函数*/input(n);/*调用添加记录函数*/save(n);/*调用保存函数*/printf_back();/*调用选择返回或结束函数*/}intload()/*加载文件记录并计算学生个数函数*/{FILE*fp;inti;if((fp=fopen(studentcard.txt,rb))==NULL){printf(\nCannotopenfile\n);returnNULL;}for(i=0;!feof(fp);i++)fscanf(fp,%s%s%s%s%s%s%d%d,st[i].num,st[i].class_num,st[i].name,st[i].sex,st[i].nation,st[i].native,&st[i].born,&st[i].ave);fclose(fp);return(i);}intinput(inti){bijiao_num(i);/*调用确认学号不重复函数*/class_input(i);/*调用输入班号函数*/printf(\n姓名:);scanf(%s,st[i].name);printf(\n性别:);scanf(%s,st[i].sex);printf(\n民族:);scanf(%s,st[i].nation);printf(\n籍贯:);scanf(%s,st[i].native);printf(\n出生年月:);scanf(%d,&st[i].born);st[i].ave=1;}intnum_input(inti)/*输入学号函数*/{intj,k,w;do{w=0;printf(\n学号:);scanf(%s,st[i].num);for(j=0;st[i].num[j]!='\0';j++)/*确认学号仅由数字组成*/if(st[i].num[j]'0'||st[i].num[j]'9'){printf(输入错误!!学号仅有0-9的数字组成!请重新输入);w=1;break;}}while(w==1);}intbijiao_num(inti)/*确认学号不重复函数*/{intj,k,w;do{w=0;printf(\n学号:);scanf(%s,st[i].num);for(j=0;st[i].num[j]!='\0';j++)/*确认学号仅由数字组成*/if(st[i].num[j]'0'||st[i].num[j]'9'){printf(输入错误!!学号仅有0-9的数字组成!请重新输入);w=1;break;}if(w!=1)for(k=0;ki;k++)/*确认学号不重复*/if(strcmp(st[k].num,st[i].num)==0){printf(这个学号已经存在!!请重新输入!\n);w=1;break;}}while(w==1);}intclass_input(inti)/*班号输入函数*/{intj,k,w;do{w=0;printf(\n班号:);scanf(%s,st[i].class_num);for(j=0;st[i].class_num[j]!='\0';j++)/*确认班号仅由数字组成*/if(st[i].class_num[j]'0'||st[i].class_num[j]'9'){printf(输入错误!!班号仅有0-9的数字组成!请重新输入);w=1;break;}}while(w==1);}(2)查询模块主要用于根据题目的要求来查询各学生的信息。search(){intn,w;do{puts(\t\t***********************MENU*************************\n\n);puts(\t\t\t\t1.按学号查询\n);puts(\t\t\t\t2.按班号查询\n);puts(\t\t\t\t3.返回\n);puts(\n\t\t****************************************************\n);printf(请选择你需要做什么(1-3):[]\b\b);scanf(%d,&n);if(n1||n3){w=1;getchar();}elsew=0;}while(w==1);switch(n){case1:search_num();break;/*调用按学号查询函数*/case2:search_class();break;/*调用按班号查询函数*/case3:menu();/*调用主菜单函数*/}}intsearch_num()/*按学号查询函数*/{intn,i;chara[10];printf(\n请输入要查询学生的学号:);scanf(%s,a);n=load();/*调用加载函数*/for(i=0;in;i++){if(strcmp(st[i].num,a)==0){printf_face();/*调用显示数据结构项目函数*/printf_one(i);/*调用输出一个学生数据函数*/break;}}if(i==n)/*判断是否查找到*/printf(\n没有找到您要查询的学生!请核对无误后重新输入!);printf_back();}printf_face(){printf(\n学号班号姓名性别民族籍贯出生年份\n);}printf_one(inti){printf(%s%s%s%s%s%s%d\n,st[i].num,st[i].class_num,st[i].name,st[i].sex,st[i].nation,st[i].native,st[i].born);}intsearch_class()/*按班号查询函数*/{intn,i,k=0;charb[10];printf(\n请输入要查询的班号:);scanf(%s,b);n=load();/*调用加载函数*/printf_face();/*调用显示数据结构项目函数*/for(i=0;in;i++){if(strcmp(st[i].class_num,b)==0){printf_one(i);/*调用输出一个学生数据函数*/k++;}}if(k==0)/*判断是否查找到*/printf(\n没有找到您要查询的班号!请核对无误后重新输入!);elseprintf(\n共查找到该班学生%d个,k);printf_back();}(3)修改模块主要用于根据学生的学号,修改该学生的学生证信息。ntrevise(){intn,m;n=load();/*调用加载文件函数*/m=queren();/*调用确认修改函数*/revise_one(m);/*调用修改一个学生信息函数*/save(n);/*调用保存函数*/printf_back();}intqueren()/*确认修改或删除函数*/{inti,n,c;n=load();printf(\n请输入要修改或删除学生的学号:);num_input(n+1);for(i=0;in+1;i++)/*查找要修改或删除的学生*/if(strcmp(st[n+1].num,st[i].num)==0)break;if(i==n+1)printf(没有找到你输入的学号的学生!!请确认无误后重新输入!);elseprintf_one(i);/*输出该学生信息*/printf(输入1确认修改或删除\n输入0返回主菜单:);/*确认修改*/scanf(%d,&c);if(c==1)return(i);elseprintf_back();}revise_one(inti)/*修改一个学生信息函数*/{printf_face;input(i);/*调用学生信息输入函数*/}(4)删除模块主要用于根据学生的学号,删除该学生的学生证信息。intdelete_student(){intm,n;n=load();m=queren();st[m].ave=0;/*表示该记录要删除*/save(n);printf_back();}(5)统计模块主要用于提供和统计各类信息,显示学生的信息。主要按班号,性别,籍贯,民族,出生来统计。intstat(){intn,w;do{puts(\t\t***********************MENU*************************\n\n);puts(\t\t\t\t1.按班号统计\n);puts(\t\t\t\t2.按性别统计\n);puts(\t\t\t\t3.按民族统计\n);puts(\t\t\t\t4.按籍贯统计\n);puts(\t\t\t\t5.按出生时间\n);puts(\t\t\t\t6.返回\n);puts(\n\t\t****************************************************\n);printf(请选择你需要做什么(1-6):[]\b\b);scanf(%d