版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
課設題目題目:研究生推免(保研)排名統(tǒng)計程序具體內容:已知文本文件f1.txt中存放了某校應屆大四學生的相關信息(不超過5000人),具體數(shù)據(jù)及存放格式為:每行存放一個學生的數(shù)據(jù),共有7項,依次為:學號、姓名、專業(yè)必修課平均成績、科技活動獎勵加分、社會活動獎勵加分、是否有專業(yè)必修課掛科記錄、是否通過大學英語四級。其中,學號為8位數(shù)字字符,其中前2位數(shù)字表示學生所在的學院,第3位數(shù)字表示學生的專業(yè),第4-5位數(shù)字表示學生的年級,統(tǒng)一為09,第6位數(shù)字表示學生所在年級同專業(yè)內的編號,即所稱的班號,第7-8位數(shù)字表示學生班級內的序號,如學號07509123表示,機電學院(07)通信工程專業(yè)(5)09級(09)1班(1)第23號(23)學生;姓名為長度不超過10個的字符;專業(yè)必修課平均成果、科技活動獎勵加分、社會活動獎勵加分均為0-100以內的整數(shù)(含0和100);是否有專業(yè)必修課掛科記錄、是否通過大學英語四級均為0或1兩個整型數(shù)字,為1分別表示有專業(yè)必修課掛科記錄或通過大學英語四級,為0分別表示沒有專業(yè)必修課掛科記錄或沒有通過大學英語四級。該校的保研政策是:必須沒有專業(yè)必修課掛科記錄且通過大學英語四級考試,在此前提下,劃分推免研究生指標。外推指標按專業(yè)排名,給予2%的指標,小數(shù)部分四舍五入。內推指標按班級排名,給予15%的指標,小數(shù)部分四舍五入。如果某班有外推指標,外推指標不占內推指標。排名計算方法:專業(yè)必修課成績占60%,科技活動獎勵占30%,社會活動獎勵占10%。請編寫程序,讀出文件f1.txt中的內容,再按保研政策確定每個人的保研狀況(0表示沒有獲得推免資格,1表示獲得內推資格,2表示獲得外推資格)并存入f2.txt中,并實現(xiàn)以下功能:(1)能夠統(tǒng)計某個班所有獲得保研資格的學生信息。(2)能夠統(tǒng)計某個專業(yè)所有獲得保研資格的學生信息。(3)能夠統(tǒng)計哪個班獲得的保研資格的學生人數(shù)最多。(4)能夠統(tǒng)計全校所有獲得外推資格的學生名單,其結果即可屏幕顯示,也可存入文件。(5)學生可以根據(jù)姓名和學號查詢自己是否獲得保研資格。說明:=1\*GB3①系統(tǒng)程序要有界面=2\*GB3②存入文件f2.txt中的數(shù)據(jù),每行存一個學生的數(shù)據(jù),每行之間的不同信息用空格分隔。題目分析該題目要求設計一個研究生推免(保研)排名統(tǒng)計查詢系統(tǒng),導入含有5000個考生信息的txt文本后,能實現(xiàn)統(tǒng)計某個班所有獲得保研資格的學生信息;能夠統(tǒng)計某個專業(yè)所有獲得保研資格的學生信息;能夠統(tǒng)計哪個班獲得的保研資格的學生人數(shù)最多;能夠統(tǒng)計全校所有獲得外推資格的學生名單,其結果即可屏幕顯示,也可存入文件;學生根據(jù)姓名和學號查詢自己是否獲得保研資格的功能。要實現(xiàn)這么多功能,就需要一個可供選擇的主菜單功能表,每個菜單都要鏈接到相應的程序實現(xiàn)相應功能,所以,整體就需要建立一個多分支選擇結構。除此之外,為了方便用戶查詢,還要設計一個使考生只要不關閉程序或者按指定輸入而結束程序就能一直查詢下去的功能。設計思路3.1、設計思想將全局變量和局部變量結合使用,靈活運用。巧用指針,簡化數(shù)據(jù)處理難度。(3)以全局結構來隨時定義結構數(shù)組。(4)以結構化各個功能模塊,函數(shù)間的調用精簡整個函數(shù)。(7)設置循環(huán),實現(xiàn)多次查詢。(6)以冒泡方式比較大小排列出學生成績成績。(7)以讀一個打印一個的思想,實現(xiàn)顯示全部信息。(8)以先判斷再打印的思想,來實現(xiàn)查找推免狀況。3.2、總思路文本讀取+排序+統(tǒng)計+查詢可分為這樣幾個模塊:讀入文件模塊、剔除掛科或四級未過者模塊、全校成績排序模塊、識別院系模塊、外推模塊、識別班級(不包括外推者)模塊、內推模塊、保存文件模塊。通過調用這些模塊來實現(xiàn)題目要求的五大功能。3.3、圖示分析1.按班級查詢保研資格信息2.按專業(yè)查詢保研信息1.按班級查詢保研資格信息2.按專業(yè)查詢保研信息主菜單3.統(tǒng)計保研資格名額最多班級4.統(tǒng)計全校獲得外推資格名額5.根據(jù)學號查詢個人保研信息顯示找到的信息7.退出程序6.根據(jù)姓名查詢個人保研信息 四、各功能模塊及其運行結果4.1、菜單和主函數(shù)將各個功能模塊設計成菜單的選項模式,先輸出在屏幕上,再獲取用戶的鍵盤輸入“v”,由“v”的值進行一個多分枝選擇結構,調用相應的功能程序模塊?!驹创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("請選擇服務》》1.按班級查詢保研資格信息****/\n\n"); printf("/******************2.按專業(yè)查詢保研信息*****/\n\n"); printf("/******************3.統(tǒng)計保研資格名額最多班級/\n\n"); printf("/******************4.統(tǒng)計全校獲得外推資格名額/\n\n"); printf("/******************5.根據(jù)學號查詢個人保研信息/\n\n"); printf("/******************6.根據(jù)姓名查詢個人保研信息/\n\n"); printf("/******************7.退出程序*****************/\n\n");scanf("%d",&v);【獲取鍵盤輸入值v】 getchar();【消除scanf對getchar的影響】 switch(v)【switch多分支選擇結構】 { 【輸出功能菜單】 case1: { printf("請輸入要查詢班級的院系編號,如072*\n"); gets(INPUT_sub); printf("請輸入要查詢班級的班級編號,如072091\n"); gets(INPUT_cla); function_1(INPUT_sub,INPUT_cla,b);break;}【調用功能01函數(shù)】 case2:······ 【調用功能02函數(shù)】······· default:break; } }while(v<7);}4.2、基礎模塊4.2.1、讀入文件函數(shù)這個函數(shù)是整個程序更的根本條件,由于一個學生的信息包含多種不同類型的信息且是一個整體,所以要將學生的信息建立一個結構體,每個成員對應相應的變量類型,由于部分學生的學號第一位為0,所以將學號定義為字符串,名字為字符串,成績是整型,其他都可以用字符型的數(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);【返回最后一名學生的位置】}4.2.2、剔除掛科或四級未過者這個函數(shù)是將全校掛科或者四級未過者(即無資格推免的學生)從總名單中提剔除,進而方便接下來的成績排名工作,原理是將工作組a[5000]中所有學生資料依次提取,通過判斷其中Fclass和CET4對應的數(shù)字0/1,來進行剔除,并將有資格保研的學生資料存入工作組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);【將篩選后的學生放入b[5000]】 ········} } i=k; return(i)}【返回最后一名學生的位置】4.2.3、全校排名函數(shù)這個函數(shù)是將工作組b[5000]中的所有學生按成績排名,其原理為“冒泡法”排序,通過for循環(huán)將學生按成績由高到低的順序排號好?!驹创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ù)是在已按成績完成排序的學生中找到所需學院的學生,其原理為;首先利用strncpy語句將學生學號的前三位拷貝到一個臨時定義的字符串數(shù)組中,并用strcmp語句將其與所需學院的編號對比,符合條件者存入工作組sub[2000]中,通過for循環(huán)逐個挑選?!驹创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);【學生學號的前三位拷貝到rec_sub】 if((strcmp(rec_sub,INPUT_sub))==0)【將rec_sub與所需學院編號比較】 { sub[r++]=b[j]; } 【符合條件者存入工作組sub[500]中】} returnr;} 【返回最后一名學生的位置】4.2.5、外推模塊這個函數(shù)是在已經(jīng)識別出的學院的學生中按2%的比例確定外推名額,并將外推者資料除存入工作組structstudent_1suc_out[800]中,其原理為將“學院總人數(shù)”*2%四舍五入后得到該學院外推總人數(shù)j,然后再將sub[2000]中的前j名學生選出即為外推者,并存入工作組suc_out[800]?!驹创a】intsuccess_out(structstudent_1*sub,intnum){ intj,k=0;j=(int)(((num)*0.2+5)/10); 【四舍五入】 if(0==j)【如果某學院人數(shù)太少則無外推者】 { return0;} for(k=0;k<j;k++)【將學院前j名學生選出】 { suc_out[k]=sub[k];【選出外推者】 suc_out[k].status=2;} returnk;【返回最后一名學生是位置】}4.2.6、識別班級(不包括外推) 這個函數(shù)是在同院系除去外推者的學生中找出所需班級的學生,其原理與上述2.4識別院系相似,再次不贅述?!驹创a】{ intj,k=0; for(j=numout;j<numsub;j++) {strncpy(rec_cla,sub[j].num,6);【學生學號的前6位拷貝到rec_cla】 if((strcmp(rec_cla,INPUT_cla))==0)【將rec_cla與所需班級編號比較】 {cla[k++]=sub[j];} 【將符合條件者存入cla[1000]】 } returnk;} 【返回最后一名學生的位置】4.2.7、內推模塊這個函數(shù)是在已經(jīng)識別班級中除去外推者按15%的名額實施內推,其原理與上述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ù)輸入的學院、班級編號利用上述基礎模塊實現(xiàn)題目要求功能,依次輸出所查班級的外推者和內推者名單。 【源代碼】voidfunction_1(charINPUTsub[],charINPUT_cla[],structstudent_1*b){ intj=0,k=0,m; intCountSub; //學院總數(shù) intCountClass; //班級總數(shù) intCountOut; //學院外推總數(shù) intCountIn; //班級內推總數(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); //確定內推名額 j=CountOut; //外推總數(shù) k=CountIn; //班級內推總數(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"); for(m=0;m<k;m++) //輸出內推者printf·······}4.3.2按專業(yè)查詢保研信息原理:根據(jù)輸入的學院、專業(yè)編號利用上述基礎模塊實現(xiàn)題目要求功能,通過for循環(huán)找出要查專業(yè)所有班級的保研情況?!驹创a】voidfunction_2(charINPUTsub[],structstudent_1*b){ charAllClass[7]; inti; intj=0,k=0,m; intCountSub; //學院總數(shù) intCountClass; //班級總數(shù) intCountOut; //學院外推總數(shù) intCountIn; //班級內推總數(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"); //輸出專業(yè)內推者 for(i=0;i<10;i++)//按班級循環(huán)依次輸出 { ········ for(m=0;m<k;m++) //輸出內推者 Printf·······}4.3.3統(tǒng)計保研資格名額最多班級 原理:通過for循環(huán)找出要查專業(yè)所有班級的保研情況存入工作組中,利用冒泡法按保研人數(shù)排名并找出人數(shù)最多的班級?!驹创a】voidfunction_3(){ charAllClass[7]; charAllSub[4]; intj=0,k=0,m; inti=0; intl; intCountSub; //學院總數(shù) intCountClass; //班級總數(shù) intCountOut; //學院外推總數(shù) intCountIn; //班級內推總數(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); //確定內推名額 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; //學院總數(shù) intCountClass; //班級總數(shù) intCountOut; //學院外推總數(shù) intCountIn; //班級內推總數(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); //確定內推名額 for(m=0;m<CountIn;m++) {fprintf·······} } for(m=0;m<CountOut;m++) {printf································································· fprintf(······· fprintf(·······} } fclose(fp);fclose(fp3); }4.3.5根據(jù)學號或姓名查詢個人保研信息原理:利用2中的基礎模塊,并通過for循環(huán)實現(xiàn)查詢功能【源代碼】voidfunction_5(charINPUTid[],intntype){ structstudent_1SUCall[5000]; charAllClass[7]; charAllSub[4]; intj=0,k=0,m; inti=0; intl; intCountSub; //學院總數(shù) intCountClass; //班級總數(shù) intCountOut; //學院外推總數(shù) intCountIn; //班級內推總數(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); //確定內推名額 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) //按學號查詢 {if((strcmp(INPUTid,SUCall[m].num))==0) {printf······· if(1==SUCall[m].status){printf("內推\n");} if(2==SUCall[m].status){printf("外推\n");} nlookup=1; } } Else //按姓名查詢 {if((strcmp(INPUTid,SUCall[m].name))==0) { printf("學號:%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");} if(2==SUCall[m].status){ printf("外推\n");} nlookup=1; } } } if(0==nlookup) { printf("該考生沒有保研資格\n");}}五.課設總結為期4天的課程設計即將結束,在這幾天里,我收獲頗多。首先,我確實感受到課程設計的重要性。課程設計是培養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程.隨著科學技術發(fā)展的日新日異,當今計算機應用在生活中可以說得是無處不在。因此作為二十一世紀的大學來說掌握計算機開發(fā)技術是十分重要的。但是,我們光學習了課本知識還遠遠不能勝任復雜多變的實際應用情況。實踐是對所學知識是否掌握的最好檢測依據(jù)。其次,我體會到了編程工作的艱辛。從拿到題目,到構思整體框架,然后分析所需要完成的功能,之后將其分為不同的模塊,還要考慮到各模塊之間的連接。這些工作完成后就是編寫代碼。編寫代碼的過程需要細心謹慎,一點極小的錯誤就有可能使整個程序不能實現(xiàn)預定的功能,嚴重的甚至會引起系統(tǒng)癱瘓。再之后,就是復雜的調試過程,如果前面的代碼寫的不好,很有可能出現(xiàn)幾十個甚至上百個錯誤,修改錯誤的過程是一個非常復雜的過程,有的大程序好幾個星期找不出來錯誤從而嚴重影響編程進度。再次,我也充分體會到編程方法和規(guī)范化編程的重要性。程序的可讀性、可維護性以及穩(wěn)定性將極大的影響系統(tǒng)的使用。另外,調試的技巧和良好的人機界面也對系統(tǒng)的編寫和運行產生很大的影響。最后,此次課程設計讓我感覺到人外有人,山外有山,一個人的能力畢竟是有限的,我們要善于在不懂的時候向懂得比較多的老師、同學們請教。在請教的過程中,不僅學會了自己不懂的知識,而且還加強了和他們的交流溝通。未來的編程工作量及其大,光靠自己的力量是不可能完成的,我們要從現(xiàn)在就開始培養(yǎng)我們的團隊合作精神,充分發(fā)揮大家的長處,來完成自己不可能完成的工作。這次課程設計終于順利完成了,在設計中遇到了很多編程問題,最后在老師的辛勤指導下,終于迎刃而解。同時,在老師的身上我學得到很多實用的知識,在次我表示感謝!同時,對給過我?guī)椭乃型瑢W和各位指導老師再次表示忠心的感謝!六.附錄(源代碼)#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];//一個班內推名額工作組intnum_sub,num_cla; //一個專業(yè)、班級的人數(shù)intnum_out;//一個專業(yè)外推人數(shù)intnum_in;//一個班級內推人數(shù)/**********************讀取文件***************************/inti=0;/****將i設置成為全局變量,以便于其他子函數(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;} /********************內推模塊******************/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; //學院總數(shù) intCountClass; //班級總數(shù) intCountOut; //學院外推總數(shù) intCountIn; //班級內推總數(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); //確定內推名額 j=CountOut; //外推總數(shù) k=CountIn; //班級內推總數(shù) printf("/***************所查班級所有保研信息************/\n"); printf("/**學號**姓名**平均成績**科技活動**社會活動**是否掛科**CET4**保研狀況**/\n"); printf("輸出本班外推者\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"); for(m=0;m<k;m++) //輸出內推者 { 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; //學院總數(shù) intCountClass; //班級總數(shù) intCountOut; //學院外推總數(shù) intCountIn; //班級內推總數(shù) CountSub=devide_1(b,sub,INPUTsub); //識別院系 CountOut=success_out(sub,CountSub); //確定外推名額 j=CountOut; //外推總數(shù) printf("/***************輸出專業(yè)保研名單************/\n"); printf("/**學號**姓名**平均成績**科技活動**社會活動**是否掛科**CET4**保研狀況**/\n"); printf("輸出專業(yè)外推者\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"); 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); //確定內推名額 k=CountIn; //班級內推總數(shù) for(m=0;m<k;m++) //輸出內推者 {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; //學院總數(shù) intCountClass; //班級總數(shù) intCountOut; //學院外推總數(shù) intCountIn; //班級內推總數(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); //確定內推名額 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; //學院總數(shù) intCountClass; //班級總數(shù) intCountOut; //學院外推總數(shù) intCountIn; //班級內推總數(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); //確定內推名額 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; //學院總數(shù) intCountClass; //班級總數(shù) intCountOut; //學院外推總數(shù) intCountIn; //班級內推總數(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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小兒康復課程設計
- 2024年度大學外籍教師國際學術合作與交流合同3篇
- 2024年批發(fā)商購銷合同
- 施工現(xiàn)場平面布置與臨時設施、臨時道路布置方案
- 感恩教育個人講話稿簡短
- 學生干部代表發(fā)言稿(12篇)
- 心理健康課研修計劃范文(8篇)
- 2025年山東濟南平陰縣事業(yè)單位招考擬聘用人員管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東濟南市商務局所屬事業(yè)單位招考管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東棗莊市廣播電視臺播音員主持人招考6名管理單位筆試遴選500模擬題附帶答案詳解
- 山東省青島實驗高中2025屆高三物理第一學期期末綜合測試試題含解析
- 2024年廣西普法云平臺考試答案
- 2023-2024學年廣東省深圳市福田區(qū)八年級(上)期末英語試卷
- 2024年軍事理論知識全冊復習題庫及答案
- 道路工程監(jiān)理實施細則
- 實驗室組織機構圖
- 2024年大學試題(歷史學)-中國音樂史考試近5年真題集錦(頻考類試題)帶答案
- 2024智慧城市數(shù)據(jù)采集標準規(guī)范
- 寒假作業(yè)一年級上冊《數(shù)學每日一練》30次打卡
- 云南省2022年中考道德與法治真題試卷
- 初中綜合實踐活動《察探究活動-2.秸稈和落葉的有效處理》培優(yōu)課件-25
評論
0/150
提交評論