C語言課程設(shè)計報告-學生綜合測評系統(tǒng)_第1頁
C語言課程設(shè)計報告-學生綜合測評系統(tǒng)_第2頁
C語言課程設(shè)計報告-學生綜合測評系統(tǒng)_第3頁
C語言課程設(shè)計報告-學生綜合測評系統(tǒng)_第4頁
C語言課程設(shè)計報告-學生綜合測評系統(tǒng)_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

.--可修編-.....資料...注意:本文檔可供大家參考,學習。請大家借鑒優(yōu)點,批評不足。請各位湖工學弟,學妹不要署名后直接打印,應(yīng)付老師。一定要弄懂代碼,這對大家的代碼編寫技術(shù)很有好處。雖然現(xiàn)在完全自主編寫有些困難,但是也要有一個迎難而上的心態(tài)。祝大家學業(yè)有成!課程設(shè)計報告課程名稱C語言程序設(shè)計課題名稱學生綜合測評系統(tǒng)專業(yè)班級學號姓名指導教師任務(wù)書下達日期年月日任務(wù)完成日期年月日目錄TOC\o"1-3"\h\u26887一、設(shè)計容與設(shè)計要求313417學生綜合測評系統(tǒng) 316998一、問題描述:313814二、功能描述:330943三、算法提示:313515四、測試數(shù)據(jù):46852二.設(shè)計要求:425743三.進度安排431032四.總體設(shè)計方案5300971.總體流程圖5246332.程序主要函數(shù)553971.voidinti()初始化函數(shù)572222.wele()函數(shù)5187213.voidInputInfo()錄入學生信息684884.voidDeleteInfo()刪除信息7193745.voidpaiming1()/voidpaiming2()成績排名719146.voidViewAll()瀏覽全部學生信息7267297.voidclean()清除所有信息8300358.voidPaimingView()查詢排名8146923.程序其他函數(shù)832501A.信息存盤(結(jié)構(gòu)體) 817000B.讀取信息(結(jié)構(gòu)體) 88014C.信息存盤(整型) 810187D.讀取信息(整型) 812793E.學號檢索 925840五.程序源代碼1025140六.收獲及體會2218403七.參考文獻2224214計算機與通信學院課程設(shè)計評分表2325258課程名稱:《C語言程序設(shè)計》23一、設(shè)計容與設(shè)計要求學生綜合測評系統(tǒng)一、問題描述:每個學生的信息為:學號、、性別、家庭住址、聯(lián)系、語文、數(shù)學、外語三門單科成績、考試平均成績、考試名次、同學互評分、品德成績、任課教師評分、綜合測評總分、綜合測評名次??荚嚻骄煽儭⑼瑢W互評分、品德成績、任課教師評分分別占綜合測評總分的60%,10%,10%,20%。二、功能描述:A、學生信息處理(1)輸入學生信息、學號、、性別、家庭住址、聯(lián)系,按學號以小到大的順序存入文件中。提示:學生信息可先輸入到數(shù)組中,排序后可寫到文件中。(2)插入(修改)同學信息:提示:先輸入將插入的同學信息,然后再打開源文件并建立新文件,把源文件和輸入的信息合并到新文件中(保持按學號有序)若存在該同學則將新記錄容替換源容,(3)刪除同學信息:提示:輸入將刪除同學號,讀出該同學信息,要求對此進行確認,以決定是否刪除將刪除后的信息寫到文件中。(4)瀏覽學生信息:提示:打開文件,顯示該文件的學生信息。B、學生數(shù)據(jù)處理:(1)按考試科目錄入學生成績并且按公式:考試成績=(語文+數(shù)學+外語)/3計算考試成績,并計算考試名次,提示:先把學生信息讀入數(shù)組,然后按提示輸入每科成績,計算考試成績,求出名次,最后把學生記錄寫入一個文件中。(2)學生測評數(shù)據(jù)輸入并計算綜合測評總分及名次。提示:綜合測評總分=(考試成績)*0.6+(同學互評分)*0.1+品德成績*0.1+任課老師評分*0.2。(3)學生數(shù)據(jù)管理提示:輸入學號,讀出并顯示該同學信息,輸入新數(shù)據(jù),將改后信息寫入文件(4)學生數(shù)據(jù)查詢:提示:輸入學號或其他信息,即讀出所有數(shù)據(jù)信息,并顯示出來。C、學生綜合信息輸出提示:輸出學生信息到屏幕。三、算法提示:1、數(shù)據(jù)結(jié)構(gòu):結(jié)構(gòu)體類型數(shù)組2、數(shù)據(jù)庫結(jié)構(gòu):下表構(gòu)成該系統(tǒng)的基本數(shù)據(jù)庫。學號考試成績…評分…CharCharstruct…int…四、測試數(shù)據(jù):學生人數(shù):N=10二.設(shè)計要求:掌握結(jié)構(gòu)化程序設(shè)計的主體思想,以自頂向下逐步求精的方法編制程序解決一些實際的問題,為將來編寫軟件積累一些典型的案例處理經(jīng)驗。(1)按學號順序選課題號,并在規(guī)定的時間獨自完成相關(guān)課題的C源程序編寫、調(diào)試和運行。源程序及編譯生成各文件均保存;(2)按本任務(wù)書的要求,編寫《課程設(shè)計報告》(Word文檔格式)。并用A4的復(fù)印紙打印并裝訂;(3)在2013年1月5日之前,請各班學習委員收齊課程設(shè)計報告交老師。附:課程設(shè)計報告容要求如下:封面課程設(shè)計任務(wù)書課程設(shè)計主文檔容如下:課程設(shè)計題目課程設(shè)計目的課程設(shè)計主要任務(wù)設(shè)計環(huán)境總體設(shè)計方案的選定(主控模塊和各子模塊的設(shè)計方法及框圖)源程序清單收獲及體會參考資料四、報告容要求用宋體五號字,主標題用黑三號、一級標題用黑四號字,二級標題用宋體小四號字加粗,要求用A4紙打印出來。課程設(shè)計說明書裝訂順序:封面、任務(wù)書、正文、附件(A4大小的圖紙及程序清單)。三.進度安排第18周,具體安排如下:星期時間班級容地點第17周任務(wù)布置第18周星期三第一次上機機房第18周星期四第二次上機機房第18周星期五第三次上機與答辯機房工程學院計算機與通信學院年月日四.總體設(shè)計方案1.總體流程圖開始W開始Wele函數(shù)輸入瀏覽修改刪除瀏覽全部清除全部排名查詢排名退出初始化inti函數(shù)2.程序主要函數(shù)1.voidinti()初始化函數(shù)初始化函數(shù)用于從硬盤中加載學生數(shù)據(jù)和學生數(shù)目。首先,從硬盤讀取counter.dat的數(shù)據(jù)。若不存在counter.dat則說明程序第一次運行。創(chuàng)建counter.dat和student_data.dat,把counter的初始值賦為1。若存在counter.dat.則讀取其中數(shù)據(jù),把數(shù)據(jù)賦給變量counter,這個值為已儲存的學生信息數(shù)量。這個counter變量就是計數(shù)器變量。用來計量學生信息數(shù)量的變化。2.wele()函數(shù)Wele函數(shù)用來顯示選項菜單,并將用戶所選的序號返回。主函數(shù)中的變量select接收到wele的返回值。通過開關(guān)語句,選擇需要使用的功能。3.voidInputInfo()錄入學生信息輸入學生的信息。學生信息由以下結(jié)構(gòu)體定義。structstudent_info{ intnum; //學號 charname[6]; // charsex[5]; //性別 charadress[20]; //家庭住址 chartel[10]; // intchinese,math,english,huping,pingde,jiaoping,paiming1,paiming2; //語文數(shù)學英語互評品德教評 doubleave,zhongping; //平均綜合};InputInfo調(diào)用input函數(shù)。在input函數(shù)中的局部變量stu中錄入數(shù)據(jù),然后input函數(shù)返回stu給InputInfo中的結(jié)構(gòu)體數(shù)組的counter號元素。然后,InputInfo通過SortInfo(); SaveStruct(); SaveInt();將數(shù)組按學號排序,并存儲結(jié)構(gòu)體student和counter。4.voidDeleteInfo()刪除信息刪除信息函數(shù),從要刪除位信息開始,前位用后一位覆蓋,直到數(shù)組結(jié)束。并同時將counter減1。之后調(diào)用SaveStruct(); SaveInt();儲存student結(jié)構(gòu)體數(shù)組和counter計數(shù)變量。5.voidpaiming1()/voidpaiming2()成績排名排名函數(shù)將student的給個元素的首地址儲存在p[N]指針數(shù)組中。通過冒泡法將指針數(shù)組排序。接下來,按順序把指針數(shù)組順序,把排名賦給student的成員paiming1,paiming2。冒泡排序for(i=0;i<counter-1;i++) for(j=i+1;j<counter;j++) { if(p[i]->ave<p[j]->ave) { temp=p[i]; p[i]=p[j]; p[j]=temp; } }排名名詞給每一個student的成員paiming1或paiming2。for(i=0;i<counter;i++) p[i]->paiming1=i+1;6.voidViewAll()瀏覽全部學生信息voidViewAll(){ inti; for(i=0;i<counter;i++){ ViewInfo(&student[i]); printf("\n"); } getchar(); printf("回車鍵返回..."); getchar(); system("cls");}7.voidclean()清除所有信息counter計數(shù)變量清零,counter.dat清空,student_info.dat清空。voidPaimingView()查詢排名根據(jù)輸入的學號查詢排名3.程序其他函數(shù)A.信息存盤(結(jié)構(gòu)體)voidSaveStruct(structstudent_info*sp,intsize,intn,charfilename[20]){ FILE*fp; fp=fopen(filename,"wb"); fwrite(sp,size,n,fp); fclose(fp);}B.讀取信息(結(jié)構(gòu)體)voidLoadStruct(structstudent_info*sp,intsize,intn,charfilename[20]){ 略}C.信息存盤(整型)voidSaveInt(int*p,intsize,intn,charfilename[20]){ FILE*fp; fp=fopen(filename,"wb"); fwrite(p,size,n,fp); fclose(fp);}D.讀取信息(整型)voidLoadInt(int*p,intsize,intn,charfilename[20]){ 略}E.學號檢索intNumExist(structstudent_infostudent[],intnum){ inti; for(i=0;i<counter;i++) { if(student[i].num==num) returni; } return-1;}檢索學號所在的元素下表,若學號存在,則返回該學號所在下標。若學號不存在,則返回-1。程序截圖:五.程序源代碼學生綜合測評系統(tǒng)2013年1月3日#include<stdio.h>#include<stdlib.h>#defineN100//函數(shù)聲明voidinit();charwele();voidInputInfo();voidview();voidxiugai();voidDeleteInfo();voidpaiming1(structstudent_infostudent[]);voidpaiming2(structstudent_infostudent[]);voidViewAll();voidclean();voidPaimingView();voidexit();structstudent_infoinput();voidSortInfo(structstudent_infostudent[]);voidViewInfo(structstudent_info*sp);voidSaveStruct(structstudent_info*sp,intsize,intn,charfilename[20]);voidLoadStruct(structstudent_info*sp,intsize,intn,charfilename[20]);voidSaveInt(int*p,intsize,intn,charfilename[20]);voidLoadInt(int*p,intsize,intn,charfilename[20]);intNumExist(structstudent_infostudent[],intnum);//定義學生信息結(jié)構(gòu)體structstudent_info{ intnum; //學號 charname[6]; // charsex[5]; //性別 charadress[20]; //家庭住址 chartel[10]; // intchinese,math,english,huping,pingde,jiaoping,paiming1,paiming2; //語文數(shù)學英語互評品德教評 doubleave,zhongping; //平均綜合//每個學生的信息為:學號、、性別、家庭住址、聯(lián)系、語文、數(shù)學、外語三門單科成績、//考試平均成績、考試名次、同學互評分、品德成績、任課教師評分、綜合測評總分、綜合測評名次。//考試平均成績、同學互評分、品德成績、任課教師評分分別占綜合測評總分的60%,10%,10%,20%。};//定義全局結(jié)構(gòu)體數(shù)據(jù) structstudent_infostudent[N]; intcounter,PM;//主函數(shù)voidmain(){ charselect; init();//調(diào)用初始化函數(shù) while(1) { select=wele(); switch(select) { case'1': system("cls"); InputInfo();break; //選項1:輸入學生信息 case'2': system("cls");view();break; //選項2:瀏覽學生信息 case'3': system("cls"); xiugai();break; //選項3:修改學生信息 case'4': system("cls"); DeleteInfo();break; //選項4:刪除學生信息 case'5': system("cls");paiming1(student);paiming2(student);PM=1;getchar();getchar(); system("cls");break; //選項5:學生信息排名 case'6':system("cls");ViewAll();break; //選項6:瀏覽全部學生信息 case'7':system("cls");clean();break; //選項7:清除所有信息 case'8':system("cls");PaimingView();break; //選項8:查詢排名 case'0': system("cls"); exit();break; //選項9:退出 } }}//初始化函數(shù)voidinit(){ FILE*fp; fp=fopen("counter.dat","rb"); //打開計數(shù)變量counter文件 if(fp!=NULL) //載入counter { fclose(fp); LoadInt(&counter,sizeof(counter),1,"counter.dat"); } else { fp=fopen("counter.dat","wb"); //若沒有counter文件,則創(chuàng)建一個,counter初始為0。 fclose(fp); counter=0; } if(counter!=0) //載入學生數(shù)據(jù) LoadStruct(student,sizeof(structstudent_info),counter,"student_info.dat");}//歡迎函數(shù)charwele(){ charselect; while(1) { system("cls"); printf("\t\t歡迎使用學生信息管理系統(tǒng)\n"); printf("\n"); printf("1.錄入學生信息\n\n"); printf("2.瀏覽學生信息\n\n"); printf("3.修改學生信息\n\n"); printf("4.刪除學生信息\n\n"); printf("5.排名學生成績\n\n"); printf("6.瀏覽所有學生信息\n\n"); printf("7.清除所有數(shù)據(jù)\n\n"); printf("8.查詢排名\n\n"); printf("0.退出\n\n"); printf("輸入相應(yīng)的功能序號:"); select=getchar(); if(select=='1'||select=='2'||select=='3'||select=='4'||select=='5'||select=='6'||select=='7'||select=='8'||select=='0') returnselect; system("cls"); continue; }}//1.錄入學生信息voidInputInfo(){ inti,n; printf("需要錄入多少位學生的信息:"); scanf("%d",&n); system("cls"); for(i=1;i<=n;i++) { student[counter]=input(); counter++; } PM=0; SortInfo(student); SaveStruct(student,sizeof(structstudent_info),counter,"student_info.dat"); SaveInt(&counter,sizeof(counter),1,"counter.dat");}//2.游覽學生信息voidview(){ inti,num; printf("請輸入需要游覽的學生信息的學號:"); scanf("%d",&num); getchar(); if((i=NumExist(student,num))==-1) { printf("不存在該學號,按回車鍵返回..."); getchar(); system("cls"); return; } ViewInfo(&student[i]); printf("\n按回車鍵返回..."); getchar(); system("cls"); return;}//3.修改學生信息voidxiugai(){ inti,num; charYN,select; printf("請輸入需要修改的學生信息的學號:"); scanf("%d",&num); getchar(); if((i=NumExist(student,num))==-1) { printf("不存在該學號,按回車鍵返回..."); getchar(); system("cls"); return; } ViewInfo(&student[i]); printf("是否要修改?(Y/N):"); scanf("%c",&YN); getchar(); if(YN!='Y'&&YN!='y') { printf("修改取消."); getchar(); system("cls"); return; } system("cls"); printf("1.學號\n"); printf("2.性別\n"); printf("3.家庭住址\n"); printf("4.聯(lián)系\n"); printf("5.語文成績\n"); printf("6.數(shù)學成績\n"); printf("7.外語成績\n"); printf("8.同學互評分\n"); printf("9.品德成績\n"); printf("0.任課教師教師評分\n"); scanf("%c",&select); switch(select) { case'1':printf("修改學號:");scanf("%d",&student[i].num);break; case'2':printf("修改性別:");scanf("%s",&student[i].sex);break; case'3':printf("修改家庭住址:");scanf("%s",&student[i].adress);break; case'4':printf("修改聯(lián)系:");scanf("%s",&student[i].tel);break; case'5':printf("修改語文成績:");scanf("%d",&student[i].chinese);break; case'6':printf("修改數(shù)學成績:");scanf("%d",&student[i].math);break; case'7':printf("修改外語成績:");scanf("%d",&student[i].english);break; case'8':printf("修改同學互評分:");scanf("%d",&student[i].huping);break; case'9':printf("修改品德成績:");scanf("%d",&student[i].pingde);break; case'0':printf("修改任課教師評分:");scanf("%d",&student[i].jiaoping);break; } SortInfo(student); SaveStruct(student,sizeof(structstudent_info),counter,"student_info.dat");PM=0; getchar(); printf("修改完成..."); getchar(); system("cls");}//4.刪除學生信息voidDeleteInfo(){ inti,j,num; charYN; printf("請輸入要刪除的學生信息學號:"); scanf("%d",&num); getchar(); if((i=NumExist(student,num))==-1) { printf("沒有該學號,按回車鍵返回..."); getchar(); system("cls"); return; } ViewInfo(&student[i]); printf("\n確認刪除(Y/N):"); scanf("%c",&YN); getchar(); if(YN!='Y'&&YN!='y') { printf("刪除取消..."); } else { for(j=i;j<counter-1;j++) student[j]=student[j+1]; counter--; PM=0; SaveStruct(student,sizeof(structstudent_info),counter,"student_info.dat"); SaveInt(&counter,sizeof(counter),counter,"counter.dat"); printf("刪除完成..."); } getchar(); system("cls");}//平均分、綜合分排名voidpaiming1(structstudent_infostudent[]){ structstudent_info*p[N],*temp; inti,j; for(i=0;i<counter;i++) p[i]=&student[i]; for(i=0;i<counter-1;i++) for(j=i+1;j<counter;j++) { if(p[i]->ave<p[j]->ave) { temp=p[i]; p[i]=p[j]; p[j]=temp; } } for(i=0;i<counter;i++) p[i]->paiming1=i+1; printf("平均分排名完成...\n");}//綜合測評分排名voidpaiming2(structstudent_infostudent[]){ structstudent_info*p[N],*temp; inti,j; for(i=0;i<counter;i++) p[i]=&student[i]; for(i=0;i<counter-1;i++) for(j=i+1;j<counter;j++) { if(p[i]->zhongping<p[j]->zhongping) { temp=p[i]; p[i]=p[j]; p[j]=temp; } } for(i=0;i<counter;i++) p[i]->paiming2=i+1; printf("綜合測評分排名完成...\n");}//6.瀏覽所有學生信息voidViewAll(){ inti; for(i=0;i<counter;i++) { ViewInfo(&student[i]); printf("\n"); } getchar(); printf("回車鍵返回..."); getchar(); system("cls");}//7.清除所有信息voidclean(){ counter=0; SaveInt(&counter,sizeof(counter),1,"counter.dat"); printf("清除完畢..."); getchar(); getchar(); system("cls");}//8.查詢排名voidPaimingView(){ inti,num; printf("輸入要查詢的學號:"); scanf("%d",&num); getchar(); i=NumExist(student,num); if(i==-1) { printf("該學號不存在..."); getchar(); return; } if(PM==0) { printf("請先進行成績排名..."); getchar(); return; } printf("%s的平均分排名%d\n",student[i].name,student[i].paiming1); printf("%s的綜合測評分排名%d\n",student[i].name,student[i].paiming2); printf("按回車鍵返回..."); getchar(); return;}//9.退出voidexit(){ printf("使用!\n"); exit(0);}//輸入信息函數(shù)structstudent_infoinput(){ structstudent_infostu,*sp; charYN; sp=&stu; while(1) { while(1) { printf("錄入學號:"); scanf("%d",&sp->num); getchar(); if(NumExist(student,sp->num)!=-1) { printf("該學號已存在,請重新輸入..."); getchar(); system("cls"); continue; } break; } printf("錄入:"); gets(sp->name); printf("錄入性別:"); gets(sp->sex); printf("錄入家庭住址:"); gets(sp->adress); printf("錄入聯(lián)系:"); gets(sp->tel); printf("\n接下來錄入成績\n"); printf("語文:"); scanf("%d",&sp->chinese); printf("數(shù)學:"); scanf("%d",&sp->math); printf("英語:"); scanf("%d",&sp->english); sp->ave=(sp->chinese+sp->math+sp->english)/3.0; printf("同學互評:"); scanf("%d",&sp->huping); printf("品德分數(shù):"); scanf("%d",&sp->pingde); printf("教師評價:"); scanf("%d",&sp->jiaoping); getchar(); sp->zhongping=(sp->ave*0.6+sp->huping*0.1+sp->pingde*0.1+sp->jiaoping*0.2); printf("錄入完畢,確認信息是否正確(Y/N)"); YN=getchar(); getchar(); if(YN=='Y'||YN=='y') break; else { printf("按回車鍵重新錄入信息。"); getchar(); system("cls"); continue; } } system("cls"); returnstu;}//排序函數(shù)voidSortInfo(structstudent_infostudent[]){ inti,j; structstudent_infotemp; for(i=0;i<counter-1;i++) for(j=i+1;j<=counter-1;j++) { if(student[i].num<student[j].num) { temp=student[i]; student[i]=student[j]; student[j]=temp; } }}//顯示學生信息voidViewInfo(structstudent_info*sp){ printf("學號\t\t性別\t家庭住址\t聯(lián)系\n"); printf("%d\t%s\t%s\t%s\t\t%s\n",sp->num,sp->name,sp->sex,sp->adress,sp->tel); printf("語文\t數(shù)學\t英語\t互評\t品德\t教評\n"); printf("%d\t%d\t%d\t%d\t%d\t%d\t\n",sp->chinese,sp->math,sp->english,sp->huping,sp->pingde,sp->jiaoping); printf("平均分\t綜合分\n"); printf("%.2f\t%.2f\n",sp->ave,sp->zhongping); if(PM==1) { printf("平均分排名\t綜合測評分排名\n"); printf("%d\t\t%d\n",sp->paiming1,sp->paiming2); }}//信息存盤(結(jié)構(gòu)體)voidSaveStruct(structstudent_info*sp

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論