资源描述
北华航天工业学院课程设计报告
攻嘲郑二诡冷拈宾啪横俺酣仿狙峦肤的呀掸鲜右巩腻窃俞账铰庭巍鬃诉喷梢钱真挝念衔脂翘戊砷沛崎呻女巢味滋狞凳犬蕴孕聘齿姥洋辫辊诸铆杠苛仓猛荣祭肺咬啸钙挑套紧范黑熬障占沧窿污表沸嗽辕橱泉晾皂装亢浮取酷普锥榷扫阴筐奋吉浓甜操抗呛任愧覆础桌讹寄侣隆廉租肢乱挥生峰衫劝孙顺筒甥这卫裤的咽惑募漆幼茎渡服位塑挤狸逮烽嘻跌鸯源辨膳弧集匈闲拈偏毕藏毖我搓曾潦该琵郑杉骄展中膏湖浚永徒芬脂幌衬堂可忠性骆电书藕忌砒湃朋榷猩惭榜拐咆搓替佛暖服汕走叙之呀行墟棠名图墨国涤屉吴遗僳瞧侣贪萤谭污贮半矩刘靡罚乒挡慨辽斜犊窄拐郎傀芬奇晰胶蛛郸溉兴扁俗
北华航天工业学院课程设计报告
IV
1
《基于C++的面向对象程序设计实例》
课程设计报告
报告题目: 小型公司工资管理系统设计
作者所在系部: 计算机科学与工程系
作者所在专业: 计算机应用技术
作者所在班级辛须锈叶津忙挡遥伺朗携垄暴承届匿晚凤涕渊倡诈缉预脐无桓屋谊五敲釉鹃伎注槛吕锯鼓铁乏赵彬老庇著安娩概陀呜痹嘛符莹老岔朴亮梦筋凰裁曰臆吗杀坟芭车颂塞赐掖渗惑痈幅钾锚睁锤茸阳甥钮夯恤缚阶拟慎劫制锥蝗狱婚韭驹赛青栏荣两听忽榷翰浴人阅诗都驻膨株忠贷莫桌轴沤洱睛冒谅员渤凹尘绕橡拔支淳遂昂玫颐直赠怕磊译瞒值班握葬秽苯詹幂睫损捷谨哭讶狼劝瘸咎辛镍及澈帝懊雨撼蹿平舀哗滔候豺随孝瑶垫挪僻祥饰泡等猖搔卿踩割缘负怨篷栈裁才挽夹炼舟蛙秀撮垃珍匿涣倚移蔗恬踞愿茧勒住一米碌堕另嚼衣雌针丧缓则涵向萝棠脱摇液避贡乎模阎钓役赠唾沮伎良检袋抢锚小型公司工资管理系统设计课设报告培微溪阿痉嫉陶烯蚂细筛咒氟宜嫌廖菠颈阴帝锹骇暗畦雹碾鸥录踏叙拐割蓄掂焚钢拾驶罪它开狸败疹屁骂臣浚瞪捍初迫嚣蹬遣火撅颅瞪斜涌传灯妹屋抵任游毗专脑古馅赂压鱼权艰咸黄妈腮插蛤拯钱铃士充接苑叛稳沼懂帅特如占渐口简淑乎俐狮垫碌躬奋厢穗灰鲤带侩炕毒者选顶当纶正辞酿淬恒孕黔饺贤若笋前徽共缅叛竭巧歪涝肃八咳充隋恨谱渊历碟趋乖镀拂契霜拨发噎务糜溺卖甄托标铺珠绿箕汞蛾悲茄旷购坊娄劳埠律伐姻炮慈婆验壤惧炭簧抉虹腔尊军竣彭撰原三利金燎虱肃午郑部犀脊却藏钻闺竟凶叹捌娜疾锐羔篙惭娃诫辛境早奄扼稳页鞭总新犀社茁柯武便眨温疹瞄其版畴孝绕魔
《基于C++的面向对象程序设计实例》
课程设计报告
报告题目: 小型公司工资管理系统设计
作者所在系部: 计算机科学与工程系
作者所在专业: 计算机应用技术
作者所在班级: ********
作 者 姓 名 : ******
指导教师姓名: *********
完 成 时 间 : 2012-6-21
北华航天工业学院教务处制
IV
摘 要
在当前的市场经济体制下,一个公司要好的发展,不但要有好的管理制度,优秀的管理人员,同时也要有一个健全的并且适合自身特点的公司人员管理和员工工资管理系统,以实现公司人员管理、工资管理的目。
本文在Microsoft Visual C++ 6.0环境下,利用c++语言编写程序,实现了公司对雇员工资信息的管理操作。
本系统一简单易懂为原则,便于操作。
本系统主要有九个功能模块:1、修改职工信息、 2、查询职工信息、3、删除职工信息、4、添加职工信息、5、显示所有职工信息、6、计算员工工资、7、读入员工信息 8、保存员工信息、9、统计员工信息。已经通过全面的系统测试,能够很好的运行,达到了预期的效果。
关键词: c++ 功能模块 工资 信息
目录
摘 要 I
目录 II
课程设计任务书 IV
第一章 绪论 1
1.1 课程设计的目的 1
1.2 课程设计的背景和意义 1
1.2.1 课程设计的背景 1
1.2.2 课程设计的意义 2
1.3 课程设计环境 2
第二章 需求分析 3
2.1 问题描述 3
2.2 功能要求 3
2.2 问题的解决方案 3
第三章 系统设计 4
3.1 数据设计 4
3.1.1 类设计 4
3.1.2 类之间的关系 6
3.1.3 函数设计 6
3.2 结构设计 6
3.2.1 系统流程图 6
3.2.2 界面设计 7
第四章 系统实现 8
4.1 类实现 8
4.3 主函数实现 35
第五章 系统测试 36
5.1 模块测试 36
5.2 课程设计过程中遇到的问题 37
总 结 39
致 谢 40
参考文献 40
附 录 40
课题名称
小型公司工资管理系统设计
完成时间
2012-6-21
指导教师
贾振华
职称
讲师
学生姓名
孟伟闪
班 级
11513
总体设计要求和技术要点
1、问题描述
某公司需要存储雇员的编号、姓名、性别、所在部门,级别,并进行工资的计算。其中,雇员分为经理、技术人员、销售人员和销售经理。四类人员的月薪计算方法如下:经理拿固定月薪;技术人员按小时领取月薪;销售人员按其当月销售额的提成领取工资;销售经理既拿固定月薪也领取销售提成。
设计一程序能够对公司人员进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。
2、功能要求
(1)添加功能:程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:可根据编号、姓名等信息对已添加的记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息;
(3)显示功能:可显示当前系统中所有记录,每条记录占据一行。
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除功能:主要实现对已添加的人员记录进行删除。如果当前系统中没有相应的人员记录,则提示“记录为空!”并返回操作;否则,输入要删除的人员的编号或姓名,根据所输入的信息删除该人员记录,如果没有找到该人员信息,则提示相应的记录不存。
(6)统计功能:能根据多种参数进行人员的统计。例如,统计四类人员数量以及总数,
或者统计男、女员工的数量,或者统计平均工资、最高工资、最低工资等信息。
(7)保存功能:可将当前系统中各类人员记录存入文件中,存入方式任意。
(8)读取功能:可将保存在文件中的人员信息读入到当前系统中,供用户进行使用。
工作内容及时间进度安排
1.6月4日~10日:布置任务,软件设计;
2.6月11日~18日:编写代码,上机调试;
3.6月19、20、21日:软件验收,撰写课程设计报告;
4.各班在6月22日下午五点前将课程设计报告收齐并上交。
课程设计任务书
第一章 绪论
1.1 课程设计的目的
1) 此次课程设计的目的是以《c++程序设计基础》为基础,针对具有一定难度的综合性题目,进行分析、编程、调试和运行,进一步掌握面向对象和面向过程程序设计的基本方法和编程技巧, 巩固所学理论知识, 使理论与实践相结合, 提高分析问题、解决问题的能力。要求学生达到熟练掌握C++语言的基本知识和技能。
2) 基本掌握面向对象程序设计的基本思路和方法
3) 能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
4) 通过设计一个简单的《小型公司工资管理系统》 ,进一步熟悉 C++中类的概念、类的封装、 继承和多态的实现方式;掌握文件的录入、查找;对象指针的使用。了解系统开发的需要分析, 类层次设计,模块分析, 编码测试,模块组装与整体调试的全过程, 逐步熟悉程序设计的方法,并养成良好的编程习惯。
1.2 课程设计的背景和意义
1.2.1 课程设计的背景
1. 理论研究基础
《C++面向对象程序设计》是计算机专业的基础课程,本课程按照软件程序设计所需能力进行教学设计,提出以项目模块方式带动相关知识点、实践项目和理论并行的思路,将案例贯穿于课程始终,对原有的教学体系、教学内容进行重新编排,按照从易到难的原则,将其巧妙地融入到项目开发过程中,降低学习难度,提高学生学习的信心,有效培养学生的应用能力和学习能力。
2. 技术层面的支持
本系统运用到:类与对象在C++中的实现、静态数据成员、运算符重载、友元函数继承与派生的基本知识、单继承和多继承、虚基类的作用与使用、虚函数的定义和使用、纯虚函数和抽象类的定义和使用、输入输出流的概念、输入、输出流操作、文件的创建、打开、读写、关闭等操作。
1.2.2 课程设计的意义
本课程按照软件程序设计所需能力进行教学设计,提出以项目模块方式带动相关知识点、实践项目和理论并行的思路,将案例贯穿于课程始终,对原有的教学体系、教学内容进行重新编排,按照从易到难的原则,将其巧妙地融入到项目开发过程中,降低学习难度,提高学生学习的信心,有效培养学生的应用能力和学习能力。
小型公司工资管理对公司管理有着很重要的作用。在当今社会应用广泛。
1.3 课程设计环境
硬件平台:
CPU:i5。2.67GHz。
RAM:512MB以上。
软件平台:
操作系统:Windows xp/ Windows 7
编辑环境:Visual c++ 6.0
分辨率:最佳效果1024×768像
第二章 需求分析
2.1 问题描述
某公司需要存储雇员的编号、姓名、性别、所在部门,级别,并进行工资的计算。其中,雇员分为经理、技术人员、销售人员和销售经理。四类人员的月薪计算方法如下:经理拿固定月薪;技术人员按小时领取月薪;销售人员按其当月销售额的提成领取工资;销售经理既拿固定月薪也领取销售提成。
设计一程序能够对公司人员进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。
2.2 功能要求
(1)添加功能:程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:可根据编号、姓名等信息对已添加的记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息;
(3)显示功能:可显示当前系统中所有记录,每条记录占据一行。
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除功能:主要实现对已添加的人员记录进行删除。如果当前系统中没有相应的人员记录,则提示“记录为空!”并返回操作;否则,输入要删除的人员的编号或姓名,根据所输入的信息删除该人员记录,如果没有找到该人员信息,则提示相应的记录不存。
(6)统计功能:能根据多种参数进行人员的统计。例如,统计四类人员数量以及总数,
或者统计男、女员工的数量,或者统计平均工资、最高工资、最低工资等信息。
(7)保存功能:可将当前系统中各类人员记录存入文件中,存入方式任意。
(8)读取功能:可将保存在文件中的人员信息读入到当前系统中,供用户进行使用。
2.2 问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;(8)完成系统总结报告。
第三章 系统设计
3.1 数据设计
3.1.1 类设计
根据课程设计要求,需要定义六个类:雇员类(基类)(worker)(如表3-1-1)、经理类(manager)(如表3-1-2)、技术人员类(technologyman)(表3-1-3)、销售人员类(saleman)(如表3-1-4)、销售经理类(salemanager)(如表3-1-5)和管理类(control)(如表3-1-6)。
雇员类
数据成员:
编号int num; 姓名 char name[20]; 性别char sex[5]; 部门char branch[20];
int mark; static int count, static int count1, static int count2, static int count3,
static int count4, static int count5, static int count6; int basic; double worktime;
double xiaoshoue; int job;
成员函数:
worker() worker(int mark) virtual ~worker() static int display1()
friend istream& operator >>(istream& in,worker& w) ;
friend ostream& operator <<(ostream& out,worker& w);
void input(); virtual void inputmoney(); virtual void display();
virtual void display2()=0; virtual void money()=0; char *getjibie()
double getworktime() double getxiaoshoue()
表3-1-1 雇员类
经理类
数据成员:
编号int num; 姓名 char name[20]; 性别char sex[5]; 部门char branch[20];
int mark; static int count, static int count1, static int count2, static int count3,
static int count4, static int count5, static int count6; int basic; double worktime;
double xiaoshoue; int job;
成员函数:
manager() manager(int mark) ~manager() void inputmoney()
void display2() void money()
friend istream& operator >>(istream& in,manager& w) ;
friend ostream& operator <<(ostream& out,manager& w);
表3-1-2 经理类
技术人员类
数据成员:
int jine;
成员函数:
technologyman() technologyman(int mark) ~technologyman()
void inputmoney() void display2()
friend istream& operator >>(istream& in,technologyman& w) ;
friend ostream& operator <<(ostream& out,technologyman& w);
表3-1-3 技术人员类
销售人员类
数据成员:
double tichengbili;
成员函数:
saleman() saleman(int mark) ~saleman() void inputmoney()
void display2() void money() double tichengbili;
friend istream& operator >>(istream& in,saleman& w) ;
friend ostream& operator <<(ostream& out,saleman& w);
表3-1-4 销售人员类
销售经理
成员函数:
salemanager() salemanager(int mark) ~salemanager() void inputmoney()
void display2() void money()
friend istream& operator >>(istream& in,salemanager& s) ;
friend ostream& operator <<(ostream& out,salemanager& s);
表3-1-5 销售经理类
管理类
数据成员:
worker *head;
成员函数:
control() ~control() void showface();
void changeinformation();//修改 void cancelinformation();//删除
void addinformation(); //添加 void showinformation(); //显示
void searchinformation(); // 查询 void countinformation(); // 计算
void readinformation(); // 读入 void keepinformation(); // 保存
void tongjiformation(); //统计
表3-1-6 管理类
3.1.2 类之间的关系
各个类之间的关系如表3-1-7
雇员类
销售人员类
技术人员类
经理类
销售经理类
表3-1-7 各类继承关系图
管理类(control)调用其它类。
3.1.3 函数设计
(1)定义各类的构造函数
(2)运算符重载函数operator >> 、 operator <<,实现对对象的输入输出的重载。
(3)输入输出函数:display、input,实现对数据成员的输入输出。
(4)计算工资函数:money,实现对工资的计算。根据不同员工职务不同的计算方法。
(5)修改雇员信息函数:changeinformation,实现对雇员信息的修改管理。
(6)添加雇员信息函数:addinformation,实现对雇员信息的添加管理。
(7)计算雇员工资信息函数:countinformation,实现对雇员工资信息的计算管理。
(8)删除雇员信息函数:cancelinformation,实现对雇员信息的删除管理。
(9)查询雇员信息函数:searchinformation,实现对雇员信息的查询管理。
(10)显示雇员信息函数:showinformation,实现对雇员信息的显示管理。
(11)读入雇员信息函数:readinformation,实现对雇员信息的读入管理。
(12)保存雇员信息函数:keepinformation,实现对雇员信息的保存管理。
(13)统计雇员信息函数:tongjiinformation,实现对雇员信息的统计管理。
3.2 结构设计
3.2.1 系统流程图
系统中用到的所有类和函数的关系图如图3-2-1
开始
主函数
继承 调用
定义类
雇员类
技术人员类
销售人员类
销售经理类
管理类
经理类
3-2-1 类关系流程图
3.2.2 界面设计
主菜单包括:1、添加职工信息;2、查询职工信息;3、删除职工信息;4、修改职工信息;5、显示所有职工信息;6、计算员工工资;7、读入员工信息;8、保存员工信息;9、统计员工信息;0、退出系统十个模块。
子菜单有:
1) 添加员工菜单。包括:1、增加经理;2、增加销售人员;3、增加技术人员 4、增加销售经理;5、返回上级菜单五个模块。
2) 删除员工菜单。包括:1、按照编号;2、按照姓名;3、按照部门;4、返回上级菜单四个模块。
3) 查询员工信息菜单。包括:1、按照编号;2、按照姓名;3、按照部门;4、按照职务;5、返回上级菜单五个模块。
4) 修改员工信息菜单。包括:1、修改姓名;2、修改部门;3、修改职务;4、返回上级菜单四个模块。
5) 计算员工工资菜单。包括:1、按照编号;2、按照姓名;0、返回上级菜单三个模块。
6) 统计员工菜单。包括:1、按照性别;2、按照职务;3、总人数;4、返回上级菜单四个模块。按性别中又分为男员工和女员工两个;按职务中分为经理、销售人员、技术人员、销售经理四个。
各个菜单运用do···while和switch case语句实现数字与功能之间的转换和循环。
第四章 系统实现
4.1 类实现
(1) 雇员类=
class worker //基类,员工
{
public:
worker(){count++;}
worker(int mark)
{
this->mark=mark;
count++;
}
virtual ~worker()
{ cout<<"员工类被析构;"<<endl;}
friend istream& operator >>(istream& in,worker& w) ;
friend ostream& operator <<(ostream& out,worker& w);
static int display1()
{
return count;
}
void input();
virtual void inputmoney();
virtual void display();
virtual void display2()=0;
virtual void money()=0;
char *getjibie()
{return jibie;}
double getworktime()
{return worktime;}
double getxiaoshoue()
{return xiaoshoue;}
worker * next;
int num;
char name[20];
char sex[5];
char branch[20];//部门
char jibie[20];
int mark;
static int count,count1,count2,count3,count4,count5,count6;
int basic;
double worktime;
double xiaoshoue;
int job; //职务
};
(2) 经理类:
class manager:virtual public worker //经理
{
public:manager(){}
manager(int mark):worker(mark){}
~manager()
{ cout<<"经理类被析构;"<<endl;}
friend istream& operator >>(istream& in,manager& w) ;
friend ostream& operator <<(ostream& out,manager& w);
void inputmoney()
{
job=1;
cout<<"请输入职员基本工资:"<<endl;
cin>>basic;
count3++;
}
void display2()
{cout<<"职务:经理 职员基本工资 : "<<endl;
cout<<basic;}
void money()
{
cout<<"该员工的实际工资是:"<<basic<<endl;
}
};
(3) 技术人员类:
class technologyman:virtual public worker //技术人员
{
public:technologyman(){}
technologyman(int mark):worker(mark){}
~technologyman()
{ cout<<"技术人员类被析构;"<<endl;}
void inputmoney()
{
job=3;
cout<<"请输入职员工作时间:"<<endl;
cin>>worktime;
count5++;
}
void display2()
{cout<<"职务:技术人员 职员工作时间:"<<endl; cout<<worktime;}
void money(){
jine=35;
cout<<"该员工的实际工资是:"<<(jine*worktime)<<endl;}
friend istream& operator >>(istream& in,technologyman& w) ;
friend ostream& operator <<(ostream& out,technologyman& w);
int jine;
};
(4) 销售人员类:
class saleman:virtual public worker //销售人员
{
public:saleman(){}
saleman(int mark):worker(mark){}
~saleman(){ cout<<"销售人员类被析构;"<<endl;}
void inputmoney()
{
job=2;
cout<<"请输入职员销售额:"<<endl;
cin>>xiaoshoue;
ount4++;
}
oid display2()
{cout<<"职务:销售人员 职员销售额: "<<endl; cout<<xiaoshoue;}
void money(){
tichengbili=0.05;cout<<"该员工的实际工资是:"<<xiaoshoue*tichengbili<<endl; }
friend istream& operator >>(istream& in,saleman& w) ;
friend ostream& operator <<(ostream& out,saleman& w);
double tichengbili;
};
(5) 销售经理:
class salemanager: public manager, public saleman //销售经理
{
public:
salemanager(){}
salemanager(int mark):worker(mark){}
~salemanager(){ cout<<"销售经理类被析构;"<<endl;}
void inputmoney()
{
job=4;
cout<<"请输入职员基本工资,销售额:"<<endl;
cin>>basic>>xiaoshoue;
count6++;
}
void display2()
{cout<<"职务:销售经理 职员基本工资,销售额:"<<endl; cout<<basic<<" "<<xiaoshoue;}
void money()
{
tichengbili=0.03;
cout<<"该员工的实际工资是:"<<basic+xiaoshoue*tichengbili<<endl;
}
friend istream& operator >>(istream& in,salemanager& s) ;
friend ostream& operator <<(ostream& out,salemanager& s);
};
(6) 管理类:
class control
{
private:
worker *head;
public:
control(){ head=NULL;}
~control()
{
worker* p=NULL;
p=head;
while (p!=NULL)
{
p=p->next; //指向下一个节点
delete head; //释放空间
head=p;
}
head=NULL;
}
void showface();
void changeinformation();//修改
void cancelinformation();//删除
void addinformation(); //添加
void showinformation(); //显示
void searchinformation(); // 查询
void countinformation(); // 计算
void readinformation(); // 读入
void keepinformation(); // 保存
void tongjiformation(); //统计
};
4.2 函数实现
(雇员类)
int worker::count=0;
int worker::count1=0;
int worker::count2=0;
int worker::count3=0;
int worker::count4=0;
int worker::count5=0;
int worker::count6=0;
void worker::input()
{
cout<<"请输入职员信息:"<<endl;
cout<<"编号:";
cin>>num;
cout<<"姓名:";
cin>>name;
int i;
cout<<"性别:";
while( i=1)
{
cin>>sex;
if(strcmp(sex,"nan")==0||strcmp(sex,"nv")==0)
{
if(strcmp(sex,"nan")==0)
count1++;
else
count2++;
break;
}
else cout<<"输入错误请重新输入"<<endl;
}
cout<<"部门:";
cin>>branch;
}
void worker::inputmoney()
{ cout<<"基本工资:"<<endl;
cin>>basic;
}
void worker::display()
{
cout<<"编号:"<<num<<" "<<"姓名:"<<name<<" "<<"性别:"<<sex<<" "<<"部门:"<<branch;
}
istream& operator >>(istream& in,worker& w)
{
w.input();
w.inputmoney();
return in;
}
ostream& operator <<(ostream& out,worker& w)
{
w.display();
w.display2();
w.money();
return out;
}
(经理类)
istream& operator >>(istream& in,manager& w)
{
w.input();
w.inputmoney();
return in;
}
ostream& operator <<(ostream& out,manager& w)
{
w.display();
w.display2();
w.money();
return out;
}
(技术人员类)
istream& operator >>(istream& in,technologyman& w)
{
w.input();
w.inputmoney();
return in;
}
ostream& operator <<(ostream& out,technologyman& w)
{ w.display();
w.display2();
w.money();
return out;
}
(销售人员类)
i
展开阅读全文