




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、.數(shù)據(jù)結(jié)構(gòu)課程設(shè)計學(xué)院: 信息科學(xué)與工程學(xué)院 專業(yè)班級: 指導(dǎo)老師: 學(xué)號: 姓名: 目錄校園導(dǎo)游咨詢系統(tǒng)21.1.題目與要求21.2.設(shè)計與實現(xiàn)2基本思路2主要數(shù)據(jù)結(jié)構(gòu)3程序的算法和主要流程4程序?qū)崿F(xiàn)過程中的主要難點(diǎn)和解決方法51.3.實驗結(jié)果及分析6實驗的準(zhǔn)備6實驗結(jié)果及分析81.4總結(jié)9簡單的職工管理系統(tǒng)102.1.題目與要求102.2.設(shè)計與實現(xiàn)10基本思路10主要數(shù)據(jù)結(jié)構(gòu)11程序的算法和主要流程11程序?qū)崿F(xiàn)過程中的主要難點(diǎn)和解決方法132.3實驗結(jié)果及分析15實驗的準(zhǔn)備15實驗結(jié)果及分析162.4總結(jié)19附件:20校園導(dǎo)游咨詢系統(tǒng) 1.1.題目與要求1) 自己畫一張簡易的校園平面圖,
2、有三個校區(qū)和三所附屬醫(yī)院,在這些校區(qū)和醫(yī)院內(nèi)選10個以上的建筑物、辦公室、宿舍等地名。以圖中頂點(diǎn)表示校園內(nèi)各地名,存放地名名稱、代號、簡介等信息;以邊表示路徑,存放路徑長度等有關(guān)信息。2) 為來訪客人提供圖中任意地名相關(guān)信息的查詢。3) 為來訪客人提供任意地名的問路查詢,即查詢?nèi)我鈨蓚€地名之間的一條最短路徑。實現(xiàn)提示:一般情況下,校園的道路是雙向通行的,可設(shè)計校園平面圖是一個無向網(wǎng)。頂點(diǎn)和邊均含有相關(guān)信息。1.2.設(shè)計與實現(xiàn) 基本思路校園導(dǎo)游拓?fù)鋱D是由景點(diǎn)和景點(diǎn)之間的路徑組成的,所以這完全可以用數(shù)據(jù)結(jié)構(gòu)中的圖來模擬。用圖的結(jié)點(diǎn)代表景點(diǎn),用圖的邊代表景點(diǎn)之間的路徑。所以首先應(yīng)設(shè)計一個圖類。結(jié)點(diǎn)值
3、代表景點(diǎn)信息,邊的權(quán)值代表景點(diǎn)間的距離。結(jié)點(diǎn)值及邊的權(quán)值用順序表存儲,所以需要設(shè)計一個順序表類。本系統(tǒng)需要查詢景點(diǎn)信息和求一個景點(diǎn)到另一個景點(diǎn)的最短路徑長度及路線,為方便操作,所以給每個景點(diǎn)一個代碼,用結(jié)構(gòu)體類型實現(xiàn)。計算路徑長度和最短路線時可用弗洛伊德(Floyd)算法實現(xiàn)。最后用switch選擇語句選擇執(zhí)行瀏覽景點(diǎn)信息或查詢最短路徑。主要數(shù)據(jù)結(jié)構(gòu)鏈接矩陣,相關(guān)代碼typedef struct arc int adj; /路徑長度arc,adjmatrix4040; /建一個結(jié)構(gòu)體數(shù)組保存路徑長度typedef struct scenery /存儲景點(diǎn)信息int num;/景點(diǎn)編號char
4、name20;/景點(diǎn)名稱char introduction200;/景點(diǎn)介紹scenery;typedef struct graph scenery vexs40; /點(diǎn)adjmatrix arcs; /邊int vexnum,arcnum; /點(diǎn)與邊的個數(shù)graph;graph b;程序的算法和主要流程用弗洛伊德算法實現(xiàn)最短路徑:void floyd(graph *G) /求有向網(wǎng)G中各對頂點(diǎn)v和w之間的最短路徑pvw int v,u,i,w,k,j,flag=1, /及其帶權(quán)長度Dvw,若pvwu為TRUE p101010,D1010; /則u是從v到w當(dāng)前求得最短路徑上的點(diǎn) for(v=
5、0;v<G->vexnum;v+) for(w=0;w<G->vexnum;w+) Dvw=G->arcsvw.adj; /初始路徑賦值 for(u=0;u<G->vexnum;u+)pvwu=0; if(Dvw<9999) /從v到w有直接路徑 pvwv=1;pvww=1; for(u=0;u<G->vexnum;u+) for(v=0;v<G->vexnum;v+) for(w=0;w<G->vexnum;w+) if(Dvu+Duw<Dvw) Dvw=Dvu+Duw; for(i=0;i<G-
6、>vexnum;i+)pvwi=pvui|puwi; 主要流程: int main() b=initgraph(); /初始化 while(1) Menu(); /界面 int choice; /選擇功能 cin>>choice; switch(choice) case 1: 查看校園景點(diǎn) showall(&b); system("pause"); system("cls"); break; case 2: 查看景點(diǎn)信息 showselect(&b); system("pause"); system(
7、"cls"); break; case 3: 查找最短旅游路線 floyd(&b); system("pause"); system("cls"); break; case 4: 退出系統(tǒng) exit(1); break; default:cout<<"請在1-4中選擇操作!"<<endl;system("pause");system("cls");break; return 0;程序?qū)崿F(xiàn)過程中的主要難點(diǎn)和解決方法程序設(shè)計的主要難點(diǎn)就是在對結(jié)構(gòu)體
8、的設(shè)計和弗洛伊德算法的具體實現(xiàn)上,通過查詢數(shù)據(jù)結(jié)構(gòu)的書及相關(guān)算法書,我了解到弗洛伊德算法主要運(yùn)用了動態(tài)規(guī)劃的相關(guān)思想, 通過一個圖的權(quán)值矩陣求出它的每兩點(diǎn)間的最短路徑矩陣。從圖的帶權(quán)鄰接矩陣A=a(i,j) n×n開始,遞歸地進(jìn)行n次更新,即由矩陣D(0)=A,按一個公式,構(gòu)造出矩陣D(1);又用同樣地公式由D(1)構(gòu)造出D(2);最后又用同樣的公式由D(n-1)構(gòu)造出矩陣D(n)。矩陣D(n)的i行j列元素便是i號頂點(diǎn)到j(luò)號頂點(diǎn)的最短路徑長度,稱D(n)為圖的距離矩陣,同時還可引入一個后繼節(jié)點(diǎn)矩陣path來記錄兩點(diǎn)間的最短路徑。1.3.實驗結(jié)果及分析實驗的準(zhǔn)備圖1.3.1 校園結(jié)構(gòu)
9、拓?fù)鋱D首先我們序設(shè)計校園導(dǎo)游拓?fù)浣Y(jié)構(gòu)圖,將相關(guān)數(shù)據(jù)存入相應(yīng)數(shù)據(jù)結(jié)構(gòu)中,然后設(shè)計實現(xiàn)相關(guān)功能的方法。實驗數(shù)據(jù)如下:strcpy(G.,"升華公寓"); strcpy(G.roduction,"學(xué)生宿舍,位于中南大學(xué)南校區(qū)。"); strcpy(G.,"二食堂"); strcpy(G.roduction,"學(xué)生食堂,南校區(qū)最大的食堂,四層樓。"); strcpy(G.,"七食堂"); strcpy(G.v
10、roduction,"學(xué)生食堂,位于中南大學(xué)南校區(qū)。"); strcpy(G.,"八食堂"); strcpy(G.roduction,"學(xué)生食堂,位于中南大學(xué)南校區(qū)。"); strcpy(G.,"校醫(yī)院"); strcpy(G.roduction,"校內(nèi)醫(yī)院,位于中南大學(xué)南校區(qū)。"); strcpy(G.,"春之島"); strcpy(G.rodu
11、ction,"校園超市,產(chǎn)品種類齊全,位于中南大學(xué)南校區(qū)。"); strcpy(G.,"圖書館"); strcpy(G.roduction,"學(xué)生自習(xí)的好去處,位于中南大學(xué)新校區(qū)。"); strcpy(G.,"建藝院"); strcpy(G.roduction,"建藝院,位于中南大學(xué)新校區(qū)。"); strcpy(G.,"外語院"); strcpy(G.roduct
12、ion,"外語院,位于中南大學(xué)新校區(qū)。"); strcpy(G.,"教學(xué)樓"); strcpy(G.roduction,"學(xué)生上課場所,位于中南大學(xué)新校區(qū)。");for(i=0;i<G.vexnum;i+)for(j=0;j<G.vexnum;j+)G.arcsij.adj=9999; /初始化,9999為不存在路徑G.arcs01.adj=100;G.arcs03.adj=200;G.arcs12.adj=1100; G.arcs25.adj=1000;G.arcs45.adj=90
13、0;G.arcs34.adj=300;G.arcs47.adj=400;G.arcs67.adj=500;G.arcs69.adj=600;G.arcs78.adj=800;G.arcs89.adj=700;采用這種鏈接矩陣的結(jié)構(gòu)能夠使用floyd算法對后面的最短路徑這一功能進(jìn)行具體實現(xiàn)。實驗結(jié)果及分析將最短路徑計算結(jié)果與我們之前所設(shè)計的校園拓?fù)鋱D的最短路徑進(jìn)行比較,驗證了實驗結(jié)果的正確性。1.4總結(jié) 本實驗采用鏈接矩陣來進(jìn)行數(shù)據(jù)的存儲,將路徑的權(quán)值保存在矩陣中,通過弗洛伊德算法計算兩點(diǎn)之間的最短路徑。實驗代碼能夠?qū)崿F(xiàn)為來訪客人提供圖中任意地名相關(guān)信息的查詢。以及為來訪客人提供任意地名的問路查
14、詢,即查詢?nèi)我鈨蓚€地名之間的一條最短路徑。 實驗代碼并沒有實現(xiàn)對地圖的增刪等功能,如果要實現(xiàn)該功能,我們需要將鏈接矩陣改為鏈接表的形式進(jìn)行存儲。這個會在后面進(jìn)行進(jìn)一步的學(xué)習(xí)。在實驗過程中我進(jìn)一步了解了數(shù)據(jù)結(jié)構(gòu)中有關(guān)圖的存儲,并熟悉了c+的一些使用方法,感到本次實驗收益匪淺。簡單的職工管理系統(tǒng)2.1.題目與要求對單位的職工進(jìn)行管理,包括插入、刪除、查找、排序等功能。系統(tǒng)要求職工對象包括姓名、性別、出生年月、學(xué)歷、電話這幾種屬性。(1)新增一名職工:將新增職工對象按姓名以字典方式存儲。(2)刪除一名職工:從職工信息中刪除一名職工對象。(3)查詢:從職工信息中查詢符合某些條件的職工。(4)修改:檢索
15、某個職工對象,對其某些屬性進(jìn)行修改。(5)排序:按某種需要對職工信息進(jìn)行排序。實現(xiàn)提示(1)對職工對象中的"姓名"按字典順序進(jìn)行排序。(2)對排序后的職工對象進(jìn)行增、刪、查詢、修改、排序等操作。2.2.設(shè)計與實現(xiàn)基本思路該系統(tǒng)利用線性鏈表實現(xiàn),首先建一個結(jié)構(gòu)體類型,里面用來存放職工相關(guān)信息,用鏈表將所有數(shù)據(jù)關(guān)聯(lián)起來。從而實現(xiàn)對相應(yīng)對象的插入、刪除、查找、排序等功能。主要數(shù)據(jù)結(jié)構(gòu)鏈表:struct Employee /聲明職工的結(jié)構(gòu)作為鏈表節(jié)點(diǎn)。 int code; string name; string sex;int birth; string edu;int phone
16、;struct Employee* next; ;typedef struct Employee Node; /別名typedef Node* Link; /指針型別名程序的算法和主要流程冒泡排序算法:Link sort(Link Head) Link p,q; Node *temp; temp=new Node;temp->name="" temp->code=0; temp->birth=0; temp->sex="" temp->edu="" temp->phone=0; temp->n
17、ext=NULL;for(p=Head;p->next!=NULL;p=p->next)for(q=Head->next;q->next!=NULL;q=q->next)if(q->name>q->next->name)temp->name=q->name;q->name=q->next->name;q->next->name=temp->name; 主要流程:int main() Link Head=0; Head=Create(Head); /創(chuàng)建一個空頭節(jié)點(diǎn)int menu; while
18、(1) cout<<endl<<"請選擇相應(yīng)操作菜單項:" cin>>menu; switch(menu) case 0: 退出系統(tǒng)cout<<"成功退出系統(tǒng)!"<<endl; return 0; case 1: 增加員工信息Head=add(Head); break; case 2: 刪除員工信息 Head=del(Head); break; case 3: 員工信息查詢 search(Head); break; case 4: 員工信息修改modify(Head);break; case 5
19、: 信息總表display_list(Head);break; default: cout<<"請選擇正確的菜單項進(jìn)行操作。多謝合作!"<<endl; Release(Head); return 0; 程序?qū)崿F(xiàn)過程中的主要難點(diǎn)和解決方法由于采用的是線性鏈表,線性表中的數(shù)據(jù)元素之間的關(guān)系是一對一的關(guān)系,即除了第一個和最后一個數(shù)據(jù)元素外,其他元素都是首尾相連的。當(dāng)結(jié)點(diǎn)刪除時,需要找到所刪元素的前一個結(jié)點(diǎn),用p->next=p->next->next來實現(xiàn)對數(shù)據(jù)的刪除。我們新建兩個結(jié)點(diǎn)來完成對數(shù)據(jù)的刪除,使ptr_1始終在ptr_2的前面
20、。Link search(Link Head) /返回符合姓名條件的職工信息 Link ptr_1;Link ptr_2;string name;ptr_1=Head->next;ptr_2=Head;while(ptr_1)if(ptr_1->name=name) display_node(ptr_1); /打印滿足條件節(jié)點(diǎn) re(); return ptr_2; else ptr_1=ptr_1->next; /查詢下一節(jié)點(diǎn)ptr_2=ptr_2->next; Link del(Link Head) /刪除職工記錄Link ptr;Link ptr_2;ptr_2=
21、search(Head);ptr=ptr_2->next;cout<<ptr->phone;if(ptr) ptr_2->next=ptr->next;free(ptr);elsecout<<"沒找到此職工的記錄,無法刪除。"<<endl; return Head; 2.3實驗結(jié)果及分析實驗的準(zhǔn)備圖2.3.1 職工管理系統(tǒng)模塊圖首先將職工系統(tǒng)的實現(xiàn)框架圖列出,建立起相應(yīng)的數(shù)據(jù)結(jié)構(gòu),利用注冊職工這一模塊將職工信息輸入,進(jìn)而實現(xiàn)后續(xù)模塊功能。實驗結(jié)果及分析在修改界面還有一些不足,比如輸入數(shù)據(jù)過長會造成數(shù)據(jù)的溢出,進(jìn)而影
22、響輸出。2.4總結(jié)本次實驗實現(xiàn)了對單位的職工進(jìn)行管理,包括插入、刪除、查找、排序等功能。最大的收獲是熟悉了對鏈表的使用方式和vc 6.0的debug功能,在這個過程中我發(fā)現(xiàn)了調(diào)試對程序的重要性。在調(diào)試查詢修改功能過程中,查詢的總是不正確,查詢的結(jié)果顯示,沒有找到職工信息,最后發(fā)現(xiàn)查找的結(jié)點(diǎn)不正確,查詢應(yīng)該與輸入的值和頭結(jié)點(diǎn)next比較,而不是頭結(jié)點(diǎn)。還有就是查詢結(jié)點(diǎn)不知道如何循環(huán),最后又看看了記得筆記和書,才知道如何繼續(xù)查找而不出錯誤。 還有就是你新建一個鏈表要對它進(jìn)行初始化,若沒有初始化,系統(tǒng)不會為它分配空間,從而造成種種錯誤。排序時注意交換的先后順序就可以了,刪除時注意交換結(jié)點(diǎn)的順序。本次
23、課程設(shè)計是圍繞數(shù)據(jù)結(jié)構(gòu)進(jìn)行。根據(jù)問題描述可知,需要解決問題并不復(fù)雜,整個問題只需要實現(xiàn)一個職工管理系統(tǒng)功能,那就是在這個系統(tǒng)中實現(xiàn)對職工信息的插入、刪除、查詢、排序、修改以及保存。但是,為了實現(xiàn)該功能,卻需要優(yōu)秀的算法和數(shù)據(jù)結(jié)構(gòu)以保證實現(xiàn)的時間和空間效率。把職工信息存儲在一個單鏈表中,利用指針實現(xiàn)對職工信息的各項基本操作。 雖然設(shè)計的程序完成了題目描述所需要實現(xiàn)的功能,但是仍然存在不如人意的地方。那就是可以排序上面多設(shè)計幾個算法。實現(xiàn)多角度排序。在這個系統(tǒng)中沒有職工序號的信息,所以允許職工姓名相同,在很大程度上面,可能使得職工信息重復(fù)。 另外刪除時也只能一個個的刪,這些都是還需改進(jìn)的地方。經(jīng)過
24、這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,我們及時鞏固的了數(shù)據(jù)結(jié)構(gòu)、算法,另外還懂得了一個好的數(shù)據(jù)結(jié)構(gòu)的重要性。它能夠幫我們減少代碼量并使程序的性能更加優(yōu)良。附件:校園導(dǎo)游系統(tǒng)代碼#include<iostream>#include<string>#include<conio.h>using namespace std;typedef struct arc int adj; /路徑長度arc,adjmatrix4040; /建一個結(jié)構(gòu)體數(shù)組保存路徑長度typedef struct scenery /存儲景點(diǎn)信息int num;/景點(diǎn)編號char name20;/景點(diǎn)名稱char
25、 introduction200;/景點(diǎn)介紹scenery;typedef struct graph scenery vexs40; /點(diǎn)adjmatrix arcs; /邊int vexnum,arcnum; /點(diǎn)與邊的個數(shù)graph;graph b;graph initgraph(void) /初始化 graph G; int i,j; G.vexnum=10; G.arcnum=11; for(i=0;i<G.vexnum;i+)G.vexsi.num=i; /編號 strcpy(G.,"升華公寓"); strcpy(G.r
26、oduction,"學(xué)生宿舍,位于中南大學(xué)南校區(qū)。"); strcpy(G.,"二食堂"); strcpy(G.roduction,"學(xué)生食堂,南校區(qū)最大的食堂,四層樓。"); strcpy(G.,"七食堂"); strcpy(G.roduction,"學(xué)生食堂,位于中南大學(xué)南校區(qū)。"); strcpy(G.,"八食堂"); strcpy(G.roduction,
27、"學(xué)生食堂,位于中南大學(xué)南校區(qū)。"); strcpy(G.,"校醫(yī)院"); strcpy(G.roduction,"校內(nèi)醫(yī)院,位于中南大學(xué)南校區(qū)。"); strcpy(G.,"春之島"); strcpy(G.roduction,"校園超市,產(chǎn)品種類齊全,位于中南大學(xué)南校區(qū)。"); strcpy(G.,"圖書館"); strcpy(G.roduction,"
28、;學(xué)生自習(xí)的好去處,位于中南大學(xué)新校區(qū)。"); strcpy(G.,"建藝院"); strcpy(G.roduction,"建藝院,位于中南大學(xué)新校區(qū)。"); strcpy(G.,"外語院"); strcpy(G.roduction,"外語院,位于中南大學(xué)新校區(qū)。"); strcpy(G.,"教學(xué)樓"); strcpy(G.roduction,"學(xué)生上課場所,位于
29、中南大學(xué)新校區(qū)。");for(i=0;i<G.vexnum;i+)for(j=0;j<G.vexnum;j+)G.arcsij.adj=9999; /初始化,9999為不存在路徑G.arcs01.adj=100;G.arcs03.adj=200;G.arcs12.adj=1100; G.arcs25.adj=1000;G.arcs45.adj=900;G.arcs34.adj=300;G.arcs47.adj=400;G.arcs67.adj=500;G.arcs69.adj=600;G.arcs78.adj=800;G.arcs89.adj=700;for(i=0;i&
30、lt;G.vexnum;i+)for(j=0;j<G.vexnum;j+) G.arcsji.adj=G.arcsij.adj; /無向圖不分方向return G; void showall(graph* a) int i;for(i=0;i<10;i+)cout<<endl<<a->vexsi.num+1<<" "<<a-><<endl;void showselect(graph* a) /查詢特定景點(diǎn)信息 int i;cout<<"請輸入所要查詢
31、景點(diǎn)編號:"cin>>i;cout<<"景點(diǎn)信息:"<<endl;cout<<endl<<a-><<" "<<a->roduction<<endl;void floyd(graph *G) /求有向網(wǎng)G中各對頂點(diǎn)v和w之間的最短路徑pvw int v,u,i,w,k,j,flag=1, /及其帶權(quán)長度Dvw,若pvwu為TRUE p101010,D1010; /則u是從v到w當(dāng)前求得最短路徑上的點(diǎn) f
32、or(v=0;v<G->vexnum;v+) for(w=0;w<G->vexnum;w+) Dvw=G->arcsvw.adj; /初始路徑賦值 for(u=0;u<G->vexnum;u+)pvwu=0; if(Dvw<9999) /從v到w有直接路徑 pvwv=1;pvww=1; for(u=0;u<G->vexnum;u+) for(v=0;v<G->vexnum;v+) for(w=0;w<G->vexnum;w+) if(Dvu+Duw<Dvw) Dvw=Dvu+Duw; for(i=0;i&
33、lt;G->vexnum;i+)pvwi=pvui|puwi; while(flag) printf("請輸入出發(fā)點(diǎn)和目的地的編號:"); scanf("%d%d",&k,&j); if(k<0|k>G->vexnum|j<0|j>G->vexnum) printf("景點(diǎn)編號不存在!請重新輸入出發(fā)點(diǎn)和目的地的編號:"); scanf("%d%d",&k,&j); if(k>=0&&k<G->vexnum&a
34、mp;&j>=0&&j<G->vexnum) flag=0; printf("%s",G->); for(u=0;u<G->vexnum;u+) if(pkju&&k!=u&&j!=u) printf("->%s",G->); printf("->%s",G->); printf(" 總路線長%dmn",Dkj); /Floyd endvoi
35、d Menu() /操作界面 printf("n 中南大學(xué)校園導(dǎo)游系統(tǒng)nn"); printf(" n"); printf(" n"); printf(" 1.查看校園景點(diǎn) n"); printf(" 2.查看景點(diǎn)信息 n"); printf(" 3.查找最短旅游路線 n"); printf(" 4.退出系統(tǒng) n"); printf(" n"); printf(" n"); printf("請按提示進(jìn)入相應(yīng)
36、菜單:"); int main() b=initgraph(); while(1) Menu(); int choice; /選擇功能 cin>>choice; switch(choice) case 1: showall(&b); system("pause"); system("cls"); break; case 2: showselect(&b); system("pause"); system("cls"); break; case 3: floyd(&b);
37、 system("pause"); system("cls"); break; case 4: exit(1); break; default:cout<<"請在1-4中選擇操作!"<<endl;system("pause");system("cls");break; return 0;職工管理系統(tǒng)代碼#include <iostream> #include <fstream> #include<string>#include<i
38、omanip>#include<conio.h>#include <vector>#include <algorithm>using namespace std; struct Employee /聲明職工的結(jié)構(gòu)作為鏈表節(jié)點(diǎn)。 int code; string name; string sex;int birth; string edu;int phone;struct Employee* next; ;typedef struct Employee Node;typedef Node* Link;Link Create(Link Head);Link
39、 Add(Link Head);Link search(Link Head);Link del(Link Head); void display_list(Link Head); void display_node(Link Head);void Save_ByFile(Link Head,fstream& ofile); Link sort(Link Head);void re(); /清屏Link Create(Link Head) /創(chuàng)建一個帶頭節(jié)點(diǎn)的空鏈表Head=(Link)new Node; if(!Head) cout<<"分配內(nèi)存失??!"
40、<<endl; return NULL; Head->code=0; Head->name="" Head->birth=0; Head->sex="" Head->edu="" Head->phone=0; Head->next=NULL; return Head; void Release(Link Head) /釋放鏈表。 Link ptr;/聲明一個操作用的指針。 while(Head!=NULL) ptr=Head; Head=Head->next; delete
41、ptr;/釋放節(jié)點(diǎn)資源。 Link add(Link Head) /插入數(shù)據(jù) Link pNew; int code,birth,phone; string edu,sex; char name20; char again; /控制是否繼續(xù)添加數(shù)據(jù) do pNew=(Link)new Node; /把Node轉(zhuǎn)化成指針型賦給pNew,不斷創(chuàng)建新區(qū)域 cout<<"請輸入職工代碼: " cin>>code; cout<<"請輸入職工姓名: " cin>>name; cout<<"請輸入職
42、工性別: " cin>>sex; cout<<"請輸入職工出生年月: " cin>>birth; cout<<"請輸入職工學(xué)歷: " cin>>edu; cout<<"請輸入職工聯(lián)系電話: " cin>>phone; cout<<endl; pNew->code=code; /將數(shù)據(jù)添加到node中去 pNew->name=name; pNew->sex=sex; pNew->birth=birth; pN
43、ew->edu=edu; pNew->phone=phone; pNew->next=Head->next; /將鏈表next屬性賦給下一個數(shù)據(jù) Head->next=pNew; /上一個next的值為pnew cout<<"數(shù)據(jù)添加成功!是否繼續(xù)添加?(Y/N)"<<endl; cin>>again; while(again='Y'|again='y'); system("cls"); return Head; /返回值為head ;Link del(Li
44、nk Head) /刪除職工記錄Link ptr;Link ptr_2;ptr_2=search(Head);ptr=ptr_2->next;cout<<ptr->phone;if(ptr) ptr_2->next=ptr->next;free(ptr);cout<<"已刪除該職工信息"elsecout<<"沒找到此職工的記錄,無法刪除。"<<endl; re(); return Head; Link search(Link Head) /返回符合姓名條件的職工信息 Link ptr
45、_1;Link ptr_2;string name;ptr_1=Head->next;ptr_2=Head;cout<<"請輸入查詢職工姓名:" cin>>name; cout<<"=查詢結(jié)果="<<endl; cout<<endl<<"職工代碼 姓名 性別 出生年份 教育程度 聯(lián)系方式"while(ptr_1)if(ptr_1->name=name) display_node(ptr_1); /打印滿足條件節(jié)點(diǎn) re(); return ptr_2;
46、 else ptr_1=ptr_1->next; /查詢下一節(jié)點(diǎn)ptr_2=ptr_2->next; cout<<endl<<"無此職工信息"<<endl; re(); void re() cout<<"請輸入o返回主界面!" char c=getch(); if(c='o')system("cls");void display_list(Link Head) /查詢所有職工信息 Link ptr,ptr1; ptr=sort(Head); ptr1=ptr-
47、>next; cout<<"=所有職工信息="<<endl; cout<<endl<<"職工代碼 姓名 性別 出生年份 教育程度 聯(lián)系方式" while(ptr1) display_node(ptr1); ptr1=ptr1->next; cout<<"請輸入o返回主界面!" char c=getch(); if(c='o') system("cls"); void display_node(Link pNode) /打印數(shù)據(jù)
48、cout<<setw(10)<<left<<pNode->code <<setw(10)<<left<<pNode->name <<setw(10)<<left<<pNode->sex <<setw(10)<<left<<pNode->birth <<setw(10)<<left<<pNode->edu <<setw(10)<<left<<pNode-
49、>phone<<endl;/setw(10)表示占10個字符位置。 Link modify(Link Head) /修改信息 int code,birth,phone,name; string edu,sex; Link ptr;ptr=search(Head);if(ptr!=NULL) /判斷指針是否為空 cout<<"-你現(xiàn)在可以修改此職工的信息了-"<<endl; cout<<"請輸入職工代碼:" cin>>code; cout<<endl<<"請
50、輸入職工姓名:" cin>>name; cout<<endl<<"請輸入職工性別:" cin>>sex; cout<<endl<<"請輸入職工出生年份:" cin>>birth; cout<<endl<<"請輸入職工教育程度:" cin>>edu; cout<<endl<<"請輸入職工聯(lián)系方式:" cin>>phone; cout<<endl; ptr->code=code; ptr-&g
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年公共衛(wèi)生政策與實施考試卷及答案
- 腫瘤防治聯(lián)盟介紹
- 行車公寓客房保潔方案,行車公寓食堂承包方案
- 怎樣做好患者健康教育
- 新入職公務(wù)員培訓(xùn)課程
- 自身免疫性腦炎護(hù)理查房指南
- 2025年智能制造工程師資格考試試卷及答案
- 夏季運(yùn)輸安全培訓(xùn)
- 六一活動演出工作總結(jié)
- 大模型產(chǎn)品評估規(guī)范
- 陜西省安全生產(chǎn)條例
- 摜蛋大賽招商方案
- 電影特效制作課件
- 304不銹鋼管焊接工藝
- 網(wǎng)絡(luò)安全教育安全教育
- 醫(yī)療器械經(jīng)銷商和代理商法規(guī)義務(wù)
- 糖尿病專科護(hù)士培訓(xùn)學(xué)習(xí)匯報課件
- 心理健康教育C證面試20個題目參考答案
- 危險化學(xué)品庫房貯存規(guī)定培訓(xùn)課件
- Part 3-4 Unit 7 Invention and Innovation教案-【中職專用】高一英語精研課堂(高教版2021·基礎(chǔ)模塊2)
- 出租房(群租房)一戶一檔檢查表
評論
0/150
提交評論