




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、HUNAN UNIVERSIT Y 程序設(shè)計訓練 報告 題 目學生成績管理系統(tǒng) 學生姓名 學生學號 專業(yè)班級 _ 指導老師 湖南大學程序設(shè)計訓練報告 目錄 程序功能簡介 :.:3 本人完成的主要工作 :-:3 - 設(shè)計方案 1) 設(shè)計分析 :/:3- 2) 模塊的功能及程序分析 :.:.4 3) 核心算法流程圖 :.: : : 7 4) 核心源程序模塊 :8 5) 操作方法簡介 :8 6) 實驗結(jié)果:9 8)設(shè)計體會 :-:-:1-1- 、程序功能簡介; 本程序作為一個學生成績管理系統(tǒng),用戶可以首先使用管理員模式初 始化該系統(tǒng)。初始化完成之后,用戶可以選擇使用成績記錄人模式進入 系統(tǒng),對學生成
2、績進行記錄。系統(tǒng)自動儲存所記錄的學生成績,然后用 戶可根據(jù)不同需要來選擇不同的功能來使用程序,其中包括成績查詢與 增減,成績排序,成績分析等功能。 、本人完成的主要工作; 程序設(shè)計分析,繪制程序流程圖,寫出大體結(jié)構(gòu)算法以及各個核心算 法模塊,寫出核心源程序,對源程序進行算法優(yōu)化,對源代碼進行多次 試驗驗證其正確性,完成源代碼的測試以及代碼書寫規(guī)范檢測。 、設(shè)計方案; 1) 設(shè)計分析; 首先拿到這個題目,我就開始思考如何將這個看似簡單的系統(tǒng)做 的較為完善,而不是簡簡單單的學生成績管理系統(tǒng), 學生管理系統(tǒng)自 然是這個題目的核心,從中發(fā)散思維,我想到了幾個比較細小的地方。 例如:如何很好的將程序中的
3、功能步驟化,系統(tǒng)化以及便利化?;?C語言程序的特點,我還聯(lián)想到了對信息的保存問題。這些問題都隨 著代碼的一步一步完善而解決。管理員系統(tǒng)與查詢系統(tǒng)的選擇很好的 解決了這些問題。 2) 模塊的功能及程序說明; 整個系統(tǒng)除了主函數(shù)外,另外還有 10個函數(shù),實現(xiàn)八大功能:輸入功 能、顯示功能、查找功能、排序功能、插入功能、保存功能、讀取功能。 各個函數(shù)的詳細設(shè)計說明分別如下: 1、主函數(shù)mai n() 利用無限次循環(huán)for(;)和swithch()實現(xiàn)各函數(shù)的調(diào)用,系統(tǒng)根據(jù)輸 入的數(shù)字選項來調(diào)用相應的函數(shù)。 2、初始化函數(shù) STUDENT *init() 這是一個無參函數(shù),里面只有一個語句,它的作用
4、是使鏈表初始化,使 head的值為NULL比如:沒有這個函數(shù)的話,在你沒有輸入任何數(shù)據(jù)的 情況下,去執(zhí)行顯示功能的時候會顯示一些亂碼! 3、菜單選擇函數(shù) int menu_select(); 這是一個無參函數(shù),主要實現(xiàn)“功能選擇”的界面,在這個界面里有 顯示系統(tǒng)的九大功能,根據(jù)每個功能前面的序號進行選擇,中間還顯示系 統(tǒng)當前的時間。等執(zhí)行完每一個函數(shù)功能后,按任一鍵回到主界面也要通 過這個函數(shù)來實現(xiàn)! 4、輸入記錄函數(shù)STUDENT *create() 這是一個無參函數(shù),用來執(zhí)行第學生成績記錄的輸入,當學生為0時 停止輸入,函數(shù)結(jié)束后,帶回一個指向鏈表頭的指針head。 算法:先聲明一個首節(jié)點
5、 head,并將head-next設(shè)為NULL每輸入 一個數(shù)據(jù)就聲明一個新節(jié)點P,把p-next設(shè)為NULL并且鏈接到之前列 表的尾端。 5、顯示記錄函數(shù) void print(STUDENT *head) 這是一個不返回值的有參函數(shù),形參為“鏈表頭的指針”,負責對全 部學生成績記錄的輸出,不足之處就是不能對學生成績進行分頁顯示。 算法:先將p結(jié)點的指針指向第一個結(jié)點,將 p結(jié)點(即第一個結(jié)點) 的數(shù)據(jù)輸出。然后再將p結(jié)點的指針指向p指針的的指針(即下一結(jié)點), 將p結(jié)點(即第一結(jié)點)的數(shù)據(jù)輸出。重復執(zhí)行此步聚直到p指針指向NULL 為止。 6、查找記錄函數(shù) void search(STUDE
6、NT *head) 這是一個不返回值的有參函數(shù),形參為“鏈表頭的指針”,實現(xiàn)按學 號對某個學生進行查找,并顯示所查找到的記錄。 算法:采用線性查找法往下一個節(jié)點查找。輸入所要查找的學生的學 號s,設(shè)一個指針變量p,先指向第一個結(jié)點,當strcmp(p-names) /* 學號 */ ; 2) char name20; /* 姓名 */ ; 3) char sex2; / *性別*/ ; 4) int score3; /* 成績*/ ; 5) int sum;/* 總成績*/ ; 6) int n;/* 聲明一個全局變量*/ ; 7) struct stude nt *n ext /*聲明一個結(jié)
7、構(gòu)體指針 (2) 自定義函數(shù): 1) Student *cin(void); /* 學生信息成績錄入函數(shù)*/ 2) Student *sort_1(Student *head,int); /*聲明按學號排序函數(shù) */ 3) void sort_2(Student *head); /*聲明按總分排序函數(shù) */ 4) void print(Student *head); /*聲明顯示函數(shù) */ 5) Student *sort_all(Student *head); /*聲明排序函數(shù) */ 6) void find(Student *head); /*聲明查詢函數(shù) */ (3)源程序代碼: #i
8、nclude #i nclude #i nclude #i nclude #defi ne LEN sizeof(Stude nt) typedef struct stude nt int num; /* 學號 */ char n ame20; /* 姓名 */ char sex2; /* 性別 */ int sum; /* 總成績 */ struct stude nt *n ext; Stude nt; int n; /*聲明一個全局變量*/ Stude nt *cin(v oid); Student *sort_1(Student *head,int); /*聲明按學號排序函數(shù) */ vo
9、id sort_2(Student *head); /*聲明按總分排序函數(shù) */ void print(Student *head); /*聲明顯示函數(shù) */ Student *sort_all(Student *head); /*聲明排序函數(shù) */ void find(Student *head); /*聲明查詢函數(shù) */ Stude nt *add_ new(Stude nt *head); Stude nt *ci n() int flag; Stude nt *head,*p1,*p2; n=0; head=(Stude nt *)malloc(LEN); p2二head; print
10、f(n請輸入第c名學生的學號,學號為0表示結(jié)束輸入:,n+1); sca nf(%d, while(getchar()!=n); for(;flag;) /*輸入每個學生的信息*/ */ */ */ 表示結(jié) n+; p1=(Stude nt *)malloc(LEN); p1- num 二flag; printf(”請輸入第d名學生的姓名:,n); /* 輸入姓名*/ sca nf(%s,p1- n ame); printf(”請輸入第d學生的性別:,n); /*輸入性別*/ sca nf(%s,p1-sex); printf(請輸入第d名學生的語文成績:,n); /*輸入語文成績 sca n
11、f(%d, printf(請輸入第d名學生的數(shù)學成績:,n); /*輸入數(shù)學成績 sca nf(%d, printf(請輸入第d名學生的英語成績:,n); /*輸入英語成績 sca nf(%d, p1-sum二p1-score0+p1-score1+p1-score2; p2-n ext=p1; p2=p1; printf(n請輸入第%d名學生的學號,沒有此學生則輸入0 束:,n+1); sca nf(%d, p2- next二NULL; prin tf(nn); retur n head; Student *sort_all(Student *head) /*定義排序函數(shù) */ int ch
12、oose; for(;) prin tf(ntt# # # # # 學生成績統(tǒng)計排序# # # #n); prin tf(tt#t1. 按學生學號排序t #n); prin tf(tt#t2. 按學生總分排序t #n); prin tf(tt#t7. 單科高分及均分t #n); prin tf(tt#t8. 顯示當前學生成績t #n); prin tf(tt#tO. 返回上一級菜單t #n); printf(請輸入你要執(zhí)行的操作:”); sca nf(%d, while(getchar()!=n); switch(choose) case 1: case 2: case 3: case 4:
13、case 5: case 6:head=sort_1(head,choose);break; case 7:print(head);sort_2(head);break; case 8:pri nt(head);break; case 0:retur n head; default:printf(nn您的輸入有誤!請重新輸入: nn ”);break; Student *sort_1(Student *head,int choose) /*定義按學號排序函數(shù) */ Stude nt *p1,*p2二head-n ext,*pm,*px; Stude nt mid; if (!p2) retur
14、 n head; for(p1=p2;p1- next!二NULL;p1二p1- next) pm=p1; for(p2=p1- next;p2!=NULL;p2=p2- next) switch(choose) case 1:if (pm-num p2-num) pm=p2;break; case 2:if (pm-sumsum) pm=p2;break; case 3:if (pm-score0vp2-score0) pm=p2;break; case 4:if (pm-score1vp2-score1) pm=p2;break; case 5:if (pm-score2vp2-score
15、2) pm=p2;break; if (pm!=p1) mid二*pm; *pm=*p1; *p1=mid; px=pm-n ext; pm-n ext=p1- n ext; p1- n ext=px; printf(n排序后的成績表為:n); prin t(head); retur n head; void sort_2(Student *head) /*定義按總分排序函數(shù) */ Stude nt *p=head-n ext; int max_1,max_2,max_3,min_1,min_2,min_3; int max_su m,min_sum; int sum_1=0,sum_2=0,
16、sum_3=0; if (!p) retur n; max_1=min_1=p-score0;max_2=min_2=p-score1; max_3 二min _3=p-score2; max_sum=min_sum=p-sum; for(;p;p=p-n ext) if (max_1score0) max_1=p-score0; else if (min_1p-score0) min_1=p-score0; if (max_2score1) max_2=p-score1; else if (min_2p-score1) min_2=p-score1; if (max_3score2) max
17、_3=p-score2; else if (min _3p-score2) min_3=p-score2; if (max_sumsum) max_sum=p-sum; else if (min_su mp-sum) min_su m=p-sum; sum_1+二p-score0;sum_2+=p-score1;sum_3+=p-score2; aver_ 仁 1.0*sum_1/n;aver_2=1.0*sum_2/n;aver_3=1.0*sum_3/n; aver_sum=aver_1+aver_2+aver_3; printf(”總共d名學生,具體數(shù)據(jù)為:n, n); printf(總
18、分最高分為%d最低分位%d平均分為%.2fn, max_sum,min_sum,aver_sum); void find(Student *head) /*定義查詢函數(shù) */ Stude nt *p; int choose,f num; char tem20; if (n=0) printf(n當前系統(tǒng)沒有任何學生數(shù)據(jù)!n ”);return; for(;) prin tf(n請輸入您要查詢學生的方式:nn); prin tf(1、按學號查詢;2、按姓名查詢;0、我不查詢了。nn); printf(請選擇:”); sca nf(%d, while(getchar()!=n); if (choo
19、se=1) printf(n請輸入你要查詢的學生的學號,輸入0退出學號查詢: ); sca nf(%d, for(;fnum;) for(p=head-n ext;p!二NULLp=p-n ext); if (!p) prin tf(nn 找不到你要查詢的學號,請重新輸入,輸入0 sea nf(%d, 績英語成績總分n);/* else if (p-num=fnum) prin tf(%dt%st%st%d %d %d %dn,p- num, prin tf(n 學號為d學生的數(shù)據(jù)為:n,p-num); printf( 學號t姓名t性別t 語文成績 數(shù)學成 輸出所有的學生信息*/ p-n am
20、e,p-sex ,p-score0,p-score1,p-score2,p-sum); prin tf(nn請輸入你還要查詢的學生的學號,輸 入0表示不按學號查詢了:); sca nf(%d, else if (choose=2) printf(n請輸入你要查詢的學生的姓名,輸入0退出姓名 查詢:); for(;strcmp(tem,0);) for(p二head-n ext;p!二NULLp=p-n ext); if (!p) prin tf(nn找不到你要查詢的姓名,請重新輸入, 輸入0表示結(jié)束:); sca nf(%s,tem); else if (!strcmp(p-n ame,tem
21、) printf(n姓名為%s學生的數(shù)據(jù) 為:n ”,p- name); printf(”學號t姓名t性別t語文成績 數(shù)學成績英語成績總分n); prin tf(%dt%st%st%d %d %d %dn, p-nu m,p- n ame,p-sex ,p-score0,p-score1,p-score2,p-sum); prin tf(nn請輸入你還要查詢的學生的 姓名,輸入0表示不按姓名查詢了 :); sca nf(%s,tem); elseif (choose=0) printf(n 你選擇了 不查詢! n ”);break; else pri ntf(n你以其他方式選擇了不查詢! n
22、”);break; Student *add_new(Student *head) /*定義插入函數(shù) */ Stude nt *p; int flag; printf(nn請輸入你要新加入學生的學號,學號為0表示結(jié)束輸入:); sca nf(%d, while(getchar()!=n); for(;flag;) p=(Stude nt *)malloc(LEN); p-num 二flag; printf(”請輸入新加入學生的姓名:,n); /* 輸入姓名*/ sca nf(%s,p- name); printf(請輸入新加入學生的性別:”);/* 輸入性別*/ sea nf(%s,p-sex
23、); printf(” 請輸入新加入學生的語文成績:,n); /* 輸入語文成績*/ sea nf(%d, printf( 請輸入新加入學生的數(shù)學成績:,n); /* 輸入數(shù)學成績*/ sea nf(%d, printf( 請輸入新加入學生的英語成績:,n); /* 輸入英語成績*/ sea nf(%d, p-sum二p-score0+p-score1+p-score2; p-n ext二head-n ext; head-n ext=p; n+; printf(n請輸入還要加入學生的學號,沒有此學生則輸入0表示結(jié) 束:); sca nf(%d, head=sort_1(head,1); pri
24、ntf(”加入后的成績表為:n); prin t(head); retur n head; void prin t(Stude nt *head) Stude nt *p=head-n ext; if (!p) pri ntf(nn此系統(tǒng)目前沒有任何學生數(shù)據(jù)!nnn);retur n; printf(此系統(tǒng)目前共計學生 d名:n,n); 生成績統(tǒng)計 printf( * * *、n) printf( 學號t 姓名t 性別t語文成績 數(shù)學成績英語成績 總分 prin tf(tt*t6.刪除學生數(shù)據(jù)tt *n); /*刪除學生數(shù)據(jù)*/ n); for(;p;p=p-n ext) prin tf(%d
25、t%st%st %d %d %d %dn, p-nu m,p- n ame,p-sex ,p-score0,p-score1,p-score2,p-sum二 p-score0+p-score1+p-score2); 定義刪除學生信 struct stude nt *del(struct stude nt *head,l ong num) /* 息函數(shù)*/ struct stude nt *p1,*p2; if(head=NULL) printf(nlist null! n”);return head; p1二head; while(num!=p1-num p 1= p1- next; if(n
26、um=p1- num) if(p1=head)head=p1- n ext; n=n-1; else printf(%ld not deen found! n,num); return(head); int main()/*主函數(shù)即用戶的操作界面*/ Stude nt *head; int choose,i,num; /*聲明局部變量 */ head=(Stude nt *)malloc(LEN); head- next二NULL; for(;) prin tf(ntt* * * 1 績管理系統(tǒng)*/ prin tf(tt*t1. */ prin tf(tt*t2. */ prin tf(tt*t3. prin tf(tt*t4. prin tf(tt*t5. 學生成績管理系統(tǒng)* * * *n); /* 學生成 學生數(shù)據(jù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 制造業(yè)項目標準合同模板
- 合同制優(yōu)化保獎服務套餐(7型)
- 裝修裝飾工程合同(三)
- 綠色通道綠化合同
- 租賃合同和解協(xié)議書格式示例
- 車輛質(zhì)押借款正式合同
- 公司簽訂安保人員合同范本范例
- 小學生拓展思維作文課件
- 臨終關(guān)懷服務的倫理決策案例考核試卷
- 城市配送與物流配送環(huán)節(jié)的風險防范考核試卷
- doors培訓材料-工具入門
- 乙型肝炎病毒教學課件
- 旅游經(jīng)濟學全套課件
- 電線電纜(單芯)檢測報告模板
- 卡爾曼(Kalman)濾波課件
- 新時代核心英語教程寫作1教學課件(U3)
- 國際投資法完整版教學ppt課件全套教程
- 報價單報價表
- DBJ 15-82-2011 蒸壓加氣混凝土砌塊自承重墻體技術(shù)規(guī)程
- 《民航旅客運輸》項目二課件
- 應聘人員面試登記表
評論
0/150
提交評論