C-教師工資管理系統(tǒng)(分析-代碼)-課件_第1頁
C-教師工資管理系統(tǒng)(分析-代碼)-課件_第2頁
C-教師工資管理系統(tǒng)(分析-代碼)-課件_第3頁
C-教師工資管理系統(tǒng)(分析-代碼)-課件_第4頁
C-教師工資管理系統(tǒng)(分析-代碼)-課件_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論