欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载
     

    [计算机软件及应用]基于c++语言的职工工资管理系统.doc

    • 资源ID:1991894       资源大小:456.07KB        全文页数:36页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    [计算机软件及应用]基于c++语言的职工工资管理系统.doc

    广 东 金 融 学 院课程设计说明书设计题目 职工工资管理系统 学生姓名 刘汉 学号 05141344 专业班级 信息管理与信息系统三班 指导教师 侯昉 职称 教师 2008 年 10 月 3目 录一、前言1二、课题要求、课题分析1(一)课题要求1(二)课题分析1三、方案设定2四、程序功能描述与模块结构2(一)程序功能描述2(二)功能模块2(三)程序流程图3四、用户使用说明6五、测试结果7六程序经验教训总结12七附录13一、前言C+语言是具有面向对象特性的C语言的继承者,即是由C语言演变而来,全面兼容C语言。C语言的优点,如语言简洁灵活,运算符和数据结构丰富,具有结构化控制语句,程序执行效率高,同时具有高级语言与汇编语言的优点,这些在C+语言中同样能够体现出来。但是C+语言最有意义的方面是支持面向对象的程序设计,在数据类型、算法的控制结构、函数等方面都有很好的体现。面向对象编程中,对象是程序设计的基本单位,但对象的静态属性往往需要用某种类型的数据来表示,对象的动态属性要由成员函数来实现,面向函数的实现归根到底还是算法的设计。二、课题要求、课题分析(一)课题要求C+课程设计通过综合运用在C+程序设计和数据结构中所学的程序结构、流程控制语句、数组、函数、指针、结构体、数据结构等知识,以简易“管理信息系统”程序设计为载体,以C+语言为工具,使我们更深地涉足计算机专业设计领域,并使所学知识和技能得到进一步巩固、深化和扩展,以达到能用C+编写初等程度软件的目的,为继续学习后续课程及今后走上相关工作岗位打下良好的基础。经过调查分析,决定设计职工工资管理系统。(二)课题分析职工工资管理系统可定位于企业会计系统的一个子系统,该系统主要完成的工作为:录入各职工自身及工资情况、对已经存在的数据的修改、删除、可查询、统计系统中的数据等。为此因此职工工资管理系统的功能:读取文件信息、数据输入、显示、排序、查找、增加、删除、修改、保存等。三、方案设定根据系统功能要求,采用结构体、数组、指针等数据类型并结合链表数据结构来完成设计。在程序中定义了struct epployee的职工信息结构体、class Information的职工类、epployee *Information:creat(void)的职工链表信息及void Information:output()输出等函数,编写各相关的子函数的调用等。四、 程序功能描述与模块结构(一)程序功能描述 通过主菜单Menu()函数将读取文件信息、输入、显示、统计、增加、删除、修改、查找、排序等函数结合一起,在用户通过相关操作选择其中一个功能时,调用该功能函数,完成数据处理。在主函数中调用主菜单Menu()函数,完成操作。用一个中间函数将主函数与各功能函数连接在一起,不仅使程序语言简洁、明了、易懂,而且在功能实现上也更加晚上。(二)功能模块1.主函数int main(void):设置背景颜色和字体颜色、调用设计者的相关信息函数、调用Menu函数,实现系统的主要功能处理;2.主菜单Menu()函数:确定如何选择所需功能,调用读取文件信息、数据输入、显示、排序、查找、增加、删除、修改、保存等函数,完成职工工资管理系统的数据处理;3.读取文件的信息Read()函数:从文件中读取职工工资的信息表并显示出来;4.数据输入函数creat():建立链表,完成职工信息录入;5.数据显示函数output():将职工信息数据显示出来;6.数据统计函数count():统计职工人数;7.数据增加函数insert():添加职工信息;8.数据删除函数cancel():删除职工信息数据;9.数据修改函数modify():修改职工工资等信息数据;10.数据查找函数find():查找某一职工工资等信息情况;11.数据排序函数sort():将存储在文件中的职工信息按一定要求排序;12.数据保存函数save():对系统中的数据进行相关的操作后将其保存起来;13.作者信息函数editor():显示设计者的相关信息;14.登陆函数Pass():设定使用权限。(三)程序流程图程序流程图主是对各功能模块的具体描述,以一种图表的方式简洁明了的将各模块的呈现出来,通过这些流程图可清楚的看出整个程序的运行过程,体会程序的流畅性。1. 主函数流程图结束调用主菜单函数调用登陆函数pass () menu ()调用作息信息函数editor ()调用系统函数system(“color d”)开始 图1-1主函数的流程图2各子功能函数流程图开始定义变量输出系统相关信息输入choicechoice<0|choice>9switch(choice)调用 排序函数调用 显示函数调用 输入函数调用 查找函数调用 增加函数调用 删除函数调用 修改函数调用 保存函数输出函数结束NY图1-2 Menu函数流程图图1-3 删除函数的N-S流程图四、用户使用说明这是一个关于职工工资管理系统,具有输入、输出、统计、删除、查询、修改数据等功能,建立了一个含有姓名、性别、编号、工资、总工资等成员的结构体数据类型的变量struct epployee 。1. 用户使用时,根据提示操作,进入登陆页面。输入登陆名administrator,登陆密码administrator,进入操作系统。如果登陆信息输错三次,自动退出系统。2. 按显示的数字选择操作,先输入职工数据,然后进行其他操作。所以输入“1”,开始录入相关数据。用户录入完数据后,在姓名处键以“”,结束操作。3. 提取文件信息,输入数字“0”,回车确定操作,将系统以前操作过的保存的文件提取出来,并显示。4. 显示职工信息,输入数字“2”,将需显示的职工信息的编号输入,回车确定操作,系统提取相关数据并显示。5. 将输入的数据进行统计排序,输入数字“3”,回车确定操作,系统显示工资统计表、及各项工资的平均值。6. 查找职工工资,输入“4”,回车确定操作,系统显示“请输入要查找的编号”,输入想要查找的职工的编号,系统提取保存的数据,并显示出来。7. 增加职工工资,输入“5”回车确定操作,系统显示输入的页面,将需增加的职工信息输入,输入完后回车确定,系统显示成功插入,并显示职工工资信息表。8. 删除职工工资,输入“6”,回车确定操作,系统显示“请输入要删除的编号”,输入要删除的职工编号,系统将保存的数据删除,并显示剩余的职工工资信息表。9. 修改职工信息,输入“7”,回车确定操作,输入要修改的编号,系统显示该职工的信息,将改后的信息输入系统。10. 将所有操作过的信息保存,输入“8”,回车确定操作,系统显示成功保存信息。11. 退出系统,输入“9”,回车确定操作,系统显示退出的页面,输入任意一个键,退出系统。(温馨提示:因时间的限制等原因,本程序内存设置还不够很完善,所以对于整个系统的使用应按照系统设置的顺序,一项项完成下来,方可不出现漏洞。如果没按照顺序操作,可能会在使用的过程出现一些小差错。)五、测试结果1. 开始运行程序,进入系统页面,显示制作者的信息。图2-1 显示制作者信息的页面2. 任意键继续操作,进入登陆页面。图2-2 登陆系统的页面输错管理员名字或者密码进入到的页面如下图2-3 登陆系统出错的页面3. 成功进入操作系统,按照使用说明进行操作,进入的是总系统的提示页面。图2-4 系统操作的页面图2-5 输入数据的页面图2-6 显示数据的页面图2-7 文件提取信息的页面图2-8 排序统计的页面图2-9 查找职工信息的页面图2-10 查找不到职工信息的页面图2-11 增加职工信息的页面图2-12 增加职工信息后并显示职工工资信息表的页面图2-13 删除职工信息并显示剩余职工信息的页面图2-14 修改职工信息的页面图2-15 成功修改职工信息的页面图2-16 修改没有编号职工信息的页面图2-17 保存所有数据的页面图2-18 退出系统的页面六程序经验教训总结通过这个程序设计,我不仅提高了动手操作能力,对C+语言有了更深的认识,能够更好地运用C+语言进行编程设计,同时在思维、看待问题的全面性等方面也有了很大的提高。不过由于时间、经验不够、对语言的掌握程度不深等问题,在这个系统设计还存在一些问题,比如内存设计还不够完善,整个系统的流畅性等,希望可以在今后的设计上能够解决这些问题,做的更好。七附录/职工成绩管理系统#include <iomanip>#include <iostream>#include <fstream>#include <malloc.h>#include <stdlib.h>#include <string.h>#define NULL 0int const N=20;#define LEN sizeof(struct epployee)using namespace std; int n=0; /定义一个全局变量统计职工人数 /定义一个职工信息的结构体struct epployee char nameN; /用来存放姓名char sexN; /用来存放性别long id; /用来存放编号float paid3; /用来存放工资int total; /用来存放总工资struct epployee *next;/职工类class Information public:Information() ; /构造函数. Information() ; /析构函数. epployee *creat(); /建立链表void output(epployee *head); /显示职工信息int count(epployee *head); /定义函数count()统计职工总数epployee *insert(epployee*head); /指针函数*insert()用来添加职工信息.epployee *cancel(epployee *head,long id); /指针函数*cancel()用来删除职工信息.epployee *find(epployee *head,long id); /指针函数*find()用来查找职工信息.epployee *modify(epployee *head,long id); /指针函数*modife()用来修改职工的信息.void sort(epployee *head); /定义paixu()函数将职工的总额从大到小排列并输出void average(epployee *head); /定义职工工资平均值的函数void save(epployee *head); /保存文件信息epployee *Read(); /读取文件信息private:epployee *p1,*p2,*p3,*head,st; ;Information:Information() cout<<" *n"cout<<" -<<欢迎您使用职工工资管理系统>>-n" cout<<" *nn" /作者的信息和提示void editor() cout<<"nttt本程序制作者:nntttI don't know nntttQQ : 895026504" cout<<"nntttMade By VC6.0+nnttt2008年9月30日nnttt按<Enter>键进入登陆界面!" cout<<"nnttt如果需要对原来的信息进行操作,则先选择0读取文件信息n"<<endl;Information:Information() cout<<" *n"cout<<" -<<谢谢您使用职工工资管理系统>>-n" cout<<" *n"/建立链表信息epployee *Information:creat(void) /定义一个指向struct epployee的结构体指针函数*creat()用来录入职工信息. char chN;n=0; /用来存放职工姓名 p1=p2=(epployee *)malloc(LEN);/调用malloc()函数用来开辟一个新的存储单元 cout<<" -<<请建立职工信息表,在姓名处键以 # 结束输入!>>-"<<endl;cout<<" 姓名:"cin>>ch;head=NULL; /给指针head赋初值while (strcmp(ch,"#")!=0) /调用字符比较函数strcmp()用来判断是否继续输入 p1=(epployee *)malloc(LEN); /调用malloc()函数用来开辟一个新的存储单元strcpy(p1->name,ch); /将循环结构前面输入的姓名复制到结构体名为p1的数组name中cout<<" 性别:"cin>>p1->sex;cout<<" 编号:"cin>>p1->id;while(p1->id)<0|(p1->id)>100000) /判断输入的编号是否有效(100000个)cout<<" 对不起,您的输入错误!请重新输入(>0<1000000): "cin>>p1->id; cout<<" 基本工资:"cin>>p1->paid0;while(p1->paid0)<0|(p1->paid0)>100000) /判断输入的分数是否有效(>=0 <=100000)cout<<" 对不起,您的输入错误!请重新输入(>0<100000): "cin>>p1->paid0; cout<<" 加班工资:"cin>>p1->paid1;while(p1->paid1)<0|(p1->paid1)>100000) /判断输入的分数是否有效(>=0 <=100000)cout<<" 对不起,您的输入错误!请重新输入(>0<100000): "cin>>p1->paid1; cout<<" 其他奖金:"cin>>p1->paid2;while(p1->paid2)<0|(p1->paid2)>100000) /判断输入的分数是否有效(>=0 <=100000)cout<<" 对不起,您的输入错误!请重新输入(>0<100000): "cin>>p1->paid2; p1->total=p1->paid0+p1->paid1+p1->paid2; /计算总额 if(n=0)head=p1; /如果是输入第一组职工信息就将指针p1赋给指针headelse p2->next=p1; /否则将p1赋给p2所指结构体的next指针p2=p1; /将指针p1赋给指针p2n+; /将职工人数n的值加1cout<<"n 姓名:"cin>>ch; /将输入的姓名存放到字符数组ch中p2->next=NULL; /将p2所指结构体的next指针重新赋空值return (head);/将输入的第一组职工信息返回/定义output()函数将职工的信息从头指针所指内容开始输出void Information:output(epployee *head) /system("cls");if(head=NULL) cout<<" 这是一个空表,请先输入职工信息!n"elsecout<<"-n"cout<<" *职工工资信息表*n"cout<<"-n" cout<<"|编 号| |姓 名| |性别| |基本工资| |加班工资| |其他奖金| |总额|n"cout<<"-n" p1=head; /将头指针赋给p docout<<setw(6)<<p1->id<<setw(14)<<p1->name<<setw(11)<<p1->sex<<setw(11)<<p1->paid0<<setw(15)<<p1->paid1<<setw(13)<<p1->paid2<<setw(13)<<p1->total<<endl;cout<<"-n" p1=p1->next; /将下一组职工信息的next指针赋给pwhile(p1!=NULL); /若指针p非空则继续,目的是把所有的职工信息都传给指针p然后输出./统计职工人数的函数int Information:count(struct epployee *head) /定义函数count()统计职工总数if(head=NULL)return(0); /若指针head为空返回值为0else return(1+count(head->next); /函数的递归调用/添加职工的成绩的函数epployee *Information:insert( epployee *head) /插入新结点定义一个指向struct epployee的结构体指针函数*insert()用来添加职工信息./system("cls");cout<<"t-<<请输入新增职工成绩信息>>-n"<<endl;p1=(epployee *)malloc(LEN); /使p1指向插入的新结点cout<<" 编号:"cin>>p1->id;while(p1->id)<0|(p1->id)>100000)cout<<" 对不起,您的输入错误!请重新输入(>0<100000): "cin>>p1->id; /将输入的编号存放到p1所指结构体的数组id中 cout<<" 姓名:"cin>>p1->name; /将输入的姓名存放到结构体名为p1的数组name中cout<<" 性别:"cin>>p1->sex; cout<<" 基本工资:"cin>>p1->paid0;while(p1->paid0)<0|(p1->paid0)>100000)cout<<" 对不起,您的输入错误!请重新输入(>0<100000): "cin>>p1->paid0; /将输入的基本工资存放到p1所指结构体的数组paid中cout<<" 加班工资:"cin>>p1->paid1;while(p1->paid1)<0|(p1->paid1)>100000)cout<<" 对不起,您的输入错误!请重新输入(>0<100000): "cin>>p1->paid1; /将输入的加班工资存放到p1所指结构体的数组paid中cout<<" 其他奖金:"cin>>p1->paid2;while(p1->paid2)<0|(p1->paid2)>100000)cout<<" 对不起,您的输入错误!请重新输入(>0<100000): "cin>>p1->paid2; /将输入的其他奖金存放到p1所指结构体的数组paid中 p1->total=p1->paid0+p1->paid1+p1->paid2;/计算总分 p2=head; /将头指针赋给p2if(head=NULL) /若没调用次函数以前的头指针head为空head=p1;p1->next=NULL; /则将p1赋给头指针head并将p1所指结构体成员指针next赋空值else while(p1->id>p2->id)&&(p2->next!=NULL)p3=p2; /p3指向原p2指向的结点p2=p2->next; /p2后移一个结点if(p1->id<=p2->id)if(head=p2)p1->next=head;head=p1; /插入到第一个结点之前else p3->next=p1;p1->next=p2; /插入到p3所指结点之后elsep2->next=p1;p1->next=NULL; /插入到尾结点之后n+; /将职工人数加1cout<<"t-<<你输入的职工信息已经成功插入>>-"<<endl;return (head);/删除职工信息epployee *Information:cancel(epployee *head,long id) /定义一个指向struct epployee的结构体指针函数*delete()用来删除考生信息. system("cls");if(head=NULL) /若调用次函数以前的头指针head为空 return(head);elsep1=head; /否则将头指针赋给p1while(id!=p1->id&&p1->next!=NULL) /寻找要删除的结点当p1所指的职工编号不是输入的职工编号并且p1所指的next指针不为空p2=p1;p1=p1->next; /p2指向原p1指向的结点p1后移一个结点if(id=p1->id) /如果输入的职工编号是p1所指的职工编号/结点找到后删除if(p1=head) head=p1->next; /如果head指针和p1指针相等则将下一个结点赋给指针head else p2->next=p1->next; /否则将p1所指结点赋给p2所指结点将要删除的职工信息跳过去cout<<" 删除编号为"<<id<<"的职工n"n-; /将职工人数减1 return(head); /将头指针返回/*修改职工数据*/epployee *Information:modify(epployee *head,long id)/system("cls");cout<<"t-<<请输入须修改的职工工资信息>>-n"<<endl;p1=(epployee *)malloc(LEN); /使p1指向输入的结点p1=head; /否则将头指针赋给p1while(id!=p1->id&&p1->next!=NULL)/寻找结点当p1所指的职工编号不是输入的职工编号并且p1所指的next指针不为空p1=p1->next; /p2指向原p1指向的结点p1后移一个结点 if(id=p1->id) /如果要查找的职工编号是p1所指的职工编号cout<<"你需要修改的职工信息如下:n"cout<<"-n"cout<<"|编 号| |姓 名| |性别| |基本工资| |加班工资| |其他奖金| |总额|n"cout<<"-n"cout<<setw(6)<<p1->id<<setw(10)<<p1->name<<setw(10)<<p1->sex<<setw(10)<<p1->paid0<<setw(15)<<p1->paid1<<setw(12)<<p1->paid2<<setw(12)<<p1->total<<endl;cout<<"-n"cout<<" 编号:"cin>>p1->id;while(p1->id)<0|(p1->id)>100000)cout<<" 对不起,您的输入错误!请重新输入(>0<100000): "cin>>p1->id; /将输入的编号存放到p1所指结构体的数组id中 cout<<" 姓名:"cin>>p1->name; /将输入的姓名存放到结构体名为p1的数组name中cout<<" 性别:"cin>>p1->sex; cout<<" 基本工资:"cin>>p1->paid0;while(p1->paid0)<0|(p1->paid0)>100000)cout<<" 对不起,您的输入错误!请重新输入(>0<100000): "cin>>p1->paid0; /将输入的基本工资存放到p1所指结构体的数组paid中cout<<" 加班工资:"cin>>p1->paid1;while(p1->paid1)<0|(p1->paid1)>100000)cout<<" 对不起,您的输入错误!请重新输入(>0<100000): "cin>>p1->paid1; /将输入的加班工资存放到p1所指结构体的数组paid中cout<<" 其他奖金:"cin>>p1->paid2;while(p1->paid2)<0|(p1->paid2)>100000)cout<<" 对不起,您的输入错误!请重新输入(>0<100000): "cin>>p1->paid2; /将输入的其他奖金存放到p1所指结构体的数组paid中 p1->total=p1->paid0+p1->paid1+p1->paid2; /计算总分 else cout<<" 需要修改的信息中没有编号为"<<id<<"的职工.nn" /没有想要修改的结点信息getchar();return(head);/查找职工信息epployee *Information:find(epployee *head,long id) /定义一个指向struct epployee的结构体指针函数*find()用来查找职工信息./system("cls");if(head=NULL) /若调用次函数以前的头指针head为空cout<<" 这是一个空表,请先输入职工信息!n"return(head); elsep1=head; /否则将头指针赋给p1while(id!=p1->id&&p1->next!=NULL)/寻找结点当p1所指的职工编号不是输入的职工编号并且p1所指的next指针不为空p1=p1->next; /p2指向原p1指向的结点p1后移一个结点if(id=p1->id) /如果要查找的职工编号是p1所指的职工编号cout<<"-n"cout<<"|编 号| |姓 名| |性别| |基本工资| |加班工资| |其他奖金| |总额|n"cout<<"-n"cout<<setw(6)<<p1->id<<setw(10)<<p1->name<<setw(10)<<p1->sex<<setw(10)<<p1->paid0<<setw(14)<<p1->paid1<<setw(12)<<p1->paid2<<setw(12)<<p1->total<<endl;cout<<"-n"else cout<<"信息中没有编号为"<<id<<"的职工.n" /结点没找到return(head);/定义sort()函数将职工的工资总额从大到小排列并输出void Information:sort(epployee *head) /system("cls");int i,k,m=0,j;epployee *pN;/定义一个指向struct epployee的结构体指针数组p if(head!=NULL)/如果头指针是空则继续 m=count(head);cout<<"-n"cout<<" *职工工资统计表*n"cout<<"-n"cout<<"|编号| |姓名| |性别| |基本工资| |加班工资| |其他奖金| |总额| |名次|n"cout<<"-n"p1=head;for(k=0;k<m;k+)pk=p1;p1=p1->next;for(k=0;k<m-1;k+) /选择排序法for(j=k+1;j<m;j+)if(pk->total<pj->total)p2=pk;pk=

    注意事项

    本文([计算机软件及应用]基于c++语言的职工工资管理系统.doc)为本站会员(音乐台)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开