c语言课程设计高考录取分数线.docx
- 文档编号:5826758
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:21
- 大小:250.21KB
c语言课程设计高考录取分数线.docx
《c语言课程设计高考录取分数线.docx》由会员分享,可在线阅读,更多相关《c语言课程设计高考录取分数线.docx(21页珍藏版)》请在冰豆网上搜索。
c语言课程设计高考录取分数线
C语言课程设计报告书
姓名:
班级:
班级学号:
指导老师:
一课设题目
高考招生录取成绩
已知文本文件f1.txt中存放了某个省当年参加高考的1000个考生的数据(考号、姓名、性别和考试成绩),存放格式是每行存放一个考生的数据,每个数据之间用空格隔开。
假定当年该省的招生计划是:
一类本科招生计划为10%;二类本科招生计划为15%;三类本科招生计划为20%;四类高职高专招生计划为25%。
请编写程序,实现以下功能:
1.划定各批次录取分数线,结果可屏幕显示,也可存入文件;
2.能够统计各批次中男生,女生的录取比例。
统计结果可屏幕显示,也可存入文件;
3.确定每名学生的录取情况及录取批次;
4.考生可以根据考号或姓名(支持重名)查询自己的成绩及录取情况;
5.系统程序要有界面;
6.存入文件的数据,每行存一种数据,每行之间的不同信息用空格分隔。
)
二题目分析
该程序题目已经很清楚的表达出要求编好的程序能够简单的实行高考招生功能,首先需要在导入含有一千个考生信息的txt文本,以能达到录取功能。
根据该题目我们还可以知道完成数据输入后,不仅要有比较整洁的界面,还要能根据用户要求界面显示出个批次中男女的比例以及录取线、可供用户查询(根据考生姓名或考号)某考生成绩及录取情况。
那么我们最好设置一个大循环,使得考生能实现只要不关闭程序或者按指定输入而结束程序就能一直查询下去,并且能用txt文本将个批次中录取的人的一系列信息从程序中生成出来。
但作为艺术生,我的能力有限,只能从网络上寻找已经编好的程序进行理解,降低理解题目的难度。
三设计思路
要编题目中要求的程序,就必须先将已经写好的一千个学生的信息的文本文件输入程序。
第一步为定义:
#include
#include
用结构体的形式将学生的一切信息表达出来:
structDATA
{
intID;
charname[4];
charsex[3];
intscore;
};
定义各个函数:
voidpaixu(int*,DATA*,int);
intsishewuru(double);
voidfunc1(int*,int*,DATA*,int*,int,int,int,int);//统计男女比例
intfunc2(int*,int,DATA*);//查找考生序号
voidprint();
voidmain()
再应该从f1.txt中向程序导入将每一个人的学号、姓名、性别、分数,并自动计算考生数量:
FILE*file=fopen("f1.txt","r"),*file1;
if(file==NULL)
{
printf("Nosuchfile!
\n");
return;
}
while(EOF!
=fscanf(file,"%*[^\n]\n"))length++;//自动计算考生数量
然后比较大小,将原来一千个人按成绩高低排好顺序:
DATA*data=(DATA*)malloc(length*sizeof(DATA));
int*pai=(int*)malloc(length*sizeof(int));
rewind(file);
for(i=0;i { fscanf(file,"%d%s%s%d",&data[i].ID,&data[i].name,&data[i].sex,&data[i].score); pai[i]=i; } paixu(pai,data,length);//将1-1000的学生按成绩排序 对1000名学生的成绩分别按比例进行计算并四舍五入为整数,可得出各批次最低成绩,即各批次的录取成绩。 要划出各批次的录取成绩,就要将压线的那个分数计算出来。 在这里,特别考虑的是: 压线分数上人数有多个,所以,我们不能单纯的将N乘以各个批次的百分点。 编写程序如下: yiben=sishewuru(length*0.1)-1;//分别按比例进行计算并四舍五入为整数 erben=yiben+sishewuru(length*0.15); sanben=erben+sishewuru(length*0.2); dazhuan=sanben+sishewuru(length*0.25); yi=data[pai[yiben]].score;er=data[pai[erben]].score; san=data[pai[sanben]].score;si=data[pai[dazhuan]].score; 设置界面: 将“各类招生分数线”、“各批次男女比例”、“单个学生录取情况”、“退出系统输入”、“重新打印初试界面”输入指令分别设置为数字“0”~“4”: while (1) { print(); printf("\n请输入查询码: "); for(input=getchar();;input=getchar()) { if(! (input>='0'&&input<='4')) { printf("非法输入,请重新输入\n请输入: "); fflush(stdin); } elsebreak; } 实现“各类招生分数线”即“0”指令: getchar(); switch(input) { case'0': printf("\n一类本科招生线: %d\n二类本科招生线: %d\n三类本科招生线: %d\ \n高职高专招生线: %d\n",yi,er,san,si); printf("是否打印为文件? (y/n): "); if(getchar()=='y') { file1=fopen("各批次录取分数线.txt","w"); fprintf(file1,"一类本科招生线: %d\n二类本科招生线: %d\ \n三类本科招生线: %d\n高职高专招生线: %d\n",yi,er,san,si); fclose(file1); } fflush(stdin); break; 实现“各批次男女比例”即“1”指令: case'1': func1(male,female,data,pai,yiben,erben,sanben,dazhuan); printf("一本类本科招生线男女比例: %d: %d\n",male[0],female[0]); printf("二类本科招生线男女比例: %d: %d\n",male[1],female[1]); printf("三类本科招生线男女比例: %d: %d\n",male[2],female[2]); printf("高职高专招生线招生线男女比例: %d: %d\n",male[3],female[3]); printf("是否打印为文件? (y/n): "); if(getchar()=='y') { file1=fopen("各批次录取男女比例.txt","w"); fprintf(file1,"一类本科招生线男女比例: %d: %d\n",male[0],female[0]); fprintf(file1,"二类本科招生线男女比例: %d: %d\n",male[1],female[1]); fprintf(file1,"三类本科招生线男女比例: %d: %d\n",male[2],female[2]); fprintf(file1,"高职高专招生线招生线男女比例: %d: %d\n",male[3],female[3]); fclose(file1); } fflush(stdin); break; 实现“单个学生录取情况”即“2”指令: case'2': printf("按考号查询输入0按姓名查询输入1\n请输入查询码: "); for(input=getchar();;input=getchar()) { if(input! ='0'&&input! ='1') { printf("非法输入,请重新输入\n请输入: "); fflush(stdin); } elsebreak; } getchar(); intshuru,j,ss[10];//假设最多10个重名的 for(j=0;j<10;j++)ss[i]=0; if(input=='0') { start1: printf("请输入考号: "); for(j=scanf("%d",&shuru);j! =1||shuru/10000! =4211;j=scanf("%d",&shuru)) {//假设考号开头为4211 printf("非法输入,请重新输入\n请输入: "); fflush(stdin); } getchar(); j=shuru%10000;//假设考号和序号的关系 printf("该生考号: %d姓名: %s性别: %s分数: %d录取情况: ", shuru,data[j].name,data[j].sex,data[j].score); if(data[j].score>=yi)printf("一本\n"); elseif(data[j].score>=er)printf("二本\n"); elseif(data[j].score>=san)printf("三本\n"); elseif(data[j].score>=si)printf("高职高专\n"); elseprintf("未过线,请继续努力! \n"); printf("是否继续查询? (y/n): "); if(getchar()=='y') { fflush(stdin); gotostart1; } } else { start2: printf("请输入姓名: "); j=func2(ss,length,data);//查找考生序号 if(j==0)printf("查无此人! \n"); elseif(j==1) { printf("该生考号: %d姓名: %s性别: %s分数: %d录取情况: ", data[ss[0]].ID,data[ss[0]].name,data[ss[0]].sex,data[ss[0]].score); if(data[ss[0]].score>=yi)printf("一本\n"); elseif(data[ss[0]].score>=er)printf("二本\n"); elseif(data[ss[0]].score>=san)printf("三本\n"); elseif(data[ss[0]].score>=si)printf("高职高专\n"); elseprintf("未过线,请继续努力! \n"); } else { printf("有多个考生姓名为%s,数据如下: \n",data[ss[0]].name); for(j=j-1;j>=0;j--) { printf("该生考号: %d姓名: %s性别: %s分数: %d录取情况: ", data[ss[j]].ID,data[ss[j]].name,data[ss[j]].sex,data[ss[j]].score); if(data[ss[j]].score>=yi)printf("一本\n"); elseif(data[ss[j]].score>=er)printf("二本\n"); elseif(data[ss[j]].score>=san)printf("三本\n"); elseif(data[ss[j]].score>=si)printf("高职高专\n"); elseprintf("未过线,请继续努力! \n"); } } printf("是否继续查询? (y/n): "); if(getchar()=='y') { fflush(stdin); gotostart2; } } break; 实现“退出系统”即“3”指令: case'3': fclose(file); free(data); return; 实现“重新打印初始界面”即“4”指令: case'4': print(); break; } } fclose(file); free(data); } 下面,则开始对开始定义的函数进行填充: 根据1000名学生的成绩进行从高到底的排序: voidpaixu(int*pai,DATA*data,intlength) { inti,j,temp; for(i=0;i for(j=i+1;j if(data[pai[i]].score { temp=pai[i]; pai[i]=pai[j]; pai[j]=temp; } } 计算各批次比例的四舍五入: intsishewuru(doublel) { if(l>1) { if((l-(int)l)<0.5)return(int)l; elsereturn(int)l+1; } elsereturn1; } 各批次男女比例: voidfunc1(int*male,int*female,DATA*data,int*pai,inta,intb,intc,intd) { inti; for(i=0;i<4;i++){male[i]=0;female[i]=0;} for(i=0;i<=a;i++) { if(data[pai[i]].sex[0]==-60)male[0]++; elsefemale[0]++; } for(;i<=b;i++) { if(data[pai[i]].sex[0]==-60)male[1]++; elsefemale[1]++; } for(;i<=c;i++) { if(data[pai[i]].sex[0]==-60)male[2]++; elsefemale[2]++; } for(;i<=d;i++) { if(data[pai[i]].sex[0]==-60)male[3]++; elsefemale[3]++; } } 界面: voidprint() { printf("--------------------------------高考招生录取程序-------------------------------\n"); printf("今年招生计划: 一类本科招生计划为10%\n二类本科招生计划为15%\n\ 三类本科招生计划为20%\n四类高职高专招生计划为25%\n"); printf("查询: \n各类招生分数线输入0各批次男女比例输入1\ \n单个学生录取情况输入2退出系统输入3\n重新打印初试界面输入4\n"); } 根据考生的姓名或考号进行单个学生成绩查询: intfunc2(int*ss,intlength,DATA*data) { inti,j=0; chars[4]; while (1) { i=scanf("%s",s); fflush(stdin); if(i! =1) { printf("非法输入,请重新输入\n请输入: "); continue; } for(i=0;i { if(data[i].name[0]==s[0]&&data[i].name[1]==s[1]&&data[i].name[2]==s[2]) { ss[j++]=i; } } break; } returnj; } 四、实现结果 系统界面 各类招生录取成绩 各批次男女比例 五课设总结 在进行几次上机实习后,我感觉c语言真是一门很神奇的学科,它在只借助一台计算机,一个vc++,就能带给人们那么多实用的东西! 而且,我对c语言有了全新的认识,以前不知道的东西在上机之后完全了解了,以前一知半解的东西在上机之后感觉分变得更加明了了。 很多错误都是始料未及的,往往一点的小差错都会导致整个程序无法运行或者错误运行。 在上机实习的前几节课,我感觉有点茫然不知所措,只有将书上的相关知识一遍又一遍地了解。 在多次了解后,开始理解编程就顺利多了。 六程序代码 #include #include structDATA { intID; charname[4]; charsex[3]; intscore; }; voidpaixu(int*,DATA*,int); intsishewuru(double); voidfunc1(int*,int*,DATA*,int*,int,int,int,int);//统计男女比例 intfunc2(int*,int,DATA*);//查找考生序号 voidprint(); voidmain() { intlength=0,i,yiben,erben,sanben,dazhuan,male[4],female[4]; intyi,er,san,si; charinput; FILE*file=fopen("f1.txt","r"),*file1; if(file==NULL) { printf("Nosuchfile! \n"); return; } while(EOF! =fscanf(file,"%*[^\n]\n"))length++;//自动计算考生数量 DATA*data=(DATA*)malloc(length*sizeof(DATA)); int*pai=(int*)malloc(length*sizeof(int)); rewind(file); for(i=0;i { fscanf(file,"%d%s%s%d",&data[i].ID,&data[i].name,&data[i].sex,&data[i].score); pai[i]=i; } paixu(pai,data,length);//将1-1000的学生按成绩排序 yiben=sishewuru(length*0.1)-1;//分别按比例进行计算并四舍五入为整数 erben=yiben+sishewuru(length*0.15); sanben=erben+sishewuru(length*0.2); dazhuan=sanben+sishewuru(length*0.25); yi=data[pai[yiben]].score;er=data[pai[erben]].score; san=data[pai[sanben]].score;si=data[pai[dazhuan]].score; while (1) { print(); printf("\n请输入查询码: "); for(input=getchar();;input=getchar()) { if(! (input>='0'&&input<='4')) { printf("非法输入,请重新输入\n请输入: "); fflush(stdin); } elsebreak; } getchar(); switch(input) { case'0': printf("\n一类本科招生线: %d\n二类本科招生线: %d\n三类本科招生线: %d\ \n高职高专招生线: %d\n",yi,er,san,si); printf("是否打印为文件? (y/n): "); if(getchar()=='y') { file1=fopen("各批次录取分数线.txt","w"); fprintf(file1,"一类本科招生线: %d\n二类本科招生线: %d\ \n三类本科招生线: %d\n高职高专招生线: %d\n",yi,er,san,si); fclose(file1); } fflush(stdin); break; case'1': func1(male,female,data,pai,yiben,erben,sanben,dazhuan); printf("一类本科招生线男女比例: %d: %d\n",male[0],female[0]); printf("二类本科招生线男女比例: %d: %d\n",male[1],female[1]); printf("三类本科招生线男女比例: %d: %d\n",male[2],female[2]); printf("高职高专招生线招生线男女比例: %d: %d\n",male[3],female[3]); printf("是否打印为文件? (y/n): "); if(getchar()=='y') { file1=fopen("各批次录取男女比例.txt","w"); fprintf(file1,"一类本科招生线男女比例: %d: %d\n",male[0],female[0]); fprintf(file1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 高考 录取 分数线