c++课程设计高校工资管理系统.docx

上传人:b****7 文档编号:16299475 上传时间:2023-07-12 格式:DOCX 页数:22 大小:19.45KB
下载 相关 举报
c++课程设计高校工资管理系统.docx_第1页
第1页 / 共22页
c++课程设计高校工资管理系统.docx_第2页
第2页 / 共22页
c++课程设计高校工资管理系统.docx_第3页
第3页 / 共22页
c++课程设计高校工资管理系统.docx_第4页
第4页 / 共22页
c++课程设计高校工资管理系统.docx_第5页
第5页 / 共22页
c++课程设计高校工资管理系统.docx_第6页
第6页 / 共22页
c++课程设计高校工资管理系统.docx_第7页
第7页 / 共22页
c++课程设计高校工资管理系统.docx_第8页
第8页 / 共22页
c++课程设计高校工资管理系统.docx_第9页
第9页 / 共22页
c++课程设计高校工资管理系统.docx_第10页
第10页 / 共22页
c++课程设计高校工资管理系统.docx_第11页
第11页 / 共22页
c++课程设计高校工资管理系统.docx_第12页
第12页 / 共22页
c++课程设计高校工资管理系统.docx_第13页
第13页 / 共22页
c++课程设计高校工资管理系统.docx_第14页
第14页 / 共22页
c++课程设计高校工资管理系统.docx_第15页
第15页 / 共22页
c++课程设计高校工资管理系统.docx_第16页
第16页 / 共22页
c++课程设计高校工资管理系统.docx_第17页
第17页 / 共22页
c++课程设计高校工资管理系统.docx_第18页
第18页 / 共22页
c++课程设计高校工资管理系统.docx_第19页
第19页 / 共22页
c++课程设计高校工资管理系统.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c++课程设计高校工资管理系统.docx

《c++课程设计高校工资管理系统.docx》由会员分享,可在线阅读,更多相关《c++课程设计高校工资管理系统.docx(22页珍藏版)》请在冰点文库上搜索。

c++课程设计高校工资管理系统.docx

c++课程设计高校工资管理系统

C++课程设计

1.系统概述

通过设计一个较为简单的《高校工资管理系统》,进一步熟悉C++中类的概念、类的封装、继承的实现方式。

了解系统开发的需求分析、类层次设计、模块分析、编码测试、模块组装与整体调试的全过程,加深对C++的理解与VisualC++环境的使用;逐步熟悉程序设计的方法,并养成良好的编程习惯。

2.总体设计

2.1职工类的设计

基于C++中类的概念,类的封装,继承和抽象。

编写一个Person的基类包含共有的相关信息和操作,然后使职工类都继承于此基类从而实现多态。

2.2应用类的设计

编写一个Person类的友元类College类来实现添加,删除,查找等功能。

2.3文件的读写设计

通过College类中的Save()函数来实现数据的存储,保存在Person.dat中,而通过Load()函数来实现Person.dat数据的读入。

3.详细设计及系统实现

3.1Person类

classPerson//人员类(抽象类)

{

protected:

intNo;//编号

charName[20];//姓名

charDuty;//人员类别标志(0-教师,1-实验员,2-行政人员,3-教师兼实验员,4-行政兼教师)

doubleSalary;//基本工资

Person*next;//指针域

public:

Person()//基类构造

{

next=0;//指针域设置为空

}

virtual~Person()//基类虚析构

{

}

virtualvoidInput()=0;//从键盘输入数据

virtualvoidInput(ifstream&ifs)=0;//从文件输入数据

virtualvoidOutput()=0;//向屏幕输出数据

virtualvoidOutput(ofstream&ofs)=0;//向文件输出数据

virtualdoubleIncoming()=0;//计算收入

friendclassCollege;

};

3.2Teacher类

classTeacher:

virtualpublicPerson//教师类

{

protected:

intHours;//教师课时

public:

//为对象设置数据分为两种途径,通过)构造函数,)一般成员函数

//分开可以使得程序中应用更加灵活

//本程序采用:

缺省构造+Input()

Teacher()//构造函数,初始化部分数据

{

Duty='0';

Salary=800;

}

voidInput()//键盘补充输入其它数据

{

cout<<"编号:

";cin>>No;

cout<<"姓名:

";cin>>Name;

cout<<"教师上学期课时:

";cin>>Hours;

}

voidInput(ifstream&ifs)

{

ifs>>No>>Name>>Duty>>Hours;

}

voidOutput()

{

cout<

}

voidOutput(ofstream&ofs)

{

ofs<

}

doubleIncoming()

{

returnSalary+(Hours-120)*20;

}

};

3.3Assistant类

classAssistant:

virtualpublicPerson//实验员

{

protected:

intAllowance;

intHours;

public:

Assistant()

{

Duty='1';

Salary=650;

Allowance=150;

}

voidInput()

{

cout<<"编号:

";cin>>No;

cout<<"姓名:

";cin>>Name;

cout<<"实验员上学期实验课时:

";cin>>Hours;

}

voidInput(ifstream&ifs)

{

ifs>>No>>Name>>Duty>>Hours;

}

voidOutput()

{

cout<

}

voidOutput(ofstream&ofs)

{

ofs<

}

doubleIncoming()

{

returnSalary+Allowance+(Hours-70)*20;

}

};

3.4Manager类

classManager:

virtualpublicPerson//行政人员

{

protected:

intAllowance;

public:

Manager()

{

Duty='2';

Salary=750;

Allowance=250;

}

voidInput()

{

cout<<"编号:

";cin>>No;

cout<<"姓名:

";cin>>Name;

}

voidInput(ifstream&ifs)

{

ifs>>No>>Name>>Duty;

}

voidOutput()

{

cout<

}

voidOutput(ofstream&ofs)

{

ofs<

}

doubleIncoming()

{

returnSalary+Allowance;

}

};

3.5Teacher_Assistant类

classTeacher_Assistant:

publicTeacher,publicAssistant//教师兼实验员

{

public:

Teacher_Assistant()

{

Duty='3';

Teacher:

:

Salary=800;

}

voidInput()

{

cout<<"编号:

";cin>>No;

cout<<"姓名:

";cin>>Name;

cout<<"教师上学期课时:

";cin>>Teacher:

:

Hours;

cout<<"教师兼职实验员上学期实验课时:

";cin>>Assistant:

:

Hours;

}

voidInput(ifstream&ifs)

{

ifs>>No>>Name>>Duty>>Teacher:

:

Hours>>Assistant:

:

Hours;

}

voidOutput()

{

cout<

:

Hours<<""

<

:

Hours<<"\t"<

}

voidOutput(ofstream&ofs)

{

ofs<

:

Hours<<""

<

:

Hours<

}

doubleIncoming()

{

returnSalary+(Teacher:

:

Hours-120)*20

+Allowance+(Assistant:

:

Hours-70)*20;

}

};

3.6Manager_Teacher类

classManager_Teacher:

publicManager,publicTeacher//行政人员兼教师

{

public:

Manager_Teacher()

{

Duty='4';

Manager:

:

Salary=750;

}

voidInput()

{

cout<<"编号:

";cin>>No;

cout<<"姓名:

";cin>>Name;

cout<<"行政人员兼职教师上学期课时:

";cin>>Hours;

}

voidInput(ifstream&ifs)

{

ifs>>No>>Name>>Duty>>Hours;

}

voidOutput()

{

cout<

}

voidOutput(ofstream&ofs)

{

ofs<

}

doubleIncoming()

{

returnSalary+Allowance+Hours*20;

}

};

3.7College类

3.7.1头文件

classCollege

{

private:

Person*PL;

voidClear();

intCollege:

:

Find(intID,Person**p1,Person**p2);

public:

College();//构造

~College();//析构

voidAdd();//增加职工

voidDelete();//删除职工

voidModify();//修改职工

voidPrint();//输出职工信息

voidSave();//职工信息存盘

voidLoad();//职工信息装入

voidFinding();//查找职工

};

3.7.2构造函数

College:

:

College()//构造函数(创建个头结点的链表)

{

Person*p=newTeacher;

PL=p;

cout<<"自动装入数据...\n";

Load();

}

3.7.3析构函数

College:

:

~College()//析构函数(仅保留个头结点)

{

Person*p=PL;

while(p)//逐个删除结点,包括头结点

{

PL=p->next;

deletep;

p=PL;

}

PL=0;

}

3.7.4Add函数

voidCollege:

:

Add()//增加职工

{

cout<<"\t\t****************高校工资管理系统*******************\n\n\n";

cout<<"\n\t\t\t\t**增加职工,输入x结束**\n\n";

//查找尾结点

Person*p=PL;

while(p->next)p=p->next;

charch='m';

//创建新结点,录入数据,连接到链表

Teacher*pt;

Assistant*pa;

Manager*pm;

Teacher_Assistant*pta;

Manager_Teacher*pmt;

cout<<"职工分类码[0-教师,1-实验员,2-行政人员,3-教师兼实验员,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;

}

}

3.7.5Find函数

//查找职工结点(返回-找到,-未找到.结点指针由p1返回,p2为前看指针)

intCollege:

:

Find(intID,Person**p1,Person**p2)

{

*p1=PL->next;

*p2=PL;

while(*p1)

{

if((*p1)->No==ID)

break;//找到

else

{

*p2=*p1;//继续查找

*p1=(*p1)->next;

}

}

return*p1?

1:

0;

}

3.7.6Clear函数

voidCollege:

:

Clear()//清除所有的职工结点(仅保留头结点)

{

Person*p=PL->next;

while(p)

{

PL->next=p->next;

deletep;

p=PL->next;

}

}

3.7.7Delete函数

voidCollege:

:

Delete()//删除职工

{

cout<<"\t\t****************高校工资管理系统*******************\n\n\n";

cout<<"\n\t\t\t\t**删除职工**\n";

intNo;

Person*p1,*p2;

cout<<"编号:

";cin>>No;

if(!

Find(No,&p1,&p2))

{

cout<<"指定的人员没有找到!

\n";

}

else

{

p2->next=p1->next;//连接

deletep1;

cout<<"正确删除!

\n";

}

}

3.7.8Modify函数

voidCollege:

:

Modify()//修改职工

{

cout<<"\t\t****************高校工资管理系统*******************\n\n\n";

cout<<"\n\t\t\t\t**修改职工**\n";

intNo;

Person*p1,*p2;

cout<<"编号:

";cin>>No;

if(!

Find(No,&p1,&p2))

{

cout<<"指定的人员没有找到!

\n";

}

else

{

p1->Output();//输出原来的职工信息(做提示)

p1->Input();//输入新的职工信息(更新)

cout<<"修改完成!

\n";

}

}

3.7.9Print函数

voidCollege:

:

Print()//输出职工信息

{

cout<<"\t\t****************高校工资管理系统*******************\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->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();//关闭文件

cout<<"职工信息已经保存在Person.dat.\n";

}

voidCollege:

:

Load()//职工信息装入

{

charbuf[81];//临时空间

charDuty;//人员类型

Person*p2;//新建结点的指针

longt;//读写位置

//清除现有结点(保留头结点)

Clear();

//打开文件

ifstreamf("Person.dat",ios:

:

in);

//建立结点,读数据

Person*p=PL;//尾结点指针

while

(1)

{

//读取人员类型

t=f.tellg();

f>>buf>>buf>>Duty;

if(f)

{

//根据人员类型创建新结点

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);

}

else

break;

}

//关闭文件

f.close();

cout<<"Person.dat数据已装入.\n";

}

voidCollege:

:

Finding()

{

cout<<"\t\t****************高校工资管理系统*******************\n\n\n";

cout<<"\n\t\t\t\t**查找职工**\n";

Person*p1,*p2;

intID;

cout<<"编号;";

cin>>ID;

cout<<"\n\n";

p1=PL->next;

p2=PL;

while(p1)

{

if((p1)->No==ID)

{

cout<<"编号\t姓名\t岗位\t\t其它\t工资\n";

(p1)->Output();

break;

}//找到

else

{

p2=p1;//继续查找

p1=(p1)->next;

}

}

}

3.8界面函数

charMeau()

{

charc;

intflag;

do

{

system("cls");

flag=1;

cout<<"\t\t****************高校工资管理系统*******************\n\n\n";

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、修改职工┃\n";

cout<<"\t\t\t┃5、输出职工信息┃\n";

cout<<"\t\t\t┃6、数据存盘┃\n";

cout<<"\t\t\t┃7、数据装入┃\n";

cout<<"\t\t\t┃8、退出┃\n";

cout<<"\t\t\t┗━━━━━━━━━━━━━━━━┛\n";

cout<<"\n\n\n\t\t请输入您的选择:

";

cin>>c;

if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8')

flag=0;

}while(flag);

returnc;

}//显示主菜单,接受选择

3.9主函数

voidmain()

{

charch;

Collegec;//定义大学对象

do{

ch=Meau();

switch(ch)

{

case'1':

system("cls");c.Add();cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();break;

case'2':

system("cls");c.Delete();cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();break;

case'3':

system("cls");c.Finding();cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();break;

case'4':

system("cls");c.Modify();cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();break;

case'5':

system("cls");c.Print();cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();break;

case'6':

system("cls");c.Save();cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();break;

case'7':

system("cls");c.Load();cout<<"\n\n\t\t按任意键结束...\n";getchar();getchar();

};

}while(ch!

='8');

}

4.系统评价

该系统实现了职工的添加,删除,查找,显示,修改,和数据的存盘与装入操作,总体上来说功能比较全面,但仍有一些不足,如界面问题,以及程序中的许多繁琐之处。

5.设计结果与分析

5.1主界面

实现各种功能的选择:

5.2添加功能

实现添加功能,输入“x“结束:

5.3删除功能

5.4查找功能

5.5修改功能

5.6显示功能

5.7保存功能

5.8读入功能

6.设计体会与建议

6.1体会

通过这次对《高校工资管理系统》这个实

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2