C++计算机实践报告.docx

上传人:b****6 文档编号:3866620 上传时间:2022-11-26 格式:DOCX 页数:17 大小:67.66KB
下载 相关 举报
C++计算机实践报告.docx_第1页
第1页 / 共17页
C++计算机实践报告.docx_第2页
第2页 / 共17页
C++计算机实践报告.docx_第3页
第3页 / 共17页
C++计算机实践报告.docx_第4页
第4页 / 共17页
C++计算机实践报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

C++计算机实践报告.docx

《C++计算机实践报告.docx》由会员分享,可在线阅读,更多相关《C++计算机实践报告.docx(17页珍藏版)》请在冰豆网上搜索。

C++计算机实践报告.docx

C++计算机实践报告

中南大学

本科生课程设计(实践)任务书、设计报告

(C++课程设计)

 

题目

职工工资管理系统

学生学号

学生姓名指导教师

学院

物理学院

专业班级

指导老师

 

计算机基础教学实验中心

2010年07月08日

职工工资管理系统

摘要:

经过近两周24学时的C++计算机实践,我基本上完成了对所要求的熟悉使用MFC类库编程和使用C++编写一个关于企业职工工资管理系统的程序。

对于使用C++面向对象的编程思想也有了更深的体会。

关键词:

职工工资、系统、指针、链表、增加删除信息、结构体、类成员函数使用、全局变量

1、职工工资管理系统的开发设计思想

1、职工工资管理系统可以通过输入输出某一职工的一些信息,如月份、编号、基本工资、补贴等进行对职工信息的处理。

2、为了更方便地表示一个职工的基本信息,可以先定义一个结构体(Emp_info),在这个结构体中包含了一个职工的所有基本信息。

3、定义一个类(Employee),在类中定义必要的成员函数,用这些函数可以对结构体中的职工信息进行需要的处理,如添加职工信息函数(AddItem)、删除职工信息函数(RemoveItem)、查找职工信息函数(Search)等。

然后通过调用成员函数来实现系统的功能。

4、用类Employee定义一个全局变量employee,设计主函数及其所调用的函数,通过employee来使用类中的成员函数达到处理数据的目的。

2、职工工资管理系统功能及系统设计介绍

1、系统的功能

职工工资管理系统能根据已输入的数据信息进行必要的数据处理,然后可以根据提示添加或删除职工信息,还可以对有误信息进行修改。

出于发工资时的需要可以对某些或全部的职工信息进行输出。

系统的总的功能如图所示:

为完成这些功能首先需要一个可以存储数据的数据单元,即一个结构体Emp_info,在这个结构体中定义必要的变量:

pay[5]、gpay、tax、ded、apay。

其所对应的具体变量如下表所示。

pay[0]

pay[1]

pay[2]

pay[3]

pay[4]

gpay

tax

ded

apay

基本工资

补贴

房租

会费

储蓄

应发数

个人所得税

应扣数

实发数

定义了结构体后需要定义一个类Employee,在类中定义了两个私有成员函数Find和Print用来查找和输出职工工资信息,六个公有成员函数分别为ListCount()、AddItem()、RemoveItem()、AmendItem()、List()、Search()、PayInfo()。

然后根据不同的功能分别编写成员函数。

2、系统主要模块设计

⑴类成员函数的设计

①、AddItem()成员函数的设计

添加信息是所有功能实现的一个必要条件,因此十分重要。

在AddItem()之前还有一个统计此前链表数目的函数ListCount(),然后返回一个链表数值。

在AddItem()成员函数实现之初需要先判断当前链表是否为空,这可以通过之前的ListCount()函数的返回值是否为零来判断。

若没有直接添加信息,若有,还需考虑输入的是否为之前存储过的,若是存储过的需返回一个通知的消息,否则可以用结构体Emp_info开辟(newEmp_info)一个新的数据域存储所输入的数据,并将其地址赋给上一个结点的next,这样就完成了添加信息的目的。

②RemoveItem()成员函数的设计

删除成员函数是在之前输入的信息有误时对原数据作一定的纠正,这增加了系统的功能和可用性,给使用者也带来一定便利之处。

此处删除是按照使用者数的学号进行查找删除的,具体实现步骤如图。

通过图示方法能成功删除一些无使用价值的信息。

③、AmendItem()函数的设计

修改函数的作用与删除函数相似,其设计较前两个成员函数容易。

先调用一个查找函数,查找到这个链表的位置,然后调用输入输出函数重新对链表中的变量赋值。

④Search()函数的设计

处于显示页面的优化的需要,在查找之前先输出〝Search......〞。

定义一个p指针存放用Find()函数找到的满足要求的数据域的地址,然后调用输出函数将所得数据域内变量值一一对应输出即可。

⑤、Find()函数的设计

前面的几个函数几乎无不调用了Find()函数,因此Find()函数也是个功能实现的重要的一个部分。

查找时首先需要判断是否当前列表为空,如果为空查找将无意义,不为空时才对链表中的数据进行查找。

当链表不为空时,先用Emp_info结构体定义一个指向head的指针,然后使用while循环(由于链表数未知,因此此处选用while语句)来进行查找符合条件的数据域。

当p指向数据域中num值与所给定的num值一致,则停止,并返回这个指针,否则返回一个无法找到的消息。

⑥Print()、List()、PayInfo()函数的设计

if(t>=800)

{

if(t<=2000)k+=(t-800)*0.05;

else

{

if(t<=5000)k+=60+(t-2000)*0.1;

elsek+=360+(t-5000)*0.2;

}

}

这三个函数的程序设计比较简单,只是进行简单的函数调用即可,PayInfo()函数(计算职工工资详细情况)中个人所得税的算法如右图所示。

值得注意的是,在Print()函数和List()函数中显示在主面板上的变量信息的顺序必须与程序源代码中一致,否则将会使输入输出甚至其他运算出现错误。

⑵、定义一个全局变量,用Employee类来定义,后面的主函数及主调函数所做的操作都可以基于这个全局变量。

⑶、主函数及主调函数的设计

根据系统的功能可以先将系统的主要功能列出:

1、输入本月工资信息;2、查找指定职工编号的基本信息;3、修改制定职工编号的基本信息;4、输出当月全体职工的工资信息;5、删除指定职工的工资信息;6、退出程序。

因此可以设计函数:

Menu()--用于显示主菜单并输入一个选择的值;

Exit()--用于退出程序;

Input()--用于输入员工工资数值;

AddNew()--用于输入或添加新的数据;

DoFind()--查找指定编号(num)的职工信息;

DoDelete()--用于删除指定编号(num)的职工信息;

DoAmendItem()--用于修改指定编号(num)职工工资信息;

List()--用于列出当月全部职工工资信息;

Main()--调用各个函数实现系统的总体功能。

在各个函数的设计过程中,用于主要是引用全局变量中的成员函数,因此设计难度不是太高。

在全部了解了系统的功能及设计流程之后,这些函数只需要一些简单的调用和循环就可实现其功能。

其中,在main()函数中使用了swith语句来实现选择功能。

⑷调试运行及系统的优化

由于在编写程序过程中思路清晰,前后主要函数模块的编写都是独立编写的,再整体整合到一个程序中,因此调试时只是遇到了几个拼写错误,主要的语法及编译错误都没出现。

在程序实现之后,出于对系统输入输出的美观要求,我对部分的函数输入输出进行了改变,例如将输出的界面的背景与字体颜色设置为更舒适的颜色、设置输出数据的域宽和有效位数、修饰输出界面的边框等。

3、总结

经过近两周24个学时的C++计算机编程实践,我基本上完成了对所要求的熟悉使用MFC类库编程和使用C++编写一个企业职工工资管理系统的程序。

对于使用C++我用了更深的体会。

在本学期的开始学C++面向过程的程序编写时,我对那种面向过程,调用函数进行计算解决问题的方式觉得理所当然,觉得这种方式对于解决一切问题都有效。

到了学使用面向对象编程语言编写程序时觉得很不适应。

在这近两周的编程实践中,我体会到了这种面向对象编程的益处。

面向对象的编程方式可以通过定义一个类,在类中定义一些能完成特定功能的成员函数来进行数据的处理,从而完成特定的功能。

就好像一个公司中有新的任务,公司可以通过不同部门的独立完成特定的任务来实现某一功能。

这可以大大简化任务执行的过程,简化编程,降低变成难度。

这次实践也使我懂得自己亲自动手做事能带来许多收获,不放过任一可能出错的环节,仔细用心做事。

附源代码:

#include

usingnamespacestd;

structEmp_info

{

intmonth,num;

floatpay[5],gpay,tax,ded,apay;

//gpay-应发数;tax-个人所得税;ded-应扣数(房租+个人所得税+会费);apay-实发数

Emp_info*next;

};

classEmployee

{

private:

Emp_info*head;

voidPrint(Emp_info*);

Emp_info*Find(int);

public:

Employee(){head=NULL;}

intListCount();

voidAddItem(intmonth,intnum,floatpay[5]);//添加一个对象到表尾

voidRemoveItem(int);//删除指定对象信息

voidAmendItem(int);//修改指定对象的信息

voidList();//列出所有职工的信息

voidSearch(int);//查找指定编号职工的信息

voidPayInfo();//职工的应发数、个人所得税、应扣数、实发数的计算

};

intEmployee:

:

ListCount()//统计链表数,并返回一个整数

{

if(!

head)return0;

Emp_info*p=head;

intn=0;

while(p){n++;p=p->next;}

returnn;

}

voidEmployee:

:

AddItem(intmonth,intnum,floatpay[5])//增加一个职工信息

{

if(!

head)

{

head=newEmp_info;

for(inti=0;i<5;i++)

head->pay[i]=pay[i];

head->month=month;

head->num=num;

head->next=NULL;

return;

}

Emp_info*t=head;

while(t&&t->num!

=num)t=t->next;

if(t)

{

cout<<"操作失败;职工编号为"<

"<

return;

}

Emp_info*p=head;

while(p->next)p=p->next;

Emp_info*p1=newEmp_info;

p1->num=num;

p1->month=month;

for(inti=0;i<5;i++)

p1->pay[i]=pay[i];

p1->next=NULL;

p->next=p1;

return;

}

voidEmployee:

:

RemoveItem(intnum)//删除指定职工编号的记录

{

Emp_info*t=Find(num);

if(!

t)return;

Emp_info*p=head;

if(head==t)//如果第一个记录即是要删除的记录

{

head=head->next;

deletep;

cout<<"成功删除职工编号为"<

"<

return;

}

while(p->next!

=t)p=p->next;

Emp_info*p1=p->next;

p->next=p1->next;

deletep1;

cout<<"成功删除职工编号为"<

"<

return;

}

voidEmployee:

:

AmendItem(intnum)//修改指定职工编号的记录

{

floata,b,c,d,e,f,g;

Emp_info*p=Find(num);

if(!

p)return;

cout<<"请重新输入相应信息"<

cout<<"月份编号基本工资补贴房租会费储蓄"<

cin>>a>>b>>c>>d>>e>>f>>g;

p->month=a;

p->num=b;

p->pay[0]=c;

p->pay[1]=d;

p->pay[2]=e;

p->pay[3]=f;

p->pay[4]=g;

return;

}

voidEmployee:

:

Print(Emp_info*p)//输出指定职工编号的记录

{

cout.setf(ios:

:

left);//设置左对齐

cout.width(6);//设置域宽为6

cout.precision(6);//设置显示有6位有效数字

cout<month<<"";

cout<num<<"";

cout<pay[0]<<""<pay[1]<<""<pay[2]<<""<pay[3]<<""<pay[4]<<""

<gpay<<""<tax<<""<ded<<""<apay<

return;

}

voidEmployee:

:

List()//列出所有记录

{

if(ListCount==0)

{

cout<<"当前列表为空,请先输入数据!

"<

return;

}

Emp_info*p=head;

cout<<"共有记录"<

cout<<"月份编号基本工资补贴房租会费储蓄应发数缴税应扣数实发数"<

while(p){Print(p);p=p->next;}

cout<

return;

}

voidEmployee:

:

Search(intnum)//查找指定职工编号记录并输出

{

cout<<"Search......"<

Emp_info*p=Find(num);

if(p)

{

cout<<"月份编号基本工资补贴房租会费储蓄应发数缴税应扣数实发数"<

Print(p);

}

cout<

}

Emp_info*Employee:

:

Find(intnum)//查找指定职工编号的记录

{

if(ListCount()==0)

{

cout<<"当前列表为空,请先输入数据!

"<

returnNULL;

}

Emp_info*p=head;

while(p)

{

if(p->num==num)break;

p=p->next;

}

if(!

p)

{

cout<<"错误:

找不到该记录!

\n";

returnNULL;

}

returnp;

}

voidEmployee:

:

PayInfo()//职工详细信息的计算

{

if(ListCount()==0)

{

cout<<"当前列表为空,请先输入数据!

"<

return;

}

floatm,k=0,x,y,t,n=0;

Emp_info*p=head;

while(p)

{

m=p->pay[0]+p->pay[1];

t=p->pay[0];

if(t>=800)

{

if(t<=2000)k+=(t-800)*0.05;

else

{

if(t<=5000)k+=60+(t-2000)*0.1;

elsek+=360+(t-5000)*0.2;

}

}//计算个人所得税

x=k+p->pay[2]+p->pay[3];

y=m-x;

p->gpay=m;

p->tax=k;

p->ded=x;

p->apay=y;

p=p->next;

n++;

}

return;

}

Employeeemployee;//定义一个全局变量

intMenu()//主菜单

{

cout<<"\n***************菜单***************"<

intn=1,select=-1;

cout<<""<

cout<<""<

cout<<""<

cout<<""<

cout<<""<

cout<<"0.退出"<

cout<<">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"<

cout<<"[请选择(输入相应数字)]:

";

cin>>select;

returnselect;

}

charExit()//退出

{

chars;

cout<<"确定要退出程序吗?

[Y/N]:

";

cin>>s;

returns;

}

voidInput(int*month,int*num,floatpay[5])//输入信息

{

cout<<"请输入\n月份职工编号基本工资补贴房租会费储蓄"<

cin>>*month;

if(*month==-1)return;

cin>>*num>>pay[0]>>pay[1]>>pay[2]>>pay[3]>>pay[4];

return;

}

voidAddNew()//增加一个新的记录

{

intnum=0,month=0;

floatpay[5]={0,0,0,0,0};

cout<

Input(&month,&num,pay);

while(month!

=-1)

{

employee.AddItem(month,num,pay);

employee.PayInfo();

Input(&month,&num,pay);

}

return;

}

voidDoFind()//查找记录

{

intnum;

cout<

do{

cout<<"请输入要查找的职工的编号";

cin>>num;

if(num==-1)continue;

employee.Search(num);

}while(num!

=-1);

return;

}

voidDoDelete()//删除记录

{

cout<

intnum;

do

{

cout<<"请输入要删除的职工的编号:

";

cin>>num;

if(num==-1)continue;

employee.RemoveItem(num);

}while(num!

=-1);

return;

}

voidAmendItem()//修改记录

{

cout<

intnum;

do

{

cout<<"请输入要修改的职工的编号:

";

cin>>num;

if(num==-1)continue;

employee.AmendItem(num);

employee.PayInfo();

}while(num!

=-1);

return;

}

voidList()//列出所有记录

{

employee.List();

}

intmain()//主函数

{

system("color0G");//设置显示字体颜色

cout<<"Welcome!

\n职工工资管理系统\n版本:

Wjh7.0(版权所有,翻版必究!

)\n";

intselect;

chars;

while

(1)

{

select=Menu();

switch(select)

{

case0:

s=Exit();

if(s=='y'||s=='Y')return0;

break;

case1:

AddNew();

break;

case2:

DoFind();

break;

case3:

AmendItem();

break;

case4:

List();

break;

case5:

DoDelete();

break;

default:

cout<<"无效输入!

"<

}

}

return0;

}

 

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

当前位置:首页 > 高中教育 > 语文

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

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