《2022年数据结构课程设计任务书》由会员分享,可在线阅读,更多相关《2022年数据结构课程设计任务书(29页珍藏版)》请在金锄头文库上搜索。
1、1 / 29 郑州轻工业学院课程设计任务书题目:学生成绩分析姓名:周凯丽院 系):数学与信息科学系专业班级:信科10-1班学号:541010010160 指导教师:时海亮,裴云霞时间:2018年6月04日至2018年6月15日精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 29 页2 / 29 一、基本要求及主要内容1. 学生成绩分析问题1)问题描述。录入并保存一个班级学生多门课程的成绩,并对成绩进行分析。2)基本要求。 a)通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat。b)对文件 input.dat 中的数据进
2、行处理,要求具有如下功能:按各门课程成绩排序,并生成相应的文件输出;计算每个人的平均成绩,按平均成绩排序,并生成文件;求出各门课程的平均成绩、最高分、最低分、不及格人数、6069 分人数、 7079 分人数、8089 分人数、 90 分以上人数;根据姓名或学号查询某人的各门课成绩。c)使用 Visual C+ 6.0 控制台应用程序开发,界面美观。/主菜单int printf_student(student stu。/输入学生信息void math(student stu。/按数学成绩排序void eng(student stu。/按英语成绩排序void computer(student st
3、u。/按计算机成绩排序void averg(student stu。/按平均成绩输出void data_analyse(student stu 。/各科成绩分析void search_no(student stu 。/按学号查询void search_name(student stu 。/按姓名查询void main(/主函数精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 29 页6 / 29 3算法描述#includeiostream.h #includestdio.h #includefstream.h #includestdlib
4、.h #includestring.h #define N 7 int degree(int num 。struct student char NO3 。char name20。float math。float eng。float computer。float aver。stuN 。void menu( 。int printf_student(student stu 。void math(student stu 。void eng(student stu 。void computer(student stu 。void averg(student stu 。void data_analyse(
5、student stu 。int degree(float num 。void search_no(student stu 。void search_name(student stu 。void main( printf( 输入你需要在功能号。menu(。int i。scanf(%d,&i 。switch(i 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 29 页7 / 29 case 1: math(stu。break。case 2: eng(stu。break。case 3:computer(stu。break。case 4:av
6、erg(stu。break。case 5:data_analyse(stu 。break。case 6:search_name(stu 。break。case 7:search_no( stu。break。case 8:printf_student(stu 。break。default:printf(data error!。 void menu( cout*endl。cout *欢迎进入学生成绩系统 *endl。cout可以实现的功能有:endl 。cout1 、按数学成绩排序,并生成相应的文件输出endl 。cout2 、按英语成绩排序,并生成相应的文件输出endl 。cout3 、按计算机
7、成绩排序,生成相应的文件输出endl 。cout4 、查询个人平均成绩endl 。cout5 、各科成绩分布endl 。cout6 、按姓名查询endl 。cout7 、按学号查询endl 。cout8 、输入新学生信息endl 。cout* FILE *mp 。int i。if(mp=fopen(d:input.txt,w=NULL 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 29 页8 / 29 printf(Failed to open this file.n。exit(0 。 cout*endl。cout*请输入学生信息,用
8、空格隔开!*endl。cout* 。for(i=0 。i scanf(%s %s %f %f %f,&stui.NO,&stui.name,&stui.math,&stui.eng,&puter。fprintf(mp,%st%st%.2ft%.2ft%.2fn,stui.NO,stui.name,stui.math,stui.eng,puter 。 fclose(mp 。return 0。 /按数学成绩排序void math(student stu system(cls 。cout*endl。cout*按数学成绩排序*endl。cout* 。if(np=NULL printf(Failed t
9、o open this file!n。exit(0 。 int i=0 。while(fscanf(np,%s %s %f %f %f,&stui.NO,&stui.name,&stui.math,&stui.eng,&puter!=EOF i+ 。 数学排序 .txt,w 。if(mp=NULL printf(Failed to open this file.n。exit(0 。 int k,j 。student t。for(k=0 。k for(j=0 。j if(stuj.mathstuj+1.math t=stuj 。stuj=stuj+1 。stuj+1=t 。 cout学号 t 姓
10、名 t 数学 t 英语 t 计算机 。for(i=0 。i 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 29 页10 / 29 printf(%st%st%.2ft%.2ft%.2fn,stui.NO,stui.name,stui.math,stui.eng,puter 。fprintf(mp,%st%st%.2ft%.2ft%.2fn,stui.NO,stui.name,stui.math,stui.eng,puter 。 fclose(mp 。 /按英语成绩排序void eng(student stu system(cls 。c
11、out*endl。cout*按英语成绩排序*endl。cout* 。if(np=NULL printf(Failed to open this file!n。exit(0 。 int i=0 。while(fscanf(np,%s %s %f %f %f,&stui.NO,&stui.name,&stui.math,&stui.eng,&puter!=EOF i+ 。 英语排序 .txt,w 。if(mp=NULL printf(Failed to open this file.n。exit(0 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1
12、0 页,共 29 页11 / 29 int k,j 。student t。for(k=0 。k for(j=0 。j if(stuj.engstuj+1.eng t=stuj 。stuj=stuj+1 。stuj+1=t 。 cout学号 t 姓名 t 英语 t 数学 t 计算机 。for(i=0 。i printf(%st%st%.2ft%.2ft%.2fn,stui.NO,stui.name,stui.eng,stui.math,puter 。fprintf(mp,%st%st%.2ft%.2ft%.2fn,stui.NO,stui.name,stui.eng,stui.math,pute
13、r 。 fclose(mp 。 /按计算机成绩排序void computer(student stu system(cls 。cout*endl。cout*按计算机成绩排序*endl。cout* 。if(np=NULL printf(Failed to open this file!n。exit(0 。 int i=0 。while(fscanf(np,%s %s %f %f %f,&stui.NO,&stui.name,&stui.math,&stui.eng,&puter!=EOF i+ 。 计算机排序 .txt,w 。if(mp=NULL printf(Failed to open th
14、is file.n。exit(0 。 int k,j 。student t。for(k=0 。k for(j=0 。j if(puterstuj+puter t=stuj 。stuj=stuj+1 。stuj+1=t 。 cout学号 t 姓名 t 计算机 t 数学 t 英语 。for(i=0 。i printf(%st%st%.2ft%.2ft%.2fn,stui.NO,stui.name,puter,stui精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 29 页13 / 29 .eng,stui.math 。fprintf(mp
15、,%st%st%.2ft%.2ft%.2fn,stui.NO,stui.name,puter,stui.eng,stui.math 。 fclose(mp 。 /求个人平均成绩void averg(student stu system(cls 。cout*endl。cout*按个人平均成绩排序*endl。cout* 。if(np=NULL printf(Failed to open this file!n。exit(0 。 int i=0 。while(fscanf(np,%s %s %f %f %f,&stui.NO,&stui.name,&stui.math,&stui.eng,&pute
16、r!=EOF i+ 。 按个人平均成绩排序.txt,w 。if(mp=NULL printf(Failed to open this file.n。exit(0 。 int j。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 29 页14 / 29 for(j=0 。j stuj.aver=(stuj.math+stuj.eng+puter/3。 int m,n。student t。for(m=0 。m for(n=0 。n if(puterstun+puter t=stun 。stun=stun+1 。stun+1=t 。 cout
17、 学号 t 姓名 t 计算机 t 数学 t 英语 t 平均成绩。for(i=0 。i printf(%st%st%.2ft%.2ft%.2ft%.2fn,stui.NO,stui.name,puter,stui.eng,stui.math,stui.aver。fprintf(mp,%st%st%.2ft%.2ft%.2ft%.2fn,stui.NO,stui.name,puter,stui.eng,stui.math,stui.aver。 fclose(mp 。 /学科成绩void data_analyse(student stu/ 各门课程的平均成绩、最高分、最低分、不及格人数、 6069
18、分人数、 7079 分人数、 8089 分人数、 90 分以上人数; float ma8,en8,co8 。/各门课 0.平均 1.最高 2.最低 3.不及格。for(int j=0 。j 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 29 页15 / 29 maj=0 。enj=0 。coj=0 。 FILE *np 。学生信息 .txt,r 。if(np=NULL printf(Failed to open this file!n。exit(0 。 int i=0 。while(fscanf(np,%s %s %f %f %f,
19、&stui.NO,&stui.name,&stui.math,&stui.eng,&puter!=EOF /平均ma0+=stui.math 。en0+=stui.eng 。co0+=puter 。/各门课统计、最高if(stui.mathma1 ma1=stui.math 。if(stui.engen1 en1=stui.eng 。if(puterco1 co1=puter 。/各门课统计、最低if(stui.math ma2=stui.math 。if(stui.eng en2=stui.eng 。if(puter co2=puter 。精选学习资料 - - - - - - - - - 名
20、师归纳总结 - - - - - - -第 15 页,共 29 页16 / 29 /分数段统计switch(degree(stui.math case 0:ma3+。break。case 1:ma4+。break。case 2:ma5+。break。case 3:ma6+。break。case 4:ma7+。break。 switch(degree(stui.eng case 0:en3+。break。case 1:en4+。break。case 2:en5+。break。case 3:en6+。break。case 4:en7+。break。 switch(degree(puter case
21、0:co3+ 。break。case 1:co4+ 。break。case 2:co5+ 。break。case 3:co6+ 。break。case 4:co7+ 。break。 i+ 。 fclose(np 。ma0=ma0/N 。en0=en0/N 。co0=co0/N 。printf(t 平均 t 最高 t 最低 t 不及格 t6069t7079t8089t90100n 。printf( 数学 t 。for(int k=0 。k printf(%0.0ft,mak。printf(n 英语 t。for(int n=0 。n 精选学习资料 - - - - - - - - - 名师归纳总结
22、- - - - - - -第 16 页,共 29 页17 / 29 printf(%0.0ft,enn。printf(n 计算机 t。for(int m=0 。m printf(%0.0ft,com。printf(n 。 int degree(float num if(num return 0。if(num59 return 1。if(num69 return 2。if(num79 return 3。if(num89 return 4。 /按学号查找void search_no(student stu system(cls 。cout*endl。cout*请输入要查询同学的学号*endl。co
23、ut*endl。cout:no 。FILE *np 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 29 页18 / 29 学生信息 .txt,r 。if(np=NULL printf(Failed to open this file!n。exit(0 。 int i=0 。while(fscanf(np,%s %s %f %f %f,&stui.NO,&stui.name,&stui.math,&stui.eng,&puter!=EOF i+ 。 int j,flag=0 。for(j=0 。j if(strcmp(no,stuj
24、.NO=0 cout 学号 t 姓名 t 数学 t 英语 t 计算机 。flag=1 。 if(flag=1 printf( 找到该学生信息!n 。else printf( 没有该学生的信息!n 。 /按姓名查找void search_name(student stu system(cls 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 29 页19 / 29 cout*endl。cout*请输入要查询同学的姓名*endl。cout*endl。cout请输入要查询学生姓名:name。FILE *np 。学生信息 .txt,r 。if
25、(np=NULL printf(Failed to open this file!n。exit(0 。 int i=0 。while(fscanf(np,%s %s %f %f %f,&stui.NO,&stui.name,&stui.math,&stui.eng,&puter!=EOF i+ 。 int j,flag=0 。for(j=0 。j if(strcmp(name,stuj.name=0 cout 学号 t 姓名 t 数学 t 英语 t 计算机 。flag=1 。 if(flag=1 printf( 找到该学生信息!n 。精选学习资料 - - - - - - - - - 名师归纳总
26、结 - - - - - - -第 19 页,共 29 页20 / 29 else printf( 没有该学生的信息!n 。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 20 页,共 29 页21 / 29 4实验数据和实验结果精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 21 页,共 29 页22 / 29 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 22 页,共 29 页23 / 29 精选学习资料 - - - - - - - - - 名师归纳总
27、结 - - - - - - -第 23 页,共 29 页24 / 29 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 24 页,共 29 页25 / 29 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 25 页,共 29 页26 / 29 5 开发难点及解决技巧难点:在求各科成绩分析情况的时候,各门课程的平均成绩、最高分、最低分、不及格人数、 6069 分人数、 7079 分人数、 8089 分人数、90 分以上人数。要求的数据太多解决方法:建立了三个数组,每个中含有八个数据,分别代表要求的数据精选
28、学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 26 页,共 29 页27 / 29 6小结通过本次课程设计,巩固复习了的以前学习c+和 c 语言的知识;提高了 函 数 之 间 调 用 的 使 用 能 力 ,提 高 了 对 问 题 的综 合 处 理 能 力。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 27 页,共 29 页28 / 29 课程设计成绩评定表评定工程内容满分评分总分学习态度学习认真,态度端正,遵守纪律。10 答疑和设计情况认真查阅资料,勤学好问,提出的问题有一定的深度,分析解决问题的能力较强。40 说明书质量设 计方 案正 确、 表 达 清 楚 ; 设 计 思路、实验 论证)方法科学合理;达到课 程设 计任 务书 规 定 的 要 求 ; 图 、表、文字表达准确规范,上交及时。40 回答问题情况回答问题准确,基本概念清楚,有理有据,有一定深度。10 总成绩采用五级分制:优、良、中、及格、不及格指导教师评语:签名:年月日精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 28 页,共 29 页29 / 29 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 29 页,共 29 页