




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、課 程 設 計 報 告課程名稱 c語言課程設計 課題名稱 學生成績管理 專 業(yè) 電氣自動化 班 級 學 號 姓 名 指導教師 2011年 6 月 20 日 目錄封面1目錄2任務書3學生成績管理系統(tǒng)需求分析,概要設計,詳細設計5程序調試8程序界面8附件(程序代碼)10詳細設計24運行與調試,參考文獻24源程序25參考文獻37總結心得37評分表37 湖南工程學院課 程 設 計 任 務 書課程名稱 c課程設計 課 題 學生成績管理 專業(yè)班級 電氣1085 學生姓名 學 號 05 指導老師 審 批 任務書下達日期 2011 年 6 月 20 日任務完成日期 2011 年 6 月 日湖南工程學院課 程
2、設 計 任 務 書一設計內容:設計與開發(fā)一個學生成績管理系統(tǒng),對學生的學號、姓名、課程成績、總分、平均成績等信息進行管理、主要功能以下基本功能模塊圖1所示。主程序初始化輸入顯示刪除查找添加計算排序退出圖1 基本功能模塊 二設計要求:1)設計正確,方案合理。2)界面友好,使用方便。3)程序精煉,結構清晰。4)設計報告5000字以上,含程序設計說明、系統(tǒng)的功能框圖、流程圖、源程序清單等。5)實際操作過程中遇到的問題及解決方法:設計總結及心得體會.6)上機演示。成績評定:指導老師負責驗收程序的運行結果,并結合學生的工作態(tài)度、實際動手能力、創(chuàng)新精神和設計報告等進行綜合考評,并按優(yōu)秀、良好、中等、及格和
3、不及格五個等級給出每位同學的課程設計成績。具體考核標準包含以下幾個部分: 平時出勤 (占10%) 系統(tǒng)需求分析、功能設計、數據結構設計及程序總體結構合理與否(占10%) 程序能否完整、準確地運行,個人能否獨立、熟練地調試程序(占40%) 設計報告(占30%)注意:不得抄襲他人的報告(或給他人抄襲),一旦發(fā)現(xiàn),成績?yōu)榱惴帧?獨立完成情況(占10%)。 運行所設計的系統(tǒng)。三、進度安排第十九周 星期一 14:3018:00 星期二14:3018:00 星期三14:3018:00附:課程設計報告裝訂順序:封面、任務書、目錄、正文、評分、附件(a4大小的圖紙及程序清單)。 正文的格式:一級標題用3號黑體
4、,二級標題用四號宋體加粗,正文用小四號宋體;行距為22。正文的內容:一、課題的主要功能;二、課題的功能模塊的劃分(要求畫出模塊圖);三、主要功能的實現(xiàn)(至少要有一個主要模塊的流程圖);四、程序調試;五、總結;六、附件(所有程序的原代碼,要求對程序寫出必要的注釋)。正文總字數要求在5000字以上(不含程序原代碼)。成績管理系統(tǒng)1)需求分析:學生信息是存放在文件中的,所以應該提供文件的輸入,輸出,插入,刪除等操作,在程序中需要瀏覽學生的信息,應提供顯示,查找,排序等操作,另外還應提供鍵盤式選擇菜單提供選擇功能。2)概要設計:根據上面的需求分析,可以將這個系統(tǒng)大致劃分為以下模塊:輸入模塊,修改模塊,
5、刪除模塊,查找模塊,顯示模塊。1.錄入學生信息2顯示學生信息3查找學生信息5修改學生信息4刪除學生信息6統(tǒng)計學生信息7保存學生信息0退出系統(tǒng)功能選擇1按學號查找0按姓名查找 1按學號修改0按姓名修改3)詳細設計:1輸入初始的學生信息:其中包括學生的姓名、學號,性別以及學生的語文、數學、英語和計算機等相關信息。先打印出已有學生信息disp(l)輸入學號格式化學號并并檢驗若輸入學號為0則退出系統(tǒng)若學號被占用,重新輸入未占用的學號2. 查詢模塊:找到就輸出此學生全部信息包括3科的成績。查詢按學號查詢按成績查詢運行顯示成績3. 插入模塊:其中通過學號的大小來比較的,并且以此來排序。保存插入點之前的學號
6、,并輸入學號查詢該學號是否存在插入之前的節(jié)點4. 輸出學生的信息以及成績:通過學生的姓名來查看學生的3科成績,同時也可以分別通過caverage()、maverage()、eaverage()和comaverage()來輸出3科成績的平均分數,最高和最低分數。5. 退出系統(tǒng):可用一個函數exit()來實現(xiàn),首先將信息保存到文件中,釋放動態(tài)創(chuàng)建的內存空間,再退出此程序。4)程序調試:問題一:學生初始信息模塊: 其中包括學生的姓名、學號、3門科目的成績等相關信息;當正確輸入存在的學生號,系統(tǒng)進行判斷時,提示不存在此學生。解決辦法及步驟:1. 一個個輸出所有學生的學號,檢查文件中是否有學生,發(fā)現(xiàn)有。
7、2. 既然有此學生,那么檢查循環(huán)判斷是否有此學生的語句,發(fā)現(xiàn)沒有錯。3. 輸出用于循環(huán)檢查語句中的學生信息,發(fā)現(xiàn)亂碼。4. 仔細分析亂碼的原因,最后發(fā)現(xiàn)是變量的類型錯誤,錯將學生類型的結構體指針變量定義為了其它類型的指針變量。問題二:查詢模塊:找到就輸出此學生全部信息包括學生的3科成績。當正確輸入查找信息時,系統(tǒng)卻不能夠得到所要查找的學生信息以及學生的3科成績。解決辦法及步驟:1. 檢查所編寫的程序代碼是否完全正確,若不是,則改之,然后再繼續(xù)正確輸入查找信息看能否得到所要查找的學生信息一級學生的3科成績。2. 檢查當我們在輸入查找信息時,看是否我們輸入的信息有誤,若是這樣,我們應當仔細輸入查找
8、信息。5)程序界面:1.初始界面2.輸入學生信息節(jié)點界面:3. 刪除節(jié)點界面;4. 查找節(jié)點界面:1)運行與調試:調試:將圖中/*/去掉在/*計算總分和均值*/上加上個運行:2)源程序 /*xuesheng.c*/*頭文件(.h)*/#include stdio.h /*i/o函數*/#include stdlib.h /*其它說明*/#include string.h /*字符串函數*/#include conio.h /*屏幕操作函數*/#include mem.h /*內存操作函數*/#include ctype.h /*字符操作函數*/#include alloc.h /*動態(tài)地址分配
9、函數*/#define n 3 /*定義常數*/typedef struct z1 /*定義數據結構*/ char no11; char name15; int scoren; float sum; float average; int order; struct z1 *next; student;/*以下是函數原型*/student *init(); /*初始化函數*/student *create(); /*創(chuàng)建鏈表*/student *delete(student *h); /*刪除記錄*/void print(student *h); /* 顯示所有記錄*/void search(s
10、tudent *h); /*查找*/void save(student *h); /*保存*/student *load(); /*讀入記錄*/void computer(student *h); /*計算總分和均分*/student *insert(student *h); /*插入記錄*/void append(); /*追加記錄*/student *sort(student *h); /*排序*/int menu_select(); /*菜單函數*/*主函數開始*/main() int i; student *head; /*鏈表定義頭指針*/ head=init(); /*初始化鏈表*
11、/ clrscr(); /*清屏*/ for(;) /*無限循環(huán)*/ switch(menu_select() /*調用主菜單函數,返回值整數作開關語句的條件*/ /*值不同,執(zhí)行的函數不同,break 不能省略*/ case 0:head=init();break; /*執(zhí)行初始化*/ case 1:head=create();break; /*創(chuàng)建鏈表*/ case 2:head=delete(head);break; /*刪除記錄*/ case 3:print(head);break; /*顯示全部記錄*/ case 4:search(head);break; /*查找記錄*/ case
12、 5:save(head);break; /*保存文件*/ case 6:head=load(); break; /*讀文件*/ case 7:computer(head);break; /*計算總分和均分*/ case 8:head=insert(head); break; /*插入記錄*/ case 9:head=sort(head);break; /*排序*/ case 10:append();break; /*追加記錄*/ case 11:exit(0); /*如菜單返回值為14程序結束*/ /*菜單函數,返回值為整數*/menu_select() char *menu=*menu*,
13、 /*定義菜單字符串數組*/ 0. init list, /*初始化*/ 1. enter list, /*輸入記錄*/ 2. delete a record from list, /*從表中刪除記錄*/ 3. print list , /*顯示單鏈表中所有記錄*/ 4. search record on name, /*按照姓名查找記錄*/ 5. save the file, /*將單鏈表中記錄保存到文件中*/ 6. load the file, /*從文件中讀入記錄*/ 7. compute the score, /*計算所有學生的總分和均分*/ 8. insert record to l
14、ist , /*插入記錄到表中*/ 9. sort to make new file, /*排序*/ 10. append record to file, /*追加記錄到文件中*/ 11. quit; /*退出*/ char s3; /*以字符形式保存選擇號*/ int c,i; /*定義整形變量*/ gotoxy(1,25); /*移動光標*/ printf(press any key enter menu.n); /*壓任一鍵進入主菜單*/ getch(); /*輸入任一鍵*/ clrscr(); /*清屏幕*/ gotoxy(1,1); /*移動光標*/ textcolor(yellow
15、); /*設置文本顯示顏色為黃色*/ textbackground(blue); /*設置背景顏色為藍色*/ gotoxy(10,2); /*移動光標*/ putch(0xc9); /*輸出左上角邊框*/ for(i=1;i44;i+) putch(0xcd); /*輸出上邊框水平線*/ putch(0xbb); /*輸出右上角邊框 */ for(i=3;i20;i+) gotoxy(10,i);putch(0xba); /*輸出左垂直線*/ gotoxy(54,i);putch(0xba); /*輸出右垂直線*/ gotoxy(10,20);putch(0xc8); /*輸出左上角邊框*/
16、for(i=1;i44;i+) putch(0xcd); /*輸出下邊框水平線*/ putch(0xbc); /*輸出右下角邊框*/ window(11,3,53,19); /* 制作顯示菜單的窗口,大小根據菜單條數設計*/ clrscr(); /*清屏*/ for(i=0;i13;i+) /*輸出主菜單數組*/ gotoxy(10,i+1); cprintf(%s,menui); textbackground(black); /*設置背景顏色為黑色*/ window(1,1,80,25); /*恢復原窗口大小*/ gotoxy(10,21); /*移動光標*/ do printf(n ent
17、er you choice(014):); /*在菜單窗口外顯示提示信息*/ scanf(%s,s); /*輸入選擇項*/ c=atoi(s); /*將輸入的字符串轉化為整形數*/ while(c11); /*選擇項不在014之間重輸*/ return c; /*返回選擇項,主程序根據該數調用相應的函數*/student *init() return null;/*創(chuàng)建鏈表*/student *create() int i; int s; student *h=null,*info; /* student指向結構體的指針*/ for(;) info=(student *)malloc(size
18、of(student); /*申請空間*/ if(!info) /*如果指針info為空*/ printf(nout of memory); /*輸出內存溢出*/ return null; /*返回空指針*/ inputs(enter no:,info-no,11); /*輸入學號并校驗*/ if(info-no0=) break; /*如果學號首字符為則結束輸入*/ inputs(enter name:,info-name,15); /*輸入姓名,并進行校驗*/ printf(please input %d score n,n); /*提示開始輸入成績*/ s=0; /*計算每個學生的總分,
19、初值為0*/*n門課程循環(huán)n次*/*將總分保存*/*求出平均值*/for(i=0;iscorei); /*輸入成績*/ if(info-scorei100|info-scoreiscorei100|info-scoreiscorei; /*累加各門課程成績*/ info-sum=s; /*將總分保存*/ info-average=(float)s/n; /*求出平均值*/ info-order=0; /*未排序前此值為0*/ info-next=h; /*將頭結點做為新輸入結點的后繼結點*/ h=info; /*新輸入結點為新的頭結點*/ return(h); /*返回頭指針*/*輸入字符串,
20、并進行長度驗證*/inputs(char *prompt, char *s, int count) char p255; do printf(prompt); /*顯示提示信息*/ scanf(%s,p); /*輸入字符串*/ if(strlen(p)count)printf(n too long! n); /*進行長度校驗,超過count值重輸入*/ while(strlen(p)count); strcpy(s,p); /*將輸入的字符串拷貝到字符串s中*/*輸出鏈表中結點信息*/void print(student *h) int i=0; /* 統(tǒng)計記錄條數*/ student *p;
21、 /*移動指針*/ clrscr(); /*清屏*/ p=h; /*初值為頭指針*/ printf(nnn*student*n); printf(|rec|no | name | sc1| sc2| sc3| sum | ave |order|n); printf(|-|-|-|-|-|-|-|-|-|n); while(p!=null) i+; printf(|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |n, i, p-no,p-name,p-score0,p-score1,p-score2,p-sum,p-average,p-ord
22、er); p=p-next; printf(*end*n);/*刪除記錄*/student *delete(student *h) student *p,*q; /*p為查找到要刪除的結點指針,q為其前驅指針*/ char s11; /*存放學號*/ clrscr(); /*清屏*/ printf(please deleted non); /*顯示提示信息*/ scanf(%s,s); /*輸入要刪除記錄的學號*/ q=p=h; /*給q和p賦初值頭指針*/*當記錄的學號不是要找的,或指針不為空時*/ q=p; /*將p指針值賦給q作為p的前驅指針*/ p=p-next; /*將p指針指向下一
23、條記錄*/ if(p=null) /*如果p為空,說明鏈表中沒有該結點*/ printf(nlist no %s studentn,s); else /*p不為空,顯示找到的記錄信息*/ printf(*have found*n); printf(|no | name | sc1| sc2| sc3| sum | ave |order|n); printf(|-|-|-|-|-|-|-|-|n); printf(|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |n, p-no, p-name,p-score0,p-score1,p-score2,p-
24、sum, p-average,p-order); printf(*end*n); getch(); /*壓任一鍵后,開始刪除*/ if(p=h) /*如果p=h,說明被刪結點是頭結點*/ h=p-next; /*修改頭指針指向下一條記錄*/ else q-next=p-next; /*不是頭指針,將p的后繼結點作為q的后繼結點*/ free(p); /*釋放p所指結點空間*/ printf(n have deleted no %s studentn,s); printf(dont forget saven);/*提示刪除后不要忘記保存文件*/ return(h); /*返回頭指針*/*查找記錄
25、*/void search(student *h) student *p; /* 移動指針*/ char s15; /*存放姓名的字符數組*/ clrscr(); /*清屏幕*/ printf(please enter name for searchn); scanf(%s,s); /*輸入姓名*/ p=h; /*將頭指針賦給p*/ while(strcmp(p-name,s)&p!=null) /*當記錄的姓名不是要找的,或指針不為空時*/ p=p-next; /*移動指針,指向下一結點*/ if(p=null) /*如果指針為空*/ printf(nlist no %s studentn,
26、s); /*顯示沒有該學生*/ else /*顯示找到的記錄信息*/ printf(nn*havefound*n); printf(|no | name | sc1| sc2| sc3| sum | ave |order|n); printf(|-|-|-|-|-|-|-|-|n); printf(|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |n, p-no,p-name,p-score0,p-score1,p-score2,p-sum,p-average,p-order); printf(*end*n); /*插入記錄*/student *in
27、sert(student *h) student *p,*q,*info; /*p指向插入位置,q是其前驅,info指新插入記錄*/ char s11; /*保存插入點位置的學號*/ int s1,i; printf(please enter location before the non); scanf(%s,s); /*輸入插入點學號*/ printf(nplease new recordn); /*提示輸入記錄信息*/ info=(student *)malloc(sizeof(student); /*申請空間*/ if(!info) printf(nout of memory); /*
28、如沒有申請到,內存溢出*/ return null; /*返回空指針*/ inputs(enter no:,info-no,11); /*輸入學號*/ inputs(enter name:,info-name,15); /*輸入姓名*/ printf(please input %d score n,n); /*提示輸入分數*/ s1=0; /*保存新記錄的總分,初值為0*/ for(i=0;iscorei); if(info-scorei100|info-scoreiscorei100|info-scoreiscorei; /*計算總分*/ info-sum=s1; /*將總分存入新記錄中*/
29、 info-average=(float)s1/n; /*計算均分*/ info-order=0; /*名次賦值0*/ info-next=null; /*設后繼指針為空*/ p=h; /*將指針賦值給p*/ q=h; /*將指針賦值給q*/ while(strcmp(p-no,s)&p!=null) /*查找插入位置*/ q=p; /*保存指針p,作為下一個p的前驅*/ p=p-next; /*將指針p后移*/ if(p=null) /*如果p指針為空,說明沒有指定結點*/ if(p=h) /*同時p等于h,說明鏈表為空*/ h=info; /*新記錄則為頭結點*/ else q-next=
30、info; /*p為空,但p不等于h,將新結點插在表尾*/ else if(p=h) /*p不為空,則找到了指定結點*/ info-next=p; /*如果p等于h,則新結點插入在第一個結點之前*/ h=info; /*新結點為新的頭結點*/ else info-next=p; /*不是頭結點,則是中間某個位置,新結點的后繼為p*/ q-next=info; /*新結點作為q的后繼結點*/ printf(n -have inserted %s student-n,info-name); printf(-dont forget save-n); /*提示存盤*/ return(h); /*返回頭
31、指針*/*保存數據到文件*/void save(student *h) file *fp; /*定義指向文件的指針*/ student *p; /* 定義移動指針*/ char outfile10; /*保存輸出文件名*/ printf(enter outfile name,for example c:f1te.txt:n); /*提示文件名格式信息*/ scanf(%s,outfile); if(fp=fopen(outfile,wb)=null) /*為輸出打開一個二進制文件,如沒有則建立*/ printf(can not open filen); exit(1); printf(nsav
32、ing file.n); /*打開文件,提示正在保存*/ p=h; /*移動指針從頭指針開始*/ while(p!=null) /*如p不為空*/ fwrite(p,sizeof(student),1,fp);/*寫入一條記錄*/ p=p-next; /*指針后移*/ fclose(fp); /*關閉文件*/ printf(-save success!-n); /*顯示保存成功*/* 從文件讀數據*/student *load() student *p,*q,*h=null; /*定義記錄指針變量*/ file *fp; /* 定義指向文件的指針*/ char infile10; /*保存文件
33、名*/ printf(enter infile name,for example c:f1te.txt:n); scanf(%s,infile); /*輸入文件名*/ if(fp=fopen(infile,rb)=null) /*打開一個二進制文件,為讀方式*/ printf(can not open filen); /*如不能打開,則結束程序*/ exit(1); printf(n -loading file!-n); p=(student *)malloc(sizeof(student); /*申請空間*/ if(!p) printf(out of memory!n); /*如沒有申請到,
34、則內存溢出*/ return h; /*返回空頭指針*/ h=p; /*申請到空間,將其作為頭指針*/ while(!feof(fp) /*循環(huán)讀數據直到文件尾結束*/ if(1!=fread(p,sizeof(student),1,fp) break; /*如果沒讀到數據,跳出循環(huán)*/ p-next=(student *)malloc(sizeof(student); /*為下一個結點申請空間*/ if(!p-next) printf(out of memory!n); /*如沒有申請到,則內存溢出*/ return h; q=p; /*保存當前結點的指針,作為下一結點的前驅*/ p=p-n
35、ext; /*指針后移,新讀入數據鏈到當前表尾*/ q-next=null; /*最后一個結點的后繼指針為空*/ fclose(fp); /*關閉文件*/ printf(-you have success read data from file!-n); return h; /*返回頭指針*/*追加記錄到文件*/void append() file *fp; /*定義指向文件的指針*/ student *info; /*新記錄指針*/ int s1,i; char infile10; /*保存文件名*/ printf(nplease new recordn); info=(student *)
36、malloc(sizeof(student); /*申請空間*/ if(!info) printf(nout of memory); /*沒有申請到,內存溢出本函數結束*/ return ; inputs(enter no:,info-no,11); /*調用inputs輸入學號*/ inputs(enter name:,info-name,15); /*調用inputs輸入姓名*/ printf(please input %d score n,n); /*提示輸入成績*/ s1=0; for(i=0;iscorei); /*輸入成績*/ if(info-scorei100|info-scor
37、eiscorei100|info-scoreiscorei; /*求總分*/ info-sum=s1; /*保存總分*/ info-average=(float)s1/n; /*求均分*/ info-order=0; /*名次初始值為0*/ info-next=null; /*將新記錄后繼指針賦值為空*/ printf(enter infile name,for example c:f1te.txt:n); scanf(%s,infile); /*輸入文件名*/ if(fp=fopen(infile,ab)=null) /*向二進制文件尾增加數據方式打開文件*/ printf(can not open filen); /*顯示不能打開*/ exit(1); /*退出程序*/ printf(n -appending record!-n); if(1!=fwrite(info,sizeof(student),1,fp) /*寫文件操作*/ printf(-file write error!-n); return; /*返回*/ printf(-append sucess!-n); fclose(fp); /*關閉文件*/*排序*/student *sort(student *h) int i=0; /*保存名次*/ stu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣州國際旅游服務合同樣本
- 商鋪租賃合同樣本:門面租賃全新范本
- 寒假臨時工雇傭合同書樣本
- 游戲品牌代言合同樣本
- 長租公寓租賃合同全文
- 新媒體廣告推廣合同模板
- 辦公室簡單裝修合同范本
- 個人貸款合同電子版模板
- 企業(yè)間的戰(zhàn)略合作框架合同范本
- 課件人物插圖小學生
- 培訓中的基本學習原理-課件
- 現(xiàn)代文閱讀《有聲電影》答案詳細解析
- 銷售合同模板英文銷售合同模板
- 大學計算機基礎(Windows10+Office2016)PPT完整全套教學課件
- 精素材:描寫植物的好詞好句好段
- 【高中語文】《登岳陽樓》課件17張+統(tǒng)編版高中語文必修下冊
- 華師大版八年級數學下冊全冊教案
- 四下語文學情分析-2
- 家園合作培養(yǎng)幼兒勞動行為習慣的行動研究
- 中國的能源安全 課件
- 鄭州市某路雨水污水改造工程施工組織設計
評論
0/150
提交評論