




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上學年論文(數據結構 2015-2016 第一學期)題目: 數據結構課程設計 作者: 陳炳宏 所在學院: 信息科學與工程學院 專業年級: 信息安全14-1 指導教師: 劉淑嫻 職稱: 副教授 2016年 1 月 4 日專心-專注-專業一學生成績管理系統1.1需求分析1.1.1程序分析: 本程序是一個基于線性表結構編寫的學生成績管理系統,學生可以進行包括學生信息建立、在不同位置插入學生信息、查詢指定學生信息、刪除指定學生信息和輸出顯示所有學生信息這五項功能,功能操作簡單,效率高,可延展性強。為保證信息的真實性,學生信息中學號長度num<=11,姓名長度name<
2、;=8,性別gender<=3,成績仍意輸入,并且學號和成績只能為數字,否則程序出錯。1.1.2執行方式: 本程序以用戶和計算機的對話方式執行,即在計算機終端上顯示7個共能選擇的“提示信息”之后,由用戶在鍵盤上輸入本程序中規定的功能指令;相應的輸人數據(并能濾去輸入中的非法字符)和顯示信息來處理結果。1.1.3 程序執行的命令包括: (1) 學生信息鏈表的建立; 建立后仍意建繼續輸入,n和N退出; (2) 插入學生信息; 輸入插入的位置; (3) 查詢學生信息; 選擇兩種方式之一查找并查詢; (4) 刪除學生信息; 選擇兩種方式之一查找并刪除; (5) 修改學生信息; 選擇兩種方式之一查
3、找并修改; (6) 輸出所有學生信息; (7) 退出管理系統。1.1.4測試數據: (1) 建立三個學生信息: 學號(11) 姓名(8) 性別 成績 ,cc,n,89 ,sxz,w,99 ,sad,n,88 (2) 插入一個學生信息: 學號(11) 姓名(8) 性別 成績 2016,scs,n,79 輸入插入位置: 2 (3) 查詢學生信息: 按1選擇學號查詢, 輸入學號: 按2選擇姓名查詢, 輸入姓名:scz (4) 刪除學生信息: 按2選擇姓名刪除, 輸入姓名:cc (5) 修改學生信息: 按1選擇學號修改, 輸入學號: 輸入修改后的數據: 學號(11) 姓名(8) 性別 成績 ,scz,
4、w,691.2概要設計 為實現上述程序功能,首先需要創建一個建立信息鏈表的函數,用于建立線性鏈表并對每個結點進行順序的信息存儲,然后創建其他五個函數,來依次實現插入、刪除、查詢、修改、輸出信息。其中插入信息需要利用循環使得指針循環指向指定結點,而刪除、查詢和修改均需要利用循環判斷來找到指定數據。1.2.1 線性表的抽象數據類型定義為: typedef struct 數據對象:char num,name,genger,score; 數據關系:一對一的線性關系DataType; 基本操作:建立一對一的信息組1.2.2 結點的抽象數據類型定義為: typedef struct node 數據對象:D
5、ataType data; struct node *next; 數據關系: *nextdata;ListNode; 基本操作: ListNode *findList(LinkList head); 初始條件:鏈表指針類型的建立 操作結果:查詢函數為指針類型 void changeNode(LinkList head); 初始條件:查詢函數調度成功,選擇處有數據 操作結果:新數據覆蓋原數據來修改 void delNode(LinkList head); 初始條件:查詢函數調度成功,選擇處有數據 操作結果:選中數據被釋放 void printList(LinkList head); 初始條件:線
6、性表存在且其余操作完成 操作結果:輸出顯示最終數據1.2.3指針的抽象數據類型定義為: typedef 數據對象:ListNode *LinkList; LinkList head; 數據關系:LinkList初始為head 基本操作: LinkList createList(void) 初始條件:建立一對一的信息組 操作結果:建立信息鏈表函數1.2.4本程序包含8個模塊: (1)主程序模塊: BEGINmain 初始化; SWITCH 接受命令; 處理命令; UNTIL 數據處理結束;END. (通過返回的菜單選擇函數值進行功能選擇并調用實現功能;) (2)菜單選擇單純的選擇功能序號并返回給
7、主函數; (3)鏈表建立函數實現順序鏈表的建立并輸入相應的數據進行結點的存 儲; (4) 插入信息函數通過找到指定節點并進行結點插入的函數; (5) 查詢信息函數通過循環對輸入的學號和姓名和已經存在數據一個一個往后對比來查找全部函數; (6) 刪除信息函數通過查詢函數的基本原理,找到指定函數后,釋放指定結點; (7) 修改信息函數通過查詢函數的基本原理,找到指定函數后,修改并覆蓋原結點; (8) 輸出所有信息函數利用循環依次輸出結點直到結點為空為止。各模塊之間的調用關系如圖1:主程序 菜單 輸出修改信息函數刪除信息函數查詢信息函數插入信息函數鏈表建立函數 圖1 模塊調用關系圖1.3詳細設計1.
8、3.1 元素類型、結點類型和指針類型TYPEDEF DataTypechar,int;元素類型 LinkListhead;指針類型 ListNodenode;結點類型 data:DataType; next:*node; END; ViSitProcPROCEDURE(p:LinkType); 訪問結點的過程類型1.3.2 函數說明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 功能函數 (1)建立鏈表函數 LinkList createList(void)ListNode *p,*rear; /結點指針char flag; /判斷是否繼續輸入的標志head=(ListNode *)malloc(sizeof(ListNode);/頭節點指針開辟內存rear=head; /開始頭與尾相同while(flag!='n'&&flag!='N') p=(
10、ListNode *)malloc(sizeof(ListNode); /結點指針開辟空間printf("n學號(11) 姓名(8) 性別 成績n"); scanf("%s%s%s%d",p->data.num,p->,p->data.gender,&p->data.score); rear->next = p;/讓尾結點指向當前結點的下一結點,并且該節點賦值為p結點rear = rear->next; /尾結點指針指向下一結點printf("按n或N退出,按其他鍵繼續輸入n&quo
11、t;); getchar();/對標志賦值判斷是否繼續scanf("%c",&flag); rear->next=NULL;/讓尾結點的下一結點為空來結束鏈表return head;/返回頭指針(2)插入信息函數int insertNode(LinkList head,ListNode *p,int i) ListNode *p1; int j=1;p1=head;if(p1->next=NULL)/判斷如果為空表,則插入作為第一個結點*/ if(i=0) p1->next=p;/讓頭節點的指向下一節點,且該結點為p結點p->next=NUL
12、L; /p結點的下一結點為空來結束鏈表else return -1; /如果在空表情況下輸入大于0位置,則返回-1。 while(j<=i-1)&&(p1!=NULL)/找到第i-1個結點,p1指向該結點/ p1=p1->next; j+; if(p1=NULL)/如果仍然沒有合適的插入點,則返回-1/ return -1;p->next=p1->next; /有就讓p結點的下一位置指向當前結點的下一結點p1->next=p;/并重新讓當前結點指向的下一節點變為p結點return 0;(3) 查詢信息函數ListNode *findList(Lin
13、kList head)ListNode *p;char num12; char name9; int xz; printf("=n");printf("1、按學號查詢n"); printf("2、按姓名查詢n");printf("=n"); printf(" 請選擇: ");p=head->next;/p為頭節點的下一節點scanf("%d",&xz); if (xz=1) printf("請輸入要查找學生的學號:"); scanf(&quo
14、t;%s",num);while(p && strcmp(p->data.num,num)!=0) /循環匹配輸入信息是否與當前結點一致,若不一致就轉入下一結點進行匹配p=p->next; else if (xz=2) printf("請輸入要查找學生的姓名:");TYPEDEF DataTypechar,int;元素類型 LinkListhead;指針類型 ListNodenode;結點類型 data:DataType; next:*node; END; ViSitProcPROCEDURE(p:LinkType); 訪問結點的過程類
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; /結點指針char flag; /判斷是否繼續輸入的標志head=(ListN
16、ode *)malloc(sizeof(ListNode);/頭節點指針開辟內存rear=head; /開始頭與尾相同while(flag!='n'&&flag!='N') p=(ListNode *)malloc(sizeof(ListNode); /結點指針開辟空間printf("n學號(11) 姓名(8) 性別 成績n"); scanf("%s%s%s%d",p->data.num,p->,p->data.gender,&p->data.score);
17、 rear->next = p;/讓尾結點指向當前結點的下一結點,并且該節點賦值為p結點rear = rear->next; /尾結點指針指向下一結點printf("按n或N退出,按其他鍵繼續輸入n"); getchar();/對標志賦值判斷是否繼續scanf("%c",&flag); rear->next=NULL;/讓尾結點的下一結點為空來結束鏈表return head;/返回頭指針int insertNode(LinkList head,ListNode *p,int i) ListNode *p1; int j=1;p1
18、=head;if(p1->next=NULL)/判斷如果為空表,則插入作為第一個結點*/ if(i=0) p1->next=p;/讓頭節點的指向下一節點,且該結點為p結點p->next=NULL; /p結點的下一結點為空來結束鏈表else return -1; /如果在空表情況下輸入大于0位置,則返回-1。 while(j<=i-1)&&(p1!=NULL)/找到第i-1個結點,p1指向該結點/ p1=p1->next; j+; if(p1=NULL)/如果仍然沒有合適的插入點,則返回-1/ return -1;p->next=p1->
19、next; /有就讓p結點的下一位置指向當前結點的下一結點p1->next=p;/并重新讓當前結點指向的下一節點變為p結點return 0;ListNode *findList(LinkList head)ListNode *p;char num12; char name9; int xz; printf("=n");printf("1、按學號查詢n"); printf("2、按姓名查詢n");printf("=n"); printf(" 請選擇: ");p=head->next;/
20、p為頭節點的下一節點scanf("%d",&xz); if (xz=1) printf("請輸入要查找學生的學號:"); scanf("%s",num);while(p && strcmp(p->data.num,num)!=0) /循環匹配輸入信息是否與當前結點一致,若不一致就轉入下一結點進行匹配p=p->next; else if (xz=2) printf("請輸入要查找學生的姓名:");scanf("%s",name);while (p &&a
21、mp; strcmp(p->,name)!=0) /同上匹配姓名p=p->next; return p;(4)刪除信息函數void delNode(LinkList head)ListNode *p,*q; printf("請先查找您要刪除的學生信息:n");p=findList(head);/調用查找函數找到要查找的函數if(p=NULL)/查找為空的情況 printf("沒有查到要刪除的學生信息"); return; q=head; while(q!=NULL && q->next!=p) q=q-
22、>next; /讓q指向到要刪除的結點位置q->next=p->next; /讓q的下一結點直接指向到刪除結點的下一結點位置free(p); /釋放p結點內容printf("該學生信息已被刪除!n");(5)修改信息函數void changeNode(LinkList head)ListNode *p;printf("請先查找您要修改的學生信息:n");p=findList(head);if(p=NULL) printf("沒有查到要修改的學生信息"); elseprintf("n請輸入修改后的數據n&qu
23、ot;);printf("n學號(11) 姓名(8) 性別 成績n");printf("-n");scanf("%s%s%s%d",p->data.num,p->,p->data.gender,&p->data.score);printf("修改成功!"); /找到要修改的結點地址后,對其中的內容進行重新輸入來修改printf("-n"); (6) 主程序和菜單程序主程序: void main() ListNode *p;int i;while(
24、1)/無限循環保證功能持續進行,一直到人為選擇結束switch(menu_select()/通過菜單函數返回的值來進行功能選擇case 1:printf("*n");printf(" 學生信息鏈表的建立 n");printf("*n");head = createList();break;case 2:printf("*n");printf("添加學生信息n");printf("*n");printf("n學號(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、("結點已經插入n");break;case 3:printf("*n");printf("查詢學生信息n");printf("*n");p=findList(head);if(p!=NULL)printf("n查詢的學生信息如下n");printf("n學號(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("沒查到要查詢的學生信息!");break;case 4:printf("*n");printf("刪除學生信息n");printf("*n");delNode(head);break;case 5:printf("*n");printf("修改學生信息n");printf("*n");changeNode(head);b
28、reak;case 6:printf("*n");printf("輸出所有學生信息n");printf("*n");printList(head);break;case 0:printf("再見!n作者:CBHn");getchar();return;菜單程序:int menu_select()int sn; printf("n 學生信息管理系統n"); printf("=n"); printf(" 1.學生信息鏈表的建立n"); printf("
29、; 2.插 入 學 生 信 息n"); printf(" 3.查 詢 學 生 信 息n");printf(" 4.刪 除 學 生 信 息n"); printf(" 5.修 改 學 生 信 息n"); printf(" 6.輸 出 所有學生信息n");printf(" 0.退 出 管 理 系 統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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 消費者對太陽能供熱品牌品牌力的感知與行為決策路徑分析-洞察闡釋
- 2025年交通運輸安全管理工作計劃范文
- 跨平臺辦公的去中心化協作模型-洞察闡釋
- 五年級語文文化活動組織計劃
- 智能樂器教學驅動樂器市場增長-洞察闡釋
- 部編版六下語文跨學科融合教學計劃
- 餐廳服務員崗位責任制與績效評估合同
- 水產養殖廢棄物資源化利用堰塘承包合同
- 新產業革命驅動下的國際貿易模式創新-洞察闡釋
- 采礦權抵押融資合同范本解析
- 建設工程法規考試題真題及答案
- 2025-2030年中國磷酸行業市場現狀供需分析及投資評估規劃分析研究報告
- 深圳市住房公積金管理中心員額人員招聘真題2024
- 2025年全國國家版圖知識競賽題庫及答案
- 《創傷失血性休克中國急診專家共識(2023)》解讀課件
- MOOC 數字邏輯電路實驗-東南大學 中國大學慕課答案
- 國家開放大學《人文英語4》邊學邊練參考答案
- 入團志愿書(2016版本)(可編輯打印標準A4) (1)
- 小升初個人簡歷表
- 福建省事業單位工作人員登記表
- 烏拉素煤礦聯合試運轉報告
評論
0/150
提交評論