




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、仲愷農業工程學院課程設計報告*課 程 面向對象課程設計姓 名院 (系)專業年級學 號指導教師日 期仲愷農業工程學院教務處制目 錄1 需求與功能分析12 系統框架圖23 類的設計與分析24 非成員函數的設計與分析45 特色算法分析46 存在的問題及對策87 用戶手冊及測試結果87.1 用戶手冊87.2 測試結果88 心得體會119 附:程序源代碼111 需求與功能分析在信息技術高速發展的今天,傳統的數據統計方式在處理龐大繁雜的信息量時顯得力不從心,于是,人們對于運用計算機來輔助和管理工作的需求正在逐步提高。隨著各個企業業務的逐步擴展,企業的員工人數也在迅速增加,由于管理人員水平有限,導致某些員工
2、紀錄管理并不完善,特別是繁雜的員工工資管理紀錄,不易查詢、修改,極易導致錯誤,而落后的員工管理方法隨著社會的日益競爭,必將被淘汰。由計算機來管理龐大而繁雜的企業員工紀錄是非常合適的,不僅查詢和修改方便,并且效率高,速度快,完全能夠滿足現代化企業管理的需要,同時也更利于實現全面辦公自動化。因此開發一套企業員工工資管理系統軟件勢在必行。企業員工工資管理系統是企業管理系統中的一個重要組成部分,它為企業合理的員工調配與編制,以及有關問題的決策能夠提供各種必要的基礎數據,是公司管理現代化的一個重要方面。利用微機對龐雜而繁鎖的員工工資系統實現自動化管理,是計算機公司信息管理系統的重要內容。我在陳勇老師指導
3、下開發了企業員工工資管理系統。企業員工工資管理系統旨在為商業人士及在社會團體、機構中負責管理關系的人士提供一個功能全面、使用方便的工資管理系統,以替代傳統的手工管理工資紀錄,同時利用先進信息技術為用戶提供一些更為方便實用的功能。 本系統實現五種基本功能:輸入員工工資信息、刪除員工工資信息、修改員工工資信息、查找員工工資信息、列出所有員工工資信息。所以該工資管理系統可以分為5個模塊,分別為輸入模塊、刪除模塊、修改模塊、查找模塊、列表模塊,每個模塊都有其對應的功能以及其設計。(1)輸入模塊輸入模塊的功能是創建存儲職工工資信息的存儲系統以及添加某職工的工資信息。為實現輸入的功能,有兩個方面的任務:定
4、義結構體以及建立鏈表。(2)刪除模塊刪除模塊的功能是刪除某職工的工資信息。(3)修改模塊修改模塊的功能是修改某職工的部分工資信息。(4)查找模塊查找模塊的功能就是輸出指定編號職工的工資信息。(5)列表模塊列表模塊的功能是輸出當月全體職工的工資信息。2 系統框架圖主菜單輸入員工工資信息刪除指定員工工資信息修改指定員工工資信息查找指定員工工資信息輸出全體員工工資信息退出圖1 系統框架圖3 類的設計與分析class Workerprotected:Worker_pay * head; /鏈表的頭結點指針public:Worker()head=NULL; /構造函數void Display(Worke
5、r_pay *); /輸出函數 Worker_pay * Find(int); /查找函數int ListCount(); /統計員工人數函數 void AddItem(int,string,int,string,string,string,float,float); /創建鏈表并鏈表的插入void RemoveItem(int); /刪除函數void ReplaceItem(int); /修改函數void ListL(); /遍歷函數 void Search(int); /查找并輸出某個員工信息函數void Real_wage(float,float); /計算函數void Recordin
6、fo(int,string,int,string,string,string,float,float,float,float); /存儲函數;表1 Worker類說明表名稱屬性說明head數據成員鏈表頭結點指針Worker()成員函數缺省的構造函數,缺省值為head=NULLvoid Display(Worker_pay *)成員函數輸出函數Worker_pay * Find(int)成員函數查找函數int ListCount()成員函數統計員工人數函數void AddItem(int,···float,float)成員函數創建鏈表并鏈表的插入void Remov
7、eItem(int)成員函數刪除函數void ReplaceItem(int)成員函數修改函數void ListL()成員函數遍歷函數void Search(int)成員函數查找并輸出某個員工信息函數void Real_wage()成員函數計算函數voidRecoreinfo(int,···,float,float)成員函數存儲函數4 非成員函數的設計與分析表2 非成員函數說明表名稱說明int Menu()用于顯示主菜單char Exit()用于退出程序void Input(int * num,···,float * allowanc
8、e)用于輸入員工工資信息void AddNew()用于調用成員函數AddItem(int,···float,float)Real_wage()和Recoreinfo(int,···,float,float)void DoFind()用于調用成員函數Search(int)void DoDelete()用于調用成員函數RemoveItem(int)void DoMotify()用于調用成員函數ReplaceItem(int)void List()用于調用成員函數ListL()int main()主函數5 特色算法分析Worker類中的成員
9、函數void AddItem(int,···float,float)(1)功能:創建存儲職工工資信息的存儲系統以及添加某職工的工資信息。算法思路:先定義一個結構體Worker_pay,通過從表尾插入的方法來建立鏈表。首先要先設立一個頭指針(head)來存放鏈表的首地址,然后,不斷用new運算符生成一個新的結點,將這個結點鏈入已有的鏈表尾部;如果鏈表中還沒有結點,則這個新結點將是首結點,否則,將新結點的地址賦給原有鏈表的尾結點的next指針。(2)流程圖:StartIF !head員工工資信息賦給headReturn*t=headWhile t&t->
10、num!= num1t=t->nextIF t操作失敗Return*p->headWhilep->nextp->next員工工資信息賦給pReturnEnd圖2 流程圖(3)代碼:void Worker:AddItem(int num1,string name1,int age1,string sex1,string department1,string title1,float wage1,float allowance1)if(!head)head=new Worker_pay;head->num=num1;head->name=name1;head-&
11、gt;age=age1;head->sex=sex1;head->department=department1;head->title=title1;head->wage=wage1;head->allowance=allowance1;head->next=NULL;return;Worker_pay * t=head;while(t&&t->num!=num1)t=t->next;if(t)cout<<"操作失敗;員工編號為"<<num1<<"的信息已經存在!&
12、quot;<<endl;return;Worker_pay * p=head;while(p->next)p=p->next;Worker_pay * p1=new Worker_pay;p1->num=num1;p1->name=name1;p1->age=age1;p1->sex=sex1;p1->department=department1;p1->title=title1;p1->wage=wage1;p1->allowance=allowance1;p1->next=NULL;p->next=p1;r
13、eturn;6 存在的問題及對策(1)設計初期,先完成初步構思,寫出主函數。然后對主函數所涉及的各個模塊進行編程,將各個模塊利用指針和鏈表聯系起來。在環境中進行調試,應一邊編譯,一邊調試,并且要一個模塊一個模塊的調試。直至此模塊完全沒有錯誤時,在進入下一模塊的調試。不能直接輸入全部的代碼一次性調,這樣錯誤會很多,并且不易找出和修改。在完成程序的編譯鏈接后,要用多組數據進行審查,確保做到系統無誤。設計過程中,不應忽視環境提示的警告,有時程序運行不正確與警告也有很大的關系。這次設計中遇到很多問題都是提示類型不匹配,這時就要認真檢查前面的代碼,及時改正并且認真仔細,杜絕此類錯再次發生。編寫代碼時應該
14、少用全局變量,全局變量在編寫試看似定義次數少,很方便。但全局變量出錯幾率較大,且不易修改,每次修改時都要全面考慮,所以應避免用到。程序調試中碰到的錯誤可以使自己學到知識。養成良好的編程習慣,可以節省很多時間,避免很多不必要的錯誤。(2)在編輯完整個程序后,進行調試階段總是會數顯head無定義。解決辦法:再類的定義是忘記聲明指針Worker_pay *head;。7 用戶手冊及測試結果7.1 用戶手冊運行程序時,界面剛開始出現一個主菜單及提示信息,用戶通過在鍵盤上輸入來選擇某個功能。當用戶選擇了某個功能,系統將跳轉到所選擇的功能界面,用戶將可以根據提示信息來使用該功能,當用戶通過鍵盤輸入編號為-
15、1時,系統將返回主界面。7.2 測試結果圖3 系統主界面圖4 輸入員工信息測試圖圖5 刪除員工信息測試圖圖6 修改員工信息測試圖圖7 查找員工信息測試圖圖8 輸出全體員工信息測試圖圖9 退出系統測試圖8 心得體會經過兩周的C+課程設計,我對C+語言設計有了一個更深、更全面的了解,尤其體會到了C+面向對象操作對簡化程序的重要作用。下面是我的幾點體會:剛拿到課題時,我一臉的茫然,看到如此龐大的工程,不知如何下手。這個工資管理系統中職工子信息竟然包含15條,以前從來沒有遇到過如此多的變量。和同學討論很久好,我發現其實可以化繁為簡的,信息中15條不一定全都要,因為其中本身就有重復的,例如津貼和補貼。并
16、且可以有一個pay的數組來處理數據。所以做任何事情都必須要開動腦筋,積極思考,有時還要學會化繁為簡。在編程時條理清晰是至關重要的。主函數,函數,成員函數之間的層次關系,調用關系一定要有一個全面的把握,尤其要體會類的封裝性。另外很重要的一點就是一定要對鏈表的五種操作熟練的掌握。在編譯,鏈接,調試的過程中一定要有耐心。因為一個程序中會有很多小的錯誤,甚至有的問題要幾個小時才能解決。遇到問題,一定要全面分析,有時候還要向同學請教。總得來說,編程時極需要耐心的。總之,C+課程設計為我們提供了一個綜合應用所學知識,解決實際問題的平臺,增強了我們實踐動手的能力和工程實踐能力,并且鍛煉和培養了我們的自學能力
17、,讓我們對C+有了一個更全面的了解。9 附:程序源代碼/*/#include<iostream>#include<string>#include<fstream>#include<iomanip>using namespace std;/*/*定義一個員工信息的結構體Worker_pay*/struct Worker_payint num; /員工編號string name; /員工姓名int age; /年齡string sex; /性別string department; /部門string title; /職務float wage; /工資
18、float allowance; /津貼float tax; /個人所得稅float real_wage; /實發數Worker_pay * next; /鏈表結點的指針域;/*/*定義一個員工類Worker*/class Workerprotected:Worker_pay * head; /鏈表的頭結點指針public:Worker()head=NULL; /構造函數void Display(Worker_pay *); /輸出函數 Worker_pay * Find(int); /查找函數int ListCount(); /統計員工人數函數 void AddItem(int,string
19、,int,string,string,string,float,float); /創建鏈表并鏈表的插入void RemoveItem(int); /刪除函數void ReplaceItem(int); /修改函數void ListL(); /遍歷函數 void Search(int); /查找并輸出某個員工信息函數void Real_wage(float,float); /計算函數void Recordinfo(int,string,int,string,string,string,float,float,float,float); /存儲函數;/*/功能:用于統計員工人數int Worker
20、:ListCount()if(!head) return 0;Worker_pay * p=head;int n=0;while(p)n+;p=p->next;return n;/*/功能:在鏈表中查找員工的編號Worker_pay * Worker:Find(int num)if(ListCount=0)cout<<"列表為空,請先輸入數據!"<<endl;return NULL;Worker_pay * p=head;while(p)if(p->num=num) break;p=p->next;if(!p)cout<<
21、;"錯誤,找不到該信息!"<<endl;return NULL;return p;/*/功能:創建鏈表及鏈表的插入void Worker:AddItem(int num1,string name1,int age1,string sex1,string department1,string title1,float wage1,float allowance1)if(!head)head=new Worker_pay;head->num=num1;head->name=name1;head->age=age1;head->sex=sex1
22、;head->department=department1;head->title=title1;head->wage=wage1;head->allowance=allowance1;head->next=NULL;return;Worker_pay * t=head;while(t&&t->num!=num1)t=t->next;if(t)cout<<"操作失敗;員工編號為"<<num1<<"的信息已經存在!"<<endl;return;Work
23、er_pay * p=head;while(p->next)p=p->next;Worker_pay * p1=new Worker_pay;p1->num=num1;p1->name=name1;p1->age=age1;p1->sex=sex1;p1->department=department1;p1->title=title1;p1->wage=wage1;p1->allowance=allowance1;p1->next=NULL;p->next=p1;return;/*/功能:從鏈表中刪除一個結點void Wo
24、rker:RemoveItem(int num)Worker_pay * t=Find(num);if(!t)return;Worker_pay * p=head;if(head=t)head=head->next;delete p;cout<<"成功刪除員工編號為"<<num<<"的信息!"<<endl;return;while(p->next!=t)p=p->next;Worker_pay * p1=p->next;p->next=p1->next;delete p1
25、;cout<<"成功刪除員工編號為"<<num<<"的信息!"<<endl;return;/*/功能:修改員工信息void Worker:ReplaceItem(int num)Worker_pay * p=Find(num);if(!p)return;cout<<"請重新輸入相應信息"<<endl;cout<<"員工編號:"cin>>p->num;cout<<"員工姓名:"cin&
26、gt;>p->name;cout<<"年齡:"cin>>p->age;cout<<"性別:"cin>>p->sex;cout<<"部門:"cin>>p->department;cout<<"職務:"cin>>p->title;cout<<"工資(元):"cin>>p->wage;cout<<"津貼(元):"
27、;cin>>p->allowance;return;/*/功能:輸出員工信息void Worker:Display(Worker_pay * p)cout<<p->num<<setw(8)<<p->name<<setw(8)<<p->age<<setw(8)<<p->sex<<setw(8)<<p->department<<setw(8)<<p->title<<setw(8)<<p-&g
28、t;wage<<setw(8)<<p->allowance<<setw(8)<<p->tax<<setw(8)<<p->real_wage<<endl;return;/*/功能:遍歷鏈表void Worker:ListL()float sum=0;float aver=0;int n=0;if(ListCount=0)cout<<"當前列表為空,請先輸入數據!"<<endl;return;Worker_pay * p=head;cout<<
29、;"*員工信息*"<<endl;cout<<"共有"<<ListCount()<<"個員工信息"<<endl;cout<<"員工編號 員工姓名 年齡 性別 部門 職務 工資 津貼 個稅 實發數"<<endl;while(p)Display(p);n+;sum+=p->wage;p=p->next;aver=sum/n;cout<<"員工平均薪水:"<<aver<<e
30、ndl;return;/*/功能:查找并輸出指定員工信息void Worker:Search(int num)cout<<"Search."<<endl;Worker_pay * p=Find(num);if(p)cout<<"員工編號為"<<num<<"的員工工資信息:"<<endl;cout<<"員工編號 員工姓名 年齡 性別 部門 職務 工資 津貼 個稅 實發數"<<endl;Display(p);cout<
31、<endl;return;/*/功能:程序內部函數計算的信息例如個人所得稅,實發數void Worker:Real_wage(float tax,float real_wage)if(ListCount()=0)cout<<"當前列表為空,請先輸入數據!"<<endl;return;Worker_pay * p=head;while(p)if(p->wage<=2000)p->tax=0;else if(p->wage>2000&&p->wage<=2500)p->tax=p-&g
32、t;wage*0.05;else if(p->wage>2500&&p->wage<=4000)p->tax=p->wage*0.1-25;else if(p->wage>4000&&p->wage<=7000)p->tax=p->wage*0.15-125;else if(p->wage>7000&&p->wage<=22000)p->tax=p->wage*0.2-375;else if(p->wage>22000&
33、&p->wage<=42000)p->tax=p->wage*0.25-1375;else if(p->wage>42000&&p->wage<=62000)p->tax=p->wage*0.3-3375;else if(p->wage>62000&&p->wage<=82000)p->tax=p->wage*0.35-6375;else if(p->wage>82000&&p->wage<=102000)p->t
34、ax=p->wage*0.4-10375;else p->tax=p->wage*0.45-15375;p->real_wage=p->wage+p->allowance-p->tax;p=p->next;return;/*/功能:存儲員工信息void Worker:Recordinfo(int num1,string name1,int age1,string sex1,string department1,string title1,float wage1,float allowance1,float tax1,float real_wage
35、1) ofstream file1("info1.txt",ios:app);file1<<"員工編號:"<<num1<<" 員工姓名:"<<name1<<" 年齡:"<<age1<<" 性別:"<<sex1<<" 部門:"<<department1<<" 職務:"<<title1 <<" 工
36、資(元):"<<wage1<<" 津貼(元):"<<allowance1<<" 個人所得稅(元):"<<tax1<<" 實發數(元):"<<real_wage1<<endl;file1.close(); /*/*定義一個對象Worker1*/Worker Worker1; /*/ /*主菜單函數*/ int Menu() cout<<"ttt"<<endl;cout<<&qu
37、ot;tt 企業員工工資管理系統 t"<<endl;cout<<"tt *主菜單* t"<<endl;int n=1,select=-1;cout<<"tt "<<n+<<".輸入員工信息 tt"<<endl;cout<<"tt "<<n+<<".刪除指定員工編號信息tt"<<endl;cout<<"tt "<<
38、n+<<".修改指定員工編號信息tt"<<endl;cout<<"tt "<<n+<<".查找指定員工編號信息tt"<<endl;cout<<"tt "<<n+<<".輸出全體員工信息ttt"<<endl;cout<<"tt 0.退出tttt"<<endl;cout<<"tttt"<<end
39、l;cout<<"請選擇05(輸入相應數字):"cin>>select;return select;/*/功能:退出程序char Exit() char s;cout<<"確定要退出程序嗎?Y/N:"cin>>s;return s;/*/功能:輸入員工信息void Input(int * num,string * name,int * age,string * sex,string * department,string * title,float * wage,float * allowance) cou
40、t<<"現在輸入員工信息!"<<endl;cout<<"員工編號:"cin>>* num;if(* num=-1)return;cout<<"員工姓名:"cin>>* name;cout<<"年齡:"cin>>* age;cout<<"性別:"cin>>* sex;cout<<"部門:"cin>>* department;cout&l
41、t;<"職務:"cin>>* title;cout<<"工資(元):"cin>>* wage;cout<<"津貼(元):"cin>>* allowance;return;/*/功能:把員工信息插入到鏈表中void AddNew() int num=0;string name;int age=0;string sex;string department;string title;float wage=0;float allowance=0;float tax=0;float real_wage=0;cout<<"當輸入的員工編號為-1是表示結束輸入"<<endl;Input(&num,&name,&age,&sex,&department,&title,&wage,&allowance);while(num!=-1)Worker1.AddItem(num,name,age,sex,department,title,wage,allowance);Worker
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環保型土壤固化劑的研發與應用考核試卷
- 竹纖維增強復合材料界面改性考核試卷
- 漆器工藝品的生命周期可持續性評估考核試卷
- 電氣設備網絡營銷策略考核試卷
- 傳統手工藝品保護與傳承考核試卷
- 礦山環境保護法規與案例分析-石墨滑石考核試卷
- 全面解讀2024年項目管理專業人士資格考試試題及答案
- 硅灰石應用開發考核試卷
- 2023年中國能建陜西院勘測工程公司招聘筆試參考題庫附帶答案詳解
- 微生物檢驗過程及評估試題及答案
- 2023年渭南市醫療衛生機構定向招聘醫學類畢業生筆試真題
- 2025年中國生物育種行業發展現狀調查、競爭格局分析及未來前景預測報告
- 鋼結構轉換層施工方案
- 口腔門診總經理崗位職責
- 土方場地平整合同
- 人教版六年級數學下冊中段檢測訓練卷
- 人工智能設計倫理(浙江大學)知到智慧樹章節答案
- 2024年廣東省佛山市順德區中考語文二模試卷
- 2024-2030年中國街舞培訓行業競爭格局及投資前景展望報告
- 高中數學集合練習題160題-包含所有題型-附答案
- 計算機程序設計語言(Python)學習通超星期末考試答案章節答案2024年
評論
0/150
提交評論