C++计算机实践报告Word格式.docx
- 文档编号:16772857
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:17
- 大小:67.66KB
C++计算机实践报告Word格式.docx
《C++计算机实践报告Word格式.docx》由会员分享,可在线阅读,更多相关《C++计算机实践报告Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
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<
iostream>
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])//增加一个职工信息
head)
{
head=newEmp_info;
for(inti=0;
i<
5;
i++)
head->
pay[i]=pay[i];
head->
month=month;
num=num;
next=NULL;
return;
}
Emp_info*t=head;
while(t&
&
t->
num!
=num)t=t->
if(t)
cout<
<
"
操作失败;
职工编号为"
num<
的记录已经存在!
endl;
while(p->
next)p=p->
Emp_info*p1=newEmp_info;
p1->
for(inti=0;
p1->
p->
next=p1;
return;
RemoveItem(intnum)//删除指定职工编号的记录
Emp_info*t=Find(num);
t)return;
if(head==t)//如果第一个记录即是要删除的记录
head=head->
deletep;
成功删除职工编号为"
的记录!
endl<
next!
=t)p=p->
Emp_info*p1=p->
next=p1->
deletep1;
cout<
AmendItem(intnum)//修改指定职工编号的记录
floata,b,c,d,e,f,g;
Emp_info*p=Find(num);
p)return;
请重新输入相应信息"
月份编号基本工资补贴房租会费储蓄"
cin>
>
a>
b>
c>
d>
e>
f>
g;
month=a;
num=b;
pay[0]=c;
pay[1]=d;
pay[2]=e;
pay[3]=f;
pay[4]=g;
Print(Emp_info*p)//输出指定职工编号的记录
cout.setf(ios:
left);
//设置左对齐
cout.width(6);
//设置域宽为6
cout.precision(6);
//设置显示有6位有效数字
p->
month<
"
;
pay[0]<
pay[1]<
pay[2]<
pay[3]<
pay[4]<
<
gpay<
tax<
ded<
apay<
List()//列出所有记录
if(ListCount==0)
当前列表为空,请先输入数据!
共有记录"
ListCount()<
个"
月份编号基本工资补贴房租会费储蓄应发数缴税应扣数实发数"
while(p){Print(p);
Search(intnum)//查找指定职工编号记录并输出
Search......"
if(p)
Print(p);
Emp_info*Employee:
Find(intnum)//查找指定职工编号的记录
if(ListCount()==0)
returnNULL;
while(p)
if(p->
num==num)break;
p=p->
p)
错误:
找不到该记录!
\n"
returnp;
PayInfo()//职工详细信息的计算
floatm,k=0,x,y,t,n=0;
m=p->
pay[0]+p->
pay[1];
t=p->
pay[0];
if(t>
}//计算个人所得税
x=k+p->
pay[2]+p->
pay[3];
y=m-x;
p->
gpay=m;
tax=k;
ded=x;
apay=y;
n++;
Employeeemployee;
//定义一个全局变量
intMenu()//主菜单
\n***************菜单***************"
intn=1,select=-1;
n++<
.输入或添加本月职工工资信息"
.查找指定职工编号的基本信息"
.修改制定职工编号的基本信息"
.输出当月全体职工的工资信息"
.删除指定职工的工资信息"
0.退出"
>
[请选择(输入相应数字)]:
select;
returnselect;
charExit()//退出
chars;
确定要退出程序吗?
[Y/N]:
s;
returns;
voidInput(int*month,int*num,floatpay[5])//输入信息
请输入\n月份职工编号基本工资补贴房租会费储蓄"
*month;
if(*month==-1)return;
*num>
pay[0]>
pay[1]>
pay[2]>
pay[3]>
pay[4];
voidAddNew()//增加一个新的记录
intnum=0,month=0;
floatpay[5]={0,0,0,0,0};
当输入的月份为-1是表示结束输入"
Input(&
month,&
num,pay);
while(month!
=-1)
employee.AddItem(month,num,pay);
employee.PayInfo();
Input(&
voidDoFind()//查找记录
intnum;
当输入的职工编号为-1是表示结束输入"
do{
请输入要查找的职工的编号"
cin>
num;
if(num==-1)continue;
employee.Search(num);
}while(num!
=-1);
voidDoDelete()//删除记录
do
请输入要删除的职工的编号:
employee.RemoveItem(num);
voidAmendItem()//修改记录
请输入要修改的职工的编号:
employee.AmendItem(num);
voidList()//列出所有记录
employee.List();
intmain()//主函数
system("
color0G"
);
//设置显示字体颜色
Welcome!
\n职工工资管理系统\n版本:
Wjh7.0(版权所有,翻版必究!
!
)\n"
intselect;
while
(1)
select=Menu();
switch(select)
case0:
s=Exit();
if(s=='
y'
||s=='
Y'
)return0;
break;
case1:
AddNew();
case2:
DoFind();
case3:
AmendItem();
case4:
List();
case5:
DoDelete();
default:
cout<
无效输入!
return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 计算机 实践 报告