C++设计报告Word文件下载.docx
《C++设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++设计报告Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。
每小时工资额*总工作小时数
文本界面为:
1.新增员工信息
2.删除员工信息
3.员工信息搜索(按姓名)
4.员工信息统计(按姓名或工资或类别)
5.员工信息分类存储
6.员工信息导入
7.按工资排序
8.退出
第一章绪论
1.1课程设计的目的
C++作为一种面向对象的程序设计语言,它支持对类的抽象.了解面向对象的程序设计思想及其方法,其核心概念--类,包括类及其派生类的声明实现利用类来解决具体问题,并达到以下目的:
(1)要求学生达到熟练掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
1.2课程设计的背景和意义
C++是一门实践性很强的课程,光靠听课和看书是学不好的。
衡量学习好坏的标准不是懂不懂。
所以开设了这次课程设计,目的在于使学生达到熟练掌握C++语言的基本知识和技能,掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
这对于进一步巩固C++知识是一个很好的机会。
同时我们在这次课程设计的过程中学到了很多课本以外的知识,解决了很多以前没有碰到的问题,可以说对程序设计这门课有了一个新的认识。
1.3课程设计环境
本次课设采用的是MicrosoftVisualC++6.0编写程序
第二章需求分析
2.1问题描述
制作公司人员信息管理系统实现数据录入、数据删除、数据保存和数据显示以及数据查询等一些功能。
2.2功能要求
(1)根据自己的喜好设计系统封面
(2).系统应包括记录编辑和记录查询等功能模块。
记录编辑功能完成职工记录编辑的记录增加、记录删除和记录查询等功能。
记录查询功能可以对数据集中的记录进行查询,要求按职工姓名进行查询
2.3问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
2)分析系统中的各个实体及它们之间的关系;
3)根据问题描述,设计系统的类层次;
4)完成类层次中各个类的描述;
5)完成类中各个成员函数的定义;
6)完成系统的应用模块;
7)功能调试;
8)完成系统总结报告。
第三章系统设计
3.1数据设计
3.1.1类设计
本次程序设计一共定义了五个类:
Employee,Manager,Floater,Workers和Salesman。
在Employee类里定义了Empoyee类的缺省构造函数和它的析构函数,ADD函数用于实现新增成员的输入,delete1函数用于实现数据的删除,displayall函数用于实现数据的显示。
Find用于实现在查找的时候得到姓名。
Sort用于分类。
排序用于根据工资排序。
Manager,worker,floater和Salesman类公有继承Employee类,它们的函数功能,数据成员与基类的基本相同。
3.1.2函数设计
在五个类里定义了它们的的缺省构造函数和它的析构函数,Add函数用于实现新增成员的输入,通过for循环给对象数组赋值来实现。
change函数实现数据的更改。
delete1函数用于实现数据的删除。
displayall函数用于实现数据的显示。
Find用于实现根据姓名查找。
Paixu实现通过工资高低排序。
Sort实现通过员工信息分类存储。
3.2结构设计
3.2.1系统流程图
3.2.2程序清单
1、main函数:
实现各个参数的定义及赋初值,提供选择界面;
2、基类:
定义参数、相关函数以及虚函数
3、派生类:
实现新增员工信息、删除员工信息、员工信息搜索(按姓名)、员工信息统计(按姓名或工资或类别)、员工信息分类存储、员工信息导入、按工资排序、退出等功能。
3.2.3源程序代码:
#include<
stdafx.h>
#include<
iostream.h>
string.h>
fstream.h>
iomanip.h>
stdlib.h>
intn=0;
//统计雇员的人数
intK=0;
//统计销售的人数
intH=0;
//统计临时工人的人数
intM0=0;
//统计经理的人数
intJ=0;
//统计一般工人的人数
classEmployee
{
protected:
charname[20];
//姓名
chargender[20];
//性别
chardate[20];
//出生日期
floataccumPay;
//月薪总额
charStaffcategory[20];
public:
Employee(){accumPay=0;
}
~Employee(){}
voidset_name(char*na){strcpy(name,na);
voidset_gender(char*ge){strcpy(gender,ge);
voidset_date(char*da){strcpy(date,da);
voidset_Staffcategory(char*staff){strcpy(Staffcategory,staff);
voidset_accumpay(floataccu){accumPay=accu;
char*get_name(){returnname;
char*get_gender(){returngender;
char*get_date(){returndate;
floatget_accumpay(){returnaccumPay;
char*get_Staffcategory(){returnStaffcategory;
}
virtualvoidcomputeSalay()=0;
virtualvoidget_data()
{
cout<
<
"
(姓名性别出生日期员工类别)"
;
cin>
>
name>
gender>
date>
Staffcategory;
}
virtualvoiddisplay()
name<
"
gender<
date<
<
Staffcategory<
accumPay<
endl;
};
//普通工人
classWorker:
publicEmployee
{
private:
floatdayRate;
//每天酬金
intworkDays;
//当月工作天数
Worker(){dayRate=180;
virtualvoidget_data()
cout<
(姓名性别出生日期员工类别工作天数)"
Staffcategory>
workDays;
floatget_dayRate(){returndayRate;
intget_workDays(){returnworkDays;
voidcomputeSalay(){accumPay=dayRate*workDays;
voiddisplay()
{
//cout<
一般工人显示数据如下:
姓名性别出生日期员工类别当月工作天数每天酬金月薪总额"
<
workDays<
dayRate<
};
//销售人员
classSalesman:
floatcommRate;
//每件产品提成额
floatsales;
//销售的产品数量
floatsalary;
//基本工资
Salesman()
commRate=8;
salary=3000;
(姓名性别出生日期员工类别销售产品数量)"
sales;
voidcomputeSalay(){accumPay=commRate*sales+salary;
voiddisplay()
销售人员数据显示数据如下:
姓名性别出生日期员工类别销售的产品总量每件产品提成额基本工资"
//<
月薪总额"
sales<
commRate<
salary<
//经理
classManager:
floatmonthSalary;
//月工资
Manager(){monthSalary=10000;
floatget_monthSalary(){returnmonthSalary;
voidcomputeSalay(){accumPay=monthSalary;
经理显示数据如下:
姓名性别出生日期员工类别月薪总额"
//临时工
classFloater:
floathourRates;
//每小时酬金
intworkHours;
//当月工作时数
Floater(){hourRates=15;
(姓名性别出生日期员工类别当月工作时数)"
workHours;
floatget_hour_Rates(){returnhourRates;
intget_workHours(){returnworkHours;
voidcomputeSalay(){accumPay=hourRates*workHours;
voiddisplay()
姓名性别出生日期员工类别当月工作时数每小时酬金月薪总额"
workHours<
hourRates<
Employee*E[100];
Employee*W[100];
Employee*S[100];
Employee*F[100];
Employee*M[100];
voiddisplayAll()
ifstreamin("
employee.dat"
ios:
:
binary);
if(in.fail())
TheFileisnotsucessfullyopened"
for(inti=0;
i<
n;
i++)
in.read((char*)E[i],sizeof(E[i]));
for(intk=0;
k<
k++)
E[k]->
display();
in.close();
voidADD()
{intm;
ofstreamoutput("
app);
if(output.fail())
{
Thefilewasnotsuccessfullyopened"
}
cout<
新增员工人数"
cin>
m;
for(inti=0;
chart;
输入第"
i+1<
个员工信息"
选择(w:
一般工人m:
经理s:
销售人员f:
临时工)"
cin>
t;
if(t=='
w'
)
{
E[n]=newWorker();
E[n]->
get_data();
computeSalay();
output.write((char*)E[n],sizeof(E[n]));
n++;
m'
{
E[n]=newManager();
E[n]->
output.write((char*)E[n],sizeof(E[n]));
if(t=='
s'
E[n]=newSalesman();
E[n]->
f'
E[n]=newFloater();
output.close();
//排序
voidPaixu()
for(intp=0;
p<
p++)
in.read((char*)E[p],sizeof(E[p]));
in.close();
inti,j;
Employee*temp;
intswap;
for(i=0;
n-1;
swap=0;
for(j=0;
j<
n-i-1;
j++)
if(E[j]->
get_accumpay()>
E[j+1]->
get_accumpay())
{
swap=1;
temp=E[j];
E[j]=E[j+1];
E[j+1]=temp;
}
if(!
swap)break;
ofstreamout("
for(intt=0;
t<
t++)
out.write((char*)E[t],sizeof(E[t]));
out.close();
voidDELETE()
ofstreamout("
ifstreamin("
in.seekg(0);
charsname[20];
输入要删除的姓名:
sname;
for(inti=0;
{in.read((char*)E[i],sizeof(E[i]));
if(strcmp(E[i]->
get_name(),sname)==0)
for(intj=i;
E[n-1]=NULL;
n--;
out.write((char*)E[i],sizeof(E[i]));
voidFind()
输入要查询的姓名:
E[i]->
elseif(i==n)cout<
此人不存在"
voidsort()
ofstreamout1("
Worker.dat"
ofstreamout2("
Floater.dat"
ofstreamout3("
Salesman.dat"
ofstreamout4("
Manager.dat"
ifstreamin1("
ifstreamin2("
ifstreamin3("
ifstreamin4("
get_Staffcategory(),"
Worker"
)==0)
W[J]=newWorker();
W[J]=E[i];
out1.write((char*)W[J],sizeof(W[J]));
//W[J]->
J++;
Salesman"
{S[K]=newSalesman();
S[K]=E[i];
out3.write((char*)S[K],sizeof(S[K]));
//S[K]->