C++課程設計職工工資管理系統(報告內含程序完整清單)_第1頁
C++課程設計職工工資管理系統(報告內含程序完整清單)_第2頁
C++課程設計職工工資管理系統(報告內含程序完整清單)_第3頁
C++課程設計職工工資管理系統(報告內含程序完整清單)_第4頁
C++課程設計職工工資管理系統(報告內含程序完整清單)_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

-.z.目錄TOC\o"2-3"\h\z\t"標題1,1,次標題,1"目錄i1概述11.1程序的基本功能1HYPERLINK\l"_Toc282091170"1.2其它功能11.3擴展功能12課題的分析22.1會員登入系統模塊即systemhead靜態全局函數模塊22.2查詢功能模塊即search函數模塊22.3職務信息匹配及處理模塊即systembody靜態全局函數模塊模塊422.4循環控制模塊即while(1)模塊23詳細設計33.1類聲明33.2系統簡略流程圖79\h43.3會員登入系統模塊即systemhead靜態全局函數模塊53.4查詢功能模塊即search函數模塊63.5職務信息匹配及處理模塊即systembody靜態全局函數模塊73.6循環控制模塊即while(1)模塊74課程設計總結84.1完成情況84.2遇到的問題及解決8參考文獻11附錄12-.z.概述本課程設計是《面向對象程序設計》課程的后繼教學環節,學好C++語言就必須堅持用面向對象的思維方式分析問題、解決問題,最好的方法是仿照教材編寫C++實際應用程序。此次課程設計的題目及要求:實現一個簡單的工資管理系統。程序的基本功能系統的主要功能是計算職工當月工資并存檔。公司內有5種不同類型的職工:技術人員、銷售人員、文秘、技術經理和銷售經理,他們的工資計算方式各不相同。其它功能將工資信息存入salary.t*t文件中,工資信息包含雇員編號、、職務、月份、月收入。Info.t*t文件中只存留一些信息及會員最后進入系統時輸入的數據,最多含有編號、、職務、月份的信息。擴展功能采用了會員制度,并將登入信息及編號、密碼存入number.t*t文件中。課題的分析通過對課題的深入分析,我將這個課題分為以下幾個模塊,深入詳細得剖析它們。會員登入系統模塊即systemhead靜態全局函數模塊程序運行后,先進行會員選擇判斷。為減少會員重新注冊,通過輸入兩次編號及密碼,增加繁瑣度。同時在一定的方面上,又方便忘記密碼的會員。通過密碼匹配,雇員的工資信息這一隱私得到了很好的保障。查詢功能模塊即search函數模塊首先,從info.t*t中提取編號,與salary.t*t中的編號進行匹配,匹配成功,輸出工資信息,直到文件!indata.eof()==0。.職務信息匹配及處理模塊即systembody靜態全局函數模塊模塊4從info.t*t中提取職務信息,用switch語句進行匹配,據匹配情況調用不同的函數進行輸入、處理、顯示并以增加方式記錄到salary.t*t中。循環控制模塊即while(1)模塊為了更加方便使用,盡量改善系統,實現search函數及systembody函數功能,在search函數及systembody函數模塊的基礎上加了一些必要的語句,并增加了外層循環控制。詳細設計作為一個面向對象程序設計,我們不得不先從類的聲明開始設計,而后是一個整體的流程圖做框架。最后在從小的模塊結構著手。classTechManager:publicTechnician,publicManager{private:floatgradeBonus;classTechManager:publicTechnician,publicManager{private:floatgradeBonus;intgrade;public:TechManager(float*=1000);voidsetgrade(float*);voidcountSalary();};圖3.1類聲明圖3.2職工工資管理系統簡略流程圖系統簡略流程圖圖3.2職工工資管理系統簡略流程圖開始優點:一個入口,一個出口!處理5輸入5輸入4輸入3輸入2輸入1處理4處理3處理2處理1工資記錄在salary.t*t職務代碼分析顯示真10查詢信息選擇?開始優點:一個入口,一個出口!處理5輸入5輸入4輸入3輸入2輸入1處理4處理3處理2處理1工資記錄在salary.t*t職務代碼分析顯示真10查詢信息選擇?是否會員否是否會員否注冊注冊是是輸入編號及密碼輸入編號及密碼假檢驗?假檢驗?真真輸入姓名、職務、月份輸入姓名、職務、月份記錄編碼姓名職務月份至info.t*t記錄編碼姓名職務月份至info.t*t從info.t*t提取職務代碼從info.t*t提取職務代碼再次輸入再次輸入假結束假結束會員登入系統模塊即systemhead靜態全局函數模塊清空info.t*t并將編號存入到info.t*t中清空info.t*t并將編號存入到info.t*t中圖3.3登入系統模塊詳細流程圖否是否會員輸入編號及密碼打開name.t*t并輸出編號及密碼匹配?關閉name.t*t否是以增加方式打開name.t*t并輸入編號及密碼關閉name.t*t.輸入編號及密碼查詢功能模塊即search函數模塊110否是輸出info.t*t中的職務信息將info.t*t的編號與salary.t*t中的編號進行匹配是否打開info.t*t!indata.eof()?圖3.4查詢功能模塊以默認方式打開info.t*t以默認方式打開salary.t*t從文件info.t*t中提取編號并關閉文件輸出"以上是你的工資信息!”關閉salary.t*t職務信息匹配及處理模塊即systembody靜態全局函數模塊圖3.5systembody函數模塊圖3.5systembody函數模塊以默認方式打開info.t*t提取info.t*t中的職務信息switch語句進行職務匹配調用不同函數進行數據處理及顯示循環控制模塊即while(1)模塊圖3.6循環控制模塊即while(1)模塊圖3.6循環控制模塊即while(1)模塊102輸入選擇操作查詢功能模塊Info及recordinfo調用systembody調用選擇?結束課程設計總結完成情況本次面向對象課程設計的所有功能基本完成,并且擴展功能也成功的實現!可執行文件能正常執行指令并運行!遇到的問題及解決圖錯誤[Error]C:\Users\權\Desktop\main.o(.data$_vt$8Employee+0*c):main.cpp:undefinedreferenceto`Employee::countSalary(void)'錯誤:沒有定義Employee類中的countSalary函數!改正:將原先的"virtualvoidcountSalary();”改為”virtualvoidcountSalary(){}”圖錯誤錯誤分析:(會員板塊中)提示:"數字1表示是!其他鍵表示否!”,但定義的選擇變量為整型。加上我當時輸入字符p。改正:"其他鍵表示否!”改為”數字0表示否”。輸入時按提示進行輸入即可!圖錯誤調試分析:錯誤發生在systemhead靜態全局函數內的文件輸入循環模塊中!改正:將以nocreate方式即”ifstreamindata("d:\\number.t*t",ios::nocreate);"該為默認打開方式即"ifstreamindata("d:\\number.t*t");”。圖錯誤調試分析:錯誤發生在調用systembody靜態全局函數前后的while循環模塊中,很有可能是數據存取混亂造成的。改正:systemhead靜態全局函數內"ofstreamoutdata("d:\\info.t*t",ios::trunc);”改為先清后在以默認方式輸入!且將存取整型編號的變量類型從字符型改為整型。圖錯誤錯誤:后面莫名其妙的跟著一個提示語句指令。分析調試:當語句指令是基類info函數內的語句,很有可能是循環控制出現了一些問題。改正:見程序源代碼!參考文獻下面給出幾個參考文獻的格式參考匿名,不知道,非常多.計算機實用教程.:**大學出版社,2004,123~234[美]DonisSomething.Visual*#2008技術內幕.:YYY大學出版社,2007,56~78JohnsSmith,JamesNothing.ProgramminginC++orAnythingandSomething..worldplus/nothing/inde*.html2007Anonymous.SomethingtoSay..somewhere./something.html2007《面向對象程序設計》,鄭莉,清華大學出版社,《面向對象程序設計C++語言》,朱戰立等編西安電子科技大學出版社《面向對象程序設計VisualC++》,劉斌等編,清華大學出版社《面向對象程序設計C++語言描述》,RichardJohnsonbaugh(美)等著,蔡宇輝等譯,機械工業出版社,2003附錄本系統有三個源程序文件構成,分別為system.h,system.cpp及main.cpp。同時含有三個系統文件,分別為info.t*t,name.t*t及salary.t*t,且全部存放在D盤根目錄下,請勿隨意移動或修改系統文件。當會員正式進入系統,info.t*t是先清空后用來存儲會員輸入的信息,最多含有編號、、職務及月份。當僅會員注冊時,會將編碼及密碼存儲到name.t*t中。當僅會員登入的編號及密碼進行匹配時,會打開輸入文件name.t*t,提取編號及密碼,進行匹配。當僅當輸入工資數據時,會將工資、編號、、職務、月份存儲到salary.t*t中。當僅當查詢工資信息時,會打開salary.t*t,提取編號、、職務、月份及工資。該系統是一個只適合5種及5種職務的工資管理系統。并將職務分為技術人員、銷售人員、文秘、技術經理和銷售經理,其代號分別為1,2,3,4,5。雇員編號以整型變量存儲,編號所取范圍在-65536至65535之內(包括邊界值),首位數字表示相應的職務代碼。該系統能力有限,請根據指示嚴格輸入相應字符!程序清單Main函數#include"system.cpp"#include"cstring"staticvoidsystemhead();staticvoidsystembody();staticvoidtechnician();staticvoidsalesman();staticvoidsecretary();staticvoidtechmanager();staticvoidsalesmanager();usingnamespacestd;voidmain(){ systemhead();//調用systemhead靜態全局函數 cout<<"\n\n1:查詢工資"; cout<<"\n\n2:輸入工資數據"; cout<<"\n\n0:退出系統!\n\n"; cout<<"請選擇您需要的操作!!\n"; while(1) {int*uanze; cin>>*uanze; if(*uanze==1) { employeea; cout<<endl<<endl; a.search(); cout<<"\n\n輸入工資數據請按數字2,退出系統請按數字0!\n\n"; }//查詢工資信息 if(*uanze==2) { employeea; (); a.recordinfo();//輸入處理工資數據并暫時記錄 systembody();//調用systembody靜態全局函數 cout<<"\n\n查詢工資請按數字1,退出系統請按數字0!\n\n"; } if(*uanze==0)e*it(0); }}staticvoidsalesmanager(){ SalesManagera5; floatsum; cout<<"請輸入整個月的總營業額:"; cin>>sum; a5.setsalesnum(sum); a5.countSalary(); a5.recordSalary();}staticvoidtechmanager(){ TechManagera4; intgra; cout<<"請輸入這個月的評級:";//1,2,3三個等級 cin>>gra; a4.setgrade(gra); a4.countSalary(); a4.recordSalary(); }staticvoidsecretary(){ Secretarya3; floatbon; cout<<"請輸入這個月的額外獎勵:"; cin>>bon; a3.setbonus(bon); a3.countSalary(); a3.recordSalary();}staticvoidsalesman(){ Salesmana2; floatsum; cout<<"請輸入整個月的營業額:"; cin>>sum; a2.setsalesnum(sum); a2.countSalary(); a2.recordSalary();}staticvoidtechnician(){ Techniciana1; floathour; cout<<"請輸入整個月的工作時間:"; cin>>hour; a1.setHour(hour); a1.countSalary(); a1.recordSalary();}staticvoidsystembody(){ ifstreamindata("info.t*t"); if(indata==NULL)e*it(0); intnum; charna[25]; intsta; indata>>num>>na>>sta;//職務代號分別為1,2,3,4,5 switch(sta) { case1:technician();break; case2:salesman();break; case3:secretary();break; case4:techmanager();break; case5:salesmanager();break; default:cout<<"職務代號錯誤!\n請重新輸入!"; }}staticvoidsystemhead(){ char*,y='y'; intnum; charsecret[6]; while(y) { cout<<"\n\n系統會員請輸入'y',非系統會員請輸入‘n’\n"; cin>>*; if(*){ cout<<"請輸入編號(首位為職務代號且為不超過5位數的整數):\n"; cin>>num; cout<<"請輸入密碼(6及6位字符以下):\n"; cin>>secret;//輸入編號及密碼 ifstreamindata("number.t*t"); if(indata==NULL) { cout<<"文件打開失敗!請聯系管理員!\n";e*it(0);//文件沒打開,退出程序 } intnum1;charsecret1[6]; indata>>num1; while(!indata.eof()) { indata>>secret1; if((num==num1)&&(strcmp(secret,secret1)==0)) { y=0;//改變判斷變量的值,停止外層循環 break;//終止內層循環 } indata>>num1; } indata.close();//檢驗登入信息 } else { cout<<"請輸入編號(首位為職務代號且為不超過5位數的整數):\n"; cin>>num; cout<<"請輸入密碼(6及6位字符以下):\n"; cin>>secret;//注冊輸入編號及密碼 ofstreamoutdata("number.t*t",ios::app); outdata<<num<<'\t'<<secret<<'\t'; outdata.close();//將編號及密碼保存到number.t*t中 cout<<endl<<endl; } }ofstreamoutdata("info.t*t",ios::trunc);outdata.close();//清空文件內容 ofstreamoutdata1("info.t*t"); outdata1<<num<<'\t'; outdata.close();//輸入編號至info.t*t}System.cpp#include<iostream>#include<fstream>#include"system.h"usingnamespacestd;voidEmployee::info(){ charna[25];intsta,mon; cout<<"請依次輸入姓名、職務代號及月份(以空格符分隔):"; cin>>na>>sta>>mon; name=na;status=sta;month=mon;//存儲姓名、職務、月份}voidEmployee::search(){ intnum; ifstreamindata0("info.t*t"); if(indata0==NULL)e*it(0); indata0>>num; indata0.close();//從文件info.t*t中提取編號 intnum1;charna1[25];intsta1;intmon1;floatsal; intmon0; ifstreamindata("salary.t*t"); if(indata==NULL)e*it(0); while(!indata.eof()) { indata>>num1>>na1>>sta1>>mon1>>sal; if(num==num1) cout<<num1<<'\t'<<na1<<'\t'<<sta1<<'\t'<<mon1<<'\t'<<sal<<'\n'; //依次輸出該雇員的工資信息 } if(indata.eof()) cout<<"\n\n以上是你的工資信息!\n\n"; indata.close();}voidEmployee::recordinfo(){ ofstreamoutdata("info.t*t",ios::app); outdata<<name<<'\t'<<status<<'\t'<<month; outdata.close();//添加姓名、職務、月份至存有編號的info.t*t中}voidEmployee::recordSalary(){ ifstreamindata("info.t*t"); indata>>number>>name>>status>>month; indata.close();//依次輸出該雇員的工資信息 intnum1;charna1[25];intsta1;intmon1;floatsal; ifstreamindata1("salary.t*t"); if(indata1==NULL)e*it(0); while(!indata1.eof()) { indata1>>num1>>na1>>sta1>>mon1>>sal; if(month!=mon1) cout<<num1<<'\t'<<na1<<'\t'<<sta1<<'\t'<<mon1<<'\t'<<sal<<'\n'; else e*it(0); //依次輸出該雇員的工資信息 } cout<<number<<'\t'<<name<<'\t'<<status<<'\t'<<month<<'\t'<<salary; //顯示工資信息 ofstreamoutdata("salary.t*t",ios::app); outdata<<'\n'<<number<<'\t'<<name<<'\t'<<status<<'\t'<<month<<'\t'<<salary; outdata.close(); }voidTechnician::setHour(float*){ workHour=*;}Technician::Technician(float*){ hourSalary=*;}voidTechnician::countSalary(){ salary=workHour*hourSalary;}voidSalesman::setsalesnum(float*){ salesnum=*;}Salesman::Salesman(float*){ getRate=*;}voidSalesman::countSalary(){ salary=salesnum*getRate;}voidSecretary::setbonus(float*){ bonus=*;}Secretary::Secretary(float*){ fi*edSalary=*;}voidSecretary::countSalary(){ salary=fi*edSalary+bonus;}Manager::Manager(float*){ fi*edSalary=*;}voidTechManager::setgrade(int*){ grade=*;}TechManager::TechManager(float*){ gradeBonus=*;}voidTechManager::countSalary(){ salary=fi*edSalary+grade*gradeBonus;}SalesManager::SalesManager(float*){ getRate=*;}voidSalesManager::countSalary(){ salary=fi*edSalary+salesnum*getRate;}voidTechnician::setHour(float*){ workHour=*;}Technician::Technician(float*){ hourSalary=*;}voidTechnician::countSalary(){ salary=workHour*hourSalary;}voidSalesman::setsalesnum(float*){ salesnum=*;}Salesman::Salesman(float*){ getRate=*;}voidSalesman::countSalary(){ salary=salesnum*getRate;}voidSecretary::setbonus(float*){ bonus=*;}Secretary::Secretary(float*){ fi*edSalary=*;}voidSecretary::countSalary(){ salary=fi*edSalary+bonus;}Manager::Manager(float*){ fi*edSalary=*;}voidTechManager::setgrade(int*){ grade=*;/

溫馨提示

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

評論

0/150

提交評論