目录三正文 (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-2 第二层数据流图事务:删除,添加,修改,查询;职工信息E-R图3.2.3数据字典数据流字典①数据流名称:职工-主管类数据结构:职工编号 id姓名 name性别 sex工资 salary出生时间 birth参加工作时间 worktime职位 a②数据流名称:职工-工人类数据结构:职工编号 id姓名 name性别 sex工资 salary出生时间 birth参加工作时间 worktime职位 b3.2.4处理逻辑的定义①处理名:添加职工信息输入:根据选择录入数据输出:显示所添加的信息处理定义:当选择了要输入的数据类型时,按照提示输入所需要的信息,并录入到职工信息库里激发条件:选择添加职工信息②处理名:删除职工信息输入:键入要删除的职工号输出:显示输入职工好所对应的信息处理定义:根据键入的职工号查到相关的信息,经确认后,从信息库中删除激发条件:选择删除职工信息③处理名:修改职工信息输入:键入要修改的职工号,并选择要修改的项输出:显示修改后的该职工信息处理定义:键入要修改的职工号,显示该职工的信息,根据提示选择要修改的项,修改成功后显示修改后的职工信息激发条件:选择修改职工信息④处理名:查找职工信息输入:选择要查找的类型(职工号,姓名,年龄)输出:显示所要查找的职工信息处理定义:选择要查找的类型,从信息库中查找并显示激发条件:选择查找记录⑤处理名:列出信息输入:选择输出类型输出:根据选择输出数据处理定义:根据选择的输出类型,输出职工信息激发条件:选择列出信息功能⑥处理名:计算平均年龄输入:无输出:输出职工的平均年龄处理定义:调用函数,输出职工的平均年龄激发条件:选择计算平均年龄功能⑦处理名:创建职工信息简表输入:无输出:显示职工信息简表处理定义:创建并显示职工信息简表激发条件:选择创建职工信息简表功能⑧处理名:存入磁盘输入:无输出:把数据输出到磁盘文件中处理定义:输出职工信息文件激发条件:选择存入磁盘功能3.3 系统设计职工信息包括职工号,姓名,性别,年龄,工资,出生日期,工作时间,试设计一职工信息管理系统,使之能提供以下功能:(1)建立职工信息数据,包括职工编号、姓名、性别、工资、出生时间、参加工作时间和年龄(必须计算得到)。
(2)根据职工信息表,建立只含有姓名和年龄的职工信息简表。
(3)抽取并计算职工的平均年龄。
(4)检索(查找)指定信息。
(如按姓名检索、按年龄检索)(5)修改职工信息(6)删除职工信息(7)保存数据文件3.3.1功能设计功能框架图如下:职工信息管理系统流程图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=;sex=e.sex;salary=e.salary;birth=e.birth;worktime=e.wor ktime;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=2009-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=2009-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].g etage()<<'\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].g etage()<<'\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].g etage()<<'\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].g etage()<<'\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;}ofile.close();cout<<"succes!"<<endl;}void getaver(){int i,j;for(i=0;i<num1;i++)avery+=m[i].getage();for(j=0;j<num2;j++)avery+=w[j].getage();cout<<"职工的平均年龄是:"<<'\t'<<avery/num;}void creatjianbiao(){int i,j;cout<<"显示简表信息:"<<endl;cout<<"姓名"<<'\t'<<"年龄"<<'\t'<<endl;for(i=0;i<num1;i++)cout<<m[i].getname()<<'\t'<<m[i].getage()<<'\t'<<endl;for(j=0;j<num2;j++)cout<<w[j].getname()<<'\t'<<w[j].getage()<<'\t'<<endl;}char exit(){char s;cout<<"是否要退出该程序吗?[Y/N]:";cin>>s;return s;}int main(){cout<<"******************欢迎进入职工工资管理系统*******************"<<endl<<endl;cout<<"*****************本程序由5433工作室设计完成******************"<<endl<<endl;while(1){char s;int select;cout<<endl;cout<<" *****************主菜单***********************"<<endl<<endl;cout<<" 1.添加职工信息;"<<endl<<endl;cout<<" 2.删除职工信息;"<<endl<<endl;cout<<" 3.修改职工的信息;"<<endl<<endl;cout<<" 4.查找记录;"<<endl<<endl;cout<<" 5.列出记录;"<<endl<<endl;cout<<" 6.计算工人平均年龄"<<endl<<endl;cout<<" 7.创建职工信息简表"<<endl<<endl;cout<<" 8.存入磁盘"<<endl<<endl;cout<<" 0.安全退出系统;"<<endl<<endl;cout<<" [请选择操作(输入相应的数字)]:"<<endl<<endl; cin>>select;switch(select){case 0: //退出系统s=exit();if(s=='y'||s=='Y') return 0;break;case 1: //增加记录addnew();break;case 2: //删除记录jiludelete();break;case 3: //修改记录change();break;case 4: //按条件查找found();break;case 5: //输出记录listbiao();break;case 6: //计算工人平均年龄getaver();break;case 7: //创建简表creatjianbiao();break;case 8: //存入磁盘save();break;default: //选择错误 cout<<"此输入无效!"<<endl;}}}3.4.3运行结果1,主界面2.添加信息3.删除信息删除前信息删除删除后4.修改信息5.查询信息查询职工号查询姓名查询年龄6.平均年龄7职工信息表8.存入磁盘9.退出系统四、课程设计总结(正文为宋体,五号字行间距为21 )经过两周的学习设计,职工信息管理系统已经基本完成。