04061271成绩有序管理.docx
- 文档编号:7577311
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:12
- 大小:101.54KB
04061271成绩有序管理.docx
《04061271成绩有序管理.docx》由会员分享,可在线阅读,更多相关《04061271成绩有序管理.docx(12页珍藏版)》请在冰豆网上搜索。
04061271成绩有序管理
沈阳航空工业学院
课程设计
学号__________
班级__________
姓名__________
指导教师__________
年月日
沈阳航空工业学院
课程设计任务书
机械与汽车学院机械设计制造及其自动化专业5406108班学号200504061271
一、课程设计题目:
成绩有序管理
二、课程设计工作自2007年7月9日起至2007年7月14日止
三、课程设计内容:
运用所学的C语言知识,编制和调试程序,具有如下功能:
(1)输入十个学生的记录信息,学生数据包括:
学号、姓名、班级、成绩,其中成绩包括:
英语、高数、计算机三门课程。
(2)采用直接插入排序算法将学生记录按照学号进行降序排序,并将学生记录顺序输出。
求出每个学生的平均分,对其进行升序排序并输出。
注:
算法请参考任意一本C语言版数据结构教材。
四、课程设计要求:
程序质量:
●贯彻结构化程序设计思想。
●用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
●用户界面中的菜单至少应包括“输入数据”、“查询”、“排序”、“退出”4项。
●代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:
●封面
●课程设计任务书
●目录
●需求分析(分析题目的要求)
●程序流程图(总体流程图和主要功能模块流程图)
●核心技术的实现说明及相应程序段
●个人总结
●参考资料
●源程序及适当的注释
指导教师:
____________________
学生签名:
____________________
目录
一、程序设计题目………………………………………………1
二、需求分析……………………………………………………1
三、程序流程图…………………………………………………2
四、核心技术的实现方法、程序段及注释……………………5
五、个人总结……………………………………………..……..8
六、参考文献……………………………………………………9
一、程序设计题目
学生成绩有序管理,具体要求如下:
1、输入学生数据
2、采用直接插入排序算法将学生记录按照学号进行降序排序,并将学生记录顺序输出。
3、求出每个学生的平均分,对其进行升序排序并输出。
二、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为三个模块,其中每一个模块对应一个函数,他们的功能分别是:
输入学生数据函数(input),用插入法按学号排序函数(sort_num),求平均分并排序函数(sort_class)。
在这些函数当中,函数的实现严格按照题目的要求。
1、输入学生数据函数主要实现程序最初运行时学生数据的录入;
2、用插入法按学号排序函数实现的功能是按照学号对学生的数据记录排序。
3、求平均分并排序函数按照题目的具体要求实现的是平均分的递减排序并输出;注:
每个学生数据至少应该包括学号、姓名、三门成绩,学生数据要保存在myfile.dat文件中。
每一个学生记录都包含学号、姓名,以及英语、计算机和数学三门成绩,在程序当中,将学生记录类型定义为结构体类型,添加以及追加的学生信息直接写入E盘的myfile.dat文件中,可以对学生数据进行永久保存。
三、程序流程图
1、程序总体结构图
图1.程序总体结构图
2、具体功能框图
(1)添加学生数据函数input()
图2.添加学生数据函数input()
(2)用插入法按学号排序函数
图3.用插入法按学号排序函数
(3)按平均分排序函数sort
图4.按平均分排序函数sort
四、核心技术的实现方法、程序段及注释
本程序主要由三个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
在这些函数当中,输入学生数据函数(input),用插入法按学号排序函数(sort_number),求平均分并排序函数(sort_class)是程序中为核心的部分,下面分别进行说明。
1、输入学生数据函数(input)
输入数据为,首先由程序创建一个新文件,并将录入的学生信息写入该文件当中;具体的程序段如下
voidinput()/*输入学生数据函数(input)*/
{inti,j;
FILE*fp;
fp=fopen("E:
\\myfile.dat","w+");/*创建一个新文件*/
printf("EnterNonameclassscore\n");
for(i=0;i { printf("No\n"); scanf("%s",stu[i].No); printf("name\n"); scanf("%s",stu[i].name); printf("class\n"); scanf("%s",stu[i].class); printf("scoreenglish\n"); scanf("%d",&stu[i].e); printf("scorecomputer\n"); scanf("%d",&stu[i].c); printf("scoremath\n"); scanf("%d",&stu[i].m); fprintf(fp,"%-20s%-20s%-10s\n",stu[i].No,stu[i].name,stu[i].class); /*将录入的学生信息写入该文件*/} fclose(fp);/*关闭文件*/ printf("\n**********Savetosuccess**********\n"); } 2、用插入法按学号排序函数(sort_number) 对于学号的排序采用的排序算法是插入法排序,整个排序过程在结构体数组stu中实现,由于排序算法涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助,并用(output1)函数输出。 具体的程序段如下: sort_number()/*用插入法按学号排序函数*/ { inti,j; structstudenttemp; for(i=1;i { j=i-1; temp=stu[i]; while(j>=0&&strcmp(stu[j].No,stu[j+1].No)>0) { stu[j+1]=stu[j]; j--; } stu[j+1]=temp; } output1(); } 3、求平均分并排序函数(sort_class) 对于平均分的排序采用的排序算法是冒泡法排序,其中平均分的求得是在排序的过程中实现的,整个排序过程在结构体数组stu中实现,由于排序算法涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助,并用(output2)函数输出。 具体的程序段如下: sort_class()/*求平均分并排序函数*/ { structstudenttemp; inti,j; for(i=0;i for(j=0;j { if((stu[j].e+stu[j].c+stu[j].m)/3.0>(stu[j+1].e+stu[j+1].c+stu[j+1].m)/3.0) { temp=stu[j+1]; stu[j+1]=stu[j]; stu[j]=temp; } } output2();} 五、个人总结 在课程设计过程中的收获和体会很多,通过本次课设使我对语言程有了更深的了解,而且使我认识到必须有认真的态度才能找出程序中的错误。 本次课设程序基本完成,达到了题目要求。 六、参考文献 1谭浩强.C程序设计.北京: 清华大学出版社,2005 2刘成等.C语言程序设计实验指导与习题集.北京: 中国铁道出版社,2006 七、附录 原程序: #include #include #include #include intmulu(); voidinput(); voidOpenFile(); voidsort_No(); sort_class(); voidoutput1(); voidoutput2(); #defineN10 structstudent { charNo[30]; charname[30]; charclass[30]; inte; intc; intm; }stu[N]; voidmain() {inti; clrscr(); for(;;) { switch(mulu()) { case1: input();break; case2: sort_number();break; case3: sort_class();break; case4: exit(0); } } } intmulu() {inta; puts("***************Menu*****************"); puts("***************1.New****************"); puts("***************2.Nopaixu*********"); puts("***************3.scorepaixu******"); puts("***************4.Exit***************"); printf("Makechoice: "); puts(""); do scanf("%d",&a); while(a<1||a>4); return(a); } voidinput() { inti,j; FILE*fp; fp=fopen("C: \\myfile.dat","w"); printf("EnterNonameclassscore\n"); for(i=0;i { printf("No\n"); scanf("%s",stu[i].No); printf("name\n"); scanf("%s",stu[i].name); printf("class\n"); scanf("%s",stu[i].class); printf("scoreenglish\n"); scanf("%d",&stu[i].e); printf("scorecomputer\n"); scanf("%d",&stu[i].c); printf("scoremath\n"); scanf("%d",&stu[i].m); fprintf(fp,"%-20s%-20s%-10s\n",stu[i].No,stu[i].name,stu[i].class); } fclose(fp); printf("\n**********Savetosuccess**********\n"); } voidOpenFile() { inti; FILE*fp; if((fp=fopen("C: \\myfile.dat","w"))==NULL) { printf("sorry! canNotopenthefile.\n"); exit(0); } printf("\nSavingfile\n"); fprintf(fp,"Numbernameclass\n"); for(i=0;i fprintf(fp,"%-20s%-20s%-10s\n",stu[i].No,stu[i].name,stu[i].class); fclose(fp);} sort_number() { inti,j; structstudenttemp; for(i=1;i { j=i-1; temp=stu[i]; while(j>=0&&strcmp(stu[j].No,stu[j+1].No)>0) { stu[j+1]=stu[j]; j--; } stu[j+1]=temp; } output1(); } sort_class() { structstudenttemp; inti,j; for(i=0;i for(j=0;j { if((stu[j].e+stu[j].c+stu[j].m)/3.0>(stu[j+1].e+stu[j+1].c+stu[j+1].m)/3.0) { temp=stu[j+1]; stu[j+1]=stu[j]; stu[j]=temp; } } output2(); } voidoutput1() {inti; for(i=0;i printf("%-20s%-20s%-10s%d%d%d\n",stu[i].No,stu[i].name,stu[i].class, stu[i].e,stu[i].c,stu[i].m); } voidoutput2() {inti; for(i=0;i printf("%-20s%-20s%-10s%d%d%d%f\n",stu[i].No,stu[i].name,stu[i].class, stu[i].e,stu[i].c,stu[i].m, (stu[i].e+stu[i].c+stu[i].m)/3.0); }_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 04061271 成绩 有序 管理