研究生推免(保研)排名統(tǒng)計程序課程設(shè)計報告_第1頁
研究生推免(保研)排名統(tǒng)計程序課程設(shè)計報告_第2頁
研究生推免(保研)排名統(tǒng)計程序課程設(shè)計報告_第3頁
研究生推免(保研)排名統(tǒng)計程序課程設(shè)計報告_第4頁
研究生推免(保研)排名統(tǒng)計程序課程設(shè)計報告_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

課設(shè)題目題目:研究生推免(保研)排名統(tǒng)計程序具體內(nèi)容:已知文本文件f1.txt中存放了某校應(yīng)屆大四學(xué)生的相關(guān)信息(不超過5000人),具體數(shù)據(jù)及存放格式為:每行存放一個學(xué)生的數(shù)據(jù),共有7項(xiàng),依次為:學(xué)號、姓名、專業(yè)必修課平均成績、科技活動獎勵加分、社會活動獎勵加分、是否有專業(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個的字符;專業(yè)必修課平均成果、科技活動獎勵加分、社會活動獎勵加分均為0-100以內(nèi)的整數(shù)(含0和100);是否有專業(yè)必修課掛科記錄、是否通過大學(xué)英語四級均為0或1兩個整型數(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)。排名計算方法:專業(yè)必修課成績占60%,科技活動獎勵占30%,社會活動獎勵占10%。請編寫程序,讀出文件f1.txt中的內(nèi)容,再按保研政策確定每個人的保研狀況(0表示沒有獲得推免資格,1表示獲得內(nèi)推資格,2表示獲得外推資格)并存入f2.txt中,并實(shí)現(xiàn)以下功能:(1)能夠統(tǒng)計某個班所有獲得保研資格的學(xué)生信息。(2)能夠統(tǒng)計某個專業(yè)所有獲得保研資格的學(xué)生信息。(3)能夠統(tǒng)計哪個班獲得的保研資格的學(xué)生人數(shù)最多。(4)能夠統(tǒng)計全校所有獲得外推資格的學(xué)生名單,其結(jié)果即可屏幕顯示,也可存入文件。(5)學(xué)生可以根據(jù)姓名和學(xué)號查詢自己是否獲得保研資格。說明:=1\*GB3①系統(tǒng)程序要有界面=2\*GB3②存入文件f2.txt中的數(shù)據(jù),每行存一個學(xué)生的數(shù)據(jù),每行之間的不同信息用空格分隔。題目分析該題目要求設(shè)計一個研究生推免(保研)排名統(tǒng)計查詢系統(tǒng),導(dǎo)入含有5000個考生信息的txt文本后,能實(shí)現(xiàn)統(tǒng)計某個班所有獲得保研資格的學(xué)生信息;能夠統(tǒng)計某個專業(yè)所有獲得保研資格的學(xué)生信息;能夠統(tǒng)計哪個班獲得的保研資格的學(xué)生人數(shù)最多;能夠統(tǒng)計全校所有獲得外推資格的學(xué)生名單,其結(jié)果即可屏幕顯示,也可存入文件;學(xué)生根據(jù)姓名和學(xué)號查詢自己是否獲得保研資格的功能。要實(shí)現(xiàn)這么多功能,就需要一個可供選擇的主菜單功能表,每個菜單都要鏈接到相應(yīng)的程序?qū)崿F(xiàn)相應(yīng)功能,所以,整體就需要建立一個多分支選擇結(jié)構(gòu)。除此之外,為了方便用戶查詢,還要設(shè)計一個使考生只要不關(guān)閉程序或者按指定輸入而結(jié)束程序就能一直查詢下去的功能。設(shè)計思路3.1、設(shè)計思想將全局變量和局部變量結(jié)合使用,靈活運(yùn)用。巧用指針,簡化數(shù)據(jù)處理難度。(3)以全局結(jié)構(gòu)來隨時定義結(jié)構(gòu)數(shù)組。(4)以結(jié)構(gòu)化各個功能模塊,函數(shù)間的調(diào)用精簡整個函數(shù)。(7)設(shè)置循環(huán),實(shí)現(xiàn)多次查詢。(6)以冒泡方式比較大小排列出學(xué)生成績成績。(7)以讀一個打印一個的思想,實(shí)現(xiàn)顯示全部信息。(8)以先判斷再打印的思想,來實(shí)現(xiàn)查找推免狀況。3.2、總思路文本讀取+排序+統(tǒng)計+查詢可分為這樣幾個模塊:讀入文件模塊、剔除掛科或四級未過者模塊、全校成績排序模塊、識別院系模塊、外推模塊、識別班級(不包括外推者)模塊、內(nèi)推模塊、保存文件模塊。通過調(diào)用這些模塊來實(shí)現(xiàn)題目要求的五大功能。3.3、圖示分析1.按班級查詢保研資格信息2.按專業(yè)查詢保研信息1.按班級查詢保研資格信息2.按專業(yè)查詢保研信息主菜單3.統(tǒng)計保研資格名額最多班級4.統(tǒng)計全校獲得外推資格名額5.根據(jù)學(xué)號查詢個人保研信息顯示找到的信息7.退出程序6.根據(jù)姓名查詢個人保研信息 四、各功能模塊及其運(yùn)行結(jié)果4.1、菜單和主函數(shù)將各個功能模塊設(shè)計成菜單的選項(xiàng)模式,先輸出在屏幕上,再獲取用戶的鍵盤輸入“v”,由“v”的值進(jìn)行一個多分枝選擇結(jié)構(gòu),調(diào)用相應(yīng)的功能程序模塊?!驹创a】voidmain(){ 【函數(shù)申明】charINPUT_sub[4],INPUT_cla[7];//要輸入的專業(yè)號、班號charrec_sub[4],rec_cla[7];//用于識別專業(yè)號、班號 charcInputString[10]; charv; load(a); //讀取 sort(a); //剔除 sort_1(b); //全校排名 do { printf("\n\n"); printf("/*********歡迎使用保研信息查詢系統(tǒng)******/\n\n"); printf("請選擇服務(wù)》》1.按班級查詢保研資格信息****/\n\n"); printf("/******************2.按專業(yè)查詢保研信息*****/\n\n"); printf("/******************3.統(tǒng)計保研資格名額最多班級/\n\n"); printf("/******************4.統(tǒng)計全校獲得外推資格名額/\n\n"); printf("/******************5.根據(jù)學(xué)號查詢個人保研信息/\n\n"); printf("/******************6.根據(jù)姓名查詢個人保研信息/\n\n"); printf("/******************7.退出程序*****************/\n\n");scanf("%d",&v);【獲取鍵盤輸入值v】 getchar();【消除scanf對getchar的影響】 switch(v)【switch多分支選擇結(jié)構(gòu)】 { 【輸出功能菜單】 case1: { printf("請輸入要查詢班級的院系編號,如072*\n"); gets(INPUT_sub); printf("請輸入要查詢班級的班級編號,如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ù)這個函數(shù)是整個程序更的根本條件,由于一個學(xué)生的信息包含多種不同類型的信息且是一個整體,所以要將學(xué)生的信息建立一個結(jié)構(gòu)體,每個成員對應(yīng)相應(yīng)的變量類型,由于部分學(xué)生的學(xué)號第一位為0,所以將學(xué)號定義為字符串,名字為字符串,成績是整型,其他都可以用字符型的數(shù)組,開始判定文件f1是否存在,存在則執(zhí)行while循環(huán),從i=0讀入文件?!驹创a】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、剔除掛科或四級未過者這個函數(shù)是將全校掛科或者四級未過者(即無資格推免的學(xué)生)從總名單中提剔除,進(jìn)而方便接下來的成績排名工作,原理是將工作組a[5000]中所有學(xué)生資料依次提取,通過判斷其中Fclass和CET4對應(yīng)的數(shù)字0/1,來進(jìn)行剔除,并將有資格保研的學(xué)生資料存入工作組b[5000]中?!驹创a】intsort(structstudent*a){ intj,k=0; for(j=0;j<i;j++)【通過for循環(huán)逐個篩選】 {if((a[j].Fclass==0)&&(a[j].CET4==1))【判斷是否掛科或CET4未通過】 { strcpy(b[k].num,a[j].num);【將篩選后的學(xué)生放入b[5000]】 ········} } i=k; return(i)}【返回最后一名學(xué)生的位置】4.2.3、全校排名函數(shù)這個函數(shù)是將工作組b[5000]中的所有學(xué)生按成績排名,其原理為“冒泡法”排序,通過for循環(huán)將學(xué)生按成績由高到低的順序排號好?!驹创a】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);【計算綜合成績】 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;} } } }4.2.4、識別院系這個函數(shù)是在已按成績完成排序的學(xué)生中找到所需學(xué)院的學(xué)生,其原理為;首先利用strncpy語句將學(xué)生學(xué)號的前三位拷貝到一個臨時定義的字符串?dāng)?shù)組中,并用strcmp語句將其與所需學(xué)院的編號對比,符合條件者存入工作組sub[2000]中,通過for循環(huán)逐個挑選。【源代碼】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é)號的前三位拷貝到rec_sub】 if((strcmp(rec_sub,INPUT_sub))==0)【將rec_sub與所需學(xué)院編號比較】 { sub[r++]=b[j]; } 【符合條件者存入工作組sub[500]中】} returnr;} 【返回最后一名學(xué)生的位置】4.2.5、外推模塊這個函數(shù)是在已經(jīng)識別出的學(xué)院的學(xué)生中按2%的比例確定外推名額,并將外推者資料除存入工作組structstudent_1suc_out[800]中,其原理為將“學(xué)院總?cè)藬?shù)”*2%四舍五入后得到該學(xué)院外推總?cè)藬?shù)j,然后再將sub[2000]中的前j名學(xué)生選出即為外推者,并存入工作組suc_out[800]?!驹创a】intsuccess_out(structstudent_1*sub,intnum){ intj,k=0;j=(int)(((num)*0.2+5)/10); 【四舍五入】 if(0==j)【如果某學(xué)院人數(shù)太少則無外推者】 { 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ù)是在同院系除去外推者的學(xué)生中找出所需班級的學(xué)生,其原理與上述2.4識別院系相似,再次不贅述?!驹创a】{ intj,k=0; for(j=numout;j<numsub;j++) {strncpy(rec_cla,sub[j].num,6);【學(xué)生學(xué)號的前6位拷貝到rec_cla】 if((strcmp(rec_cla,INPUT_cla))==0)【將rec_cla與所需班級編號比較】 {cla[k++]=sub[j];} 【將符合條件者存入cla[1000]】 } returnk;} 【返回最后一名學(xué)生的位置】4.2.7、內(nèi)推模塊這個函數(shù)是在已經(jīng)識別班級中除去外推者按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ù)輸入的學(xué)院、班級編號利用上述基礎(chǔ)模塊實(shí)現(xiàn)題目要求功能,依次輸出所查班級的外推者和內(nèi)推者名單。 【源代碼】voidfunction_1(charINPUTsub[],charINPUT_cla[],structstudent_1*b){ intj=0,k=0,m; intCountSub; //學(xué)院總數(shù) intCountClass; //班級總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級內(nèi)推總數(shù) CountSub=devide_1(b,sub,INPUTsub); //識別院系 CountOut=success_out(sub,CountSub); //確定外推名額 CountClass=devide_2(sub,CountSub,CountOut,INPUT_cla);//識別班級 CountIn=success_in(cla,CountClass); //確定內(nèi)推名額 j=CountOut; //外推總數(shù) k=CountIn; //班級內(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按專業(yè)查詢保研信息原理:根據(jù)輸入的學(xué)院、專業(yè)編號利用上述基礎(chǔ)模塊實(shí)現(xiàn)題目要求功能,通過for循環(huán)找出要查專業(yè)所有班級的保研情況?!驹创a】voidfunction_2(charINPUTsub[],structstudent_1*b){ charAllClass[7]; inti; intj=0,k=0,m; intCountSub; //學(xué)院總數(shù) intCountClass; //班級總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級內(nèi)推總數(shù) CountSub=devide_1(b,sub,INPUTsub); //識別院系 CountOut=success_out(sub,CountSub); //確定外推名額 j=CountOut; //外推總數(shù) printf("/***************輸出專業(yè)保研名單************/\n"); for(m=0;m<j;m++) //輸出專業(yè)外推者 printf······· printf("輸出專業(yè)內(nèi)推者\(yùn)n"); //輸出專業(yè)內(nèi)推者 for(i=0;i<10;i++)//按班級循環(huán)依次輸出 { ········ for(m=0;m<k;m++) //輸出內(nèi)推者 Printf·······}4.3.3統(tǒng)計保研資格名額最多班級 原理:通過for循環(huán)找出要查專業(yè)所有班級的保研情況存入工作組中,利用冒泡法按保研人數(shù)排名并找出人數(shù)最多的班級。【源代碼】voidfunction_3(){ charAllClass[7]; charAllSub[4]; intj=0,k=0,m; inti=0; intl; intCountSub; //學(xué)院總數(shù) intCountClass; //班級總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級內(nèi)推總數(shù) intCountClassout=0; //班級外推總數(shù) intCountClassAll; //班級保研總數(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); //識別院系 CountOut=success_out(sub,CountSub); //確定外推名額 CountClass=devide_2(sub,CountSub,CountOut,AllClass);//識別班級 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)計全校獲得外推資格名額(含存儲文件的程序)原理:與原理3.3相似【源代碼】voidfunction_4(){ charAllClass[7]; charAllSub[4]; intj=0,k=0,m; inti=0; intl; intCountSub; //學(xué)院總數(shù) intCountClass; //班級總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級內(nèi)推總數(shù) intCountClassout=0; //班級外推總數(shù) intCountClassAll; //班級保研總數(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); //識別院系 CountOut=success_out(sub,CountSub); //確定外推名額 CountClass=devide_2(sub,CountSub,CountOut,AllClass);//識別班級 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é)號或姓名查詢個人保研信息原理:利用2中的基礎(chǔ)模塊,并通過for循環(huán)實(shí)現(xiàn)查詢功能【源代碼】voidfunction_5(charINPUTid[],intntype){ structstudent_1SUCall[5000]; charAllClass[7]; charAllSub[4]; intj=0,k=0,m; inti=0; intl; intCountSub; //學(xué)院總數(shù) intCountClass; //班級總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級內(nèi)推總數(shù) intCountClassout=0; //班級外推總數(shù) intCountClassAll; //班級保研總數(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); //識別院系 CountOut=success_out(sub,CountSub); //確定外推名額 CountClass=devide_2(sub,CountSub,CountOut,AllClass);//識別班級 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é)號查詢 {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 //按姓名查詢 {if((strcmp(INPUTid,SUCall[m].name))==0) { printf("學(xué)號:%s姓名:%s平均成績:%d科技活動:%d社會活動:%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("該考生沒有保研資格\n");}}五.課設(shè)總結(jié)為期4天的課程設(shè)計即將結(jié)束,在這幾天里,我收獲頗多。首先,我確實(shí)感受到課程設(shè)計的重要性。課程設(shè)計是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實(shí)際問題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過程.隨著科學(xué)技術(shù)發(fā)展的日新日異,當(dāng)今計算機(jī)應(yīng)用在生活中可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握計算機(jī)開發(fā)技術(shù)是十分重要的。但是,我們光學(xué)習(xí)了課本知識還遠(yuǎn)遠(yuǎn)不能勝任復(fù)雜多變的實(shí)際應(yīng)用情況。實(shí)踐是對所學(xué)知識是否掌握的最好檢測依據(jù)。其次,我體會到了編程工作的艱辛。從拿到題目,到構(gòu)思整體框架,然后分析所需要完成的功能,之后將其分為不同的模塊,還要考慮到各模塊之間的連接。這些工作完成后就是編寫代碼。編寫代碼的過程需要細(xì)心謹(jǐn)慎,一點(diǎn)極小的錯誤就有可能使整個程序不能實(shí)現(xiàn)預(yù)定的功能,嚴(yán)重的甚至?xí)鹣到y(tǒng)癱瘓。再之后,就是復(fù)雜的調(diào)試過程,如果前面的代碼寫的不好,很有可能出現(xiàn)幾十個甚至上百個錯誤,修改錯誤的過程是一個非常復(fù)雜的過程,有的大程序好幾個星期找不出來錯誤從而嚴(yán)重影響編程進(jìn)度。再次,我也充分體會到編程方法和規(guī)范化編程的重要性。程序的可讀性、可維護(hù)性以及穩(wěn)定性將極大的影響系統(tǒng)的使用。另外,調(diào)試的技巧和良好的人機(jī)界面也對系統(tǒng)的編寫和運(yùn)行產(chǎn)生很大的影響。最后,此次課程設(shè)計讓我感覺到人外有人,山外有山,一個人的能力畢竟是有限的,我們要善于在不懂的時候向懂得比較多的老師、同學(xué)們請教。在請教的過程中,不僅學(xué)會了自己不懂的知識,而且還加強(qiáng)了和他們的交流溝通。未來的編程工作量及其大,光靠自己的力量是不可能完成的,我們要從現(xiàn)在就開始培養(yǎng)我們的團(tuán)隊(duì)合作精神,充分發(fā)揮大家的長處,來完成自己不可能完成的工作。這次課程設(shè)計終于順利完成了,在設(shè)計中遇到了很多編程問題,最后在老師的辛勤指導(dǎo)下,終于迎刃而解。同時,在老師的身上我學(xué)得到很多實(shí)用的知識,在次我表示感謝!同時,對給過我?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];//要輸入的專業(yè)號、班號charrec_sub[4],rec_cla[7];//用于識別專業(yè)號、班號structclassALLNOclassNOAll[5000];structstudenta[5000];structstudent_1b[5000];structstudent_1sub[2000];//一個專業(yè)的工作組structstudent_1cla[1000];//一個班級的工作組structstudent_1suc_out[800]; //一個專業(yè)外推名額工作組structstudent_1suc_in[2000];//一個班內(nèi)推名額工作組intnum_sub,num_cla; //一個專業(yè)、班級的人數(shù)intnum_out;//一個專業(yè)外推人數(shù)intnum_in;//一個班級內(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);}/**************剔除掛科或四級未過者****************/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);//計算綜合成績 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;} } } }/******************識別院系********************/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;}/********************識別班級(不包括外推)******************/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; //班級總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級內(nèi)推總數(shù) CountSub=devide_1(b,sub,INPUTsub); //識別院系 CountOut=success_out(sub,CountSub); //確定外推名額 CountClass=devide_2(sub,CountSub,CountOut,INPUT_cla);//識別班級 CountIn=success_in(cla,CountClass); //確定內(nèi)推名額 j=CountOut; //外推總數(shù) k=CountIn; //班級內(nèi)推總數(shù) printf("/***************所查班級所有保研信息************/\n"); printf("/**學(xué)號**姓名**平均成績**科技活動**社會活動**是否掛科**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; //班級總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級內(nèi)推總數(shù) CountSub=devide_1(b,sub,INPUTsub); //識別院系 CountOut=success_out(sub,CountSub); //確定外推名額 j=CountOut; //外推總數(shù) printf("/***************輸出專業(yè)保研名單************/\n"); printf("/**學(xué)號**姓名**平均成績**科技活動**社會活動**是否掛科**CET4**保研狀況**/\n"); printf("輸出專業(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("輸出專業(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);//識別班級 CountIn=success_in(cla,CountClass); //確定內(nèi)推名額 k=CountIn; //班級內(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; //班級總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級內(nèi)推總數(shù) intCountClassout=0;//班級外推總數(shù) intCountClassAll; //班級保研總數(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); //識別院系 CountOut=success_out(sub,CountSub); //確定外推名額 CountClass=devide_2(sub,CountSub,CountOut,AllClass);//識別班級 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ù)最多的班級%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; //班級總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級內(nèi)推總數(shù) intCountClassout=0;//班級外推總數(shù) intCountClassAll; //班級保研總數(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); //識別院系 CountOut=success_out(sub,CountSub); //確定外推名額 CountClass=devide_2(sub,CountSub,CountOut,AllClass);//識別班級 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; //班級總數(shù) intCountOut; //學(xué)院外推總數(shù) intCountIn; //班級內(nèi)推總數(shù) intCountClassout=0;//班級外推總數(shù) intCountClassAll; //班級保研總數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論