高校工資管理系統(tǒng) C課程設(shè)計(jì)
《高校工資管理系統(tǒng) C課程設(shè)計(jì)》由會員分享,可在線閱讀,更多相關(guān)《高校工資管理系統(tǒng) C課程設(shè)計(jì)(18頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、重慶郵電大學(xué)《C++》課程設(shè)計(jì)報(bào)告 C++課程設(shè)計(jì) 高 校 工 資 管 理 系 統(tǒng) 1.系統(tǒng)概述 通過設(shè)計(jì)一個(gè)較為簡單的《高校工資管理系統(tǒng)》,進(jìn)一步熟悉C++中類的概念、類的封裝、繼承的實(shí)現(xiàn)方式。了解系統(tǒng)開發(fā)的需求分析、類層次設(shè)計(jì)、模塊分析、編碼測試、模塊組裝與整體調(diào)試的全過程,加深對C++的理解與Visual C++環(huán)境的使用;逐步熟悉程序設(shè)計(jì)的方法,并養(yǎng)成良好的編程習(xí)慣。 2.總體設(shè)計(jì) 2.1職工類的設(shè)計(jì) 基于C++中類的概念,類的封裝,繼承和抽象。編寫一個(gè)Person的基類包含共有的相關(guān)信息和操作,然后使職工類都
2、繼承于此基類從而實(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ù)的存儲,保存在Person.dat中,而通過Load()函數(shù)來實(shí)現(xiàn)Person.dat數(shù)據(jù)的讀入。 3.詳細(xì)設(shè)計(jì)及系統(tǒng)實(shí)現(xiàn) 3.1 Person類 class Person //人員類(抽象類) { protected: int No; //編號 char Name[20]; //姓名 char Duty;
3、 //人員類別標(biāo)志(0-教師,1-實(shí)驗(yàn)員,2-行政人員,3-教師兼實(shí)驗(yàn)員,4-行政兼教師) double Salary; //基本工資 Person *next; //指針域 public: Person() //基類構(gòu)造 { next=0; //指針域設(shè)置為空 } virtual ~Person() //基類虛析構(gòu) { } virtual void Input()=0; //從鍵盤輸入數(shù)據(jù) virtual void Input(ifstream& ifs)=0;
4、 //從文件輸入數(shù)據(jù) virtual void Output()=0; //向屏幕輸出數(shù)據(jù) virtual void Output(ofstream& ofs)=0; //向文件輸出數(shù)據(jù) virtual double Incoming()=0; //計(jì)算收入 friend class College; }; 3.2 Teacher類 class Teacher:virtual public Person //教師類 { protected: int Hours; //教師課時(shí) publi
5、c: //為對象設(shè)置數(shù)據(jù)分為兩種途徑,通過)構(gòu)造函數(shù),)一般成員函數(shù) //分開可以使得程序中應(yīng)用更加靈活 //本程序采用:缺省構(gòu)造+Input() Teacher() //構(gòu)造函數(shù),初始化部分?jǐn)?shù)據(jù) { Duty='0'; Salary=800; } void Input() //鍵盤補(bǔ)充輸入其它數(shù)據(jù) { cout<<"編號:"; cin>>No; cout<<"姓名:"; cin>>Name; cout<<"教師上學(xué)期課時(shí):"; cin>>Hours; }
6、
void Input(ifstream& ifs)
{
ifs>>No>>Name>>Duty>>Hours;
}
void Output()
{
cout< 7、g()
{
return Salary+(Hours-120)*20;
}
};
3.3 Assistant類
class Assistant:virtual public Person //實(shí)驗(yàn)員
{
protected:
int Allowance;
int Hours;
public:
Assistant()
{
Duty='1';
Salary=650;
Allowance=150;
}
void Input()
{
cout<<"編號:" 8、; cin>>No;
cout<<"姓名:"; cin>>Name;
cout<<"實(shí)驗(yàn)員上學(xué)期實(shí)驗(yàn)課時(shí):"; cin>>Hours;
}
void Input(ifstream& ifs)
{
ifs>>No>>Name>>Duty>>Hours;
}
void Output()
{
cout< 9、 {
ofs< 10、50;
Allowance=250;
}
void Input()
{
cout<<"編號:"; cin>>No;
cout<<"姓名:"; cin>>Name;
}
void Input(ifstream& ifs)
{
ifs>>No>>Name>>Duty;
}
void Output()
{
cout< 11、& ofs)
{
ofs< 12、00;
}
void Input()
{
cout<<"編號:"; cin>>No;
cout<<"姓名:"; cin>>Name;
cout<<"教師上學(xué)期課時(shí):"; cin>>Teacher::Hours;
cout<<"教師兼職實(shí)驗(yàn)員上學(xué)期實(shí)驗(yàn)課時(shí):"; cin>>Assistant::Hours;
}
void Input(ifstream& ifs)
{
ifs>>No>>Name>>Duty>>Teacher::Hours>>Assistant::Hours;
}
v 13、oid Output()
{
cout< 14、
return Salary+(Teacher::Hours-120)*20
+Allowance+(Assistant::Hours-70)*20;
}
};
3.6 Manager_Teacher類
class Manager_Teacher:public Manager,public Teacher //行政人員兼教師
{
public:
Manager_Teacher()
{
Duty='4';
Manager::Salary=750;
}
void Input()
{
c 15、out<<"編號:"; cin>>No;
cout<<"姓名:"; cin>>Name;
cout<<"行政人員兼職教師上學(xué)期課時(shí):"; cin>>Hours;
}
void Input(ifstream& ifs)
{
ifs>>No>>Name>>Duty>>Hours;
}
void Output()
{
cout< 16、stream& ofs)
{
ofs< 17、c:
College(); //構(gòu)造
~College(); //析構(gòu)
void Add(); //增加職工
void Delete(); //刪除職工
void Modify(); //修改職工
void Print(); //輸出職工信息
void Save(); //職工信息存盤
void Load(); //職工信息裝入
void Finding(); //查找職工
};
3.7.2 構(gòu)造函數(shù)
College::College() //構(gòu)造函數(shù)(創(chuàng)建個(gè)頭結(jié)點(diǎn)的鏈表)
{
18、Person *p=new Teacher;
PL=p;
cout<<"自動(dòng)裝入數(shù)據(jù)...\n";
Load();
}
3.7.3 析構(gòu)函數(shù)
College::~College() //析構(gòu)函數(shù)(僅保留個(gè)頭結(jié)點(diǎn))
{
Person *p=PL;
while(p) //逐個(gè)刪除結(jié)點(diǎn),包括頭結(jié)點(diǎn)
{
PL=p->next;
delete p;
p=PL;
}
PL=0;
}
3.7.4 Add函數(shù)
void College::Add() //增加職工
{
cout<<"\t\t******* 19、*********高校工資管理系統(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;
char ch='m';
//創(chuàng)建新結(jié)點(diǎn),錄入數(shù)據(jù),連接到鏈表
Teacher *pt;
Assistant *pa;
Manager *pm;
Teacher_Assistant *pta;
Manager_Teacher *pmt;
cout<<"職工分 20、類碼[0-教師,1-實(shí)驗(yàn)員,2-行政人員,3-教師兼實(shí)驗(yàn)員,4-行政兼教師]:\n\n";
for(;ch!='x';)
{
cout<<"類別:";
cin>>ch;
switch(ch)
{
case'0': pt=new Teacher; pt->Input();
p->next=pt;
break;
case '1': pa=new Assistant; pa->Input();
p->next=pa;
break;
case '2': pm= 21、new Manager; pm->Input();
p->next=pm;
break;
case '3': pta=new Teacher_Assistant; pta->Input();
p->next=pta;
break;
case '4': pmt=new Manager_Teacher; pmt->Input();
p->next=pmt;
break;
}
p=p->next;
}
}
3.7.5 Find函數(shù)
//查找職工結(jié)點(diǎn)(返回-找到 22、,-未找到.結(jié)點(diǎn)指針由p1返回,p2為前看指針)
int College::Find(int ID,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;
}
3.7.6 Clear函數(shù)
void College 23、::Clear() //清除所有的職工結(jié)點(diǎn)(僅保留頭結(jié)點(diǎn))
{
Person *p=PL->next;
while(p)
{
PL->next=p->next;
delete p;
p=PL->next;
}
}
3.7.7 Delete函數(shù)
void College::Delete() //刪除職工
{
cout<<"\t\t****************高校工資管理系統(tǒng)*******************\n\n\n";
cout<<"\n\t\t\t\t** 刪除職工**\n";
int No; 24、
Person *p1,*p2;
cout<<"編號:"; cin>>No;
if(!Find(No,&p1,&p2))
{
cout<<"指定的人員沒有找到!\n";
}
else
{
p2->next=p1->next; //連接
delete p1;
cout<<"正確刪除!\n";
}
}
3.7.8 Modify函數(shù)
void College::Modify() //修改職工
{
cout<<"\t\t****************高校工資管理系統(tǒng)******** 25、***********\n\n\n";
cout<<"\n\t\t\t\t** 修改職工**\n";
int No;
Person *p1,*p2;
cout<<"編號:"; cin>>No;
if(!Find(No,&p1,&p2))
{
cout<<"指定的人員沒有找到!\n";
}
else
{
p1->Output(); //輸出原來的職工信息(做提示)
p1->Input(); //輸入新的職工信息(更新)
cout<<"修改完成!\n";
}
}
3.7.9 26、 Print函數(shù)
void College::Print() //輸出職工信息
{
cout<<"\t\t****************高校工資管理系統(tǒng)*******************\n\n\n";
cout<<"\n** 職工信息表**\n\n";
cout<<"編號\t姓名\t崗位\t\t其它\t工資\n";
Person *p=PL->next;
if(!p)
{
cout<<"無職工記錄!\n";
return;
}
while(p) //遍歷鏈表,輸出職工信息
{
p->Ou 27、tput();
p=p->next;
}
}
3.7.10 Save函數(shù)
void College::Save() //職工信息存盤
{
ofstream f("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";
}
3.7. 28、11 Load函數(shù)
void College::Load() //職工信息裝入
{
char buf[81]; //臨時(shí)空間
char Duty; //人員類型
Person *p2; //新建結(jié)點(diǎn)的指針
long t; //讀寫位置
//清除現(xiàn)有結(jié)點(diǎn)(保留頭結(jié)點(diǎn))
Clear();
//打開文件
ifstream f("Person.dat",ios::in);
//建立結(jié)點(diǎn),讀數(shù)據(jù)
Person *p=PL; //尾結(jié)點(diǎn)指針
while(1)
{
//讀取人員 29、類型
t=f.tellg();
f>>buf>>buf>>Duty;
if(f)
{
//根據(jù)人員類型創(chuàng)建新結(jié)點(diǎn)
switch(Duty)
{
case '0': p2=new Teacher; break;
case '1': p2=new Assistant; break;
case '2': p2=new Manager; break;
case '3': p2=new Teacher_Assistant; break;
30、 case '4': p2=new Manager_Teacher; break;
default: f.close(); return;
}
p->next=p2;
p=p->next;
f.seekg(t);
p->Input(f);
}
else
break;
}
//關(guān)閉文件
f.close();
cout<<"Person.dat數(shù)據(jù)已裝入.\n";
}
3.7.12 Finding函數(shù)
v 31、oid College::Finding()
{
cout<<"\t\t****************高校工資管理系統(tǒng)*******************\n\n\n";
cout<<"\n\t\t\t\t**查找職工**\n";
Person *p1,*p2;
int ID;
cout<<"編號;";
cin>>ID;
cout<<"\n\n";
p1=PL->next;
p2=PL;
while(p1)
{
if((p1)->No==ID)
{
cout<<"編號\t姓名\t崗位\t\t其它\t工資 32、\n";
(p1)->Output();
break;
}//找到
else
{
p2=p1; //繼續(xù)查找
p1=(p1)->next;
}
}
}
3.8 界面函數(shù)
char Meau()
{
char c;
int flag;
do
{
system("cls");
flag=1;
cout<<"\t\t****************高校工資管理系統(tǒng)*******************\n\n\n";
33、 cout<<"\t\t\t┏━━━━━━━━━━━━━━━━┑\n";
cout<<"\t\t\t┃ ┃\n";
cout<<"\t\t\t┃ 1、增加職工 ┃\n";
cout<<"\t\t\t┃ 2、刪除職工 ┃\n";
cout<<"\t\t\t┃ 3、查找職工 ┃\n";
cout<<"\t\t\t┃ 4、修改職工 34、 ┃\n";
cout<<"\t\t\t┃ 5、輸出職工信息 ┃\n";
cout<<"\t\t\t┃ 6、數(shù)據(jù)存盤 ┃\n";
cout<<"\t\t\t┃ 7、數(shù)據(jù)裝入 ┃\n";
cout<<"\t\t\t┃ 8、退出 ┃\n";
cout<<"\t\t\t┗━━━━━━━━━━━━━━━━┛\n";
cout<<"\n\n\n\t\t請輸入您的選擇:";
cin>>c 35、;
if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8')
flag=0;
}while(flag);
return c;
}//顯示主菜單,接受選擇
3.9 主函數(shù)
void main()
{
char ch;
College c; //定義大學(xué)對象
do{
ch=Meau();
switch(ch)
{
case '1': system("cls");c.Add(); cout<<"\n\n\t\t按任意 36、鍵結(jié)束...\n";getchar();getchar();break;
case '2': system("cls");c.Delete();cout<<"\n\n\t\t按任意鍵結(jié)束...\n";getchar();getchar();break;
case '3': system("cls");c.Finding();cout<<"\n\n\t\t按任意鍵結(jié)束...\n";getchar();getchar();break;
case '4': system("cls");c.Modify();cout<<"\n\n\t\t按任意鍵結(jié)束...\n 37、";getchar();getchar();break;
case '5': system("cls");c.Print(); cout<<"\n\n\t\t按任意鍵結(jié)束...\n";getchar();getchar();break;
case '6': system("cls");c.Save(); cout<<"\n\n\t\t按任意鍵結(jié)束...\n";getchar();getchar();break;
case '7': system("cls");c.Load(); cout<<"\n\n\t\t按任意鍵結(jié)束...\n";getchar();get 38、char();
};
}while(ch!='8');
}
4.系統(tǒng)評價(jià)
該系統(tǒng)實(shí)現(xiàn)了職工的添加,刪除,查找,顯示,修改,和數(shù)據(jù)的存盤與裝入操作,總體上來說功能比較全面,但仍有一些不足,如界面問題,以及程序中的許多繁瑣之處。
5.設(shè)計(jì)結(jié)果與分析
5.1 主界面
實(shí)現(xiàn)各種功能的選擇:
5.2 添加功能
實(shí)現(xiàn)添加功能,輸入“x“結(jié)束:
5.3 刪除功能
5.4 查找功能
5.5 修改功能
5.6 顯示功能
5.7 保存功能
5.8 讀入功能
6.設(shè)計(jì)體會與建議
6.1 體會
通過這次對《高校工資管理系統(tǒng)》這個(gè)實(shí)驗(yàn)的設(shè)計(jì),充分感受并體會到了C++中的面對對象設(shè)計(jì)的真意,以及學(xué)習(xí)了對一個(gè)程序的分解和分工完成的方法,掌握了一點(diǎn)編寫的技巧。實(shí)際的操作與解決問題的能力更有了大幅的提升。
6.2 建議
希望在以后的課程設(shè)計(jì)中,能更多的得到老師的幫助,可以幫助我們更清晰地理清思路,以及一些編程上的技巧。
7.附錄
7.1 成員
7.2 分工
18
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。