版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、中南大學(xué)本科生課程設(shè)計(jì)(實(shí)踐)任務(wù)書、設(shè)計(jì)報(bào)告(C+應(yīng)用基礎(chǔ)課程設(shè)計(jì))題 目企業(yè)職工工資管理系統(tǒng)學(xué)生學(xué)號學(xué)生姓名指學(xué) 院物理學(xué)院專業(yè)班級指導(dǎo)老師計(jì)算機(jī)基礎(chǔ)教學(xué)實(shí)驗(yàn)中心2010年07月09日企業(yè)職工工資管理系統(tǒng)摘要:在VC+環(huán)境下編寫一個(gè)基于控制臺方式( Win32 Console Application)的 工資管理系統(tǒng),以實(shí)現(xiàn)簡單地處理一個(gè)月內(nèi)某企業(yè)職工工資信息。關(guān)鍵詞:工資管理,基本工資,個(gè)人所得稅。1.企業(yè)工資管理系統(tǒng)開發(fā)設(shè)計(jì)思想對于一個(gè)管理系統(tǒng)而言, 主函數(shù),函數(shù)以及成員函數(shù)是其重要組成部分。系統(tǒng)開發(fā)設(shè)計(jì)也是從該三方面入手,下面加以詳細(xì)闡述。1)主函數(shù)的設(shè)計(jì)在做一個(gè)系統(tǒng)開發(fā)前, 一定要
2、明確系統(tǒng)的功能以及功能實(shí)現(xiàn)時(shí)的輸出 (屏幕顯示) 。編寫主函數(shù)的主要任務(wù)就是確定調(diào)用函數(shù)以及控制屏幕顯示。確定調(diào)用的函數(shù)根據(jù)要求, 該系統(tǒng)至少應(yīng)該實(shí)現(xiàn)五種基本功能: 輸出工作信息, 刪除工資信息,修改工資信息,查找工資信息,列出所有信息。實(shí)現(xiàn)以上任何一種功能都必須要調(diào)用一個(gè)函數(shù),根據(jù)標(biāo)識符的定義規(guī)則,依次命名為 AddNew(),DoDelete(),DoMotify(),DoFind(),List().屏幕顯示一個(gè)系統(tǒng)要想處理信息, 首先必須要輸出菜單及提示信息, 通過用戶在鍵盤上的輸入來選擇某個(gè)功能。本系統(tǒng)的屏幕顯示如上。為實(shí)現(xiàn)該屏幕顯示,輸出語句完全可以放在main()函數(shù)中,但為了使主
3、函數(shù)清晰明了,我設(shè)計(jì)了一個(gè)菜單函數(shù)Main()供其調(diào)用。(2)函數(shù)的設(shè)計(jì)編寫函數(shù)的目的就是編寫一個(gè)能實(shí)現(xiàn)某種功能的函數(shù)供主函數(shù)調(diào)用。根據(jù)C+ 面向?qū)ο蟮奶攸c(diǎn), 函數(shù)也可以調(diào)用類中的成員函數(shù)。 這樣主函數(shù), 函數(shù)以及成員函數(shù)之間的層次分明, 關(guān)系就清晰明了, 不會有冗長的感覺。 函數(shù)設(shè)計(jì)的主要任務(wù)是確定調(diào)用的成員函數(shù)以及屏幕顯示。確定調(diào)用的成員函數(shù)。不同的函數(shù)調(diào)用的成員函數(shù)是不盡相同的, 基本上每個(gè)函數(shù)都有一個(gè)對應(yīng)的成員函數(shù),例如 AddNew()與 AddItem(),DoDelete()與 RemoveItem(),DoFind()與 Search() ,DoMotify()與 Replac
4、e(),List(k Worker.List()對應(yīng),這些成員函數(shù)都是共 有函數(shù), 并且只被其對應(yīng)函數(shù)唯一調(diào)用一次。 當(dāng)然, 每個(gè)函數(shù)不可能只調(diào)用一個(gè)成員函數(shù),例如 AddNew()還調(diào)用了另外兩個(gè)函數(shù)Input ()和Actualpay(>屏幕顯示編寫函數(shù)也需要控制輸出以及功能間的轉(zhuǎn)換, 從而每一個(gè)函數(shù)都需要有一個(gè)循環(huán)來控制其結(jié)束。結(jié)束的條件都是“當(dāng)輸入的編號為 -1 時(shí)結(jié)束” ,循環(huán)語句有while也有 dowhile,例如 DoDelete()和 DoFind()用的是 do - while, AddNew()用 到的是 while 語句。( 3)成員函數(shù)的設(shè)計(jì)。成員函數(shù)是系統(tǒng)的靈
5、魂,因?yàn)樗械奶幚磉^程的細(xì)節(jié)都在成員函數(shù)中完成的。 編寫成員函數(shù)實(shí)際上就是一個(gè)算法的實(shí)現(xiàn)。 成員函數(shù)的設(shè)計(jì)包括兩方面內(nèi)容:成員函數(shù)算法的實(shí)現(xiàn)和成員函數(shù)過程的實(shí)現(xiàn)。成員函數(shù)算法的實(shí)現(xiàn)工資管理系統(tǒng)不能單憑數(shù)組來處理數(shù)據(jù), 因?yàn)槠髽I(yè)職工數(shù)是不確定的, 并且數(shù)組在刪除和查找某條信息是相當(dāng)繁瑣。 所以該系統(tǒng)需要一個(gè)全新的數(shù)據(jù)處理方式鏈表。 鏈表是最簡單也是最常用的一種動態(tài)數(shù)據(jù)結(jié)構(gòu), 它是對動態(tài)獲得的內(nèi)存進(jìn)行組織的一種結(jié)構(gòu)。它不需要實(shí)現(xiàn)定義固定的長度,靈活性更強(qiáng)鏈表是算法的關(guān)鍵。在添加新的數(shù)據(jù)時(shí),可以表頭插入也可以表尾插入,這兩種插入方法決定了其他成員函數(shù)數(shù)據(jù)的處理。本系統(tǒng)中采取的是表尾插入的方法。在刪除
6、某信息時(shí)需要判斷數(shù)據(jù)是在表頭,表中還是表尾,如果刪除的是在表中,則需要將刪除的前后鏈表連接起來??傊?,本系統(tǒng)大量運(yùn)用了鏈表的 5種基本操作:建立鏈表、鏈表的插入、刪除、輸入和查找。成員函數(shù)過程的實(shí)現(xiàn)算法確定后還需要控制屏幕顯示、條件的判斷以及調(diào)用其它成員函數(shù)。成員 函數(shù)之間是可以相互調(diào)用的,例如成員函數(shù)List()就調(diào)用了成員函數(shù) ListCount()來統(tǒng)計(jì)當(dāng)前鏈表信息的總數(shù),同時(shí)還調(diào)用了成員函數(shù) Print()來輸出Worker_pay() 的信息。整個(gè)過程中還有一個(gè)重要的指針,Worker_pay *Find(),它被Search。RemoveItem()以及AddItem()所調(diào)用。其
7、次成員函數(shù)中大量運(yùn)用到了程序控制結(jié) 構(gòu)。例如,AddItem()中用if來判斷是否是鏈表的表頭,List()中用到了 while語句 來實(shí)現(xiàn)循環(huán)輸出。最后屏幕上則需要顯示一些完成了某種功能的標(biāo)志,例如“成功刪除編號為xx的信息”,“成功修改編號為xx的信息”等。(3)系統(tǒng)結(jié)構(gòu)框架系統(tǒng)的結(jié)構(gòu)框架主要是系統(tǒng)的流程圖以及函數(shù)之間的調(diào)用關(guān)系,該圖能描述系統(tǒng)清晰準(zhǔn)確的表現(xiàn)出系統(tǒng)的功能實(shí)現(xiàn)。職工工資管理系統(tǒng)結(jié)構(gòu)框架圖.職工工資管添加職工工資除息.刪 除 職 工 工系名獨(dú)設(shè)一匕該工資管理系統(tǒng)四蟬ew| 5個(gè)理DoMf坦管有其也LS軟能以及其設(shè)計(jì)。F面對系統(tǒng)的功能和模塊E(1)輸入模塊RemovrItemAd
8、dItemReplace()輸入模塊的功能是創(chuàng)建存儲職工H資信息Searph()信息。其中的信息包括職的存儲系統(tǒng)以及添加某職工的工資陽勺,基本工資,津貼,房租,交通費(fèi)以退出為實(shí)現(xiàn)輸入的功能,有曬個(gè)方面的任務(wù):定義結(jié)構(gòu)體以及建立鏈表。行儲蓄。定義結(jié)構(gòu)體結(jié)構(gòu)體的名稱為Worker_pay,其中包含的信息有職工編號(一結(jié)束num),基本工資(pay0),津貼(pay1),房租(pay2),交通費(fèi)(pay3)儲蓄(pay4)以及個(gè)人所得稅(tax),應(yīng)扣數(shù)(deduct),實(shí)發(fā)數(shù)(actualpay)定義一個(gè)pay的數(shù)組時(shí)為了簡化變量的定義,使程序更有條理。建立鏈表通過從表尾插入的方法來建立鏈表,首先
9、要先設(shè)立一個(gè)頭指針(head)來存放鏈表的首地址。然后,不斷用 new 運(yùn)算符生成一個(gè)新的起點(diǎn),將這個(gè)起點(diǎn)鏈入已有的鏈表尾部;如果鏈表中還沒有結(jié)點(diǎn),則這個(gè)新結(jié)點(diǎn)將是首結(jié)點(diǎn),否則,將新結(jié)點(diǎn)的地址賦給原有鏈表的尾結(jié)點(diǎn)的 next 指針。( 2 )刪除模塊刪除模塊的功能是刪除某職工的工資信息。當(dāng)然,信息包括所有輸入的信息,以及程序內(nèi)部函數(shù)計(jì)算的信息例如個(gè)人所得稅,實(shí)發(fā)數(shù)。從一個(gè)鏈表中刪去一個(gè)結(jié)點(diǎn),首先從表頭開始,找到被刪結(jié)點(diǎn)后,只要改變鏈接關(guān)系即可,使被刪結(jié)點(diǎn)的前去結(jié)點(diǎn)的指針域指向被刪結(jié)點(diǎn)的后繼結(jié)點(diǎn)。如果刪去的結(jié)點(diǎn)是首結(jié)點(diǎn),則將第二個(gè)結(jié)點(diǎn)的地址作為新的鏈表的首地址返回;如果刪去的結(jié)點(diǎn)是鏈尾,則將被刪
10、結(jié)點(diǎn)的前驅(qū)作為新的鏈尾。( 3 )修改模塊修改模塊的功能是修改某職工的部分工資信息。要修改某職工的信息首先必須從表頭開始搜尋,當(dāng)找到指定的編號是,重新對其賦值即可。( 4 )查找模塊查找模塊的功能就是輸出指定編號職工的工資信息。查找鏈表中的信息時(shí)比較簡單的,在上面的模塊中也用到了,主要是注意查找葉必須從表頭開始。( 5 )列表模塊列表模塊的功能是輸出當(dāng)月全體職工的工資信息。列表模塊就是依次輸出鏈表中各結(jié)點(diǎn)的數(shù)據(jù)。首先要知道鏈表頭結(jié)點(diǎn)的地址,也就是 head 的值,然后設(shè)一個(gè)指針變量 p ,先指向第一個(gè)結(jié)點(diǎn),輸出 p 所指結(jié)點(diǎn)的數(shù)據(jù)與的值,然后使p 后移一個(gè)結(jié)點(diǎn),再輸出其數(shù)據(jù)與的值;依鏈表順序而
11、行,依次輸出相應(yīng)結(jié)點(diǎn)數(shù)據(jù)域的值,直到鏈表的尾結(jié)點(diǎn)。( 5 )調(diào)試過程中遇到的主要問題及解決辦法設(shè)計(jì)初期,先完成初步構(gòu)思,寫出主函數(shù)。然后對主函數(shù)所涉及的各個(gè)模塊進(jìn)行編程,將各個(gè)模塊利用指針和鏈表聯(lián)系起來。在環(huán)境中進(jìn)行調(diào)試,應(yīng)一邊編譯,一邊調(diào)試,并且要一個(gè)模塊一個(gè)模塊的調(diào)試。直至此模塊完全沒有錯誤時(shí),在進(jìn)入下一模塊的調(diào)試。不能直接輸入全部的代碼一次性調(diào),這樣錯誤會很多,并且不易找出和修改。在完成程序的編譯鏈接后,要用多組數(shù)據(jù)進(jìn)行審查,確保做到系統(tǒng)無誤。設(shè)計(jì)過程中, 不應(yīng)忽視環(huán)境提示的警告, 有時(shí)程序運(yùn)行不正確與警告也有很大的關(guān)系。這次設(shè)計(jì)中遇到很多問題都是提示類型不匹配,這時(shí)就要認(rèn)真檢查前面的代
12、碼,及時(shí)改正并且認(rèn)真仔細(xì),杜絕此類錯再次發(fā)生。編寫代碼時(shí)應(yīng)該少用全局變量,全局變量在編寫試看似定義次數(shù)少,很方便。但全局變量出錯幾率較大,且不易修改,每次修改時(shí)都要全面考慮,所以應(yīng)避免用到。程序調(diào)試中碰到的錯誤可以使自己學(xué)到知識。 養(yǎng)成良好的編程習(xí)慣, 可以節(jié)省很多時(shí)間,避免很多不必要的錯誤。在編輯完整個(gè)程序后,進(jìn)行調(diào)試階段總是會數(shù)顯head無定義。解決辦法:再類的定義是忘記聲明指針Worker_pay *head。;3 總結(jié)經(jīng)過兩周的 C+ 課程實(shí)踐,我對C+ 語言設(shè)計(jì)有了一個(gè)更深,更全面的了解,尤其體會到了 C+ 面向?qū)ο蟛僮鲗喕绦虻闹匾饔?。下面是我的幾點(diǎn)體會:剛拿到課題時(shí),我一臉的
13、茫然,看到如此龐大的工程,不知如何下手。這個(gè)工資管理系統(tǒng)中職工子信息竟然包含 15 條, 以前從來沒有遇到過如此多的變量。 和同學(xué)討論很久好,我發(fā)現(xiàn)其實(shí)可以化繁為簡的,信息中 15 條不一定全都要,因?yàn)槠渲斜旧砭陀兄貜?fù)的,例如津貼和補(bǔ)貼。并且可以有一個(gè)pay 的數(shù)組來處理數(shù)據(jù)。所以做任何事情都必須要開動腦筋,積極思考,有時(shí)還要學(xué)會化繁為簡。在編程時(shí)條理清晰是至關(guān)重要的。主函數(shù),函數(shù),成員函數(shù)之間的層次關(guān)系,調(diào)用關(guān)系一定要有一個(gè)全面的把握,尤其要體會類的封裝性。另外很重要的一點(diǎn)就是一定要對鏈表的五種操作熟練的掌握。在編譯,鏈接,調(diào)試的過程中一定要有耐心。因?yàn)橐粋€(gè)程序中會有很多小的錯誤,甚至有的問
14、題要幾個(gè)小時(shí)才能解決。遇到問題,一定要全面分析,有時(shí)候還要向同學(xué)請教??偟脕碚f,編程時(shí)極需要耐心的??傊?C+ 課程設(shè)計(jì)實(shí)踐為我們提供了一個(gè)綜合運(yùn)用所學(xué)知識,解決實(shí)際問題的平臺,增強(qiáng)了我們實(shí)踐動手的能力和工程實(shí)踐能力,并且鍛煉和培養(yǎng)了我們的自學(xué)能力,讓我們對 C+ 有了一個(gè)更全面的了解。附源代碼:#include<iostream>#include<string>using namespacestd;struct Worker_payint num;float pay5,basepay,tax,deduct,Actualpay;Worker_pay *next;cla
15、ssWorkerprivate:Worker_pay *head;void Print(Worker_pay *);Worker_pay *Find(int);public:Worker()head=NULL;int ListCount();void AddItem(int num,float pay5);void RemoveItem(int);void Replacei(nt);void List();void Searchi(nt);void Actualpay();int Worker:ListCount ()if(!head)return 0;Worker_pay *p=head;i
16、nt n=0;while(p)n+;p=p->next;return n;void Worker:AddItem (int num,float pay5)if(!head)head=new Worker_pay;for (int i=0;i<5;i+)head->payi=payi;head->num=num;head->next=NULL;return;Worker_pay *t=head;while(t&&t->num!=num) t=t->next;if(t)cout<< "操作失?。宦毠ぞ幪枮?"
17、<<num<< "的信息已經(jīng)存在!"<<endl;return;Worker_pay *p=head;while(p->next ) p=p->next;Worker_pay *p1=new Worker_pay;p1->num=num;for(int i=0;i<5;i+)p1->payi=payi;p1->next=NULL;p->next=p1;return;void Worker:RemoveItem(int num)Worker_pay *t=Find(num);if(!t) retur
18、n;Worker_pay *p=head;if(head=t)head=head->next;deletep;cout<< "成功刪除職工編號為"<<num<< "的信息!"<<endl<<endl;return;)while(p->next!=t)p=p->next;Worker_pay *p1=p->next;p->next=p1->next;deletep1;cout<< "成功刪除職工編號為"<<num<
19、;< "的信息!"<<endl<<endl;return;void Worker:Replace(nt num)Worker_pay *p=Find(num);if(!p)return;cout<< "請重新輸入相應(yīng)信息"<<endl;cout<< "職工編號基本工資(元)津貼房租交通費(fèi)銀行儲蓄"<<endl;cin>>p->num>>p->pay0>>p->pay1>>p->pay2&
20、gt;>p->pay3>>p->pay4; return;void Worker:Print(Worker_pay *p)cout.precision(8);cout<<p->num<< ""<<p->pay0<< ""<<p->pay1<< ""<<p->pay2<< ""<<p->pay3<< ""<<
21、p->pay4<< ""<<p->basepay<<""<<p->tax<< " "<<p->deduct<< "“<<p->Actualpay<<endl;return;void Worker:List()if(ListCount=0)cout<< " 當(dāng)前列表為空,請先輸入數(shù)據(jù)!"<<endl;return;Worker_pay *p=hea
22、d;cout<< "共有信息"<<ListCount()<< "個(gè)"<<endl;cout<< "職工編號基本工資(元)津貼房租交通費(fèi)銀行銀行儲蓄應(yīng)發(fā)數(shù)個(gè)人所得稅應(yīng)扣數(shù)實(shí)發(fā)數(shù)"<<endl;while(p)Print(p);p=p->next;cout<<endl;return;void Worker:Search i(nt num)cout<< "Search<" <endl;Worker_pay *
23、p=Find(num);if(p)cout<< "職工編號基本工資 (元) 津貼房租交通費(fèi)銀行銀行儲蓄應(yīng)發(fā)數(shù)個(gè)人所得稅應(yīng)扣數(shù)實(shí)發(fā)數(shù)"<<endl;Print(p);cout<<endl;Worker_pay *Worker:Find(int num)if (ListCount()=0)cout<< " 當(dāng)前列表為空,請先輸入數(shù)據(jù)!"<<endl;return NULL;Worker_pay *p=head;while(p)if (p->num=num) break;p=p->next
24、;if(!p)cout<< "錯誤:找不到該信息! n" ;return NULL;return p;void Worker:Actualpay ()if (ListCount()=0)cout<< " 當(dāng)前列表為空,請先輸入數(shù)據(jù)!"<<endl;return;Worker_pay *p=head;while(p)if(p->pay0<=800)p->tax=0;elseif(p->pay0<=2000) p->tax=(p->pay0-800)*0.05;elseif(p-&
25、gt;pay0<=5000) p->tax=60+(p->pay0-2000)*0.1;else p->tax=360+(p->pay0-5000)*0.2;p->basepay=p->pay0+p->pay1;p->deduct=p->tax+p->pay2+p->pay3;p->Actualpay=p->pay0+p->pay1-p->tax-p->pay2-p->pay3;p=p->next;)return;)Worker Worker;int Menu()(cout
26、1; "ri* 主菜單 *" <<endl<<endl;int n=1,select=-1;cout«n+« ”.輸入職工工資信息"«endl«endl;cout«n+« ”.刪除指定職工的工資信息"«endl«endl;cout«n+« ”.修改指定職工編號的工資信息"«endl«endl;cout«n+« ”.查找指定職工編號的工資信息 "«endl«
27、;endl;cout<<n+<< ".輸出全體職工的工資信息"<<endl<<endl;cout<< "0.退出 "<<endl<<endl;cout<< "請選擇(輸入相應(yīng)數(shù)字):"cin>>select;return select;char Exit()char s;cout<< "確定要退出程序嗎? Y/N:cin>>s;return s;void Input(int *num,float
28、 pay5)cout<< "請輸入 t 職工編號基本工資(元)津貼房租交通費(fèi)銀行儲蓄"<<endl;cin>>*num;if(*num=-1) return;cin>>pay0>>pay1>>pay2>>pay3>>pay4;return;void AddNew()int num=0;float pay5=0,0,0,0,0;cout<<endl<< " 當(dāng)輸入的編號為-1是表示結(jié)束輸入"<<endl;Input(&num,pay);while(num!=-1)Worker.AddItem(num,pay);Worker.Actualpay();Input(&num,pay);return;void DoFind()int num;cout<<endl&l
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四年體育賽事贊助合同詳細(xì)條款與權(quán)益分配3篇
- 2025年度跨國公司美金貸款合同
- 二零二五年度水稻種植基地建設(shè)合同
- 2025版離婚協(xié)議書范本:房產(chǎn)買賣合同分割及處理細(xì)則4篇
- 2025年度脫硫石膏復(fù)合材料銷售協(xié)議3篇
- 2025年冰箱洗衣機(jī)節(jié)能補(bǔ)貼項(xiàng)目合作協(xié)議3篇
- 2025年度離婚協(xié)議書:陳飛與劉婷離婚財(cái)產(chǎn)分割及子女撫養(yǎng)費(fèi)協(xié)議4篇
- 二零二五年度老舊小區(qū)消防隱患排查與整改承包合同2篇
- 二零二四云存儲服務(wù)與云原生應(yīng)用部署合同3篇
- 貨物運(yùn)輸協(xié)議
- ICU常見藥物課件
- CNAS實(shí)驗(yàn)室評審不符合項(xiàng)整改報(bào)告
- 農(nóng)民工考勤表(模板)
- 承臺混凝土施工技術(shù)交底
- 臥床患者更換床單-軸線翻身
- 計(jì)量基礎(chǔ)知識培訓(xùn)教材201309
- 中考英語 短文填詞、選詞填空練習(xí)
- 一汽集團(tuán)及各合資公司組織架構(gòu)
- 阿特拉斯基本擰緊技術(shù)ppt課件
- 初一至初三數(shù)學(xué)全部知識點(diǎn)
- 新課程理念下的班主任工作藝術(shù)
評論
0/150
提交評論