版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学生成绩管理程序本章课程是设计一个实用的小型学生成绩管理程序,它要求不用链表,而用数组来设计这个程序,它有查询和检索功能,并且能够对指定文件操作,也可将多个文件组成一个文件。设计要求功能设计要求设计要求实现的功能较多,所以将它们分为几个部分叙述。建立文件可以使用默认文件名或指定文件名将记录存储到文件;文件保存成功返回0,失败返回-1;设置保存标志savedTag作为是否对记录进行存储操作的信息;写同名文件将覆盖原来文件的内容;增加学生记录可在已有记录后面追加新的记录可以随时用它增加新的记录,它们仅保存在结构数组中;可以将一个文件读入,追加在已有记录之后;如果已经采取文件追加的方式,在没有保存到文件之前,将继续保持文件追加状态,以便实现连续文件追加操作方式;如果没有记录存在,给出提示信息。显示记录如果没有记录可供显示,给出提示信息;可以随时显示内存中的记录文件存储可以按默认名字或指定名字存储记录文件;存储成功返回0.,否则返回-1;更新存储标志;读取文件可以按照默认名字或指定名字将记录文件读入内存;读取成功返回0,否则返回-1;可以将指定或默认文件追加到现有记录并更新记录的尾部;可以将文件连续追加到现有记录并更新记录的名词;更新存储标志;删除记录可以按“学好”、“姓名”、“名词”方式删除记录;给出将删除记录的信息,经确认后在删除;如果已经是空表,删除时给出提示信息并返回菜单;如果没有要删除的信息,输出没有找到的信息;应该更新其他记录的名词;删除操作权限于内存,只有执行存记录时,才能覆盖原记录;修改记录可以按“学号”、“姓名”、“名次”方式修改记录内容;给出将修改记录的信息,经确认后进行修改;如果已经是空表,应给出提示信息并返回主菜单;如果没有找到需要要改的信息,输出提示信息;应该同时更新其他记录的名词;修改操作权限于内存,只有进行存储操作时,才能覆盖原记录;更新存储标志;查询记录可以按“学号”、“姓名”、“名次”方式修改记录内容;能给出查询记录的信息;如果查询的信息不存在,输出提示信息;对记录进行排序可以按学好进行升序或降序排序;可以按名称进行升序和降序排序;可以按名词进行升序或降序排序;如果属于选择错误,可以立即退出排序;更新存储标志;头文件使用条件编译定义头文件;函数原型声明;数据结构及包含文件;测试程序应列出测试大纲对程序进行测试;应保证测试用例测试到程序的各种边缘情况;以上是基本要求,希望通过对本章设计的理解,重新考虑如何进行设计。2.总体设计最初的整体规划只是说明它们的可行性,不要求制定函数的具体实现,甚至不需要考虑函数原型。完成整体规划后,可以按照流程描述各个模块之间的接口功能。本课程设计对模块设计的要求如下:要求使用对文件方式实现设计;要求在各个文件内实现结构化设计;每个模块作为一个单独的C文件,每个文件内的函数如表12—1所示,表中给出了各个函数的功能说明;宏和数据结构等放在头文件中,并使用条件编译。本设计由5个C文件(17个函数)和一个头文件组成,每个C文件都代表着某种特定的功能,它们的关系如表12-1所示。本章的设计将更加注意模块化,以便展示C语言的编程风格。程序包含文件的存、取过程。它的功能就是按输入顺序建立记录。如果原来没有记录文件,可以重新建立一个文件;如果已经有记录,可以先把文件内容读入,然后把新记录追加到原来记录的尾部;也可以单独建立新文件,以后再使用读取文件的方法拼装。由上述功能缝隙可以看到它的全貌。因为它有并列选择,所以可以用选择菜单方面地实现。这个菜单具有10个选择项,用switch语句可以实现这些选择。可以用简洁的伪码对它们进行描述,因为并不复杂,所以不再赘述。源文件函数名或其他成分功能student.c函数名或其他成分功能add_disp.cmain总控函数menu_select菜单选择handle_menu菜单处理newRecords新建学生信息记录quit结束运行que_remv_modi.cshowTable打印表头getIndex按升序排序的位置addRecord在表尾追加信息display显示信息save_loadremoveRecord删除指定的记录findRecord查找指定的记录queryInfo查询指定学生的信息copyRecord复制记录modifyRecord修改指定学生的信息sort.csortInfo排序student.h常数提供常数结构声明学生成绩结构库函数及函数原型声明引用库函数及函数3.函数设计为一些函数设计两个返回值以区分其执行结果是否正确。每个学生信息资料用一个StuInfo结构来保存,用StuInfo数组全局变脸records来保存一批学生的信息资料。其中的宏定义表示数组初始大小。测试示例设计者制定详细的测试计划,然后根据测试计划设计测试用例,对程序进行彻底测试,程序设置的课程为char*subject[]={”语文”、”数学”、”英语”、”物理”、”化学”};可以修改课程名称和树木。这里减少科目以加快测试,即通过语句#defineNUM_SUMJECT2选取两门课程。由于跟踪测试的结果过多,这里只举几个例子,简介针对程序功能进行测试的方法菜单项及空表和空文件测试在没有产生文件之前,对需要用到的菜单进行选择,看它们是否满足要求。**************************这是一个**学生成绩管理程序**可以对学生成绩进行管理**欢迎使用管理程序**************************增加学生信息修改学生信息显示学生信息查询学生信息删除学生信息对学生信息进行排序保存学生信息至记录文件2.源程序:#include<stdio.h>#include<string.h>/*定义学生结构体*/structStudent{charID[20];charName[20];floatMark1;floatMark2;floatMark3;floatAverage;};/*声明学生数组及学生数量*/structStudentstudents[1000];intnum;/*求平均值*/floatAvg(structStudentstu){return(stu.Mark1+stu.Mark2+stu.Mark3)/3;}/*通过学号返回数组下标*/intStudent_SearchByIndex(charid[]){inti;for(i=0;i<num;i++){if(strcmp(students[i].ID,id)==0){returni;}}return-1;}/*通过姓名返回数组下标*/intStudent_SearchByName(charname[]){inti;for(i=0;i<num;i++){if(strcmp(students[i].Name,name)==0){returni;}}return-1;}/*显示单条学生记录*/voidStudent_DisplaySingle(intindex){printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","语文","数学","英语","平均成绩");printf("-------------------------------------------------------------\n");printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[index].Name,students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);}/*插入学生信息*/voidStudent_Insert(){while(1){printf("请输入学号:");scanf("%s",&students[num].ID);getchar();printf("请输入姓名:");scanf("%s",&students[num].Name);getchar();printf("语文:");scanf("%f",&students[num].Mark1);getchar();printf("数学:");scanf("%f",&students[num].Mark2);getchar();printf("英语:");scanf("%f",&students[num].Mark3);getchar();students[num].Average=Avg(students[num]);num++;printf("是否继续?(y/n)");if(getchar()=='n'){break;}}}/*修改学生信息*/voidStudent_Modify(){floatmark1,mark2,mark3;while(1){charid[20];intindex;printf("请输入要修改的学生的学号:");scanf("%s",&id);getchar();index=Student_SearchByIndex(id);if(index==-1){printf("学生不存在!\n");}else{printf("你要修改的学生信息为:\n");Student_DisplaySingle(index);printf("--请输入新值--\n");printf("请输入学号:");scanf("%s",&students[index].ID);getchar();printf("请输入姓名:");scanf("%s",&students[index].Name);getchar();printf("语文:");scanf("%f",&students[index].Mark1);getchar();printf("数学:");scanf("%f",&students[index].Mark2);getchar();printf("英语:");scanf("%f",&students[index].Mark3);getchar();students[index].Average=Avg(students[index]);}printf("是否继续?(y/n)");if(getchar()=='n'){break;}}}/*删除学生信息*/voidStudent_Delete(){inti;while(1){charid[20];intindex;printf("请输入要删除的学生的学号:");scanf("%s",&id);getchar();index=Student_SearchByIndex(id);if(index==-1){printf("学生不存在!\n");}else{printf("你要删除的学生信息为:\n");Student_DisplaySingle(index);printf("是否真的要删除?(y/n)");if(getchar()=='y'){for(i=index;i<num-1;i++){students[i]=students[i+1];}num--;}getchar();}printf("是否继续?(y/n)");if(getchar()=='n'){break;}}}/*按姓名查询*/voidStudent_Select(){while(1){charname[20];intindex;printf("请输入要查询的学生的姓名:");scanf("%s",&name);getchar();index=Student_SearchByName(name);if(index==-1){printf("学生不存在!\n");}else{printf("你要查询的学生信息为:\n");Student_DisplaySingle(index);}printf("是否继续?(y/n)");if(getchar()=='n'){break;}}}/*按平均值排序*/voidStudent_SortByAverage(){inti,j;structStudenttmp;for(i=0;i<num;i++){for(j=1;j<num-i;j++){if(students[j-1].Average<students[j].Average){tmp=students[j-1];students[j-1]=students[j];students[j]=tmp;}}}}/*显示学生信息*/voidStudent_Display(){inti;printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","语文","数学","英语","平均成绩");printf("-------------------------------------------------------------\n");for(i=0;i<num;i++){printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].Name,students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average);}}/*将学生信息从文件读出*/voidIO_ReadInfo(){FILE*fp;inti;if((fp=fopen("Database.txt","rb"))==NULL){printf("不能打开文件!\n");}if(fread(&num,sizeof(int),1,fp)!=1){num=-1;}else{for(i=0;i<num;i++){fread(&students[i],sizeof(structStudent),1,fp);}}fclose(fp);}/*将学生信息写入文件*/voidIO_WriteInfo(){FILE*fp;inti;if((fp=fopen("Database.txt","wb"))==NULL){printf("不能打开文件!\n");return;}if(fwrite(&num,sizeof(int),1,fp)!=1){printf("写入文件错误!\n");}for(i=0;i<num;i++){if(fwrite(&students[i],sizeof(structStudent),1,fp)!=1){printf("写入文件错误!\n");}}fclose(fp);}/*主程序*/main(){intchoice,t;IO_ReadInfo();while(t!=0){/*主菜单*/printf("\n------学生成绩管理系统------\n");printf("0.增加学生记录\n");printf("1.修改学生记录\n");printf("2.删除学生记录\n");printf("3.按姓名查询学生记录\n");printf("4.显示学生成绩\n");printf("5.对学生信息进行排序\n");printf("6.保存学生信息至记录文件\n");printf("7.退出?\n");printf("请选择(0-7):");scanf("%d",&choice);getchar();switch(choice){case0:Student_Insert();break;case1:Student_Modify();break;case2:Student_Delete();break;case3:Student_Select();break;case4: Student_Display();break; case5:Student_SortByAverage(); break;case6:printf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 60335-2-43:2024 CMV EN Household and similar electrical appliances - Safety - Part 2-43: Particular requirements for clothes dryers and towel rails
- 黄山学院《材料力学》2021-2022学年第一学期期末试卷
- 淮阴师范学院《中学思想政治学科教学论》2021-2022学年第一学期期末试卷
- 淮阴师范学院《现代教师礼仪》2021-2022学年第一学期期末试卷
- 淮阴师范学院《雕塑》2022-2023学年第一学期期末试卷
- 淮阴师范学院《大学体育》2021-2022学年第一学期期末试卷
- 淮阴工学院《通信电子线路》2022-2023学年期末试卷
- DB5115-T 129-2024《油樟优树选择技术规程》
- DB 3705-T 14-2024《城市大脑场景应用开发规范》
- 噢易教育桌面云解决方案(100点)
- 建立网络安全管理责任制明确安全工作职责和责任
- 安徽省工伤职停工留薪分类目录
- 30题南昌轨道交通集团供电技术类岗位岗位常见面试问题含HR问题考察点及参考回答
- 农贸市场摊位招商方案
- 医疗设备采购 投标技术方案 (技术方案)
- 《化学课程思政元素》
- 2024继续教育《医学科研诚信与医学了研究伦理》答案
- 门诊品管圈课件:提高门诊治疗患者健康教育的满意度
- 职业生涯报告六篇
- 作业本印制服务投标方案(技术标)
- 上虞净化工程施工方案范本
评论
0/150
提交评论