c++课设文档员工工资查询系统.docx
《c++课设文档员工工资查询系统.docx》由会员分享,可在线阅读,更多相关《c++课设文档员工工资查询系统.docx(65页珍藏版)》请在冰豆网上搜索。
c++课设文档员工工资查询系统
******大学
《面向对象程序设计》课程设计报告书
设计题目:
员工工资查询系统
指导老师:
学生学号:
学生姓名:
时间:
目录
一、需求分析.......................................................................................3
二、系统总框图...................................................................................3
三、每个模块的设计分析...................................................................4
四、列出所有定义的函数及说明.......................................................5
五、两个比较有特色的算法...............................................................6
六、存在的问题与不足及对策以及感想...........................................9
七、使用说明......................................................................................10
八、程序源代码..................................................................................18
九、程序运行平台..............................................................................45
1、需求分析
在市场竞争化日益严剧的今天,良好的公司人员信息管理系统越来越被人们所需要。
人员的来去,职位的升迁,薪水的统计等等,这一切在用以往的人力统计的方式来解决已经不适合于拥有上万职工的大型企业,拥有良好的管理系统已经成为企业成功的必需品,因此在这个大前提下,本人经过两学期对于C语言和c++程序设计的学习后,开发出员工工资查询系统,以便于对大量员工薪水方面的记录与查询。
论文对公司人员工资管理系统的介绍,使用类的思想加以文件的方式来实现,把公司人员的信息都存入文件中。
其中拥有添加员工信息,删除员工信息、修改员工信息、查询员工信息等功能,以帮助用户更方便快捷的管理员工信息。
按姓名查询工资
按编号查询工资及奖金
员工工资查询系统
普通员工查询
部门经理登录
总经理登录
二、系统总框图
用户登录
退出
部门经理信息删除
部门经理信息修改
部门经理信息查询
部门经理信息显示
部门经理信息录入
编辑部门经理信息
员工信息查询
员工信息删除
员工信息修改
员工信息显示
员工信息录入
3、每个模块的设计分析
(1)、界面设计
为了让使用者能够更加清晰明了的使用该程序,界面设计无疑是一大设计要点与难关。
本程序的界面设计在工作流程上分为结构设计、交互设计和视觉设计三个部分。
结构设计是界面设计的骨架。
该工资查询系统运行时的目录体系和词语定义意义用户理解和操作,本程序主界面的目录体系包括:
1、普通员工登录;2、部门经理登录;3、总经理登录;4、退出。
选择1会进入普通用户查询工资的界面,其目录体系包括1、按编号查询;2、按姓名查询;3、返回。
选择2会进入部门经理登录界面,首先要进行账号密码的输入,与预先在文件中设计的账号密码匹配相同后进入部门经理的子界面,其目录体系包括1、员工信息录入;2、员工信息显示;3、员工信息查询;4、员工信息修改;5、员工信息删除;6、返回;
选择3会进入总经理登录界面,首先同样要进行账号密码的输入,与预先在构造函数中定义的账号密码匹配相同后进入总经理的子界面,其目录体系比部门经理多了一个6、编辑部门经理的信息。
选择4,退出该程序。
交互设计的目的是使产品让用户明白、清楚、且能简单使用。
任何产品功能的实现都是通过任何机器的交互来完成的。
该工资查询系统中包含:
1)清楚地错误提示,误操作后,系统提供有针对性的提示。
例如部门经理或总经理输入的账号或密码错误时,系统会给出相应的提示,以指导用户实现正确的操作。
以及增加、删除、修改、查询等功能实现中的提示信息。
2)是哦你那个用户的语言(及通俗易懂的语言),而非技术性语言。
3)方便退出。
4)导航功能。
随时转移功能,很容易从一个更能跳到另外一个功能。
例如使用者所需各服务间功能转换。
人的因素被作为设计的核心体现出来。
该工资查询系统界面清晰明了,在结构设计的基础上,界面美观大方,参照目标群体的心里模型和任务达成进行了视觉设计。
(2)、算法设计
1、登录模块
由于部门经理和总经理登录模块中的模式一样,所以在此就拿部门经理的登录来说明。
程序运行后先跳出欢迎界面,按任意键进入下一登陆界面,普通员工由于只需查询个人工资信息,因此不用再多余设计账号密码使得操作变得复杂。
部门经理登录时,先键入部门经理预先设置的账号和密码,再从e盘的Key.txt文件中读取出一行进行匹配,匹配成功后进入部门经理管理页面。
2、员工信息录入模块
信息录入就是对之前定义的类Stuff中的私有成员进行赋值。
其中,用户需要输入的是员工的编号,科室,姓名,工资,奖金等信息。
并调用函数Save_new(),将员工信息存入Stuff.txt中。
并将新输入的编号与文件中已有编号进行匹配,若相同则不记录
3、员工信息显示模块
首先定义一个string类record,用getline函数读取出Stuff.txt中一行的信息赋值到record中,然后在程序里由宏定义的H1,H2按格式输出,利用while语句和boolflag控制输出,直到Stuff.txt中每一行都都被读取完后,为了体现友好性,输出所有员工都已显示出来。
4、员工信息查询模块
员工信息查询在员工登录界面有两种查询方法,分别是按姓名(重名没有考虑)和按工号查询的方法,由于这两种功能算法类似,在此就用按工号查询说明。
首先定义一个string类sign,从键盘键入的工号信息传入sign中,再从文件Stuff.txt中读取出先前定义的类Stuff中的私有成员num,将sign和num做匹配,如果匹配成功,再定义一个string类str,将未读取完的一行用getline函数读入str中,之后按H1,H2的格式输出。
如果匹配不成功,则跳到下一行继续上述操作,知道最后一行若都没有则输出没有找到您要找的信息。
5、员工信息修改模块
首先定义流对象outdata打开文件temp.txt,在定义流对象indata打开文件Stuff.txt;然后按照工号查找,找到键入的工号与Stuff.txt文件中的工号相匹配的一行,从文件中读取出整行并输出到屏幕上以便于用户更改,之后按要求输入更改的信息,并利用Save_new函数将新数据保存在Stuff.txt文件尾。
利用boolflag,初始flag为真,当修改完成数据并保存后,flag改为假,用if判断语句当为真时,说明文件中不存在这个工号,因此输出未找到该员工;当为假时,则将文件Stuff.txt中除了需要更改的一行信息之外都存入temp.txt中,关闭两文件。
再定义流对象in打开文件temp.txt,定义流对象out打开文件Stuff.txt,用in读取temp.txt中的信息输入到Stuff.txt中,即完成了员工信息的修改。
6、员工信息删除模块
此模块和修改模块类似,在输入要删除的工号信息后,利用boolflag初始为真,找到员工信息后改为假,然后if(flag)语句判断,为真则未找到该用户,为假则将Stuff.txt中的除了要删除的一行信息之外转入temp.txt中,之后的方式与修改模块的的操作方式相同,在此则不在多作说明。
7、编辑部门经理信息模块
对于部门经理信息的录入,显示,查询,修改,删除的操作都与上文中员工信息的操作大同小异在此不做过多繁琐的说明。
4、所有定义的函数及说明
classStuff
{
public:
Stuff();
Stuff(stringa,stringb,stringc,doubled,inte);//构造函数
voidAdd();//添加员工数据
voidDelete();//删除员工数据
voidShow();//显示所有员工信息
voidModify();//修改员工数据
voidSearchbynumber();//按工号查询数据
voidSearchbyname();//按姓名查询数据
voidSave_new();//保存新增加的员工数据
private:
stringnum;//员工编号
stringkeshi;//员工科室
stringname;//姓名
stringprice;//工资
stringreward;//奖金
};
classuser
{
public:
user();//构造函数,初始化账号和密码
charhome_face();//主页,闪闪闪,biubiubiu~~~
virtualvoidentrance();//虚函数,普通用户登录界面
private:
stringid;
stringpassword;
};
classdepartment_manager:
publicuser
{
public:
department_manager();//构造函数,初始化账号和密码
virtualvoiddepartment_manager_enter();//虚函数,部门经理登录界面
voidentrance();//部门经理管理界面
private:
stringid;//部门经理账号
stringpassword;//部门经理密码
};
classtop_manager:
publicdepartment_manager
{
public:
top_manager();//构造函数,设置默认总经理账号和密码
voidtop_manager_enter();//总经理登录界面
voidentrance();//总经理管理界面
voidinter_face();//部门经理编辑界面
voidAdd();//添加部门经理数据
voidDelete();//删除部门经理数据
voidShow();//显示所有部门经理的账号
voidModify();//修改部门经理数据
voidSearch();//查询部门经理的数据
voidSave_new();//保存新增加数据
private:
stringid;//总经理账号
stringpassword;//总经理密码
};
classintroduce
{
public:
voiddisplay();//欢迎界面
};
5、两个比较有特色的算法说明
(一)、闪动效果
charuser:
:
home_face()
{
system("color0a");
charn;
system("cls");
cout<for(inti=0;i<9;i++)//利用循环出现闪动效果
{
if(i%2==0)cout<<"\t\t欢迎使用某公司员工工资查询系统!
\n\n";
elsecout<if(i%2==0)cout<<"\t\t╔*☆***◎***◇***☆***菜单***☆***◇***◎***☆*╗\n";
elsecout<cout<<"\t\t|★|\t\t\t\t\t|★|\n";
if(i%2==0)cout<<"\t\t|☆|\t\t\t\t\t|☆|\n";
elsecout<cout<<"\t\t|★|\t\t1.普通员工登录\t\t|★|\n";
cout<<"\t\t|☆|\t\t2.部门经理登录\t\t|☆|\n";
cout<<"\t\t|★|\t\t3.总经理登录\t\t|★|\n";
cout<<"\t\t|☆|\t\t4.退出\t\t|☆|\n";
if(i%2==0)cout<<"\t\t|★|\t\t\t\t\t|★|\n";
elsecout<cout<<"\t\t|☆|\t\t\t\t\t|☆|\n";
if(i%2==0)cout<<"\t\t╚*☆***◎***◇****☆****★****☆****◇***◎***☆*╝\n\n";
elsecout<cout<<"\t\t请选择您要实现的功能选项(1-4):
[]\b\b";
Sleep(100);
if(i<8)system("cls");
}
while
(1)
{
cin>>n;
getchar();
if(n<'1'||n>'4')
cout<<"输入错误,请您重新输入选项(1-4):
[]\b\b";
else
returnn;
}
}
此算法用到了循环,利用循环实现边框的闪烁效果,程序这里为了显得有动态感,利用闪烁增添程序的活力。
首先利用函数system(“cls”)清屏,之后定义整形变量i,运用for循环,循环一次i自加1,直到i>=9时跳出循环,循环中让i和2取余数,若余数为零,则输出边框,否则输出换行符,中间文字部分不加入循环作为正常的语句在for循环中输出,为了使得闪动更加明显,这里运用一个sleep函数,让程序暂时休眠100毫秒后再继续执行,每循环一次再调用system(“cls”)进行清屏,从而实现闪烁效果。
(2)、账号密码登录,保护隐私的措施(总经理登录)
voidtop_manager:
:
top_manager_enter()
{
stringpp;
charm;
top_managerBOSS;
system("cls");
system("color4e");
cout<cout<<"\t\t欢迎使用某公司员工工资查询系统!
\n\n";
while
(1)
{
cout<<"\t\t请输入总经理账号:
\n\t\t(若返回上一个页面,请输入#号)"<cout<<"\t\t";
cin>>pp;
getchar();
if(pp=="#")return;
if(pp==BOSS.id)
{
cout<<"\t\t请输入密码:
";
stringqq;
m=getch();
while((m&0xff)!
=13)//判断是否键入回车键
{
if((m&0xff)==8){cout<else{cout<<'*';qq+=m;}
m=getch();
}
if(qq==BOSS.password)//判断密码是否正确
{
BOSS.entrance();
break;
}
else
cout<<"\n\t\t对不起!
密码错误!
!
\n"<}
else
cout<<"\t\t对不起!
账号不存在!
!
\n"<}
}
首先定义一个string类pp用于存储输入的总经理账号,将pp与类Top_meneger的构造函数中初始的账号id相匹配,若匹配失败则输出账号错误;若成功则再定义一个string类qq用于存储输入的总经理密码,再定义一个char字符m用于读取输入的一个个字符,运用while循环,m=geich()是无回显函数,此处可以用来输入密码。
当m不是回车键(13在ASCLL码表中指的是回车符)时,判断m输入的是否为退格键(8在ASCLL码中指的是退格符),若不是则输出”*”(这里指输出的是密码),并把m传入qq中,若是退格键,则输出退格的效果,并且不将退格键传入qq中(此处由于不清楚怎么实现,所以借鉴了网上大神的想法);若是回车键则输入完毕。
而后再将qq与类top_meneger的构造函数中初始的密码password相匹配,若匹配失败则输出密码错误;若成功则进入总经理管理页面。
6、存在的问题不足对策及感想
1、上文中的输入密码的函数还是存在些许漏洞,比如当输入退格键时,虽然实现了退格键的效果,但是退格键这个字符还是被存入string类qq(上文中定义的密码)中,因此在判断的时候还是会出错,这个bug是在后期不断地调试中发现的,至于解决方案程序内部的方法由于个人能力有限未想到比较有限简便的方法,因此就再次输入一遍正确的就好了。
2、本程序为了输出好看,输入字符时便于观看,在输入菜单选项的时候做了些小手法,例如cout<<"\t\t请选择您要实现的功能选项(1-3):
[]\b\b";中括号里为需要输入的一个功能选项,这里虽然做了输入有效性验证,但是还不够完全,比如中括号内可以输入无限个字符,但系统只会默认第一个字符有效并进行验证,这样就会造成界面的不美观。
由于学习内容受限,以本人目前的能力还不能完善这个漏洞,所以在运行程序时输入单个字符即可,以避免不必要的操作。
.......程序中或多或少还是会有些小小的问题,尤其在前期刚开始构思时,脑中一片混乱:
如何实现菜单列表、到底要用到什么类来完成设计、如何实现循环操作、如何实现界面的美观.....等等问题,但在平时的上课即网上学习的过程中,我的疑惑渐渐被解决,而后程序也慢慢的成型,虽然调试画了我很长时间,但我觉得这是值得的,至少我所遇到的问题都在我不断查找资料的时候解决了。
虽然按照操作流程走的话本系统还是可以完美运行的,但是自我感觉此程序的操作功能还是有待开发,比如公司部门经理个人的信息过于简单;修改员工信息后应该标记清楚是哪位部门经理在哪天修改的以便于后期的查证,有益于公司员工的公平竞争;综上所述,本人的编程能力还有待提高,在后续的编程道路上还需要继续加油,多多实践,多观摩形式各样的程序,总结前人的编程思路,完善个人的编程体系。
7、使用说明
运行程序,首先进入欢迎界面:
显示系统名称及制作人......
然后出现具有闪动效果的菜单窗口(由于是静态图所以体现不出闪动):
如下图所示,输入1—4实现登录功能。
选择1之后出现的界面,如下图所示,选择1—3实现功能。
1.按编号查询如下图所示:
2.按姓名查询如下图所示:
3.返回即返回上一层菜单
之后选择2.部门经理登录,进入登录界面,如下图所示
文件中已有存入的账号:
123密码:
123
选择1,进入员工信息录入界面,如下图
选择2,显示所有的员工信息,如下图
选择3,与员工查询时操作一样,在此不做说明。
选择4,修改员工信息,如下图
5.员工信息删除,如下图
6.返回即返回上一层菜单
选择3.总经理登录则进入总经理登录界面,初始账号和密码都为zhenghongyuan(小写),如下图
选择1—6的内容与上文中部门经理管理界面的等同,在此不做过多的说明。
选择6.编辑部门经理信息,如下图
之后的操作也和员工信息录入、显示、查询、修改、删除等操作类似,在此不做说明。
8、程序源代码
#include
#include
#include
#include
#include
#include
#include
#include"Stuff.h"
#include"user.h"
#include"department_meneger.h"
#include"top_manager.h"
#include"introduce.h"
#defineH"------------------------------------------------------------------\n"
#defineH1"|工号|员工科室|姓名|工资|奖金|\n"
#defineH2"|-------------|---------------|------------|-----------|--------|\n"
#defineH3"------------------------------\n"
#defineH4"|账号|密码|\n"
#defineH5"|-------------|--------------|\n"
usingnamespacestd;
/************************头文件及宏定义表格***********************/
Introduce.h文件中的内容:
classintroduce
{
public:
voiddisplay();
};
/**************************************************************************/
voidintroduce:
:
display()
{
system("color0e");
cout<cout<<"\t╭━━━━━━━━━━━━━━━━━━━━━━━━━╮"<cout<<"\t│※※┃"<cout<<"\t│※※┃"<cout<<"\t│※欢迎使用某公司员工工资查询系统!
※┃"<cout<<"\t│※※┃"<cout<<"\t│※※┃"<cout<<"\t│※※┃"<