版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、57/59沈陽理工大學(xué)應(yīng)用技術(shù)學(xué)院沈陽理工大學(xué)應(yīng)用技術(shù)學(xué)院 數(shù)據(jù)結(jié)構(gòu)與算法綜合實驗報告課程名稱: 數(shù)據(jù)結(jié)構(gòu)與算法綜合實驗 專 業(yè): 計算機(jī)科學(xué)與技術(shù) 班級學(xué)號: 11321116 姓 名: 王嬌 指導(dǎo)教師: 孫承福 成 績: 完成日期: 2012 年 月 日一、 實驗題目工資治理系統(tǒng)二、 實驗時刻地時刻:2012/6/10地點:506ATA機(jī)室三、 實驗?zāi)康?.理解線性表的定義、線性表的順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)。2.理解線性表的邏輯結(jié)構(gòu)特征3.深入掌握線性表的兩種存儲方法,即順序表和鏈?zhǔn)奖?。體會這兩種存儲結(jié)構(gòu)之間的差異。4.重點掌握線性表和鏈表上各種差不多運算的實現(xiàn)。5.綜合運用線性表解決一
2、些復(fù)雜的實際問題。四、實驗內(nèi)容(一)、功能關(guān)系介紹1添加功能,通過它能夠添加新的職員信息,特不方便,輸入1即可進(jìn)入添加頁面,添加完以后,輸入4保存。2查詢功能,通過它能夠查詢是否有那個職員,他能夠通過兩種方式進(jìn)行查詢,一是id號查詢,二是姓名查詢。3刪除功能,通過它能夠刪除離開的職員,它也能夠通過兩種方式進(jìn)行刪除,一是通過id刪除,二是通過姓名刪除。6修改功能,通過它能夠修改職員信息,譬如電話,工資等,可輸入id號進(jìn)行修改,修改完以后返回主頁面輸入4進(jìn)行保存。5插入功能,與添加功能有區(qū)不,它可選擇性的插入,隨意插,他也是添加新的職員,特不方便,返回主頁面,輸入4保存。4保存功能,它可保存添加,
3、插入和修改的職員信息。7顯示功能,通過它能夠顯示所有職員的詳細(xì)信息。0返回功能,通過它可返回主頁面,進(jìn)行其他操作。(二)、采納數(shù)據(jù)結(jié)構(gòu)該職職員資治理系統(tǒng)采納了單鏈表的建立,輸入,插入,查找,刪除,輸出等功能(三)、語言工具C語言編程五、預(yù)習(xí)內(nèi)容(一)、單鏈表分線性單鏈表和靜態(tài)的單鏈表。線性單鏈表是用一組不連續(xù)的存儲單元來存放線性表中的數(shù)據(jù),因此鏈表中結(jié)點的邏輯次序和物理次序不一定相同。為了正確的表示結(jié)點間的邏輯關(guān)系,在存儲線、性表時,存儲每個數(shù)據(jù)元素值的同時,還要存儲指示其后繼結(jié)點的地址信息,這兩部分信息組成的存儲映像稱為結(jié)點。一個結(jié)點有兩個域組成:數(shù)據(jù)域和指針域。 1)、創(chuàng)建單鏈表: 1、扦
4、插法建表 2、尾插法建表 2)、在單鏈表中查找給定的元素:1、按每個元素的定位序號查找2、按值查找(二)、單鏈表的長度 刻意采納“數(shù)”結(jié)點的方法求出單鏈表的長度,用指針p依次指向各個結(jié)點,從第一個元素開始”數(shù)“,一直”數(shù)“到最后一個結(jié)點(p-next=NULL)。單鏈表插入操作在單鏈表L中第i個位置插入一個數(shù)據(jù)元素e,首先找到單鏈表中的第i-1個結(jié)點,然后申請一個新的結(jié)點由指針s指示,s結(jié)點數(shù)據(jù)域為e。修改第-1個結(jié)點的指針使其指向s,然后使s結(jié)點的指針域指向原第i個結(jié)點。(三)、單鏈表的刪除 注意:刪除算法中的循環(huán)條件(p-next!NULL)&(ki-1)與前插算法中的循環(huán)條件(p-nex
5、t!NULL)&(kdata.gzkh);NYNp=NULLprintf(無法申請經(jīng)歷空間!n);exit(0);Yprintf(職工編號:);gets(p-data.gzkh);NYNode *p,*r,*s;char numstr20;r=mr-next!=NULLYr=r-next;mYp=(Node *)malloc(sizeof(Node);Nstrcmp(p-data.gzkh,0)=0退出鍵盤輸入p-data.yfgzdata.yfgznext=NULL; r-next=p;r=p;退出NY稅金=(應(yīng)發(fā)工資-800)*0.05N推斷表中是否有數(shù)據(jù)推斷表中是否有數(shù)據(jù)沒有記錄返回輸入
6、“1”通過id刪除,輸入“2”通過姓名刪除Choose=1輸入已存在的id號調(diào)用locate()函數(shù)Choose=2輸入已存在的姓名調(diào)用locate()函數(shù)P!=Nullr=mr-next!=pr=r-nextr-next=p-next退出NYNYNYN圖 6.4 delete()函數(shù)流程圖FILE *fp;Node *p;int count=0FILE *fp;Node *p;int count=0文件fp打開讀取fp=Null無法打開文件返回YNp=m-next 指針下移P!=nullY寫入文件 count+NCount0保存成功無新數(shù)據(jù)更新YN圖 6.5 save()函數(shù)流程圖輸入要在第
7、幾個數(shù)的后面插入輸入要在第幾個數(shù)的后面插入申請結(jié)點 newinfoNewinfo=null依照提示鍵盤輸入插入信息沒有記錄返回YNNewinfo-data.yfgzdata.yfgznextmStrcmp(p-data.id,find)=0)Ynewinfo-next=p-next; p-next=newinfo Yp=p-next退出NN圖 6.6 insert()函數(shù)流程圖稅金=(應(yīng)發(fā)工資-800)*0.05m-next=null稅金=(應(yīng)發(fā)工資-800)*0.05m-next=null輸入你想要修改的id號,調(diào)用locate()無記錄返回PStrcpy(p-data.id,find)復(fù)制
8、Y依照提示鍵盤輸入插入信息Newinfo-data.yfgzdata.yfgznext;N退出N圖 6.8 xianshi()函數(shù)流程圖Node *rNode *rstrcmp(fangshi,”id”)=0)r=m-nextYrstrcmp(r-data.id,find)=0Y返回Nreturn r; Ystrcmp(fangshi,”name”)=0)r=m-nextrstrcmp(r-,find)=0返回return r; YNYNNY返回Nr=r-nextr=r-nextN圖 6.9 locate()函數(shù)流程圖七、運行結(jié)果(抓圖)與分析7.1主界面執(zhí)行成功之后,首先顯示主菜單,如圖7.
9、1: 圖7.17.2輸入添加函數(shù)模塊實現(xiàn)選擇”1”你將進(jìn)入添加模塊,在添加模塊里你能夠執(zhí)行對職員的姓名,職工卡號等的添加,如圖7.2:圖7.27.3輸入查詢函數(shù)模塊實現(xiàn)選擇”2”你將進(jìn)入查詢模塊,一是通過職員的id號查詢職員的信息,還能夠通過職員的姓名進(jìn)行查詢。例如:進(jìn)入主菜單,你首先選擇的是“2”,進(jìn)入查詢模塊,然后你能夠選擇通過id或者是姓名進(jìn)行職員信息查詢,選擇“1”,通過id查詢,選擇“2”通過姓名查詢,假如你選擇“2“,然后輸入id號01,之后按回車鍵,就會顯示一行你要查詢的那個職員的信息,如圖7.3:圖7.37.4輸入刪除函數(shù)模塊實現(xiàn)選擇“3”你將你進(jìn)入刪除模塊,你能夠通過 id號
10、和職員的姓名進(jìn)行刪除,方法雷同,如圖7.4 圖7.47.5輸入保存函數(shù)模塊實現(xiàn)輸入“4”進(jìn)行文件的保存,保存的路徑是d:hello.txt,wb,如圖7.5: 圖7.57.6輸入插入函數(shù)模塊實現(xiàn)輸入“5”你將進(jìn)入插入模塊,你能夠選擇要插入的位置,是第一個數(shù)據(jù)后面依舊第幾個數(shù)據(jù)后面,選擇之后即可進(jìn)行信息的錄入,假如在職工卡號后輸入0,則返回主頁面,否則接著插入方法跟添加雷同,如圖7.6:圖7.67.7輸入修改函數(shù)模塊實現(xiàn)輸入“6”,你將進(jìn)入修改界面,你能夠先選擇你要修改的職員的id,之后你能夠選擇你要修改的信息,修改之后你會用到一個模塊,保存模塊,如圖7.7 圖7.77.8輸入顯示函數(shù)模塊實現(xiàn)輸
11、入“7”你將進(jìn)入顯示模塊。顯示模塊要緊的功能確實是顯示信息。執(zhí)行完其他操作之后你能夠通過顯示信息顯示出來,如圖7.8圖7.87.9輸入退出函數(shù)模塊實現(xiàn)輸入“0”,退出界面,如圖7.9圖7.9八、源程序代碼#include#include#include#include/#include int saveflag=0;/標(biāo)志一下,定義一個標(biāo)志變量,用到的時候再找typedef struct worker/定義一個struct worker,相當(dāng)于java的一個類 char gzkh20; /*職工卡號*/ char id20; /*id號*/ char name20; /*姓名*/ char s
12、ex; /*性不*/ /int gl; /*工齡*/ char department20; /*部門*/ char level10; /*技術(shù)職稱*/ char jsbh20; /*技術(shù)職稱編號*/ char phone20; float jbgz; /*差不多工資*/ float zwgz; /*職務(wù)工資*/ float yfgz; /*應(yīng)發(fā)工資*/ float sfgz; /*實發(fā)工資*/ float tax; float bz; /*補(bǔ)助*/;typedef struct node struct worker data; /結(jié)構(gòu)體work類型的變量data struct node *ne
13、xt; /結(jié)構(gòu)體note類型的指針變量,變量名為nextNode,*Link; /note類型的指針變量menu() /*菜單函數(shù)*/ system(cls); / textcolor(12); /gotoxy(10,5); cprintf( 王嬌的工資治理系統(tǒng):n); /gotoxy(10,8); cprintf(* 菜單 *n); /gotoxy(10,9); cprintf(* 1 添加 2 查詢 *n); /gotoxy(10,10); cprintf(* 3 刪除 4 保存 *n); /gotoxy(10,11); cprintf(* 5 插入 6 修改 *n); /gotoxy(1
14、0,12); cprintf(* 7 顯示 0 退出 *n); /gotoxy(10,13); cprintf(*n); /*定位函數(shù)*/Node *locate(Link m,char find,char fangshi) Node *r; if(strcmp(fangshi,id)=0) /*按照id查詢*/ r=m-next; while(r) if(strcmp(r-data.id,find)=0) return r; r=r-next; else if(strcmp(fangshi,name)=0) r=m-next; while(r) if(strcmp(r-,find)=0) r
15、eturn r; r=r-next; /*查詢函數(shù)*/chaxun(Link m) int choose; char inputdata20; /*存放查詢的內(nèi)容*/ Node *p; if(m-next)=NULL) system(cls); printf(n沒有該職員的信息!n); getchar(); return; system(cls); printf(1 通過id查詢 2 通過姓名查詢n); /選擇1通過id查詢,選擇2,通過name查詢 printf(請輸入 1/2n); scanf(%d,&choose);getchar(); if(choose=1) printf(請輸入數(shù)據(jù)
16、!n); scanf(%s,&inputdata);getchar(); p=locate(m,inputdata,id); if(p) printf(工資卡號:=%4s 姓名:=%4s 實發(fā)工資:=%4f 稅務(wù):=%4f 差不多工資:=%4fn, p-data.gzkh,p-,p-data.sfgz,p-data.tax,p-data.jbgz); /printf(%4s%4s%4f%4f%4fn,p-data.gzkh,p-,p-data.sfgz,p-data.tax,p-data.sfgz); printf(按任意鍵接著!n); getchar(); else printf(無法找到!
17、n); getchar(); else if(choose=2) printf(請輸入數(shù)據(jù)!n); scanf(%s,&inputdata);getchar(); p=locate(m,inputdata,name); if(p!=NULL) printf(工資卡號:=%4s 姓名:=%4s 應(yīng)發(fā)工資:=%4f 稅務(wù):=%4f 實發(fā)工資:=%4fn, p-data.gzkh,p-,p-data.sfgz,p-data.tax,p-data.jbgz); /printf(%s%s%f%f%fn,p-data.gzkh,p-,p-data.sfgz,p-data.tax,p-data.sfgz);
18、 printf(按任意鍵接著!n); getchar(); else printf(無法找到!n); getchar(); /*添加函數(shù)*/add(Link m) Node *p,*r,*s; char numstr20; r=m; while(r-next!=NULL) r=r-next; while(m) p=(Node *)malloc(sizeof(Node);/申請結(jié)點 if(p=NULL) printf(無法申請經(jīng)歷空間!n); exit(0); printf(職工編號:); gets(p-data.gzkh); if(strcmp(p-data.gzkh,0)=0) break;
19、 printf(id號:); gets(p-data.id); printf(姓名:); gets(p-); printf(性不:); / gets(p-data.sex); p-data.sex=getchar(); getchar(); printf(部門:); getchar(); gets(p-data.department); printf(技術(shù)職稱:); gets(p-data.level); printf(技術(shù)職稱編號:); gets(p-data.jsbh); printf(電話:); gets(p-data.phone); printf(差不多工資:); gets(numst
20、r); p-data.jbgz=atof(numstr); printf(職務(wù)工資:); gets(numstr); p-data.zwgz=atof(numstr); printf(補(bǔ)助:); gets(numstr); p-data.bz=atof(numstr); p-data.yfgz=p-data.jbgz+p-data.zwgz+p-data.bz; /應(yīng)發(fā)工資=差不多工資+職務(wù)工資+補(bǔ)助; if(p-data.yfgzdata.tax=0; /假如應(yīng)發(fā)工資data.yfgzdata.tax=(p-data.yfgz-800)*0.05; /假如應(yīng)發(fā)工資大余800小于1400稅金=
21、(應(yīng)發(fā)工資-800)*0.05 else p-data.tax=(p-data.yfgz-1400)*0.1; /假如應(yīng)發(fā)工資大于1400稅金=(應(yīng)發(fā)工資-1400)*0.1 p-data.sfgz=p-data.jbgz+p-data.zwgz+p-data.bz-(p-data.tax);/實發(fā)工資=差不多工資+職務(wù)工資+補(bǔ)助-稅金; p-next=NULL; r-next=p; r=p; saveflag=1; /*刪除函數(shù)*/delete(Link m) int choose; Node *p,*r; char find20; if(m-next=NULL) system(cls);
22、printf(沒有記錄!n); getchar(); return; system(cls); printf( 1 通過id刪除 2 通過姓名刪除 n);/選擇1,通過id刪除,選擇2通過name刪除 printf(請輸入1或2:n); scanf(%d,&choose);getchar(); if(choose=1) printf(請輸入已存在的id號!n); scanf(%s,find);getchar(); p=locate(m,find,id); if(p!=NULL) r=m; while(r-next!=p) r=r-next; r-next=p-next; free(p); pr
23、intf(d刪除成功!n); getchar(); saveflag=1; else printf(無法找到id號!n); getchar(); else if(choose=2) printf(請輸入已存現(xiàn)在的姓名!n); scanf(%s,find);getchar(); p=locate(m,find,name); if(p!=NULL) r=m; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(刪除成功!n); getchar(); saveflag=1; else printf(無法找到姓名!n); getchar(
24、); /*顯示數(shù)據(jù)*/xianshi(Link m) Node *p; p=m-next; if(p=NULL) printf(沒有記錄!n); getchar(); return; while(p) printf(t工資卡號 姓名 應(yīng)發(fā)工資 稅金 實發(fā)工資n); printf(t%4s t%4st%4ft%4ft%4fn,p-data.gzkh,p-,p-data.yfgz,p-data.tax,p-data.sfgz); p=p-next; getch();/*修改函數(shù)*/modify(Link m) Node *p; char find20; char numstr20; if(m-ne
25、xt=NULL) system(cls); printf(沒有記錄!n); getchar(); return; system(cls); printf(請輸入你想修改的id號!n); gets(find); p=locate(m,find,id); if(p) strcpy(p-data.id,find); printf(請輸入數(shù)據(jù)!n); printf(姓名:); gets(p-); printf(性不:); p-data.sex=getchar();getchar(); printf(部門:);gets(p-data.department);getchar(); printf(技術(shù)職稱:
26、);gets(p-data.level);getchar(); printf(技術(shù)職稱編號:);gets(p-data.jsbh);getchar(); printf(電話:);gets(p-data.phone);getchar(); printf(差不多工資:);gets(numstr);p-data.jbgz=atof(numstr);getchar(); printf(職務(wù)工資:);gets(numstr);p-data.zwgz=atof(numstr);getchar(); printf(補(bǔ)助:);gets(numstr);p-data.bz=atof(numstr);getcha
27、r(); p-data.yfgz=p-data.jbgz+p-data.zwgz+p-data.bz; if(p-data.yfgzdata.tax=0; else if(p-data.yfgzdata.tax=(p-data.yfgz-800)*0.05; else p-data.tax=(p-data.yfgz-1400)*0.1; p-data.sfgz=p-data.jbgz+p-data.zwgz+p-data.bz-(p-data.tax); printf(恭喜你修改成功!n); getch(); saveflag=1; else printf(無法修改!n); /*保存函數(shù)*/s
28、ave(Link m) FILE *fp; Node *p; int count=0; fp=fopen(d:hello.txt,wb);/文件的打開。讀取 if(fp=NULL)/推斷假如文件為空,就會輸出下面的語句 printf(無法代開文件 !n); getchar(); return; p=m-next;/下移 while(p!=NULL) fwrite(p,sizeof(Node),1,fp);/寫入? p=p-next; count+;/用count記錄文件是否保存成功 if(count0) printf(文件保存成功!n); getchar(); saveflag=0; else
29、 system(cls); printf(沒有新數(shù)據(jù)保存成功!n); getchar(); fclose(fp);/*插入函數(shù)*/insert(Link m) Link p,newinfo; char ch; char find20; char numstr20; system(cls); printf(please input the find20 !n); gets(find);/獲得要輸入的數(shù) newinfo=(Node *)malloc(sizeof(Node); if(newinfo=NULL) printf(沒有記錄!n); getchar(); return; printf(請輸
30、入插入數(shù)據(jù)!n); printf(職工卡號:);gets(newinfo-data.gzkh); printf(id號:);gets(newinfo-data.id); printf(姓名:); gets(newinfo-); printf(性不:); newinfo-data.sex=getchar(); getchar(); printf(部門:);gets(newinfo-data.department); getchar(); printf(技術(shù)職稱:);gets(newinfo-data.level); getchar(); printf(技術(shù)職稱編號:);gets(newinfo-
31、data.jsbh); getchar(); printf(電話:);gets(newinfo-data.phone); getchar(); printf(差不多工資:);gets(numstr);newinfo-data.jbgz=atof(numstr); getchar(); printf(職務(wù)工資:);gets(numstr);newinfo-data.zwgz=atof(numstr); getchar(); printf(補(bǔ)助:);gets(numstr);newinfo-data.bz=atof(numstr); getchar(); newinfo-data.yfgz=new
32、info-data.jbgz+newinfo-data.zwgz+newinfo-data.bz; if(newinfo-data.yfgzdata.tax=0; else if(newinfo-data.yfgzdata.tax=(newinfo-data.yfgz-800)*0.05; else newinfo-data.tax=(newinfo-data.yfgz-1400)*0.1; newinfo-data.sfgz=newinfo-data.jbgz+newinfo-data.zwgz+newinfo-data.bz-(newinfo-data.tax); printf(恭喜你插入
33、成功!n); saveflag=1; p=m-next; while(m) if(strcmp(p-data.id,find)=0) newinfo-next=p-next; p-next=newinfo; break; p=p-next; getchar();/*主函數(shù)*/void main() Link m;/定義一個note類型的的指針變量 FILE *fp;/ int choose; char ch; int count=0; Node *p,*r; m=(Node*)malloc(sizeof(Node);/申請結(jié)點 if(m=NULL) printf(申請失敗!n); return; m-next=NULL; r=m; fp=fopen(d:hello.txt,wb+); if(fp=NULL) printf(錯誤!n); getchar(); while(feof(fp)=0) if(fp=NULL) printf(無法打開文件!n);
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 禮服商業(yè)機(jī)會挖掘與戰(zhàn)略布局策略研究報告
- 化妝用漂白劑脫色劑產(chǎn)品供應(yīng)鏈分析
- 腰包商業(yè)機(jī)會挖掘與戰(zhàn)略布局策略研究報告
- 醫(yī)用軟化水產(chǎn)品供應(yīng)鏈分析
- 塑料旅行袋產(chǎn)業(yè)鏈招商引資的調(diào)研報告
- 個人資產(chǎn)保險索賠評估行業(yè)市場調(diào)研分析報告
- 書籍裝訂用布產(chǎn)業(yè)鏈招商引資的調(diào)研報告
- 編碼和解碼裝置和儀器產(chǎn)品供應(yīng)鏈分析
- 產(chǎn)品質(zhì)量檢測服務(wù)行業(yè)營銷策略方案
- 電動織毯機(jī)市場發(fā)展前景分析及供需格局研究預(yù)測報告
- 《高技術(shù)產(chǎn)業(yè)(服務(wù)業(yè))分類(2018)》
- 組織行為學(xué)教案英文版
- 人才測評理論和基礎(chǔ)知識-共43頁PPT資料課件
- 動物營養(yǎng)與代謝病防治
- PCB板檢驗記錄表格模板
- 非婚生育子女情況聲明
- 1500地形圖測量技術(shù)設(shè)計書
- 汽輪機(jī)主油箱系統(tǒng)(課堂PPT)
- 數(shù)據(jù)管理制度
- 減速器拆裝實訓(xùn)教案
- 高血壓自我管理小組工作心得
評論
0/150
提交評論