版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
課設(shè)題目題目:研究生推免(保研)排名統(tǒng)計(jì)程序具體內(nèi)容:已知文本文件f1.txt中存放了某校應(yīng)屆大四學(xué)生的相關(guān)信息(不超過(guò)5000人),具體數(shù)據(jù)及存放格式為:每行存放一個(gè)學(xué)生的數(shù)據(jù),共有7項(xiàng),依次為:學(xué)號(hào)、姓名、專(zhuān)業(yè)必修課平均成績(jī)、科技活動(dòng)獎(jiǎng)勵(lì)加分、社會(huì)活動(dòng)獎(jiǎng)勵(lì)加分、是否有專(zhuān)業(yè)必修課掛科記錄、是否通過(guò)大學(xué)英語(yǔ)四級(jí)。其中,學(xué)號(hào)為8位數(shù)字字符,其中前2位數(shù)字表示學(xué)生所在的學(xué)院,第3位數(shù)字表示學(xué)生的專(zhuān)業(yè),第4-5位數(shù)字表示學(xué)生的年級(jí),統(tǒng)一為09,第6位數(shù)字表示學(xué)生所在年級(jí)同專(zhuān)業(yè)內(nèi)的編號(hào),即所稱(chēng)的班號(hào),第7-8位數(shù)字表示學(xué)生班級(jí)內(nèi)的序號(hào),如學(xué)號(hào)07509123表示,機(jī)電學(xué)院(07)通信工程專(zhuān)業(yè)(5)09級(jí)(09)1班(1)第23號(hào)(23)學(xué)生;姓名為長(zhǎng)度不超過(guò)10個(gè)的字符;專(zhuān)業(yè)必修課平均成果、科技活動(dòng)獎(jiǎng)勵(lì)加分、社會(huì)活動(dòng)獎(jiǎng)勵(lì)加分均為0-100以?xún)?nèi)的整數(shù)(含0和100);是否有專(zhuān)業(yè)必修課掛科記錄、是否通過(guò)大學(xué)英語(yǔ)四級(jí)均為0或1兩個(gè)整型數(shù)字,為1分別表示有專(zhuān)業(yè)必修課掛科記錄或通過(guò)大學(xué)英語(yǔ)四級(jí),為0分別表示沒(méi)有專(zhuān)業(yè)必修課掛科記錄或沒(méi)有通過(guò)大學(xué)英語(yǔ)四級(jí)。該校的保研政策是:必須沒(méi)有專(zhuān)業(yè)必修課掛科記錄且通過(guò)大學(xué)英語(yǔ)四級(jí)考試,在此前提下,劃分推免研究生指標(biāo)。外推指標(biāo)按專(zhuān)業(yè)排名,給予2%的指標(biāo),小數(shù)部分四舍五入。內(nèi)推指標(biāo)按班級(jí)排名,給予15%的指標(biāo),小數(shù)部分四舍五入。如果某班有外推指標(biāo),外推指標(biāo)不占內(nèi)推指標(biāo)。排名計(jì)算方法:專(zhuān)業(yè)必修課成績(jī)占60%,科技活動(dòng)獎(jiǎng)勵(lì)占30%,社會(huì)活動(dòng)獎(jiǎng)勵(lì)占10%。請(qǐng)編寫(xiě)程序,讀出文件f1.txt中的內(nèi)容,再按保研政策確定每個(gè)人的保研狀況(0表示沒(méi)有獲得推免資格,1表示獲得內(nèi)推資格,2表示獲得外推資格)并存入f2.txt中,并實(shí)現(xiàn)以下功能:(1)能夠統(tǒng)計(jì)某個(gè)班所有獲得保研資格的學(xué)生信息。(2)能夠統(tǒng)計(jì)某個(gè)專(zhuān)業(yè)所有獲得保研資格的學(xué)生信息。(3)能夠統(tǒng)計(jì)哪個(gè)班獲得的保研資格的學(xué)生人數(shù)最多。(4)能夠統(tǒng)計(jì)全校所有獲得外推資格的學(xué)生名單,其結(jié)果即可屏幕顯示,也可存入文件。(5)學(xué)生可以根據(jù)姓名和學(xué)號(hào)查詢(xún)自己是否獲得保研資格。說(shuō)明:=1\*GB3①系統(tǒng)程序要有界面=2\*GB3②存入文件f2.txt中的數(shù)據(jù),每行存一個(gè)學(xué)生的數(shù)據(jù),每行之間的不同信息用空格分隔。題目分析該題目要求設(shè)計(jì)一個(gè)研究生推免(保研)排名統(tǒng)計(jì)查詢(xún)系統(tǒng),導(dǎo)入含有5000個(gè)考生信息的txt文本后,能實(shí)現(xiàn)統(tǒng)計(jì)某個(gè)班所有獲得保研資格的學(xué)生信息;能夠統(tǒng)計(jì)某個(gè)專(zhuān)業(yè)所有獲得保研資格的學(xué)生信息;能夠統(tǒng)計(jì)哪個(gè)班獲得的保研資格的學(xué)生人數(shù)最多;能夠統(tǒng)計(jì)全校所有獲得外推資格的學(xué)生名單,其結(jié)果即可屏幕顯示,也可存入文件;學(xué)生根據(jù)姓名和學(xué)號(hào)查詢(xún)自己是否獲得保研資格的功能。要實(shí)現(xiàn)這么多功能,就需要一個(gè)可供選擇的主菜單功能表,每個(gè)菜單都要鏈接到相應(yīng)的程序?qū)崿F(xiàn)相應(yīng)功能,所以,整體就需要建立一個(gè)多分支選擇結(jié)構(gòu)。除此之外,為了方便用戶(hù)查詢(xún),還要設(shè)計(jì)一個(gè)使考生只要不關(guān)閉程序或者按指定輸入而結(jié)束程序就能一直查詢(xún)下去的功能。設(shè)計(jì)思路3.1、設(shè)計(jì)思想將全局變量和局部變量結(jié)合使用,靈活運(yùn)用。巧用指針,簡(jiǎn)化數(shù)據(jù)處理難度。(3)以全局結(jié)構(gòu)來(lái)隨時(shí)定義結(jié)構(gòu)數(shù)組。(4)以結(jié)構(gòu)化各個(gè)功能模塊,函數(shù)間的調(diào)用精簡(jiǎn)整個(gè)函數(shù)。(7)設(shè)置循環(huán),實(shí)現(xiàn)多次查詢(xún)。(6)以冒泡方式比較大小排列出學(xué)生成績(jī)成績(jī)。(7)以讀一個(gè)打印一個(gè)的思想,實(shí)現(xiàn)顯示全部信息。(8)以先判斷再打印的思想,來(lái)實(shí)現(xiàn)查找推免狀況。3.2、總思路文本讀取+排序+統(tǒng)計(jì)+查詢(xún)可分為這樣幾個(gè)模塊:讀入文件模塊、剔除掛科或四級(jí)未過(guò)者模塊、全校成績(jī)排序模塊、識(shí)別院系模塊、外推模塊、識(shí)別班級(jí)(不包括外推者)模塊、內(nèi)推模塊、保存文件模塊。通過(guò)調(diào)用這些模塊來(lái)實(shí)現(xiàn)題目要求的五大功能。3.3、圖示分析1.按班級(jí)查詢(xún)保研資格信息2.按專(zhuān)業(yè)查詢(xún)保研信息1.按班級(jí)查詢(xún)保研資格信息2.按專(zhuān)業(yè)查詢(xún)保研信息主菜單3.統(tǒng)計(jì)保研資格名額最多班級(jí)4.統(tǒng)計(jì)全校獲得外推資格名額5.根據(jù)學(xué)號(hào)查詢(xún)個(gè)人保研信息顯示找到的信息7.退出程序6.根據(jù)姓名查詢(xún)個(gè)人保研信息 四、各功能模塊及其運(yùn)行結(jié)果4.1、菜單和主函數(shù)將各個(gè)功能模塊設(shè)計(jì)成菜單的選項(xiàng)模式,先輸出在屏幕上,再獲取用戶(hù)的鍵盤(pán)輸入“v”,由“v”的值進(jìn)行一個(gè)多分枝選擇結(jié)構(gòu),調(diào)用相應(yīng)的功能程序模塊。【源代碼】voidmain(){ 【函數(shù)申明】charINPUT_sub[4],INPUT_cla[7];//要輸入的專(zhuān)業(yè)號(hào)、班號(hào)charrec_sub[4],rec_cla[7];//用于識(shí)別專(zhuān)業(yè)號(hào)、班號(hào) charcInputString[10]; charv; load(a); //讀取 sort(a); //剔除 sort_1(b); //全校排名 do { printf("\n\n"); printf("/*********歡迎使用保研信息查詢(xún)系統(tǒng)******/\n\n"); printf("請(qǐng)選擇服務(wù)》》1.按班級(jí)查詢(xún)保研資格信息****/\n\n"); printf("/******************2.按專(zhuān)業(yè)查詢(xún)保研信息*****/\n\n"); printf("/******************3.統(tǒng)計(jì)保研資格名額最多班級(jí)/\n\n"); printf("/******************4.統(tǒng)計(jì)全校獲得外推資格名額/\n\n"); printf("/******************5.根據(jù)學(xué)號(hào)查詢(xún)個(gè)人保研信息/\n\n"); printf("/******************6.根據(jù)姓名查詢(xún)個(gè)人保研信息/\n\n"); printf("/******************7.退出程序*****************/\n\n");scanf("%d",&v);【獲取鍵盤(pán)輸入值v】 getchar();【消除scanf對(duì)getchar的影響】 switch(v)【switch多分支選擇結(jié)構(gòu)】 { 【輸出功能菜單】 case1: { printf("請(qǐng)輸入要查詢(xún)班級(jí)的院系編號(hào),如072*\n"); gets(INPUT_sub); printf("請(qǐng)輸入要查詢(xún)班級(jí)的班級(jí)編號(hào),如072091\n"); gets(INPUT_cla); function_1(INPUT_sub,INPUT_cla,b);break;}【調(diào)用功能01函數(shù)】 case2:······ 【調(diào)用功能02函數(shù)】······· default:break; } }while(v<7);}4.2、基礎(chǔ)模塊4.2.1、讀入文件函數(shù)這個(gè)函數(shù)是整個(gè)程序更的根本條件,由于一個(gè)學(xué)生的信息包含多種不同類(lèi)型的信息且是一個(gè)整體,所以要將學(xué)生的信息建立一個(gè)結(jié)構(gòu)體,每個(gè)成員對(duì)應(yīng)相應(yīng)的變量類(lèi)型,由于部分學(xué)生的學(xué)號(hào)第一位為0,所以將學(xué)號(hào)定義為字符串,名字為字符串,成績(jī)是整型,其他都可以用字符型的數(shù)組,開(kāi)始判定文件f1是否存在,存在則執(zhí)行while循環(huán),從i=0讀入文件。【源代碼】inti=0;intload(structstudent*a){ FILE*fp1; if((fp1=fopen("f1.txt","r"))==NULL)【判斷f1是否存在】{ printf("cannotopenthisfile\n");【不存在的情況】 return0;} while(!feof(fp1)) 【存在就直接執(zhí)行while循環(huán)】{ fscaf······ i++; }【依次讀入文件】 return(i);【返回最后一名學(xué)生的位置】}4.2.2、剔除掛科或四級(jí)未過(guò)者這個(gè)函數(shù)是將全校掛科或者四級(jí)未過(guò)者(即無(wú)資格推免的學(xué)生)從總名單中提剔除,進(jìn)而方便接下來(lái)的成績(jī)排名工作,原理是將工作組a[5000]中所有學(xué)生資料依次提取,通過(guò)判斷其中Fclass和CET4對(duì)應(yīng)的數(shù)字0/1,來(lái)進(jìn)行剔除,并將有資格保研的學(xué)生資料存入工作組b[5000]中?!驹创a】intsort(structstudent*a){ intj,k=0; for(j=0;j<i;j++)【通過(guò)for循環(huán)逐個(gè)篩選】 {if((a[j].Fclass==0)&&(a[j].CET4==1))【判斷是否掛科或CET4未通過(guò)】 { strcpy(b[k].num,a[j].num);【將篩選后的學(xué)生放入b[5000]】 ········} } i=k; return(i)}【返回最后一名學(xué)生的位置】4.2.3、全校排名函數(shù)這個(gè)函數(shù)是將工作組b[5000]中的所有學(xué)生按成績(jī)排名,其原理為“冒泡法”排序,通過(guò)for循環(huán)將學(xué)生按成績(jī)由高到低的順序排號(hào)好。【源代碼】voidsort_1(structstudent_1*b){ intj,k=0; floatscore_j,score_k;structstudent_1temp; for(j=0;j<i-1;j++){score_j=(float)((b[j].score_avr)*0.6+(b[j].bonus_sci)*0.3+(b[j].bonus_soc)*0.1);【計(jì)算綜合成績(jī)】 for(k=j+1;k<i;k++)【冒泡法按成績(jī)排序】{ score_k=(float)((b[k].score_avr)*0.6+(b[k].bonus_sci)*0.3+(b[k].bonus_soc)*0.1); if(score_j<score_k) {temp=b[j]; b[j]=b[k]; b[k]=temp;} } } }4.2.4、識(shí)別院系這個(gè)函數(shù)是在已按成績(jī)完成排序的學(xué)生中找到所需學(xué)院的學(xué)生,其原理為;首先利用strncpy語(yǔ)句將學(xué)生學(xué)號(hào)的前三位拷貝到一個(gè)臨時(shí)定義的字符串?dāng)?shù)組中,并用strcmp語(yǔ)句將其與所需學(xué)院的編號(hào)對(duì)比,符合條件者存入工作組sub[2000]中,通過(guò)for循環(huán)逐個(gè)挑選?!驹创a】intdevide_1(structstudent_1*b,structstudent_1*sub,charINPUT_sub[]){ intj,r=0; intv; for(j=0;j<i;j++) { strncpy(rec_sub,b[j].num,3);【學(xué)生學(xué)號(hào)的前三位拷貝到rec_sub】 if((strcmp(rec_sub,INPUT_sub))==0)【將rec_sub與所需學(xué)院編號(hào)比較】 { sub[r++]=b[j]; } 【符合條件者存入工作組sub[500]中】} returnr;} 【返回最后一名學(xué)生的位置】4.2.5、外推模塊這個(gè)函數(shù)是在已經(jīng)識(shí)別出的學(xué)院的學(xué)生中按2%的比例確定外推名額,并將外推者資料除存入工作組structstudent_1suc_out[800]中,其原理為將“學(xué)院總?cè)藬?shù)”*2%四舍五入后得到該學(xué)院外推總?cè)藬?shù)j,然后再將sub[2000]中的前j名學(xué)生選出即為外推者,并存入工作組suc_out[800]。【源代碼】intsuccess_out(structstudent_1*sub,intnum){ intj,k=0;j=(int)(((num)*0.2+5)/10); 【四舍五入】 if(0==j)【如果某學(xué)院人數(shù)太少則無(wú)外推者】 { return0;} for(k=0;k<j;k++)【將學(xué)院前j名學(xué)生選出】 { suc_out[k]=sub[k];【選出外推者】 suc_out[k].status=2;} returnk;【返回最后一名學(xué)生是位置】}4.2.6、識(shí)別班級(jí)(不包括外推) 這個(gè)函數(shù)是在同院系除去外推者的學(xué)生中找出所需班級(jí)的學(xué)生,其原理與上述2.4識(shí)別院系相似,再次不贅述。【源代碼】{ intj,k=0; for(j=numout;j<numsub;j++) {strncpy(rec_cla,sub[j].num,6);【學(xué)生學(xué)號(hào)的前6位拷貝到rec_cla】 if((strcmp(rec_cla,INPUT_cla))==0)【將rec_cla與所需班級(jí)編號(hào)比較】 {cla[k++]=sub[j];} 【將符合條件者存入cla[1000]】 } returnk;} 【返回最后一名學(xué)生的位置】4.2.7、內(nèi)推模塊這個(gè)函數(shù)是在已經(jīng)識(shí)別班級(jí)中除去外推者按15%的名額實(shí)施內(nèi)推,其原理與上述2.5外推模塊相似,再次不贅述?!驹创a】intsuccess_in(structstudent_1*cla,intnumcla){ intj,k; j=(int)((numcla)*1.5+5)/10; 【四舍五入】 for(k=0;k<j;k++) {suc_in[k]=cla[k];} returnk;}4.3.功能函數(shù)4.3.1按班級(jí)查詢(xún)保研資格信息 原理:根據(jù)輸入的學(xué)院、班級(jí)編號(hào)利用上述基礎(chǔ)模塊實(shí)現(xiàn)題目要求功能,依次輸出所查班級(jí)的外推者和內(nèi)推者名單。 【源代碼】voidfunction_1(charINPUTsub[],charINPUT_cla[],structstudent_1*b){ intj=0,k=0,m; intCountSub; //學(xué)院總數(shù) intCountClass; //班級(jí)總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級(jí)內(nèi)推總數(shù) CountSub=devide_1(b,sub,INPUTsub); //識(shí)別院系 CountOut=success_out(sub,CountSub); //確定外推名額 CountClass=devide_2(sub,CountSub,CountOut,INPUT_cla);//識(shí)別班級(jí) CountIn=success_in(cla,CountClass); //確定內(nèi)推名額 j=CountOut; //外推總數(shù) k=CountIn; //班級(jí)內(nèi)推總數(shù) printf········ //輸出本班外推者 for(m=0;m<j;m++) { strncpy(rec_cla,suc_out[m].num,6); if((strcmp(rec_cla,INPUT_cla))==0)printf······· } printf("輸出本班內(nèi)推者\(yùn)n"); for(m=0;m<k;m++) //輸出內(nèi)推者printf·······}4.3.2按專(zhuān)業(yè)查詢(xún)保研信息原理:根據(jù)輸入的學(xué)院、專(zhuān)業(yè)編號(hào)利用上述基礎(chǔ)模塊實(shí)現(xiàn)題目要求功能,通過(guò)for循環(huán)找出要查專(zhuān)業(yè)所有班級(jí)的保研情況?!驹创a】voidfunction_2(charINPUTsub[],structstudent_1*b){ charAllClass[7]; inti; intj=0,k=0,m; intCountSub; //學(xué)院總數(shù) intCountClass; //班級(jí)總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級(jí)內(nèi)推總數(shù) CountSub=devide_1(b,sub,INPUTsub); //識(shí)別院系 CountOut=success_out(sub,CountSub); //確定外推名額 j=CountOut; //外推總數(shù) printf("/***************輸出專(zhuān)業(yè)保研名單************/\n"); for(m=0;m<j;m++) //輸出專(zhuān)業(yè)外推者 printf······· printf("輸出專(zhuān)業(yè)內(nèi)推者\(yùn)n"); //輸出專(zhuān)業(yè)內(nèi)推者 for(i=0;i<10;i++)//按班級(jí)循環(huán)依次輸出 { ········ for(m=0;m<k;m++) //輸出內(nèi)推者 Printf·······}4.3.3統(tǒng)計(jì)保研資格名額最多班級(jí) 原理:通過(guò)for循環(huán)找出要查專(zhuān)業(yè)所有班級(jí)的保研情況存入工作組中,利用冒泡法按保研人數(shù)排名并找出人數(shù)最多的班級(jí)?!驹创a】voidfunction_3(){ charAllClass[7]; charAllSub[4]; intj=0,k=0,m; inti=0; intl; intCountSub; //學(xué)院總數(shù) intCountClass; //班級(jí)總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級(jí)內(nèi)推總數(shù) intCountClassout=0; //班級(jí)外推總數(shù) intCountClassAll; //班級(jí)保研總數(shù) intSchoolNO; intClassNO; intmax=0; intnumber=0; AllClass[6]=0; for(SchoolNO=0;SchoolNO<999;SchoolNO++) {AllSub[0]=AllClass[0]=(SchoolNO/100)+48; AllSub[1]=AllClass[1]=((SchoolNO/10)%10)+48; AllSub[2]=AllClass[2]=(SchoolNO%10)+48; AllSub[3]=0; AllClass[3]=0+48; AllClass[4]=9+48; for(ClassNO=0;ClassNO<9;ClassNO++) { AllClass[5]=ClassNO+48; CountSub=devide_1(b,sub,AllSub); //識(shí)別院系 CountOut=success_out(sub,CountSub); //確定外推名額 CountClass=devide_2(sub,CountSub,CountOut,AllClass);//識(shí)別班級(jí) CountIn=success_in(cla,CountClass); //確定內(nèi)推名額 j=CountOut; //外推總數(shù) for(m=0;m<j;m++) //輸出本班外推者 { strncpy(rec_cla,suc_out[m].num,6); if((strcmp(rec_cla,INPUT_cla))==0) { CountClassout++;} } l=i++; CountClassAll=CountClassout+CountIn; strcpy(classNOAll[l].classname,AllClass); classNOAll[l].AllNO=CountClassAll; if(CountClassAll>max) {max=CountClassAll;number=l;} } } Printf······}4.3.4統(tǒng)計(jì)全校獲得外推資格名額(含存儲(chǔ)文件的程序)原理:與原理3.3相似【源代碼】voidfunction_4(){ charAllClass[7]; charAllSub[4]; intj=0,k=0,m; inti=0; intl; intCountSub; //學(xué)院總數(shù) intCountClass; //班級(jí)總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級(jí)內(nèi)推總數(shù) intCountClassout=0; //班級(jí)外推總數(shù) intCountClassAll; //班級(jí)保研總數(shù) intSchoolNO; intClassNO; intmax=0; intnumber=0; FILE*fp; FILE*fp3; if((fp=fopen("f2.txt","w"))==NULL) { printf("Fileopenerror.\n"); exit(0);} if((fp3=fopen("f3.txt","w"))==NULL) { printf("Fileopenerror.\n"); exit(0);} AllClass[6]=0; for(SchoolNO=0;SchoolNO<999;SchoolNO++) { AllSub[0]=AllClass[0]=(SchoolNO/100)+48; AllSub[1]=AllClass[1]=((SchoolNO/10)%10)+48; AllSub[2]=AllClass[2]=(SchoolNO%10)+48; AllSub[3]=0;AllClass[3]=0+48; AllClass[4]=9+48; for(ClassNO=0;ClassNO<9;ClassNO++) { AllClass[5]=ClassNO+48; CountSub=devide_1(b,sub,AllSub); //識(shí)別院系 CountOut=success_out(sub,CountSub); //確定外推名額 CountClass=devide_2(sub,CountSub,CountOut,AllClass);//識(shí)別班級(jí) CountIn=success_in(cla,CountClass); //確定內(nèi)推名額 for(m=0;m<CountIn;m++) {fprintf·······} } for(m=0;m<CountOut;m++) {printf································································· fprintf(······· fprintf(·······} } fclose(fp);fclose(fp3); }4.3.5根據(jù)學(xué)號(hào)或姓名查詢(xún)個(gè)人保研信息原理:利用2中的基礎(chǔ)模塊,并通過(guò)for循環(huán)實(shí)現(xiàn)查詢(xún)功能【源代碼】voidfunction_5(charINPUTid[],intntype){ structstudent_1SUCall[5000]; charAllClass[7]; charAllSub[4]; intj=0,k=0,m; inti=0; intl; intCountSub; //學(xué)院總數(shù) intCountClass; //班級(jí)總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級(jí)內(nèi)推總數(shù) intCountClassout=0; //班級(jí)外推總數(shù) intCountClassAll; //班級(jí)保研總數(shù) intSchoolNO; intClassNO; intnlookup=0;AllClass[6]=0; for(SchoolNO=0;SchoolNO<999;SchoolNO++) { AllSub[0]=AllClass[0]=(SchoolNO/100)+48; AllSub[1]=AllClass[1]=((SchoolNO/10)%10)+48; AllSub[2]=AllClass[2]=(SchoolNO%10)+48;AllSub[3]=0; AllClass[3]=0+48;AllClass[4]=9+48; for(ClassNO=0;ClassNO<9;ClassNO++) {AllClass[5]=ClassNO+48; CountSub=devide_1(b,sub,AllSub); //識(shí)別院系 CountOut=success_out(sub,CountSub); //確定外推名額 CountClass=devide_2(sub,CountSub,CountOut,AllClass);//識(shí)別班級(jí) CountIn=success_in(cla,CountClass); //確定內(nèi)推名額 for(m=0;m<CountIn;m++) { SUCall[i++]=suc_in[m];} } for(m=0;m<CountOut;m++) { SUCall[i++]=suc_out[m];} } for(m=0;m<i;m++) {if(0==ntype) //按學(xué)號(hào)查詢(xún) {if((strcmp(INPUTid,SUCall[m].num))==0) {printf······· if(1==SUCall[m].status){printf("內(nèi)推\n");} if(2==SUCall[m].status){printf("外推\n");} nlookup=1; } } Else //按姓名查詢(xún) {if((strcmp(INPUTid,SUCall[m].name))==0) { printf("學(xué)號(hào):%s姓名:%s平均成績(jī):%d科技活動(dòng):%d社會(huì)活動(dòng):%d",SUCall[m].num,SUCall[m].name,SUCall[m].score_avr,SUCall[m].bonus_sci,SUCall[m].bonus_soc); if(1==SUCall[m].status){ printf("內(nèi)推\n");} if(2==SUCall[m].status){ printf("外推\n");} nlookup=1; } } } if(0==nlookup) { printf("該考生沒(méi)有保研資格\n");}}五.課設(shè)總結(jié)為期4天的課程設(shè)計(jì)即將結(jié)束,在這幾天里,我收獲頗多。首先,我確實(shí)感受到課程設(shè)計(jì)的重要性。課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過(guò)程.隨著科學(xué)技術(shù)發(fā)展的日新日異,當(dāng)今計(jì)算機(jī)應(yīng)用在生活中可以說(shuō)得是無(wú)處不在。因此作為二十一世紀(jì)的大學(xué)來(lái)說(shuō)掌握計(jì)算機(jī)開(kāi)發(fā)技術(shù)是十分重要的。但是,我們光學(xué)習(xí)了課本知識(shí)還遠(yuǎn)遠(yuǎn)不能勝任復(fù)雜多變的實(shí)際應(yīng)用情況。實(shí)踐是對(duì)所學(xué)知識(shí)是否掌握的最好檢測(cè)依據(jù)。其次,我體會(huì)到了編程工作的艱辛。從拿到題目,到構(gòu)思整體框架,然后分析所需要完成的功能,之后將其分為不同的模塊,還要考慮到各模塊之間的連接。這些工作完成后就是編寫(xiě)代碼。編寫(xiě)代碼的過(guò)程需要細(xì)心謹(jǐn)慎,一點(diǎn)極小的錯(cuò)誤就有可能使整個(gè)程序不能實(shí)現(xiàn)預(yù)定的功能,嚴(yán)重的甚至?xí)鹣到y(tǒng)癱瘓。再之后,就是復(fù)雜的調(diào)試過(guò)程,如果前面的代碼寫(xiě)的不好,很有可能出現(xiàn)幾十個(gè)甚至上百個(gè)錯(cuò)誤,修改錯(cuò)誤的過(guò)程是一個(gè)非常復(fù)雜的過(guò)程,有的大程序好幾個(gè)星期找不出來(lái)錯(cuò)誤從而嚴(yán)重影響編程進(jìn)度。再次,我也充分體會(huì)到編程方法和規(guī)范化編程的重要性。程序的可讀性、可維護(hù)性以及穩(wěn)定性將極大的影響系統(tǒng)的使用。另外,調(diào)試的技巧和良好的人機(jī)界面也對(duì)系統(tǒng)的編寫(xiě)和運(yùn)行產(chǎn)生很大的影響。最后,此次課程設(shè)計(jì)讓我感覺(jué)到人外有人,山外有山,一個(gè)人的能力畢竟是有限的,我們要善于在不懂的時(shí)候向懂得比較多的老師、同學(xué)們請(qǐng)教。在請(qǐng)教的過(guò)程中,不僅學(xué)會(huì)了自己不懂的知識(shí),而且還加強(qiáng)了和他們的交流溝通。未來(lái)的編程工作量及其大,光靠自己的力量是不可能完成的,我們要從現(xiàn)在就開(kāi)始培養(yǎng)我們的團(tuán)隊(duì)合作精神,充分發(fā)揮大家的長(zhǎng)處,來(lái)完成自己不可能完成的工作。這次課程設(shè)計(jì)終于順利完成了,在設(shè)計(jì)中遇到了很多編程問(wèn)題,最后在老師的辛勤指導(dǎo)下,終于迎刃而解。同時(shí),在老師的身上我學(xué)得到很多實(shí)用的知識(shí),在次我表示感謝!同時(shí),對(duì)給過(guò)我?guī)椭乃型瑢W(xué)和各位指導(dǎo)老師再次表示忠心的感謝!六.附錄(源代碼)#include<stdio.h>#include<string.h>#include<stdlib.h>#include<windows.h>structstudent{ charnum[9]; charname[10]; intscore_avr; intbonus_sci; intbonus_soc; intFclass; intCET4; };structstudent_1{ charnum[9]; charname[10]; intscore_avr; intbonus_sci; intbonus_soc; intFclass; intCET4; intstatus;};structclassALLNO{ charclassname[7]; intAllNO; };charINPUT_sub[4],INPUT_cla[7];//要輸入的專(zhuān)業(yè)號(hào)、班號(hào)charrec_sub[4],rec_cla[7];//用于識(shí)別專(zhuān)業(yè)號(hào)、班號(hào)structclassALLNOclassNOAll[5000];structstudenta[5000];structstudent_1b[5000];structstudent_1sub[2000];//一個(gè)專(zhuān)業(yè)的工作組structstudent_1cla[1000];//一個(gè)班級(jí)的工作組structstudent_1suc_out[800]; //一個(gè)專(zhuān)業(yè)外推名額工作組structstudent_1suc_in[2000];//一個(gè)班內(nèi)推名額工作組intnum_sub,num_cla; //一個(gè)專(zhuān)業(yè)、班級(jí)的人數(shù)intnum_out;//一個(gè)專(zhuān)業(yè)外推人數(shù)intnum_in;//一個(gè)班級(jí)內(nèi)推人數(shù)/**********************讀取文件***************************/inti=0;/****將i設(shè)置成為全局變量,以便于其他子函數(shù)直接使用****/intload(structstudent*a){ FILE*fp1; if((fp1=fopen("f1.txt","r"))==NULL){ printf("cannotopenthisfile\n"); return0; } while(!feof(fp1)) { fscanf(fp1,"%s%s%d%d%d%d%d",a[i].num,a[i].name,&a[i].score_avr, &a[i].bonus_sci,&a[i].bonus_soc,&a[i].Fclass,&a[i].CET4); i++; } return(i);}/**************剔除掛科或四級(jí)未過(guò)者****************/intsort(structstudent*a){ intj,k=0; for(j=0;j<i;j++) { if((a[j].Fclass==0)&&(a[j].CET4==1)) { strcpy(b[k].num,a[j].num);strcpy(b[k].name,a[j].name); b[k].score_avr=a[j].score_avr;b[k].bonus_sci=a[j].bonus_sci; b[k].bonus_soc=a[j].bonus_soc;b[k].Fclass=a[j].Fclass; b[k].CET4=a[j].CET4; b[k++].status=1;} } i=k; return(i);}/*******************全校排名**********************/voidsort_1(structstudent_1*b){ intj,k=0; floatscore_j,score_k; structstudent_1temp; for(j=0;j<i-1;j++) {score_j=(float)((b[j].score_avr)*0.6+(b[j].bonus_sci)*0.3+(b[j].bonus_soc)*0.1);//計(jì)算綜合成績(jī) for(k=j+1;k<i;k++) {score_k=(float)((b[k].score_avr)*0.6+(b[k].bonus_sci)*0.3+(b[k].bonus_soc)*0.1); if(score_j<score_k) { temp=b[j]; b[j]=b[k]; b[k]=temp;} } } }/******************識(shí)別院系********************/intdevide_1(structstudent_1*b,structstudent_1*sub,charINPUT_sub[]){intj,r=0; intv;for(j=0;j<i;j++) { strncpy(rec_sub,b[j].num,3); if((strcmp(rec_sub,INPUT_sub))==0) { sub[r++]=b[j];} }returnr;}/*******************外推模塊********************/intsuccess_out(structstudent_1*sub,intnum){ intj,k=0;j=(int)(((num)*0.2+5)/10); //四舍五入 if(0==j) {return0;} for(k=0;k<j;k++) { suc_out[k]=sub[k];uc_out[k].status=2;} returnk;}/********************識(shí)別班級(jí)(不包括外推)******************/intdevide_2(structstudent_1*sub,intnumsub,intnumout,charINPUT_cla[]){ intj,k=0; intv; for(j=numout;j<numsub;j++) { strncpy(rec_cla,sub[j].num,6); if((strcmp(rec_cla,INPUT_cla))==0) { cla[k++]=sub[j];} } returnk;} /********************內(nèi)推模塊******************/intsuccess_in(structstudent_1*cla,intnumcla){ intj,k; j=(int)((numcla)*1.5+5)/10; //四舍五入 for(k=0;k<j;k++) { suc_in[k]=cla[k];} returnk;}/*******************功能—01******************/voidfunction_1(charINPUTsub[],charINPUT_cla[],structstudent_1*b){ intj=0,k=0,m; intCountSub; //學(xué)院總數(shù) intCountClass; //班級(jí)總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級(jí)內(nèi)推總數(shù) CountSub=devide_1(b,sub,INPUTsub); //識(shí)別院系 CountOut=success_out(sub,CountSub); //確定外推名額 CountClass=devide_2(sub,CountSub,CountOut,INPUT_cla);//識(shí)別班級(jí) CountIn=success_in(cla,CountClass); //確定內(nèi)推名額 j=CountOut; //外推總數(shù) k=CountIn; //班級(jí)內(nèi)推總數(shù) printf("/***************所查班級(jí)所有保研信息************/\n"); printf("/**學(xué)號(hào)**姓名**平均成績(jī)**科技活動(dòng)**社會(huì)活動(dòng)**是否掛科**CET4**保研狀況**/\n"); printf("輸出本班外推者\(yùn)n"); for(m=0;m<j;m++) //輸出本班外推者 { strncpy(rec_cla,suc_out[m].num,6); if((strcmp(rec_cla,INPUT_cla))==0) {printf("%s%s%d%d%d%d%d%d\n",suc_out[m].num,suc_out[m].name,suc_out[m].score_avr,suc_out[m].bonus_sci,suc_out[m].bonus_soc,suc_out[m].Fclass,suc_out[m].CET4,suc_out[m].status); } } printf("輸出本班內(nèi)推者\(yùn)n"); for(m=0;m<k;m++) //輸出內(nèi)推者 { printf("%s%s%d%d%d%d%d%d\n",suc_in[m].num,suc_in[m].name,suc_in[m].score_avr,suc_in[m].bonus_sci,suc_in[m].bonus_soc,suc_in[m].Fclass,suc_in[m].CET4,suc_in[m].status);}}/****************************功能-02**********************************/voidfunction_2(charINPUTsub[],structstudent_1*b){ charAllClass[7]; inti;intj=0,k=0,m; intCountSub; //學(xué)院總數(shù) intCountClass; //班級(jí)總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級(jí)內(nèi)推總數(shù) CountSub=devide_1(b,sub,INPUTsub); //識(shí)別院系 CountOut=success_out(sub,CountSub); //確定外推名額 j=CountOut; //外推總數(shù) printf("/***************輸出專(zhuān)業(yè)保研名單************/\n"); printf("/**學(xué)號(hào)**姓名**平均成績(jī)**科技活動(dòng)**社會(huì)活動(dòng)**是否掛科**CET4**保研狀況**/\n"); printf("輸出專(zhuān)業(yè)外推者\(yùn)n"); for(m=0;m<j;m++) {printf("%s%s%d%d%d%d%d%d\n",suc_out[m].num,suc_out[m].name,suc_out[m].score_avr,suc_out[m].bonus_sci,suc_out[m].bonus_soc,suc_out[m].Fclass,suc_out[m].CET4,suc_out[m].status); } printf("輸出專(zhuān)業(yè)內(nèi)推者\(yùn)n"); for(i=0;i<10;i++) { strncpy(AllClass,INPUTsub,3); AllClass[3]='0';AllClass[4]='9';AllClass[5]=i+48;AllClass[6]=0; CountClass=devide_2(sub,CountSub,CountOut,AllClass);//識(shí)別班級(jí) CountIn=success_in(cla,CountClass); //確定內(nèi)推名額 k=CountIn; //班級(jí)內(nèi)推總數(shù) for(m=0;m<k;m++) //輸出內(nèi)推者 {printf("%s%s%d%d%d%d%d%d\n",suc_in[m].num,suc_in[m].name,suc_in[m].score_avr,suc_in[m].bonus_sci,suc_in[m].bonus_soc,suc_in[m].Fclass,suc_in[m].CET4,suc_in[m].status);} }}/****************************功能-03********************************/voidfunction_3(){ charAllClass[7];charAllSub[4];intj=0,k=0,m;inti=0;intl; intCountSub; //學(xué)院總數(shù) intCountClass; //班級(jí)總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級(jí)內(nèi)推總數(shù) intCountClassout=0;//班級(jí)外推總數(shù) intCountClassAll; //班級(jí)保研總數(shù) intSchoolNO; intClassNO; intmax=0; intnumber=0; AllClass[6]=0; for(SchoolNO=0;SchoolNO<999;SchoolNO++){ AllSub[0]=AllClass[0]=(SchoolNO/100)+48;AllSub[1]=AllClass[1]=((SchoolNO/10)%10)+48; AllSub[2]=AllClass[2]=(SchoolNO%10)+48; AllSub[3]=0;AllClass[3]=0+48;AllClass[4]=9+48; for(ClassNO=0;ClassNO<9;ClassNO++) {AllClass[5]=ClassNO+48; CountSub=devide_1(b,sub,AllSub); //識(shí)別院系 CountOut=success_out(sub,CountSub); //確定外推名額 CountClass=devide_2(sub,CountSub,CountOut,AllClass);//識(shí)別班級(jí) CountIn=success_in(cla,CountClass); //確定內(nèi)推名額 j=CountOut; //外推總數(shù) for(m=0;m<j;m++) //輸出本班外推者 { strncpy(rec_cla,suc_out[m].num,6); if((strcmp(rec_cla,INPUT_cla))==0) { CountClassout++;} } l=i++; CountClassAll=CountClassout+CountIn; strcpy(classNOAll[l].classname,AllClass); classNOAll[l].AllNO=CountClassAll; if(CountClassAll>max) { max=CountClassAll;number=l;} } }printf("保研人數(shù)最多的班級(jí)%s保研人數(shù)%d\n",classNOAll[number].classname,classNOAll[number].AllNO);}/****************************功能-04*******************************/voidfunction_4(){ charAllClass[7]; charAllSub[4]; intj=0,k=0,m; inti=0; intl; intCountSub; //學(xué)院總數(shù) intCountClass; //班級(jí)總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級(jí)內(nèi)推總數(shù) intCountClassout=0;//班級(jí)外推總數(shù) intCountClassAll; //班級(jí)保研總數(shù) intSchoolNO;intClassNO; intmax=0; intnumber=0; FILE*fp; FILE*fp3; if((fp=fopen("f2.txt","w"))==NULL) {printf("Fileopenerror.\n");exit(0); } if((fp3=fopen("f3.txt","w"))==NULL) {printf("Fileopenerror.\n");exit(0); } AllClass[6]=0; for(SchoolNO=0;SchoolNO<999;SchoolNO++) { AllSub[0]=AllClass[0]=(SchoolNO/100)+48; AllSub[1]=AllClass[1]=((SchoolNO/10)%10)+48; AllSub[2]=AllClass[2]=(SchoolNO%10)+48; AllSub[3]=0; AllClass[3]=0+48; AllClass[4]=9+48; for(ClassNO=0;ClassNO<9;ClassNO++) { AllClass[5]=ClassNO+48; CountSub=devide_1(b,sub,AllSub); //識(shí)別院系 CountOut=success_out(sub,CountSub); //確定外推名額 CountClass=devide_2(sub,CountSub,CountOut,AllClass);//識(shí)別班級(jí) CountIn=success_in(cla,CountClass); //確定內(nèi)推名額 for(m=0;m<CountIn;m++) {fprintf(fp3,"%s%s%d%d%d%d%d%d\n",suc_in[m].num,suc_in[m].name,suc_in[m].score_avr,suc_in[m].bonus_sci,suc_in[m].bonus_soc,suc_in[m].Fclass,suc_in[m].CET4,suc_in[m].status);} } for(m=0;m<CountOut;m++) {printf("%s%s%d%d%d%d%d%d\n",suc_out[m].num,suc_out[m].name,suc_out[m].score_avr,suc_out[m].bonus_sci,suc_out[m].bonus_soc,suc_out[m].Fclass,suc_out[m].CET4,suc_out[m].status); fprintf(fp,"%s%s%d%d%d%d%d%d\n",suc_out[m].num,suc_out[m].name,suc_out[m].score_avr,suc_out[m].bonus_sci,suc_out[m].bonus_soc,suc_out[m].Fclass,suc_out[m].CET4,suc_out[m].status); fprintf(fp3,"%s%s%d%d%d%d%d%d\n",suc_out[m].num,suc_out[m].name,suc_out[m].score_avr,suc_out[m].bonus_sci,suc_out[m].bonus_soc,suc_out[m].Fclass,suc_out[m].CET4,suc_out[m].status);} } fclose(fp); fclose(fp3);}/****************************功能-05*******************************/voidfunction_5(charINPUTid[],intntype){ structstudent_1SUCall[5000]; charAllClass[7]; charAllSub[4]; intj=0,k=0,m; inti=0; intl; intCountSub; //學(xué)院總數(shù) intCountClass; //班級(jí)總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級(jí)內(nèi)推總數(shù) intCountClassout=0;//班級(jí)外推總數(shù) intCountClassAll; //班級(jí)保研總數(shù) intSchoolNO; intClassNO; intnlookup=0; AllClass[6]=0; for(SchoolNO=0;SchoolNO<999;SchoolNO++) { AllSub[0]=AllClass[0]=(SchoolNO/100)+48; AllSub[1]=AllClass[1]=((SchoolNO/10)%10)+48; AllSub[2]=AllClass[2]=(SchoolNO%10)+48; AllSub[3]=0; AllClass[3]=0+48; AllClass[4]=9+48; for
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 市政工程專(zhuān)項(xiàng)施工方案
- 2024年物業(yè)項(xiàng)目委托管理與施工合同示范文本3篇
- 2025年中國(guó)補(bǔ)腎藥行業(yè)市場(chǎng)深度研究及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 2024-2025年中國(guó)醫(yī)療融資租賃市場(chǎng)前景預(yù)測(cè)及未來(lái)發(fā)展趨勢(shì)報(bào)告
- 2025版人工智能技術(shù)研發(fā)合資企業(yè)合作協(xié)議書(shū)范本3篇
- 2024中國(guó)辦公服務(wù)行業(yè)分析報(bào)告
- 2024年環(huán)保型汽車(chē)制造與采購(gòu)合同
- 高紅霞22課件講解
- 2024年電力工程信息安全與保密合同
- 2024期房買(mǎi)賣(mài)合同附社區(qū)教育培訓(xùn)機(jī)構(gòu)合作協(xié)議3篇
- 2024-2030年全球與中國(guó)汽車(chē)音頻DSP芯片組市場(chǎng)銷(xiāo)售前景及競(jìng)爭(zhēng)策略分析報(bào)告
- 2025禮品定制合同范本
- 醫(yī)院消毒隔離制度范文(2篇)
- 2024年01月11026經(jīng)濟(jì)學(xué)(本)期末試題答案
- 烘干煤泥合同范例
- 人教版六年級(jí)上冊(cè)數(shù)學(xué)第八單元數(shù)學(xué)廣角數(shù)與形單元試題含答案
- 2025年“三基”培訓(xùn)計(jì)劃
- 第20課 北洋軍閥統(tǒng)治時(shí)期的政治、經(jīng)濟(jì)與文化 教案
- 住房公積金稽核審計(jì)工作方案例文(4篇)
- 山東省青島實(shí)驗(yàn)高中2025屆高三物理第一學(xué)期期末綜合測(cè)試試題含解析
- 物理人教版2024版八年級(jí)上冊(cè)6.2密度課件03
評(píng)論
0/150
提交評(píng)論