还剩15页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
数据结构课程设计报告姓名学号班级2015年6月8日
1.题目和要求
1.1问题提出与要求学生成绩管理系统[要求]设计一个学生成绩管理系统,对在校某班学生几门课程的考试成绩进行统一管理每个学生记录包括学号、姓名、年龄、数学、英语、物理成绩,默认以学号为序存放
(1)一个文件按以班为单位存储学生记录
(2)将允许的操作分为六种A:插入一个新的学生记录(录入学生信息)B:修改学生记录C:删除一个学生记录D:登记成绩E:____F:浏览全班成绩
(3)计算学生的总成绩
(4)输出全班成绩表
1.2需求分析.根据题目要求由于学生信息是存放在文件中所以应提供文件的输入输出等操作;在程序中需要浏览学生的信息应提供显示查找排序等操作;另外还应提供键盘式选择菜单实现功能选择.
2.功能实现设计:
2.1总体设计:分析系统根据题目的需求分析,可将这个系统设计为六大模块(见下图)插入学生信息,修改,删除,登记,浏览,统计
2.2详细设计:
1、主函数主函数设计得比较简洁,只提供输入、功能处理和输出部分的函数调用其中各功能模块用菜单方式选择;其流程图如下[程序]void__in{inta;do{printf\t\t\t\t\n;printf\t\t\t\t学生成绩管理系统\n;printf\n;printf\t\t\t__:梁天江班级:072084-31学号:20081004528\n;printf\t\t\t-------------------------------------------\n\n;printf\t
1.插入新的学生记录\n;printf\t
2.修改学生记录\n;printf\t
3.删除学生记录\n;printf\t
4.显示学生成绩和总分\n;printf\t
5.浏览全班成绩\n;printf\t
6.退出\n\n;printf输入你要操作的序号:;scanf%da;switcha{case1:printf\n;input;break;case2:printf\n;change;break;case3:printf\n;del;break;case4:printf\n;allgrade;break;case5:printf\n;paixu;break;case6:printf\n;exit0;break;default:printf\nThechoi__isbetween1to
6.\n;}}whilea!=0;
2、各功能模块设计
(1)插入模块voidinput{intj;charch
[20];printf\n输入学生信息:\n;do{printf\n学号:;scanf%sstu[k].num;printf\n姓名:;scanf%sstu[k].name;printf\n年龄:;scanf%dstu[k].age;forj=0;j3;j++{printf\n成绩%d:j+1;scanf%dstu[k].grade[j];}k++;printf\n如要继续,请输入学生信息y/n:;scanf%sch;}whilestrcmpchy==0||strcmpchY==0;outputgrade;}voidoutputgrade{inti;printf学生信息是:\n;fori=0;ik;i++{printf\t%s\t%s\t%d\t%d\t%d\t%dstu[i].numstu[i].namestu[i].agestu[i].grade
[0]stu[i].grade
[1]stu[i].grade
[2];printf\n;}}
(2)修改模块输入要修改的学号YNYNvoidchange{intij;chara
[20]ch
[10];printf\n输入你要修改的学生学号:;scanf%sa;fori=0;ik;i++{ifstrcmpstu[i].numa==0{printf\n你确定要修改学号吗?y/n:;scanf%sch;ifstrcmpchy==0||strcmpchY==0{printf\nnum:;scanf%sstu[i].num;}printf\n你确定要修改学生姓名吗?y/n:;scanf%sch;ifstrcmpchy==0||strcmpchY==0{printf\nname;scanf%sstu[i].name;}printf\n你确定要修改学生成绩吗?y/n:;scanf%sch;printf\n;ifstrcmpchy==0||strcmpchY==0forj=0;j3;j++{printfgrade%d j+1;scanf%dstu[i].grade[j];printf\n;}}}outputgrade;}
(3)删除模块输入要删除的学号YNYNvoiddel{intij;charc
[20];printf\n输入你要删除的学生学号\n;printfnum;scanf%sc;fori=0;i3;i++ifstrcmpcstu[i].num==0break;forj=i;j=2;j++stu[j]=stu[j+1];printf\t\t\t你已经删除%s的信息\nc;k--;outputgrade;}
(4)显示模块(显示学生成绩总分)voidallgrade{inti;floatsum=0;fori=0;ik;i++{printf\t%d\t%d\t%d\nstu[i].grade
[0]stu[i].grade
[1]stu[i].grade
[2];sum=sum+stu[i].grade
[0]+stu[i].grade
[1]+stu[i].grade
[2];}printf总成绩是%fsum;}
(5)浏览模块(浏览全班学生成绩并按学号排序)voidpaixu{structstudenttemp;intij;fori=0;ik-1;i++{forj=i+1;jk;j++{ifstu[i].numstu[j].num{temp=stu[i];stu[i]=stu[j];stu[j]=temp;}}}outputgrade;}
2.上机操作
1、数据源全班学生信息文件student.___格式每行储存一个学生信息,内容包括学生学号、姓名、年龄、数学成绩、英语成绩、物理成绩例如01zhao
189080852、编译、链接和运行(略)
3、结果
(1)主菜单函数效果如下图所示
(2)插入模块在主界面出现后输入1回车,即可插一个学生信息,包括学号、姓名、年龄、数学、英语、物理成绩如下图所示
(3)修改模块
(4)删除模块
(5)显示模块(显示全班学生成绩和总分)
(6)浏览模块
4.下面附上此次C语言课程设计的源程序#includestdio.h#includestring.h#includestdlib.h#includeconio.hstructstudent{charnum
[10];charname
[12];intage;intgrade
[3];}stu
[20];intk=0;voidinput;voidoutputgrade;voidchange;voiddel;voidallgrade;voidpaixu;void__in{inta;do{printf\t\t\t\t\n;printf\t\t\t\t学生成绩管理系统\n;printf\n;printf\t\t\t__:梁天江班级:072084-31学号:20081004528\n;printf\t\t\t-------------------------------------------\n\n;printf\t
1.插入新的学生记录\n;printf\t
2.修改学生记录\n;printf\t
3.删除学生记录\n;printf\t
4.显示学生成绩和总分\n;printf\t
5.浏览全班成绩\n;printf\t
6.退出\n\n;printf输入你要操作的序号:;scanf%da;switcha{case1:printf\n;input;break;case2:printf\n;change;break;case3:printf\n;del;break;case4:printf\n;allgrade;break;case5:printf\n;paixu;break;case6:printf\n;exit0;break;default:printf\nThechoi__isbetween1to
6.\n;}}whilea!=0;}voidinput{intj;charch
[20];printf\n输入学生信息:\n;do{printf\n学号:;scanf%sstu[k].num;printf\n姓名:;scanf%sstu[k].name;printf\n年龄:;scanf%dstu[k].age;forj=0;j3;j++{printf\n成绩%d:j+1;scanf%dstu[k].grade[j];}k++;printf\n如要继续,请输入学生信息y/n:;scanf%sch;}whilestrcmpchy==0||strcmpchY==0;outputgrade;}voidoutputgrade{inti;printf学生信息是:\n;fori=0;ik;i++{printf\t%s\t%s\t%d\t%d\t%d\t%dstu[i].numstu[i].namestu[i].agestu[i].grade
[0]stu[i].grade
[1]stu[i].grade
[2];printf\n;}}voidchange{intij;chara
[20]ch
[10];printf\n输入你要修改的学生学号:;scanf%sa;fori=0;ik;i++{ifstrcmpstu[i].numa==0{printf\n你确定要修改学号吗?y/n:;scanf%sch;ifstrcmpchy==0||strcmpchY==0{printf\nnum:;scanf%sstu[i].num;}printf\n你确定要修改学生姓名吗?y/n:;scanf%sch;ifstrcmpchy==0||strcmpchY==0{printf\nname;scanf%sstu[i].name;}printf\n你确定要修改学生成绩吗?y/n:;scanf%sch;printf\n;ifstrcmpchy==0||strcmpchY==0forj=0;j3;j++{printfgrade%d j+1;scanf%dstu[i].grade[j];printf\n;}}}outputgrade;}voiddel{intij;charc
[20];printf\n输入你要删除的学生学号\n;printfnum;scanf%sc;fori=0;i3;i++ifstrcmpcstu[i].num==0break;forj=i;j=2;j++stu[j]=stu[j+1];printf\t\t\t你已经删除%s的信息\nc;k--;outputgrade;}voidallgrade{inti;floatsum=0;fori=0;ik;i++{printf\t%d\t%d\t%d\nstu[i].grade
[0]stu[i].grade
[1]stu[i].grade
[2];sum=sum+stu[i].grade
[0]+stu[i].grade
[1]+stu[i].grade
[2];}printf总成绩是%fsum;}voidpaixu{structstudenttemp;intij;fori=0;ik-1;i++{forj=i+1;jk;j++{ifstu[i].numstu[j].num{temp=stu[i];stu[i]=stu[j];stu[j]=temp;}}}outputgrade;}
5.实习心得通过7次的C语言课程设计上机实习,我学到了很多东西开始上机实习时,面对着繁琐的程序结构,我无从下手,一头雾水的我看到了《C语言课程设计与学习指导》中的第五章,“举一反三”部分看完后,我“依葫芦画瓢”地在VISUALC++上写了简单的程序模块在同学的帮助下我做完了程序的主体部分C语言课程的学习已经过去了几个星期刚开始学习这门课程的时候,我发现老师在课堂上讲授的东西很抽象,不能应用于实际的生活中,并且C语言中的结构,算法等很高深,不容易被我们消化吸收在上机实习的过程中,我发现C语言才是真正能够为现实生活中的问题提供一个简单快捷并且蕴涵着深深智慧的一个工具,作为当今时代的大学生,我们应该好好学习并掌握C语言实际应用中我发现,很多的操作系统都能够C语言编出来,真正实现了办事效率的优化在上机实习的过程中,我发现C语言中的算法和结构具有很深的智慧,一个看似复杂的问题,用很巧妙的C程序算法和结构能奇妙地解决我们应该在以后的学习和生活中将C语言所特有的解决问题的思路和办法融入自己的智慧中另外,C语言编出来的程序很清晰,整洁,将问题有条不紊地分离开来,在一个大框架的总体思路下,将要求化为几个并列的函数,一个函数又一个函数地将问题一一解决C语言这门课程所包含的东西还很多,很深作为一名初次接触的学生,我在C语言课程的学习和这7次的实际上机操作中,对C语言有了进一步的理解从老师开始从C语言的历史开始讲解,到现在,能在老师和同学的帮助下完成一个简单的程序设计,我获益匪浅遇到问题,分析问题,着手解决问题,并总结问题,C语言程序设计将解决问题并完善问题的总体过程告诉了我们,这对我们都是大有裨益的学生信息管理系统显示修改删除浏览退出插入开始显示一系列功能选项输入n,判断n是否是1~6?根据n的值调用各功能模块函数结束找到提示没有找到显示记录调用修改函数继续返回主菜单找到提示没有找到显示记录调用删除函数返回主菜单继续。