《程序设计实践》报告一、题目(1)问题描述设计数据结构完成一个学院学生相关信息的存储,并在此基础上编写算法实现学生成绩管理。(2)课程设计目的应用线性数据结构存储信息,并能够合理的应用排序及查找算法,学会应用散列法。(3)基本要求①一个学院由若干个班组成;所有学生修相同的考试课和考查课。②管理系统能够实现:学生加入,学生毕业,学生成绩统计,学生查询,学生排名等管理操作。(要考虑考试课和考查课的比重关系)③为方便查找,要求针对学生姓名进行散列法查找。④管理系统应有完整地界面(最好是图形化界面)。(4)实现提示主要集中在散列函数的构造和冲突的解决上。二、问题分析及求解基本思路1定义一个学生信息的结构体2声明各种功能函数3定义主菜单项目以及子菜单项目4输入输出信息和查询修改删除等操作三、问题求解的整体框架结构1主函数通过调用函数实现成绩查询和管理2菜单界面函数3输入学生信息4删除学生信息5修改学生信息6查询学生信息7显示学生信息并保存以及纠错功能四、主要算法#includeiostream.h#includestdio.h#includeconio.h#includewindows.h/intmain(){intchoose,editnum,dispnum,compnum,sortnum;/*定义5个输入变量*/system(cls);StuCover();getch();while(1){MainMenu();/cout\t\t请输入序号:endl;scanf(%d,&choose);switch(choose)*/{case1:Open(stu,&stunum);break;case2:Save(stu,&stunum);break;case3:do{EditMenu();cout\t\t请输入序号:endl;scanf(%d,&editnum);switch(editnum){case1:Add(stu,&stunum);break;case2:Del(stu,&stunum);break;case3:Modify(stu,&stunum);break;case0:Quit(0);break;}}while(editnum!=0);break;case4:do{DispMenu();cout\t\t请输入序号:endl;scanf(%d,&dispnum);switch(dispnum)/{case1:DispOne(stu,&stunum);break;case2:DispAll(stu,stunum);break;case3:do{SortMenu();cout\t\t请输入序号:endl;scanf(%d,&sortnum);switch(sortnum){case1:AsceSort(stu,stunum);break;case2:DropSort(stu,stunum);break;case0:Quit(0);break;}/}while(sortnum!=0);/*内循环3结束*/break;case4:NotElig(stu,stunum);break;case0:Quit(0);break;}}while(dispnum!=0);break;case5:do{CompMenu();cout\t\t请输入序号:endl;scanf(%d,&compnum);switch(compnum){case1:CompSum(stu,stunum);break;case2:SearchMax(stu,stunum);break;case3:SearchMin(stu,stunum);break;case0:Quit(0);break;}}while(compnum!=0);break;case0:Quit(1);break;}}return0;}voidgotoxy(intx,inty){COORDc;c.X=x-1;c.Y=y-1;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);}voidQuit(intflag){if(flag==1){system(cls);cout\n\n\n\n\n\n\t\t\t操作结束,退出系统!endl;getch();system(cls);exit(0);}elseif(flag==0){system(cls);cout\n\n\n\n\n\n\t\t\t操作结束,返回上级菜单!endl;getch();system(cls);}}voidStuCover(){system(cls);cout\n\n\nendl;cout\t\t班级学生成绩管理系统\n\nendl;}voidMainMenu(){intn;system(cls);cout\n\n\nendl;cout|*****学生成绩管理系统*****|\nendl;cout|....................................|\nendl;cout|请选择菜单序号(0~5)|\nendl;cout|....................................|\nendl;cout|1----打开文件|\nendl;cout|2----保存文件|\nendl;cout|3----编辑数据|\nendl;cout|4----显示数据|\nendl;cout|5----数据计算|\nendl;cout|0----退出系统|\nendl;cout|....................................|\nendl;cout\t\t请选择序号:endl;scanf(%d,&n);cout您选择了第项!\n\nendl;}voidDispMenu(){intn;system(cls);cout\n\n\nendl;cout|*******显示子菜单*****|\nendl;cout|....................................|\nendl;cout|请选择菜单序号(0~4)|\nendl;cout|....................................|\nendl;cout|1----查看选定记录|\nendl;cout|2----显示全部记录|\nendl;cout|3----显示排序记录|\nendl;cout|4----显示不及格记录|\nendl;cout|0----返回上级菜单|\nendl;cout|....................................|\nendl;cout\t\t请选择序号:endl;scanf(%d,&n);cout您选择了第项!\n\nendl;}voidEditMenu(){intn;system(cls);cout\n\n\nendl;cout|*******编辑子菜单******|\nendl;cout|....................................|\nendl;cout|请选择菜单序号(0~3)|\nendl;cout|....................................|\nendl;cout|1----增加记录|\nendl;cout|2----删除记录|\nendl;cout|3----修改记录|\nendl;cout|0----返回上级菜单|\nendl;cout|....................................|\nendl;cout\t\t请选择序号:endl;scanf(%d,&n);cout您选择了第项!\n\nendl;}voidCompMenu(){intn;system(cls);cout\n\n\nendl;cout|*******计算子菜单******|\nendl;cout|....................................|\nendl;cout|请选择菜单序号(0~3)|\nendl;cout|....................................|\nendl;cout|1----计算总成绩和平均成绩|\nendl;cout|2----计算最高分(平均分)|\nendl;cout|3----计算最低分(平均分)|\nendl;cout|0----返回上级菜单|\nendl;cout|....................................|\nendl;cout\t\t请选择序号:endl;scanf(%d,&n);cout您选择了第项!\n\nendl;}voidSortMenu(){intn;system(cls);cout\n\n\nendl;cout|*******排序子菜单******|\nendl;cout|....................................|\nendl;cout|请选择菜单序号(0~2)|\nendl;cout|....................................|\nendl;cout|1----按升序排序|\nendl;cout|2----按降序排序|\nendl;cout|0----返回上级菜单|\nendl;cout|....................................|\nendl;cout\t\t请选择序号:endl;scanf(%d,&n);cout您选择了第项!\nnendl;}voidSearchMax(structstudentstu[],intstusize)访问函数*/{floatmax=stu[0].stuscore[4];inti;system(cls);for(i=1;istusize;i++){if(maxstu[i].stuscore[4]){max=stu[i].stuscore[4];}}gotoxy(20,5);cout成绩最高的是:\nmaxendl;gotoxy(20,10);cout查找最高分成功,按任意键返回上级菜单!endl;getch();}voidSearchMin(structstudentstu[],intstusize)访问函数*/{floatmin=stu[0].stuscore[4];inti;system(cls);for(i=1;istusize;i++){if(minstu[i].stuscore[4]){min=stu[i].stuscore[4];}}gotoxy(20,5);cout成绩最高的是:\nminendl;gotoxy(20,10);cout查找最低分成功,按任意键返回上级菜单!endl;getch();}voidNotElig(structstudentstu[],intstusize){inti,flag=0;system(cls);gotoxy(20,5);cout不合格成绩:endl;for(i=0;istusize;i++){if(stu[i].stuscore[4]60){coutstu[i].st