资源描述
计算机科学与技术系
课 程 设 计
( 2023 -- 2023 年度第 一 学期)
课程名称:面向对象程序与设计
题 目:建立职工管理信息系统
姓 名: 高超
学 号:
指导教师: 潘正高
设计周数: 2周
成 绩:
日期: 2023年 12 月 27 日
小组成员分工说明:
系统分析:王涛
系统编程:高超
撰写报告:余超
组长:
高超
小组成员:
王涛………………………………
余超………………………………
目 录
一 封面 1
二 设计小组成员 2
三 正文...................................................4
3.1课程设计的目的与规定................................4
3.2系统分析 4
3.2.1系统开发背景、开发范围、建设目的与必要性..........4
3.2.2 业务流程分析.................................4
3.2.3数据字典......................................6
3.2.4解决逻辑的定义................................ 6
3.3 系统设计...........................................8
3.3.1功能设计.......................................8
3.3.2系统运营环境...................................9
3.4系统实行...........................................10
3.4.1程序代码........................................10
3.4.2运营结果........................................29
四 课程设计总结或结论 35
五 参考文献 35
《建立职工信息管理》
三、正文
3.1课程设计的目的与规定
通过管理信息系统课程设计,进一步掌握管理信息系统的理论和方法。培养和锻炼开发管理信息系统的能力。为此后信息系统开发打下良好的基础。
规定了解公司管理信息系统开发的全过程,理解信息系统课程相关的概念,掌握管理信息系统的开发方法。重要涉及:系统调研方法;业务分析、数据分析、系统逻辑模型设计方法;数据库设计、功能设计、物理模型设计方法;系统的实现等方法。完毕一个小型系统的设计与开发。
3.2 系统分析
3.2.1系统开发背景、开发范围、建设目的与必要性
随着本世纪以来科学技术的突飞猛进和社会生产力的迅速发展,人们进行信息交流的深度与广度不断增长,信息量急剧增长,传统的信息解决与决策的手段已不能适应社会的需要,信息的重要性和信息解决问题的紧迫性空前提高了,面对着日益复杂和不断发展,变化的社会环境,特别是公司间日趋剧烈的竞争形势,一个人、一个公司要在现代社会中求生存,求发展,必须具有足够的信息和强有力的信息收集与解决手段。电子计算机以强大的信息解决能力作为人类脑力劳动的有力助手登上历史舞台以后,出现了把人类从繁琐的脑力劳动下解放出来的现代信息革命。
为了适应现代公司或公司经营发展的需要,为提高公司工作效率、保证公司职工信息管理质量、快而准确地为公司制定好的经营方针与决策,我们有必要开发一个职工信息管理系统。
3.2.2业务流程分析
现行管理系统的业务流程图
………
事务
事务
事务
事务
信息管理员
职工信息管理系统
信息管理员
信息管理员
接受职工信息
更新职工信息
信息管理员
图3-1 第一层数据流图
职工信息库
图3-2 第二层数据流图
事务:删除,添加,修改,查询;
工作时间
职位
职工基本信息
年龄
职工号
姓名
性别
出生日期
职工信息E-R图
3.2.3数据字典
数据流字典
① 数据流名称 :职工-主管类
数据结构:
职工编号 id
姓名 name
性别 sex
工资 salary
出生时间 birth
参与工作时间 worktime
职位 a
② 数据流名称:职工-工人类
数据结构:
职工编号 id
姓名 name
性别 sex
工资 salary
出生时间 birth
参与工作时间 worktime
职位 b
3.2.4解决逻辑的定义
① 解决名: 添加职工信息
输入:根据选择录入数据
输出:显示所添加的信息
解决定义:
当选择了要输入的数据类型时,按照提醒输入所需要的信息,并录入到职工信息库里
激发条件:选择添加职工信息
② 解决名: 删除职工信息
输入:键入要删除的职工号
输出:显示输入职工好所相应的信息
解决定义:
根据键入的职工号查到相关的信息,经确认后,从信息库中删除
激发条件:选择删除职工信息
③ 解决名:修改职工信息
输入:键入要修改的职工号,并选择要修改的项
输出:显示修改后的该职工信息
解决定义:
键入要修改的职工号,显示该职工的信息,根据提醒选择要修改的项,修改成功后显示修改后的职工信息
激发条件:选择修改职工信息
④ 解决名:查找职工信息
输入:选择要查找的类型(职工号,姓名,年龄)
输出:显示所要查找的职工信息
解决定义:
选择要查找的类型,从信息库中查找并显示
激发条件:选择查找记录
⑤ 解决名:列出信息
输入:选择输出类型
输出:根据选择输出数据
解决定义:
根据选择的输出类型,输出职工信息
激发条件:选择列出信息功能
⑥解决名:计算平均年龄
输入:无
输出:输出职工的平均年龄
解决定义:
调用函数,输出职工的平均年龄
激发条件:选择计算平均年龄功能
⑦ 解决名:创建职工信息简表
输入:无
输出:显示职工信息简表
解决定义:
创建并显示职工信息简表
激发条件:选择创建职工信息简表功能
⑧ 解决名:存入磁盘
输入:无
输出:把数据输出到磁盘文献中
解决定义:
输出职工信息文献
激发条件:选择存入磁盘功能
3.3 系统设计
职工信息涉及职工号,姓名,性别,年龄,工资,出生日期,工作时间,试设计一职工信息管理系统,使之能提供以下功能:
(1)建立职工信息数据,涉及职工编号、姓名、性别、工资、出生时间、参与工作时间和年龄(必须计算得到)。
(2)根据职工信息表,建立只具有姓名和年龄的职工信息简表。
(3)抽取并计算职工的平均年龄。
(4)检索(查找)指定信息。(如按姓名检索、按年龄检索)
(5)修改职工信息
(6)删除职工信息
(7)保存数据文献
3.3.1功能设计
功能框架图如下:
职工信息管理系统流程图职工信息管理系统
增长
信息
删除信息
修改信息
查询信息
列出信息
计算年龄
创建简表
存入磁盘
退出系统
1.id
2.name
3.sex
4.birth
5.salary
6.worktime
要删除工号
选择修改项
选择查询类
1.id
2.name
3.age
选择列出信息:1.主管类
2.工人类3.所有
是否退出系统
开始
选择菜单
Case 1
输入选项
Switch(select)
Case 0
Case 2
Case 3
Case 4
Case 5
Case 6
Case 7
Case 8
结束
添加信息break
删除信息break
修改信息break
查找信息break
列出信息break
平均年龄break
创建简表break
存入磁盘break
Default
选择错误break
Y
N
Y
Y
Y
Y
Y
Y
Y
Y
N
N
N
N
N
N
N
3.3.2系统运营环境
Visual C++是一个功能强大的可视化软件开发工具。Visual C++6.0不仅是一个C++编译器,并且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C++6.0由许多组件组成,涉及编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。
3.4 系统实行
3.4.1程序代码
#include<iostream>
#include<string>
#include<iomanip>
#include<fstream>
using namespace std;
int num1=0,num2=0,num=0;
float avery=0.0;
char save1;
char exit();
enum tsex{man,woman,mid};
void foundid(string id1);
void foundname(string n);
void foundage(int a);
int foundhao(string id1);
void save();
void lisebiao(){};
class employee{
string id;
string name;
tsex sex;
int salary;
int birth;
int worktime;
int age;
public:
employee();
employee(string i,string na,tsex s,int sa,int bi,int wt);
~employee(){};
employee & operator= (employee &e){
id=e.id;name=e.name;sex=e.sex;salary=e.salary;birth=e.birth;worktime=e.worktime;
age=e.age;
return *this;
}
void add();
void display();
string getid(){return id;}
string getname(){return name;}
int getage(){return age;}
tsex getsex(){return sex;}
int getsalary(){return salary;}
int getbirth(){return birth;}
int getworktime(){return worktime;}
void setid(string id1){ id=id1;}
void setname(string n1){ name=n1;}
void setsex(int s){
if(s==1) sex=man;
else if(s==2) sex=woman;
else sex=mid;}
void setsalary(int sa){salary=sa;}
void setbirth(int bi){ birth=bi;}
void setworktime(int wt){worktime=wt;}
void clean(){employee();}
};
employee::employee(){
sex=mid;salary=0;birth=0;worktime=0;age=0;}
employee::employee(string i,string na,tsex s,int sa,int bi,int wt){
id=i;name=na;sex=s;salary=sa;birth=bi;worktime=wt;age=2023-bi/10000;
}
void employee::add(){
int f,sex1;
do{
cout<<"请输入职工号:\t";
cin>>id;
f=foundhao(id);
if(f==0) {cout<<"该职工号可以使用"<<endl;break;}
else if(f==1||f==2) cout<<"此职工号已存在"<<endl;
}while(f==1||f==2);
cout<<"请输入职工姓名:\t";
cin>>name;
do{
cout<<"请输入职工性别(1.男\t2.女):\t";
cin>>sex1;
switch(sex1)
{
case 1:
sex=man;
break;
case 2:
sex=woman;
break;
default:
cout<<"选择错误,重新选择\n";
}
}while(sex1!=1&&sex1!=2);
do{
cout<<"请输入基本工资:\t";
cin>>salary;
if(salary<1000)
cout<<"输入错误,基本工资应在1000以上!\n";
}while(salary<1000);
cout<<"请输入出生日期: \t";
cin>>birth;
cout<<"请输入参与工作日期:\t";
cin>>worktime;
cout<<"添加职工信息如下:\n";
display();
cout<<"是否保存?y/n:";
cin>>save1;
if(save1=='y'||save1=='Y')
{
num++;
cout<<"保存成功!\n";
}
else
{
cout<<"您放弃了保存!添加失败\n";
}
}
void employee::display(){
int i;
cout<<"工号:\t"<<id<<'\n'<<"姓名:\t"<<name<<'\n'<<"性别:\t";
if(sex==man)cout<<"男"<<'\n';
else if(sex==woman) cout<<"女"<<'\n';
else cout<<"无"<<endl;
age=2023-birth/10000;
cout<<"年龄:\t"<<age<<'\n';
cout<<"出生年月:\t";
i=birth;
cout<<i/10000<<"年";
i=i%10000;
cout<<i/100<<"月"<<i%100<<"日"<<'\n';
cout<<"工资:\t"<<salary<<'\n';
cout<<"参与工作时间:\t"<<worktime<<'\n';
}
class manager: public employee{
public:
int a;
manager();
manager(string i,string na,tsex s,int sa,int bi,int wt,int p1);
~manager(){};
void addmanager();
}m[100];
manager::manager(){a=1;}
manager::manager(string i,string na,tsex s,int sa,int bi,int wt,int p1):employee(i,na,s,sa,bi,wt){
a=p1;
}
void manager::addmanager(){
add();
a=1;
}
class work: public employee{
public:
int b;
work();
work(string i,string na,tsex s,int sa,int bi,int wt);
~work(){};
void addwork();
}w[100];
work::work(){b=0;}
work::work(string i,string na,tsex s,int sa,int bi,int wt):employee(i,na,s,sa,bi,wt){
b=0;
}
void work::addwork(){
add();
b=0;
}
void addnew(){
int select;
char f;
do{
cout<<"请输入添加的职工类型:1.主管\t2.工人\t";
cin>>select;
switch(select){
case 1:
m[num1].addmanager();
num1++;
break;
case 2:
w[num2].addwork();
num2++;
break;
default:
cout<<"选择错误!";
}
f=exit();
}while(select!=1&&select!=2||f=='n');
}
void jiludelete(){
manager t1;
work t2;
int i,j;
string id1,id2;
char b,f;
do{
cout<<"请输入要删除的职工号:"<<'\t';
cin>>id2;
if(foundhao(id2)==0) {cout<<"对不起!没有这个工人的记录";return;}
cout<<"你要删除的信息是:"<<endl;
foundid(id2);
cout<<"拟定要删除该记录?y / n\n";
cin>>b;
if(b=='n') return;
if(foundhao(id2)==1){
if(m[0].getid()==id2&&num1==1) m[0].clean();
else if(m[num-1].getid()==id2) m[num1-1].clean();
else
{for(i=0;i<num1-1;i++)
if(m[i].getid()==id2&&num1!=1) {
t1=m[i];
for(j=i;j<num1;j++)
m[j]=m[j+1];}
}
num1--;
}
else if(foundhao(id2)==2){
if(w[0].getid()==id2&&num2==1) w[0].clean();
else if(w[num-1].getid()==id2) w[num2-1].clean();
else
{for(i=0;i<num2-1;i++)
if(w[i].getid()==id2&&num2!=1) {
t2=w[i];
for(j=i;j<num2;j++)
w[j]=w[j+1];}
}
num2--;
}
num--;
cout<<"删除成功!";
f=exit();
}while(f=='n');
}
void change(){
string id2,str;
int t,j,k;
char f;
do{
cout<<"请输入要修改信息的职工号:\t";
cin>>id2;
if(foundhao(id2)==0) cout<<"对不起!没有这个工人的记录"<<endl;
else if(foundhao(id2)==1){
cout<<"要修改职工号的信息:\t";
foundid(id2);
for(t=0;t<num1;t++)
if(m[t].getid()==id2) {
cout<<"修改的选项:1 职工号 2姓名 3 性别 4 工资 5 出生日期 6 工作时间"<<'\t';
cin>>j;
switch(j){
case 1:
cout<<"新的职工号:\t";cin>>str;m[t].setid(str);break;
case 2:
cout<<"新的姓名:\t";cin>>str;m[t].setname(str);break;
case 3:
cout<<"新的性别(1.男\t2.女)";cin>>k;m[t].setsex(k);break;
case 4:
cout<<"新的工资:\t";cin>>k;m[t].setsalary(k);break;
case 5:
cout<<"新的出生日期:\t";cin>>k;m[t].setbirth(k);break;
case 6:
cout<<"新的工作时间:\t";cin>>k;m[t].setworktime(k);break;
default:
cout<<"error"<<endl;
}
m[t].display();
}
}
else if(foundhao(id2)==2){
cout<<"要修改职工号的信息:\t";
foundid(id2);
for(t=0;t<num2;t++)
if(w[t].getid()==id2) {
cout<<"修改的选项:1 职工号 2姓名 3 性别 4 工资 5 出生日期 6 工作时间"<<'\t';
cin>>j;
switch(j){
case 1:
cout<<"新的职工号:"<<setw(20);cin>>str;w[t].setid(str);break;
case 2:
cout<<"新的姓名"<<setw(20);cin>>str;w[t].setname(str);break;
case 3:
cout<<"新的性别(1.男\t2.女)"<<setw(20);cin>>k;w[t].setsex(k);break;
case 4:
cout<<"新的工资"<<setw(20);cin>>k;w[t].setsalary(k);break;
case 5:
cout<<"新的出生日期"<<setw(20);cin>>k;w[t].setbirth(k);break;
case 6:
cout<<"新的工作时间"<<setw(20);cin>>k;w[t].setworktime(k);break;
default:
cout<<"error"<<endl;
}
w[t].display();
}
}
f=exit();
}while(f=='n');
}
void found(){
int a;
string i;
char se,f;
do{
cout<<"请选择查询方式:1 职工号 2 姓名 3 年龄\t";
cin>>se;
switch(se){
case '1':
cout<<"请输入要查找的职工号:"<<'\t';
cin>>i;cout<<"你要查询的人的信息如下:"<<endl;foundid(i);break;
case '2':
cout<<"请输入要查找的姓名:"<<'\t';
cin>>i;cout<<"你要查询的人的信息如下:"<<endl;foundname(i);break;
case '3':
cout<<"请输入要查找的年龄"<<'\t';
cin>>a;cout<<"你要查询的人的信息如下:"<<endl;foundage(a);break;
default:
cout<<"没有此选项,请重新选择"<<endl;
}
f=exit();
}while(se!='1'&&se!='2'&&se!='3'||f=='n');
}
int foundhao(string id1){
int i,j;
for(i=0;i<num1;i++)
if(m[i].getid()==id1){
return 1;
}
for(j=0;j<num2;j++)
if(w[j].getid()==id1){
return 2;
}
return 0;
}
void foundid(string id1){
int i,j;
int flage=0;
for(i=0;i<num1;i++)
if(m[i].getid()==id1){
m[i].display();
flage=1;
}
for(j=0;j<num2;j++)
if(w[j].getid()==id1){
w[j].display();
flage=1;
}
if(flage==0) cout<<"对不起!没有找到\t";
}
void foundname(string n){
int i,j;
int flage=0;
for(i=0;i<num1;i++)
if(m[i].getname()==n){
m[i].display();
flage=1;
}
for(j=0;j<num2;j++)
if(w[j].getname()==n){
w[j].display();
flage=2;
}
if(flage==0) cout<<"对不起!没有找到";
}
void foundage(int a){
int i,j;
int flage=0;
for(i=0;i<num1;i++)
if(m[i].getage()==a){
m[i].display();
flage=1;
}
for(j=0;j<num2;j++)
if(w[j].getage()==a){
w[j].display();
flage=2;
}
if(flage==0) cout<<"对不起!没有找到";
}
string outsex(tsex s){
if(s==0) return "男";
else if(s==1) return "女";
else return "无";
}
string outposition(int s){
if(s==0) return "主管";
else return "工人";
}
void listbiao(){
int i,j,z;
cout<<"请选择输出类别:1 主管类 2 工人类 3 所有信息"<<endl;
cin>>z;
cout<<"id"<<'\t'<<"name"<<'\t'<<"sex"<<'\t'<<"salary"<<'\t'<<"birthday"<<'\t'<<"worktime"<<'\t'<<"age"<<'\t'<<endl;
switch(z){
case 1:
for(i=0;i<num1;i++)
cout<<m[i].getid()<<'\t'<<m[i].getname()<<'\t'<<outsex(m[i].getsex())<<'\t'<<m[i].getsalary()<<'\t'<<m[i].getbirth()<<'\t'<<m[i].getworktime()<<'\t'<<m[i].getage()<<'\t'<<endl;
break;
case 2:
for(j=0;j<num2;j++)
cout<<w[j].getid()<<'\t'<<w[j].getname()<<'\t'<<outsex(w[j].getsex())<<'\t'<<w[j].getsalary()<<'\t'<<w[j].getbirth()<<'\t'<<w[j].getworktime()<<'\t'<<w[j].getage()<<'\t'<<endl;
break;
case 3:
for(i=0;i<num1;i++)
cout<<m[i].getid()<<'\t'<<m[i].getname()<<'\t'<<outsex(m[i].getsex())<<'\t'<<m[i].getsalary()<<'\t'<<m[i].getbirth()<<'\t'<<m[i].getworktime()<<'\t'<<m[i].getage()<<'\t'<<endl;
for(j=0;j<num2;j++)
cout<<w[j].getid()<<'\t'<<w[j].getname()<<'\t'<<outsex(w[j].getsex())<<'\t'<<w[j].getsalary()<<'\t'<<w[j].getbirth()<<'\t'<<w[j].getworktime()<<'\t'<<w[j].getage()<<'\t'<<endl;
break;
case 4:
cout<<"没有该类型的记录!";
}
}
void save(){
int i,j;
ofstream ofile;
ofile.open("d:\\zg.txt");
ofile<<"id"<<'\t'<<"name"<<'\t'<<"sex"<<'\t'<<"salary"<<'\t'<<"birthday"<<'\t'<<"worktime"<<'\t'<<"age"<<'\t'<<"power \t"<<endl;
for(i=0;i<num1;i++)
{ofile<<m[i].getid()<<'\t'<<m[i].getname()<<'\t'<<outsex(m[i].getsex())<<'\t'<<m[i].getsalary()<<'\t'<<m[i].getbirth()<<'\t'<<m[i].getworktime()<<'\t'<<m[i].getage()<<'\t'<<outposition(m[i].a)<<endl; }
for(j=0;j<num2;j++)
{ofile<<w[j].getid()<<'\t'<<w[j].getname()<<'\t'<<outsex(w[j].getsex())<<'\t'<<w[j].getsalary()<<'\t'<<w[j].getbirth()<<'\t'<<w[j].getworktime()<<'\t'<<w[j].getage()<<'\t'<<outposition(w[j].b)<<endl;}
展开阅读全文