资源描述
企业职员信息管理系统 课程设计汇报书
学生班级:软工XXX班
学生学号:1462XXXXX
学生姓名:XX
指导老师:XXX
设计时间:.7.1
山西大学
目录
一、 课程设计目标: 1
二、 概念设计 1
1. 总经理: 2
2. 技术部门: 2
3. 销售部门: 2
4. 财务部门: 2
5. 人力资源管理部: 3
三、 系统步骤分析: 3
四、 过程展示: 3
1) 总经理: 3
2) 销售经理(销售员) 6
3) 技术员 6
4) 人力资源部门职员 6
5) 财务部门职员: 9
五、 提升空间: 11
六、 感想和总结: 12
七、 部分源代码展示: 12
八、VIEW.cpp类源代码显示: 24
一、 课程设计目标:
为了处理企业职员信息多样性和数据混乱和繁杂,实现信息存取,查询,方便企业在信息方面有清楚管理,提升企业运行效率,本系统能够实现以上功效。
二、 概念设计
总体关系图:
企业职员管理系统
技术部门
销售部门
财务部门
人力资源部门
总经理
工资输出
职员信息输入
技术员
销售经理
工资信息输出
销售员
信息上传
职员信息删除
1. 总经理:
总经理是负责企业大小事务,所以总经理独立拥有查询职员工资权利,总经理还能够独立输入个人信息到系统中,方便财务部门,人力资源部门等信息统计。
2. 技术部门:
技术部门是由技术员组成,技术员是技术部门关键组员,所以技术员在技术部门内是特殊存在,一样技术部门也拥有独立信息输入输出权利。
3. 销售部门:
销售部门由销售经理和销售员组成,销售部门也是有独立信息输入输出权利,方便部门信息统计和人员信息查看。
4. 财务部门:
财务部门是企业财务统计部门,掌管企业资金动向,还有职员工资发放,所以我给财务部门设置了工资查询功效,让每个企业组员进入财务部查询自己工资,同时财务部要负责把职员工资信息上传到系统中去功效。
5. 人力资源管理部:
关键功效是对职员信息管理,所以在人力资源部门中能够实现队职员信息连续添加功效,方便了人力资源部职员工作了。同时还能够实现对人员信息删除,因为人力资源管理部门是管理人员流动大部门,每个职员存放或删除是工作中常常碰到额,所以删除功效给人力资源部节省了大家力物力。
三、 系统步骤分析:
前面是分析了各模块功效,现在就是对系统所实现功效做一个展示而且分析每个功效操作及设计原因;
假如你是企业职员,那么就进入本系统,进入系统以后找到自己所在部门,比如你是销售员,那么就是销售部门,那么就点击销售部门->销售员->个人信息输入;点击个人信息输入以后会弹出一个提醒对话窗口,此时你能够上传自己个人信息到系统当中。
同上,假如你是总经理,那么就点击进入总经理链接->个人信息输入(个人信息输出,职员工资查看);点击个人信息输入会弹出和上一个输入一样个人信息输入对话框,里面有信息选项若干,进行填写按确定就会对你所输入信息进行存放,假如存放完成后要查看个人信息,能够点击个人信息输出查看。
其它部门比如技术部门,销售部门也是一样功效。就不介绍了。
现在介绍财务部门查询工资功效实现:查询工资首先要人力资源部门完成信息上传以后,同时还要必需是本企业职员,才能被查询到,查询条件是以姓名方法查找,只要信息正确就能够显示到你所要工资还有你所得薪资水平。
还有一个能够查询到职员工资,就是总经理,总经理能够查询到全部职员工资,点击总经理职员工资查看就能够了。
登陆界面
用户验证
职员信息管理
部门管理
查询管理
退出系统
登陆成功
登陆失败
四、 过程展示:
登陆系统:
要进行正确身份验证后才能够登陆系统,在登录窗口中输入正确用户名,密码。
本系统用户名为:,密码:
登陆对话框
输入密码后:
点击登陆会弹出以下对话框:
提醒对话框
点击确定:
1) 总经理:
点击总经理会出现下拉菜单项有个人信息输入,个人信息输出,还有职员资金查看;
点击个人信息输入出现以下对话框:
(对话框有四个选项,其中职业有四个下拉项,包含,总经理,销售经理,技术员,销售员,在职业项中选择你职业。)
输入个人信息点击确定就能够实现信息保留。
比如输入姓名为:张三,爱好爱好是:排球,性别:男,职业是总经理;输入完后出现
提醒你信息输入完成。
再点击个人信息输出就会查看到自己信息:
第三个功效是职员工资查看,要查看职员工资首先要在主菜单中信息上传以后才能实现, 现在就讲一下信息上传功效:
点击职员信息管理系统再点击信息上传后会弹出一下窗口:
本窗口设置了姓名必能为空功效,假如不填写姓名就会弹出以下窗口:
点击时就会弹出上面窗口继续填写,假如否就会退出。
我们把信息设置以下:总经理:李斯;销售经理:赵高;销售员:叶子;技术员:高山;工作时间:100;销售员销售额:0;企业销售额:1000000
点击确定会弹出提醒框:
信息提醒上传成功。
再点击总经理职员工资查看就会显示出来:
2) 销售经理(销售员)
点击主菜单销售部门会出现两项选择:销售经理和销售员.
假如是销售经理(销售员)会有两项选择:个人信息输入,个人信息输出。
点击个人信息输入会有一个如总经理一样对话框:功效实现和总经理差不多就不一一介绍了能够参考总经理所讲,只是少了一项总经理功效就是职员工资查看。
3) 技术员
点击主菜单技术部门会出现一项选择:技术员
点击技术员会有两项选择:个人信息输入,个人信息输出。
点击个人信息输入会有一个如总经理一样对话框:功效实现和总经理差不多就不一一介绍了能够参考总经理所讲,只是少了一项总经理功效就是职员工资查看。
4) 人力资源部门职员
人力资源部门功效新建立一项功效,能够追加信息输入。点击人力资源部门时会有三项选择:人员信息输入,工资信息输出,信息删除,人力资源部门这三个功效是必不可少人员流动是人力资源部门掌管,有了这三个功效能够方便部门对信息管理提升效益:
1. 点击人员信息输入:
个人信息输入框
出现信息输入框,填写企业职员信息:李斯,爱好爱好是:打篮球,性别:男,职业是总经理。
此信息是经过人力资源部门上传信息所以填写完后会出现一个提醒框:
点击‘是’,会弹出信息输入对话框:
信息输入对话框
能够实现继续添加,不过我设置了反复添加四次,因为职业只有四种职业。
继续添加以下信息:高山,排球,女,销售经理;赵高,乒乓球,男,技术员,叶子,网球,女,销售员;点击确定保留信息。保留以后会弹出对话框提醒内存不足;
内存不足对话框
不能再继续添加信息了。
信息查看能够在各部门中个人信息输出查看到!
看到信息以下所表示:
2. 点击工资信息输出:
在主窗口里会出现以下内容:
3. 点击信息删除:
假如信息有错误,比以下面信息,
技术员赵快乐趣不是乒乓球,而是排球,要求删除掉:
那么就点击信息删除。
会弹出一个对话框:
删除提醒窗口
输入删除人姓名“赵高”,点击‘确定’,又会出现一个对话框,取消就会退出;
信息删除对话框
信息显示说已经删除了。打开主窗口,单击一项个人信息输出会看到:
删除信息显示页面
显示内容变成这么了,赵高信息删除了。
5) 财务部门职员:
假如进入财务部门,里面能够查询个人工资选项,不过首先要填写自己职业选项,经过信息查对正确后就会进入姓名查询,查询到了你信息就会显示出来。
点击后会出现以下对话框
职业选择对话框
提醒先选择你职业:比如你是总经理,总经理姓名是:李斯,点击总经理一项,
会弹出一个对话框提醒你信息:
职业信息验证对话框
点击‘是’,就能够查询到工资了:
月薪提醒对话框
显示出总经理工资水平是80000/月,
选择其它信息比如销售员,叶子工资;
点击销售员职业选项,弹出对话框:
职业信息验证对话框
点击‘是’,出现一个姓名查询窗口:
工资查询对话框
填写号自己姓名:叶子,
点击确定:
点击‘是’能够显示信息,假如否就会不显示;点击‘是’
工资信息显示对话框
出现了信息显示,里面有你名字和薪资水平,等级是一级,代表是最高。
五、 提升空间:
其实程序里面有多个优点我觉比较满意就是我把职员信息输入框中这也用了ComboBox类组合框让信息要求在了四个职业选项,让信息更清楚不含糊。还有工资查询职业选择,我是用了单选按钮来实现这也选择,这么设置确保了信息完整性,不会因为这也复杂而让信息难以处理。
不过程序还存在很多不足,首先在数据显示方面不够清楚,其实我们能够建立以数据库,在库中建立职员信息表,部门信息表,用表格形式输出数据愈加美观实用,同时还能够给数据库建立一个登录名,或多个登陆,只要是企业职员就能够登录输入自己个人信息,另外每个部门全部建立独立表,能够给表设置对职员权限。职员通常只有查看功效,而人力资源部门能够对信息进行添加,修改,删除权限。
然后程序不能很好完成删除功效,还有相关修改功效也没实现,这是我要加强此程序功效方向。
六、 感想和总结:
花了很多时间在这个程序上,即使最终还是留下很多不足,可是我认为结果不关键,因为编程时候我真正感受到了做好一个程序(系统)是一件不轻易事情,而且在这件事情上学会了急于求成是不行,每一步全部要认真思索,最关键是对系统首先做一个完整设计方案,有一个大致目标后再进行编程,编程时候实现了一个功效或你定好一步后要立案,不然就会因为一时不小心把之前途序弄脏了,就会出现很多问题,这时你会花很多时间去该,要是改不好就是前工尽弃了。然后就是学好一门计算机语言很关键,不然就会在程序编写时候很吃亏。不过我好自豪,因为我程序虽简单不过我是认真作者,而且是自己设计,一个小小系统花了我不少努力,我也会继续加强计算机语言学习。
七、 部分源代码展示:
1, employee类为基类派生出来了salesman类,salesmanager类,technician类,manager类,头文件代码以下:
//employee.h
class employee
{
protected:
char sex[5];//性别
char hobit[10];//爱好
char name[20]; //姓名
char job[20];//工作类型
int individualEmpNo; //个人编号
int grade; //等级
float accumPay; //月薪总额
static int employeeNo; //本企业职员编号现在最大值
public:
void Sethobit(char*);
void Setsex(char*);
void Setjob(char*);
char* Getsex();
char* Gethobit();
char* Getjob();
employee(); //结构函数
~employee(); //析构函数
virtual void pay()=0; //计算月薪函数(纯虚函数)
virtual void promote(int increment=0); //升级函数(虚函数)
void SetName(char *); //设置姓名函数
char * GetName(); //提取姓名函数
int GetindividualEmpNo(); //提取编号函数
int Getgrade(); //提取等级函数
float GetaccumPay(); //提取月薪函数
};
class technician:public employee //兼职技术人员类
{
private:
float hourlyRate; //每小时酬金
int workHours; //当月工作时数
public:
technician(); //结构函数
~technician(){}
void SetworkHours(int wh); //设置工作时数函数
void pay(); //计算月薪函数
void promote(int); //升级函数
};
class salesman:virtual public employee //兼职推销员类
{
protected:
float CommRate; //按销售额提取酬金百分比
float sales; //当月销售额
public:
salesman();
~salesman(){}//结构函数
void Setsales(float sl); //设置销售额函数
void pay(); //计算月薪函数
void promote(int); //升级函数
};
class manager:virtual public employee //经理类
{
protected:
float monthlyPay; //固定月薪数
public:
manager(); //结构函数
void pay(); //计算月薪函数
void promote(int); //升级函数
~manager(){}
};
class salesmanager:public manager,public salesman //销售经理类
{
public:
salesmanager(); //结构函数
void pay(); //计算月薪函数
void promote(int);//升级函数
~salesmanager(){}
};
2,类组员函数实现包含在employee.cpp源文件中:
//employee.cpp
#include "stdafx.h"
#include<iostream>
#include<cstring>
#include"employee.h"
using namespace std;
int employee::employeeNo=1000; //职员编号基数为1000
employee::employee()
{ individualEmpNo=employeeNo++; //新输入职员编号为现在最大编号加1
grade=1; //等级初值为1
accumPay=0.0;} //月薪总额初值为0
employee::~employee()
{}
void employee::promote(int increment)
{ grade+=increment; } //升级,提升级数由increment指定
void employee::SetName(char* names)
{ strcpy(name,names); } //设置姓名
char* employee::GetName()
{ return name;} //提取组员姓名
int employee::GetindividualEmpNo()
{ return individualEmpNo;} //提取组员编号
int employee::Getgrade()
{ return grade;} //提取组员等级
float employee::GetaccumPay()
{ return accumPay;} //提取月薪
technician::technician()
{ hourlyRate=100;} //每小时酬金100元
void technician::SetworkHours(int wh)
{ workHours=wh;} //设置工作时间
void technician::pay()
{ accumPay=hourlyRate*workHours;} //计算月薪,按小时计酬
void technician::promote(int)
{ employee::promote(2); } //调用基类升级函数,升2级
salesman::salesman()
{ CommRate=0.04f;} //销售分成百分比4%
void salesman::Setsales(float sl)
{ sales=sl;} //设置销售额
void salesman::pay()
{ accumPay=sales*CommRate;} //月薪=销售分成
void salesman::promote(int)
{ employee::promote(0); } //调用基类升级函数,升0级
manager::manager()
{ monthlyPay=80000;} //固定月薪8000元
void manager::pay()
{ accumPay=monthlyPay;} //月薪总额即固定月薪数
void manager::promote(int )
{ employee::promote(3);} //调用基类升级函数,升3级
salesmanager::salesmanager()
{ monthlyPay=5000;
CommRate=0.005f;}
void salesmanager::pay()
{ accumPay=monthlyPay+CommRate*sales; } //月薪=固定月薪+销售分成
void salesmanager::promote(int)
{ employee::promote(2);} //调用基类升级函数,升2级
char* employee::Gethobit()
{
return hobit;
}
char* employee::Getsex()
{
return sex;
}
char* employee::Getjob()
{
return job;
}
void employee::Sethobit(char* hobita)
{
strcpy(hobit,hobita);
}
void employee::Setsex(char* sexa)
{
strcpy(sex,sexa);
}
void employee::Setjob( char* joba)
{
strcpy(job,joba);
}
3,自己创新部分:
1. 人力资源部门人员信息输入代码
此代码是实现信息追加也是我想到:
void CMyView::OnPersoninput()
{
// TODO: Add your command handler code here
manager m1,t,sm,s;
int count=0;
vector <employee *> vchar;
vchar.push_back(&m1);
// vchar.push_back(&m);
vchar.push_back(&t);
vchar.push_back(&sm);
vchar.push_back(&s);
int i;
for(i=0;i<4;i++)
{
CDlgInput ed;
if( ed.DoModal()==IDOK)
{
vchar[i]->SetName((char*) (LPCTSTR) ed.m_strName); //设置姓名
vchar[i]->Sethobit((char*) (LPCTSTR) ed.m_strhobit);
vchar[i]->Setsex((char*) (LPCTSTR) ed.m_strsex);
vchar[i]->Setjob((char*) (LPCTSTR) ed.m_ComboEmployee);
ofstream infile("employee.txt",ios::out|ios::app) ;//创建一个输出文件流对象
infile<<vchar[i]->GetName()<<",你职业:"<<vchar[i]->Getjob()
<<", 性别:"<<vchar[i]->Getsex()<<", 爱好:"<<vchar[i]->Gethobit()
<<endl;
infile.close();
MessageBox("信息上传成功!","提醒对话窗口");
if(count++==3)
{
MessageBox("内存不足!","提醒对话窗口");
break;
}
if(MessageBox("信息存放完成,是否继续添加人员信息?","提醒对话框",100)==IDYES)
continue;
else
{
MessageBox("信息上传成功!","提醒对话窗口");
break;
}
}
else
{
MessageBox("信息没有存放!");
return;
}
}
}
2. 查询工资函数:
我用了switch语句来对信息进行处理,职员选择了职业选项后用case来处理每一个消息响应:
void CMyView::OnGetmonthlypay()
{
// TODO: Add your command handler code here
UpdateData();
CDlgQuerySalary work;
work.DoModal();
if(work.m_workstyle!=-1)
{
switch(work.m_workstyle)
{
case 0:
if(MessageBox("你职业是总经理吗?","提醒窗口",100)==IDYES)
{
MessageBox("总经理固定月薪是80000","提醒窗口");
}
break;
case 1:
if(MessageBox("你职业是销售经理吗?","提醒窗口",100)==IDYES)
{
this->OnInitialUpdate();
ifstream infile("employee1.txt",ios::in); //创建一个输入文件流对象
try {
if (!infile)
throw FileException();
}
catch ( FileException fe )
{ // exception handler
AfxMessageBox(fe.what()); //" << fe.what() << '\n';
exit(0);
}
CDlgQueryName ed; //申明查询对话框对象
if(ed.DoModal()==IDOK)//调用查询对话框
{
char line[10][101];
BOOL flag=FALSE;
for(int i=0;i<4;i++)
{
infile.getline(line[i],100); //从文件读入人员信息
CString c_str,name_str;
c_str.Format("%s",line[i]); //转换为字符串
name_str=c_str.Left(c_str.Find(','));//提取姓名
if(!name_str.Compare(ed.m_strQueryName))//和查询名比较
{
flag=TRUE;
name_str+="被查询到,要显示该人员信息吗?";
if(MessageBox(name_str,"提醒对话框",100)==IDYES)
{
CDlginfomation pDlg;//申显著示对话框对象
pDlg.m_strInfoName = ed.m_strQueryName;
pDlg.m_strInfomationSalary = c_str;
pDlg.DoModal();//调用显示对话框
}
}
}
if(flag==FALSE) MessageBox("查无此人!");
}
infile.close();
}
break;
case 2:
if(MessageBox("你职业是技术员吗?","提醒窗口",100)==IDYES)
{
this->OnInitialUpdate();
ifstream infile("employee1.txt",ios::in); //创建一个输入文件流对象
try {
if (!infile)
throw FileException();
}
catch ( FileException fe )
{ // exception handler
AfxMessageBox(fe.what()); //" << fe.what() << '\n';
exit(0);
}
CDlgQueryName ed; //申明查询对话框对象
if(ed.DoModal()==IDOK)//调用查询对话框
{
char line[10][101];
BOOL flag=FALSE;
for(int i=0;i<4;i++)
{
infile.getline(line[i],100); //从文件读入人员信息
CString c_str,name_str;
c_str.Format("%s",line[i]); //转换为字符串
name_str=c_str.Left(c_str.Find(','));//提取姓名
if(!name_str.Compare(ed.m_strQueryName))//和查询名比较
{
flag=TRUE;
name_str+="被查询到,要显示该人员信息吗?";
if(MessageBox(name_str,"提醒对话框",100)==IDYES)
{
CDlginfomation pDlg;//申显著示对话框对象
pDlg.m_strInfoName = ed.m_strQueryName;
pDlg.m_strInfomationSalary = c_str;
pDlg.DoModal();//调用显示对话框
};
break;
}
}
if(flag==FALSE)MessageBox("查无此人!");
}
infile.close();
}
break;
case 3:
if(MessageBox("你职业是销售员吗?","提醒窗口",100)==IDYES)
{
this->OnInitialUpdate();
ifstream infile("employee1.txt",ios::in); //创建一个输入文件流对象
try {
if (!infile)
throw FileException();
}
catch ( FileException fe )
{ // exception handler
AfxMessageBox(fe.what()); //" << fe.what() << '\n';
exit(0);
}
CDlgQueryName ed; //申明查询对话框对象
if(ed.DoModal()==IDOK)//调用查询对话框
{
char line[10][101];
BOOL flag=FALSE;
for(int i=0;i<4;i++)
{
infile.getline(line[i],100); //从文件读入人员信息
CString c_str,name_str;
c_str.Format("%s",line[i]); //转换为字符串
name_str=c_str.Left(c_str.Find(','));//提取姓名
if(!name_str.Compare(ed.m_strQueryName))//和查询名比较
{
flag=TRUE;
name_str+="被查询到,要显示该人员信息吗?";
if(MessageBox(name_str,"提醒对话框",100)==IDYES)
{
CDlginfomation pDlg;//申显著示对话框对象
pDlg.m_strInfoName = ed.m_strQueryName;
pDlg.m_strInfomationSalary = c_str;
pDlg.DoModal();//调用显示对话框
};
break;
}
}
if(flag==FALSE) MessageBox("查无此人!");
}
infile.close();
}
break;
}
}else
{
MessageBox("姓名不能为空!");
}
}
4,职员信息输入函数代码显示:
void CMyView::OnManagerinput()
{
// TODO: Add your command handler code here
manager m1;
CDlgInput manager;
manager.DoModal();
if(manager.m_strName!="")
{
ofstream infile("employee.txt",ios::out|ios::app) ;
m1.SetName((char*)(LPCTSTR) manager.m_strName);
m1.Setsex((char*)(LPCTSTR) manager.m_strsex);
m1.Sethobit((char*)(LPCTSTR) manager.m_strhobit);
m1.Setjob((char*)(LPCTSTR) manager.m_ComboEmployee);
infile<<m1.GetName()<<",你职业:"<<m1.Getjob()<<",性别:"<<m1.Getsex()<<",爱好:"<<m1.Gethobit()
<<endl;
infile.close();
MessageBox("信息存放完成!","存放信息对话框");
flag=true;
}
}
5,信息输出函数代码显示:
void CMyView::OnManageroutput()
{
// TODO: Add your command handler code here
ifstream infile("employee.txt",ios::in); //创建一个输入文件流对象
try {
if (!infile)
throw FileException();
}
catch ( FileException fe ) { // exception handler
MessageBox(fe.what()); //" << fe.what() << '\n';
exit(0);
}
CClientDC dc(this);
char line[101];
for(int i=0;i< sizeof(infile);i++)
{
infile.getline(line,100);//从文件读入人员信息
CString c_str;
c_str.Format("%s",line); //转换为字符串
dc.TextOut(120,80,"人员信息管理系统:");
dc.TextOut(120,100+30*i,c_str);
}
infile.close();
}
,6,信息删除函数代码:
void CMyView::OnDeleteinfomation()
{
// TODO:
展开阅读全文