中南大学C++课程设计

更新时间:2024-01-14 02:55:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

中 南 大 学

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

(计算机程序设计基础C++)

中南大学职工工资管理系

题 目 统

学生姓名及学号 指导教师 学 院 专业班级

### 樊广军

机电工程学院 ###

计算机基础教学实验中心

2015、7、6——2015、7、17

目录

1. 一年心得------------------------1 2. 系统需求分析-----------------------------2 3. 总体设计---------------------------------2 4. 详细设计--------------------------------3 5. 系统调试--------------------------------3 6. 结果分析-------------------------------5 7. 程序源代码-----------------------------5 8. 总结-----------------------------------20 9. 参考文献------------------------------20 10. MFC的实践与成果-------------------------20

C++程序设计实验报告

——中南大学职工工资管理系统

1. 一年心德

计算机程序设计基础C++这一课程在时间悄悄地流逝中已接近尾声了,感觉收获颇多。以前很少用计算机办公,只是将它当作一种娱乐工具。可如今意识到:计算机最大的用处就是解放人类。让我们的生活更加高效。当然,有这些收获,最重要的是有一个引路人,那就是老师您。在这里,对您一学年的教导,说声:谢谢。

二十七 页 第 一 页 共

2. 系统需求分析

2.1系统设计的目的与意义

现在的学校学生数量较多,各自所选课程,所修课程学分及成

绩不同。成绩管理系统应运而生。

2.2系统功能需求:

? 职工基本信息:为方便管理职工工资,编写一个职工工资管理系统软件。系

统记录必须包括职工姓名、职工编号;

? 职工工资的基本信息:基本工资、职务工资、岗位津贴、五险一金等; ? 数据的录入:如录入职工的基本信息,如姓名、ID; ? 数据的修改:如修改指定ID、或者指定姓名的职工信息; ? 数据的插入:插入某个职工信息;

? 数据的查询:如按ID查询、按姓名查询等;

? 数据的删除:如删除指定ID、或者指定姓名的职工信息

? 统计:(A)计算各项工资平均工资及总工资, (B)?统计符合指定条件(如职工

工资前三项之和在3000元以上、3000~2500元、2500~1000元)以内的工资职工人数及占总职工人数的百分比。(C)以表格形式打印全部职工工资信息表及平均工资(包括各项总的平均工资)。 ? 其他:可以根据自己的思路设计其他功能。

3. 总体设计

3.1系统功能分析

系统通过调用函数来实现职工信息录入、职工信息修改、职工信息删除、职工信息查询以及数据保存文件等功能。luru{}函数用于录入职工个人信息(如:姓名、ID、津贴、医疗保险、基本工资、岗位津贴、公积金);

search1{}函数用于按姓名查找职工;search2{}函数用于按照ID

查找职工信息;Average{}函数用于计算职工平均工资;shanchu{}函数用于删除个人数据;xiugai{}函数用于修改职工个人信息,工

二十七 页 第 二 页 共

资信息。主函数main()用于调用这些函数。

3.2系统功能模板划分与设计

本系统定义了Work类,还定义了诸多函数共同实现系统所需功能。

3.3系统功能模块图

姓名、ID 个人信息 添加信息 总工资及平均职工信息管理系统 值 按姓名或ID查询 综合显示 工资、其他 医保等社会福利 查询信息 删除信息 删除本职工的各项信息

4. 详细分析

4.1 工资的设计: 定义了一个浮点型变量用来存放工资,定义了设

置总收入和显示平均收入的函数。

4.2 职工信息类的设计: 该类定义了一个Work类类型的变量,

定义了一个字符数组用来存放职工姓名、ID、总收入和平均收入,定义了设置和显示私有成员的函数。

4.3 查找的设计: 定义了两个函数分别是Search1和Search2,

分别是指利用ID查找职工信息和利用姓名查找职工信息。

5. 系统调试

5.1运行界面

二十七 页 第 三 页 共

5.2职工信息录入

5.3显示职工信息

二十七 页 第 四 页 共

5.4职工信息查询

5.5职工信息删除

5.6计算显示总工资和平均工资

程序总共设计了四个类,满足了课题对类的要求,在设计的过程中,建立了

6. 结果分析

较为清晰的类层次,也利用了面向对象的方法以及C++的编程思想来完成系统的设计,做到了用文件存储学生成绩信息、从文件中读取职工工资信息信息、修改信息、查询信息、删除信息显示文件中存储的信息等要求。而且界面简洁,容易操作。

7. 程序源代码

#include #include #include #include

二十七 页 第 五 页 共

using namespace std; double sum,avarage; int amount=0;

int ab=0,cd=0,ef=0; ofstream *file[50]; struct xinxi {

double jiben;//基本工资 double zhiwu;//职务工资 double gangwei;//岗位津贴 double yiliao;//医疗保险 double gongji;//公积金 double sum;//总工资 double sum1;

double avarage;//平均工资 struct xinxi *next; };

class worker//职工信息类 {

public://公有成员函数 string name; string ID; double sum; double avarage; xinxi sc1;

class worker *next; };

void luru(worker *head); void search1(worker *head); void search2(worker *head); void xianshi(worker *head); void xiugai(worker *head); void chazhao(worker *head); void shanchu(worker *head); void tianjia(worker *head); void tongji(worker *head); void display();

void read(worker *head); void dakai(worker *head);

int main() {

二十七 页 第 六 页 共

system(\int x;

//bool flag2=0; /*do {

do {

cin>>x;

if(x>=0&&x<=10) flag2=1; else {

cout<<\指令错误!!!~~~~~~~~~~\ cout<<\请选择相应数字进行操作\ } }

while(flag2==0)*/ worker *head=new worker; head->next=NULL; while(1) { display(); cin>>x;

if(x==1) {

cout<<\现在进行职工数据的录入*****************\\n\ luru(head);

cout<<\输入的职工信息为:\\n\ xianshi(head);

display(); //break; }

else if(x==2) {

cout<<\现在进行职工数据的修改******************\\n\ xiugai(head); display();

//break; //按姓名修改 }

else if(x==3) {

cout<<\现在进行所有职工信息的显示*****************\\n\ xianshi(head); display();

二十七 页 第 七 页 共

//break; //显示数据 }

else if(x==4) {

char z;

cout<<\现在进行所有职工信息查找**************\\n\ cout<<\请选择查询方式\\n\

cout<<\姓名查询方式 (2).ID查询方式\\n\ cin>>z;

while(z!='1'&&z!='2') {

cout<<\指令错误********************\\n\ cout<<\姓名查询方式 (2).ID查询方式\\n\ cin>>z; }

switch(z) {

case '1': search1(head);break;//按姓名查询 case '2': search2(head);break;//按学号查询 }

display(); // break; }

else if(x==5) {

cout<<\现在进行指定的职工信息的删除*****************\\n\ shanchu(head); xianshi(head); display();

//break; //删除 }

else if(x==6) {

cout<<\现在进行指定的职工信息的添加******************\\n\ tianjia(head); xianshi(head); display(); break;//添加 }

else if(x==7) {

cout<<\现在进行指定的职工信息的统计

二十七 页 第 八 页 共

***************\\n\ tongji(head); display(); // break; }

else if(x==8) {

cout<<\现在进行指定的职工信息的保存************\\n\ read(head); display(); // break; }

else if(x==9) {

cout<<\现在进行指定的职工信息的打开****************\\n\ dakai(head); display(); // break; } else {

cout<<\╔═══════════════════════════╗\\n\

cout<<\║ 您已退出职工管理系统, 谢谢您的使用! ║\\n\

cout<<\╚═══════════════════════════╝\\n\

cout<

void display() {

cout<<\╔═══════════════════════════╗\

cout<<\║ ☆ 中南大学职工工资管理系统 ☆ ║\

cout<<\║═══════════════════════════║

二十七 页 第 九 页 共

\

cout<<\║ ║\

cout<<\║ (1)职工数据的录入 ║\

cout<<\║ (2)职工数据的修改 ║\

cout<<\║ (3)显示职工信息 ║\

cout<<\\

cout<<\\

cout<<\\

cout<<\\

cout<<\\

cout<<\\

cout<<\ cout<<\\

cout<<\\

cout<<\\

cout<<\\

cout<<\\

cout<<\\

cout<<\\

cout<<\\

cout<<\\

cout<<\\

cout<<\

║ (4)查询职工信息 ║║ --(1)按姓名查询 ║║ --(2)按ID查询 ║║ --统计总工资和平均公资 ║║ (5)职工信息的删除 ║║ (6)职工信息的添加 ║ (7)职工信息的统计 ║\║ (8)保存职工信息 ║║ (9)打开职工信息 ║║ 退出程序 ║║ ║║═══════════════════════════║║注:请输入相应括号里的阿拉伯数字来执行相关操作! ║║ 要保存数据请先建立好指定文件: ║║ (D:\\\\职工管理系统\\\\职工信息.txt) ║ ╟------------------------------------------------------╢║编写人员: 机械设计及其自动化1313班 姚文彬 0806120215 ║║编写人员: 机械设计及其自动化1313班 黄本阳 0814120111║

第 十 页 共

二十七 页 ║

\

cout<<\║ ║\

cout<<\ ║===================谢谢您的使用=======================║\

cout<<\╚═══════════════════════════╝\

cout<<\→请选择相应的数字进行操作: \}

void xianshi(worker *head) {

worker *work=head->next;

cout<<\基本工资|职务工资|岗位津贴|医疗保险|公积金|总工资|平均工资|\

while(work!=NULL) {

cout<<\cout<<\

cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\work=work->next; }

system(\}

void read(worker *head) {

char a;

worker *work=head->next;

cout<<\现在保存输入职工数据,是否继续操作?(y/n)\ cin>>a;

ofstream outfile(\职工管理系统\\\\职工信息.txt\ if(! outfile) {

cout<<\打开文件错误!!!!!!!\\n\

cout<<\要保存数据请先建立好指定文件:D:\\\\职工管理系统\\\\职工信息.txt!!!\\n\ exit(0);

第 十一 页 共 二十七 页

}

while(a!='n') {

while(work!=NULL) {

outfile<<\第\个职工的数据:***************\\n\ outfile<<\基本工资|职务工资|岗位津贴|医疗保险|公积金|总工资|平均工资|\

outfile<<\职工信息: \\n\<<\| \| \| \\| \| \<<\<<\<

work=work->next; }

break; }

cout<<\成功将学生数据保存到<职工信息.txt>中! \ outfile.close(); }

void dakai(worker *head) {

worker *work=head->next;

ofstream ofile(\职工管理系统\\\\职工信息.txt\ work=work->next; }

void luru(worker *head)//添加职工信息 {

char c; int j=0;

worker *p=head;

file[j]=new ofstream(\职工管理系统\\\\职工信息.txt\ do {

worker *work=new worker;

cout<<\请输入姓名:\ cin>>(*work).name;

cout<<\请输入ID:\ cin>>(*work).ID;

cout<<\请输入基本工资:\ cin>>(*work).sc1.jiben;

cout<<\请输入职务工资:\

第 十二 页 共 二十七 页

cin>>(*work).sc1.zhiwu;

cout<<\请输入岗位津贴:\ cin>>(*work).sc1.gangwei;

cout<<\请输入医疗保险:\ cin>>(*work).sc1.yiliao;

cout<<\请输入公积金:\ cin>>(*work).sc1.gongji;

(*work).sc1.sum=(*work).sc1.gangwei+(*work).sc1.gongji+(*work).sc1.yiliao+(*work).sc1.zhiwu+(*work).sc1.jiben;

(*work).sc1.avarage=((*work).sc1.gangwei+(*work).sc1.gongji+(*work).sc1.yiliao+(*work).sc1.zhiwu+(*work).sc1.jiben)/5;

(*work).sc1.sum1=(*work).sc1.gangwei+(*work).sc1.zhiwu+(*work).sc1.jiben; if((*work).sc1.sum1>=2000) ab++;

if((*work).sc1.sum1>=1500&&(*work).sc1.sum1<2000) cd++; if((*work).sc1.sum1>=1000&&(*work).sc1.sum1<1500) ef++; work->next=p->next; p->next=work; amount++;

cout<<\数据录入成功,想继续录入吗(y/n)\ p=p->next;

while(c!='y'&&c!='n') {

cout<<\指令错误<请输入y/n!>!!!!!!!!!!\ cout<<\数据录入成功,想继续录入吗(y/n)\ cin>>c; }

}while(c=='y'); j++;

cout<<\输入了 \个职工的信息.\}

void search1(worker *head) {

char c;

string name; do{

worker*work=head->next; bool flag=0;

cout<<\请输入要查找的职工的姓名:\ cin>>name; do{

第 十三 页 共 二十七 页

if(work!=NULL&&name==(*work).name) {

flag=1;

cout<<\基本工资|职务工资|岗位津贴|医疗保险|公积金|总工资|平均工资|\

cout<<\ cout<<\

cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ }

work=work->next; }while(work!=NULL); if(flag==0)

cout<<\对不起!您要查询的职工不存在!!!!!!!!!!!\ cout<<\您想继续查询吗?(y/n)\while(c!='y'&&c!='n') {

cout<<\指令错误<请输入y/n!>!!!!!!!!!!!\ cout<<\您想继续查询吗?(y/n)\ }

}while(c=='y'); }

void search2(worker *head) {

char c; string ID; do{

worker *work=head->next; int flag=0;

cout<<\请输入要查找职工的ID\cin>>ID; do{

if(work!=NULL&&ID==(*work).ID) {

flag=1;

cout<<\你要查询的学生是\

第 十四 页 共 二十七 页

cout<<\基本工资|职务工资|岗位津贴|医疗保险|公积金|总工资|平均工资|\

cout<<\ cout<<\

cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ }

work=work->next; }while(work!=NULL); if(flag==0)

cout<<\对不起!您要查询的职工不存在!!!!!!!!!!!!!!!\ cout<<\您想继续查询吗?(y/n)\ cin>>c;

while(c!='y'&&c!='n') {

cout<<\指令错误<请输入y/n!>!!!!!!!!!!\ cout<<\您想继续查询吗?(y/n)\ cin>>c; }

}while(c=='y'); }

void xiugai(worker *head) {

string name; char c; do {

bool flag2=0;

worker *work=head->next; xinxi sc1;

cout<<\请输入你要修改的职工的姓名:\cin>>name; do{

if(name==(*work).name) {

flag2=1;

cout<<\请输入新的基本工资:\

第 十五 页 共 二十七 页

cin>>sc1.jiben;

cout<<\请输入新的职务工资:\ cin>>sc1.zhiwu;

cout<<\请输入新的岗位津贴:\ cin>>sc1.gangwei;

cout<<\请输入新的医疗保险:\ cin>>sc1.yiliao;

cout<<\请输入新的公积金:\ cin>>sc1.gongji;

(*work).sc1.jiben=sc1.jiben; (*work).sc1.zhiwu=sc1.zhiwu; (*work).sc1.gangwei=sc1.gangwei;

(*work).sc1.sum=(*work).sc1.gangwei+(*work).sc1.gongji+(*work).sc1.jiben+(*work).sc1.yiliao+(*work).sc1.zhiwu;

(*work).sc1.avarage=((*work).sc1.gangwei+(*work).sc1.gongji+(*work).sc1.jiben+(*work).sc1.yiliao+(*work).sc1.zhiwu)/5;

cout<<\基本工资|职务工资|岗位津贴|医疗保险|公积金|总工资|平均工资|\

cout<<\ cout<<\

cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\

cout<<\数据修改成功......\ break; }

work=work->next; }while(work!=NULL); if(flag2==0) {

cout<<\对不起!您要修改的职工不存在!请检查重新输入!!!!!\}

cout<<\想继续修改吗?(y/n)\ cin>>c;

if(c!='y'&&c!='n') {

第 十六 页 共 二十七 页

cout<<\指令错误!请重新输入!!!!!!!!!!!!!\ cin>>c; }

}while(c=='y'); }

void shanchu(worker *head) {

char c; string no; do{

int flag=0;

cout<<\请输入要删除的职工ID\ cin>>no; worker *p,*q; q=head;

while(q->next!=NULL&&q->next->ID!=no) q=q->next;

if(q->next!=NULL) {

flag=1; p=q->next;

q->next=q->next->next; amount--; free(p);

cout<<\成功删除! \ }

if(flag==0)

cout<<\对不起!您要删除的职工不存在!!!!!!!!!\ cout<<\您想继续删除吗?(y/n)\ cin>>c;

while(c!='y'&&c!='n') {

cout<<\指令错误<请输入y/n!>!!!!!!!!!!!!\ cout<<\您想继续删除吗?(y/n)\ cin>>c; }

}while(c=='y'); }

void tongji(worker *head) {

char c;

string name; do

第 十七 页 共 二十七 页

{

worker *work=head->next; bool flag=0;

cout<<\总工资和平均工资的计算------\ cout<<\请输入要统计职工的姓名\ cin>>name; do{

if(work!=NULL&&name==(*work).name) {

flag=1;

cout<<\基本工资|职务工资|岗位津贴|医疗保险|公积金|总工资|平均工资|\

cout<<\ cout<<\

cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\

cout<<\超过2000的百分比:\ cout<<(ab*100)/amount<<\

cout<<\小于2000,大于等于1500\ cout<<(cd*100)/amount<<\

cout<<\小于1500,大于等于1000\ cout<<(ef*100)/amount<<\ }

work=work->next; }while(work!=NULL); if(flag==0)

cout<<\对不起!您要查询的职工不存在!!!!!!!!!!!\ cout<<\您想继续查询吗?(y/n)\ while(c!='y'&&c!='n') {

cout<<\指令错误<请输入y/n!>!!!!!!!!!!!\ cout<<\您想继续查询吗?(y/n)\ }

} while(c=='y'); }

void tianjia(worker *head) {

第 十八 页 共 二十七 页

char c; int j=0;

worker *p=head;

file[j]=new ofstream(\职工管理系统\\\\职工信息.txt\ do {

worker *work=new worker;

cout<<\请输入姓名:\ cin>>(*work).name;

cout<<\请输入ID:\ cin>>(*work).ID;

cout<<\请输入基本工资:\ cin>>(*work).sc1.jiben;

cout<<\请输入职务工资:\ cin>>(*work).sc1.zhiwu;

cout<<\请输入岗位津贴:\ cin>>(*work).sc1.gangwei;

cout<<\请输入医疗保险:\ cin>>(*work).sc1.yiliao;

cout<<\请输入公积金:\ cin>>(*work).sc1.gongji;

(*work).sc1.sum=(*work).sc1.gangwei+(*work).sc1.gongji+(*work).sc1.yiliao+(*work).sc1.zhiwu+(*work).sc1.jiben;

(*work).sc1.avarage=((*work).sc1.gangwei+(*work).sc1.gongji+(*work).sc1.yiliao+(*work).sc1.zhiwu+(*work).sc1.jiben)/5;

(*work).sc1.sum1=(*work).sc1.gangwei+(*work).sc1.zhiwu+(*work).sc1.jiben; if((*work).sc1.sum1>=2000) ab++;

if((*work).sc1.sum1>=1500&&(*work).sc1.sum1<2000) cd++; if((*work).sc1.sum1>=1000&&(*work).sc1.sum1<1500) ef++; work->next=p->next; p->next=work; amount++;

cout<<\数据添加成功,想继续添加吗(y/n)\ p=p->next;

while(c!='y'&&c!='n') {

cout<<\指令错误<请输入y/n!>!!!!!!!!!!\ cout<<\数据添加成功,想继续添加吗(y/n)\ cin>>c; }

第 十九 页 共 二十七 页

}while(c=='y'); j++;

cout<<\输入了 \个职工的信息.\}

8. 总结:

设计之初,觉得小型职工工资管理系统比较好设计。开始发现整个程序的设计思路不太明了。理思路花了很长时间,弄清楚了是要分查询,删除和添加三个方面去这个程序比较靠谱,能够较好的满足程序需要。其次,就该考虑程序算法的问题了,一个好的算法是一个好程序的灵魂,也决定了一个程序的质量。

两个星期的课设虽然有些疲劳和困倦,但带给我很多的收获。C++已经学了一个学期了,有许多知识都存在似懂非懂的现象(比如,系统中关于职工信息和工资情况的配套是动态的,无法直接设定;在平均成绩排序中要运动冒泡法;对于模板和头文件也有了较多的认识。)这种现象通过实际的上机操作,已经减少了许多。对这些知识也有了更深的理解和很好的掌握。也有很多理论上说得过去的代码,但到了实际操作,却是行不通的。这种困惑,有许多已经通过实际操作解决了,并能够深刻认识,但也有很多没有明白。只能避过这些方法,换方法实现。在课程设计之前,因为有了综合实验的经验与教训,明白了写代码这一步是非常重要的,因为当你把代码输入电脑,并用编译器将其运行,发现通过不了,再来检查找出问题,这是一件非常辛苦的事情,也很浪费时间。于是在课程设计的时候,我花了四天的时间来规划与写代码,将要实现的内容分析清楚,才把代码输入电脑。我觉得写程序,应该先找到该程序中的核心地方,用多种方法来实现该核心,这才可能避免等到发现逻辑上或者编译器不支持上的错误,才来想补救的措施,这样花费时间在想补救措施是很不值得的。

而且,一学期下来的课本上的内容并不能满足我们对于编程的全部需要,C++中还有很多精髓部分我们并没有学到。本次课设中遇到的重重困难坚定了我学号C++的信心!

9. 参考文献

① C++程序设计(第2版) 谭浩强编著 清华大学出版社 ② Visual C++6.0

10. MFC的实践与成果

实践过程中,老师也讲述了MFC编程的WINDOWS界面的程序。本来打算编程出来一个的,但是由于好多地方不是很明白,所以只编译出来几个小的程序。而将小程序链接在一起的方法试了许多次都已失败告终。在这里只展示一些单独的小程序。

复制

第 二十 页 共 二十七 页

信息录入

函数计算

共 二十七 页 第 二十一 页

字母大小写转换

课程添加与删除

共 二十七 页 第 二十二 页

信息选择填入

显示时间日期

共 二十七 页 第 二十三 页

信息选择添加

共 二十七 页 第 二十四 页

中 南 大 学

C++程序设计基础 课程设计成绩表

姓名 姚文彬

指导教师:_樊广军_

_2014_年_7_月_5_日

班次 机械1313班 学号 0806120215 成绩

共 二十七 页 第 二十五 页

本文来源:https://www.bwwdw.com/article/cm1o.html

Top