版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
高
校
工
資
管
理
系
統(tǒng)1.系統(tǒng)概述
通過設(shè)計(jì)一個(gè)較為簡單的《高校工資管理系統(tǒng)》,進(jìn)一步熟悉C++中類的概念、類的封裝、繼承的實(shí)現(xiàn)方式。了解系統(tǒng)開發(fā)的需求分析、類層次設(shè)計(jì)、模塊分析、編碼測試、模塊組裝與整體調(diào)試的全過程,加深對(duì)C++的理解與VisualC++環(huán)境的使用;逐步熟悉程序設(shè)計(jì)的方法,并養(yǎng)成良好的編程習(xí)慣。1.1功能需求分析1、增加職工2、刪除職工3、查找職工4、修改職工5、輸出職工信息6、數(shù)據(jù)存盤7、數(shù)據(jù)裝入
8、退出教師管理系統(tǒng)編輯功能添加職工修改職工刪除職工統(tǒng)計(jì)功能查找職工計(jì)算工資數(shù)據(jù)處理數(shù)據(jù)存儲(chǔ)數(shù)據(jù)導(dǎo)入程序的功能:
能夠?qū)崿F(xiàn)職工工號(hào)、姓名、工作量的錄入;能夠?qū)崿F(xiàn)對(duì)職工信息的瀏覽、查找、刪除;能夠?qū)β毠すべY進(jìn)行計(jì)算并輸出。角色分析角色:教師(teacher)管理員(manager)助手(assistant)教師兼助手(teacher_assistant)管理員兼助手(manager_assitant)用例分析2.總體設(shè)計(jì)
2.1職工類的設(shè)計(jì)基于C++中類的概念,類的封裝,繼承和抽象。編寫一個(gè)Person的基類包含共有的相關(guān)信息和操作,然后使職工類都繼承于此基類從而實(shí)現(xiàn)多態(tài)。2.2應(yīng)用類的設(shè)計(jì)編寫一個(gè)Person類的友元類College類來實(shí)現(xiàn)添加,刪除,查找等功能。2.3文件的讀寫設(shè)計(jì)通過College類中的Save()函數(shù)來實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ),保存在Person.dat中,而通過Load()函數(shù)來實(shí)現(xiàn)Person.dat數(shù)據(jù)的讀入。職務(wù)工資計(jì)算辦法:教師:Salary+(Hours-120)*20管理員:Salary+Allowance助手:Salary+Allowance+(Hours-70)*20;教師兼助手:Salary+(Teacher::Hours-120)*20+Allowance+(Assistant::Hours-70)*20教師兼管理員:Salary+Allowance+Hours*202.2應(yīng)用類的設(shè)計(jì)編寫一個(gè)Person類的友元類College類來實(shí)現(xiàn)添加,刪除,查找等功能。2.3文件的讀寫設(shè)計(jì)通過College類中的Save()函數(shù)來實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ),保存在Person.dat中,而通過Load()函數(shù)來實(shí)現(xiàn)Person.dat數(shù)據(jù)的讀入。College類主要函數(shù)voidAdd();//增加職工
voidDelete();//刪除職工
voidModify();//修改職工
voidPrint();//輸出職工信息
voidSave();//職工信息存盤
voidLoad();//職工信息裝入
voidFinding();//查找職工2.3業(yè)務(wù)流分析(時(shí)序圖)
1、增加職工的時(shí)序圖源代碼#include<stdio.h>#include<iostream.h>#include<iomanip.h>#include<stdlib.h>#include<string.h>#include<conio.h>#include<fstream.h>classPerson//人員類(抽象類){protected:intNo;//編號(hào)
charName[20];//姓名
charDuty;//人員類別標(biāo)志(0-教師,1-實(shí)驗(yàn)員,2-行政人員,3-教師兼實(shí)驗(yàn)員,4-行政兼教師)doubleSalary;//基本工資
Person*next;//指針域public:Person()//基類構(gòu)造
{next=0;//指針域設(shè)置為空
}virtual~Person()//基類虛析構(gòu)
{}virtualvoidInput()=0;//從鍵盤輸入數(shù)據(jù)
virtualvoidInput(ifstream&ifs)=0;//從文件輸入數(shù)據(jù)
virtualvoidOutput()=0;//向屏幕輸出數(shù)據(jù)
virtualvoidOutput(ofstream&ofs)=0;//向文件輸出數(shù)據(jù)
virtualdoubleIncoming()=0;//計(jì)算收入
friendclassCollege;};classTeacher:virtualpublicPerson//教師類{protected:intHours;//教師課時(shí)public://為對(duì)象設(shè)置數(shù)據(jù)分為兩種途徑,通過)構(gòu)造函數(shù),)一般成員函數(shù)
//分開可以使得程序中應(yīng)用更加靈活
//本程序采用:缺省構(gòu)造+Input()Teacher()//構(gòu)造函數(shù),初始化部分?jǐn)?shù)據(jù)
{Duty='0';Salary=800;}voidInput()//鍵盤補(bǔ)充輸入其它數(shù)據(jù)
{cout<<"編號(hào):";cin>>No;cout<<"姓名:";cin>>Name;cout<<"教師上學(xué)期課時(shí):";cin>>Hours;}voidInput(ifstream&ifs){ifs>>No>>Name>>Duty>>Hours;}
voidOutput(){cout<<No<<"\t"<<Name<<"\t"<<"教師"<<"\t\t"<<Hours<<"\t"<<Incoming()<<endl;}voidOutput(ofstream&ofs){ofs<<No<<""<<Name<<""<<Duty<<""<<Hours<<endl;}doubleIncoming(){returnSalary+(Hours-120)*20;}};classAssistant:virtualpublicPerson//實(shí)驗(yàn)員{protected:intAllowance;intHours;public:Assistant(){Duty='1';Salary=650;Allowance=150;}voidInput(){cout<<"編號(hào):";cin>>No;cout<<"姓名:";cin>>Name;cout<<"實(shí)驗(yàn)員上學(xué)期實(shí)驗(yàn)課時(shí):";cin>>Hours;}voidInput(ifstream&ifs){ifs>>No>>Name>>Duty>>Hours;}voidOutput(){cout<<No<<"\t"<<Name<<"\t"<<"實(shí)驗(yàn)員\t\t"<<Hours<<"\t"<<Incoming()<<endl;}voidOutput(ofstream&ofs){ofs<<No<<""<<Name<<""<<Duty<<""<<Hours<<endl;}doubleIncoming(){returnSalary+Allowance+(Hours-70)*20;}};classManager:virtualpublicPerson//行政人員{protected:intAllowance;public:Manager(){Duty='2';Salary=750;Allowance=250;}voidInput(){cout<<"編號(hào):";cin>>No;cout<<"姓名:";cin>>Name;}voidInput(ifstream&ifs){ifs>>No>>Name>>Duty;}voidOutput(){cout<<No<<"\t"<<Name<<"\t"<<"行政人員\t"<<Incoming()<<endl;}voidOutput(ofstream&ofs){ofs<<No<<""<<Name<<""<<Duty<<endl;}doubleIncoming(){returnSalary+Allowance;}};classTeacher_Assistant:publicTeacher,publicAssistant//教師兼實(shí)驗(yàn)員{public:Teacher_Assistant(){Duty='3';Teacher::Salary=800;}voidInput(){cout<<"編號(hào):";cin>>No;cout<<"姓名:";cin>>Name;cout<<"教師上學(xué)期課時(shí):";cin>>Teacher::Hours;cout<<"教師兼職實(shí)驗(yàn)員上學(xué)期實(shí)驗(yàn)課時(shí):";cin>>Assistant::Hours;}voidInput(ifstream&ifs){ifs>>No>>Name>>Duty>>Teacher::Hours>>Assistant::Hours;}voidOutput(){cout<<No<<"\t"<<Name<<"\t"<<"教師兼實(shí)驗(yàn)員"<<Teacher::Hours<<""<<Assistant::Hours<<"\t"<<Incoming()<<endl;}voidOutput(ofstream&ofs){ofs<<No<<""<<Name<<""<<Duty<<Teacher::Hours<<""<<Assistant::Hours<<endl;}doubleIncoming(){returnSalary+(Teacher::Hours-120)*20+Allowance+(Assistant::Hours-70)*20;}};classManager_Teacher:publicManager,publicTeacher//行政人員兼教師{public:Manager_Teacher(){Duty='4';Manager::Salary=750;}voidInput(){cout<<"編號(hào):";cin>>No;cout<<"姓名:";cin>>Name;cout<<"行政人員兼職教師上學(xué)期課時(shí):";cin>>Hours;}voidInput(ifstream&ifs){ifs>>No>>Name>>Duty>>Hours;}voidOutput(){cout<<No<<"\t"<<Name<<"\t"<<"行政人員兼教師"<<Hours<<"\t"<<Incoming()<<endl;}voidOutput(ofstream&ofs){ofs<<No<<""<<Name<<""<<Duty<<""<<Hours<<endl;}doubleIncoming(){returnSalary+Allowance+Hours*20;}};classCollege{private:Person*PL;voidClear();intCollege::Find(intID,Person**p1,Person**p2);public:College();//構(gòu)造
~College();//析構(gòu)
voidAdd();//增加職工
voidDelete();//刪除職工
voidModify();//修改職工
voidPrint();//輸出職工信息
voidSave();//職工信息存盤
voidLoad();//職工信息裝入
voidFinding();//查找職工};College::College()//構(gòu)造函數(shù)(創(chuàng)建1個(gè)頭結(jié)點(diǎn)的鏈表){ Person*p=newTeacher;PL=p; cout<<"自動(dòng)裝入數(shù)據(jù)...\n";Load();}College::~College()//析構(gòu)函數(shù)(僅保留1個(gè)頭結(jié)點(diǎn)){Person*p=PL; while(p)//逐個(gè)刪除結(jié)點(diǎn),包括頭結(jié)點(diǎn)
{ PL=p->next;deletep;p=PL; } PL=0;}voidCollege::Add()//增加職工{cout<<"\t\t****************高校工資管理系統(tǒng)*******************\n\n\n";cout<<"\n\t\t\t\t**增加職工,輸入x結(jié)束**\n\n";//查找尾結(jié)點(diǎn)
Person*p=PL;while(p->next)p=p->next;charch='m';//創(chuàng)建新結(jié)點(diǎn),錄入數(shù)據(jù),連接到鏈表
Teacher*pt;Assistant*pa;Manager*pm;Teacher_Assistant*pta;Manager_Teacher*pmt;cout<<"職工分類碼[0-教師,1-實(shí)驗(yàn)員,2-行政人員,3-教師兼實(shí)驗(yàn)員,4-行政兼教師]:\n\n";for(;ch!='x';){ cout<<"類別:"; cin>>ch;switch(ch){case'0':pt=newTeacher;pt->Input();p->next=pt;break;case'1':pa=newAssistant;pa->Input();p->next=pa;break;case'2':pm=newManager;pm->Input();p->next=pm;break;case'3':pta=newTeacher_Assistant;pta->Input();p->next=pta;break;case'4':pmt=newManager_Teacher;pmt->Input();p->next=pmt;break;}p=p->next;}}intCollege::Find(intID,Person**p1,Person**p2){*p1=PL->next;*p2=PL;while(*p1){if((*p1)->No==ID)break;//找到
else{*p2=*p1;//繼續(xù)查找*p1=(*p1)->next;}}return*p1?1:0;}voidCollege::Clear()//清除職工結(jié)點(diǎn),僅保留頭結(jié)點(diǎn){ Person*p=PL->next;while(p) { PL->next=p->next;deletep;p->next=PL->next; }}voidCollege::Delete()//刪除職工{ cout<<"\n**刪除職工**\n"; intno;Person*p1,*p2;cout<<"編號(hào):";cin>>no;if(!Find(no,&p1,&p2)) { cout<<"指定的人員沒有找到!\n"; } else { p2->next=p1->next;//連接
deletep1;cout<<"正確刪除!\n"; }}voidCollege::Modify()//修改職工{cout<<"\t\t****************高校工資管理系統(tǒng)*******************\n\n\n";cout<<"\n\t\t\t\t**修改職工**\n";intNo;Person*p1,*p2;
cout<<"編號(hào):";cin>>No;if(!Find(No,&p1,&p2)){cout<<"指定的人員沒有找到!\n";}else{p1->Output();//輸出原來的職工信息(做提示)p1->Input();//輸入新的職工信息(更新)cout<<"修改完成!\n";}}voidCollege::Print()//輸出職工信息{ cout<<"\n**職工信息表**\n";cout<<"編號(hào)姓名崗位課時(shí)收入情況\n";Person*p=PL->next;if(!p) { cout<<"無職工記錄!\n";return; }while(p)//找到并輸出職工信息
{ p->Output();p=p->next; }}voidCollege::Save()//職工信息存盤{ ofstreamf("Person.dat",ios::out);//打開文件
//遍歷輸出至文件
Person*p=PL->next;while(p) { p->Output(f);p=p->next; } f.close();//關(guān)閉文件
cout<<"職工信息已經(jīng)保存在Person.dat.\n";}voidCollege::Load()//職工信息裝入{charbuf[81];//臨時(shí)空間
charDuty;//人員類型
Person*p2;//新建結(jié)點(diǎn)的指針
longt;//讀寫位置
//清除現(xiàn)有結(jié)點(diǎn)(保留頭結(jié)點(diǎn))Clear();//打開文件
ifstreamf("Person.dat",ios::in);
//建立結(jié)點(diǎn),讀數(shù)據(jù)
Person*p=PL;//尾結(jié)點(diǎn)指針
while(1){//讀取人員類型
t=f.tellg();f>>buf>>buf>>Duty;if(f){//根據(jù)人員類型創(chuàng)建新結(jié)點(diǎn)
switch(Duty){case'0':p2=newTeacher;break;case'1':p2=newAssistant;break;case'2':p2=newManager;break;case'3':p2=newTeacher_Assistant;break;case'4':p2=newManager_Teacher;break;default:f.close();return;}p->next=p2;p=p->next;f.seekg(t);p->Input(f);}elsebreak;}//關(guān)閉文件
f.close();cout<<"Person.dat數(shù)據(jù)已裝入.\n";}voidCollege::Finding(){ cout<<"\t\t****************高校工資管理系統(tǒng)*******************\n\n\n"; cout<<"\n\t\t\t\t**查找職工**\n"; Person*p1,*p2; intID; cout<<"編號(hào);"; cin>>ID; cout<<"\n\n"; p1=PL->next;p2=PL;while(p1){ if((p1)->No==ID) {
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年及未來5年中國水泥設(shè)備行業(yè)市場調(diào)研分析及投資戰(zhàn)略咨詢報(bào)告
- 寶坻輔警面試題目及答案
- 無人機(jī)植保服務(wù)在2025年智慧農(nóng)業(yè)中的應(yīng)用前景與技術(shù)創(chuàng)新探討
- 做市商相關(guān)制度
- 體檢中心周例會(huì)制度
- 優(yōu)沙娜獎(jiǎng)金制度
- 京東家政請(qǐng)假制度
- 中國水產(chǎn)科學(xué)研究院2026年度第一批統(tǒng)一公開招聘備考題庫及1套完整答案詳解
- 2025-2030中國戶外取暖器行業(yè)發(fā)展分析及競爭格局與發(fā)展趨勢預(yù)測研究報(bào)告
- 2026年西雙版納州生態(tài)環(huán)境局勐海分局編外人員招聘備考題庫及參考答案詳解1套
- 車輛日常安全檢查課件
- 成立合資公司合同范本
- 比亞迪索賠培訓(xùn)課件
- 2026屆四川省瀘州高級(jí)中學(xué)高一生物第一學(xué)期期末經(jīng)典試題含解析
- 2026標(biāo)準(zhǔn)版離婚協(xié)議書-無子女無共同財(cái)產(chǎn)債務(wù)版
- 光伏電站巡檢培訓(xùn)課件
- 【期末必刷選擇題100題】(新教材)統(tǒng)編版八年級(jí)道德與法治上學(xué)期專項(xiàng)練習(xí)選擇題100題(含答案與解析)
- 年末節(jié)前安全教育培訓(xùn)
- 建筑公司工資薪酬管理制度(3篇)
- 2025至2030中國疝氣修補(bǔ)術(shù)行業(yè)調(diào)研及市場前景預(yù)測評(píng)估報(bào)告
- 建設(shè)工程測繪驗(yàn)線標(biāo)準(zhǔn)報(bào)告模板
評(píng)論
0/150
提交評(píng)論