C++員工工資管理系統(tǒng)源代碼_第1頁(yè)
C++員工工資管理系統(tǒng)源代碼_第2頁(yè)
C++員工工資管理系統(tǒng)源代碼_第3頁(yè)
C++員工工資管理系統(tǒng)源代碼_第4頁(yè)
C++員工工資管理系統(tǒng)源代碼_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、#include #include #include #include #include #include using namespace std;#define NULL 0#define LEN sizeof(struct student) int const N=20;void Menu(); void Pass();int n=0; /定義一個(gè)全局變量統(tǒng)計(jì)職工人數(shù) /-定義一個(gè)職工信息的結(jié)構(gòu)體struct student char nameN; /用來(lái)存放char sexN; /用來(lái)存放性別long id; /用來(lái)存放編號(hào)float paid3; /用來(lái)存放工資int total; /

2、用來(lái)存放總工資struct student *next;/-職工類(lèi)class Information public:Information() ; /構(gòu)造函數(shù). Information() ; /析構(gòu)函數(shù). student *creat(); /建立鏈表void output(student *head); /顯示職工信息int count(student *head); /定義函數(shù)count()統(tǒng)計(jì)職工總數(shù)student *insert(student*head); /指針函數(shù)*insert()用來(lái)添加職工信息.student *cancel(student *head,long id);

3、/指針函數(shù)*cancel()用來(lái)刪除職工信息.student *find(student *head,long id); /指針函數(shù)*find()用來(lái)查找職工信息.student *modify(student *head,long id); /指針函數(shù)*modife()用來(lái)修改職工的信息.void paixu(student *head); /定義paixu()函數(shù)將職工的總額從大到小排列并輸出void average(student *head); /定義職工工資平均值的函數(shù)void save(student *head); /保存文件信息student *Read(); /讀取文件信息p

4、rivate:student *p1,*p2,*p3,*head,st; ;Information:Information() cout *n;cout -n; cout *nn; Information:Information() cout n;cout n;cout 本系統(tǒng)管理員 n;cout n;cout n;cout -n; cout n;cout n;cout 歡送下次使用 n;cout n;cout n;cout 再見(jiàn) n;cout n;cout建立鏈表信息student *Information:creat(void) /定義一個(gè)指向struct student的結(jié)構(gòu)體指針函數(shù)*

5、creat()用來(lái)錄入職工信息. char chN;n=0; /用來(lái)存放職工 p1=p2=(student *)malloc(LEN);/調(diào)用malloc()函數(shù)用來(lái)開(kāi)辟一個(gè)新的存儲(chǔ)單元 cout -endl;coutch;head=NULL; /給指針head賦初值while (strcmp(ch,#)!=0) /調(diào)用字符比較函數(shù)strcmp()用來(lái)判斷是否繼續(xù)輸入p1=(student *)malloc(LEN); /調(diào)用malloc()函數(shù)用來(lái)開(kāi)辟一個(gè)新的存儲(chǔ)單元strcpy(p1-name,ch); /將循環(huán)結(jié)構(gòu)前面輸入的復(fù)制到結(jié)構(gòu)體名為p1的數(shù)組name中coutp1-sex;cou

6、tp1-id;while(p1-id)id)100000) /判斷輸入的編號(hào)是否有效(100000個(gè))cout0p1-id; coutp1-paid0;while(p1-paid0)paid0)100000) /判斷輸入的分?jǐn)?shù)是否有效(=0 =100000)cout0p1-paid0; coutp1-paid1;while(p1-paid1)paid1)100000) /判斷輸入的分?jǐn)?shù)是否有效(=0 =100000)cout0p1-paid1; coutp1-paid2;while(p1-paid2)paid2)100000) /判斷輸入的分?jǐn)?shù)是否有效(=0 =100000)cout0p1-p

7、aid2; p1-total=p1-paid0+p1-paid1+p1-paid2; /計(jì)算總額 if(n=0)head=p1; /如果是輸入第一組職工信息就將指針p1賦給指針headelse p2-next=p1; /否則將p1賦給p2所指結(jié)構(gòu)體的next指針p2=p1; /將指針p1賦給指針p2n+; /將職工人數(shù)n的值加1coutch; /將輸入的存放到字符數(shù)組ch中p2-next=NULL; /將p2所指結(jié)構(gòu)體的next指針重新賦空值return (head);/將輸入的第一組職工信息返回/-定義output()函數(shù)將職工的信息從頭指針?biāo)竷?nèi)容開(kāi)始輸出void Information:

8、output(student *head) system(cls);if(head=NULL) cout 這是一個(gè)空表,請(qǐng)先輸入職工信息!n;elsecout-n;cout *職工工資信息表*n;cout-n; cout|編 號(hào)| |姓 名| |性別| |基本工資| |加班工資| |其他獎(jiǎng)金| |總額|n;cout-n; p1=head; /將頭指針賦給p docoutsetw(6)idsetw(10)namesetw(10)sexsetw(10)paid0setw(10)paid1setw(12)paid2setw(12)totalendl;coutnext; /將下一組職工信息的next指

9、針賦給pwhile(p1!=NULL); /假設(shè)指針p非空則繼續(xù),目的是把所有的職工信息都傳給指針p然后輸出./-統(tǒng)計(jì)職工人數(shù)的函數(shù)int Information:count(struct student *head) /定義函數(shù)count()統(tǒng)計(jì)職工總數(shù)if(head=NULL)return(0); /假設(shè)指針head為空返回值為0else return(1+count(head-next); /函數(shù)的遞歸調(diào)用/-添加職工的成績(jī)的函數(shù)student *Information:insert( student *head) /插入新結(jié)點(diǎn)定義一個(gè)指向struct student的結(jié)構(gòu)體指針函數(shù)*i

10、nsert()用來(lái)添加職工信息.system(cls);coutt-nendl;p1=(student *)malloc(LEN); /使p1指向插入的新結(jié)點(diǎn)coutp1-id;while(p1-id)id)100000)cout0p1-id; /將輸入的編號(hào)存放到p1所指結(jié)構(gòu)體的數(shù)組id中 coutp1-name; /將輸入的存放到結(jié)構(gòu)體名為p1的數(shù)組name中coutp1-sex; coutp1-paid0;while(p1-paid0)paid0)100000)cout0p1-paid0; /將輸入的基本工資存放到p1所指結(jié)構(gòu)體的數(shù)組paid中coutp1-paid1;while(p1-

11、paid1)paid1)100000)cout0p1-paid1; /將輸入的加班工資存放到p1所指結(jié)構(gòu)體的數(shù)組paid中coutp1-paid2;while(p1-paid2)paid2)100000)cout0p1-paid2; /將輸入的其他獎(jiǎng)金存放到p1所指結(jié)構(gòu)體的數(shù)組paid中 p1-total=p1-paid0+p1-paid1+p1-paid2;/計(jì)算總分 p2=head; /將頭指針賦給p2if(head=NULL) /假設(shè)沒(méi)調(diào)用次函數(shù)以前的頭指針head為空head=p1;p1-next=NULL; /則將p1賦給頭指針head并將p1所指結(jié)構(gòu)體成員指針next賦空值else

12、 while(p1-idp2-id)&(p2-next!=NULL)p3=p2; /p3指向原p2指向的結(jié)點(diǎn)p2=p2-next; /p2后移一個(gè)結(jié)點(diǎn)if(p1-idid)if(head=p2)p1-next=head;head=p1; /插入到第一個(gè)結(jié)點(diǎn)之前else p3-next=p1;p1-next=p2; /插入到p3所指結(jié)點(diǎn)之后elsep2-next=p1;p1-next=NULL; /插入到尾結(jié)點(diǎn)之后n+; /將職工人數(shù)加1coutt-刪除職工信息student *Information:cancel(student *head,long id) /定義一個(gè)指向struct stu

13、dent的結(jié)構(gòu)體指針函數(shù)*delete()用來(lái)刪除考生信息. system(cls);if(head=NULL) /假設(shè)調(diào)用次函數(shù)以前的頭指針head為空 return(head);elsep1=head; /否則將頭指針賦給p1while(id!=p1-id&p1-next!=NULL) /尋找要?jiǎng)h除的結(jié)點(diǎn)當(dāng)p1所指的職工編號(hào)不是輸入的職工編號(hào)并且p1所指的next指針不為空p2=p1;p1=p1-next; /p2指向原p1指向的結(jié)點(diǎn)p1后移一個(gè)結(jié)點(diǎn)if(id=p1-id) /如果輸入的職工編號(hào)是p1所指的職工編號(hào)/結(jié)點(diǎn)找到后刪除if(p1=head) head=p1-next; /如果h

14、ead指針和p1指針相等則將下一個(gè)結(jié)點(diǎn)賦給指針head else p2-next=p1-next; /否則將p1所指結(jié)點(diǎn)賦給p2所指結(jié)點(diǎn)將要?jiǎng)h除的職工信息跳過(guò)去cout 刪除編號(hào)為id的職工n;n-; /將職工人數(shù)減1 return(head); /將頭指針?lè)祷?*修改職工數(shù)據(jù)*/student *Information:modify(student *head,long id)system(cls);coutt-nid&p1-next!=NULL)/尋找結(jié)點(diǎn)當(dāng)p1所指的職工編號(hào)不是輸入的職工編號(hào)并且p1所指的next指針不為空p1=p1-next; /p2指向原p1指向的結(jié)點(diǎn)p1后移一個(gè)結(jié)點(diǎn)

15、 if(id=p1-id) /如果要查找的職工編號(hào)是p1所指的職工編號(hào)cout你需要修改的職工信息如下:n;cout-n;cout|編 號(hào)| |姓 名| |性別| |基本工資| |加班工資| |其他獎(jiǎng)金| |總額|n;cout-n;coutsetw(6)idsetw(10)namesetw(10)sexsetw(10)paid0setw(10)paid1setw(12)paid2setw(12)totalendl;cout-n;coutp1-id;while(p1-id)id)100000)cout0p1-id; /將輸入的編號(hào)存放到p1所指結(jié)構(gòu)體的數(shù)組id中 coutp1-name; /將輸

16、入的存放到結(jié)構(gòu)體名為p1的數(shù)組name中coutp1-sex; coutp1-paid0;while(p1-paid0)paid0)100000)cout0p1-paid0; /將輸入的基本工資存放到p1所指結(jié)構(gòu)體的數(shù)組paid中coutp1-paid1;while(p1-paid1)paid1)100000)cout0p1-paid1; /將輸入的加班工資存放到p1所指結(jié)構(gòu)體的數(shù)組paid中coutp1-paid2;while(p1-paid2)paid2)100000)cout0p1-paid2; /將輸入的其他獎(jiǎng)金存放到p1所指結(jié)構(gòu)體的數(shù)組paid中 p1-total=p1-paid0+

17、p1-paid1+p1-paid2; /計(jì)算總分 else cout 需要修改的信息中沒(méi)有編號(hào)為id查找職工信息student *Information:find(student *head,long id) /定義一個(gè)指向struct student的結(jié)構(gòu)體指針函數(shù)*find()用來(lái)查找職工信息.system(cls);if(head=NULL) /假設(shè)調(diào)用次函數(shù)以前的頭指針head為空coutid&p1-next!=NULL)/尋找結(jié)點(diǎn)當(dāng)p1所指的職工編號(hào)不是輸入的職工編號(hào)并且p1所指的next指針不為空p1=p1-next; /p2指向原p1指向的結(jié)點(diǎn)p1后移一個(gè)結(jié)點(diǎn)if(id=p1-i

18、d) /如果要查找的職工編號(hào)是p1所指的職工編號(hào)cout-n;cout|編 號(hào)| |姓 名| |性別| |基本工資| |加班工資| |其他獎(jiǎng)金| |總額|n;cout-n;coutsetw(6)idsetw(10)namesetw(10)sexsetw(10)paid0setw(10)paid1setw(12)paid2setw(12)totalendl;cout-n;else cout信息中沒(méi)有編號(hào)為id的職工.n; /結(jié)點(diǎn)沒(méi)找到return(head);/-定義paixu()函數(shù)將職工的工資總額從大到小排列并輸出void Information:paixu(student *head) s

19、ystem(cls);int i,k,m=0,j;student *pN;/定義一個(gè)指向struct student的結(jié)構(gòu)體指針數(shù)組p if(head!=NULL)/如果頭指針是空則繼續(xù) m=count(head);cout-n;cout *職工工資統(tǒng)計(jì)表*n;cout-n;cout|編號(hào)| | |性別| |基本工資| |加班工資| |其他獎(jiǎng)金| |總額| |名次|n;cout-n;p1=head;for(k=0;knext;for(k=0;km-1;k+) /選擇排序法for(j=k+1;jtotaltotal)p2=pk;pk=pj;pj=p2; /從大到小排列的指針 for(i=0;im

20、;i+)coutsetw(6)idsetw(8)namesetw(9)sexsetw(10)paid0setw(10)paid1setw(10)paid2setw(10)totalsetw(10)i+1endl;cout求各工資的平均值的函數(shù)void Information:average(student *head)int k,m;float arg1=0,arg2=0,arg3=0;if(head=NULL)/如果頭指針是空則繼續(xù)cout 這是一個(gè)空表,請(qǐng)先輸入職工信息!n;elsem=count(head);p1=head;for(k=0;kpaid0;arg2+=p1-paid1;ar

21、g3+=p1-paid2;p1=p1-next;arg1/=m;arg2/=m;arg3/=m;cout *各項(xiàng)工資的平均值*n;cout-n;couttt基本工資的平均值: setw(4)arg1ntt加班工資的平均值: setw(4)arg2ntt獎(jiǎng)金的平均值: setw(4)arg3n;cout保存函數(shù).void Information:save(student *head) system(cls); ofstream out(data.txt,ios:out); outcount(head)endl; while(head!=NULL) outnamet idtt sext paid0

22、t paid1t paid2t totalnext; /讀取文件的信息student *Information:Read() system(cls); int i=0; p1=p2=( student *)malloc(LEN); head=NULL; ifstream in(data.txt,ios:in); ini; if(i=0)cout data 文件中的數(shù)據(jù)為空,請(qǐng)先輸入數(shù)據(jù)!endl; return 0; else coutn原文件已保存的信息如下:n; cout endl; cout|姓 名| |編 號(hào)| |性別| |基本工資| |加班工資| |其他獎(jiǎng)金| |總額|n; cout

23、 0;i-) p1=(student *)malloc(LEN); st.paid0st.paid1st.paid2st.total; strcpy(p1-name,); p1-id=st.id; strcpy(p1-sex,st.sex); p1-paid0=st.paid0; p1-paid1=st.paid1; p1-paid2=st.paid2; p1-total=st.total; if(n=0)head=p1; /如果是輸入第一組職工信息就將指針p1賦給指針head else p2-next=p1; /否則將p1賦給p2所指結(jié)構(gòu)體的next指針 p2=p1; /將指針

24、p1賦給指針p2 n+; /將n的值加1 /顯示讀入數(shù)據(jù) cout namet id t sex t paid0 t paid1 t paid2 t totalendl; cout endl;cout 數(shù)據(jù)已經(jīng)成功讀取完畢!nnnext=NULL;in.close(); return (head); /-菜單void Menu() Information person; student *head=NULL; int choice; long i; head=person.Read(); do couttendl; coutt endl; coutt _ _ _ 歡送進(jìn)入職工信息統(tǒng)計(jì)管理 _

25、_ _ endl; coutt endl; couttendl; coutt endl; coutt 相關(guān)操作選項(xiàng) endl; coutt endl; couttendl; coutt endl; coutt endl; coutt 1. 職工數(shù)據(jù)輸入 endl; coutt endl; coutt 2. 顯示職工工資 endl; coutt endl; coutt 3. 排序統(tǒng)計(jì)工資 endl; coutt endl; coutt 4. 查找職工工資 endl; coutt endl; coutt 5. 增加職工工資 endl; coutt endl; coutt 6. 刪除職工工資 end

26、l; coutt endl; coutt 7. 修改職工信息 endl; coutt endl; coutt 8. 成功保存信息 endl; coutt endl; coutt 9. 安全退出系統(tǒng) endl; coutt endl; couttnendl; coutchoice; while(choice9) coutchoice; /head=person.Read(); switch(choice) case 1: head=person.creat(); break; case 2: /head=person.Read(); person.output(head); break; case 3: /head=person.Read(); person.paixu(head); person.average(head); cout 參加工作的職工人數(shù)為:person.count(head)人nn; break; case 4: /head=person.Read(); couti; while(i100000) couti; person.find(head,i);

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論