《c语言课程设计高考录取分数线.doc》由会员分享,可在线阅读,更多相关《c语言课程设计高考录取分数线.doc(21页珍藏版)》请在三一办公上搜索。
1、中国地质大学(武汉)C语言课程设计报告书姓 名:班 级:班级学号: 指导老师: 一 课设题目高考招生录取成绩已知文本文件f1.txt中存放了某个省当年参加高考的1000个考生的数据(考号、姓名、性别和考试成绩),存放格式是每行存放一个考生的数据,每个数据之间用空格隔开。假定当年该省的招生计划是:一类本科招生计划为10;二类本科招生计划为15;三类本科招生计划为20;四类高职高专招生计划为25。请编写程序,实现以下功能:1.划定各批次录取分数线,结果可屏幕显示,也可存入文件;2.能够统计各批次中男生,女生的录取比例。统计结果可屏幕显示,也可存入文件;3.确定每名学生的录取情况及录取批次;4.考生
2、可以根据考号或姓名(支持重名)查询自己的成绩及录取情况;5.系统程序要有界面;6.存入文件的数据,每行存一种数据,每行之间的不同信息用空格分隔。)二 题目分析该程序题目已经很清楚的表达出要求编好的程序能够简单的实行高考招生功能,首先需要在导入含有一千个考生信息的txt文本,以能达到录取功能。根据该题目我们还可以知道完成数据输入后,不仅要有比较整洁的界面,还要能根据用户要求界面显示出个批次中男女的比例以及录取线、可供用户查询(根据考生姓名或考号)某考生成绩及录取情况。那么我们最好设置一个大循环,使得考生能实现只要不关闭程序或者按指定输入而结束程序就能一直查询下去,并且能用txt文本将个批次中录取
3、的人的一系列信息从程序中生成出来。 但作为艺术生,我的能力有限,只能从网络上寻找已经编好的程序进行理解,降低理解题目的难度。三 设计思路要编题目中要求的程序,就必须先将已经写好的一千个学生的信息的文本文件输入程序。第一步为定义:#include #include 用结构体的形式将学生的一切信息表达出来:struct DATAint ID;char name4;char sex3;int score;定义各个函数:void paixu(int*,DATA*,int);int sishewuru(double);void func1(int*,int*,DATA*,int*,int,int,int
4、,int);/统计男女比例int func2(int*,int,DATA*);/查找考生序号void print();void main()再应该从f1.txt中向程序导入将每一个人的学号、姓名、性别、分数,并自动计算考生数量:FILE* file=fopen(f1.txt,r),*file1;if(file=NULL)printf(No such file!n);return;while(EOF!=fscanf(file,%*nn) length+;/自动计算考生数量然后比较大小,将原来一千个人按成绩高低排好顺序:DATA* data=(DATA*)malloc(length*sizeof(
5、DATA);int* pai=(int*)malloc(length*sizeof(int);rewind(file);for(i=0;i=0&input=4)printf(非法输入,请重新输入n请输入:);fflush(stdin);else break;实现“各类招生分数线”即“0”指令:getchar();switch(input)case 0:printf(n一类本科招生线:%dn二类本科招生线:%dn三类本科招生线:%dn高职高专招生线:%dn,yi,er,san,si);printf(是否打印为文件?(y/n):);if(getchar()=y)file1=fopen(各批次录取分
6、数线.txt,w);fprintf(file1,一类本科招生线:%dn二类本科招生线:%dn三类本科招生线:%dn高职高专招生线:%dn,yi,er,san,si);fclose(file1);fflush(stdin);break;实现“各批次男女比例”即“1”指令:case 1:func1(male,female,data,pai,yiben,erben,sanben,dazhuan);printf(一本类本科招生线男女比例: %d:%dn,male0,female0);printf(二类本科招生线男女比例: %d:%dn,male1,female1);printf(三类本科招生线男女比例
7、: %d:%dn,male2,female2);printf(高职高专招生线招生线男女比例:%d:%dn,male3,female3);printf(是否打印为文件?(y/n):);if(getchar()=y)file1=fopen(各批次录取男女比例.txt,w);fprintf(file1,一类本科招生线男女比例: %d:%dn,male0,female0);fprintf(file1,二类本科招生线男女比例: %d:%dn,male1,female1);fprintf(file1,三类本科招生线男女比例: %d:%dn,male2,female2);fprintf(file1,高职高专
8、招生线招生线男女比例:%d:%dn,male3,female3);fclose(file1);fflush(stdin);break;实现“单个学生录取情况”即“2”指令:case 2:printf(按考号查询输入0 按姓名查询输入1n请输入查询码:);for(input=getchar();input=getchar()if(input!=0&input!=1)printf(非法输入,请重新输入n请输入:);fflush(stdin);else break;getchar();int shuru,j,ss10;/假设最多10个重名的for(j=0;j=yi) printf(一本n);else
9、 if(dataj.score=er) printf(二本n);else if(dataj.score=san) printf(三本n);else if(dataj.score=si) printf(高职高专n);else printf(未过线,请继续努力!n);printf(是否继续查询?(y/n):);if(getchar()=y)fflush(stdin);goto start1;elsestart2:printf(请输入姓名:);j=func2(ss,length,data);/查找考生序号if(j=0) printf(查无此人!n);else if(j=1)printf(该生考号:%
10、d 姓名:%s 性别:%s 分数:%d 录取情况:,datass0.ID,datass0.name,datass0.sex,datass0.score);if(datass0.score=yi) printf(一本n);else if(datass0.score=er) printf(二本n);else if(datass0.score=san) printf(三本n);else if(datass0.score=si) printf(高职高专n);else printf(未过线,请继续努力!n);elseprintf(有多个考生姓名为%s,数据如下:n,datass0.name);for(j
11、=j-1;j=0;j-)printf(该生考号:%d 姓名:%s 性别:%s 分数:%d 录取情况:,datassj.ID,datassj.name,datassj.sex,datassj.score);if(datassj.score=yi) printf(一本n);else if(datassj.score=er) printf(二本n);else if(datassj.score=san) printf(三本n);else if(datassj.score=si) printf(高职高专n);else printf(未过线,请继续努力!n);printf(是否继续查询?(y/n):);i
12、f(getchar()=y)fflush(stdin);goto start2;break;实现“退出系统”即“3”指令:case 3:fclose(file);free(data);return;实现“重新打印初始界面”即“4”指令:case 4:print();break;fclose(file);free(data);下面,则开始对开始定义的函数进行填充:根据1000名学生的成绩进行从高到底的排序:void paixu(int* pai,DATA* data,int length)int i,j,temp;for(i=0;ilength;i+)for(j=i+1;jlength;j+)i
13、f(datapaii.score1)if(l-(int)l)0.5) return (int)l;else return (int)l+1;else return 1;各批次男女比例:void func1(int* male,int* female,DATA* data,int* pai,int a,int b,int c,int d)int i;for(i=0;i4;i+) malei=0;femalei=0;for(i=0;i=a;i+)if(datapaii.sex0=-60) male0+;else female0+;for(;i=b;i+)if(datapaii.sex0=-60)
14、male1+;else female1+;for(;i=c;i+)if(datapaii.sex0=-60) male2+;else female2+;for(;i=d;i+)if(datapaii.sex0=-60) male3+;else female3+;界面:void print()printf(-高考招生录取程序-n);printf(今年招生计划:一类本科招生计划为 10n 二类本科招生计划为 15n 三类本科招生计划为 20n 四类高职高专招生计划为25n);printf(查询: n各类招生分数线输入 0 各批次男女比例输入1n单个学生录取情况输入2 退出系统输入 3n重新打印初试
15、界面输入4n);根据考生的姓名或考号进行单个学生成绩查询:int func2(int* ss,int length,DATA* data)int i,j=0;char s4;while(1)i=scanf(%s,s);fflush(stdin);if(i!=1) printf(非法输入,请重新输入n请输入:);continue;for(i=0;ilength;i+)if(datai.name0=s0&datai.name1=s1&datai.name2=s2)ssj+=i;break;return j;四、实现结果系统界面各类招生录取成绩各批次男女比例五 课设总结在进行几次上机实习后,我感觉c
16、语言真是一门很神奇的学科,它在只借助一台计算机,一个vc+,就能带给人们那么多实用的东西!而且,我对c语言有了全新的认识,以前不知道的东西在上机之后完全了解了,以前一知半解的东西在上机之后感觉分变得更加明了了。很多错误都是始料未及的,往往一点的小差错都会导致整个程序无法运行或者错误运行。在上机实习的前几节课,我感觉有点茫然不知所措,只有将书上的相关知识一遍又一遍地了解。在多次了解后,开始理解编程就顺利多了。六 程序代码#include #include struct DATAint ID;char name4;char sex3;int score;void paixu(int*,DATA*,
17、int);int sishewuru(double);void func1(int*,int*,DATA*,int*,int,int,int,int);/统计男女比例int func2(int*,int,DATA*);/查找考生序号void print();void main()int length=0,i,yiben,erben,sanben,dazhuan,male4,female4;int yi,er,san,si;char input;FILE* file=fopen(f1.txt,r),*file1;if(file=NULL)printf(No such file!n);return
18、;while(EOF!=fscanf(file,%*nn) length+;/自动计算考生数量DATA* data=(DATA*)malloc(length*sizeof(DATA);int* pai=(int*)malloc(length*sizeof(int);rewind(file);for(i=0;i=0&input=4)printf(非法输入,请重新输入n请输入:);fflush(stdin);else break;getchar();switch(input)case 0:printf(n一类本科招生线:%dn二类本科招生线:%dn三类本科招生线:%dn高职高专招生线:%dn,yi
19、,er,san,si);printf(是否打印为文件?(y/n):);if(getchar()=y)file1=fopen(各批次录取分数线.txt,w);fprintf(file1,一类本科招生线:%dn二类本科招生线:%dn三类本科招生线:%dn高职高专招生线:%dn,yi,er,san,si);fclose(file1);fflush(stdin);break;case 1:func1(male,female,data,pai,yiben,erben,sanben,dazhuan);printf(一类本科招生线男女比例: %d:%dn,male0,female0);printf(二类本科
20、招生线男女比例: %d:%dn,male1,female1);printf(三类本科招生线男女比例: %d:%dn,male2,female2);printf(高职高专招生线招生线男女比例:%d:%dn,male3,female3);printf(是否打印为文件?(y/n):);if(getchar()=y)file1=fopen(各批次录取男女比例.txt,w);fprintf(file1,一类本科招生线男女比例: %d:%dn,male0,female0);fprintf(file1,二类本科招生线男女比例: %d:%dn,male1,female1);fprintf(file1,三类本科
21、招生线男女比例: %d:%dn,male2,female2);fprintf(file1,高职高专招生线招生线男女比例:%d:%dn,male3,female3);fclose(file1);fflush(stdin);break;case 2:printf(按考号查询输入0 按姓名查询输入1n请输入查询码:);for(input=getchar();input=getchar()if(input!=0&input!=1)printf(非法输入,请重新输入n请输入:);fflush(stdin);else break;getchar();int shuru,j,ss10;/假设最多10个重名的
22、for(j=0;j=yi) printf(一本n);else if(dataj.score=er) printf(二本n);else if(dataj.score=san) printf(三本n);else if(dataj.score=si) printf(高职高专n);else printf(未过线,请继续努力!n);printf(是否继续查询?(y/n):);if(getchar()=y)fflush(stdin);goto start1;elsestart2:printf(请输入姓名:);j=func2(ss,length,data);/查找考生序号if(j=0) printf(查无此
23、人!n);else if(j=1)printf(该生考号:%d 姓名:%s 性别:%s 分数:%d 录取情况:,datass0.ID,datass0.name,datass0.sex,datass0.score);if(datass0.score=yi) printf(一本n);else if(datass0.score=er) printf(二本n);else if(datass0.score=san) printf(三本n);else if(datass0.score=si) printf(高职高专n);else printf(未过线,请继续努力!n);elseprintf(有多个考生姓名
24、为%s,数据如下:n,datass0.name);for(j=j-1;j=0;j-)printf(该生考号:%d 姓名:%s 性别:%s 分数:%d 录取情况:,datassj.ID,datassj.name,datassj.sex,datassj.score);if(datassj.score=yi) printf(一本n);else if(datassj.score=er) printf(二本n);else if(datassj.score=san) printf(三本n);else if(datassj.score=si) printf(高职高专n);else printf(未过线,请继
25、续努力!n);printf(是否继续查询?(y/n):);if(getchar()=y)fflush(stdin);goto start2;break;case 3:fclose(file);free(data);return;case 4:print();break;fclose(file);free(data);void paixu(int* pai,DATA* data,int length)int i,j,temp;for(i=0;ilength;i+)for(j=i+1;jlength;j+)if(datapaii.score1)if(l-(int)l)0.5) return (in
26、t)l;else return (int)l+1;else return 1;void func1(int* male,int* female,DATA* data,int* pai,int a,int b,int c,int d)int i;for(i=0;i4;i+) malei=0;femalei=0;for(i=0;i=a;i+)if(datapaii.sex0=-60) male0+;else female0+;for(;i=b;i+)if(datapaii.sex0=-60) male1+;else female1+;for(;i=c;i+)if(datapaii.sex0=-60
27、) male2+;else female2+;for(;i=d;i+)if(datapaii.sex0=-60) male3+;else female3+;void print()printf(-高考招生录取程序-n);printf(今年招生计划:一类本科招生计划为 10n 二类本科招生计划为 15n 三类本科招生计划为 20n 四类高职高专招生计划为25n);printf(查询: n各类招生分数线输入 0 各批次男女比例输入1n单个学生录取情况输入2 退出系统输入 3n重新打印初试界面输入4n);int func2(int* ss,int length,DATA* data)int i,j=0;char s4;while(1)i=scanf(%s,s);fflush(stdin);if(i!=1) printf(非法输入,请重新输入n请输入:);continue;for(i=0;ilength;i+)if(datai.name0=s0&datai.name1=s1&datai.name2=s2)ssj+=i;break;return j;