版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
中國地質(zhì)大學(xué)(武漢)C語言課程設(shè)計(jì)報(bào)告書姓名:專業(yè):班級學(xué)號:指導(dǎo)老師:一﹑題目要求已知文本文件f1.txt中存放了某校應(yīng)屆大四學(xué)生的相關(guān)信息(不超過5000人),具體數(shù)據(jù)及存放格式為:每行存放一個(gè)學(xué)生的數(shù)據(jù),共有7項(xiàng),依次為:學(xué)號、姓名、專業(yè)必修課平均成績、科技活動獎勵(lì)加分、社會活動獎勵(lì)加分、是否有專業(yè)必修課掛科記錄、是否通過大學(xué)英語四級。其中,學(xué)號為8位數(shù)字字符,其中前2位數(shù)字表示學(xué)生所在的學(xué)院,第3位數(shù)字表示學(xué)生的專業(yè),第4-5位數(shù)字表示學(xué)生的年級,統(tǒng)一為09,第6位數(shù)字表示學(xué)生所在年級同專業(yè)內(nèi)的編號,即所稱的班號,第7-8位數(shù)字表示學(xué)生班級內(nèi)的序號,如學(xué)號07509123表示,機(jī)電學(xué)院(07)通信工程專業(yè)(5)09級(09)1班(1)第23號(23)學(xué)生;姓名為長度不超過10個(gè)的字符;專業(yè)必修課平均成果、科技活動獎勵(lì)加分、社會活動獎勵(lì)加分均為0-100以內(nèi)的整數(shù)(含0和100);是否有專業(yè)必修課掛科記錄、是否通過大學(xué)英語四級均為0或1兩個(gè)整型數(shù)字,為1分別表示有專業(yè)必修課掛科記錄或通過大學(xué)英語四級,為0分別表示沒有專業(yè)必修課掛科記錄或沒有通過大學(xué)英語四級。該校的保研政策是:必須沒有專業(yè)必修課掛科記錄且通過大學(xué)英語四級考試,在此前提下,劃分推免研究生指標(biāo)。外推指標(biāo)按專業(yè)排名,給予2%的指標(biāo),小數(shù)部分四舍五入。內(nèi)推指標(biāo)按班級排名,給予15%的指標(biāo),小數(shù)部分四舍五入。如果某班有外推指標(biāo),外推指標(biāo)不占內(nèi)推指標(biāo)。排名計(jì)算方法:專業(yè)必修課成績占60%,科技活動獎勵(lì)占30%,社會活動獎勵(lì)占10%。請編寫程序,讀出文件f1.txt中的內(nèi)容,再按保研政策確定每個(gè)人的保研狀況(0表示沒有獲得推免資格,1表示獲得內(nèi)推資格,2表示獲得外推資格)并存入f2.txt中,并實(shí)現(xiàn)以下功能:(1)能夠統(tǒng)計(jì)某個(gè)班所有獲得保研資格的學(xué)生信息。(2)能夠統(tǒng)計(jì)某個(gè)專業(yè)所有獲得保研資格的學(xué)生信息。(3)能夠統(tǒng)計(jì)哪個(gè)班獲得的保研資格的學(xué)生人數(shù)最多。(4)能夠統(tǒng)計(jì)全校所有獲得外推資格的學(xué)生名單,其結(jié)果即可屏幕顯示,也可存入文件。(5)學(xué)生可以根據(jù)姓名和學(xué)號查詢自己是否獲得保研資格。說明:=1\*GB3①系統(tǒng)程序要有界面=2\*GB3②存入文件f2.txt中的數(shù)據(jù),每行存一個(gè)學(xué)生的數(shù)據(jù),每行之間的不同信息用空格分隔。二、題目分析根據(jù)題目可以知道,首先要打開f1.txt并讀取里面的內(nèi)容。然后對其中的信息進(jìn)行分析篩選,根據(jù)外推或者內(nèi)推的條件對學(xué)生進(jìn)行分類排序。除此以外,還要提供選擇菜單實(shí)現(xiàn)功能選擇,再建立一個(gè)文件把篩選分析后的學(xué)生信息存放進(jìn)去以便查詢。處理數(shù)據(jù)時(shí),主要是排序和比較,由于學(xué)生的學(xué)號里面包含了學(xué)生的所在學(xué)院、專業(yè)、班級以及在班級的序號,所以要把學(xué)號的每一位分開處理。在確定外推時(shí)要注意,只有專業(yè)必修課沒有掛科記錄而且大學(xué)英語通過四級的學(xué)生才有劃分資格。在確定內(nèi)推名單時(shí)要注意,已經(jīng)獲得外推資格的學(xué)生不再參加內(nèi)推劃分。經(jīng)過分析,程序的大概流程為:選擇菜單選擇菜單保研人數(shù)最多的班級查詢專業(yè)保研狀況班級保研狀況顯示學(xué)生數(shù)據(jù)全校保研狀況保研人數(shù)最多的班級查詢專業(yè)保研狀況班級保研狀況顯示學(xué)生數(shù)據(jù)全校保研狀況 退出程序退出程序三、設(shè)計(jì)思路1.設(shè)計(jì)選擇菜單根據(jù)題目要求,程序能夠統(tǒng)計(jì)某個(gè)班級、某個(gè)專業(yè)獲得保研資格的學(xué)生信息,能夠統(tǒng)計(jì)哪個(gè)班獲得保研資格的學(xué)生人數(shù)最多,能夠統(tǒng)計(jì)全校所有獲得外推資格的學(xué)生名單,學(xué)生還可以根據(jù)自己的姓名和學(xué)號查詢自己是否獲得保研資格。因此,首先要設(shè)計(jì)一個(gè)選擇菜單實(shí)現(xiàn)功能選擇。2.打開f1.txt,另外再建立一個(gè)文件存放處理后的數(shù)據(jù)由于學(xué)生的原始信息存放于f1.txt中,所以必須先打開并讀取這個(gè)文件,然后才能對里面的數(shù)據(jù)進(jìn)行分析篩選。建立一個(gè)f2.txt,把處理后的學(xué)生信息寫入f2.txt中。3.將沒有參加保研資格的學(xué)生找出來根據(jù)題目可以知道,必須沒有專業(yè)必修課掛科記錄而且通過大學(xué)英語四級考試的學(xué)生才有資格參加劃分推免研究生,所以要把有專業(yè)必修課掛科記錄或者大學(xué)英語四級沒有通過的學(xué)生排除,對沒有保研資格的學(xué)生標(biāo)記為0。建立一個(gè)文件f3.txt,把剩下的學(xué)生信息寫入f3.txt中。4.打開f3.txt,對里面的數(shù)據(jù)進(jìn)行處理該校的保研政策分為外推和內(nèi)推,分別標(biāo)記為2和1。(1).外推指標(biāo)按專業(yè)排名,取前百分之二(小數(shù)部分四舍五入),所以要把f3.txt里面的數(shù)據(jù)按專業(yè)進(jìn)行分類。而專業(yè)代號是學(xué)號的第三位數(shù)字,要注意的是,專業(yè)相同的前提是學(xué)生所在的學(xué)員必須相同,所以同專業(yè)的學(xué)生學(xué)號的前三位必定是一樣的。按專業(yè)分類好后,再對同專業(yè)的學(xué)生進(jìn)行排名編號,排名按綜合成績計(jì)算(綜合成績=專業(yè)必修課成績的百分之六十+科技活動獎勵(lì)分的百分之三十+社會活動獎勵(lì)分的百分之十)。假設(shè)某專業(yè)有n個(gè)學(xué)生,則按綜合成績進(jìn)行排名編號后,編號小于n*0.02(小數(shù)部分四舍五入)的學(xué)生有外推資格,標(biāo)記為2。(2).內(nèi)推指標(biāo)按班級排名,取前百分之十五(小數(shù)部分四舍五入)。如果某班有外推指標(biāo),外推指標(biāo)不占內(nèi)推指標(biāo)。所以先要把班級相同的學(xué)生分類,班級代號為第六位。由于同班級的前提是必須同學(xué)院、同專業(yè),所以學(xué)號前六位一樣的學(xué)生在同一個(gè)班級。按班級劃分后,還要排除已經(jīng)獲得外推資格的學(xué)生,排除后再對該班剩下的學(xué)生進(jìn)行排名編號,排名按綜合成績計(jì)算(綜合成績=專業(yè)必修課成績的百分之六十+科技活動獎勵(lì)分的百分之三十+社會活動獎勵(lì)分的百分之十)。假設(shè)某班級排除外推的有n個(gè)學(xué)生,則按綜合成績進(jìn)行排名編號后,編號小于n*0.15(小數(shù)部分四舍五入)的學(xué)生有內(nèi)推資格,標(biāo)記為1。(3).將沒有獲得保研資格的學(xué)生標(biāo)記為0,有內(nèi)推資格的學(xué)生標(biāo)記為1,有外推資格的學(xué)生標(biāo)記為2,將標(biāo)記后的學(xué)生數(shù)據(jù)存入f2.txt中。5.統(tǒng)計(jì)哪個(gè)班獲得保研資格的人數(shù)最多打開f2.txt,將學(xué)生按班級分類之后,把每個(gè)班的標(biāo)號為1或者是2的學(xué)生人數(shù)統(tǒng)計(jì)出來相應(yīng)的記為k。例如,第n個(gè)班級保研人數(shù)記為k[n]。比較k的大小從而找出保研人數(shù)最多的那個(gè)班級n。6.打開文件f2.txt,建立文件f4.txt,將獲得外推資格(即標(biāo)號為2)的學(xué)生信息寫入f4.txt中。四、實(shí)現(xiàn)結(jié)果1、主函數(shù)voidmenu(){intn;printf("********************Menu*****************\n");printf("**\n");printf("*1.顯示數(shù)據(jù)2.班級保研狀況*\n");printf("**\n");printf("*3.專業(yè)保研狀況4.保研人數(shù)最多的班級*\n");printf("**\n");printf("*5.全校外推狀況6.查詢*\n");printf("**\n");printf("*7.退出程序*\n");printf("*******************************************\n");printf("\nPleaseinputyourselect(1-7):");scanf("%d",&n);while(n<1||n>7){printf("Inputerror.Pleaseinputyourselectagain:");scanf("%d",&n);}}2、生成學(xué)生數(shù)據(jù)structstudent{charno[9];//學(xué)號charname[11];//姓名intbs;//專業(yè)必修課平均成績intks;//科技活動獎勵(lì)加分intss;//社會活動獎勵(lì)加分intgk;//是否掛科intsj;//英語四級考試是否通過intgrade;//綜合成績}s[5000];voidgenerate(){FILE*fp;//定義一個(gè)指向文件型數(shù)據(jù)的指針變量intn,i,j,t;printf("Pleaseinputthetotalofstudent:");scanf("%d",&n);for(i=0;i<n;i++){s[i].no[0]=rand()%3+'0';s[i].no[1]=rand()%10+'0';s[i].no[2]=rand()%6+'0';s[i].no[3]='0';s[i].no[4]='9';s[i].no[5]=rand()%7+'0';s[i].no[6]=rand()%3+'0';s[i].no[7]=rand()%10+'0';s[i].no[8]='\0';t=rand()%10;while(!t)t=rand()%10;for(j=0;j<t;j++)s[i].name[j]=rand()%26+'a';s[i].name[j]='\0';s[i].bs=rand()%101;s[i].ks=rand()%101;s[i].ss=rand()%101;t=rand()%10;if(t<=8)s[i].gk=0;elses[i].gk=1;t=rand()%10;if(t<=8)s[i].sj=1;elses[i].sj=0;}if((fp=fopen("f1.txt","w"))==NULL){printf("Fileopenerror.\n");exit(0);}for(i=0;i<n;i++)fprintf(fp,"%s%s%d%d%d%d%d\n",s[i].no,s[i].name,s[i].bs,s[i].ks,s[i].ss,s[i].gk,s[i].sj);fclose(fp);}3、排除沒有保研資格的人并標(biāo)記4、確定外推名額五、課設(shè)總結(jié)這次C語言課程設(shè)計(jì)對我來說是一個(gè)極大的挑戰(zhàn)。雖然平時(shí)的理論知識學(xué)得還可以,但運(yùn)用到實(shí)踐中就不那么簡單了。剛拿到題目我就有點(diǎn)害怕,一頁多的題目,看了第一遍沒看懂是什么意思。好在題目理解方面老師允許提問,而且題目本身已經(jīng)給出許多提示。第一天課程設(shè)計(jì),花了一下午的時(shí)間終于搞懂題目,有了點(diǎn)思路。雖然有思路,但是不能把想法付諸行動跟失敗沒什么兩樣。我把書上關(guān)于結(jié)構(gòu)體、文件以及數(shù)組的運(yùn)用又復(fù)習(xí)了一遍,還看了老師以前講過的例題,發(fā)現(xiàn)這道題跟最后一節(jié)課講的高考錄取劃線問題很相似。我把那道題找出來仔細(xì)地看了一下,結(jié)合這道題的條件開始著手編寫程序。開始的生成數(shù)據(jù)我就花了很長時(shí)間,后來老師把這一部分編好了,我們只需要對生成的數(shù)據(jù)進(jìn)行處理就行了。在處理數(shù)據(jù)的過程中,我遇到了一個(gè)難題,因?yàn)闆]有想到用字符數(shù)組來表示學(xué)號,總想著怎么根據(jù)學(xué)號把相同專業(yè)和相同班級的學(xué)生分類,所以程序沒能做下去。這次課程設(shè)計(jì)我要好好檢討自己。因?yàn)橛龅揭稽c(diǎn)困難就沒有戰(zhàn)勝它的信心,導(dǎo)致整個(gè)程序沒能完成。失敗的主要原因還是在我自己,沒有做夠的耐心和信心。編了一段程序執(zhí)行的時(shí)候有時(shí)會出現(xiàn)很多錯(cuò)誤,改正這些錯(cuò)誤也需要很大的耐心。這次課程設(shè)計(jì)失敗了,但是我從中學(xué)到了很多書本上沒有的知識。我學(xué)的專業(yè)是通信工程,將來還有很多用到C語言的地方。理論知識的學(xué)習(xí)是為了能夠運(yùn)用,所以,以后我會更加注重實(shí)踐。當(dāng)然,理論知識也有待強(qiáng)化。雖然C語言課結(jié)束了,但我會繼續(xù)努力,將C語言學(xué)以致用。六、源代碼#include<stdio.h>#include<stdlib.h>inttotal;structstudent{charno[9];//學(xué)號charname[11];//姓名intbs;//專業(yè)必修課平均成績intks;//科技活動獎勵(lì)加分intss;//社會活動獎勵(lì)加分intgk;//是否掛科intsj;//英語四級考試是否通過intgrade;//綜合成績}s[5000];voidmenu();voidgenerate();voidbanjibaoyan();voidzhuanyebaoyan();voidmax()voidsort(intn);voidquanxiao();voidchaxun();voidmain(){menu();}voidmenu(){intn;printf("********************Menu*****************\n");printf("**\n");printf("*1.顯示數(shù)據(jù)2.班級保研狀況*\n");printf("**\n");printf("*3.專業(yè)保研狀況4.保研人數(shù)最多的班級*\n");printf("**\n");printf("*5.全校外推狀況6.查詢*\n");printf("**\n");printf("*7.退出程序*\n");printf("*******************************************\n");printf("\nPleaseinputyourselect(1-7):");scanf("%d",&n);while(n<1||n>7){printf("Inputerror.Pleaseinputyourselectagain:");scanf("%d",&n);}switch(n){case1:generate();break;case2:banji();break;case3:zhuanye();break;case4:max;break;case5:quanxiao();break;case6:chaxun();break;case7:exit(0);}}/////////////////////////////////////////////////voidgenerate(){FILE*fp;//定義一個(gè)指向文件型數(shù)據(jù)的指針變量intn,i,j,t;printf("Pleaseinputthetotalofstudent:");scanf("%d",&n);for(i=0;i<n;i++){s[i].no[0]=rand()%3+'0';s[i].no[1]=rand()%10+'0';s[i].no[2]=rand()%6+'0';s[i].no[3]='0';s[i].no[4]='9';s[i].no[5]=rand()%7+'0';s[i].no[6]=rand()%3+'0';s[i].no[7]=rand()%10+'0';s[i].no[8]='\0';t=rand()%10;while(!t)t=rand()%10;for(j=0;j<t;j++)s[i].name[j]=rand()%26+'a';s[i].name[j]='\0';s[i].bs=rand()%101;s[i].ks=rand()%101;s[i].ss=rand()%101;t=rand()%10;if(t<=8)s[i].gk=0;elses[i].gk=1;t=rand()%10;if(t<=8)s[i].sj=1;elses[i].sj=0;}if((fp=fopen("f1.txt","w"))==NULL){printf("Fileopenerror.\n");exit(0);}for(i=0;i<n;i++)fprintf(fp,"%s%s%d%d%d%d%d\n",s[i].no,s[i].name,s[i].bs,s[i].ks,s[i].ss,s[i].gk,s[i].sj);fclose(fp);}/////////////////////////////////////////////////////////////voidbaoyan()//能否保研{inti,j,grade,n;FILE*fp;FILE*fp1;FILE*fp2;if((fp2=fopen("f1.txt","r"))==NULL){printf("Fileopenerror.\n");exit(0);}fscanf(fp2,"%d",&n);fclose(fp2);if((fp=fopen("f1.txt","r"))==NULL){printf("Fileopenerror.\n");exit(0);}for(i=0;i<n;i++){fscanf(fp,"%s%s%d%d%d%d%d\n",&s[i].no,&s[i].name,&s[i].bs,&s[i].ks,&s[i].ss,&s[i].gk,&s[i].sj);}fclose(fp);if((fp1=fopen("f2.txt","w"))==NULL){printf("Fileopenerror.\n");exit(0);}for(j=0;j<n;j++){grade=s[j].bs*0.6+s[j].ks*0.3+s[j].ss*0.1;if(s[j].gk==1||s[j].sj==0){fprintf(fp1,"%s%s%d%d%d%d%d%d%d\n",s[j].no,s[j].name,s[j].bs,s[j].ks,s[j].ss,s[j].gk,s[j].sj,0,grade);}}fclose(fp1);}////////
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第5單元 走向近代【考題猜想】(純試題)-2023-2024學(xué)年九年級歷史上學(xué)期期中考點(diǎn)大串講(部編版)
- 課題申報(bào)參考:面向最后一公里配送的無人機(jī)集貨中心選址及任務(wù)分配研究
- 二零二五年度米廠水稻種植與農(nóng)村電商合作項(xiàng)目合同4篇
- 2025年度餐飲店承包經(jīng)營與食品安全責(zé)任合同
- 2025年度個(gè)人虛擬形象設(shè)計(jì)制作合同樣本4篇
- 2025年度二零二五年度木材加工廢棄物處理合同規(guī)范4篇
- 二零二五版木制托盤庫存管理與采購合同4篇
- 2025年度個(gè)人貨運(yùn)車輛保險(xiǎn)合同范本大全3篇
- 二零二五年度玻璃瓶罐生產(chǎn)與銷售采購合同3篇
- 2025年度文化旅游項(xiàng)目承包商擔(dān)保合同范本4篇
- 《職業(yè)培訓(xùn)師教程》課件
- (康德一診)重慶市2025屆高三高三第一次聯(lián)合診斷檢測 英語試卷(含答案詳解)
- 2025年福建泉州文旅集團(tuán)招聘24人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 文化沖突與民族認(rèn)同建構(gòu)-洞察分析
- 《疥瘡的防治及治療》課件
- 學(xué)校對口幫扶計(jì)劃
- 腫瘤全程管理
- 《3-6歲兒童學(xué)習(xí)與發(fā)展指南》專題培訓(xùn)
- 導(dǎo)尿及留置導(dǎo)尿技術(shù)
- 2024年高中一年級數(shù)學(xué)考試題及答案
- 寒假作業(yè)一年級上冊《數(shù)學(xué)每日一練》30次打卡
評論
0/150
提交評論