




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上學(xué)年論文(數(shù)據(jù)結(jié)構(gòu) 2015-2016 第一學(xué)期)題目: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 作者: 陳炳宏 所在學(xué)院: 信息科學(xué)與工程學(xué)院 專業(yè)年級: 信息安全14-1 指導(dǎo)教師: 劉淑嫻 職稱: 副教授 2016年 1 月 4 日專心-專注-專業(yè)一學(xué)生成績管理系統(tǒng)1.1需求分析1.1.1程序分析: 本程序是一個基于線性表結(jié)構(gòu)編寫的學(xué)生成績管理系統(tǒng),學(xué)生可以進行包括學(xué)生信息建立、在不同位置插入學(xué)生信息、查詢指定學(xué)生信息、刪除指定學(xué)生信息和輸出顯示所有學(xué)生信息這五項功能,功能操作簡單,效率高,可延展性強。為保證信息的真實性,學(xué)生信息中學(xué)號長度num<=11,姓名長度name<
2、;=8,性別gender<=3,成績?nèi)砸廨斎?,并且學(xué)號和成績只能為數(shù)字,否則程序出錯。1.1.2執(zhí)行方式: 本程序以用戶和計算機的對話方式執(zhí)行,即在計算機終端上顯示7個共能選擇的“提示信息”之后,由用戶在鍵盤上輸入本程序中規(guī)定的功能指令;相應(yīng)的輸人數(shù)據(jù)(并能濾去輸入中的非法字符)和顯示信息來處理結(jié)果。1.1.3 程序執(zhí)行的命令包括: (1) 學(xué)生信息鏈表的建立; 建立后仍意建繼續(xù)輸入,n和N退出; (2) 插入學(xué)生信息; 輸入插入的位置; (3) 查詢學(xué)生信息; 選擇兩種方式之一查找并查詢; (4) 刪除學(xué)生信息; 選擇兩種方式之一查找并刪除; (5) 修改學(xué)生信息; 選擇兩種方式之一查
3、找并修改; (6) 輸出所有學(xué)生信息; (7) 退出管理系統(tǒng)。1.1.4測試數(shù)據(jù): (1) 建立三個學(xué)生信息: 學(xué)號(11) 姓名(8) 性別 成績 ,cc,n,89 ,sxz,w,99 ,sad,n,88 (2) 插入一個學(xué)生信息: 學(xué)號(11) 姓名(8) 性別 成績 2016,scs,n,79 輸入插入位置: 2 (3) 查詢學(xué)生信息: 按1選擇學(xué)號查詢, 輸入學(xué)號: 按2選擇姓名查詢, 輸入姓名:scz (4) 刪除學(xué)生信息: 按2選擇姓名刪除, 輸入姓名:cc (5) 修改學(xué)生信息: 按1選擇學(xué)號修改, 輸入學(xué)號: 輸入修改后的數(shù)據(jù): 學(xué)號(11) 姓名(8) 性別 成績 ,scz,
4、w,691.2概要設(shè)計 為實現(xiàn)上述程序功能,首先需要創(chuàng)建一個建立信息鏈表的函數(shù),用于建立線性鏈表并對每個結(jié)點進行順序的信息存儲,然后創(chuàng)建其他五個函數(shù),來依次實現(xiàn)插入、刪除、查詢、修改、輸出信息。其中插入信息需要利用循環(huán)使得指針循環(huán)指向指定結(jié)點,而刪除、查詢和修改均需要利用循環(huán)判斷來找到指定數(shù)據(jù)。1.2.1 線性表的抽象數(shù)據(jù)類型定義為: typedef struct 數(shù)據(jù)對象:char num,name,genger,score; 數(shù)據(jù)關(guān)系:一對一的線性關(guān)系DataType; 基本操作:建立一對一的信息組1.2.2 結(jié)點的抽象數(shù)據(jù)類型定義為: typedef struct node 數(shù)據(jù)對象:D
5、ataType data; struct node *next; 數(shù)據(jù)關(guān)系: *nextdata;ListNode; 基本操作: ListNode *findList(LinkList head); 初始條件:鏈表指針類型的建立 操作結(jié)果:查詢函數(shù)為指針類型 void changeNode(LinkList head); 初始條件:查詢函數(shù)調(diào)度成功,選擇處有數(shù)據(jù) 操作結(jié)果:新數(shù)據(jù)覆蓋原數(shù)據(jù)來修改 void delNode(LinkList head); 初始條件:查詢函數(shù)調(diào)度成功,選擇處有數(shù)據(jù) 操作結(jié)果:選中數(shù)據(jù)被釋放 void printList(LinkList head); 初始條件:線
6、性表存在且其余操作完成 操作結(jié)果:輸出顯示最終數(shù)據(jù)1.2.3指針的抽象數(shù)據(jù)類型定義為: typedef 數(shù)據(jù)對象:ListNode *LinkList; LinkList head; 數(shù)據(jù)關(guān)系:LinkList初始為head 基本操作: LinkList createList(void) 初始條件:建立一對一的信息組 操作結(jié)果:建立信息鏈表函數(shù)1.2.4本程序包含8個模塊: (1)主程序模塊: BEGINmain 初始化; SWITCH 接受命令; 處理命令; UNTIL 數(shù)據(jù)處理結(jié)束;END. (通過返回的菜單選擇函數(shù)值進行功能選擇并調(diào)用實現(xiàn)功能;) (2)菜單選擇單純的選擇功能序號并返回給
7、主函數(shù); (3)鏈表建立函數(shù)實現(xiàn)順序鏈表的建立并輸入相應(yīng)的數(shù)據(jù)進行結(jié)點的存 儲; (4) 插入信息函數(shù)通過找到指定節(jié)點并進行結(jié)點插入的函數(shù); (5) 查詢信息函數(shù)通過循環(huán)對輸入的學(xué)號和姓名和已經(jīng)存在數(shù)據(jù)一個一個往后對比來查找全部函數(shù); (6) 刪除信息函數(shù)通過查詢函數(shù)的基本原理,找到指定函數(shù)后,釋放指定結(jié)點; (7) 修改信息函數(shù)通過查詢函數(shù)的基本原理,找到指定函數(shù)后,修改并覆蓋原結(jié)點; (8) 輸出所有信息函數(shù)利用循環(huán)依次輸出結(jié)點直到結(jié)點為空為止。各模塊之間的調(diào)用關(guān)系如圖1:主程序 菜單 輸出修改信息函數(shù)刪除信息函數(shù)查詢信息函數(shù)插入信息函數(shù)鏈表建立函數(shù) 圖1 模塊調(diào)用關(guān)系圖1.3詳細設(shè)計1.
8、3.1 元素類型、結(jié)點類型和指針類型TYPEDEF DataTypechar,int;元素類型 LinkListhead;指針類型 ListNodenode;結(jié)點類型 data:DataType; next:*node; END; ViSitProcPROCEDURE(p:LinkType); 訪問結(jié)點的過程類型1.3.2 函數(shù)說明int menu_select();LinkList createList(void);void printList(LinkList head);int insertNode(LinkList head,ListNode *p,int i);ListNode *f
9、indList(LinkList head);void delNode(LinkList head);void changeNode(LinkList head);1.3.3 功能函數(shù) (1)建立鏈表函數(shù) LinkList createList(void)ListNode *p,*rear; /結(jié)點指針char flag; /判斷是否繼續(xù)輸入的標(biāo)志head=(ListNode *)malloc(sizeof(ListNode);/頭節(jié)點指針開辟內(nèi)存rear=head; /開始頭與尾相同while(flag!='n'&&flag!='N') p=(
10、ListNode *)malloc(sizeof(ListNode); /結(jié)點指針開辟空間printf("n學(xué)號(11) 姓名(8) 性別 成績n"); scanf("%s%s%s%d",p->data.num,p->,p->data.gender,&p->data.score); rear->next = p;/讓尾結(jié)點指向當(dāng)前結(jié)點的下一結(jié)點,并且該節(jié)點賦值為p結(jié)點rear = rear->next; /尾結(jié)點指針指向下一結(jié)點printf("按n或N退出,按其他鍵繼續(xù)輸入n&quo
11、t;); getchar();/對標(biāo)志賦值判斷是否繼續(xù)scanf("%c",&flag); rear->next=NULL;/讓尾結(jié)點的下一結(jié)點為空來結(jié)束鏈表return head;/返回頭指針(2)插入信息函數(shù)int insertNode(LinkList head,ListNode *p,int i) ListNode *p1; int j=1;p1=head;if(p1->next=NULL)/判斷如果為空表,則插入作為第一個結(jié)點*/ if(i=0) p1->next=p;/讓頭節(jié)點的指向下一節(jié)點,且該結(jié)點為p結(jié)點p->next=NUL
12、L; /p結(jié)點的下一結(jié)點為空來結(jié)束鏈表else return -1; /如果在空表情況下輸入大于0位置,則返回-1。 while(j<=i-1)&&(p1!=NULL)/找到第i-1個結(jié)點,p1指向該結(jié)點/ p1=p1->next; j+; if(p1=NULL)/如果仍然沒有合適的插入點,則返回-1/ return -1;p->next=p1->next; /有就讓p結(jié)點的下一位置指向當(dāng)前結(jié)點的下一結(jié)點p1->next=p;/并重新讓當(dāng)前結(jié)點指向的下一節(jié)點變?yōu)閜結(jié)點return 0;(3) 查詢信息函數(shù)ListNode *findList(Lin
13、kList head)ListNode *p;char num12; char name9; int xz; printf("=n");printf("1、按學(xué)號查詢n"); printf("2、按姓名查詢n");printf("=n"); printf(" 請選擇: ");p=head->next;/p為頭節(jié)點的下一節(jié)點scanf("%d",&xz); if (xz=1) printf("請輸入要查找學(xué)生的學(xué)號:"); scanf(&quo
14、t;%s",num);while(p && strcmp(p->data.num,num)!=0) /循環(huán)匹配輸入信息是否與當(dāng)前結(jié)點一致,若不一致就轉(zhuǎn)入下一結(jié)點進行匹配p=p->next; else if (xz=2) printf("請輸入要查找學(xué)生的姓名:");TYPEDEF DataTypechar,int;元素類型 LinkListhead;指針類型 ListNodenode;結(jié)點類型 data:DataType; next:*node; END; ViSitProcPROCEDURE(p:LinkType); 訪問結(jié)點的過程類
15、型int menu_select();LinkList createList(void);void printList(LinkList head);int insertNode(LinkList head,ListNode *p,int i);ListNode *findList(LinkList head);void delNode(LinkList head);void changeNode(LinkList head); LinkList createList(void)ListNode *p,*rear; /結(jié)點指針char flag; /判斷是否繼續(xù)輸入的標(biāo)志head=(ListN
16、ode *)malloc(sizeof(ListNode);/頭節(jié)點指針開辟內(nèi)存rear=head; /開始頭與尾相同while(flag!='n'&&flag!='N') p=(ListNode *)malloc(sizeof(ListNode); /結(jié)點指針開辟空間printf("n學(xué)號(11) 姓名(8) 性別 成績n"); scanf("%s%s%s%d",p->data.num,p->,p->data.gender,&p->data.score);
17、 rear->next = p;/讓尾結(jié)點指向當(dāng)前結(jié)點的下一結(jié)點,并且該節(jié)點賦值為p結(jié)點rear = rear->next; /尾結(jié)點指針指向下一結(jié)點printf("按n或N退出,按其他鍵繼續(xù)輸入n"); getchar();/對標(biāo)志賦值判斷是否繼續(xù)scanf("%c",&flag); rear->next=NULL;/讓尾結(jié)點的下一結(jié)點為空來結(jié)束鏈表return head;/返回頭指針int insertNode(LinkList head,ListNode *p,int i) ListNode *p1; int j=1;p1
18、=head;if(p1->next=NULL)/判斷如果為空表,則插入作為第一個結(jié)點*/ if(i=0) p1->next=p;/讓頭節(jié)點的指向下一節(jié)點,且該結(jié)點為p結(jié)點p->next=NULL; /p結(jié)點的下一結(jié)點為空來結(jié)束鏈表else return -1; /如果在空表情況下輸入大于0位置,則返回-1。 while(j<=i-1)&&(p1!=NULL)/找到第i-1個結(jié)點,p1指向該結(jié)點/ p1=p1->next; j+; if(p1=NULL)/如果仍然沒有合適的插入點,則返回-1/ return -1;p->next=p1->
19、next; /有就讓p結(jié)點的下一位置指向當(dāng)前結(jié)點的下一結(jié)點p1->next=p;/并重新讓當(dāng)前結(jié)點指向的下一節(jié)點變?yōu)閜結(jié)點return 0;ListNode *findList(LinkList head)ListNode *p;char num12; char name9; int xz; printf("=n");printf("1、按學(xué)號查詢n"); printf("2、按姓名查詢n");printf("=n"); printf(" 請選擇: ");p=head->next;/
20、p為頭節(jié)點的下一節(jié)點scanf("%d",&xz); if (xz=1) printf("請輸入要查找學(xué)生的學(xué)號:"); scanf("%s",num);while(p && strcmp(p->data.num,num)!=0) /循環(huán)匹配輸入信息是否與當(dāng)前結(jié)點一致,若不一致就轉(zhuǎn)入下一結(jié)點進行匹配p=p->next; else if (xz=2) printf("請輸入要查找學(xué)生的姓名:");scanf("%s",name);while (p &&a
21、mp; strcmp(p->,name)!=0) /同上匹配姓名p=p->next; return p;(4)刪除信息函數(shù)void delNode(LinkList head)ListNode *p,*q; printf("請先查找您要刪除的學(xué)生信息:n");p=findList(head);/調(diào)用查找函數(shù)找到要查找的函數(shù)if(p=NULL)/查找為空的情況 printf("沒有查到要刪除的學(xué)生信息"); return; q=head; while(q!=NULL && q->next!=p) q=q-
22、>next; /讓q指向到要刪除的結(jié)點位置q->next=p->next; /讓q的下一結(jié)點直接指向到刪除結(jié)點的下一結(jié)點位置free(p); /釋放p結(jié)點內(nèi)容printf("該學(xué)生信息已被刪除!n");(5)修改信息函數(shù)void changeNode(LinkList head)ListNode *p;printf("請先查找您要修改的學(xué)生信息:n");p=findList(head);if(p=NULL) printf("沒有查到要修改的學(xué)生信息"); elseprintf("n請輸入修改后的數(shù)據(jù)n&qu
23、ot;);printf("n學(xué)號(11) 姓名(8) 性別 成績n");printf("-n");scanf("%s%s%s%d",p->data.num,p->,p->data.gender,&p->data.score);printf("修改成功!"); /找到要修改的結(jié)點地址后,對其中的內(nèi)容進行重新輸入來修改printf("-n"); (6) 主程序和菜單程序主程序: void main() ListNode *p;int i;while(
24、1)/無限循環(huán)保證功能持續(xù)進行,一直到人為選擇結(jié)束switch(menu_select()/通過菜單函數(shù)返回的值來進行功能選擇case 1:printf("*n");printf(" 學(xué)生信息鏈表的建立 n");printf("*n");head = createList();break;case 2:printf("*n");printf("添加學(xué)生信息n");printf("*n");printf("n學(xué)號(11) 姓名(8) 性別 成績n");pri
25、ntf("*n");p=(ListNode *)malloc(sizeof(ListNode);scanf("%s%s%s%d",p->data.num,p->,p->data.gender,&p->data.score);printf("請輸入要插入的位置:n");fflush(stdin);scanf("%d",&i);if(insertNode(head,p,i)=-1)printf("沒有合適的插入點!n");elseprintf
26、("結(jié)點已經(jīng)插入n");break;case 3:printf("*n");printf("查詢學(xué)生信息n");printf("*n");p=findList(head);if(p!=NULL)printf("n查詢的學(xué)生信息如下n");printf("n學(xué)號(11) 姓名(8) 性別 成績n");printf("-n");printf("%s,%s,%s,%dn",p->data.num,p->,p-&g
27、t;data.gender,p->data.score); printf("-n"); elseprintf("沒查到要查詢的學(xué)生信息!");break;case 4:printf("*n");printf("刪除學(xué)生信息n");printf("*n");delNode(head);break;case 5:printf("*n");printf("修改學(xué)生信息n");printf("*n");changeNode(head);b
28、reak;case 6:printf("*n");printf("輸出所有學(xué)生信息n");printf("*n");printList(head);break;case 0:printf("再見!n作者:CBHn");getchar();return;菜單程序:int menu_select()int sn; printf("n 學(xué)生信息管理系統(tǒng)n"); printf("=n"); printf(" 1.學(xué)生信息鏈表的建立n"); printf("
29、; 2.插 入 學(xué) 生 信 息n"); printf(" 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"); scanf("%d",&sn);for(;sn<0 | sn>6;)/判斷是否選擇范圍在0到6,超出范圍重新選擇 printf("n輸入錯誤,重選0-6n"); scanf("%d",&sn);re
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 深入分析醫(yī)學(xué)基礎(chǔ)知識類考試如何有效復(fù)習(xí)試題及答案
- 2025-2030中國洗衣設(shè)備行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國沿?;瘜W(xué)油輪行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030中國瀝青膠泥行業(yè)市場運營模式及未來發(fā)展動向預(yù)測研究報告
- 從容應(yīng)對初級藥師考試的試題及答案
- 2025年醫(yī)學(xué)教育新挑戰(zhàn)試題及答案
- 稅務(wù)師考試復(fù)習(xí)策略分享與建議試題及答案
- 公共營養(yǎng)師考試在線學(xué)習(xí)試題及答案2025年
- 現(xiàn)金流量表分析的初級會計師試題及答案
- Starter Section 9 Our Day (教學(xué)設(shè)計)-2024-2025學(xué)年北師大版(2024)初中英語七年級上冊
- 城市商業(yè)綜合體運營管理方案
- 十八項醫(yī)療核心制度解讀課件
- 一年級數(shù)學(xué)口算題專項練習(xí)(800道)-100以內(nèi)加減法
- 2024年云南省紅河州中考二模考試道德與法治試題
- 19.1.1 變量與常量(教學(xué)設(shè)計)
- 剪叉式升降工作平臺作業(yè)專項施工方案24
- 山東省濟南市槐蔭區(qū)2023-2024學(xué)年八年級下學(xué)期期中考試數(shù)學(xué)試題(含答案)
- 《模擬導(dǎo)游》課件-2.10氣象景觀導(dǎo)游要領(lǐng)
- 2021-2022學(xué)年河北省唐山市路北區(qū)六年級下學(xué)期期中語文試卷
- (正式版)JBT 9638-2024 汽輪機用聯(lián)軸器等重要鍛件 技術(shù)規(guī)范
- 哺乳期安全用藥-您怎么把握(專業(yè)解讀PPT課件)
評論
0/150
提交評論