數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)學(xué)生管理系統(tǒng)鏈表_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)學(xué)生管理系統(tǒng)鏈表_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)學(xué)生管理系統(tǒng)鏈表_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)學(xué)生管理系統(tǒng)鏈表_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)學(xué)生管理系統(tǒng)鏈表_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計(jì)任務(wù)書、題目:學(xué)生信息管理系統(tǒng)、設(shè)計(jì)內(nèi)容及要求: 內(nèi)容:完成簡單的學(xué)生信息管理系統(tǒng)要求:(1) 學(xué)生信息包括:學(xué)號、姓名、平時(shí)成績、期末考試成績;(2) 用單鏈表存放學(xué)生信息;(3) 實(shí)現(xiàn)簡單的菜單調(diào)用;(4) 程序的功能包括:學(xué)生信息鏈表的建立;學(xué)生信息的插入;學(xué)生信息的查詢;學(xué)生信息的修改;學(xué)生信息的刪除;學(xué)生信息的輸出。編寫算法,編碼實(shí)現(xiàn)基本要求。3.設(shè)計(jì)時(shí)間:6 月27 日7 月1 號目 錄一、 需求分析- 3 二、 概要設(shè)計(jì)-4 三、 詳細(xì)設(shè)計(jì)-6 四、 調(diào)試分析- 14 五、 用戶使用說明- 14 六、 測試結(jié)果- 17 七、 附錄(略)- 17 一 需求分析分析課程設(shè)計(jì)任

2、務(wù)書,本次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的任務(wù)是利用數(shù)據(jù)結(jié)構(gòu)中所學(xué)的相關(guān)知識編程設(shè)計(jì)實(shí)現(xiàn)一個(gè)學(xué)生信息管理系統(tǒng),使該系統(tǒng)可以方便的查詢學(xué)生的各項(xiàng)信息和方便管理。根據(jù)任務(wù)書中的第五條要求,為來使用者方便使用。需給出輸入、插入、查詢、修改、顯示等功能。根據(jù)上面的需求分析,畫出程序的功能模塊圖大致如下:系統(tǒng)設(shè)計(jì)流程圖主頁面建立鏈表查詢顯示信息退出修改插入按學(xué)號按姓名改姓名改學(xué)號改平時(shí)成績改期末成績不修改 退出二、 概要設(shè)計(jì)根據(jù)上面所述的需求分析,結(jié)合我們學(xué)過的數(shù)據(jù)結(jié)構(gòu)知識,要想在計(jì)算機(jī)中儲存學(xué)生的信息,可以使用順序存儲和鏈?zhǔn)酱鎯煞N數(shù)據(jù)類型下面給出本程序用到抽象數(shù)據(jù)類型定義:adt list數(shù)據(jù)對象:d=ai|ai

3、elemset,i=1,2,,n,n0 數(shù)據(jù)關(guān)系:r1=|ai-1,aid,i=2,n基本操作p:initlist(&l);操作結(jié)果:構(gòu)造一個(gè)空的線性表l。destrolist(&l);初始條件:線性表l已存在。操作結(jié)果:銷毀線性表l。clearlist(l);初始條件:線性表l已存在。操作結(jié)果:將l重置為空。listempty(l);初始條件:線性表已存在。操作結(jié)果:若l為空表,則返回ture,否則返回false。listlength(l);初始條件:線性表l已存在。操作結(jié)果:返回l中數(shù)據(jù)元素的個(gè)數(shù)。getelem(l,i,&e);初始條件:線性表l已存在,1ilistlength(l)。操

4、作結(jié)果:用e返回中第i個(gè)數(shù)據(jù)元素的值。locateelem(l,e,compare());初始條件:線性表l已存在,compare()是數(shù)據(jù)元素判定函數(shù)。操作結(jié)果:返回中第1個(gè)與滿足關(guān)系的數(shù)據(jù)元素的位序。若這樣的數(shù)據(jù)元素不存在,則返回值為0。priorelem(l,cur_e,&pre_e)初始條件:線性表l已存在。操作結(jié)果:若cur_e是l的數(shù)據(jù)元素,且不是第一個(gè),則用pre_e返回它的前驅(qū),否則操作失敗,pre_e無定義。nextelem(l,cur_e,&next_e)初始條件:線性表l已存在。操作結(jié)果:若cur_e是l的數(shù)據(jù)元素,且不是最后一個(gè),則用next_e返回它的后繼,否則操作失

5、敗,next_e無定義。listinsert(&l,i,e)初始條件:線性表l已存在,1ilistlength(l)+1。操作結(jié)果:在l中第i個(gè)位置之前插入新的數(shù)據(jù)元素e,l的長度加1。listdelete(&l,i,&e)初始條件:線性表l已存在且非空,1ilistlength(l)。操作結(jié)果:刪除l的第i個(gè)數(shù)據(jù)元素,并用e返回其值,l的長度減1。listtraverse(l,visit())初始條件:線性表l已存在。操作結(jié)果:依次對l的每一個(gè)數(shù)據(jù)元素調(diào)用函數(shù)visit()。一旦visit()失敗,則操作失敗。adt list除了上述定義的一些基本操作外,為了實(shí)現(xiàn)任務(wù)書中的相應(yīng)功能,還要設(shè)計(jì)

6、如下一些函數(shù):void createlist(sequenlist*p1)void printlist(sequenlist *head)void insert(sequenlist *l,int i)sequenlist *findlist(sequenlist *l)void devise(sequenlist *l)void change(sequenlist *l)void delnode(sequenlist *l)函數(shù)調(diào)用程序:mainprintlistfindlistchangedelnodecreatelistdevise三、 詳細(xì)設(shè)計(jì)使用單向鏈表指針,能夠管理簡單的學(xué)生信息,

7、是一個(gè)設(shè)計(jì)較為人性化的操作系統(tǒng)。首先,建立學(xué)生的信息庫。然后根據(jù)提示,選擇“錄入學(xué)生信息的個(gè)數(shù),依次錄入”。若選擇繼續(xù)操作,則會出現(xiàn)菜單欄,可以選擇進(jìn)行學(xué)生信息的插入,查詢,修改,刪除,顯示等操作和系統(tǒng)的退出。否則,退出操作程序。根據(jù)上面的概要設(shè)計(jì),首先要寫出數(shù)據(jù)存儲結(jié)構(gòu)的類型定義。系統(tǒng)由頭文件名,一個(gè)結(jié)構(gòu)體,八個(gè)自定義函數(shù)和一個(gè)主函數(shù)構(gòu)成1系統(tǒng)的總體結(jié)構(gòu)定義如下:1)頭文件名:#include #include /包含字符串的比較函數(shù)strcmp#include#define len sizeof(struct student)2)結(jié)構(gòu)體:typedef struct student cha

8、r num8;/*學(xué)號*/ char name9;/*姓名*/ float g;/*平時(shí)成績*/ float s;/*期末成績*/ struct student *next;sequenlist;3)八個(gè)自定義函數(shù):int menu()/提供菜單選項(xiàng),供用戶選擇各個(gè)功能模塊void createlist(sequenlist*p1) /建立學(xué)生的信息庫void printlist(sequenlist *head) /顯示所有學(xué)生信息void insert(sequenlist *l,int i) /插入學(xué)生信息sequenlist *findlist(sequenlist *l) /查詢學(xué)生

9、信息void devise(sequenlist *l)/修改學(xué)生信息子函數(shù)void change(sequenlist *l)/修改學(xué)生信息void delnode(sequenlist *l) /刪除學(xué)生信息4)主函數(shù):void main()/將各函數(shù)組合成一個(gè)有機(jī)的整體,實(shí)現(xiàn)各個(gè)函數(shù)的調(diào)用sequenlist *p1,*p;int i; while(1) switch(menu_select() case 1: printf(*n); printf( 學(xué)生信息線性表的建立 n); printf(*n); p1=(sequenlist *)malloc(len); createlist(p

10、1); break case 2: printf(*n); printf(添加學(xué)生信息n); printf(*n); printf(請輸入要插入的位置:n); scanf(%d,&i); printf(i=%dn,i); printf(請輸入要插入學(xué)生的信息n); insert(p1,i); break; case 3: printf(*n); printf(查詢學(xué)生信息n); printf(*n); p=findlist(p1); if(p!=null) printf(您要查的學(xué)生為:n學(xué)號 姓名 平時(shí)成績 期末成績n); printf(-n); printf(%s,%s,%f,%fn,p-

11、num,p-name,p-g,p-s);printf(-n); else printf(沒有您要查詢的學(xué)生信息!); break;case 4: printf(*n); printf(修改學(xué)生信息n); printf(*n); change(p1); break; case 5: printf(*n); printf(刪除學(xué)生信息n); printf(*n); delnode(p1); break;case 6: printf(*n); printf(輸出所有學(xué)生信息n); printf(*n); printlist(p1); break;case 0:printf(退出!n);getchar

12、();return;2各功能模塊的設(shè)計(jì)1)結(jié)構(gòu)體模塊:struct student,存儲學(xué)生多方面的信息,是單向鏈表的建立和各個(gè)函數(shù)的運(yùn)行的基本元素2)菜單模塊:int menu_select ()函數(shù),用大量的字符拼圖組合,輸出形成一個(gè)美觀實(shí)用的菜單表格目錄,運(yùn)用case語句,提示用戶輸入的數(shù)字是否有誤,若錯(cuò)誤,則顯示“輸入錯(cuò)誤,請重選0 - 6”,再次輸入,最后把輸入數(shù)值返回給主函數(shù)。int menu_select()int sn;printf(n 學(xué)生信息管理系統(tǒng)n);printf(=n);printf( 1.學(xué)生信息線性表的建立n);printf( 2.插 入 學(xué) 生 信 息n);pr

13、intf( 3.查 詢 學(xué) 生 信 息n);printf( 4.修 改 學(xué) 生 信 息n);printf( 5.刪 除 學(xué) 生 信 息n);printf( 6.輸 出 所有學(xué)生信息n);printf( 0.退 出 管 理 系 統(tǒng)n);printf(=n);printf(請選擇0-6:n);for(;)scanf(%d,&sn);if (sn6) printf(nt輸入錯(cuò)誤,重選0-6n);else break;return sn;3)信息庫的建立模塊:void createlist(sequenlist*p1)函數(shù),運(yùn)用循環(huán)結(jié)構(gòu)和二級指針和一級指針之間的地址值和數(shù)據(jù)值的相互賦予,新的存儲空間的

14、開辟和釋放,協(xié)助完成了單鏈表的學(xué)生信息的存儲。void createlist(sequenlist*p1)/ 信息庫的建立int n,i,j=0;sequenlist *p2;printf(有幾位學(xué)生?請輸入:n);scanf(%d,&n);printf(以下請輸入這%d位學(xué)生的信息:n,n);for(i=1;inum,p2-name,&p2-g,&p2-s); p1-next=p2; p1=p2;p1-next=null;4)學(xué)生信息的插入模塊:void insert(sequenlist *l,int i)函數(shù),新建指針變量*s,將新的學(xué)生信息插入單向鏈表中,形成新的學(xué)生信息數(shù)據(jù)庫。voi

15、d insert(sequenlist *l,int i) sequenlist * p=l,*s;int j=1;while(p&jnext; +j;s=(sequenlist *)malloc(len);scanf(%s %s %f %f,s-num,s-name,&s-g,&s-s);s-next=p-next;p-next=s;5)學(xué)生信息的查詢模塊:sequenlist *findlist(sequenlist *l)函數(shù),用if等條件語句,實(shí)現(xiàn)“1.按學(xué)號查詢;2.按姓名查詢”兩種查詢方式,接著運(yùn)用while循環(huán),核對有無該生信息,既而顯示該生的所有信息或顯示“無該生信息!”等。s

16、equenlist *findlist(sequenlist *l) /學(xué)生信息的查詢sequenlist *p=l-next;char num8;char name9;int xz;printf(=n);printf(1、按學(xué)號查詢n);printf(2、按姓名查詢n);printf(=n);printf( 請選擇: );scanf(%d,&xz);if (xz=1) printf(請輸入要查找學(xué)生的學(xué)號:); scanf(%s,num); while(p!=null&strcmp(p-num,num)!=0)p=p-next; if(p=null)printf(沒有要找的學(xué)生n);retu

17、rn(null); else return(p); else if (xz=2) printf(請輸入要查找學(xué)生的姓名:); scanf(%s,name); while(p!=null&strcmp(p-name,name)!=0)p=p-next; if(p=null)printf(沒有要找的學(xué)生n); return(null); else return(p);6)學(xué)生信息的刪除模塊:void delnode(sequenlist *l)函數(shù),用了對學(xué)號查詢方式和核對有無該生信息,既而刪除該生的所有信息或者顯示“沒有要刪除的信息!”等。void delnode(sequenlist *l)c

18、har num8;sequenlist * p1,*p2,*head;printf(請輸入要刪除的結(jié)點(diǎn)numn);scanf(%s,num);p1=l-next;head=l-next;while(strcmp(p1-num,num)!=0&p1-next!=null)p2=p1;p1=p1-next;if(strcmp(p1-num,num)=0)if(p1=head)l-next=p1-next;else p2-next=p1-next;free(p1);printf(信息已刪除n);else printf(沒有要刪除的信息!n);7)學(xué)生信息的修改模塊:void change(seque

19、nlist *l) 函數(shù),用學(xué)號對該學(xué)生是否存在進(jìn)行查找,如存在進(jìn)入子函數(shù)void devise(sequenlist *l),運(yùn)用switch(choice) case選擇要修改的項(xiàng),如學(xué)號、姓名、平時(shí)成績、期末成績等,如不需修改,則選擇0退出修改子函數(shù)。如沒找到學(xué)生,則輸出“無學(xué)生記錄!”void devise(sequenlist *l) sequenlist *head,*p;head=l-next; int choice; choice = -1; do printf(請選擇您要修改的學(xué)生的信息內(nèi)容:n); printf(+-+n); printf(| 姓名 請按 1 |n); pr

20、intf(| 學(xué)號 請按 2 |n); printf(| 平時(shí)成績 請按 3 |n); printf(| 期末成績 請按 4 |n); printf(| 取消 請按 0 |n); printf(+-+n); printf(請輸入您的選擇:); scanf(%d, &choice); switch(choice) case 0: return; case 1: printf(請輸入新姓名:); scanf(%s, p-name); break; case 2: printf(請輸入新學(xué)號:); scanf(%s, p-num); break; case 3: printf(請輸入新平時(shí)成績:);

21、 scanf(%f, &p-g); break; case 4: printf(請輸入新期末成績 :); scanf(%f,&p-s); break; default: printf(n無效選項(xiàng)!); break; printf(修改成功!n) ;while(choice != 0);void change(sequenlist *l) sequenlist *p;p = l-next; char num; if(p = null) printf(無學(xué)生記錄!n); return; printf(請輸入您要修改的學(xué)生的學(xué)號:); scanf(%s, &num); if(p-num)devise(p);return;

溫馨提示

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

最新文檔

評論

0/150

提交評論