课程设计说明书.docx
《课程设计说明书.docx》由会员分享,可在线阅读,更多相关《课程设计说明书.docx(59页珍藏版)》请在冰豆网上搜索。
课程设计说明书
长沙学院
数据结构与面向对象
课程设计说明书
题目工资管理系统
系(部)信息与计算科学系
专业(班级)数学与应用数学2班
姓名
学号
指导教师
起止日期2014.6.19-27
长沙学院
数据结构与面向对象
课程设计任务书
专业数学
班级12级1、2班
指导老师
任务书发出时间
信息与计算科学系
2014年4月10日
课程设计任务书
课程
数据结构与面向对象课程设计
题目
工资管理系统
序号
2
主要内容
某人事部门要求建立职工工资管理系统,要求实现职工基本信息管理(编号、姓名、性别、初始年月、工资等级等)、工资等级情况管理(工资等级、基本工资、岗位工资、交通补贴等)、每月职工变动工资管理(职工编号、月份、奖励工资、扣款等),并根据职工的工资等级以及每月职工的变动工资情况自动生成每月职工的工资信息,并实现对员工工资的排序输出等操作。
要
求
基本要求
1.实现职工基本信息的管理:
主要包括职工信息的新增、修改、查询、删除等操作;
2.实现工资等级信息管理:
具体包括等级的新增、修改、查询等操作;
3.职工变动工资管理:
具体包括每月职工变动工资的新增、修改、删除、查询等操作;
4.必须要用面向对象设计思想编程实现。
高级要求
1、将数据保存到文件中,并能在程序再次运行时能从文件中读取到上次记录的信息,
2、统计:
分类汇总并输出所有员工的基本工资、补贴金额、奖励金额、扣除金额、实发工资的总金额和平均金额。
工作计划及进
1.15周星期一至星期三:
选题、交分组名单和课程设计题目;收集资料、需求分析;强化数据结构、面向对象等知识;系统设计
2.15周星期一至16周星期三:
程序设计,汇报演示(星期三);
3.16周星期五:
提交课程设计报告。
指导教师签字李学勇马丽
2014年4月10日
教研室审定意见
同意实施
签字陈治平
2014年4月10日
长沙学院课程设计鉴定表
姓名
学号
专业
数学与应用数学
班级
02班
设计题目
工资管理系统
指导教师
指导教师意见:
评定等级:
教师签名:
日期:
答辩小组意见:
评定等级:
答辩小组长签名:
日期:
教研室意见:
教研室主任签名:
日期:
系(部)意见:
系主任签名:
日期:
说明
课程设计成绩分“优秀”、“良好”、“中等”、“及格”、“不及格”五类;
长沙学院课程设计鉴定表
姓名
学号
专业
数学与应用数学
班级
02班
设计题目
工资管理系统
指导教师
指导教师意见:
评定等级:
教师签名:
日期:
答辩小组意见:
评定等级:
答辩小组长签名:
日期:
教研室意见:
教研室主任签名:
日期:
系(部)意见:
系主任签名:
日期:
说明
课程设计成绩分“优秀”、“良好”、“中等”、“及格”、“不及格”五类;
第一章开发背景
随着我国国民经济建设的蓬勃发展和具有中国特色的社会主义市场经济体制的迅速完善,各个行业都在积极使用现代化的手段,不断改善服务质量,提高工作效率,这些都在很大程度上给企业提出越来越严峻的挑战,对企业体系无论是在行政职能、企业管理水平以及优质服务上都提出更高的要求。
建设一个科学高效的信息管理系统是解决这一问题的必由之路。
企业内部财务管理是该企业运用现代化技术创造更多更高的经济效益的主要因素之一。
工资管理作为企业内部的一种财务管理也是如此,由于企业职工人数较多,每一位职工的具体实际情况也不尽相同,各项工资条款的发放,如果没有一个完整的管理系统,仅凭手工操作来实现不仅容易出错,而且也造成资源的不必要浪费,因此开发这个工资管理系统是很必要的。
第二章系统需求
2.1系统总需求
工资管理系统的主要任务是通过工资费用的计算和分配,为成本核算与账务处理提供依据,并且根据工资制度和职工劳动数量与质量,计算并发放应该支付给职工的工资。
工资核算是工资管理的主要内容。
工资核算包括工资结算与工资分配两个方面。
工资结算是指应付工资、代扣款项和实发工资的计算;工资分配是指按部门、类别进行工资汇总,并按工资的用途对工资进行分配。
工资管理系统的需要满足来自两方面的需求,分别是管理者和员工。
公司的管理人员的需求是对员工的基本信息进行录入、增加、查询、浏览、删除和修改,以及工资等级和工资变动的增加、查询、浏览、修改以及删除,再对员工工资进行汇总、排序求平均。
公司员工的需求是对个人信息、工资,奖惩进行查询,并对自身在全公司的整体情况进行分析。
2.2功能需求
整个系统分为三个大模块:
员工信息管理、工资管理、以及最终统计。
员工信息管理包括对员工基本信息(如:
姓名、性别、编号、工资等级等)进行增删查改以及浏览。
工资管理包括工资等级信息管理和工资变动信息管理。
工资等级信息管理包括对工资等级、基本工资、岗位工资、交通补贴的增删查改;工资变动信息管理包括对员工编号、奖励工资、惩罚工资、月份等信息进行增删查改。
最终统计就是对员工的总工资进行汇总,排序输出并求平均值。
2.3数据需求
员工信息:
姓名、年龄、员工编号、工资等级、初始年月;
工资管理:
工资等级、基本工资、岗位工资、交通补贴、员工编号、月份、奖励工资、惩罚工资;
总共工资=基本工资+岗位工资+交通补贴+奖励工资-惩罚工资。
分工:
龚昌霞负责员工信息管理以及工资等级的代码编写,胡徐峰负责工资变动以及最终统计的的代码编写,课程设计说明书由二人共同完成。
第三章系统设计
3.1系统总功能模块设计
工资管理系统是对员工基本信息、工资的发放进行管理。
其基础数据从公共代码设置流入。
包括员工信息管理、工资管理和最终汇总三个模块。
工资管理系统的软件结构如图3.1所示。
3.2各子功能模块设计
3.2.1员工信息管理
(1)功能:
对员工的基本信息进行管理。
员工的基本信息先进行新增,才能够进行修改、查询、浏览删除等功能。
(2)数据流入:
公共代码(voidSTAFF:
:
input())、新增模块(voidxinzeng())
(3)数据流出:
本模块(voidby_name()、voidby_no()、voidliulan())
(4)程序流程图:
员工信息管理模块的程序流程图如图3.2所示。
(5)测试要点:
该模块的测试要点是新增数据要与“浏览”中的数据进行一致性检查。
3.2.2工资等级信息管理
(1)功能:
对工资等级信息进行管理。
工资等级先进行新增,才能够进行修改、查询、浏览删除等功能。
(2)数据流入:
公共代码(voidRANK:
:
input())、新增模块(voidxinzeng1())
(3)数据流出:
本模块(voidby_level1()、voidby_gwgz1()、voidliulan1())
(4)程序流程图:
工资等级信息管理模块的程序流程图如图3.3所示。
(5)测试要点:
该模块的测试要点是新增数据要与“浏览”中的数据进行一致性检查。
3.2.3工资变动信息管理
(1)功能:
对工资变动信息进行管理。
工资变动先进行人员的新增,才能够进行修改、查询、浏览删除等功能。
(2)数据流入:
公共代码(voidCHANGE:
:
input())、新增模块(voidxinzeng2())
(3)数据流出:
本模块(voidchaxun2()、voidliulan2())
(4)程序流程图:
工资变动信息管理模块的程序流程图如图3.4所示。
(5)测试要点:
该模块的测试要点是新增数据要与“浏览”中的数据进行一致性检查。
3.2.4最终统计
功能:
对员工工资进行汇总排序,并求员工的平均工资。
3.3数据结构设计
3.3.1员工信息
包括用户编号,姓名,性别,工资等级,初始年月。
用类表示员工信息,如下面定义。
classSTAFF
//定义一个STAFF类,包含7个公有数据成员和2个成员函数
{
public:
intlogin;
charname[20];
intno;
charsex[20];
charyear[20];
charlevel[20];
voidinput();//成员函数声明
voidoutput();
};
3.3.2工资等级信息
包括工资等级、基本工资、岗位工资、交通补贴。
用类表示工资等级信息,如下面定义。
classRANK
//定义一个RANK类,包含7个公有数据成员和2个成员函数
{
public:
intlogin;
charlevel[20];
floatbsgz;
floatgwgz;
floatjtbt;
voidinput();//成员函数声明
voidoutput();
};
3.3.3工资变动信息
包括员工编号、月份、奖励工资、惩罚工资。
用类表示工资变动信息,如下面所示。
classCHANGE
//定义一个CHANGE类,包含7个公有数据成员和2个成员函数
{
public:
intlogin;
intno;
charmonth[20];
floatjlgz;
floatcfgz;
voidinput();//成员函数声明
voidoutput();
};
第四章系统特点及关键技术
本系统分为三大模块:
员工信息管理模块、工资管理模块以及最终统计,而员工信息管理与工资管理都实现了增删查改的功能,它们之间的联系是员工的工资等级以及员工编号,最终汇总实现了员工工资的汇总、排序以及员工工资的平均值。
4.1主窗口显示
本系统启动后直接显示主窗口,如图4.1所示
图4.1主窗口图
4.2员工信息管理
本模块实现对员工基本信息的增删查改等基本功能,如图4.2所示
图4.2员工信息管理图
4.2.1员工信息新增
本模块实现员工的新增功能,如图4.3所示
图4.3员工信息新增图
主要实现代码:
voidxinzeng()//xinzeng():
增加员工信息
{
STAFFst;
ofstreamoutfile("staff_information.dat",ios:
:
out|ios:
:
binary|ios:
:
app);
if(!
outfile)
{
cout<<"\n\t\t文件打开错误!
";
return;
}
st.login=count()+1;//录入员工信息时,计算对应的登录号
cout<<"\n\n\t\t第"<st.input();
outfile.write((char*)&st,sizeof(st));
outfile.close();
system("pause");
screen();//函数结束,返回主菜单
}
4.2.2员工信息浏览
本模块实现员工信息的浏览,如图4.4所示
图4.4员工信息浏览图
主要实现代码:
voidliulan()//liulan():
浏览所有员工信息
{
STAFFst;
ifstreaminfile("staff_information.dat",ios:
:
in|ios:
:
binary|ios:
:
nocreate);
if(!
infile)
{
cout<<"\n\t\t打开输入文件出错!
\n"<system("pause");
screen();
}
infile.seekg(0,ios:
:
end);//文件指针移到文件尾
if(!
infile.tellg())//判断文件内信息是否为空
cout<<"\n\t\t系统内员工信息为空!
"<else
{
infile.seekg(0,ios:
:
beg);//文件指针回到文件头
cout<<"\n****************共有"<cout<<"\n姓名\t编号\t性别\t记录时间(2014/01/01)\t工资等级"<for(intj=1;j<=count();j++)
{
infile.read((char*)&st,sizeof(st));
cout<}
}
system("pause");
screen();//函数结束,返回主菜单
}
4.2.3员工信息查询
本模板实现员工信息查询,可按照姓名、编号查询,如图4.5和4.6所示
图4.5姓名查询图
图4.6编号查询图
主要实现代码:
voidchaxun()//chaxun():
建立查询子菜单
{
system("cls");
cout<<"╔══════════════════════════════╗\n";
cout<<"║║\n";
cout<<"║1按姓名2按编号║\n";
cout<<"║║\n";
cout<<"║0:
退出║\n";
cout<<"╚══════════════════════════════╝\n";
cout<<"请选择(0-2):
";
intoption1;cin>>option1;
switch(option1)
{
case1:
by_name();break;
case2:
by_no();break;
case0:
screen();break;
default:
cout<<"\n\t\t输入错误";
system("pause");
chaxun();
}
}
4.2.4员工信息修改
本模块实现员工信息的修改,如图4.7所示
图4.7员工信息修改图
主要实现代码:
voidxiugai()//修改按姓名查找并输出
{
cout<<"\n\t\t输入姓名:
";
charna[20];cin>>na;
STAFFst;
fstreammfile("staff_information.dat",ios:
:
in|ios:
:
out|ios:
:
binary|ios:
:
nocreate);
if(!
mfile)
{
cout<<"\n\t\t打开输入文件出错!
\n"<return;
}
inti=count(),k=0;//i存储文件中书的数量,k用于判断所查的文件名是否存在
for(intj=1;j<=i;j++)
{
mfile.read((char*)&st,sizeof(st));
if(strcmp(na,st.name)!
=0)//比较输入的文件名和文件中存储的文件名
k++;//当两文件名不相同时,k自增1,否则不变
}
if(k==i)//若k=i,说明文件中没有一个文件名与输入的相同,即所查的文件名不存在
{
cout<<"\n\t\t没有找到该员工!
\n"<}
else
{
mfile.seekg(0);
cout<<"\n\n";
for(intj=1;j<=i;j++)
{
mfile.read((char*)&st,sizeof(st));
if(strcmp(na,st.name)==0)//找到文件名,输出对应的信息
{
mfile.seekg((j-1)*sizeof(st));//文件指针移到开始修改的位置
mfile.read((char*)&st,sizeof(st));
st.output();
cout<<"对信息进行修改"<st.input();
mfile.seekg((j-1)*sizeof(st));//文件指针移回开始修改的位置
mfile.write((char*)&st,sizeof(st));//重新写入该信息
cout<<"\n\t\t******修改成功******\n"<}
}
}
mfile.close();
system("pause");
screen();//结束查询,返回子菜单
}
4.2.5员工信息删除
本模块实现员工信息的删除,如图4.8所示
图4.8员工信息删除图
主要实现代码:
voidshanchu()//删除员工信息
{
STAFFst;intn;
cout<<"\n\n\t\t输入要删除的员工编号:
";cin>>n;
ifstreaminfile("staff_information.dat",ios:
:
in|ios:
:
binary|ios:
:
nocreate);
if(!
infile)
{
cout<<"\n\t\t打开输入文件出错!
\n"<return;
}
fstreammfile("staff_information2.dat",ios:
:
out|ios:
:
in|ios:
:
binary);
//建立名为staff_information2的中间文件,存储除被删除员工以外的信息
if(!
mfile)
{
cout<<"\n\t\t文件打开错误!
"<return;
}
inti=count(),k=0;
for(intj=1;j<=i;j++)
{
infile.read((char*)&st,sizeof(st));
if(n!
=st.no)//比较输入的文件名和文件中存储的文件名
k++;//当两文件名不相同时,k自增1,否则不变
}
if(k==i)//若k=i,说明文件中没有一个文件名与输入的相同,即所查的文件名不存在
{
cout<<"\n\t\t没有找到该员工编号!
\n"<infile.close();
mfile.close();
}
else
{
infile.seekg(0,ios:
:
beg);
for(intj=1;j<=i;j++)
{
infile.read((char*)&st,sizeof(st));
if(n!
=st.no)
//如果文件名不相同,则把信息复制到stok_information2.dat中
{
mfile.write((char*)&st,sizeof(st));
}
else
break;//如果文件名相同,则不复制信息,直接跳出循环
}
for(j++;j<=i;j++)
{
infile.read((char*)&st,sizeof(st));
st.login=st.login-1;
mfile.write((char*)&st,sizeof(st));
}
infile.close();
ofstreamoutfile("staff_information.dat",ios:
:
out|ios:
:
binary);
//建立重名文件,清空原有信息
if(!
outfile)
{
cout<<"\n\t\t文件打开错误!
"<return;
}
mfile.seekg(0,ios:
:
beg);//文件指针移到文件头
for(j=1;j
{
mfile.read((char*)&st,sizeof(st));
//将stok_information2.dat中的信息复制到stok_information.dat
outfile.write((char*)&st,sizeof(st));
}
mfile.close();
outfile.close();
cout<<"\n\t\t******删除成功******\n"<}
system("pause");
screen();
}
4.2.6员工信息全删
本模块实现员工信息的全部删除,如图4.9所示
图4.9员工信息全部删除图
主要实现代码:
voidquanshan()//quanshan():
删除文件中全部信息
{
ifstreaminfile("staff_information.dat",ios:
:
in|ios:
:
binary|ios:
:
nocreate|ios:
:
trunc);
if(!
infile)
{
cout<<"\n\t\t打开输入文件出错!
\n"<return;
}
infile.close();
cout<<"\n\t\t******全删成功******\n"<system("pause");
screen();
}
4.3工资管理
本模块显示了工资等级和工资变动的菜单,如图4.10所示
图4.10工资管理窗口
主要实现代码:
voidgongzi()
{
inti;
system("cls");
cout<<"╔══════════════════════════════╗\n";
cout<<"║║\n";
cout<<"║1工资等级║\n";
cout<<"║║\n";
cout<<"║2工资变动0退出║\n";
cout<<"║║\n";
cout<<"╚══════════════════════════════╝\n";
cout<<"请选择(0-2):
";
cin>>i;
switch(i)
{
case1:
screen1();break;
case2:
screen2();break;
case0:
caidan();break;
default:
cout<<"\n\t\t输入错误"<system("pause");
gongzi();
}
}
4.3.1工资等级信息新增
本模块实现工资等级信息的新增,如图4.11所示
图4.11等级信息新