




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c语言课程设计报告院系:机械与电子信息学院姓名:王 鹏 飞班号:07310126学号:20101003558指导教师:龚文引日期:2011年7月学生成绩管理系统一、 题目要求设计一个学生成绩管理程序,对在校某班学生几门课程的考试成绩进行统一管理。每个学生记录包括学号、姓名、年龄、数学、英语、物理成绩,默认以学号为序存放。(1)一个文件按以班为单位存储学生记录。(2)将允许的操作分为四种,以a、b、c、d、e、f为标志(若设置菜单操作更佳): a:插入一个新的学生记录(录入学生信息);b:修改学生记录;c:删除一个学生记录;d:登记成绩;e:修改成绩;f:浏览全班成绩。(3)计算学生的总成绩。(4)按学号排序输出全班成绩表。二、需求分析根据题目要求,由于学生信息是存放在文件中,所以应提供文件的输入、输出等操作;在程序中需要浏览学生的信息,应提供添加、修改、删除、排序等操作;另外还应提供键盘式选择菜单实现功能选择。三、总体设计根据上面的需求分析,可以将这个系统的设计分为8个模块,数据输入,添加数据,修改数据,删除数据,修改成绩,学号排序,浏览成绩,退出模块.学生成绩管理系统数据输入添加数据修改数据删除数据修改成绩学号排序浏览成绩退出模块四.详细设计1、主函数【分析】 将各个功能模块设置为菜单选项,方便调用,且执行完每部分功能模块后能够方便返回到系统界面.【流程图】:开 始 显示一系列功能选项 n输入n,判断n是否是a-h间的字母 y根据n的值调用各功能模块函数 结束【程序代码】:menu() /*主界面*/int w1; char n; /*.变量n保存选择菜单数字,w1判断输入的数字是否在功能菜单对应数字范围内*/ do puts(tt*菜单*nn); puts(tttta. 录入学生信息); puts(ttttb.修改学生记录); puts(ttttc.删除一个学生记录); puts(ttttd.登记成绩); puts(tttte.修改成绩); puts(ttttf.浏览全班成绩); puts(ttttg.退出); puts(nntt*n); printf(操作选择(a-h): bb); n=getchar(); printf(n); if(nh) w1=1; /*对选择的数字作判断*/ else w1=0; while(w1=1); switch(n) /*选择功能*/ case a:enter();break; /*输入模块*/ case b: modify ();break; /*修改模块*/ case c: delete ();break; /*删除模块*/ case d: add();break; /*登记成绩模块*/ case e: modify_score ();break; /*修改成绩模块*/ case f:browse ();break; /*浏览模块*/ case g:exit (0); /*退出模块*/ main() /*主函数*/ menu();2、各功能模块设计(1) 输入模块【数据分析】:单看各数据信息,学号年龄以及数学英语物理各科成绩和总分均是整型,姓名可以采用字符型数组.数据信息存放在文件中,一条记录对应一个学生,既符合习惯也方便信息管理.把学生的学号姓名年龄各科成绩及总分作为结构体成员,存放若干个学生信息就用结构体数组.【流程图】:输入用户要输入学生记录的个数n i从0到n-1调用输入函数input(i) i!=0 y调用保存函数save(n)【程序代码】enter() /*输入模块*/int i,n; printf(how many students(1-%d)?:,n); scanf(%d,&n); /*要输入的记录个数*/ printf(nenter 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)修改模块【分析】:该模块的功能是显示所有学生信息,考虑到记录很多,故采用分屏显示。显示完所有记录后,用户输入要修改学生的学号,根据学号查找学生记录,并提示用户修改该记录的哪部分信息,是学号、姓名、年龄或某科成绩、总分还是所有信息都修改,根据用户选择修改相应信息。【流程图】: 返回主菜单显示所有记录,让用户看哪个要修改输入要修改的学号显示找到的记录调用修改函数提示没有找到y继续修改?是否找到此记录yyyyy nyn 【程序代码】:modify() /*修改模块*/struct student s;file *fp;int i,n,k,w0=1,w1,w2=0;n=load();dok=-1;/*给用户看全部记录以便确认要修改的记录*/printf_face(); /*调用显示数据结构项目函数*/for(i=0;in;i+)if(i!=0)&(i%10=0) /*目的是分屏显示*/printf(nn请输入您要修改的学生编号(no.073101-).按任意键继续 .);getch();puts(nn);printf_one(i);printf(n);doprintf(nn请输入您要修改的学生编号(no.073101-)! no.:073101-);scanf(%d,&s.num); /*输入要修改的数据的学号*/for(i=0;in;i+)/*查找要修改的数据*/if(s.num=stui.num)k=i;/*找到要修改的记录*/s=stui;/* 把stui备份给s,以便用户反悔时恢复*/ if(k=-1) printf(nn记录不存在,请重新输入!);while(k=-1);/*当k=-1表示没有找到*/printf_face();printf_one(k);/*调用显示一个记录的函数*/w1=modify_data(k,n);/*修改学生记录并且返回保存控制值w1,w1=1则表示用户已确认修改*/if(w1=1) /*确认修改*/printf(n修改成功! _.nn是否继续修改?nnt1.是2.返回并保存t bb);scanf(%d,&w0);w2=1;/*来控制保存,使w2=1是标记已有过修改*/elsew0=0; /*结束*/if(w2=1)stuk=s;/*没有修改,把备份的s恢复,使w0=0是为了让循环终止*/if(w0!=1&w2=1)save(n);/*正常返回,且有过修改 */while(w0=1);menu();(3)删除模块【分析】:该模块的功能是与修改模块一样先显示所有的学生信息,同样考虑到记录很多,采用分屏显示。显示完所有记录后,用户输入要删除学生的学号,根据学号查找学生记录并删除。删除一般的做法是将数据从文件中删除,删除位置后面的记录往前挪。【流程图】:显示所有记录,让用户看哪个要删除输入要删除的学号显示所有记录,让用户看哪个要删除显示所有记录,让用户看哪个要删除 是否找到此学生记录 y n显示找到的记录 提示没有找到使stuk.sum=0y继续删除?n返回主菜单【程序代码】:delete() /*删除模块*/struct student s;file *fp;int i,n,k,w0=1,w1,w2=0;n=load();dok=-1;printf_face();for(i=0;in;i+)if(i!=0)&(i%10=0)/*分屏显示*/printf(nn请输入您要删除的学生编号(no.073101-).按任意键继续.);getch();puts(nn);printf_one(i);printf(n);doprintf(nn请输入您要删除的学生编号(no.073101-)! no.:073101-);scanf(%d,&s.num);for(i=0;in;i+)if(s.num=stui.num)k=i;s=stui;/*将要删除的记录备份给s */if(k=-1) printf(nn记录不存在,请重新输入!);while(k=-1);printf_face();printf_one(k);printf(n确定删除?nnt1.是2.此次返回,但不保存 bb);scanf(%d,&w1);if(w1=1)stuk.sum=0;/*标记为0后,保存时便不保存*/printf(n成功删除! _.nn是否继续删除?nnt1.是2.返回并保存t bb);scanf(%d,&w0);w2=1;/*确认删除*/elsew0=0; /* end */if(w2=1)stuk=s;if(w0!=1&w2=1)save(n);/*正常返回且已删除*/while(w0=1);menu();(4)登记成绩模块【分析】:该模块的功能是用户需要增加新的学生记录, 请从键盘输入并逐条写到原来的输入文件中.【流程图】:调用加载函数n=load();并计算可以记录个数n输入用户要添加学生记录的个数m k=m+n i从n到k调用输入函数input(i)保存添加的记录【程序代码】:add()/*登记成绩模块*/int i,n,m,k;file *fp;n=load();printf(您要添加几个学生(1-%d)?:,n-n);scanf(%d,&m); /*输入要添加的记录个数*/k=m+n;for(i=n;ik;i+)printf(n 请输入第%d个学生数据.n,i+1);input(i);/*调用输入函数*/if(fp=fopen(score.txt,ab)=null)/*以ab方式打开文件,添加保存*/printf(不能打开此文件.n);for(i=n;ik;i+)/*输出到文件*/if(fwrite(&stui,sizeof(struct student),1,fp)!=1)printf(文件写入错误.n);fclose(fp);printf_back(); /*一个任务结束时的选择浏览还是返回*/(5)修改成绩模块【分析】:该模块的功能是修改各科成绩或全体成绩。【流程图】:返回主菜单显示所有记录,让用户看哪个要修改输入要修改的学号显示找到的记录调用修改函数提示没有找到y继续修改?是否找到此记录yyyyy n【程序代码】:modify_score()/*修改成绩模块*/struct student s;file *fp;int i,n,k,w0=1,w1,w2=0;n=load();dok=-1;printf_face();for(i=0;in;i+)if(i!=0)&(i%10=0)/*分屏显示*/printf(nn请输入您要修改成绩的学生编号(no.073101-)!.按任意键继续.);getch();puts(nn);printf_one(i);printf(n);doprintf(nn请输入您要修改成绩的学生编号(no.073101-)! no.:073101-);scanf(%d,&s.num); /*输入要修改的学生学号*/for(i=0;in;i+)if(s.num=stui.num)k=i;s=stui;/* 将要修改的记录备份*/if(k=-1) printf(nn记录不存在,请再次输入!);while(k=-1);printf_face();printf_one(k);w1=modify_score1(k);/*调用修改成绩函数*/if(w1=1)printf(n修改成功! _.nn是否继续修改成绩?nnt1.是2.保存并返回t bb);scanf(%d,&w0);w2=1;/*确认修改*/elsew0=0; /*结束*/if(w2=1)stuk=s;if(w0!=1&w2=1)save(n);while(w0=1);/*正常返回且已修改*/menu();(6)浏览模块【分析】:该模块的功能是显示所有学生记录信息。【流程图】:显示学生记录,十个一屏按任意键显示下一屏按任意键返回主菜单【程序代码】:browse()/*浏览模块*/int i,j,n;n=load();/*加载记录*/printf_face();/*调用显示数据结构项目函数*/for(i=0;in;i+)if(i!=0)&(i%10=0) /*分屏显示*/printf(nn按任意键继续 .);getch();puts(nn);printf_one(i);/*调用显示一个记录的函数*/printf(n);printf(t共有%d项记录.n,n);printf(n按任意键返回.);getch();/*按任意键*/menu();3、一些公共函数下面是在每个模块中都有可能用到的一些公共函数。(1)保存函数save(int n)【说明】形参n控制保存的个数。当stuk.sum=0表示删除,不保存该记录。【程序代码】save(int n) /*保存函数,保存n个记录*/file *fp;int i;if(fp=fopen(score.txt,wb)=null)/*以输出打开方式,在此前的记录被覆盖*/printf(n不能打开此文件n);return null;for(i=0;in;i+)if(stui.sum!=0) /*stui.sum=0表示该记录已删除*/if(fwrite(&stui,sizeof(struct student),1,fp)!=1)printf(文件写入错误n);fclose(fp);(2)加载函数load()【说明】该函数可以用来加载所有记录,并且可以返回所有记录的个数。【程序代码】load()/*加载记录或可以计算记录个数的函数*/file *fp;int i;if(fp=fopen(score.txt,rb)=null)/*以输出打开方式,在此前的记录被覆盖*/printf(n不能打开此文件n);return null;for(i=0;!feof(fp);i+)fread(&stui,sizeof(struct student),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;dow1=0;printf(no.:073101-);scanf(%d,&stui.num);if(stui.numn)/*判断学号是否在1到n之间*/puts(输入错误! 学号只能在(1-n)之间.请重新输入!n);w1=1;if(w1!=1)for(k=0;knn 1.数学 2.英语 3.物理 4.总分 5.取消并返回);printf(您需要修改?: bb);/*输入选择作个判断*/scanf(%d,&c);if(c5|c5|c0&cnn 1.编号 2.姓名 3.年龄 4.数学 5.英语 6.物理 7.总分 8.所有数据 9.取消并返回);printf(您需要修改?: bb);/*对输入选择作判断*/scanf(%d,&c);if(c9|c9|c3&c8) sum(i);puts(n现在:n);printf_face();printf_one(i);printf(n确认修改?nnt1.是 2.否,重新修改 3.此次返回并保存 bb);sca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年职业规划师资格考试试卷及答案
- 2025年行业发展趋势与政策分析考试题及答案
- 2025年人口与发展研究生入学考试试卷及答案
- 2025年区域经济与发展战略分析试卷及答案
- 2025年企业税务筹划考试试卷及答案
- 2025年建筑安全与质量管理考试试题及答案
- 2025年广告设计师职业资格考试卷及答案
- 2025年中国立式移动冰箱行业市场全景分析及前景机遇研判报告
- 2024年度浙江省护师类之主管护师通关考试题库带答案解析
- 中医护理在疼痛中的应用
- 2024北京海淀区四年级(下)期末语文试题及答案
- 小学生作文指导智慧树知到期末考试答案章节答案2024年温州大学
- 测试工具键盘客显机-顾客显示屏led8说明书
- 多媒体设备日常维护与维修服务方案
- 卷烟工厂MES系统技术方案
- 辊压机培训ppt课件
- ghost制作 驱动自动安装
- 译林小学英语5B教材分析
- 江苏省常州市2024届高一数学下学期期末质量调研试题(含解析)
- 新标准大学英语(第二版)综合教程2 Unit 1 A篇练习答案及课文翻译
- 冀教版英语小升初模拟试卷
评论
0/150
提交评论