c語(yǔ)言課程設(shè)計(jì)-高考錄取分?jǐn)?shù)線_第1頁(yè)
c語(yǔ)言課程設(shè)計(jì)-高考錄取分?jǐn)?shù)線_第2頁(yè)
c語(yǔ)言課程設(shè)計(jì)-高考錄取分?jǐn)?shù)線_第3頁(yè)
c語(yǔ)言課程設(shè)計(jì)-高考錄取分?jǐn)?shù)線_第4頁(yè)
c語(yǔ)言課程設(shè)計(jì)-高考錄取分?jǐn)?shù)線_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、中國(guó)地質(zhì)大學(xué)(武漢)C語(yǔ)言課程設(shè)計(jì)報(bào)告書姓 名:班 級(jí):班級(jí)學(xué)號(hào): 指導(dǎo)老師: 一 課設(shè)題目高考招生錄取成績(jī)已知文本文件f1.txt中存放了某個(gè)省當(dāng)年參加高考的1000個(gè)考生的數(shù)據(jù)(考號(hào)、姓名、性別和考試成績(jī)),存放格式是每行存放一個(gè)考生的數(shù)據(jù),每個(gè)數(shù)據(jù)之間用空格隔開。假定當(dāng)年該省的招生計(jì)劃是:一類本科招生計(jì)劃為10;二類本科招生計(jì)劃為15;三類本科招生計(jì)劃為20;四類高職高專招生計(jì)劃為25。請(qǐng)編寫程序,實(shí)現(xiàn)以下功能:1.劃定各批次錄取分?jǐn)?shù)線,結(jié)果可屏幕顯示,也可存入文件;2.能夠統(tǒng)計(jì)各批次中男生,女生的錄取比例。統(tǒng)計(jì)結(jié)果可屏幕顯示,也可存入文件;3.確定每名學(xué)生的錄取情況及錄取批次;4.考生

2、可以根據(jù)考號(hào)或姓名(支持重名)查詢自己的成績(jī)及錄取情況;5.系統(tǒng)程序要有界面;6.存入文件的數(shù)據(jù),每行存一種數(shù)據(jù),每行之間的不同信息用空格分隔。)二 題目分析該程序題目已經(jīng)很清楚的表達(dá)出要求編好的程序能夠簡(jiǎn)單的實(shí)行高考招生功能,首先需要在導(dǎo)入含有一千個(gè)考生信息的txt文本,以能達(dá)到錄取功能。根據(jù)該題目我們還可以知道完成數(shù)據(jù)輸入后,不僅要有比較整潔的界面,還要能根據(jù)用戶要求界面顯示出個(gè)批次中男女的比例以及錄取線、可供用戶查詢(根據(jù)考生姓名或考號(hào))某考生成績(jī)及錄取情況。那么我們最好設(shè)置一個(gè)大循環(huán),使得考生能實(shí)現(xiàn)只要不關(guān)閉程序或者按指定輸入而結(jié)束程序就能一直查詢下去,并且能用txt文本將個(gè)批次中錄取

3、的人的一系列信息從程序中生成出來。 但作為藝術(shù)生,我的能力有限,只能從網(wǎng)絡(luò)上尋找已經(jīng)編好的程序進(jìn)行理解,降低理解題目的難度。三 設(shè)計(jì)思路要編題目中要求的程序,就必須先將已經(jīng)寫好的一千個(gè)學(xué)生的信息的文本文件輸入程序。第一步為定義:#include <stdio.h>#include <malloc.h>用結(jié)構(gòu)體的形式將學(xué)生的一切信息表達(dá)出來:struct DATAint ID;char name4;char sex3;int score;定義各個(gè)函數(shù):void paixu(int*,DATA*,int);int sishewuru(double);void func1(i

4、nt*,int*,DATA*,int*,int,int,int,int);/統(tǒng)計(jì)男女比例int func2(int*,int,DATA*);/查找考生序號(hào)void print();void main()再應(yīng)該從f1.txt中向程序?qū)雽⒚恳粋€(gè)人的學(xué)號(hào)、姓名、性別、分?jǐn)?shù),并自動(dòng)計(jì)算考生數(shù)量:FILE* file=fopen("f1.txt","r"),*file1;if(file=NULL)printf("No such file!n");return;while(EOF!=fscanf(file,"%*nn") l

5、ength+;/自動(dòng)計(jì)算考生數(shù)量然后比較大小,將原來一千個(gè)人按成績(jī)高低排好順序:DATA* data=(DATA*)malloc(length*sizeof(DATA);int* pai=(int*)malloc(length*sizeof(int);rewind(file);for(i=0;i<length;i+)fscanf(file,"%d %s %s %d",&datai.ID,&,&datai.sex,&datai.score);paii=i;paixu(pai,data,length);/將1-1000的

6、學(xué)生按成績(jī)排序?qū)?000名學(xué)生的成績(jī)分別按比例進(jìn)行計(jì)算并四舍五入為整數(shù),可得出各批次最低成績(jī),即各批次的錄取成績(jī)。要?jiǎng)澇龈髋蔚匿浫〕煽?jī),就要將壓線的那個(gè)分?jǐn)?shù)計(jì)算出來。在這里,特別考慮的是:壓線分?jǐn)?shù)上人數(shù)有多個(gè),所以,我們不能單純的將N乘以各個(gè)批次的百分點(diǎn)。編寫程序如下:yiben=sishewuru(length*0.1)-1;/分別按比例進(jìn)行計(jì)算并四舍五入為整數(shù)erben=yiben+sishewuru(length*0.15);sanben=erben+sishewuru(length*0.2);dazhuan=sanben+sishewuru(length*0.25);yi=datap

7、aiyiben.score;er=datapaierben.score;san=datapaisanben.score;si=datapaidazhuan.score;設(shè)置界面:將“各類招生分?jǐn)?shù)線”、“ 各批次男女比例”、“ 單個(gè)學(xué)生錄取情況”、“ 退出系統(tǒng)輸入”、“ 重新打印初試界面”輸入指令分別設(shè)置為數(shù)字“0”“4”:while(1)print();printf("n請(qǐng)輸入查詢碼:");for(input=getchar();input=getchar()if(!(input>='0'&&input<='4')

8、printf("非法輸入,請(qǐng)重新輸入n請(qǐng)輸入:");fflush(stdin);else break;實(shí)現(xiàn)“各類招生分?jǐn)?shù)線”即“0”指令:getchar();switch(input)case '0':printf("n一類本科招生線:%dn二類本科招生線:%dn三類本科招生線:%dn高職高專招生線:%dn",yi,er,san,si);printf("是否打印為文件?(y/n):");if(getchar()='y')file1=fopen("各批次錄取分?jǐn)?shù)線.txt","

9、;w");fprintf(file1,"一類本科招生線:%dn二類本科招生線:%dn三類本科招生線:%dn高職高專招生線:%dn",yi,er,san,si);fclose(file1);fflush(stdin);break;實(shí)現(xiàn)“各批次男女比例”即“1”指令:case '1':func1(male,female,data,pai,yiben,erben,sanben,dazhuan);printf("一本類本科招生線男女比例: %d:%dn",male0,female0);printf("二類本科招生線男女比例:

10、%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",mal

11、e0,female0);fprintf(file1,"二類本科招生線男女比例: %d:%dn",male1,female1);fprintf(file1,"三類本科招生線男女比例: %d:%dn",male2,female2);fprintf(file1,"高職高專招生線招生線男女比例:%d:%dn",male3,female3);fclose(file1);fflush(stdin);break;實(shí)現(xiàn)“單個(gè)學(xué)生錄取情況”即“2”指令:case '2':printf("按考號(hào)查詢輸入0 按姓名查詢輸入1n請(qǐng)輸

12、入查詢碼:");for(input=getchar();input=getchar()if(input!='0'&&input!='1')printf("非法輸入,請(qǐng)重新輸入n請(qǐng)輸入:");fflush(stdin);else break;getchar();int shuru,j,ss10;/假設(shè)最多10個(gè)重名的for(j=0;j<10;j+) ssi=0;if(input='0')start1:printf("請(qǐng)輸入考號(hào):");for(j=scanf("%d&q

13、uot;,&shuru);j!=1|shuru/10000!=4211;j=scanf("%d",&shuru)/假設(shè)考號(hào)開頭為4211printf("非法輸入,請(qǐng)重新輸入n請(qǐng)輸入:");fflush(stdin);getchar();j=shuru%10000;/假設(shè)考號(hào)和序號(hào)的關(guān)系printf("該生考號(hào):%d 姓名:%s 性別:%s 分?jǐn)?shù):%d 錄取情況:",shuru,,dataj.sex,dataj.score);if(dataj.score>=yi) printf("一本

14、n");else if(dataj.score>=er) printf("二本n");else if(dataj.score>=san) printf("三本n");else if(dataj.score>=si) printf("高職高專n");else printf("未過線,請(qǐng)繼續(xù)努力!n");printf("是否繼續(xù)查詢?(y/n):");if(getchar()='y')fflush(stdin);goto start1;elsestart2

15、:printf("請(qǐng)輸入姓名:");j=func2(ss,length,data);/查找考生序號(hào)if(j=0) printf("查無此人!n");else if(j=1)printf("該生考號(hào):%d 姓名:%s 性別:%s 分?jǐn)?shù):%d 錄取情況:",datass0.ID,,datass0.sex,datass0.score);if(datass0.score>=yi) printf("一本n");else if(datass0.score>=er) printf("

16、二本n");else if(datass0.score>=san) printf("三本n");else if(datass0.score>=si) printf("高職高專n");else printf("未過線,請(qǐng)繼續(xù)努力!n");elseprintf("有多個(gè)考生姓名為%s,數(shù)據(jù)如下:n",);for(j=j-1;j>=0;j-)printf("該生考號(hào):%d 姓名:%s 性別:%s 分?jǐn)?shù):%d 錄取情況:",datassj.ID,dat

17、,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("未過線,請(qǐng)繼續(xù)努力!n");printf("

18、;是否繼續(xù)查詢?(y/n):");if(getchar()='y')fflush(stdin);goto start2;break;實(shí)現(xiàn)“退出系統(tǒng)”即“3”指令:case '3':fclose(file);free(data);return;實(shí)現(xiàn)“重新打印初始界面”即“4”指令:case '4':print();break;fclose(file);free(data);下面,則開始對(duì)開始定義的函數(shù)進(jìn)行填充:根據(jù)1000名學(xué)生的成績(jī)進(jìn)行從高到底的排序:void paixu(int* pai,DATA* data,int length)i

19、nt i,j,temp;for(i=0;i<length;i+)for(j=i+1;j<length;j+)if(datapaii.score<datapaij.score)temp=paii;paii=paij;paij=temp;計(jì)算各批次比例的四舍五入:int sishewuru(double l)if(l>1)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* p

20、ai,int a,int b,int c,int d)int i;for(i=0;i<4;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) male2+;else female2+;for(;i<=d;i+)if(datapaii.sex0=-60) male3+;else

21、female3+;界面:void print()printf("-高考招生錄取程序-n");printf("今年招生計(jì)劃:一類本科招生計(jì)劃為 10n 二類本科招生計(jì)劃為 15n 三類本科招生計(jì)劃為 20n 四類高職高專招生計(jì)劃為25n");printf("查詢: n各類招生分?jǐn)?shù)線輸入 0 各批次男女比例輸入1n單個(gè)學(xué)生錄取情況輸入2 退出系統(tǒng)輸入 3n重新打印初試界面輸入4n");根據(jù)考生的姓名或考號(hào)進(jìn)行單個(gè)學(xué)生成績(jī)查詢:int func2(int* ss,int length,DATA* data)int i,j=0;char s4

22、;while(1)i=scanf("%s",s);fflush(stdin);if(i!=1) printf("非法輸入,請(qǐng)重新輸入n請(qǐng)輸入:");continue;for(i=0;i<length;i+)if(0=s0&&1=s1&&2=s2)ssj+=i;break;return j;四、實(shí)現(xiàn)結(jié)果系統(tǒng)界面各類招生錄取成績(jī)各批次男女比例五 課設(shè)總結(jié)在進(jìn)行幾次上機(jī)實(shí)習(xí)后,我感覺c語(yǔ)言真是一門很神奇的學(xué)科,它在只借助一臺(tái)計(jì)算機(jī),一個(gè)vc+,就能帶給人們那么多實(shí)

23、用的東西!而且,我對(duì)c語(yǔ)言有了全新的認(rèn)識(shí),以前不知道的東西在上機(jī)之后完全了解了,以前一知半解的東西在上機(jī)之后感覺分變得更加明了了。很多錯(cuò)誤都是始料未及的,往往一點(diǎn)的小差錯(cuò)都會(huì)導(dǎo)致整個(gè)程序無法運(yùn)行或者錯(cuò)誤運(yùn)行。在上機(jī)實(shí)習(xí)的前幾節(jié)課,我感覺有點(diǎn)茫然不知所措,只有將書上的相關(guān)知識(shí)一遍又一遍地了解。在多次了解后,開始理解編程就順利多了。六 程序代碼#include <stdio.h>#include <malloc.h>struct DATAint ID;char name4;char sex3;int score;void paixu(int*,DATA*,int);int

24、sishewuru(double);void func1(int*,int*,DATA*,int*,int,int,int,int);/統(tǒng)計(jì)男女比例int func2(int*,int,DATA*);/查找考生序號(hào)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("N

25、o such file!n");return;while(EOF!=fscanf(file,"%*nn") length+;/自動(dòng)計(jì)算考生數(shù)量DATA* data=(DATA*)malloc(length*sizeof(DATA);int* pai=(int*)malloc(length*sizeof(int);rewind(file);for(i=0;i<length;i+)fscanf(file,"%d %s %s %d",&datai.ID,&,&datai.sex,&datai.

26、score);paii=i;paixu(pai,data,length);/將1-1000的學(xué)生按成績(jī)排序yiben=sishewuru(length*0.1)-1;/分別按比例進(jìn)行計(jì)算并四舍五入為整數(shù)erben=yiben+sishewuru(length*0.15);sanben=erben+sishewuru(length*0.2);dazhuan=sanben+sishewuru(length*0.25);yi=datapaiyiben.score;er=datapaierben.score;san=datapaisanben.score;si=datapaidazhuan.score

27、;while(1)print();printf("n請(qǐng)輸入查詢碼:");for(input=getchar();input=getchar()if(!(input>='0'&&input<='4')printf("非法輸入,請(qǐng)重新輸入n請(qǐng)輸入:");fflush(stdin);else break;getchar();switch(input)case '0':printf("n一類本科招生線:%dn二類本科招生線:%dn三類本科招生線:%dn高職高專招生線:%dn&q

28、uot;,yi,er,san,si);printf("是否打印為文件?(y/n):");if(getchar()='y')file1=fopen("各批次錄取分?jǐn)?shù)線.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,

29、erben,sanben,dazhuan);printf("一類本科招生線男女比例: %d:%dn",male0,female0);printf("二類本科招生線男女比例: %d:%dn",male1,female1);printf("三類本科招生線男女比例: %d:%dn",male2,female2);printf("高職高專招生線招生線男女比例:%d:%dn",male3,female3);printf("是否打印為文件?(y/n):");if(getchar()='y')

30、file1=fopen("各批次錄取男女比例.txt","w");fprintf(file1,"一類本科招生線男女比例: %d:%dn",male0,female0);fprintf(file1,"二類本科招生線男女比例: %d:%dn",male1,female1);fprintf(file1,"三類本科招生線男女比例: %d:%dn",male2,female2);fprintf(file1,"高職高專招生線招生線男女比例:%d:%dn",male3,female3);f

31、close(file1);fflush(stdin);break;case '2':printf("按考號(hào)查詢輸入0 按姓名查詢輸入1n請(qǐng)輸入查詢碼:");for(input=getchar();input=getchar()if(input!='0'&&input!='1')printf("非法輸入,請(qǐng)重新輸入n請(qǐng)輸入:");fflush(stdin);else break;getchar();int shuru,j,ss10;/假設(shè)最多10個(gè)重名的for(j=0;j<10;j+)

32、ssi=0;if(input='0')start1:printf("請(qǐng)輸入考號(hào):");for(j=scanf("%d",&shuru);j!=1|shuru/10000!=4211;j=scanf("%d",&shuru)/假設(shè)考號(hào)開頭為4211printf("非法輸入,請(qǐng)重新輸入n請(qǐng)輸入:");fflush(stdin);getchar();j=shuru%10000;/假設(shè)考號(hào)和序號(hào)的關(guān)系printf("該生考號(hào):%d 姓名:%s 性別:%s 分?jǐn)?shù):%d 錄取情況:&q

33、uot;,shuru,,dataj.sex,dataj.score);if(dataj.score>=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("未過線,請(qǐng)繼續(xù)努力!n");printf("

34、;是否繼續(xù)查詢?(y/n):");if(getchar()='y')fflush(stdin);goto start1;elsestart2:printf("請(qǐng)輸入姓名:");j=func2(ss,length,data);/查找考生序號(hào)if(j=0) printf("查無此人!n");else if(j=1)printf("該生考號(hào):%d 姓名:%s 性別:%s 分?jǐn)?shù):%d 錄取情況:",datass0.ID,,datass0.sex,datass0.score);if(datass

35、0.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("未過線,請(qǐng)繼續(xù)努力!n");elseprintf("有多個(gè)考生姓名為%s,數(shù)據(jù)如下:n",);for

36、(j=j-1;j>=0;j-)printf("該生考號(hào):%d 姓名:%s 性別:%s 分?jǐn)?shù):%d 錄取情況:",datassj.ID,,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("未過線,請(qǐng)繼續(xù)努力!n");printf("是否繼續(xù)查詢?(y/n):");if(getchar()='y')fflush(stdin);goto start2;break;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論