南京理工大學(xué)C++課程設(shè)計(jì),工資管理_第1頁
南京理工大學(xué)C++課程設(shè)計(jì),工資管理_第2頁
南京理工大學(xué)C++課程設(shè)計(jì),工資管理_第3頁
南京理工大學(xué)C++課程設(shè)計(jì),工資管理_第4頁
南京理工大學(xué)C++課程設(shè)計(jì),工資管理_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、C+課程設(shè)計(jì)報(bào)告姓名 王鎮(zhèn)窯 學(xué)號(hào) 913104680120 班級(jí) 9131046801 任課教師 錢蕓生 時(shí)間 2014.4 實(shí)驗(yàn)題目 工資管理 評(píng)定難易級(jí)別 A 實(shí)驗(yàn)報(bào)告成績(jī) 一 題目名稱:工資管理二 難度等級(jí):A級(jí)三 課程設(shè)計(jì)要求:1. 用類的形式改寫程序,將程序中工資數(shù)據(jù)用鏈表的形式存放,定義一個(gè)鏈表類,封裝主要操作函數(shù)。2. 顯示,修改,刪除數(shù)據(jù)項(xiàng)時(shí)大小寫通用。3. 工資數(shù)據(jù)按工資值的大小進(jìn)行排序存放。4. 修改、刪除數(shù)據(jù)前增加提示信息,用戶確認(rèn)后才能進(jìn)一步操作,否則操作取消。5. 增加程序的文件輸入輸出功能,在執(zhí)行程序中首先將工資數(shù)據(jù)從文件中讀出再進(jìn)行管理,在程序結(jié)束時(shí)能將工資數(shù)據(jù)

2、保存在原文件中。四.程序結(jié)構(gòu)框圖功能示意圖:開始程序,打開文件,把文件中數(shù)據(jù)讀出寫入內(nèi)存中。文件不存在,則提示。按0結(jié)束程序,將修改后的鏈表數(shù)據(jù)從內(nèi)存中存到文件里。退出程序。5.根據(jù)姓名修改工資記錄。4.根據(jù)姓名刪除工資記錄。3.根據(jù)姓名查詢工資記錄。2.顯示工資記錄。主菜單1.添加工資記錄。返回主菜單返回主菜單開始程序主函數(shù)具體流程:建立一個(gè)鏈表類對(duì)象運(yùn)行函數(shù)將文件中的數(shù)據(jù)寫入內(nèi)存中,如果不存在文件輸出提示輸出主菜單內(nèi)容從鍵盤提取字符判斷字符是不是0不是0是調(diào)用鏈表類函數(shù)實(shí)現(xiàn)添加工資記錄的功能。判斷是不是1調(diào)用鏈表類函數(shù)把整個(gè)鏈表打印出來。不是1是0是判斷是不是2調(diào)用鏈表類函數(shù),鍵盤輸入姓名

3、查找出相應(yīng)的結(jié)點(diǎn),并打印出來。不是2是判斷是不是3不是3調(diào)用鏈表類函數(shù),鍵盤輸入姓名查找出相應(yīng)的結(jié)點(diǎn),修改上一節(jié)點(diǎn)的next指針刪除結(jié)點(diǎn)。是判斷是不是4不是4調(diào)用鏈表類函數(shù),鍵盤輸入姓名查找出相應(yīng)的結(jié)點(diǎn),重新輸入工資,賦值給相應(yīng)的數(shù)據(jù)類。 是判斷是不是5調(diào)用鏈表類函數(shù)將數(shù)據(jù)從內(nèi)存轉(zhuǎn)存到文件中。結(jié)束程序五程序設(shè)計(jì)思想整個(gè)程序是我和吳龍生同學(xué)合作完成,我們先完成了主函數(shù)的編寫,再把程序各個(gè)功能的實(shí)現(xiàn)交由類函數(shù)實(shí)現(xiàn)。一共有1.添加工資記錄。2.顯示工資記錄。3.根據(jù)姓名查詢工資記錄。4.根據(jù)姓名刪除工資記錄。5.根據(jù)姓名修改工資記錄,再加上從文件寫入內(nèi)存,從內(nèi)存寫入文件,七個(gè)主要功能函數(shù),我們把這些

4、函數(shù)分工編寫,再整合整個(gè)程序。用類改編程序,我們建立了一個(gè)數(shù)據(jù)類(用于存放姓名和工資),一個(gè)結(jié)點(diǎn)類(存放數(shù)據(jù)類指針和下一個(gè)結(jié)點(diǎn)的指針),一個(gè)鏈表類(存放鏈表的頭指針和結(jié)點(diǎn)的個(gè)數(shù),同時(shí)封裝了對(duì)鏈表操作的所有函數(shù))。雖然各個(gè)程序有不同的具體要求,但鏈表的操作大同小異,所不同的只是結(jié)點(diǎn)那部分的數(shù)據(jù)類型不同。所以根據(jù)這一特點(diǎn),可以將鏈表定義成一個(gè)類,涉及結(jié)點(diǎn)數(shù)據(jù)的輸入、輸出、復(fù)制等。在結(jié)點(diǎn)中涉及較多的是具體數(shù)據(jù)的形式,所以將具體的數(shù)據(jù)形式定義成數(shù)據(jù)類型的指針,所有針對(duì)數(shù)據(jù)的操作都轉(zhuǎn)換為對(duì)指針的操作,在數(shù)據(jù)類中再具體實(shí)現(xiàn)。這樣,結(jié)點(diǎn)的操作也可以像鏈表一樣通用。最后,再將數(shù)據(jù)具體形式定義成一個(gè)類,涉及數(shù)據(jù)

5、的輸入格式、輸出形式、比較內(nèi)容的大小等。那么,針對(duì)不同的數(shù)據(jù)管理,只要改動(dòng)這部分就可以了。這樣就實(shí)現(xiàn)程序的結(jié)構(gòu)化了!主函數(shù),開始運(yùn)行先建立一個(gè)鏈表類類對(duì)象,將文件中的數(shù)據(jù)讀到內(nèi)存中。然后再輸出整個(gè)主菜單,鍵入相應(yīng)的命令執(zhí)行相應(yīng)的鏈表類函數(shù)實(shí)現(xiàn)功能。最后再把修改后的鏈表中的數(shù)據(jù)寫入文件中,退出。六程序重要功能的實(shí)現(xiàn)方法1.添加工作記錄,工資數(shù)據(jù)按工資值的大小進(jìn)行排序存放。主菜單中添加工資記錄的功能會(huì)先調(diào)用鏈表類Clist的成員函數(shù)voidAddRecord()。該函數(shù)會(huì)生成一個(gè)數(shù)據(jù)類成員和一個(gè)結(jié)點(diǎn)類成員,通過鍵盤輸入員工的姓名和工資,并把數(shù)據(jù)賦值給數(shù)據(jù)類成員把數(shù)據(jù)類成員的指針賦給結(jié)點(diǎn)類成員,然后

6、再調(diào)用Clist的成員函數(shù)voidinlist(CNode*node0),并把新生成的結(jié)點(diǎn)類指針傳遞過去,該函數(shù)會(huì)在原有鏈表中通過工資數(shù)據(jù)的比較,按工資大小順序給該結(jié)點(diǎn)找到位置并插入到原有的鏈表中(如果鏈表不存在即運(yùn)行該函數(shù)時(shí)頭指針值為0,則該結(jié)點(diǎn)就賦值給鏈表類成員的頭指針,作為鏈表中的唯一結(jié)點(diǎn)存在。)由于一開始每一個(gè)結(jié)點(diǎn)都是由小到大插入的,所以該鏈表最終工資數(shù)據(jù)一定是按工資值的大小進(jìn)行排序存放的。鏈表類的增加工資記錄的函數(shù):voidAddRecord()CNode*pnode;CSalary*psal;charname020;doublesalary0;cout<<"請(qǐng)

7、輸入姓名(按0結(jié)束):"cin>>name0;while(strcmp(name0,"0")cout<<"請(qǐng)輸入工資:"cin>>salary0;cin.ignore();psal=newCSalary;psal->SetSalary(name0,salary0);pnode=newCNode;pnode->InputDate(psal);inlist(pnode);cout<<"請(qǐng)輸入姓名(按0結(jié)束):"cin>>name0;cout<<e

8、ndl<<endl;鏈表類的按照工資大小插入節(jié)點(diǎn)的函數(shù)voidinlist(CNode*node0)/按照工資大小插入節(jié)點(diǎn)的類函數(shù)CNode*p0;if(phead=0)phead=node0;n+;elseCNode*p0,*p1;p0=phead;p1=phead->pnext;if(node0->pdata->getsalary()<=phead->pdata->getsalary()node0->pnext=phead;phead=node0;elsefor(inti=0;i<(n-1);i+)if(node0->pda

9、ta->getsalary()>p0->pdata->getsalary()&&(node0->pdata->getsalary()<=p1->pdata->getsalary()p0->pnext=node0,node0->pnext=p1;p0=p0->pnext,p1=p0->pnext;if(node0->pdata->getsalary()>p0->pdata->getsalary()p0->pnext=node0,node0->pnext=0;n+

10、;2.顯示工資記錄。主菜單中顯示工資的功能會(huì)先調(diào)用鏈表類Clist的成員函數(shù)voidShowList(),該函數(shù)會(huì)通過循環(huán)語句,調(diào)用每一個(gè)結(jié)點(diǎn)對(duì)應(yīng)的結(jié)點(diǎn)類函數(shù)voidShowNode()函數(shù),調(diào)用結(jié)點(diǎn)對(duì)應(yīng)數(shù)據(jù)類成員的數(shù)據(jù)類函數(shù)voidshow()把員工的姓名和工資數(shù)據(jù)打印在顯示屏上。鏈表類的打印工資記錄的函數(shù)voidShowList()/打印工資記錄的類函數(shù)CNode*p1;p1=phead;inti=0;for(;i<n;i+)p1->ShowNode();p1=p1->pnext;結(jié)點(diǎn)類的顯示函數(shù)voidShowNode()pdata->show();數(shù)據(jù)類的顯示函

11、數(shù)voidshow()cout<<"姓名:"<<name<<endl<<"工資:"<<salary<<endl;3.根據(jù)姓名查詢工資記錄。主菜單中根據(jù)姓名查詢工資的功能是調(diào)用鏈表類的函數(shù)voidFindRecord()來實(shí)現(xiàn),該函數(shù)通過循環(huán)語句查找所有節(jié)點(diǎn),對(duì)每一節(jié)點(diǎn)會(huì)執(zhí)行數(shù)據(jù)類的函數(shù)intcompare(charaa),該函數(shù)的功能是把字符串a(chǎn)a和類成員字符串name進(jìn)行比較如果兩個(gè)字符串相同會(huì)返回1,否則返回0,在比較的時(shí)候會(huì)把name和aa中所有字符轉(zhuǎn)換為小寫字母進(jìn)行比較,以實(shí)

12、現(xiàn)大小寫通用的功能。如果返回值為1時(shí),鏈表類函數(shù)就會(huì)執(zhí)行數(shù)據(jù)類函數(shù)的voidshow()函數(shù),把該結(jié)點(diǎn)的工資記錄打印出來,直至比較完所有結(jié)點(diǎn)。所以該功能可以打印出鏈表中所有同名(大小寫通用)的工資記錄。鏈表類的按照姓名查找工資記錄的類函數(shù):voidFindRecord()/按照姓名查找工資記錄的類函數(shù)。cout<<"請(qǐng)輸入要查找的姓名"<<endl;charcc20;cin>>cc;strlwr(cc);CNode*p1;p1=phead;inti=0,ss=0;for(;i<n;i+)if(p1->pdata->com

13、pare(cc)p1->ShowNode();ss+;p1=p1->pnext;if(ss=0)cout<<"未查找到該員工數(shù)據(jù)!"<<endl;elsecout<<"共查找到"<<ss<<"位員工的數(shù)據(jù),如上所示。"數(shù)據(jù)類的比較函數(shù):intcompare(charaa)chardd20;strcpy(dd,name);strlwr(dd);intbb=strcmp(aa,dd);if(bb=0)bb=1;elsebb=0;returnbb;4.根據(jù)姓名查找并刪除

14、工資記錄。主菜單中根據(jù)姓名查找并刪除工資記錄的功能是調(diào)用鏈表類中的函數(shù)void DeleteRecord()實(shí)現(xiàn)的。該函數(shù)在執(zhí)行查詢功能時(shí)與函數(shù)voidFindRecord()基本差不多也是大小寫通用,但是為了方便刪除結(jié)點(diǎn),也是為了可以應(yīng)付同名或者姓名大小寫不同但是字母一樣的情況出現(xiàn)(例如Mike,和mike),該函數(shù)建立了一個(gè)結(jié)點(diǎn)類的指針數(shù)組,每找到一個(gè)結(jié)點(diǎn)會(huì)把該結(jié)點(diǎn)的上一節(jié)點(diǎn)的指針保存在數(shù)組中(因?yàn)橐纳弦唤Y(jié)點(diǎn)的next指針,所以要保存上一指針),如果是頭指針則把0賦給數(shù)組。接著把查詢結(jié)果都打印出來,由用戶選擇要?jiǎng)h除哪個(gè)用戶數(shù)據(jù)。用戶選擇后會(huì)輸出確認(rèn)刪除的語句,用戶確認(rèn)后開始刪除。如果數(shù)

15、組成員為0,則修改頭指針為下一結(jié)點(diǎn),如果是正常指針則修改該指針指向的next指針為下下個(gè)結(jié)點(diǎn)指針。鏈表類中按照姓名查找并刪除工資記錄的函數(shù)void DeleteRecord()/按照姓名查找并刪除工資記錄的類函數(shù)。cout<<"請(qǐng)輸入要查找的姓名"<<endl;char cc20;cin>>cc;strlwr(cc); CNode *p1,*p0,*o5;p0=0;p1=phead;int i=0,ss=0;for(;i<n;i+)if(p1->pdata->compare(cc)cout<<"第&

16、quot;<<ss+1<<"位:"oss=p0;p1->ShowNode();ss+;p0=p1;p1=p1->pnext;if(ss=0)cout<<"未查找到該員工數(shù)據(jù)!"<<endl;elsecout<<"共查找到"<<ss<<"位員工的數(shù)據(jù),如上所示。要?jiǎng)h除哪位員工的數(shù)據(jù)?"<<endl;int kk;CNode *p1;cin>>kk;kk=kk-1;if(okk=0)cout<&

17、lt;"確定要將員工"<<phead->pdata->getname()<<"的工資記錄刪除嗎?"<<endl<<"1.yes 2.no"<<endl;elsecout<<"確定要將員工"<<okk->pnext->pdata->getname()<<"的工資記錄刪除嗎?"<<endl<<"1.yes 2.no"<<

18、endl;int ll;cin>>ll; if(ll=1) if(okk=0)CNode *p5;p5=phead;phead=phead->pnext;delete p5;n-;elseCNode *p5;p5=okk->pnext;p1=okk->pnext->pnext;okk->pnext=p1;n-;delete p5;elsecout<<"操作取消返回主菜單!"<<endl;4.根據(jù)姓名查找并刪除工資記錄。主菜單中根據(jù)姓名查找并刪除工資記錄的功能是調(diào)用鏈表類的函數(shù)void WriteRecord(

19、)來實(shí)現(xiàn),該函數(shù)使用了void DeleteRecord()的思想,采用同樣的方式查找結(jié)點(diǎn),也是大小寫通用,并也定義了一個(gè)結(jié)點(diǎn)類指針數(shù)組,把查找到的符合條件的上一結(jié)點(diǎn)的指針保存在數(shù)組中,在查詢完畢后,把所有找到的符合條件的結(jié)點(diǎn)打印出來,供用戶選擇刪除哪個(gè)數(shù)據(jù),在用戶選擇后,用戶可以重新輸入工資,輸入后,會(huì)輸出是否確認(rèn)修改的語句,用戶確認(rèn)后再修改對(duì)應(yīng)結(jié)點(diǎn)的數(shù)據(jù)類的工資數(shù)據(jù)。因?yàn)樾薷暮笥脩艄べY數(shù)據(jù)排序就會(huì)出問題,為了解決此辦法接著會(huì)再新建一個(gè)結(jié)點(diǎn)與修改后結(jié)點(diǎn)相同,把鏈表里原來的結(jié)點(diǎn)刪除,再運(yùn)行函數(shù)void inlist()按照工資大小插入結(jié)點(diǎn)!鏈表類中按照姓名查找并修改工資記錄的函數(shù):void W

20、riteRecord()/按照姓名查找并修改工資記錄的類函數(shù)。cout<<"請(qǐng)輸入要查找的姓名"<<endl;char cc20;cin>>cc;strlwr(cc); CNode *p1,*o5,*p0;p1=phead;p0=0;int i=0,ss=0;for(;i<n;i+)if(p1->pdata->compare(cc)cout<<"第"<<ss+1<<"位:"oss=p0;p1->ShowNode();ss+;p0=p1;p1

21、=p1->pnext;if(ss=0)cout<<"未查找到該員工數(shù)據(jù)!"<<endl;elsecout<<"共查找到"<<ss<<"位員工的數(shù)據(jù),如上所示。要修改哪位員工的數(shù)據(jù)?"<<endl;int kk;cin>>kk;kk=kk-1;double mm;cout<<"請(qǐng)輸入修改后的工資:"cin>>mm;cout<<endl;if(okk=0)cout<<"確定

22、要將員工"<<phead->pdata->getname()<<"的工資改為:"<<mm<<"嗎?"<<endl<<"1.yes 2.no"<<endl;elsecout<<"確定要將員工"<<okk->pnext->pdata->getname()<<"的工資改為:"<<mm<<"嗎?"<

23、;<endl<<"1.yes 2.no"<<endl; int ll;cin>>ll;if(ll=1) if(okk=0)CNode *p5;p5=phead;phead=phead->pnext;n-;CNode *pp; CSalary *ppp;pp=new CNode;ppp=new CSalary;pp->pdata=ppp;ppp->SetSalary(p5->pdata->getname(),mm);inlist(pp);delete p5;else if(okk->pnext-&g

24、t;pnext!=0) CNode *p5;p5=okk->pnext;p1=okk->pnext->pnext;okk->pnext=p1;n-;CNode *pp; CSalary *ppp;pp=new CNode;ppp=new CSalary;pp->pdata=ppp;ppp->SetSalary(p5->pdata->getname(),mm);inlist(pp);delete p5;elseCNode *p5;p5=okk->pnext;okk->pnext=0;n-;CNode *pp; CSalary *ppp;

25、pp=new CNode;ppp=new CSalary;pp->pdata=ppp;ppp->SetSalary(p5->pdata->getname(),mm);inlist(pp);delete p5;elsecout<<"操作取消返回主菜單!"<<endl;5. 程序的文件輸入輸出功能。在執(zhí)行程序中首先將工資數(shù)據(jù)從文件中讀出再進(jìn)行管理,在程序結(jié)束時(shí)能將工資數(shù)據(jù)保存在原文件中。該部分的功能也是通過倆個(gè)鏈表類的函數(shù)void infire0()和void outfire0()實(shí)現(xiàn)的。在void infire0()函數(shù)中會(huì)先以

26、二進(jìn)制的模式打開文件,在把鏈表類的成員n(表示結(jié)點(diǎn)個(gè)數(shù))寫在(四個(gè)字節(jié))文件的開頭,再按照鏈表順序把一個(gè)個(gè)結(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)類的數(shù)據(jù)寫入內(nèi)存中,直到把n個(gè)結(jié)點(diǎn)寫完。內(nèi)存寫入文件的函數(shù):void outfire0()/將內(nèi)存中的鏈表內(nèi)容轉(zhuǎn)存到文件中的類函數(shù)ofstream outfire;outfire.open("aa.dat",ios:out|ios:binary);int bb;bb=n;outfire.write(char *)&bb,4);int k=0;CNode *p0;p0=phead;for(;k<bb;k+)outfire.write(char

27、*)p0->pdata,sizeof(CSalary);p0=p0->pnext;而在函數(shù)void infire0()中對(duì)應(yīng)著存儲(chǔ)規(guī)則,會(huì)先以二進(jìn)制的方式打開文檔(如果文檔不存在則打開失敗并輸出提示語句),再讀取開頭四個(gè)字節(jié)存入主函數(shù)中建立的鏈表類的n的地址,接著用一個(gè)循環(huán)語句執(zhí)行一次循環(huán)語句就建立新的結(jié)點(diǎn)類和一個(gè)數(shù)據(jù)類成員,并把文檔中接著的sizeof(CSalary)個(gè)字節(jié)讀入到數(shù)據(jù)類中,把數(shù)據(jù)類的指針賦給結(jié)點(diǎn)類的成員pdata,修改pnxet,直至建立好n個(gè)結(jié)點(diǎn),最終就利用文檔中的數(shù)據(jù)建好了整個(gè)鏈表。把文檔中內(nèi)容寫入內(nèi)存的函數(shù):void infire0()/將文件中的數(shù)據(jù)讀取

28、出來到鏈表中ifstream infire;infire.open("aa.dat",ios:binary|ios:nocreate); if(!infire)cout<<"未存在工資記錄請(qǐng)?zhí)砑佑涗?quot;<<endl; elseint bb;infire.read(char *)&bb,4);n=bb; CSalary *p1;CNode *p0;p0=new CNode;int i=0;for(;i<n;i+)p1=new CSalary; infire.read(char *)p1,sizeof(CSalary);p

29、0->pdata=p1; p0->pnext=new CNode;if(i=0)phead=p0;p0=p0->pnext;p0->pnext=0; ;七總結(jié)整個(gè)程序都是我們利用已學(xué)的C+知識(shí),參考著源程序編寫的,在編寫過程中難免會(huì)有些東西不會(huì),例如文件的輸入和輸出,為了解決這個(gè)問題惡補(bǔ)了一下這方面的知識(shí)。最后也成功地把這個(gè)問題解決了!源程序中也有些語句看不懂,翻翻書,在網(wǎng)上查查,學(xué)會(huì)了很多c+的知識(shí)!在編寫這個(gè)程序中還學(xué)到了其他的東西,為了完成整個(gè)管理程序,我們把所有的功能的實(shí)現(xiàn)通通分解為一個(gè)個(gè)函數(shù)。把整個(gè)大的問題分解為小問題,一個(gè)個(gè)問題分工合作完成,最終完成了這個(gè)程

30、序!能憑借自己的手完成這個(gè)程序,最后真的很有成就感,似乎明白了那些it男為什么面對(duì)著如此枯燥的代碼還能津津有味的心境!九源程序代碼#include <stdio.h>#include <conio.h>#include <string.h>#include <iostream.h>#include <fstream.h>class CSalary/數(shù)據(jù)類private:char name20;/姓名double salary;/工資public:CSalary(void)strcpy(name,"/0");sala

31、ry=0.0;CSalary(char *p,double aa)strcpy(name,p);salary=aa;void SetSalary(char *p,double aa)strcpy(name,p);salary=aa;void SetSalary(double aa)salary=aa;double getsalary()return salary;char *getname()return name;int compare(char aa)char dd20;strcpy(dd,name);strlwr(dd);int bb=strcmp(aa,dd);if(bb=0)bb=1

32、;else bb=0;return bb;void show()cout<<"姓名:"<<name<<endl<<"工資:"<<salary<<endl;class CNode /結(jié)點(diǎn)類CSalary *pdata;CNode *pnext;public:CNode()pdata=0;pnext=0;CNode(CNode &node)pdata=node.pdata;pnext=node.pnext;void InputDate(CSalary * pSal)pdata=p

33、Sal;void ShowNode()pdata->show();CSalary *GetDate()return pdata;CNode *Getnext()return pnext; friend class Clist;class Clist /鏈表類protected:CNode *phead;int n;public:Clist()phead=0;n=0;Clist()/析構(gòu)函數(shù)CNode *p1,*p2;CSalary *p3;p1=phead;p2=p1->pnext;p3=p1->pdata;for(int i=0;i<(n-1);i+)delete p

34、1,p3;p1=p2;p2=p1->pnext;p3=p1->pdata; delete p1,p3;void inlist(CNode *node0)/按照工資大小插入節(jié)點(diǎn)的類函數(shù)if(phead=0)phead=node0;n+;elseCNode *p0,*p1;p0=phead;p1=phead->pnext;if (node0->pdata->getsalary()<=phead->pdata->getsalary()node0->pnext=phead;phead=node0;elsefor(int i=0;i<(n-1)

35、;i+)if(node0->pdata->getsalary()>p0->pdata->getsalary()&&(node0->pdata->getsalary()<=p1->pdata->getsalary()p0->pnext=node0,node0->pnext=p1;p0=p0->pnext,p1=p0->pnext;if(node0->pdata->getsalary()>p0->pdata->getsalary()p0->pnext=node0,

36、node0->pnext=0;n+; void AddRecord()/增加工資記錄的類函數(shù)CNode *pnode;CSalary *psal;char name020;double salary0;cout<<"請(qǐng)輸入姓名(按0結(jié)束):"cin>>name0;while(strcmp(name0,"0")cout<<"請(qǐng)輸入工資:"cin>>salary0;cin.ignore();/緩沖psal=new CSalary;psal->SetSalary(name0,sal

37、ary0);pnode=new CNode;pnode->InputDate(psal); inlist(pnode); cout<<"請(qǐng)輸入姓名(按0結(jié)束):" cin>>name0;cout<<endl<<endl; void ShowList()/打印工資記錄的類函數(shù)CNode *p1;p1=phead;int i=0;for(;i<n;i+)p1->ShowNode();p1=p1->pnext;void FindRecord()/按照姓名查找工資記錄的類函數(shù)。cout<<"

38、;請(qǐng)輸入要查找的姓名"<<endl;char cc20;cin>>cc;strlwr(cc); CNode *p1;p1=phead;int i=0,ss=0;for(;i<n;i+)if(p1->pdata->compare(cc)p1->ShowNode();ss+;p1=p1->pnext;if(ss=0)cout<<"未查找到該員工數(shù)據(jù)!"<<endl;elsecout<<"共查找到"<<ss<<"位員工的數(shù)據(jù),如

39、上所示。"void DeleteRecord()/按照姓名查找并刪除工資記錄的類函數(shù)。cout<<"請(qǐng)輸入要查找的姓名"<<endl;char cc20;cin>>cc;strlwr(cc); CNode *p1,*p0,*o5;p0=0;p1=phead;int i=0,ss=0;for(;i<n;i+)if(p1->pdata->compare(cc)cout<<"第"<<ss+1<<"位:"oss=p0;p1->ShowNo

40、de();ss+;p0=p1;p1=p1->pnext;if(ss=0)cout<<"未查找到該員工數(shù)據(jù)!"<<endl;elsecout<<"共查找到"<<ss<<"位員工的數(shù)據(jù),如上所示。要?jiǎng)h除哪位員工的數(shù)據(jù)?"<<endl;int kk;CNode *p1;cin>>kk;kk=kk-1;if(okk=0)cout<<"確定要將員工"<<phead->pdata->getname()&

41、lt;<"的工資記錄刪除嗎?"<<endl<<"1.yes 2.no"<<endl;elsecout<<"確定要將員工"<<okk->pnext->pdata->getname()<<"的工資記錄刪除嗎?"<<endl<<"1.yes 2.no"<<endl;int ll;cin>>ll; if(ll=1) if(okk=0)CNode *p5;p5=p

42、head;phead=phead->pnext;delete p5;n-;elseCNode *p5;p5=okk->pnext;p1=okk->pnext->pnext;okk->pnext=p1;n-;delete p5;elsecout<<"操作取消返回主菜單!"<<endl;void WriteRecord()/按照姓名查找并修改工資記錄的類函數(shù)。cout<<"請(qǐng)輸入要查找的姓名"<<endl;char cc20;cin>>cc;strlwr(cc); CN

43、ode *p1,*o5,*p0;p1=phead;p0=0;int i=0,ss=0;for(;i<n;i+)if(p1->pdata->compare(cc)cout<<"第"<<ss+1<<"位:"oss=p0;p1->ShowNode();ss+;p0=p1;p1=p1->pnext;if(ss=0)cout<<"未查找到該員工數(shù)據(jù)!"<<endl;elsecout<<"共查找到"<<ss<

44、<"位員工的數(shù)據(jù),如上所示。要修改哪位員工的數(shù)據(jù)?"<<endl;int kk;cin>>kk;kk=kk-1;double mm;cout<<"請(qǐng)輸入修改后的工資:"cin>>mm;cout<<endl;if(okk=0)cout<<"確定要將員工"<<phead->pdata->getname()<<"的工資改為:"<<mm<<"嗎?"<<en

45、dl<<"1.yes 2.no"<<endl;elsecout<<"確定要將員工"<<okk->pnext->pdata->getname()<<"的工資改為:"<<mm<<"嗎?"<<endl<<"1.yes 2.no"<<endl; int ll;cin>>ll;if(ll=1) if(okk=0)CNode *p5;p5=phead;phea

46、d=phead->pnext;n-;CNode *pp;CSalary *ppp;pp=new CNode;ppp=new CSalary;pp->pdata=ppp;ppp->SetSalary(p5->pdata->getname(),mm);inlist(pp);delete p5;else if(okk->pnext->pnext!=0) CNode *p5;p5=okk->pnext;p1=okk->pnext->pnext;okk->pnext=p1;n-;CNode *pp;CSalary *ppp;pp=new

47、CNode;ppp=new CSalary;pp->pdata=ppp;ppp->SetSalary(p5->pdata->getname(),mm);inlist(pp);delete p5;elseCNode *p5;p5=okk->pnext;okk->pnext=0;n-;CNode *pp;CSalary *ppp;pp=new CNode;ppp=new CSalary;pp->pdata=ppp;ppp->SetSalary(p5->pdata->getname(),mm);inlist(pp);delete p5;elsecout<<"操作取消返回主菜單!"<<endl;int getn()return n; void outfire0()/將內(nèi)存中的鏈表內(nèi)容轉(zhuǎn)存到文件中的類函數(shù)ofstream outfire;outfi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論