C++课程设计 职工工资管理系统报告内含程序完整清单.docx

上传人:b****9 文档编号:25718976 上传时间:2023-06-11 格式:DOCX 页数:29 大小:419.09KB
下载 相关 举报
C++课程设计 职工工资管理系统报告内含程序完整清单.docx_第1页
第1页 / 共29页
C++课程设计 职工工资管理系统报告内含程序完整清单.docx_第2页
第2页 / 共29页
C++课程设计 职工工资管理系统报告内含程序完整清单.docx_第3页
第3页 / 共29页
C++课程设计 职工工资管理系统报告内含程序完整清单.docx_第4页
第4页 / 共29页
C++课程设计 职工工资管理系统报告内含程序完整清单.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

C++课程设计 职工工资管理系统报告内含程序完整清单.docx

《C++课程设计 职工工资管理系统报告内含程序完整清单.docx》由会员分享,可在线阅读,更多相关《C++课程设计 职工工资管理系统报告内含程序完整清单.docx(29页珍藏版)》请在冰豆网上搜索。

C++课程设计 职工工资管理系统报告内含程序完整清单.docx

C++课程设计职工工资管理系统报告内含程序完整清单

目录i

1概述1

1.1程序的基本功能1

1.2其它功能1

1.3扩展功能1

2课题的分析2

2.1会员登入系统模块即systemhead静态全局函数模块2

2.2查询功能模块即search函数模块2

2.3职务信息匹配及处理模块即systembody静态全局函数模块模块42

2.4循环控制模块即while

(1)模块2

3详细设计3

3.1类声明3

3.2系统简略流程图4

3.3会员登入系统模块即systemhead静态全局函数模块5

3.4查询功能模块即search函数模块6

3.5职务信息匹配及处理模块即systembody静态全局函数模块7

3.6循环控制模块即while

(1)模块7

4课程设计总结8

4.1完成情况8

4.2遇到的问题及解决8

参考文献11

附录12

1概述

本课程设计是《面向对象程序设计》课程的后继教学环节,学好C++语言就必须坚持用面向对象的思维方式分析问题、解决问题,最好的方法是仿照教材编写C++实际应用程序。

此次课程设计的题目及要求:

实现一个简单的工资管理系统。

1.1程序的基本功能

系统的主要功能是计算职工当月工资并存档。

公司内有5种不同类型的职工:

技术人员、销售人员、文秘、技术经理和销售经理,他们的工资计算方式各不相同。

1.2其它功能

将工资信息存入salary.txt文件中,工资信息包含雇员编号、姓名、职务、月份、月收入。

Info.txt文件中只存留一些信息及会员最后进入系统时输入的数据,最多含有编号、姓名、职务、月份的信息。

1.3扩展功能

采用了会员制度,并将登入信息及编号、密码存入number.txt文件中。

2课题的分析

通过对课题的深入分析,我将这个课题分为以下几个模块,深入详细得剖析它们。

2.1会员登入系统模块即systemhead静态全局函数模块

程序运行后,先进行会员选择判断。

为减少会员重新注册,通过输入两次编号及密码,增加繁琐度。

同时在一定的方面上,又方便忘记密码的会员。

通过密码匹配,雇员的工资信息这一隐私得到了很好的保障。

2.2查询功能模块即search函数模块

首先,从info.txt中提取编号,与salary.txt中的编号进行匹配,匹配成功,输出工资信息,直到文件!

indata.eof()==0。

.

2.3职务信息匹配及处理模块即systembody静态全局函数模块模块4

从info.txt中提取职务信息,用switch语句进行匹配,据匹配情况调用不同的函数进行输入、处理、显示并以增加方式记录到salary.txt中。

2.4循环控制模块即while

(1)模块

为了更加方便使用,尽量改善系统,实现search函数及systembody函数功能,在search函数及systembody函数模块的基础上加了一些必要的语句,并增加了外层循环控制。

3详细设计

作为一个面向对象程序设计,我们不得不先从类的声明开始设计,而后是一个整体的流程图做框架。

最后在从小的模块结构着手。

3.1

classTechManager:

publicTechnician,publicManager

{private:

floatgradeBonus;

intgrade;

public:

TechManager(floatx=1000);

voidsetgrade(floatx);

voidcountSalary();

};

图3.1类声明

类声明

3.2

结束

再次输入

图3.2职工工资管理系统简略流程图

是否会员

输入编号及密码

开始

注册

检验?

选择?

0

查询信息

1

输入姓名、职务、月份

显示

职务代码分析

工资记录在salary.txt

处理1

处理2

处理3

处理4

输入1

输入2

输入3

输入4

处理5

输入5

记录编码姓名职务月份至info.txt

从info.txt提取职务代码

优点:

一个入口,一个出口!

系统简略流程图

3.3会员登入系统模块即systemhead静态全局函数模块

清空info.txt并将编号存入到info.txt中

图3.3登入系统模块详细流程图

是否会员

输入编号及密码

打开name.txt并输出编号及密码

匹配?

关闭name.txt

以增加方式打开name.txt并输入编号及密码

关闭name.txt

.输入编号及密码

3.4查询功能模块即search函数模块

3.5职务信息匹配及处理模块即systembody静态全局函数模块

3.6循环控制模块即while

(1)模块

图3.6循环控制模块即while

(1)模块

1

0

2

输入选择操作

查询功能模块

Info及recordinfo调用

systembody调用

选择?

结束

4课程设计总结

4.1完成情况

本次面向对象课程设计的所有功能基本完成,并且扩展功能也成功的实现!

可执行文件能正常执行指令并运行!

4.2遇到的问题及解决

图4.2.1错误

[Error]C:

\Users\权\Desktop\main.o(.data$_vt$8Employee+0xc):

main.cpp:

undefinedreferenceto`Employee:

:

countSalary(void)'

错误:

没有定义Employee类中的countSalary函数!

改正:

将原先的“virtualvoidcountSalary();”改为”virtualvoidcountSalary(){}”

图4.2.2错误

错误分析:

(会员板块中)提示:

“数字1表示是!

其他键表示否!

”,但定义的选择变量为整型。

加上我当时输入字符p。

改正:

“其他键表示否!

”改为”数字0表示否”。

输入时按提示进行输入即可!

图4.2.3错误

调试分析:

错误发生在systemhead静态全局函数内的文件输入循环模块中!

改正:

将以nocreate方式即”ifstreamindata("d:

\\number.txt",ios:

:

nocreate);“该为默认打开方式即“ifstreamindata("d:

\\number.txt");”。

图4.2.4错误

调试分析:

错误发生在调用systembody静态全局函数前后的while循环模块中,很有可能是数据存取混乱造成的。

改正:

systemhead静态全局函数内“ofstreamoutdata("d:

\\info.txt",ios:

:

trunc);”改为先清

后在以默认方式输入!

且将存取整型编号的变量类型从字符型改为整型。

 

图4.2.5错误

错误:

后面莫名其妙的跟着一个提示语句指令。

分析调试:

当语句指令是基类info函数内的语句,很有可能是循环控制出现了一些问题。

改正:

见程序源代码!

参考文献

[1]下面给出几个参考文献的格式参考

[2]匿名,不知道,非常多.计算机实用教程.北京:

XX大学出版社,2004,123~234

[3][美]DonisSomething.VisualX#2008技术内幕.北京:

YYY大学出版社,2007,56~78

[4]JohnsSmith,JamesNothing.ProgramminginC++orAnythingandSomething.http:

//www.world.ic.ac.uk/lab/cplusplus/nothing/index.html2007

[5]Anonymous.SomethingtoSay.2007

[6]《面向对象程序设计》,郑莉,清华大学出版社,

[7]《面向对象程序设计C++语言》,朱战立等编西安电子科技大学出版社

[8]《面向对象程序设计----VisualC++》,刘斌等编,清华大学出版社

[9]《面向对象程序设计----C++语言描述》,RichardJohnsonbaugh(美)等著,蔡宇辉等译,机械工业出版社,2003

附录

本系统有三个源程序文件构成,分别为system.h,system.cpp及main.cpp。

同时含有三个系统文件,分别为info.txt,name.txt及salary.txt,且全部存放在D盘根目录下,请勿随意移动或修改系统文件。

当会员正式进入系统,info.txt是先清空后用来存储会员输入的信息,最多含有编号、姓名、职务及月份。

当仅会员注册时,会将编码及密码存储到name.txt中。

当仅会员登入的编号及密码进行匹配时,会打开输入文件name.txt,提取编号及密码,进行匹配。

当仅当输入工资数据时,会将工资、编号、姓名、职务、月份存储到salary.txt中。

当仅当查询工资信息时,会打开salary.txt,提取编号、姓名、职务、月份及工资。

该系统是一个只适合5种及5种职务的工资管理系统。

并将职务分为技术人员、销售人员、文秘、技术经理和销售经理,其代号分别为1,2,3,4,5。

雇员编号以整型变量存储,编号所取范围在-65536至65535之内(包括边界值),首位数字表示相应的职务代码。

该系统能力有限,请根据指示严格输入相应字符!

程序清单

Main函数

#include"system.cpp"

#include"cstring"

staticvoidsystemhead();

staticvoidsystembody();

staticvoidtechnician();

staticvoidsalesman();

staticvoidsecretary();

staticvoidtechmanager();

staticvoidsalesmanager();

usingnamespacestd;

voidmain()

{

systemhead();//调用systemhead静态全局函数

cout<<"\n\n1:

查询工资";

cout<<"\n\n2:

输入工资数据";

cout<<"\n\n0:

退出系统!

\n\n";

cout<<"请选择您需要的操作!

\n";

while

(1)

{

intxuanze;

cin>>xuanze;

if(xuanze==1)

{

employeea;

cout<

a.search();

cout<<"\n\n输入工资数据请按数字2,退出系统请按数字0!

\n\n";

}//查询工资信息

if(xuanze==2)

{

employeea;

a.info();

a.recordinfo();//输入处理工资数据并暂时记录

systembody();//调用systembody静态全局函数

cout<<"\n\n查询工资请按数字1,退出系统请按数字0!

\n\n";

}

if(xuanze==0)exit(0);

}

}

staticvoidsalesmanager()

{

SalesManagera5;

floatsum;

cout<<"请输入整个月的总营业额:

";

cin>>sum;

a5.setsalesnum(sum);

a5.countSalary();

a5.recordSalary();

}

staticvoidtechmanager()

{

TechManagera4;

intgra;

cout<<"请输入这个月的评级:

";//1,2,3三个等级

cin>>gra;

a4.setgrade(gra);

a4.countSalary();

a4.recordSalary();

}

staticvoidsecretary()

{

Secretarya3;

floatbon;

cout<<"请输入这个月的额外奖励:

";

cin>>bon;

a3.setbonus(bon);

a3.countSalary();

a3.recordSalary();

}

staticvoidsalesman()

{

Salesmana2;

floatsum;

cout<<"请输入整个月的营业额:

";

cin>>sum;

a2.setsalesnum(sum);

a2.countSalary();

a2.recordSalary();

}

staticvoidtechnician()

{

Techniciana1;

floathour;

cout<<"请输入整个月的工作时间:

";

cin>>hour;

a1.setHour(hour);

a1.countSalary();

a1.recordSalary();

}

staticvoidsystembody()

{

ifstreamindata("info.txt");

if(indata==NULL)exit(0);

intnum;

charna[25];

intsta;

indata>>num>>na>>sta;//职务代号分别为1,2,3,4,5

switch(sta)

{

case1:

technician();break;

case2:

salesman();break;

case3:

secretary();break;

case4:

techmanager();break;

case5:

salesmanager();break;

default:

cout<<"职务代号错误!

\n请重新输入!

";

}

}

staticvoidsystemhead()

{

charx,y='y';

intnum;

charsecret[6];

while(y)

{

cout<<"\n\n系统会员请输入'y',非系统会员请输入‘n’\n";

cin>>x;

if(x)

{

cout<<"请输入编号(首位为职务代号且为不超过5位数的整数):

\n";

cin>>num;

cout<<"请输入密码(6及6位字符以下):

\n";

cin>>secret;//输入编号及密码

ifstreamindata("number.txt");

if(indata==NULL)

{

cout<<"文件打开失败!

请联系管理员!

\n";exit(0);//文件没打开,退出程序

}

intnum1;charsecret1[6];

indata>>num1;

while(!

indata.eof())

{

indata>>secret1;

if((num==num1)&&(strcmp(secret,secret1)==0))

{

y=0;//改变判断变量的值,停止外层循环

break;//终止内层循环

}

indata>>num1;

}

indata.close();//检验登入信息

}

else

{

cout<<"请输入编号(首位为职务代号且为不超过5位数的整数):

\n";

cin>>num;

cout<<"请输入密码(6及6位字符以下):

\n";

cin>>secret;//注册输入编号及密码

ofstreamoutdata("number.txt",ios:

:

app);

outdata<

outdata.close();//将编号及密码保存到number.txt中

cout<

}

}

ofstreamoutdata("info.txt",ios:

:

trunc);

outdata.close();//清空文件内容

ofstreamoutdata1("info.txt");

outdata1<

outdata.close();//输入编号至info.txt

}

System.cpp

#include

#include

#include"system.h"

usingnamespacestd;

voidEmployee:

:

info()

{

charna[25];intsta,mon;

cout<<"请依次输入姓名、职务代号及月份(以空格符分隔):

";

cin>>na>>sta>>mon;

name=na;status=sta;month=mon;//存储姓名、职务、月份

}

voidEmployee:

:

search()

{

intnum;

ifstreamindata0("info.txt");

if(indata0==NULL)exit(0);

indata0>>num;

indata0.close();//从文件info.txt中提取编号

intnum1;charna1[25];intsta1;intmon1;floatsal;

intmon0;

ifstreamindata("salary.txt");

if(indata==NULL)exit(0);

while(!

indata.eof())

{

indata>>num1>>na1>>sta1>>mon1>>sal;

if(num==num1)

cout<

//依次输出该雇员的工资信息

}

if(indata.eof())

cout<<"\n\n以上是你的工资信息!

\n\n";

indata.close();

}

voidEmployee:

:

recordinfo()

{

ofstreamoutdata("info.txt",ios:

:

app);

outdata<

outdata.close();//添加姓名、职务、月份至存有编号的info.txt中

}

voidEmployee:

:

recordSalary()

{

ifstreamindata("info.txt");

indata>>number>>name>>status>>month;

indata.close();//依次输出该雇员的工资信息

intnum1;charna1[25];intsta1;intmon1;floatsal;

ifstreamindata1("salary.txt");

if(indata1==NULL)exit(0);

while(!

indata1.eof())

{

indata1>>num1>>na1>>sta1>>mon1>>sal;

if(month!

=mon1)

cout<

else

exit(0);

//依次输出该雇员的工资信息

}

cout<

//显示工资信息

ofstreamoutdata("salary.txt",ios:

:

app);

outdata<<'\n'<

outdata.close();

}

voidTechnician:

:

setHour(floatx)

{

workHour=x;

}

Technician:

:

Technician(floatx)

{

hourSalary=x;

}

voidTechnician:

:

countSalary()

{

salary=workHour*hourSalary;

}

voidSalesman:

:

setsalesnum(floatx)

{

salesnum=x;

}

Salesman:

:

Salesman(floatx)

{

getRate=x;

}

voidSalesman:

:

countSalary()

{

salary=salesnum*getRate;

}

voidSecretary:

:

setbonus(floatx)

{

bonus=x;

}

Secretary:

:

Secretary(floatx)

{

fixedSalary=x;

}

voidSecretary:

:

countSalary()

{

salary=fixedSalary+bonus;

}

Manager:

:

Manager(floatx)

{

fixedSalary=x;

}

voidTechManager:

:

setgrade(intx)

{

grade=x;

}

TechManager:

:

TechManager(floatx)

{

gradeBonus=x;

}

voidTechManager:

:

countSalary()

{

salary=fixedSalary+grade*gradeBonus;

}

SalesManager:

:

SalesManager(floatx)

{

getRate=x;

}

voidSalesManager:

:

countSalary()

{

salary=fixedSalary+salesnum*getRate;

}

voidTechnician:

:

setHour(floatx)

{

workHour=x;

}

Technician:

:

Technician(floatx)

{

hourSalary=x;

}

voidTechnician:

:

countSalary()

{

salary=workHour*hourSalary;

}

voidSalesman:

:

setsalesnum(float

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 成考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1