C++高级程序设计职工工资管理系统Word文档格式.docx
《C++高级程序设计职工工资管理系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《C++高级程序设计职工工资管理系统Word文档格式.docx(50页珍藏版)》请在冰点文库上搜索。
![C++高级程序设计职工工资管理系统Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/b58f9a59-546b-46b9-a8f3-6e108fb91793/b58f9a59-546b-46b9-a8f3-6e108fb917931.gif)
对系统所需完成的功能分析;
使用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、总的程序流程图图:
五、程序功能简介
用户运行程序后进入系统主界面,在主界面用户可以输入所有职工的数据并保存到date1.txt与date2..txt文件中,date1.txt文件是ASCII文本文件,可以直接读取,即便修改也不会影响系统中的数据,因为这个文件只是一个表面文件。
而date2.txt是真正存储数据、处理数据的文件,这样做变使得数据变得安全,外部无法修改。
该系统运行时也可以读取文件中已有的学生数据。
用户在保存数据的时候,如果保存位置没有文件则自动新建一个文件进行保存。
但该系统同时只能对一个数据文件进行相关操作,不能同时打开多个数据文件,其类似于单用户操作系统。
该系统中还存在“date9.txt”与“date10.txt”这两个文件,这两个问价适用于判断是否添加新文件的判断(date10.txt)与储存计数器的文件(date9.txt)。
由于新版本的c++库中没有ios:
:
nocreat与ios:
noplace两个对文件的操作,所以用如下代码来代替:
voidxitong:
:
build()//build是用于文件建立的函数
{
fstreamfs("
date9.txt"
ios_base:
in);
//试图打开文件
if(!
fs)
{
fs.close();
fs.open("
out);
//新建文件
ofstreamoutfile2("
date10.txt"
ios:
n=0;
outfile2<
<
n;
outfile2.close();
ofstreamoutfile("
date1.txt"
ofstreamofile("
date2.txt"
binary);
outfile.close();
ofile.close();
}
else//文件存在则不去创造新文件
{}
}
当用户读取学生数据后可对其进行显示,插入,删除,修改等相关操作。
用户在操作过程中执行完每一次的操作,该系统都会进行文件的保存,以防止修改的数据丢失。
为了体现人性化,每次修改和增加都会提问是否要进行修改(或增加),当用户确认后才会进行修改(或增加),并保存数据(存入文件中)。
在main()函数中主要是通过”switch()”语句选择判断来调用相关功能模块。
系统的运行是在一个永真的循环里进行的,只有在主界面并选择“退出本系统”时,才会跳出永真循环,并退出程序。
并且每次进行界面函数的调用时都会清除屏幕的杂项,使界面变得简洁。
Main()函数的执行程序框图如下:
下面介绍每个函数的功能:
1、添加函数:
添加函数是用来想文件中添加数据。
首先从文件中读取数据,如果没有文件的话会自动建立一个新文件。
之后按照要求输入新增人员的姓名,工号,基本工资,职务工资,岗位津贴,五险一金等。
输入之后会提示是否保存文件,回答y或者n即可,回答y则会写入文件中去。
程序流程图如下:
每次添加函数的运行完成,都会执行保存函数,会在文件末尾加上新添加的信息。
不必担心数据的丢失。
2、查找函数:
查找函数用来查找已经存入的信息,程序流程图附在后面。
首先读取文件中的数据,放入内存中。
然后用switch语句进行选择,选项为姓名查询与工号查询两种。
选择好之后,先输入姓名,用循环语句在类数组中进行搜寻,找到符合的那一项之后,使得判断寄存器变为1,然后会执行输出单项函数,则查询到的人员,系统会将会自动输出该人员的所有数据。
如果找不到符合的项则会输出“查无此人”的一行字符,提示没有输入过这个人的数据。
cin>
>
k;
//输入名字
for(i=0;
i<
i++)
{
if(k==e[i].name)//查询是否有符合的项
{b=1;
break;
}
if(b==1)
{displayone(i);
}//displayone(i)用来显示搜索到的数据所有信息
else
cout<
"
查无此人,请先输入数据"
endl;
break;
3、删除函数:
删除函数用来删除不需要的数据,流程图附在后面。
执行删除操作时,首先读取文件,然后开启选择项switch语句,输入选项,选择通过姓名还是通过工号来查询所要删除的信息。
例如:
选择名字查询,则先输入名字然后判断器先定为0之后用for循环语句对存在内存中的对象数组中存储姓名的那一项进行比对,找到符合项之后,判断器会记为1,之后跳出循环。
然后输出这个人的信息,并输出一行字“是否确定删除?
(y/n)”。
如果选择y,则会执行保存函数,将删除后的重新写入文件中。
如果选择n,则不会执行保存函数,所以不会保存文件。
因为每次调用函数时都是通过先读文件,在对读入的数据进行处理,所以对文件没有影响。
if(z==1)
{
cout<
此人信息如下:
displayone(i);
f[x]=e[i];
//将要删除的信息存入临时的储存器当中以便恢复时使用。
x++;
for(intj=i;
j<
(n-1);
j++)//将i之后的数据项前一个赋值,因此便删除了查到的数据
e[j]=e[j+1];
n--;
//计数器的值减一
确定修改?
(y/n)"
//询问是否要修改
charb;
cin>
b;
if(b=='
Y'
||b=='
y'
)
{savefile();
文件修改完成"
}
文件未修改"
}
else
查无此人"
以上为实现删除功能的部分代码
4、修改函数
修改函数目的是为了对数据进行修改,如果输入的数据有一些小问题的话,可以通过这个函数对数据进行修改。
过程如下:
首先选择修改数据,第二执行读取文件的操作,将文件读入内存中去。
读入内存后也是通过for循环语句来查找对象,找到之后显示存在并与此同时输出该人的信息。
与上面删除与查找类似,先将符合的对项找到,找不到则输出“查无此人”找到之后进行修改,修改分为1、修改姓名。
2、修改工号。
3、修改基本工资。
4、修改职务工资。
5、修改岗位津贴。
6、修改五险一金。
7、全部修改。
执行前六个时分别修改一项,执行第七个时可以分别对其重新输入修改。
Voidchange1()
inta;
cout<
请选择那一线进行修改"
setw(20)<
1、姓名"
2、工号"
3、基本工资<
4、职务工资<
5、岗位津贴<
6、五险一金"
7、全部修改"
cin>
a;
请输入正确选项"
switch(a)
{case1:
cout<
输?
入?
新?
名?
字?
e[i].name;
case2:
输入新工号"
e[i].num;
case3:
输入新基本工资<
e[i].bs;
case4:
输入新职务工资<
cin>
e[i].ps;
case5:
输入新岗位津贴<
e[i].al;
case6:
输入新五险一金"
e[i].is;
case7:
输入新名字"
cout<
}
5、恢复函数
恢复函数目的是为了使得误删的函数进行恢复操作。
其工作流程类似删除函数,先在存储删除后的类对象数组中找到删掉的类数据。
(同样是for循环查找)找到后选择是否恢复,选择是,则会在数据文件的最后将已经删除的数据重新加进去。
if(b==1)
e[n]=f[i];
n++;
savefile();
已重新添加"
for(i=0;
(x-1);
{
f[i]=f[i+1];
x--;
六、调试结果
首先进行界面的调试结果如下图所示:
非常成功!
按任意键进入之后输入管理员的姓名与密码之后进入,现在我的姓名是“张亦弛”
密码是“0909122409”
第二,进行添加函数的调试。
我添加一个数据,姓名:
郭启祥,工号:
0909122403,基本工资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++大学教程》作者:
H.M.DeitelP.J.Deitel出版社:
电子工业出版社
一十一、附录
第一个文件:
主函数文件(mainhanshu)
#include<
fstream>
string>
iostream>
iomanip>
#include"
shenming.h"
usingnamespacestd;
//voidmain()
//{
//xitongs;
//s.build();
//s.face();
//}
voidPass()
charUserName[15];
charPassward[15];
inti=1;
╔═════════════════════════════╗"
//cout<
****************************************************************************\n"
;
\n║为保护职工成绩信息,只有管理员才可以进行管理!
║"
\n║管理员名和登陆密码都只有3次机会,如果超过将自动退出系统!
//cout<
╚═════════════════════════════╝"
\n请输入管理员名:
UserName;
while(strcmp(UserName,"
张亦弛"
)!
=0)
if(i>
=3)
exit(0);
//超过3次则登陆失败,退出系统
i++;
\n管理员名无效!
请重新输入:
\n请输入密码:
Passward;
while(strcmp(Passward,"
0909122409"
=3)
\n密码输入错误!
\n\t\t欢迎管理员的到来!
\n"
voideditor()
--------------------------------------------------