員工工資管理-數(shù)據(jù)結(jié)構(gòu)-課程設(shè)計報告_第1頁
員工工資管理-數(shù)據(jù)結(jié)構(gòu)-課程設(shè)計報告_第2頁
員工工資管理-數(shù)據(jù)結(jié)構(gòu)-課程設(shè)計報告_第3頁
員工工資管理-數(shù)據(jù)結(jié)構(gòu)-課程設(shè)計報告_第4頁
員工工資管理-數(shù)據(jù)結(jié)構(gòu)-課程設(shè)計報告_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、榆林學(xué)隧數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告題 目員工工資管理系統(tǒng)作者 赤啞萌專業(yè)15信管本1學(xué) 號 1514210124指導(dǎo)老師張慧2016. 12. 1答辯時間目錄目錄11. 系統(tǒng)需求分析111用戶需求分析21.2功能需求分析21.2. 1基本功能21.2.2總功能圖313數(shù)據(jù)需求分析31. 4小結(jié)42系統(tǒng)設(shè)計52. 1系統(tǒng)設(shè)計思路52. 2基本要求62. 3函數(shù)調(diào)用圖62. 4詳細(xì)設(shè)計62.4. 1.定義模塊62. 4. 2功能模塊83系統(tǒng)測試124總結(jié)155附錄(源代碼)1261.系統(tǒng)需求分析本系統(tǒng)的設(shè)計目標(biāo)是能夠?qū)締T工的基本信息和工資信息進(jìn)行管理。用戶需求分析社會在發(fā)展,科技在進(jìn)步,很多東西都處

2、于信息化,很多系統(tǒng)也得跟上人們 的需求。隨著企業(yè)的快速發(fā)展,企業(yè)規(guī)模越來越大,在職員工的數(shù)量也越來越多, 企業(yè)工資管理更加的復(fù)雜,而工資管理是一項瑣碎、復(fù)雜而又十分細(xì)致的工作, 工資計算的工作量很大,一般不允許出錯,如果實行手工操作,每月發(fā)放工資須 手工填制大量的表格,這就會耗費工作人員大量的時間和精力,計算機(jī)進(jìn)行工資 發(fā)放工作,不僅能夠保證工資核算準(zhǔn)確無課、快速輸出,而且還可以利用計算機(jī) 對有關(guān)工資的各種信息進(jìn)行統(tǒng)計,服務(wù)于財務(wù)部門其他方面的核算和財務(wù)處理, 同時計算機(jī)具有手工管理所無法比擬的優(yōu)點。員工工資管理系統(tǒng)而向企業(yè),屈于企業(yè)信息管理的一部分。操作本軟件的工 作人員只需具備基本的計算機(jī)

3、知識。系統(tǒng)管理員運(yùn)行所有功能,從而有效的保證 系統(tǒng)數(shù)據(jù)的安全性,系統(tǒng)應(yīng)該具有簡單、易用、小巧、經(jīng)典的特色,應(yīng)該能夠?qū)?工資員工的工資進(jìn)行優(yōu)化,使其系統(tǒng)化、智能化、高效化。并保證工資管理的準(zhǔn) 確性,簡易性,為公司財務(wù)人員提供便利,應(yīng)使員工用戶明確系統(tǒng)功能、應(yīng)用范 亂1.2功能需求分析1.2. 1基本功能(1)增加模塊。該模塊包含的數(shù)據(jù)項項目有員工的姓名、工號、性別、應(yīng) 得工資和實發(fā)工資。(2)查詢模塊。查詢記錄主要是運(yùn)用鏈表指針進(jìn)行查找足相關(guān)的記錄。在 此工資管理系統(tǒng)中,用戶可以按照職工編號進(jìn)行查找。(3)保存模塊。保存模塊主要完成對記錄的維護(hù)。在此工資管理系統(tǒng)中, 實現(xiàn)對記錄的修改、刪除、插入

4、、和排序操作。一般而言,系統(tǒng)進(jìn)行了這些操作 之后,需要將修改的的數(shù)據(jù)存入源數(shù)據(jù)文件。(4)瀏覽模塊。根據(jù)用戶提供的記錄或者根據(jù)職工工號顯示某個員工的各 項信息和工資。包括員工的姓名、工號、性別、應(yīng)得工資和實發(fā)工資。(5)修改模塊。包括員工的姓名、工號、性別、應(yīng)得工資和實發(fā)工資。修 改后,直接存放在原來的位置。(6)刪除模塊??蓜h除某一員工的信息和工資記錄。先查找后直接刪除。(7)插入模塊。先找到插入點,再將需要插入的結(jié)點插入到該結(jié)點后面。(8)排序模塊。按照工資從高到低高低進(jìn)行排序。1.2.2總功能圖圖1-1.功能模塊圖3數(shù)據(jù)需求分析表11.數(shù)據(jù)分析模塊函數(shù)或數(shù)據(jù)結(jié)構(gòu)功能定義文件指針 結(jié)構(gòu)體f

5、ilp *fp;struct employee 定義一個員工工資結(jié)構(gòu) char numfl0;工號用來保存員工信息 定義一個員工信息 結(jié)構(gòu)char name 15;char sex4; 爐性別float paid ;基本工資鏈表float gotpaid; double realpaid; float extra;float discout; double fare;typedef stmct node應(yīng)發(fā)工資實發(fā)工資 獎金 扣款稅金;用鏈表存儲員工信struct employee data;息struct node ext; node,*link;主要函數(shù)void add(link 1);增

6、加運(yùn)用多種函數(shù)對信void disp(link 1);瀏覽息進(jìn)行操作void del(link 1);刪除void qur(link 1);查詢void sort(link 1);排序void modify(link 1);修改void save(link 1);保存void printe(node *p);輸出1.4小結(jié)在這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計中遇到了很多實際性的問題,自己不懂的地方要多 問,多和老師、同學(xué)們溝通交流,學(xué)習(xí)。在實際中發(fā)現(xiàn),根據(jù)實際問題設(shè)計出實 用并可靠的系統(tǒng)程序。書本上的東西并不是全都能很好的運(yùn)用到實際問題中,必 須要在熟知書本知識的情況下,也通過查閱相關(guān)資料,能夠根據(jù)實際問題

7、設(shè)計岀 實用并可靠的系統(tǒng)程序。2系統(tǒng)設(shè)計2. 1系統(tǒng)設(shè)計思路本程序首先利用主函數(shù)調(diào)用菜單選擇界而,在主函數(shù)中根據(jù)用戶選擇項轉(zhuǎn)入 相應(yīng)功能函數(shù),如果輸入錯誤,主函數(shù)給出相應(yīng)提示。在主函數(shù)屮先會尋找一個關(guān)于員工信息的文件,如果如果存在就會打開文件 錄入信息;找不到就會提示是否創(chuàng)建文件的信息。此時主函數(shù)會調(diào)用主菜單,會顯示出菜單。如果選擇1,則轉(zhuǎn)入相應(yīng)函數(shù)add(list),增加員工信息。通過指針實現(xiàn)對員 工信息增加,并將這些信息存入鏈表中。在這個過程中會if函數(shù),while函數(shù)。如果選擇2,轉(zhuǎn)入到刪除函數(shù)del(list),先判斷該鏈表是否為空,如果為空就 會提示;如果不為空就會從第一個結(jié)點開始查

8、找,直到發(fā)現(xiàn)如果己經(jīng)建立通訊錄 鏈表,錄入信息轉(zhuǎn)入其函數(shù)void insertnode(linklist head,listnode *p);選擇"通 訊者結(jié)點的查詢”,如果己經(jīng)建立通訊錄鏈表,則調(diào)用其函數(shù)listnode該結(jié)點, 釋放掉,提示刪除成功。如果選擇3,進(jìn)入查詢qur(list),先定義一個臨時指針。首先要判斷鏈表中 有沒有數(shù)據(jù),如果沒有,返回;如果有,輸入要查找的工號進(jìn)行查找,顯示出需 要的信息如果選擇4,進(jìn)入修改函數(shù)modify(list);先定義一個臨時指針。首先要判斷 鏈表中有沒有數(shù)據(jù),如果沒有,返回;如果有,輸入要修改的員工號,進(jìn)行按項 修改,最終提示修改成功。

9、如果選擇5,進(jìn)入到插入函數(shù)insert(list),找到插入點,在判斷鏈表中是否 存在這個要新插入進(jìn)來的結(jié)點,如果不存在就會插入并輸入該結(jié)點的信息。如果選擇6,會進(jìn)入到員工信息排序函數(shù)sort(list),設(shè)計的是按照實發(fā)工資 由高到低排序。如果選擇7,進(jìn)入到保存信息函數(shù)save (list),會將鏈表中的信息寫入txt 文件屮保存。如果選擇8,將會進(jìn)入顯示信息函數(shù)disp(list),這個函數(shù)的主要功能就是按 照一定的格式顯示出鏈表中所有信息。輸入其他數(shù)字,會直接退出系統(tǒng)。在該系統(tǒng)中,還有一個函數(shù)結(jié)點的定位函數(shù)locateo,該函數(shù)可以幫助其他函 數(shù)更好的找到位置,插入點,或者是需要的信息。

10、整個系統(tǒng)是以鏈表為存儲方式,對員工的信息進(jìn)行管理的。2. 2基本要求(1)構(gòu)造鏈表存儲用戶記錄。(2)利用直接查找法進(jìn)行查找(3)由工資高低對員工信息進(jìn)行排序2.3函數(shù)調(diào)用圖圖21函數(shù)調(diào)用圖2. 4詳細(xì)設(shè)計2.4.1.定義模塊要實現(xiàn)該系統(tǒng)的功能,最重要的是定義員工工作結(jié)構(gòu)體、鏈表和主要函數(shù) struct employee 定義一個員工工資結(jié)構(gòu)char num10;工號char naine15;姓名char sex4; 性別float paid ;基本工資float gotpaid;應(yīng)發(fā)工資double realpaid; float extra;float discout; double fa

11、re;實發(fā)工資獎金扣款稅金;定義一個員工工資結(jié)構(gòu),里而包括員工的工號、姓名、性別、應(yīng)發(fā)工資、實 發(fā)工資、獎金、扣款、稅金等。typedef struct node 定義一個鏈表struct employee data;struct node *next;node,*link;定義一個鏈表,將多個員工的信息按照順序在鏈表中存儲起來void add(link 1); 增加 void disp(link 1); 瀏覽 void del(link 1);刪除void qur(link 1);查詢void sort(link 1);排序void modify(link 1);修改void save(li

12、nk 1);保存void printe(node *p);輸出node* locate(link l,char findmess,char nameornum); 結(jié)點定位函數(shù)定義了多個函數(shù),使用這些函數(shù)對員工信息進(jìn)行增加、刪除、查找、瀏覽、 修改、保存等多項管理。2.主函數(shù)模塊(主函數(shù)中主要有兩大內(nèi)容)(1) 是否要建立文件來存儲員工信息 先打開employee.txt文件 fp=fopen(nemployee.txt",''rbn);if(fp=null)如果文件還不存在,詢問是否創(chuàng)建;如果文件存在,打開文件 導(dǎo)入記錄,并將指針放在鏈表中尾端。(2) 通過swit

13、ch函數(shù)選擇需要的操作switch(choose) case l:add(list);break; /增加員工信息case 2:del(list);break;/刪除員工信息case 3:qur(list);break;/查詢員工信息case 4:modify(list);break;/修改員工信息case 5:insert(list);break;/插入員工信息case 6:sort(list);break;/員工信息排序case 7:save(list);break;/保存員工信息case 8:system(nclsn);disp(list);break;/顯示員工信息default:wr

14、ong();getchar();break;2. 4. 2功能模塊(1) voidadd(link 1)增加職工信息函數(shù)先輸入要添加的員工工號,每次從第一個節(jié)點開始找,看工號是否重復(fù);如 果工號重復(fù)時,返回主菜單;如果沒有相同的,將指針放在最后一個結(jié)點尾端 p=(node*)malloc(sizeof(node)生成沒賦值的新節(jié)點 p, strcpy(p->data.num,num); p>nex匸null;表明這是鏈表的尾部結(jié)點(2) void disp(link 1)瀏覽信息函數(shù),該函數(shù)調(diào)用打印函數(shù),來顯示單鏈表中存儲的關(guān)于employee 結(jié)構(gòu)屮定義的內(nèi)容。node 是定義的

15、一個臨時的結(jié)構(gòu)體指針變量,if(!p)就會提 示沒有職工記錄可以顯示,p=l->next,如果有可以顯示的信息,調(diào)用打印函數(shù), 逐條輸出鏈表中存儲的信息,將員工信息顯示在界而上(3) node* locate()結(jié)點定位函數(shù),按工號查詢員工的信息,如果找到了,將指針指向該結(jié)點; 如果沒找到,就會返回一個空指針node *r;if(strcmp(zcornum,'num,')=0)r=l->next;while(r!=null)if(strcmp(r->data.num,findmess)=o)return r;r=r->next;return 0;(4)

16、 void printe(node 數(shù),一般被瀏覽函數(shù),查詢函數(shù)調(diào)用,是用于打 印鏈表屮某個節(jié)點的數(shù)據(jù)內(nèi)容。(5) void del(link 1)刪除信息函數(shù),如果沒有可以刪除的信息,提示沒有記錄可以刪除if(!l->next)printf("n=>提示:沒有記錄可以刪除!n”);return;輸入要刪除的工號,如果找到了,冊ij除并提示該職工已經(jīng)成功刪除;如果要 刪除的工號查詢不到,提示沒有找到該職工printf(“請你輸入要刪除的工號:”);scanf("%su,findmess);p=locate(l,findmess,"num");

17、if(p)r=l;while(r->next!=p)r=r->next;從第一個結(jié)點找起,直到發(fā)現(xiàn)r->next=p,跳岀循壞r->next=p->next;free(p);printf(hn=>該職工已經(jīng)成功刪除!n”);saveflag=l;elseprintf(,n=>提示:沒有找到該職工!n“);(6) void modify(link 1)修改信息函數(shù)如果頭指針的下一個結(jié)點為空,將會提示出沒有資料可以修改node *p;char findmess20;if(!l->next)printf(hn=>提示:沒有資料可以修改!rt);r

18、eturn;輸入要修改的職工工號,用結(jié)點定位函數(shù)p=locate(l,findmess,nnumh)查是 否存在該職工信息如果存在,進(jìn)行修改,并提示資料修改成功,如果不存在,提 示沒有找到該職工。(7) void insert(link 1)/插入node *s,*r,*p;先定義三個,p指新插入記錄節(jié)點;用old_num保存插入點位 置之前的工號,new_num保存輸入的新記錄的工號;輸入已存在的工號,查詢該 工號是否存在,若工號存在,則進(jìn)行插入之前的新記錄的輸入操作,輸入要插入 的新節(jié)點,工號不能跟已存在的工號相同,操作與add()相同;p=(node *)malloc(sizeof(no

19、de)申請新節(jié)點,strcpy(p->data.num,new_num);輸入要插入的 員工信息;p->next=null表明這是鏈表的尾部結(jié)點;r=l->next將指針賦值給r, 因為1中的頭節(jié)點的下一個節(jié)點才實際保存著學(xué)生的記錄;在鏈表屮插入一個節(jié) 點p->next=i->next;r->next=p;break; r=r->next;disp(l);最后顯示出插入后的信息。(8) void sort(link 1)排序函數(shù),按實發(fā)工資從高到低進(jìn)行排序。disp(l)先顯示排序前的所有職工 記錄;ll=(node*)malloc(sizeof(no

20、de)用于創(chuàng)建新的節(jié)點,rr=ll;/n*鏈表于存儲插 入單個節(jié)點后保持排序的鏈表,11是這個鏈表的頭指針,每次從頭開始查找插入位; while(rr->next! =null && rr->next->data.realpaid>=p->data.realpaid) rr=rr->next; 指針移至總分比p所指的節(jié)點的總分小的節(jié)點位置;if(m>next二二null)若新鏈 表11中的所有節(jié)點的總分值都p->data.realpaid大時,就將p所指節(jié)點加入鏈表尾 部rr->next=s;否則將該節(jié)點插入至第一個總分字段

21、比它小的節(jié)點的前面 s->next=rr->next;rr->next=s; ; p=p->next;原鏈表中的指針下移一個節(jié)點, l->next=ll->next, 11中存儲的是己排序的鏈表的頭指針,顯示出新的鏈表內(nèi)容 disp(l)o(9) void save(link 1)保存信息函數(shù) file* fp;node *p; if(fp二二null)將會提 示文件發(fā)生錯誤如果沒有錯誤,將第一個記錄結(jié)點值寫入文件,依次寫入第二個結(jié)點的值, 文件的記錄數(shù)+1while(p)if(fwrite(p,sizeof(node), 1 ,fp)= 1)p=p->

22、;next;count+;else flag=o;break;如果文件記錄數(shù)大于零,將會提示文件保存成功,有幾條記錄已經(jīng)保存.3系統(tǒng)測試打開一個employee.txt文件,里面有三條信息,將信息導(dǎo)入系統(tǒng)員丄丄賢官理糸統(tǒng)= 提示:文件已經(jīng)打開,正在導(dǎo)入記錄提禿邊香吿瀝暑裁養(yǎng)曾會* 1357:9:員工工資管理系統(tǒng) 礬塑員工(i脅 i 城員工磴 i i瞬蘊(yùn)2 4 6 8 rlrlrlrllite*el el« «l al* «l« l> al*«lel><l> «l> <l>*l«*la

23、 - j i 丫丫,丫.丫 |* j丫丫丁".y j * yy° ?。? i * 4 k "yi| (*(* * i * * , | ( . *i*.* , *.* »* *!*j=>請選擇:圖3-1導(dǎo)入信息選擇8,瀏覽信息12 41a 1a 1x性別基本工資獎金扣款應(yīng)發(fā)工資稅金實發(fā)工資12000. 00200.0010.0012190. 003047. 5ci9142.50來7800.00200.000.008000.00800. 007200. 00女3440. 00160.0010. 003590.00179. 503410. 50員工工資管

24、理系統(tǒng)*車車*拿*車*車*浜* *«*車*拿*車*車*浜*=>請選擇】圖32瀏覽信息選擇i,增加信息t:冃主冃主冃主冃主冃主冃主冃*員工工貿(mào)営理糸統(tǒng)135792 4 6 8 rlrlrlrl丿上 r j,- 工工息工*=>if 選瘍 1籍燹奮吉書華'0返回上一級菜單:)115:女土資:10000 :100範(fàn)入扣款:100祈輸入工號(以'0返回上一級菜單:)0圖3-3增加信息 選擇7,保存員工信息*員工工資管理系統(tǒng)13579工工工工統(tǒng) 員員員累息息心 住d15, 工工息口 員員信員 專工覽*=:=>請選擇:7圖3-4保存信息 選擇3,查詢員工信息0.0

25、07500.0015工號ii 劇 薇鑑.00 % 00 so圖3-5查詢信息選擇5,插入員工信息!?11121415女女女女基本工資獎金扣款應(yīng)發(fā)工資稅金;尖發(fā)工資12000. 00200. 0010. 0012190. 003047. 509142. 507800. 00200. 000. 0010. 008000. 00800. 007200. 003440. 00160. 003590. 00179. 503410. 5010000. 00100.00100. 0010000. 002500. 007500. 005 o:!_h q 資0000工:2:1入入"入人兒兀*.爼2i屮

26、屮和耀肚二羅劉接顯示結(jié)果基本工資獎金扣款應(yīng)發(fā)工資稅金 實發(fā)工資12 3 4 51a 1x 1 ix 1x女女女女女12000. 007800. 00 5700. 003440. 00200. 0010000. 00200. 00 2000. 00 160. 00 100. 0010. 00 0. 0010. 00 100. 00圖3-6插入信息12190. 008000. 00100. 00 7600. 003590. 00 10000. 003047. 50800. 00179. 50 2500. 009142. 507200. 00 760. 003410. 506840. 007500.

27、 00選擇7,保存員工信息 再次瀏覽信息云結(jié)里憫女女女女女 名萌玉康墨 姓sss號 工12 3 4 5基本工資獎金扣款應(yīng)發(fā)工資稅金 ;實發(fā)工資12000. 00200.0010. 0012190. 003047.509142.507800. 00200. 000. 008000.00800. 007200. 005700. 002000. 00100. 00 7600. 00760. 006840. 003440. 00160.0010. 003590.00179. 503410. 5010000.00100.00100. 0010000. 002500. 007500. 00圖3-7再次瀏覽

28、信息選擇9,退出系統(tǒng)*13579包息噩 亠 _m=enj=r ss統(tǒng) ss 加詢?nèi)腧?ii2468 = = = <1 亠=號一乖司 工工息工 轅工覽*5c <c 5c * ocozoc 5coc0®zc=>ij| 選扌# 9"ress any key to continue圖3-8退出系統(tǒng)4總結(jié)該系統(tǒng)操作起來簡單快捷,極大的降低了工作量。不過系統(tǒng)仍然存在許多不 足之處,需要后續(xù)的補(bǔ)充和修改完善。例如:沒有一個完整的信息庫。另外自己 對于基數(shù)排序法這一塊還不夠熟悉,得重新學(xué)習(xí)一遍。課程設(shè)計的主要目的是使學(xué)生一步理解和掌握課堂上所學(xué)各種基本抽象數(shù) 據(jù)類型的邏輯

29、結(jié)構(gòu)、存儲結(jié)構(gòu)和操作實現(xiàn)算法,以及它們在程序中的使用方法; 掌握軟件設(shè)計的基本內(nèi)容和設(shè)計方法,并培養(yǎng)學(xué)生進(jìn)行規(guī)范化軟件設(shè)計的能力; 掌握使用各種計算機(jī)資料和有關(guān)參考資料,提高學(xué)生進(jìn)行程序設(shè)計的基本能力。 提供一個既動手又動腦,獨立實踐的機(jī)會,將課本上的理論知識和實際有機(jī)的結(jié) 合起來,鍛煉分析解決實際問題的能力,從而進(jìn)一步提高了實際運(yùn)用的能力。在做此課程設(shè)計時,初步拿到任務(wù)書還不太清楚從何入手,于是在網(wǎng)上參考 了些資料,這些資料對我后來完成課程設(shè)計有了很大幫助,在后*的設(shè)計中也遇 到不少問題,在老師同學(xué)的幫助下最終完成,也使我深刻體會到“沒有做不到的, 只有想不到的”,“團(tuán)結(jié)就是力量”,“實踐是

30、檢驗真理的標(biāo)準(zhǔn)”。在此希望以后應(yīng)多進(jìn)行這樣的實訓(xùn),加長實踐,培養(yǎng)學(xué)生獨立思考問題的能 力,提高實際操作水平。完成本次課程設(shè)計,一方面對我的知識進(jìn)行了鞏固,另 一方面提前讓我養(yǎng)成了研發(fā)設(shè)計系統(tǒng)的思路和感受。我相信對今后的學(xué)習(xí)和實驗 有著積極的意義。同時我也認(rèn)識到自己的不足和學(xué)習(xí)的永無止境。的確學(xué)如逆水 行舟,不進(jìn)則退!時代在發(fā)展,很多系統(tǒng)就得跟上人們的需求,所以我們還得繼 續(xù)努力!5附錄(源代碼)#include <stdio.h> #include <stdlib.h> #include <string.h> int saveflag=o; 是否需要存盤的標(biāo)

31、志變量struct employee 定義一個員工工資結(jié)構(gòu) char numf 10; 工號char namefl51; char sex4; float paid ; float gotpaid; double realpaid; float extra; float discout; double fare;性別基本工資應(yīng)發(fā)工資實發(fā)工資獎金扣款稅金typedef struct node定義一個鏈表struct employee data; struct node *next;node,*link;/link 1 (注意是:字母1不是數(shù)字1)void add(link 1); 增加 void

32、 disp(link 1); 瀏覽 void del(link 1);刪除void qur(link 1);查詢void sort(link 1);排序void modify(link 1);修改void save(link 1);保存void printe(node *p);血出void printstart();void wrong(); void nofind();node* locate(link l,char findmess,char nameornum); /結(jié)點定位函數(shù)void prinlc();void menu()pnnlr (*n )printf(ut*nh);print

33、f(nt*nh);printf(nt*n“);printf(nt* printf(ht* printf(nt* printf(ht* printf(ut*員工丁資管理系統(tǒng)tj 1 1j 13 5 7 9 rl- r rl r rl.增加員工信息 查詢員工信息 插入員工記錄 保存員工信息 退出系統(tǒng)1 - 1 -2 4 6 8 rl rl刪除員工信息*nh);修改員工信息*nh);員工信息排序m”);瀏覽員工信息*nn);*nn);printf(ut*nn);void disp(link 1) /瀏覽顯示單鏈表中存儲的關(guān)于employee結(jié)構(gòu)屮定義的內(nèi)容ini count=0;node *p;p=

34、l->next; 1是單鏈表中頭結(jié)點,該頭結(jié)點沒有存儲職工信息,指針域指向的后繼結(jié) 點才有職工信息if(!p)p 二二 null printf("n=提示:沒有職工記錄可以顯示!n");return;printf(utttt 顯示結(jié)果n”);printf(nnh);printf(“t工號t姓名t性別t基本工資t獎金t扣款t應(yīng)發(fā)工資t稅金t實發(fā)工資 nh); 打印標(biāo)題printf(nnh);while(p)printe(p);逐條輸出鏈表l1存儲的信息p=p- next;printf(mnu);printf(nnn);void printstart()printf(nn

35、n);void wrong()printf(hn=提示:輸入錯誤!);void nofind()printf(un=提示:沒有找到該職工!nj;void printc() /*本函數(shù)用于輸出屮文*/printf(“t工號t姓名t性別t基本工資t獎金t扣款t應(yīng)發(fā)工資t稅金t實發(fā)工資 nn); void printe(node *p)/*本函數(shù)用于打印鏈表屮某個節(jié)點的數(shù)據(jù)內(nèi)容*/printf(n%-12st %st %st %.2fm %.2fm %.21m %.2fal %.2fnh,p->data.num,p->?p->data.sex,p->data

36、.paid,p->data.extra,p->data.discout,p->data.g olpaid,p->data.fare,p->data.realpaid);node* locate(link l,char findmess,char zcomum) 定位node *r;if(strcmp(zcornum;,numn)=0) / 按工號查詢r=l>n ext;while(r!=null) 、 if(strcmp(r->data.num,findmess)=o) /若找至0,返冋 findmess 值的工號return r;r=r->ne

37、xt;return 0; 若未找到,返回一個空指針void add(link 1)/增加職工node水p,*r,*s; /臨時的結(jié)構(gòu)體指針變量char numf 10;int flag=o;r=l;s=l>next;/鏈表沒有節(jié)點時,s=null;鏈表有節(jié)點時,指向第一個職丁節(jié)點 while(r->next!=null) /如果存在后繼結(jié)點時,r指針后移一個 r=r->next; /指針移至于鏈表最末尾,準(zhǔn)備添加while(l)/每次從第一個節(jié)點開始找,看num是否重復(fù)printf(“請你輸入工號(以o返回上一級菜單 scanf("%s",num);if(

38、strcmp(num,0',)=0) 輸入*0;跳出break;s=l->next;while(s) /工號重復(fù)時,返冋主菜單if(strcmp(s->data.num,num)=o)printf(=>提示:工號為曲勺職工已經(jīng)存在,若要修改請你選擇4修 改!n",num);hag=l;/break;return ;s=s->next;p=(node *)malioc(sizeof(node); 生成沒賦值的新節(jié)點 p strcpy(p->data.num,num);printf(“請輸入姓名門;scanf(h%s,p->)

39、;getchar();printf(“請輸入性別:“);scan f(m %sh ,p->data. sex);getchar();printfc*請輸入基本工資:“);scanf(h%f&p->data.paid);getchar();printfc請輸入獎金:“);scanf(,%f&p->data.extra);getchar();printfc請輸入扣款:“);scanf("%f',&p->data.discout);getchar();p->data.gotpaid=p->data.paid+p->d

40、ata.extra-p->data.discout; if (p->data.gotpaid<2000)p->data.fare=o;else 訐(p->data.gotpaid>=2000&&p->data.gotpaid<4999) p->data.fare=p->data.gotpaid:0.05;else 訐(p->data.gotpaid>=5000&&p->data.gotpaid< 10000) p->data. fare=p->data.gotpaid

41、*0.1;else 訐(p->data.gotpaid>= 10000&&p->data.gotpaid<99999) p>data.fare 二p>data.gotpaid*0.25;else 訐(p->data.gotpaid>= 100000) p->data.fare=p->data.gotpaid*0.3;p->data.realpaid=p->data.golpaid-p->data.fare;p->next=null; 表明這是鏈表的尾部結(jié)點 r->next=p;將新建的結(jié)點

42、加入鏈表尾部中尸p; saveflag=l;void derlink 1)/刪除node *p,*r; 臨時的結(jié)構(gòu)體指針變量char findmess20;if(!l->next) 當(dāng)list無后繼結(jié)點時,提示和結(jié)束返回del()printf(un=>提示:沒有記錄可以刪除!n“);return;printf(”請你輸入要刪除的工號:“); scanf(n%sh,findmess); p=locate(l,findmess,"num"); if(p) r=l; while(r->next!=p) r=r->next; /從第一個結(jié)點找起,直到發(fā)現(xiàn)r-

43、>next=p,跳出循環(huán) r->next=p-> next; free(p); printf(un=>該職工已經(jīng)成功刪除!n“); saveflag=1;elseprintf(un=>提示:沒有找到該職工!n“);void qur(link 1)查詢功能int sei;char findmess20;node *p;實現(xiàn)查詢操作的臨時的結(jié)構(gòu)體指針變量if(!l->next)printf("n=>j示:沒有資料可以查詢!nu); return;printf(un=按工號查找=nh); print”請你輸入要查找的工號:“);scanf(n%sh

44、,findmess);p=locate(l,findmess,"num1');if(p)printf(utttt 查找結(jié)果n”);printstart(); 打印橫殘printc();打印各學(xué)科標(biāo)題printe(p);打印p結(jié)點各個數(shù)據(jù)成員的值printstart(); 打印橫線elseprintfc,n=>提示:沒有找到該職工!n“);void modify(link 1) 修改功能node *p;char findmess20;if(!l->next) printf(hn=>提示:沒有資料可以修改!n”); return;printf(”請你輸入要修改的

45、職工工號:”); scanf("%s",findmess);p 二 locate。,findmess,"num");if(p)printf(hin 輸入新工號(原來是 %s):",p->data.num); scanf(,%s,p->data.num);printf(”請輸入新姓名(原來是 %s):",p->); scanf(u%s,p->);getchar();printf(f,請輸入新性別(原來是 %s):fp->data.sex); scanf(l,%s,p-&g

46、t;data.sex);getchar();printf(hi你輸入新的基本工資(原來是%f):h,p->data.paid); scanf("%f',&p->data.paid);getchar();printf(”請輸入新的獎金(原來是%f):" ,p->data.extra); scanf(n%fp->data.extra);printf(”請輸入新的扣款(原來是 %f):",p->data.discout); scanf(u%rp->data.discout);getchar();p->data.g

47、otpaid=p->data.paid+p->data.extra-p->data.discout;訐(p->data.gotpaid<2000)p->data.fare=o;else 訐(p->data.gotpaid>=2000&&p->data.gotpaid<4999) p->data.fare=p->data.gotpaid*0.05;else 訐(p->dcita.gotpaid>=5000&&p->dcita.gotpaid< 10000) p->

48、data.fare=p->data.gotpaid *0.1;else 訐(p->data.gotpaid>= 10000&&p->data.gotpaid<99999) p->data.fare=p->data.gotpaid*0.25;else if (p->data.gotpaid>= 100000) p->data.fare=p->data.gotpaid*0.3;p->data.realpaid=p->data.golpaidprintf(un=>提示:資料修改成功!it);/shou

49、dsave=l;elseprintf(un=>提示:沒有找到該職工!);void insert(link 1)/插入node *s,*r,*p; /p指向插入位置,p指新插入記錄節(jié)點char ch,new_num10,old_num10; /old_num保存插入點位置z 前的工號,new_num 保存輸入的新i己親的工號int flag=o;s=l->next;systemc'cls");disp(l);while(l)printf(“請你輸入已存在的工號(以o返冋上一級菜單:門; scanf(m%sn,old_num);if(strcmp(old_num,0,

50、)=0) 輸入0;跳出 while(l),即跳出 insert()函數(shù) return;s=l->next; 作用?每次從第一個節(jié)點開始找flag=0;while(s) /*查詢該工號是否存在,flag=l表示該工號存在*/if(strcmp(s->data.num,old_num)=0)hag=l;break;s=s->next;if(flag=l)break; /*若工號存在,則進(jìn)行插入之前的新記錄的輸入操作*/elsegetchar();printf("n=>the number %s is not existing,try again?(y/n):&qu

51、ot;,old_num); scanf(” c",&ch);if(ch='y,|ch='y')conti nue;elsereturn; 冋主菜單以下新記錄的插入新節(jié)點,工號不能跟已存在的工號相同,操作與add()相同printff請你輸入待插入的工號(以o返冋上一級菜單:門;scanf(m%sfnew_num);if(strcmp(new_num,"o")=o) /輸入x);跳出 while(l),即跳出 add()函數(shù)return;s=l->next; /每次從第一個節(jié)點開始找,看num是否重復(fù)while(s) /工號重s

52、i時,返冋主菜單if(strcmp(s->data.num,new_num)=o)printf("=>提示:工號為s'的職工已經(jīng)存在'!n",new_num);flag二 1;return ;s=s->next;p=(node *)malloc(sizeof(node);if(!p)printf("n allocate memory failure "); /*如沒有申請到,打印提示信息*/ retum ;/*返回主界宙*/1strcpy(p > data.num,new_num);printf(”請輸入姓名:“)

53、;scan f("%s",p->);getchar();printf(“請輸入性別:“);scanf(h%s'p->data.sex);getchar();printfc*請輸入基本工資門;scanf("%f&p->data.paid);getchar();printfc請輸入獎金:“);scanf(h%f&p->dataextra);getchar();printf(lf請輸入扣款:j; scanf("%f',&p->data.discout); getchar();p->data.gotpaid=p->data.paid+p->data.extra-p->data.discout; if (p->data.gotpaid<2000)p->data.fare=o;else 訐(p->data.gotpaid>=2000&&p->data.gotpaid<4999) p->data.fare=p->data.golpaid*0.05;else 訐(p->dcita.

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論