人员信息管理系统论文.docx
《人员信息管理系统论文.docx》由会员分享,可在线阅读,更多相关《人员信息管理系统论文.docx(56页珍藏版)》请在冰豆网上搜索。
人员信息管理系统论文
北华航天工业学院
《基于C++的面向对象程序设计实例》
课程设计报告
报告题目:
公司人员信息管理系统
作者所在系部:
计算机系
作者所在专业:
计算机科学与技术
作者所在班级:
作者姓名:
指导教师姓名:
完成时间:
2009-6-25
北华航天工业学院教务处制
摘要
在当前的市场经济体制下,企业要想提高市场的竞争力,不但要有好的产品,同时内部也要有科学的管理和劳动报酬的合理分配,就必须拥有一套完善的并且适合自身特点的信息化管理系统,以统计公司员工的信息、完善内部管理、明确各员工的分工、使劳动报酬的分配更合理、更便于操作。
本文利用VC++6.0编写程序,实现了公司对员工个人信息的统计和工资的计算。
本程序将员工的信息存储在文本文档中(txt格式),便于对员工信息的浏览。
本系统主要有五个功能模块:
添加员工信息、查询员工信息、修改员工信息、删除员工信息、显示员工信息。
已经过全面的系统测试,能够很好的运行,达到了预期的效果。
关键词:
程序设计公司信息管理文本文档工资计算
摘要Ⅰ
第1章绪论
1.1课程设计的目的1
1.2课程设计的背景和意义1
1.2.1课程设计的背景1
1.2.2课程设计的意义1
1.3课程设计环境1
第2章需求分析2
2.1问题描述2
2.2功能要求2
2.3问题的解决方案2
第3章系统设计3
3.1数据设计3
3.1.1类设计3
3.1.2类之间的关系3
3.1.3函数设计3
3.2结构设计4
3.2.1系统流程图4
3.2.2界面设计8
第4章系统实现8
4.1类实现8
4.2函数实现9
4.3主函数实现18
第5章系统测试19
5.1模块测试19
5.2课程设计过程中遇到的问题26
总结26
致谢26
参考文献26
附录27
第一章绪论
1.1课程设计的目的
(1)要求学生达到熟练掌握C++语言的基本知识和技能
(2)基本掌握面向对象程序设计的基本思路和方法
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
1.2课程设计的背景和意义
1.2.1课程设计的背景
1.理论研究基础
本次课程设计,主要研究类的继承、友员函数、函数的调用以及对文件进行各项操作(如添加、修改、删除、查询、显示等)。
这次课程设计应用面向对象的程序设计思路,着重使用在C++中对文本文件进行添加、查找、删除、修改等操作。
根据公司中不同员工工资的不同计算方法计算并储存员工的工资及其他信息。
2.技术层面的支持
(1)C++面向对象程序设计中类的多重继承和多级继承
(3)C++I/O流库的处理,文本文件的创建与保存。
(4)VC6.0软件
1.2.2课程设计的意义
通过设计能熟练掌握了C++语言的基本知识和技能、解决简单的面向对象程序设计问题、掌握面向对象程序设计的基本思路和方法、能熟练运用面向对象的方法以及C++的编程思想来完成系统的设计。
1.3课程设计环境
Windowsxp操作系统。
CPUP41.6GHz,内存256兆以上。
VC6.0
第二章需求分析
2.1问题描述
某公司需要存储雇员的编号、姓名、级别和月薪,并显示全部信息。
雇员分为经理、技术人员、销售人员和销售经理。
四类人员的月薪计算方法如下:
经理拿固定月薪8000元;技术人员按每小时100元领取月薪;销售人员按其当月销售额的4%领取工资;销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为销售总额的5‰。
设计一程序能够对公司人员进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。
2.2功能要求
1.本程序完成的功能主要有:
(1)显示雇员信息。
(2)添加雇员信息,并保存。
(3)删除雇员信息,并保存。
(4)修改雇员信息,并保存。
(5)查询雇员信息。
(6)系统退出。
2.学生在完成本次课程设计的基本要求后,从便于用户使用和功能完整性的角度考虑进一步完善程序,请参照题目1和2的要求。
2.3问题的解决方案
1.应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
2.分析系统中的各个实体及它们之间的关系;
3.根据问题描述,设计系统的类层次;
4.完成类层次中各个类的描述;
5.完成类中各个成员函数的定义;
6.完成系统的应用模块;
7.功能调试;
8.完成系统总结报告。
第三章系统设计
3.1数据设计
3.1.1类设计
本程序中共定义了五个类:
stuff(员工基类),manager(经理类),technician(技术人员类),seller(销售人员类),sellmanager(销售经理类)。
stuff(员工基类)数据成员有:
name(姓名),sex(性别),num(编号),monpay(月薪);成员函数有:
voiddisplay1();(输出函数)voidgetin_0();(读入姓名,编号,性别)voidgetin_();(从文件中读取数据的函数)friendvoidgetin1(manager*p_manager1,int&i1);(从文件中读取经理数据)
friendvoidgetin1(technician*p_technician1,int&j1);(从文件中读取技术人员数据)friendvoidgetin1(seller*p_seller1,int&m1);(从文件中读取销售人员数据)
friendvoidgetin1(sellmanager*p_sellmanager1,int&n1);(从文件中读取销售经理数据)
friendvoidputout1(manager*p_manager1,int&i1);(向文件中输出经理数据)friendvoidputout1(technician*p_technician1,int&j1);(向文件中输出技术人员数据)
friendvoidputout1(seller*p_seller1,int&m1);(向文件中输出销售人员数据)
friendvoidputout1(sellmanager*p_sellmanager1,int&n1);(向文件中输出销售经理数据)。
manager(经理类)数据成员:
pay(固定工资);成员函数:
voidgetin_1();(计算经理的月薪)。
technician(技术人员类)数据成员:
hour(工作时间);成员函数:
voidgetin_2();(计算技术人员的月薪)。
seller(销售人员类)数据成员:
market(月销售额)rate(提成率),dedu(提成);成员函数:
voidgetin_2();(计算销售人员的月薪),sellmanager(销售经理类)成员函数:
voidwages();(计算销售经理的月薪)。
上述类中的数据成员均是私有的,有利于数据的保护,成员函数为共有的。
3.1.2类之间的关系
manager(经理类),technician(技术人员类),seller(销售人员类)共有继承stuff(员工基类);sellmanager(销售经理类)共有继承manager(经理类),seller(销售人员类)
员工基类中有公有的数据:
姓名,性别,编号,月薪。
公有的基本输入输出函数。
销售经理的工资计算方法好是销售人员和经理的工资之和。
3.1.3函数设计
add(manager1,technician1,seller1,sellmanager1,i,j,m,n);(添加功能的实现)
check(manager1,technician1,seller1,sellmanager1);(查询功能的实现)
delet(manager1,technician1,seller1,sellmanager1);(删除功能的实现)
change(manager1,technician1,seller1,sellmanager1);(修改功能的实现)
p=esc();(退出功能的实现)
realize();(调用各个功能函数)
3.2结构设计
3.2.1系统流程图
图3—1
图3—2
图3—3
图3—4
图3—5
图3—6
图3—7
3.2.2界面设计
主菜单是一个功能选择菜单,里面包含了选择时各个功能的代号,由该语句输出cout<<"~~~~~~~~~~~~~~~~~~~"<<"添加<1>,查询<2>,删除<3>,修改<4>,退出<5>~~~~~~~~~~~~~~~~~~~"<"<子菜单的作用是选择不同的员工由该语句输出
cout<<"经理《1》,技术人员《2》,销售人员《3》,销售经理《4》"<第四章系统实现
4.1类实现
classstuff
{
protected:
stringname,sex;//定义姓名,性别,学号,月薪的变量
intnum,monpay;
public:
voiddisplay1();
voidgetin_0();
voidgetin_();
friendvoidgetin1(manager*p_manager1,int&i1);
friendvoidgetin1(technician*p_technician1,int&j1);
friendvoidgetin1(seller*p_seller1,int&m1);
friendvoidgetin1(sellmanager*p_sellmanager1,int&n1);
friendvoidputout1(manager*p_manager1,int&i1);
friendvoidputout1(technician*p_technician1,int&j1);
friendvoidputout1(seller*p_seller1,int&m1);
friendvoidputout1(sellmanager*p_sellmanager1,int&n1);
};
/*定义经理类*/
classmanager:
virtualpublicstuff
{
protected:
intpay;//固定工资
public:
voidgetin_1();//计算经理月薪
};
/*定义技术人员类*/
classtechnician:
publicstuff
{
private:
inthour;//工作时间
public:
voidgetin_2();//计算技术人员月薪
};
/*定义销售人员类*/
classseller:
virtualpublicstuff
{
protected:
intmarket;//月销售额
floatrate,dedu;//提成百分比,提成
public:
voidgetin_3();//计算销售人员月薪
};
/*定义销售经理类*/
classsellmanager:
publicseller,publicmanager
{
public:
voidwages();//计算销售经理月薪
};
4.2函数实现
/*类函数的定义*/
voidstuff:
:
display1()
{
cout<<"姓名"<<""<<"编号"<<""<<"性别"<<""<<"月薪"<cout<}
voidstuff:
:
getin_0()
{
cout<<"依次输入姓名,编号,性别"<cin>>name>>num>>sex;
}
voidstuff:
:
getin_()
{
cin>>name>>num>>sex>>monpay;
}
voidmanager:
:
getin_1()
{
cout<<"输入固定月薪"<cin>>pay;
monpay=pay;
}
voidtechnician:
:
getin_2()
{
cout<<"输入技术人员工作时间(单位:
小时)"<cin>>hour;
monpay=100*hour;
}
voidseller:
:
getin_3()
{
cout<<"输入销售人员的月销售额和提成百分比或销售经理的销售总额和提成百分比"<cin>>market>>rate;
dedu=rate*market;
monpay=dedu;
}
voidsellmanager:
:
wages()
{
monpay=pay+dedu;
}
/*从文件中读取数据*/
voidgetin1(manager*p_manager1,int&i1)
{
ifstreaminfile1("经理.txt",ios:
:
in);
if(!
infile1)
{
cerr<<"经理文件打开失败"<exit
(1);
}
for(i1;!
infile1.eof();i1++)
{
infile1>>(p_manager1+i1)->name>>(p_manager1+i1)->num>>(p_manager1+i1)->sex>>(p_manager1+i1)->monpay;
}
infile1.close();
}
voidgetin1(technician*p_technician1,int&j1)
{
ifstreaminfile2("技术人员.txt",ios:
:
in);
if(!
infile2)
{
cerr<<"技术人员文件打开失败"<exit
(1);
}
for(j1;!
infile2.eof();j1++)
{
infile2>>(p_technician1+j1)->name>>(p_technician1+j1)->num>>(p_technician1+j1)->sex>>(p_technician1+j1)->monpay;
}
infile2.close();
}
voidgetin1(seller*p_seller1,int&m1)
{
ifstreaminfile3("销售人员.txt",ios:
:
in);
if(!
infile3)
{
cerr<<"销售人员文件打开失败"<exit
(1);
}
for(m1;!
infile3.eof();m1++)
{
infile3>>(p_seller1+m1)->name>>(p_seller1+m1)->num>>(p_seller1+m1)->sex>>(p_seller1+m1)->monpay;
}
infile3.close();
}
voidgetin1(sellmanager*p_sellmanager1,int&n1)
{
ifstreaminfile4("销售经理.txt",ios:
:
in);
if(!
infile4)
{
cerr<<"销售经理文件打开失败"<exit
(1);
}
for(n1;!
infile4.eof();n1++)
{
infile4>>(p_sellmanager1+n1)->name>>(p_sellmanager1+n1)->num>>(p_sellmanager1+n1)->sex>>(p_sellmanager1+n1)->monpay;
}
infile4.close();
}
/*向文件中输出数据*/
voidputout1(manager*p_manager1,int&i1)
{
intt;
ofstreamoutfile1("经理.txt",ios:
:
out);
if(!
outfile1)
{
cerr<<"输出文件打开失败"<exit
(1);
}
for(t=0;t{
outfile1<<(p_manager1+t)->name<<""<<(p_manager1+t)->num<<""<<(p_manager1+t)->sex<<""<<(p_manager1+t)->monpay<}
outfile1.close();
}
voidputout1(technician*p_technician1,int&j1)
{
intt;
ofstreamoutfile2("技术人员.txt",ios:
:
out);
if(!
outfile2)
{
cerr<<"输出文件打开失败"<exit
(1);
}
for(t=0;t{
outfile2<<(p_technician1+t)->name<<""<<(p_technician1+t)->num<<""<<(p_technician1+t)->sex<<""<<(p_technician1+t)->monpay<}
outfile2.close();
}
voidputout1(seller*p_seller1,int&m1)
{
intt;
ofstreamoutfile3("销售人员.txt",ios:
:
out);
if(!
outfile3)
{
cerr<<"输出文件打开失败"<exit
(1);
}
for(t=0;t{
outfile3<<(p_seller1+t)->name<<""<<(p_seller1+t)->num<<""<<(p_seller1+t)->sex<<""<<(p_seller1+t)->monpay<}
outfile3.close();
}
voidputout1(sellmanager*p_sellmanager1,int&n1)
{
intt;
ofstreamoutfile4("销售经理.txt",ios:
:
out);
if(!
outfile4)
{
cerr<<"输出文件打开失败"<exit
(1);
}
for(t=0;t{
outfile4<<(p_sellmanager1+t)->name<<""<<(p_sellmanager1+t)->num<<""<<(p_sellmanager1+t)->sex<<""<<(p_sellmanager1+t)->monpay<}
outfile4.close();
}
/*定义添加功能函数*/
voidadd(manager*p_manager1,technician*p_technician1,seller*p_seller1,sellmanager*p_sellmanager1,int&i1,int&j1,int&m1,int&n1)
{
intstr;
cout<<"经理《1》,技术人员《2》,销售人员《3》,销售经理《4》"<cout<<"输入要添加的员工的职称代号:
"<cin>>str;
if(str==1)
{
cout<<"即将添加的经理的编号:
"<(p_manager1+i1-1)->getin_0();
(p_manager1+i1-1)->getin_1();
(p_manager1+i1-1)->display1();
}
elseif(str==2)
{
cout<<"即将添加的技术人员的编号:
"<(p_technician1+j1-1)->getin_0();
(p_technician1+j1-1)->getin_2();
(p_technician1+j1-1)->display1();
}
elseif(str==3)
{
cout<<"即将添加的销售人员的编号:
"<(p_seller1+m1-1)->getin_0();
(p_seller1+m1-1)->getin_3();
(p_seller1+m1-1)->display1();
}
elseif(str==4)
{
cout<<"即将添加的销售经理的编号:
"<(p_sellmanager1+n1-1)->getin_0();
(p_sellmanager1+n1-1)->getin_1();
(p_sellmanager1+n1-1)->getin_3();
(p_sellmanager1+n1-1)->wages();
(p_sellmanager1+n1-1)->display1();
}
else
cout<<"请输入正确的职称!
"<}
/*定义查询功能函数*/
voidcheck(manager*p_manager1,technician*p_technician1,seller*p_seller1,sellmanager*p_sellmanager1)
{
intt,str;
cout<<"经理《1》,技术人员《2》,销售人员《3》,销售经理《4》"<cout<<"请依次输入需要查询的员工的职称代号及其编号:
"<cin>>str>>t;
if(str==1)
(p_manager1+t)->display1();
elseif(str==2)
(p_technician1+t)->display1();
elseif(str==3)
(p_seller1+t)->display1();
elseif(str==4)
(p_sellmanager1+t)->display1();
else
cout<<"请输入正确的职称及编号!
"<}
/*定义删除函数*/
voiddelet(manager*p_manager1,technician*p_technician1,sel