公司人員招考成績排行系統經濟系91211012蔡秉宏經濟系92211019張國殷一、系統功能人事處理系統是個廣泛需求於各個公司行號之間的基本程式,擁有一套基本的人事處理系統將可使整個人事部門的行政效率大幅提升,今天要介紹的是一套最基本的—公司人員招考成績排行系統這個系統擁有的基本功能為:˙輸入應考人員的成績˙將應考人員的成績加以排行˙設定預定錄取人數˙列印出已被錄取人員的成績予以通知二、應用層面將應考人員成績直接輸入電腦交給電腦排序之後就馬上可以Run出錄取人員的名單及該名被錄取人員的錄取通知單,這樣可以大幅減低人力成本,縮短整個作業時程三、資料結構說明這個程式以考生成績作為資料結構來記錄該生的姓名、各科的成績,另外以類別(kind)來定義各考生所屬的分類,每筆考生資料都包含下列欄位:1.考生編號(inti)2.考生姓名(charname[10])*最多10個英文字、或5個中文字3.考生國文成績(floatChinese)4.考生數學成績(floatmathematic)5.考生英文成績(floatEnglish)6.考生物理成績(floatphysics)7.考生化學成績(floatchemistry)8.考生政治成績(floatpolities)以表格分類如下:應試人員成績資料欄位意義欄位名稱編號Inti姓名Charname[10]國文成績Floatchinese數學成績Floatmathematic英文成績Floatenglish物理成績Floatphysics化學成績Floatchemistry政治成績Floatpolities而整個資料內容是以考生編號(inti)做為索引:編號姓名國文數學1第一位考生姓名第一位考生國文第一位考生數學2第二位考生姓名第二位考生國文第二位考生數學3第三位考生姓名第三位考生國文第三位考生數學…10第十位考生姓名第十位考生國文第十位考生數學英文物理化學政治第一位考生英文第一位考生物理第一位考生化學第一位考生政治第二位考生英文第二位考生物理第二位考生化學第二位考生政治第三位考生英文第三位考生物理第三位考生化學第三位考生政治第十位考生英文第十位考生物理第十位考生化學第十位考生政治四、程式說明假設某公司預定錄取N名,在考查的科目中,最終成績分為四類以(charkind分類),第一類為五科都及格、第二類為一科不及格、第三類為兩科不及格、其餘為四類;錄取方法是依類別優先A~D,再依造總分降序排列。.試設計一個成績處理程序,要求打印輸出N份錄取通知書,並列出錄取者的各門成績及總分。五、流程圖主程式開始呼叫副程式inputData()輸入姓名和各科分數呼叫副程式sort()以總分排序六、程式碼/*==============================================*//*程式目的:將考試成績分類並擇優打印錄取通知單*//*==============================================*/#includestdio.h#includestdlib.h#definestudentNum10/*考生人數*/intkind1,kind2,kind3,kind4;structmessage{charname[10];/*考生姓名*/charkind;/*考生所屬的種類*/floatchinese;/*該考生各科成績*/結束呼叫副程式addressSort()以類別排序呼叫副程式ioControl()錄取信息的輸入及通知書輸出floatmathematic;floatenglish;floatphysics;floatchemistry;floatpolities;floattotal;};typedefstructmessage*studMess;structmessagestudent[studentNum];structmessagekindSort[studentNum];/*----------------------------------------------*//*將各名考生各科成績輸入並進行分類*//*----------------------------------------------*/voidinputData(){intsign=0;/*分類標記*/inti;/*循環修正變量*/intkindA=0;/*定義各種考生所屬分類*/intkindB=0;intkindC=0;intkindD=0;printf(\t******************************************************************\n);printf(\t**應試人員成績考試成績處理系統**\n);printf(\t******************************************************************\n);printf(\n\n);printf(\t考生編號\t姓名\t國文\t數學\t英語\t物理\t化學\t政治\n);printf(\n\n);printf(\t輸入完考生姓名之後按enter或space輸入下欄成績\n);/*以下步驟輸入考生的各科成績,並用sign作為計數器分類*/for(i=0;istudentNum;i++){printf(\n);printf(\t考生%d:,i+1);printf(\t);scanf(%s,&student[i].name);printf(\t);scanf(%f,&student[i].chinese);printf(\t);if(student[i].chinese60)sign++;scanf(%f,&student[i].mathematic);printf(\t);if(student[i].mathematic60)sign++;scanf(%f,&student[i].english);printf(\t);if(student[i].english60)sign++;scanf(%f,&student[i].physics);printf(\t);if(student[i].physics60)sign++;scanf(%f,&student[i].chemistry);printf(\t);if(student[i].chemistry60)sign++;scanf(%f,&student[i].polities);printf(\t);if(student[i].polities60)sign++;if(sign==0){student[i].kind='A';kindA++;}elseif(sign==1){student[i].kind='B';kindB++;}elseif(sign==2){student[i].kind='C';kindC++;}else{student[i].kind='D';kindD++;};sign=0;student[i].total=student[i].chinese+student[i].mathematic+student[i].english+student[i].physics+student[i].chemistry+student[i].polities;}printf(\n此次考試中,各類考生人數分別為:\nA:%d\tB:%d\tC:%d\tD:%d\n,kindA,kindB,kindC,kindD);printf(\nA類別代表的是全部都及格,B類別代表的是有一科不及格,C類別代表的是有兩科不及格,D類別代表的是有三科以上不及格);kind1=kindA;kind2=kindB;kind3=kindC;kind4=kindD;}/*------------------------------------------------------*//*列印錄取學生的通知單信息*//*------------------------------------------------------*/voidtypeNotice(intj){inti;for(i=0;i20;i++)printf(====);printf(\n);printf(\t\t\tADMISSIONNOTICE\n);printf(\t\t\t%s\n,kindSort[j].name);printf(\t\t\tyouhavebeenadmitted.\n);printf(\t\t\tyourscores:\n);printf(\t\tChinese\t\t\t%f\n\t\tMathematic\t\t%f\n\t\tEnglish\t\t\t%f\n\t\tPhysics\t\t\t%f\n\t\tChemistry\t\t%f\n\t\tPolities\t\t%f\n\t\tTotal\t\t\t%f\n,kindSort[j].chinese,kindSort[j].mathematic,kindSort[j].english,kindSort[j].physics,kindSort[j].chemistry,kindSort[j].polities,kindSort[j].total);for(i=0;i20;i++)printf(====);printf(\n);}/*------------------------------*//*以總分為基準,不分類地降序排序*//*------------------------------*/voidsort(){inti,j;structmessagetemp;for(i=0;istudentNum-1;i++)for(j=i+1;jstudentNum;j++)if(student[i].totalstudent[j].total){temp=student[i];student[i]=student[j];student[j]=temp;}}/*------------------------------------------*//*對已經按總分排好序的考生進行分類排序處理*//*------------------------------------------*/voidaddressSort(){intja,jb,jc,jd;/*各類考生在新數組中的起始地址*/inti;ja=0;/*初始化*/jb=kind1;jc=kind1+kind2;jd=kind1+kind2+kind3;for(i=0;istudentNum;i++)/*將考生按A,B,C,D四類排序*/{switch(student[i].kind){case'A':kindSort[ja]=student[i];ja++;break;case'B':kindSort[jb]=student[i];jb++;break;case'C':kindSort[jc]=student[i];jc++;break;case'D':kindSort[jd]=student[i];jd++;break;}}}/*-------------------------------------------*//*錄取信息的輸入及通知書輸出*//*-------------------------------------------*/voidioControl(){inti;intadmitNum;/*這次錄取的總人數*/printf(\n請輸入計劃錄取的人數:);scanf(%d,&admitNum);if(admitNumstudentNum){printf(\n輸入錯誤,超出考生總數範圍.請重新輸入:);scanf(%d,&admitNum);}for(i=0;iadmitNum;i++)typeNotice(i)