




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、數(shù)據結構課程設計題目名稱:學生成績管理系統(tǒng) 計算機科學與技術學院 數(shù)據結構綜合實驗設計學生成績管理系統(tǒng)1. 需求分析系統(tǒng)主要管理學生信息及成績信息排序等事項。根據需要可以查詢學生的信息。主要功能包括如下。(1) 使用中文菜單,界面升級和用戶輸入要人性化。(2) 將學生信息保存到文本文檔中,具體對學生信息進行插入刪除查詢操作時,將保存在文本文檔中的學生信息提取出來,保存在自己定義的數(shù)據結構中,然后在對該數(shù)據結構進行操作,所有操作完成,或者在相應的命令后,再將學生信息保存到文本文檔中。(3) 具有數(shù)據輸入功能,輸入的數(shù)據能最終保存在文件中。(4) 具有數(shù)據刪除功能,能最終從文件中刪除。(5) 排序
2、功能,根據自己設計的數(shù)據結構,升級排序算法。(6) 具有多種查詢及輸出功能。(7) 其他功能。(8) 學生信息的修改。本程序要求設計一個學生信息管理程序,即用計算機來管理一個學校的各個班級成員的各種信息,實現(xiàn)學生信息管理。 (9) 數(shù)據的輸入形式和輸入值得范圍:首先輸入的是菜單的序號,選擇你想要進行 的操作,其次根據提示輸入相關的班級或學生信息。 (10) 結果的輸出形式:輸出的是班級信息或學生信息。2. 設計概要 輸入學生成績 輸出學生成績 查詢學生成績 插入學生成績 按總分排名 刪除學生信息 退出系統(tǒng)3函數(shù)Struct Student/結構體Int term;/學期Int num;/學號C
3、har name12;姓名Float mrak1;成績Float mark2;Float mark3;Float sum;/總分Float average;/平均分;void input(list *head) 輸入函數(shù)void output(list *h) 輸出函數(shù)void sortsum(list *head) 總成績排名void sortnum(list *head)按學號排名void find (list *h)查找主函數(shù)list *del (list *h)刪除函數(shù)list *insert(list *h)插入函數(shù)全部的功能函數(shù) 可以實現(xiàn)所有的功能4詳細設計:程序代碼:#inclu
4、de <stdio.h>#include <stdlib.h>#include <malloc.h>#define MAXLEN 100#define Null 0/*/int count = 0;/*/typedef struct node int num; / 學號 char nameMAXLEN; / 姓名 /*/char sex2; /性別/char sex;/*/float sum; /總分float ave; /平均分int computer; /計算機成績int english; /英語成績int math; /數(shù)學成績int chinese;
5、 /語文分數(shù)struct node *next; / 指針域list;/*/void input(list *head) /輸入函數(shù)/*/list *p,*r;int i,n; / n 為學生人數(shù) /*p=(list *)malloc(sizeof(list);p->next=Null;*/r=head; printf("請輸入學生人數(shù).n"); scanf("%d",&n);for(i=1;i<=n;i+) p=(list *)malloc(sizeof(list);printf("請輸入學生學號:n"); sc
6、anf("%d",&p->num); printf("請輸入學生性別:n"); scanf("%s",&p->sex);printf("請輸入學生姓名:n"); scanf("%s",&p->name); printf("請輸入語文成績:n"); scanf("%d",&p->chinese); printf("請輸入英語成績:n"); scanf("%d",&
7、amp;p->english); printf("請輸入數(shù)學成績:n"); scanf("%d",&p->math); printf("請輸入計算機成績:n"); scanf("%d",&p->computer); (p->sum)=(p->chinese)+(p->computer)+(p->math)+(p->english);(p->ave)=(p->sum)/4;p->next=Null; r->next=p; r=r-
8、>next;/*/count +;/*/ void output(list *h) /輸出函數(shù) /*/if (h = NULL)printf("記錄為空!");/*/list *p; printf("學號t姓名t性別t語文成績t數(shù)學成績t英語成績t計算機成績t平均分t總成績tn"); p=h->next; while (p!=NULL) printf("%dnt%st%st%dt%dt%dt%dt%5.1ft%5.1fn",p->num,p->name,p->sex,p->chinese,p->
9、;math,p->english,p->computer,p->ave,p->sum);p=p->next;輸出函數(shù)void sortsum(list *head) /總成績排序/ struct node temp;/ const int n=20;/ int i,j,k;/ printf("按照總成績排序:t");/ for(i=0;i<n;i+)/ / k=i;/ for(j=i+1;j<n;j+)/ if(listj.sum<listk.sum)/ k=j;/ temp=listk;listk=listi;listi=t
10、emp;/ output(p);/ int i=count, j, k;printf("按照總成績排序:n");if (count=0 | count=1)return;list *p, *temp;while(i > 0)p=head;for(j=0; j<i-1; j+)if(p->next->sum > p->next->next->sum) temp = p->next ;p->next = p->next->next;temp->next = p->next->next;p-
11、>next->next = temp;p = p->next; i-; /*/利用了冒泡排序的方法把成績排序:void sortnum(list *head)int i=count, j, k;printf("按照學號排序:n");if (count=0 | count=1)return;list *p, *temp;while(i > 0)p=head;for(j=0; j<i-1; j+)if(p->next->num > p->next->next->num) temp = p->next ;p-
12、>next = p->next->next;temp->next = p->next->next;p->next->next = temp;p = p->next; i-; /*/*利用了冒泡排序的方法把學號排序:int sortnum(node *list) /學號排序struct node temp;const int n=20;int i,j,k;printf("按照總成績排序:t");for(i=0;i<n;i+)k=i;for(j=i+1;j<n;j+)if(listj.num<listk.n
13、um)k=j;temp=listk;listk=listi;listi=temp;return 0;*/void find (list *h) /查找函數(shù) int k; / 要找的學生學號 list *p; p=h->next; printf("請輸入要查找的學生學號:n"); scanf("%d",&k); while (p && p->num!=k) p=p->next; if(p) printf("學號t姓名t性別t語文成績t數(shù)學成績t英語成績t計算機成績t平均成績t總成績n"); pr
14、intf("%dt%st%st%dt%dt%dt%d%5.1ft%5.1fn",p->num,p->name,p->sex,p->chinese,p->math,p->english,p->computer,p->ave,p->sum); else printf("目標沒找到n");利用遍歷按要求查找相應的學生:list *del (list *h) /刪除函數(shù) int k; / 要刪除的學生學號 list *p,*q; q=h; p=h->next; printf("請輸入待刪除的學
15、生學號:n"); scanf("%d",&k); while (p && p->num!=k) q=p; p=p->next; if(p) q->next=p->next; free(p); count -; else printf("沒有此學生的記錄,無法刪除!n"); return (h);list *insert(list *h) /插入函數(shù) list *p,*q,*r,*head; head=h; r=h; p=h->next; / 下面構造一個學生的信息 q=(list *)mal
16、loc(sizeof(list); printf("請輸入待插入學生的學號:n"); scanf("%d",&q->num); printf("請輸入待插入學生性別:n"); scanf("%s",&q->sex);printf("請輸入待插入學生的姓名:n"); scanf("%s",&q->name); printf("請輸入待插入的語文成績:n"); scanf("%d",&q-&
17、gt;chinese); printf("請輸入待插入的英語成績:n"); scanf("%d",&q->english); printf("請輸入待插入的數(shù)學成績:n"); scanf("%d",&q->math); printf("請輸入待插入的計算機成績:n"); scanf("%d",&q->computer); (q->sum)=(q->chinese)+(q->computer)+(q->math)
18、+(q->english);(q->ave)=(q->sum)/4;q->next=Null; / 找到鏈表的結尾結點 count -;while(p!=Null) r=p; p=p->next; / 將新結點插入表尾r->next=q; r=r->next; return (head);void main() /主函數(shù) list *p; /*/p=(list *)malloc(sizeof(list);p->next=Null;/*/int k; / 控制循環(huán)的標志 while (1) printf(" -n"); prin
19、tf(" | 學生成績管理系統(tǒng) |n"); printf(" -n"); printf(" | 1. 登記成績 |n"); printf(" | 2. 查詢成績 |n"); printf(" | 3. 插入成績 |n"); printf(" | 4. 刪除成績 |n"); printf(" | 5. 按學號排序 |n");printf(" | 6. 按總成績排序 |n");printf(" | 7. 輸出所有學生成績 |n&q
20、uot;); printf(" | 8. 退出系統(tǒng) |n"); printf(" -n"); printf("請輸入你的選擇n"); scanf("%d",&k); switch(k) case 1:/ p=input();/*/input(p);/*/break; case 2:find(p);break; case 3:p=insert(p);break; case 4:p=del(p);break; case 5:sortnum(p);output(p);break; case 6:sortsum(p
21、); output(p);break; case 7:output(p);break; case 8:exit(0); default:printf("選擇錯誤,重新開始n"); 4調試分析 (1) :調試過程中在選擇功能也就是簡易界面出遇到了問題后才去switch case的方法也決問題,在設計函數(shù)時第一次只進行了成績排序,這樣使得程序不夠完整沒有滿足要求,之后加上了學號排序這樣方便了查找,也方便了閱讀。(2) 本次試驗還要求利用文件的方式進行 操作,后經過百度才找到方法,找到了文件操作。(3) 題目中沒有什么復雜的算法,唯一一個就是利用了冒泡排序,對學生成績和學生學號進
22、行了排序,這次實驗主要是通過各種小函數(shù)來進行,其中遍歷操作用的次數(shù)最多。(4) 由于本課題中的許多知識點都沒有學過都要靠自己到課外的資料中去查找。在用的時候難免出現(xiàn)這樣那樣的錯誤。如開始設計出來的菜單不是預想的那樣,而是總個窗中出現(xiàn)混亂。解決的這個問題的辦法是調整。一個系統(tǒng)的菜單和提示信息非常重要。如果沒有這些用戶根本不知道怎么用你設計的這個系統(tǒng)。在設計的調試過程中也無法順利的完成調試工作。有了一個清晰簡單的菜單和一些提示信息這后,調試過程完成的非常順利。 回顧起此次課程設計,我感慨頗多,的確,從拿到題目到完成整個編程,從理論到實踐,可以學到很多很多的東西,同時不僅可以鞏固了以前所學
23、過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我們懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,比如說結構體通過這次課程設計之后,一定把以前所學過的知識熟悉了,本次課程設計結束了,我們通過這次實踐學到了許多知識。學到了設計一個簡單的系統(tǒng)。要注意哪些方面。也使我們知道自己哪些方面做得還不
24、夠。這不僅是程序設計,更是鍛煉我們處理問題的能力,同時也使我們了解到團隊合作的可貴.編寫程序是件細心活,稍不留神就會出錯,這就必須要求我們對待事情要認真!在編寫程序的過程中。錯誤不斷出現(xiàn),不同的類型(如少寫了一個符號,寫錯了字母,用錯了函數(shù)等等)層出不窮,這考驗我們待事細心,耐心,能不能堅持到底,不能半途而廢。 但我們總結出了一點點的經驗如下: 1、 要對系統(tǒng)的功能和要求做出詳細的分析,并合理分解任務。2、 把分解出來的子任務,做給一個相對獨立的模塊。 3、 在設計一個模塊之前,要簡單構想一下總界面的顯視情況。 4、針對構想出來的界面進行程序的編寫。5.測試結果:上面是一個簡易的界面有8中功能:選則功能1,可以登錄學生的成績,可以輸入多個人但是必須一個一個輸入。選擇功能2可以查看學生的成績前提是有1操作登錄的出成績才可以。功能3插入一個學生的的成績方式同1操作相同,注意相同的學號會直接覆蓋操作4刪除學生的成績這是會有兩種情況(1) :輸入的學好號里存在學生,這是會直接刪除該學生。(2) :輸入的學號不存在學生,這是會顯示不存在該學生。操作5按學號排序:利用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 磁電納米結構-洞察及研究
- 沉積物地球化學分析-洞察及研究
- 2025年江蘇省蘇州市昆山、太倉市八年級英語第二學期期末檢測試題含答案
- 畢業(yè)季主題講課件
- 2025年藥學年度工作試題
- 教育機構代理招生委托管理合同
- 廣播電視產業(yè)發(fā)展趨勢預測
- 護理禮儀與人際溝通課件
- 餐飲業(yè)股權轉讓及后續(xù)經營支持服務合同
- 車輛貨運承包與區(qū)域配送服務協(xié)議
- 北京市2025學年高二(上)第一次普通高中學業(yè)水平合格性考試物理試題(原卷版)
- 2025年中國融通農業(yè)發(fā)展有限集團有限公司招聘筆試沖刺題(帶答案解析)
- 教學設計 完整版:Summer holiday plans
- 2022年武漢市法院書記員招聘考試題庫及答案解析
- 湖南省邵陽市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細及行政區(qū)劃代碼
- 齊齊哈爾大學教師教育實踐中心申報材料匯總
- 中考物理總復習課教案(第一輪)
- 工廠開工試車方案
- 變電站土石方工程施工方案(42頁)
- 英語專業(yè)四級寫作評分標準
- 汽油柴油一書一簽
評論
0/150
提交評論