1、浏览成绩退出模块四.详细设计1、主函数【分析】 将各个功能模块设置为菜单选项,方便调用,且执行完每部分功能模块后能够方便返回到系统界面.【流程图】: 开 始 显示一系列功能选项 N输入n,判断n是否是A-H间的字母 Y根据n的值调用各功能模块函数 结束【程序代码】:menu() /*主界面*/int w1; char n; /*.变量n保存选择菜单数字,w1判断输入的数字是否在功能菜单对应数字范围内*/ do puts(tt*菜单*nn);ttttA. 录入学生信息ttttB.修改学生记录ttttC.删除一个学生记录ttttD.登记成绩ttttE.修改成绩ttttF.浏览全班成绩ttttG.退
2、出 puts(nntt*n printf(操作选择(A-H): bb n=getchar();n if(nH) w1=1; /*对选择的数字作判断*/ else w1=0; while(w1=1); switch(n) /*选择功能*/ case :enter();break; /*输入模块*/ case B modify (); /*修改模块*/ case C delete (); /*删除模块*/D add(); /*登记成绩模块*/E modify_score (); /*修改成绩模块*/Fbrowse (); /*浏览模块*/Gexit (0); /*退出模块*/main() /*主函
3、数*/ menu();2、各功能模块设计(1) 输入模块【数据分析】:单看各数据信息,学号年龄以及数学英语物理各科成绩和总分均是整型,姓名可以采用字符型数组.数据信息存放在文件中,一条记录对应一个学生,既符合习惯也方便信息管理.把学生的学号姓名年龄各科成绩及总分作为结构体成员,存放若干个学生信息就用结构体数组.【流程图】:输入用户要输入学生记录的个数ni从0到n-1调用输入函数input(i)调用保存函数save(n)【程序代码】enter() /*输入模块*/int i,n;How many students(1-%d)?,N); scanf(%d,&n); /*要输入的记录个数*/nEnt
4、er data nownn for(i=0;in;i+)printf(n Input %dth student record.n,i+1); input(i); /*调用输入函数*/ if(i!=0) save(n); /*调用保存函数*/ printf_back(); /*一个任务结束时让用户选择是浏览还是返回*/(2)修改模块【分析】:该模块的功能是显示所有学生信息,考虑到记录很多,故采用分屏显示。显示完所有记录后,用户输入要修改学生的学号,根据学号查找学生记录,并提示用户修改该记录的哪部分信息,是学号、姓名、年龄或某科成绩、总分还是所有信息都修改,根据用户选择修改相应信息。返回主菜单YN
5、modify() /*修改模块*/ struct student s; FILE *fp; int i,n,k,w0=1,w1,w2=0; n=load(); k=-1;/*给用户看全部记录以便确认要修改的记录*/ printf_face(); /*调用显示数据结构项目函数*/ for(i=0; if(i!=0)&(i%10=0) /*目的是分屏显示*/ printf(nn请输入您要修改的学生编号(No.073101-).按任意键继续 . getch(); puts(nn printf_one(i); printf( donn请输入您要修改的学生编号(No.073101-)! NO.:0731
6、01- scanf(s.num); /*输入要修改的数据的学号*/ for(i=0;i+)/*查找要修改的数据*/ if(s.num=stui.num) k=i;/*找到要修改的记录*/ s=stui;/* 把stui备份给s,以便用户反悔时恢复*/ if(k=-1) printf(nn记录不存在,请重新输入! while(k=-1);/*当k=-1表示没有找到*/ printf_one(k);/*调用显示一个记录的函数*/ w1=modify_data(k,n);/*修改学生记录并且返回保存控制值w1,w1=1 则表示用户已确认修改*/ if(w1=1) /*确认修改*/n修改成功! _.n
7、n是否继续修改?nnt1.是2.返回并保存t bbw0); w2=1;/*来控制保存,使w2=1是标记已有过修改*/ else w0=0; /*结束*/ if(w2=1) stuk=s; /*没有修改,把备份的s恢复,使w0=0是为了让循环终止*/ if(w0!=1&w2=1) save(n);/*正常返回,且有过修改 */ while(w0=1);(3)删除模块该模块的功能是与修改模块一样先显示所有的学生信息,同样考虑到记录很多,采用分屏显示。显示完所有记录后,用户输入要删除学生的学号,根据学号查找学生记录并删除。删除一般的做法是将数据从文件中删除,删除位置后面的记录往前挪。显示所有记录,让
8、用户看哪个要删除输入要删除的学号是否找到此学生记录 N显示找到的记录 提示没有找到使stuk.sum=0继续删除?【程序代码】:delete() /*删除模块*/(i%10=0)/*分屏显示*/nn请输入您要删除的学生编号(No.073101-).按任意键继续.nn请输入您要删除的学生编号(No.073101-)!/*将要删除的记录备份给s */ printf(n确定删除?nnt1.是2.此次返回,但不保存 bb scanf(w1); if(w1=1) stuk.sum=0;/*标记为0后,保存时便不保存*/n成功删除! _.nn是否继续删除?/*确认删除*/ /* end */*正常返回且已
9、删除*/(4)登记成绩模块该模块的功能是用户需要增加新的学生记录, 请从键盘输入并逐条写到原来的输入文件中.调用加载函数n=load();并计算可以记录个数n输入用户要添加学生记录的个数mK=m+n i从n到k调用输入函数input(i)保存添加的记录add()/*登记成绩模块*/ int i,n,m,k;您要添加几个学生(1-%d)?,N-n);m); /*输入要添加的记录个数*/ k=m+n; for(i=n;k;n 请输入第%d个学生数据.n input(i);/*调用输入函数*/ if(fp=fopen(score.txt,ab)=NULL)/*以ab方式打开文件,添加保存*/不能打开
10、此文件.ni+)/*输出到文件*/ if(fwrite(&stui,sizeof(struct student),1,fp)!=1)文件写入错误.n fclose(fp); printf_back(); /*一个任务结束时的选择浏览还是返回*/(5)修改成绩模块该模块的功能是修改各科成绩或全体成绩。modify_score()/*修改成绩模块*/nn请输入您要修改成绩的学生编号(No.073101-)!.按任意键继续. /*输入要修改的学生学号*/* 将要修改的记录备份*/ if(k=-1) printf(nn记录不存在,请再次输入! w1=modify_score1(k);/*调用修改成绩函
11、数*/ _.nn是否继续修改成绩?nnt1.是2.保存并返回t bb/*确认修改*/*正常返回且已修改*/(6)浏览模块该模块的功能是显示所有学生记录信息。browse()/*浏览模块*/ int i,j,n;/*加载记录*/ printf_face();/*调用显示数据结构项目函数*/ if(i!(i%10=0) /*分屏显示*/nn按任意键继续 . getch(); puts( printf_one(i);t共有%d项记录.n,n);n按任意键返回. getch();/*按任意键*/3、一些公共函数下面是在每个模块中都有可能用到的一些公共函数。(1)保存函数save(int n)【说明】形
12、参n控制保存的个数。当stuk.sum=0表示删除,不保存该记录。save(int n) /*保存函数,保存n个记录*/ int i;wb)=NULL)/*以输出打开方式,在此前的记录被覆盖*/n不能打开此文件n return NULL; if(stui.sum!=0) /*stui.sum=0表示该记录已删除*/ if(fwrite(&文件写入错误n fclose(fp);(2)加载函数load()该函数可以用来加载所有记录,并且可以返回所有记录的个数。load()/*加载记录或可以计算记录个数的函数*/rb!feof(fp); fread(&stui,sizeof(struct stude
13、nt),1,fp); fclose(fp); return(i-1); /*返回记录个数*/(3)学号输入函数no_input(int i,int n)该函数对输入学号进行判断,确保输入的学号唯一。形参i表示第i个学生记录,形参n表示总共有n个学生记录。no_input(int i,int n) /*学号输入函数*/ int k,w1; w1=0;NO.:stui.num); if(stui.numN)/*判断学号是否在1到N之间*/输入错误! 学号只能在(1-N)之间.请重新输入! w1=1; if(w1! for(k=0;knn 1.数学 2.英语 3.物理 4.总分 5.取消并返回您需要
14、修改?/*输入选择作个判断*/c); if(c5|c1); switch(c)/*选择要修改的项目*/ case 1:数学:stui.Math); case 2:英语:stui.English); case 3:物理: case 4:enter_score(i);/*调用成绩输入函数*/ case 5:0&c5) sum(i);/*调用求总分函数*/n现在:/*修改后的记录让用户确认*/n确认修改?nnt1.是 2.否,重新修改 3.此次保存并返回 bb/*输入2表示重新修改*/ while(w1=2); return(w1);(8)修改记录函数modify_data(int i,int n)形参i表示第i个学生成绩记录,形参n表示有n个记录,此函数带回保存控制值w1,当w1=1时表示确认保存。modify_data(int i,int n)/*修改记录函数*/nn 1.编号 2.姓名 3.年龄 4.数学 5.英语 6.物理 7.总分 8.所有数据 9.取消并返回
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2