C高级程序设计职工工资管理系统.docx
《C高级程序设计职工工资管理系统.docx》由会员分享,可在线阅读,更多相关《C高级程序设计职工工资管理系统.docx(37页珍藏版)》请在冰豆网上搜索。
![C高级程序设计职工工资管理系统.docx](https://file1.bdocx.com/fileroot1/2023-6/9/c3a7c5ad-6a49-425c-91f6-28361ad7c5e1/c3a7c5ad-6a49-425c-91f6-28361ad7c5e11.gif)
C高级程序设计职工工资管理系统
中南大学
《高级程序设计实践(C++)》
课程设计报告
设计题目职工工资管理系统
指导老师王晓丽黎群辉
设计者张亦弛
专业班级电气信息类1224
设计日期——
一、课程设计的目的..........................................................2
二、课程设计的基本内容...................................................2
三、课程设计的基本要求...................................................3
四、软件整体规划和方案...................................................4
五、程序功能简介..............................................................5
六、调试结果.....................................................................13
七、软件特色与不足..........................................................21
八、遇到的问题..................................................................21
九、设计心得与总结..........................................................22
十、参考文献......................................................................22
十一、附录..........................................................................23
一、课程设计的目的
本设计是课程——《面向对象编程(C++)》的一个关键实践环节。
它是根据教学计划的要求,在教师的指导下,对我们学生实施程序设计训练的必要过程,是对前期课堂学习内容的综合应用及其效果的检验和提高。
其目的在于培养我们综合运用理论知识来分析和解决实际问题的能力、以及严谨的科学态度和良好的程序设计习惯。
在课程设计中,要求我们能够遵循软件开发过程的基本规范,运用面向对象程序设计的方法,按照选定的课程设计题目要求,独自地完成设计、编写、调试和测试应用程序及编写文档的任务。
(1)掌握C++语言的程序设计方法;
(2)理论联系实际,进一步提高学生的软件开发技术;
(3)培养学生分析、解决问题的能力;
(4)提高学生实践论文撰写能力。
二、课程设计的基本要求
1)本设计采用教师指导、学生自学和独立编程操作方式,先由我们查阅与本设计有关的书籍和资料,利用VisualC++设计环境与开发工具,在两周时间内,完成课程设计内容中的一个管理系统,具体要求如下:
1、独立思考:
独立完成课程设计中各任务的设计和调试。
2、上机准备:
每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。
数据管理:
管理系统中的数据可用数据库(如Access数据库)的形式保存,也可用普通文件(文本文件或二进制文件)的形式保存。
(本系统采用文本文件形式保存,可储存小型的数据,也就是说不会超过100人的数据,超出会报已满无法执行)
3、程序要求:
界面美观、可操作性强、稳定性好。
对系统所需完成的功能分析;
使用VisualC++编译器进行程序编译;
提出系统的设计方案;
对所设计源程序进行调试。
2)创新要求:
在基本要求达到后,可进行创新设计。
3)课程设计论文编写要求:
提交一份设计报告(即设计说明书)包括:
设计任务的目的、任务、基本内容、总体设计方案、软件设计(各功能模块的流程图及详细的文字分析与说明)、软件特色与不足、调试结果、设计心得与总结、参考资料等。
内容不得少于设计说明书专用纸20页,书写要整洁、规范,装订成册。
三、课程设计的基本内容
我所做内容是职工工资管理系统,基本内容如下:
职工工资管理系统
1、基本要求:
为方便管理职工工资,编写一个职工工资管理系统软件。
系统记录必须包括职工姓名、职工编号、基本工资、职务工资、岗位津贴、五险一金等。
2、基本管理功能:
(1)添加:
增加一个职工信息到管理系统中。
(2)查询:
可以根据姓名查找某人的相关信息,若找到则显示其信息。
(3)修改:
在管理系统中修改一个职工的信息。
(4)保存:
将所有职工的信息保存在一个文件中(数据库文件或普通的文本文件)。
(5)读取:
从文件中读取已保存了数据。
(6)删除:
从管理系统中删除一条记录。
(7)恢复:
能恢复被删除的记录。
(8)统计:
(A)计算各项工资平均工资及总工资,(B)统计符合指定条件(如职工工资前三项之和在3000元以上、3000~2500元、2500~1000元)以内的工资职工人数及占总职工人数的百分比。
(C)以表格形式打印全部职工工资信息表及平均工资(包括各项总的平均工资)。
(9)其他:
可以根据自己的思路设计其他功能。
四、软件整体规划和方案
1、总的设计任务
(1)设计一个菜单驱动程序,包括7个菜单内容,输入1-7之间的任何一个数字,就可以进入相应的选择项目,并执行对应的程序。
(2)输出的信息分别为:
增加职工信息、查找职工信息、修改职工信息、打印全部职工信息、删除单一职工信息、统计、退出程序。
(3)对职工信息按工号或姓名进行查询。
该系统具有存贮学生数据,按工号、姓名查询,按需要修改职工信息,列出职工工资和统计的功能
(4)主要设计两个类,第一是职工类(用于统计职工基本信息),第二个是职工类的友元类,叫系统类(用于处理数据),以及菜单函数、主函数来实现各项选择功能,输出正确的运行结果。
(5)运用所学知识(主要为函数、循环语句、类的定义、测试、封装、数据隐藏、),掌握面向对象程序设计的基本概念和基本方法,掌握C++语言的基本语法和基本内容,并能运用C++语言进行基本的面向对象程序设计,并且通过综合课程设计,提高学生的实践动手技能,培养学生独立分析分析问题和解决问题的能力。
2、系统功能模块
1、增加职工信息
2、查找职工信息
3、修改职工信息
4、职工工资列表
5、删除职工信息
6、统计
7、退出程序
3、功能的实现
使用者根据页面菜单的显示,选择相应是项目并输入所需项目前的序号,按enter键然后再根据提示,执行相应的操作,以达到功能的实现。
4、总的程序流程图图:
五、程序功能简介
用户运行程序后进入系统主界面,在主界面用户可以输入所有职工的数据并保存到与date2..txt文件中,文件是ASCII文本文件,可以直接读取,即便修改也不会影响系统中的数据,因为这个文件只是一个表面文件。
而是真正存储数据、处理数据的文件,这样做变使得数据变得安全,外部无法修改。
该系统运行时也可以读取文件中已有的学生数据。
用户在保存数据的时候,如果保存位置没有文件则自动新建一个文件进行保存。
但该系统同时只能对一个数据文件进行相关操作,不能同时打开多个数据文件,其类似于单用户操作系统。
该系统中还存在“”与“”这两个文件,这两个问价适用于判断是否添加新文件的判断()与储存计数器的文件()。
由于新版本的c++库中没有ios:
:
nocreat与ios:
:
noplace两个对文件的操作,所以用如下代码来代替:
voidxitong:
:
build()
ame)
ame;break;
case2:
cout<<"输入新工号"<cin>>e[i].num;break;
case3:
cout<<"输入新基本工资<cin>>e[i].bs;break;
case4:
cout<<"输入新职务工资<cin>>e[i].ps;break;
case5:
cout<<"输入新岗位津贴<cin>>e[i].al;break;
case6:
cout<<"输入新五险一金"<cin>>e[i].is;break;
case7:
cout<<"输入新名字"<cin>>e[i].name;
cout<<"输入新工号"<cin>>e[i].num;
cout<<"输入新基本工资<cin>>e[i].bs;
cout<<"输入新职务工资<cin>>e[i].ps;
cout<<"输入新岗位津贴<cin>>e[i].al;
cout<<"输入新五险一金"<cin>>e[i].is;break;
}
}
5、恢复函数
恢复函数目的是为了使得误删的函数进行恢复操作。
其工作流程类似删除函数,先在存储删除后的类对象数组中找到删掉的类数据。
(同样是for循环查找)找到后选择是否恢复,选择是,则会在数据文件的最后将已经删除的数据重新加进去。
if(b==1)
{
e[n]=f[i];
n++;
savefile();
cout<<"已重新添加"<for(i=0;i<(x-1);i++)
{
f[i]=f[i+1];
x--;
}
}
break;
六、调试结果
首先进行界面的调试结果如下图所示:
非常成功!
按任意键进入之后输入管理员的姓名与密码之后进入,现在我的姓名是“张亦弛”
密码是“”
第二,进行添加函数的调试。
例如:
我添加一个数据,姓名:
郭启祥,工号:
,基本工资987,职务工资654,岗位津贴321,五险一金963,然后再敲回车便可看到添加成功的提示。
第三,进行显示函数的调试,直接写5然后敲回车,可以发现以前有两个村过的数据,现在新增数据郭启祥已经加入最后一列当中去了。
并且也间接证明我的函数没有问题。
很成功。
第4、进行查找函数的调试。
例如:
查找郭启祥,用名字查找方式。
那么郭启祥的信息就全部输出了!
成功!
第5、进行删除函数的调试,例如:
删除郭启祥的所有信息,用工号查找的方式。
表明郭启祥的数据已经删除。
第6、进行恢复函数的调试,恢复郭启祥的数据,用姓名查找的方式。
表明数据已经恢复成功!
第7、修改函数的调试,例如:
将郭启祥的基本工资改为1000
成功!
七、软件的特色与不足
1、特色:
(1)主界面用系统函数改变了界面颜色,并在每次执行完每个操作时会进行清屏等。
(2)系统的保密工作做得很好,只有管理员有权限修改程序,而且表面文件与数据文件分开来,使得重要数据得到隐藏。
(3)每个操作的执行都会进行文件的保存,避免了因为特殊情况而导致的内存中数据丢失使得文件中的信息丢失。
2、不足之处:
(1)有最大存储值100,超过这个值的时候不会读入新增的数据。
(2)没有链接数据库,存储是在文本文档当中存的,数据较多时读取与操作是个比较麻烦的事情。
(3)程序没有与可视化连接在一起,所以界面有点单一单调。
3、改进方面:
(1)桥接数据库,十七能存储大容量的数据。
(2)学习可视化,将界面做的更加人性化。
八、遇到的问题
1、语法错误
经常性忘记加“;”使得每次编译都进行的很慢。
2、逻辑错误
(⒈)文件的写入与读出,刚开始对文件的操作不太明白,一致不能很好的操作文件,其中最大的问题是对已存在的文件读取问题,通过“显示全部学生成绩”将数据从文件中读取,可是在使用过程中总是出现读出错误,出现乱码。
(⒉)内存的分配问题,这也是困惑了我好久的问题。
对于我们初学者来说对内存的分配和释放问题是比较抽象和模糊的难题,本来使用链表的方式存储数据,然而待到排序时出现了交换数据困难的问题,以及分配空间繁琐释放空间不及时的问题,造成空间浪费使得程序运行效率低的问题。
因此最后采用了顺序存储记录的方式,这样就能改变前述问题。
九、设计心得与总结
本次设计我选择的题目是职工工资管理系统。
因为事先的计划非常明确,所以我们在完成这个设计的过程也是比较顺利的。
在系统分析和设计的部分仍然花了比较多的时间。
模块设计部分因为涉及功能的实现,要从抽象的设计转化成实际的代码,因此对于某项功能的实现方法都思考得比较详尽。
加上在开发系统之前,我阅读很多与本系统有相关内容的书籍以做参考,使得此次系统编写能顺利进行。
由于班里每个人都需要做一份设计,所以我们经常互相交流。
在交流的时候经常能够互相提出更好的建议。
经过对职工信息管理系统的分析与编写,我得到了很大的收获。
自主学习的必要性更是解决问题的基础。
这次设计使我重温了以前学过的各科知识,让我对C++编程有了更深刻的认识。
每一个功能模块经过调查后后,各个功能逐渐显露出来,然后,反复探讨,验证这项功能是否有存在的必要,是否可以改进得更好。
在这样的前提下,最后顺利完成了这份设计。
这次C++系统设计作业,提升了我分析问题的能力和思考问题的逻辑能力,更明白实际调研的重要性。
从这次设计学到的东西,相信会对我们日后的学习工作起到很大的指导作用。
一十、参考文献
《c++程序设计》作者:
谭浩强出版社:
清华大学出版社
《c++大学教程》作者:
出版社:
电子工业出版社
一十一、附录
第一个文件:
主函数文件(mainhanshu)
#include
#include
#include
#include
#include""
usingnamespacestd;
加职工数据║"<cout<<"║2.查找职工信息║"<cout<<"║3.删除职工信息║"<cout<<"║4.修改职工信息║"<cout<<"║5.显示所有职工信息║"<cout<<"║6.恢复已删除数据║"<cout<<"║7.职工信息统计║"<cout<<"║8.退出系统║"<cout<<"╠══════════════════════╣"<cout<<"║◆作者:
张亦弛◆║"<cout<<"╚══════════════════════╝"<cin>>a;
switch(a)
{case1:
add();break;
case2:
search();break;
case3:
delet();break;
case4:
change();break;
case5:
displayall();break;
case6:
recover();break;
case7:
count();break;
case8:
exit
(1);
}
}while(a!
=8);
}
voidxitong:
:
build()ame>>e[i].num>>e[i].bs>>e[i].ps>>e[i].al>>e[i].is;
();
}
voidxitong:
:
savefile()ame<ofile<ofile<}
();
();
ofstreamoutfile("",ios:
:
out);ame;
cout<<"输入工号:
"<cin>>e[n].num;
cout<<"输入基本工资:
"<cin>>e[n].bs;
cout<<"输入职务工资:
"<cin>>e[n].ps;
cout<<"输入岗位津贴:
"<cin>>e[n].al;
cout<<"输入五险一金:
"<cin>>e[n].is;
cout<<"确定添加么?
(Y/N)"<chara;
cin>>a;
if(a=='Y'||a=='y')
{
addn();
savefile();
cout<<"\t添加完成!
"<system("PAUSE");
face();
}
else
cout<<"按任意键加回车继续"<stringp;
cin>>p;
face();
}
voidxitong:
:
displayall()
{
readfile();
fstreamiofile("",ios:
:
in);
cout<cout<cout<for(inti=0;i{iofile>>e[i].name>>e[i].num>>e[i].bs>>e[i].ps>>e[i].al>>e[i].is;
cout<}
cout<cout<();
cout<<"按任意键加回车继续"<stringp;
cin>>p;
face();
}
voidxitong:
:
displayone(inti)
{
cout<cout<cout<cout<cout<cout<}
voidxitong:
:
search()
{
readfile();姓名查询║"<cout<<"║2.按工号查询║"<cout<<"╚════════════════════╝"<cin>>a;
switch(a)
{case1:
cout<<"输入名字:
";
cin>>k;
for(i=0;i{
if(k==e[i].name)
{b=1;break;}
}
if(b==1)
{displayone(i);break;}
else
cout<<"查无此人,请先输入数据"<break;
case2:
cout<<"输入工号:
";
stringd;
cin>>d;
for(o=0;o{
if(d==e[o].num)
{c=1;break;}
}
if(c==1)
{displayone(o);break;}
else
cout<<"查无此人,请先输入数据"<break;
}
cout<<"按任意键加回车继续"<stringp;
cin>>p;
face();
}
voidxitong:
:
change()
{
readfile();姓名查询║"<cout<<"║2.按工号查询║"<cout<<"╚════════════════════╝"<cin>>a;
switch(a)
{case1:
cout<<"请输入员工姓名";
cin>>k;
for(i=0;i{
if(k==e[i].name)
{z=1;break;}
}
if(z==1)
{
cout<<"存在此人信息"<cout<cout<<"此人信息如下"<displayone(i);
change1(i);
cout<<"确定保存?
(y/n)"<charb;
cin>>b;
if(b=='Y'||b=='y')
savefile();
cout<<"修改完成"<}
else
cout<<"查无此人"<break;
case2:
cout<<"输入工号";
stringd;
cin>>d;
for(o=0;o{
if(d==e[o].num)
{c=1;break;}
}
if(c==1)
{cout<<"存在此人信息"<cout<