工资管理系统
摘 要
职工工资管理系统是由职工信息管理模块和工资信息管理模块组成。职工工资管理系统可以实现对职工基本工资进行管理、实际发放工资管理、职工信息记录的查询等多项管理。在模块中分别实现对职工基本信息管理。如:添加职工、修改职工信息、删除职工信息、查询职工信息等功能程序设计。该工资管理系统采用Visual C++面向对象程序设计。事先,我们对程序进行了粗略的分析,确定了C++中类、构造函数、成员函数等函数,接着通过对各种函数的使用,编出了这个职工工资管理系统,最后在McrosoftVisual C++软件中不断调试运行,并发现错误,解决错误。并且经过适当完善,初步实现了设计目标。
关键词:;面向对象;类;工资管理
《C++程序设计》课程设计
------职工工资管理
一、引 言
随着信息时代的到来,计算机应用十分广泛。职工工资管理是企业单位必不可少的管理程序,也是企业体制的重要组成部分。当前许多企业之中,真正使用计算机管理职工工资机制对企业来说非常的重要。
C++语言具有面向对象特性,是一种使用非常广泛的计算机编程语言,一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。面向对象编程中时程序设计的基本单位。但对象的静态数据往往是用某种类型的数据来表示,对象的动态属性要用成员函数来实现。面向函数的实现归根到底是算法的设计。
职工工资管理系统是以C++面向对象为基础编译出来的,其中用到了:类的使用、数组、循环体、函数的调用、封装等内容。
二、设计目的与任务
1、课程设计目的
<1>通过职工工资管理系统的编写,掌握C++面向对象设计,培养实事求是、认真、严谨的科学态度和刻苦钻研不断创新的精神,逐步建立正确的全局观。
<2>了解软件工程编程的思想,对以后的学习增加更多学习兴趣。
<3>提高各行业的工作效率,不断完善服务的质量。
2、课程设计任务
使用C++面向对象程序设计设计一个简易的工资管理系统。定义职工(employee)类,其中包括工号、姓名、性别、电话、家庭住址、所在科室和工资。(1)设计菜单实现功能选择;(2)添加功能:输入人员信息,并保存到文件中;(3)删除功能:输入人员编号实现删除,并保存到文件中
(4)修改功能:输入人员编号及其他相关信息,实现修改并保存到文件中
(5)查询功能①能够根据姓名精确查询人员信息;②能够根据所在科室精确查询该科室所有人员信息;(6)统计功能:根据性别分别统计男女员工的平均工资并输出结果
三、设计方案
1、总体设计
程序要求实现对工资进行统计并且显示职工所有信息,能够实行添加职工信息、查询职工信息、修改职工信息、查询职工信息等功能。
我们定义了一个Employee类(class Empolyee),我们定义了下述成员函数:
(1)void Addemployee();该函数添加职工信息。
(2)void Delectemployee();该函数删除职工信息。
(3)void Updaemployee();该函数修改职工信息。
(4)void reseacherstudentbyname();该函数用于按名字查询职工信息。
(5)void reseacherstudentbyoffice();该函数用于按科室查询职工信息。
(6)void add();该函数统计男女职工的平均工资。
(7)void SaveFile();该函数用于对文件的书写。
菜单输出放在主函数中。在函数中创建了高级数组vector,并用vector数组装创建的对象。
2、详细设计
(1)类的设计
class employee
{
public:
int id ,salary;
string name,tele,address,office,sex;
employee(int id ,stringname,string sex,string tele,string address,string office,int salary)
{
this->id=id;
this->salary=salary;
this->sex=sex;
this->name=name;
this->tele=tele;
this->address=address;
this->office=office;
}
};
(2)主函数的设计
int main()
{
while(true)
{
cout<<"========================职工工资管理系统========================="<<'\n'
<<"1.添加职工"<<'\n'
<<"2.删除职工"<<'\n'
<<"3.修改职工"<<'\n'
<<"4.按姓名查询职工"<<'\n'
<<"5.按科室查询职工"<<'\n'
<<"6.按性别统计职工平均工资职工"<<'\n'
<<"0.推出职工工资管理系统"<<'\n'
<<"========================职工工资管理系统========================="<<'\n';
cout<<"请输入你的选择:"<<endl;
int input;
cin>>input;
switch(input)
{
case 1:Addemployee(); break;
case 2: Delectemployee();break;
case 3: Updaemployee();break;
case 4:reseacherstudentbyname() ;break;
case 5:reseacherstudentbyoffice(); break;
case 6: add();break;
case 0:exit(1);break;
}
}
return 0;
}
(3)成员函数的设计
<1>文件书写函数:
voidSaveFile()
{
fstream file;
file.open("d:\\stuData.txt",ios::out);
vector<employee>::iteratoritr=stu.begin();
while(itr!=stu.end())
{
file<<(*itr).id<<"\n";
file<<(*itr).name<<"\n";
file<<(*itr).sex<<"\n";
file<<(*itr).tele<<"\n";
file<<(*itr).address<<"\n";
file<<(*itr).office<<"\n";
file<<(*itr).salary<<"\n";
itr++;
}
file.close();
}
<2>添加职工信息函数:
voidAddemployee()
{
intid,salary;
string name,tele,address,office,sex;
cout<<"请输入职工编号\n";
cin>>id;
cout<<"请输入职工名字\n";
cin>>name;
cout<<"请输入职工性别\n";
cin>>sex;
cout<<"请输入职工电话号码\n";
cin>>tele;
cout<<"请输入职工地址\n";
cin>>address;
cout<<"请输入职工科室\n";
cin>>office; cout<<"请输入职工薪水\n";
cin>>salary;
employeeT(id,name,sex,tele,address,office,salary );
stu.push_back(T);
cout<<"你已成功添加职工,现有"<<stu.size()<<"个职工"<<endl;
SaveFile();
}
<3>删除职工信息函数:
voidDelectemployee()
{
cout<<"请输入要删除的职工号";
int id;
cin>>id;
vector<employee>::iteratorp=stu.begin();
while(p!=stu.end())
{
if((*p).id==id)
{
stu.erase (p);
break;
}
p++;
}
cout<<"你已成功删除职工"<<endl;
SaveFile();
}
<4>修改职工信息函数:
voidUpdaemployee()
{
int id ,salary;
string name,tele,address,office,sex;
cout<<"输入你要修改的职工号\n";
cin>>id;
vector<employee>::iterator p=stu.begin ();
while(p!=stu.end())
{
if((*p).id=id)
{
cout<<"请输入修改职工的姓名\n";
cin>>name;
cout<<"请输入修改职工的性别\n";
cin>>sex;
cout<<"请输入修改职工的电话号码\n";
cin>>tele;
cout<<"请输入修改职工的地址\n";
cin>>address;
cout<<"请输入修改职工的科室\n";
cin>>office;
cout<<"请输入修改职工的薪水\n";
cin>>salary;
(*p).id=id;
(*p).name=name;
(*p).sex=sex;
(*p).tele=tele;
(*p).address=address;
(*p).office=office;
(*p).salary=salary;
break;
}
p++;
}
SaveFile();
}
<5>按名字查询职工信息函数:
voidreseacherstudentbyname()
{
cout<<"请输入你要查询的人的名字\n";
string name;
cin>>name;
vector<employee>::iterator p=stu.begin ();
while(p!=stu.end())
{
if((*p).name==name)
{
cout<<"职工的编号:\n"<<(*p).id<<endl;
cout<<"职工的姓名:\n"<<(*p).name<<endl;
cout<<"职工的性别:\n"<<(*p).sex<<endl;
cout<<"职工的电话号码:\n"<<(*p).tele<<endl;
cout<<"职工的地址:\n"<<(*p).address<<endl;
cout<<"职工的科室:\n"<<(*p).office<<endl;
cout<<"职工的薪水:\n"<<(*p).salary<<endl;
break;
}
p++;
}
}
<6>按科室查询职工信息:
voidreseacherstudentbyoffice()
{
cout<<"请输入你要查询的人的科室\n";
string office;
cin>>office;
vector<employee>::iterator p=stu.begin ();
while(p!=stu.end())
{
if((*p).office==office)
{
cout<<"职工的编号:\n"<<(*p).id<<endl;
cout<<"职工的姓名:\n"<<(*p).name<<endl;
cout<<"职工的性别:\n"<<(*p).sex<<endl;
cout<<"职工的电话号码:\n"<<(*p).tele<<endl;
cout<<"职工的地址:\n"<<(*p).address<<endl;
cout<<"职工的科室:\n"<<(*p).office<<endl;
cout<<"职工的薪水:\n"<<(*p).salary<<endl;
}
p++;
}
}
<7>统计职工平均工资函数:
void add()
{
int s=0,l=0,sum1=0,sum2=0;
vector<employee>::iterator p=stu.begin();
while(p!=stu.end())
{
if((*p).sex=="man" ){s++;sum1=sum1+(*p).salary;}
else if((*p).sex=="woman"){l++;sum2=sum2+(*p).salary;}
p++;
}
if(s==0)cout<<"男职工的平均薪水:"<<"0"<<endl;
else cout<<"男职工的平均薪水:"<<double(sum1)/s<<endl;
if(l==0)cout<<"女职工的平均薪水:"<<"0"<<endl;
else cout<<"女职工的平均薪水:"<<double(sum2)/l<<endl;
}
3、程序清单
#include<iostream>
#include<vector>
#include<string>
#include<fstream>
usingnamespace std;
classemployee
{
public:
int id ,salary;
string name,tele,address,office,sex;
employee(int id ,string name,stringsex,string tele,string address,string office,int salary)
{
this->id=id;
this->salary=salary;
this->sex=sex;
this->name=name;
this->tele=tele;
this->address=address;
this->office=office;
}
};
int main()
{
void Addemployee();
void Delectemployee();
void Updaemployee();
void reseacherstudentbyname();
void reseacherstudentbyoffice();
void add();
void SaveFile();
while(true)
{
cout<<"========================职工工资管理系统========================="<<'\n'
<<"1.添加职工"<<'\n'
<<"2.删除职工"<<'\n'
<<"3.修改职工"<<'\n'
<<"4.按姓名查询职工"<<'\n'
<<"5.按科室查询职工"<<'\n'
<<"6.按性别统计职工平均工资职工"<<'\n'
<<"0.推出职工工资管理系统"<<'\n'
<<"========================职工工资管理系统========================="<<'\n';
cout<<"请输入你的选择:"<<endl;
int input;
cin>>input;
switch(input)
{
case1:Addemployee(); break;
case 2: Delectemployee();break;
case 3: Updaemployee();break;
case 4:reseacherstudentbyname();break;
case 5:reseacherstudentbyoffice();break;
case 6: add();break;
case 0:exit(1);break;
}
}
return 0;
}
vector<employee>stu;
voidSaveFile()
{
fstream file;
file.open("d:\\stuData.txt",ios::out);
vector<employee>::iteratoritr=stu.begin();
while(itr!=stu.end())
{
file<<(*itr).id<<"\n";
file<<(*itr).name<<"\n";
file<<(*itr).sex<<"\n";
file<<(*itr).tele<<"\n";
file<<(*itr).address<<"\n";
file<<(*itr).office<<"\n";
file<<(*itr).salary<<"\n";
itr++;
}
file.close();
}
voidAddemployee()
{
int id,salary;
string name,tele,address,office,sex;
cout<<"请输入职工编号\n";
cin>>id;
cout<<"请输入职工名字\n";
cin>>name;
cout<<"请输入职工性别\n";
cin>>sex;
cout<<"请输入职工电话号码\n";
cin>>tele;
cout<<"请输入职工地址\n";
cin>>address;
cout<<"请输入职工科室\n";
cin>>office; cout<<"请输入职工薪水\n";
cin>>salary;
employeeT(id,name,sex,tele,address,office,salary );
stu.push_back(T);
cout<<"你已成功添加职工,现有"<<stu.size()<<"个职工"<<endl;
SaveFile();
}
voidDelectemployee()
{
cout<<"请输入要删除的职工号";
int id;
cin>>id;
vector<employee>::iteratorp=stu.begin();
while(p!=stu.end())
{
if((*p).id==id)
{
stu.erase (p);
break;
}
p++;
}
cout<<"你已成功删除职工"<<endl;
SaveFile();
}
voidUpdaemployee()
{
int id ,salary;
string name,tele,address,office,sex;
cout<<"输入你要修改的职工号\n";
cin>>id;
vector<employee>::iterator p=stu.begin ();
while(p!=stu.end())
{
if((*p).id=id)
{
cout<<"请输入修改职工的姓名\n";
cin>>name;
cout<<"请输入修改职工的性别\n";
cin>>sex;
cout<<"请输入修改职工的电话号码\n";
cin>>tele;
cout<<"请输入修改职工的地址\n";
cin>>address;
cout<<"请输入修改职工的科室\n";
cin>>office;
cout<<"请输入修改职工的薪水\n";
cin>>salary;
(*p).id=id;
(*p).name=name;
(*p).sex=sex;
(*p).tele=tele;
(*p).address=address;
(*p).office=office;
(*p).salary=salary;
break;
}
p++;
}
SaveFile();
}
voidreseacherstudentbyname()
{
cout<<"请输入你要查询的人的名字\n";
string name;
cin>>name;
vector<employee>::iterator p=stu.begin ();
while(p!=stu.end())
{
if((*p).name==name)
{
cout<<"职工的编号:\n"<<(*p).id<<endl;
cout<<"职工的姓名:\n"<<(*p).name<<endl;
cout<<"职工的性别:\n"<<(*p).sex<<endl;
cout<<"职工的电话号码:\n"<<(*p).tele<<endl;
cout<<"职工的地址:\n"<<(*p).address<<endl;
cout<<"职工的科室:\n"<<(*p).office<<endl;
cout<<"职工的薪水:\n"<<(*p).salary<<endl;
break;
}
p++;
}
SaveFile();
}
voidreseacherstudentbyoffice()
{
cout<<"请输入你要查询的人的科室\n";
string office;
cin>>office;
vector<employee>::iterator p=stu.begin ();
while(p!=stu.end())
{
if((*p).office==office)
{
cout<<"职工的编号:\n"<<(*p).id<<endl;
cout<<"职工的姓名:\n"<<(*p).name<<endl;
cout<<"职工的性别:\n"<<(*p).sex<<endl;
cout<<"职工的电话号码:\n"<<(*p).tele<<endl;
cout<<"职工的地址:\n"<<(*p).address<<endl;
cout<<"职工的科室:\n"<<(*p).office<<endl;
cout<<"职工的薪水:\n"<<(*p).salary<<endl;
}
p++;
}
}
void add()
{
int s=0,l=0,sum1=0,sum2=0;
vector<employee>::iterator p=stu.begin();
while(p!=stu.end())
{
if((*p).sex=="man"){s++;sum1=sum1+(*p).salary;}
else if((*p).sex=="woman"){l++;sum2=sum2+(*p).salary;}
p++;
}
if(s==0)cout<<"男职工的平均薪水:"<<"0"<<endl;
else cout<<"男职工的平均薪水:"<<double(sum1)/s<<endl;
if(l==0)cout<<"女职工的平均薪水:"<<"0"<<endl;
else cout<<"女职工的平均薪水:"<<double(sum2)/l<<endl;
}
4、程序调试与体会
这是一个关于职工信息管理系统,具有输入、输出、删除、查询、修改、保存、退出等功能。
可按照相关提示进行调试操作:
增加职工信息按“1”键;
删除职工信息按“2”键;
修改职工信息按“3”键;
按姓名查询职工信息按“4”键;
按科室查询职工信息按“5”键;
按性别统计职工平均工资按“6”键;
推出职工工资管理系统按“0”键;
我们在程序编写的过程中遇到了很多问题。如:类中有的数据定义为私用以致不能访问(如图0)
图0错误提示图
通过查询资料得知,基类中的私有成员可以以两种形式存在,以private或以protected的形式,以private的形式如果要继承的话需要友元,而以protected的形式的话可以以私有的形式直接继承(用protected方式声明派生类)。为了简单化,我们全部把它的成员公有化。
体会:
经过对职工信息管理系统的分析与编写,我们得到了很大的收获。自主学习的必要性更是解决问题的基础,我们5个人一组,在设计的过程中,我们相互讨论,相互学习,发挥出各自的优势,发现自己的不足,取长补短。更重要的是这次设计让我们对C++面向对象编程设计有了更深刻的认识和更全面的掌握,也提升了我们分析问题的能力和思考问题的逻辑能力,更明白实际调研的重要性。在系统分析和设计的部分仍然花了比较多的时间,特别是源代码的编写和调试,经过反复的改写、调试、再改写、调试,我们最终完成了任务。
运行结果:
程序运行的界面(主菜单)如图1所示。
图1:程序运行的界面图
在主菜单中功能选项中输入“1"进行添加职工信息,如图2。
图2:添加职工信息图
在主菜单功能选项中输入“2”可以进行删除职工信息(如图3):
图3:删除职工信息图
在主菜单功能选项中输入“3”可以进行修改职工信息(如图4):
图4:修改职工信息图
在主菜单功能选项中输入“4”可以进行按姓名查询职工信息(如图5):
图5:按姓名查询职工信息图
在主菜单功能选项中输入“5”可以进行按科室查询职工信息(如图6):
图6:按科室查询职工信息图
在主菜单功能选项中输入“6”可以进行职工信息统计(如图7):
图7:职工信息统计图
在主菜单功能选项中输入“0”退出管理系统(如图8):
图8:退出管理系统图
四、结 论
本次设计我们组的题目是职工工资管理系统,因为事先老师的细心指导,我们才得以的完成这次课程设计。在系统分析和设计的部分仍然花了比较多的时间,特别是源代码的编写和调试,经过反复的改写、调试、再改写、调试,我们最终完成了任务。
经过对职工信息管理系统的分析与编写,我们得到了很大的收获。自主学习的必要性更是解决问题的基础,我们五个人一组,在设计的过程中,我们相互讨论,相互学习,发挥出各自的优势,发现自己的不足,取长补短,增强了团队意识。更重要的是这次设计让我们对C++面向对象设计编程有了更深刻的认识和更全面的掌握,也提升了我们分析问题的能力和思考问题的逻辑能力,更明白实际调研的重要性。对面向对象编程有了深刻的理解,对软件工程有了了解。在以后的学习中我们会更加的努力,深刻的钻研,增强团队意识。
五、致 谢
感谢我们的指导老师袁辉勇老师,谢谢他在我们的课程设计过程中提出了指导性的方案和架构,并指引我们阅读相关的资料和书籍,使我们在不熟悉的领域中仍能迅速掌握新的方法和技术。
感谢校领导给我们这次难得的锻炼机会,让我们能更好的理解和实践 C++面向对象编程,让我们对面向对象编程有了更深刻的认知,对已学知识有了更进一步的巩固。
也谢谢我的同学与我们一起合作,共同完成了这个课程设计。
六、参考文献
[1] 冯博琴等编.《C++程序设计语言》.北京:中国铁道出版社,2011
[2] 揣锦华等编.《C++程序设计语言》.西安:西安电子科技大学出版社,2003
[3]刘振安编著.《C++程序设计课程设计》.北京:机械工业出版社,2007.
[4] 吕凤翥著.《C++语言基础教程》.北京:清华大学出版社,2001
[5]张国峰编著.《C++语言及其程序设计教程》.北京:电子工业出版社,1996.
[6] 伍俊良《管理信息系统(MIS)开发与应用》.北京:科学出版社,1999
[7] 邓飞,李瑶主编.《C++程序设计语言》.北京:中国人民出版社,1993
[8] 郑莉,董渊,张瑞丰.《C++语言课程设计》(第三版).北京:清华大学出版社,2004
[9] 钱能.《C++程序设计实验指导》.北京:清华大学出版社,2005
[10] 罗建军等编.《C++程序设计教程学习指导》.北京:高等教育出版社,2003