计算机的薪酬管理的实验报告,2020年(薪酬管理)数据结构与算法工资管理系统综合实验报告.doc...

2020年(薪酬管理)数据结构与算法工资管理系统综合实验报告.doc

(薪酬管理)数据结构与算法工资管理系统综合实验报告 数据结构与算法综合实验报告课程名称 数据结构与算法综合实验 专 业 计算机科学与技术 班级学号 11321116 姓 名 王娇 指导教师 孙承福 成 绩 完成日期 2012 年 月 日 一、 实验题目工资管理系统二、 实验时间地时间2012/6/10地点506ATA机室三、 实验目的1.理解线性表的定义、线性表的顺序存储结构和链式存储结构。2.理解线性表的逻辑结构特征3.深入掌握线性表的两种存储方法,即顺序表和链式表。体会这两种存储结构之间的差异。4.重点掌握线性表和链表上各种基本运算的实现。5.综合运用线性表解决一些复杂的实际问题。四、实验内容一、功能关系介绍1添加功能,通过它可以添加新的员工信息,非常方便,输入1即可进入添加页面,添加完以后,输入4保存。2查询功能,通过它可以查询是否有这个员工,他可以通过两种方式进行查询,一是id号查询,二是姓名查询。3删除功能,通过它可以删除离开的员工,它也可以通过两种方式进行删除,一是通过id删除,二是通过姓名删除。6修改功能,通过它可以修改员工信息,譬如电话,工资等,可输入id号进行修改,修改完以后返回主页面输入4进行保存。5插入功能,与添加功能有区别,它可选择性的插入,随意插,他也是添加新的员工,非常方便,返回主页面,输入4保存。4保存功能,它可保存添加,插入和修改的员工信息。7显示功能,通过它可以显示所有员工的详细信息。0返回功能,通过它可返回主页面,进行其他操作。(二)、采用数据结构该员工工资管理系统采用了单链表的建立,输入,插入,查找,删除,输出等功能(三)、语言工具C语言编程五、预习内容一、单链表分线性单链表和静态的单链表。线性单链表是用一组不连续的存储单元来存放线性表中的数据,因此链表中结点的逻辑次序和物理次序不一定相同。为了正确的表示结点间的逻辑关系,在存储线、性表时,存储每个数据元素值的同时,还要存储指示其后继结点的地址信息,这两部分信息组成的存储映像称为结点。一个结点有两个域组成数据域和指针域。 1)、创建单链表 1、扦插法建表 2、尾插法建表 2)、在单链表中查找给定的元素1、按每个元素的定位序号查找2、按值查找二、单链表的长度 刻意采用“数”结点的方法求出单链表的长度,用指针p依次指向各个结点,从第一个元素开始”数“,一直”数“到最后一个结点(p-nextNULL)。单链表插入操作在单链表L中第i个位置插入一个数据元素e,首先找到单链表中的第i-1个结点,然后申请一个新的结点由指针s指示,s结点数据域为e。修改第-1个结点的指针使其指向s,然后使s结点的指针域指向原第i个结点。三、单链表的删除 注意删除算法中的循环条件(p-nextNULL)(ki-1)与前插算法中的循环条件(p-nextNULL)(ki-1)不同,因为前插时的插入位置多一个向表尾插入。1、开辟一块连续空间,初始化为空闲静态链表。2、空闲链上的结点分配。3、空闲链上的回收分配。4、静态单链表结点的分配与释放六、算法描述(流程图与说明) 一、详细描述工资管理系统(要求)该系统能够实现工资管理。系统包括录入、游览、查询、统计等功能。其中录入功能要求能够添加新的工资信息到文件;游览功能要求能按照工资卡号、姓名分类游览,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号、姓名查询;统计功能要求能够按照月份累计统计某职工在某时间段实发工资总金额。(提示)(1)文件中一行数据对应一个职工工资信息。(2)工资信息的数据结构采用结构体数据,一个数组元素对应一条工资单记录。(3)工资单信息包括工资卡号、姓名、月份、应发工资、水费、电费、税金、实发工资等。(4)实发工资应发工资-水费-电费-税金,其中税金计算方法为 1)、 应发工资应发工资800元,税金0 2)、800应发工资1400元,税金(应发工资-800)*5 3)、应发工资1400元,税金(应发工资-1400)*10该系统分菜单函数、查询函数、添加函数、删除函数、显示函数、修改函数、保存函数、插入函数、和主函数九个模块。菜单函数的主要显示的是主菜单,你可以通过菜单函数选择你要选择的模块,选择你要执行的方法,菜单函数共有八个选择,在07之间你人选择一个,就会进入到相应的模块。选择1带你进入添加模块;选择2带你进入查询模块;选择3带你 进入删除模块;选择4带你进入保存模块;选择5带你进入插入模块;选择6带你进入修改模块;选择7带你进入显示函数;选择0带你返回菜单函数;员工的信息包括职工卡号、员工id、员工姓名、性别、部门、技术职称编号、电话、基本工资、职务工资、应发工资、实发工资、税金、补助。二、数据结构的采用添加模块和插入模块都运用到单链表的输入和插入,查询模块运用到了单链表的查找,删除模块运用到了单链表的删除,保存模块,修改模块,返回模块还有显示模块都运用到了单链表的输入和输出三、算法的描述本系统一开始就运用了结构体类型,定义了一个结构体类型变量worker,来定义员工的各种信息,还定义了一个数据节点,用于创建单链表。菜单函数显示功能总页面,用cprintf程序输出,systemcls功能是清屏,清除所有显示的信息,定位函数Node *locateLink m,char find,char fangshi ,m为链表,find,fangshi为两个数组,利用strcmpfangshi,id程序,如果strcmp0,表示利用id完成查询、删除或修改,本程序主要是完成用Id或name方式选择查询、删除或修该查询函数chaxunLink m,完成是否又该工人的查询,如果m的指针域为空,表示没有工人的记录,否则通过id或name查询,调用lacate函数,如果lacate的值不为空,输入员工信息,按任意键结束。添加函数addLink m,若m的指针域不为空,继续输入数值,申请节点,用节点存放输入数值,若职工卡号输入0,返回主页面,否则继续输入删除函数deleteLink m,r若m的指针域为空,表示没有记录,通过调用lacate确定用哪一种方式进行删除,若找到则执行删除,否则没有该记录。修改函数modifyLink m,若m的指针域为空,表示没有记录,用get输入id,用id得到想要修改的数据,修改完显示修改成功,否则显示失败。显示函数xianshiLink m若m的指针域为空,表示没有记录,显示所有员工的信息。插入函数insertLink m申请新节点,若节点为空,则没有插入记录,用get输入插入的数据,从第一个节点开始,到显示插入成功,若重复插入则返回,否则继续插入。保存函数;save(Link m)用fpdhello.txt,wb;语句创建一个放在d盘下的文件,若文件为空则不能打开,用p节点之向m的指针域,若p不为空,用fwritep,sizeofNode,1,fp写入文件,保存,这些功能主要用数据结构的单链表完成的,用得到的是c语言的知识。四、系统功能模块图图 6.1 系统功能模块图五、系统功能模块图 YMain函数menu函数Choos0退出 调用各个功能函数(choosse)查询保存显示 输入正确 图 6.2 系统流程模块图六、函数流程图NpNULLprintf无法申请记忆空间n;exit0;Yprintf职工编号;getsp-data.gzkh;NYNode *p,*r,*s;char numstr20;rmr-nextNULLYrr-next;mYpNode *mallocsizeofNode;Nstrcmpp-data.gzkh,00退出键盘输入p-data.yfgz800税金为0YNNp-data.yfgz140000税金(应发工资-1400)*0.1p-nextNULL; r-nextp;rp;退出NY税金(应发工资-800)*0.05N图 6.3 add()函数流程图图 6.4 delete()函数流程图FILE *fp;Node *p;int count0文件fp打开读取fpNull无法打开文件返回YNpm-next 指针下移PnullY写入文件 countNCount0保存成功无新数据更新YN图 6.5 save()函数流程图图 6.6 insert()函数流程图税金(应发工资-800)*0.05m-nextnull输入你想要修改的id号,调用locate()无记录返回PStrcpyp-data.id,find复制Y根据提示键盘输入插入信息Newinfo-data.yfgz800税金0YNewinfo-data.yfgz1400N税金(应发工资-1400)*0.1Y退出N无法修改N图 6.7 modify()函数流程图图 6.8 xianshi()函数流程图Node *rstrcmpfangshi,”id”0rm-nextYrstrcmpr-data.id,find0Y返回Nreturn r; Ystrcmpfangshi,”name”0rm-nextrstrcmpr-data.name,find0返回return r; YNYNNY返回Nrr-nextrr-nextN图 6.9 locate()函数流程图七、运行结果(抓图)与分析7.1主界面执行成功之后,首先显示主菜单,如图7.1 图7.17.2输入添加函数模块实现选择”1”你将进入添加模块,在添加模块里你可以执行对员工的姓名,职工卡号等的添加,如图7.2图7.27.3输入查询函数模块实现选择”2”你将进入查询模块,一是通过员工的id号查询员工的信息,还可以通过员工的姓名进行查询。例如进入主菜单,你首先选择的是“2”,进入查询模块,然后你可以选择通过id或者是姓名进行员工信息查询,选择“1”,通过id查询,选择“2”通过姓名查询,如果你选择“2“,然后输入id号01,之后按回车键,就会显示一行你要查询的这个员工的信息,如图7.3图7.37.4输入删除函数模块实现选择“3”你将你进入删除模块,你可以通过 id号和员工的姓名进行删除,方法雷同,如图7.4 图7.47.5输入保存函数模块实现输入“4”进行文件的保存,保存的路径是dhello.txt,wb,如图7.5 图7.57.6输入插入函数模块实现输入“5”你将进入插入模块,你可以选择要插入的位置,是第一个数据后面还是第几个数据后面,选择之后即可进行信息的录入,如果在职工卡号后输入0,则返回主页面,否则继续插入方法跟添加雷同,如图7.6图7.67.7输入修改函数模块实现输入“6”,你将进入修改界面,你可以先选择你要修改的员工的id,之后你可以选择你要修改的信息,修改之后你会用到一个模块,保存模块,如图7.7 图7.77.8输入显示函数模块实现输入“7”你将进入显示模块。显示模块主要的功能就是显示信息。执行完其他操作之后你可以通过显示信息显示出来,如图7.8图7.87.9输入退出函数模块实现输入“0”,退出界面,如图7.9图7.9八、源程序代码includestdio.hincludestdlib.hincludestring.hincludeconio.hinclude system.hint saveflag0;标志一下,定义一个标志变量,用到的时候再找typedef struct worker定义一个struct worker,相当于java的一个类 char gzkh20; /*职工卡号*/ char id20; /*id号*/ char name20; /*姓名*/ char sex; /*性别*/ int gl; /*工龄*/ char department20; /*部门*/ char level10; /*技术职称*/ char jsbh20; /*技术职称编号*/ char phone20; float jbgz; /*基本工资*/ float zwgz; /*职务工资*/ float yfgz; /*应发工资*/ float sfgz; /*实发工资*/ float tax; float bz; /*补助*/;typedef struct node struct worker data; 结构体work类型的变量data struct node *next; 结构体note类型的指针变量,变量名为nextNode,*Link; note类型的指针变量menu /*菜单函数*/ systemcls; textcolor12; gotoxy10,5; cprintf 王娇的工资管理系统n; gotoxy10,8; cprintf 菜单 n; gotoxy10,9; cprintf* 1 添加 2 查询 *n; gotoxy10,10; cprintf* 3 删除 4 保存 *n; gotoxy10,11; cprintf* 5 插入 6 修改 *n; gotoxy10,12; cprintf* 7 显示 0 退出 *n; gotoxy10,13; cprintfn; /*定位函数*/Node *locateLink m,char find,char fangshi Node *r; ifstrcmpfangshi,id0 /*按照id查询*/ rm-next; whiler ifstrcmpr-data.id,find0 return r; rr-next; else ifstrcmpfangshi,name0 rm-next; whiler ifstrcmpr-data.name,find0 return r; rr-next; /*查询函数*/chaxunLink m int choose; char data20; /*存放查询的内容*/ Node *p; ifm-nextNULL systemcls; printfn没有该员工的信息n; getchar; return; systemcls; printf1 通过id查询 2 通过姓名查询n; 选择1通过id查询,选择2,通过name查询 printf请输入 1/2n; scanfd,choose;getchar; ifchoose1 printf请输入数据n; scanfs,data;getchar; plocatem,data,id; ifp printf工资卡号4s 姓名4s 实发工资4f 税务4f 基本工资4fn, p-data.gzkh,p-data.name,p-data.sfgz,p-data.tax,p-data.jbgz; printf4s4s4f4f4fn,p-data.gzkh,p-data.name,p-data.sfgz,p-data.tax,p-data.sfgz; printf按任意键继续n; getchar; else printf无法找到n; getchar; else ifchoose2 printf请输入数据n; scanfs,data;getchar; plocatem,data,name; ifpNULL printf工资卡号4s 姓名4s 应发工资4f 税务4f 实发工资4fn, p-data.gzkh,p-data.name,p-data.sfgz,p-data.tax,p-data.jbgz; printfssfffn,p-data.gzkh,p-data.name,p-data.sfgz,p-data.tax,p-data.sfgz; printf按任意键继续n; getchar; else printf无法找到n; getchar; /*添加函数*/addLink m Node *p,*r,*s; char numstr20; rm; whiler-nextNULL rr-next; whilem pNode *mallocsizeofNode;申请结点 ifpNULL printf无法申请记忆空间n; exit0; printf职工编号; getsp-data.gzkh; ifstrcmpp-data.gzkh,00 break; printfid号; getsp-data.id; printf姓名; getsp-data.name; printf性别; getsp-data.sex; p-data.sexgetchar; getchar; printf部门; getchar; getsp-data.department; printf技术职称; getsp-data.level; printf技术职称编号; getsp-data.jsbh; printf电话; getsp-data.phone; printf基本工资; getsnumstr; p-data.jbgzatofnumstr; printf职务工资; getsnumstr; p-data.zwgzatofnumstr; printf补助; getsnumstr; p-data.bzatofnumstr; p-data.yfgzp-data.jbgzp-data.zwgzp-data.bz; 应发工资基本工资职务工资补助; ifp-data.yfgz800 p-data.tax0; 如果应发工资800 那么税金为0, else ifp-data.yfgz1400 p-data.taxp-data.yfgz-800*0.05; 如果应发工资大余800小于1400税金(应发工资-800)*0.05 else p-data.taxp-data.yfgz-1400*0.1; 如果应发工资大于1400税金(应发工资-1400)*0.1 p-data.sfgzp-data.jbgzp-data.zwgzp-data.bz-p-data.tax;实发工资基本工资职务工资补助-税金; p-nextNULL; r-nextp; rp; saveflag1; /*删除函数*/deleteLink m int choose; Node *p,*r; char find20; ifm-nextNULL systemcls; printf没有记录n; getchar; return; systemcls; printf 1 通过id删除 2 通过姓名删除 n;选择1,通过id删除,选择2通过name删除 printf请输入1或2n; scanfd,choose;getchar; ifchoose1 printf请输入已存在的id号n; scanfs,find;getchar; plocatem,find,id; ifpNULL rm; whiler-nextp rr-next; r-nextp-next; freep; printfd删除成功n; getchar; saveflag1; else printf无法找到id号n; getchar; else ifchoose2 printf请输入已存现在的姓名n; scanfs,find;getchar; plocatem,find,name; ifpNULL rm; whiler-nextp rr-next; r-nextp-next; freep; printf删除成功n; getchar; saveflag1; else printf无法找到姓名n; getchar; /*显示数据*/xianshiLink m Node *p; pm-next; ifpNULL printf没有记录n; getchar; return; whilep printft工资卡号 姓名 应发工资 税金 实发工资n; printft4s t4st4ft4ft4fn,p-data.gzkh,p-data.name,p-data.yfgz,p-data.tax,p-data.sfgz; pp-next; getch;/*修改函数*/modifyLink m Node *p; char find20; char numstr20; ifm-nextNULL systemcls; printf没有记录n; getchar; return; systemcls; printf请输入你想修改的id号n; getsfind; plocatem,find,id; ifp strcpyp-data.id,find; printf请输入数据n; printf姓名; getsp-data.name; printf性别; p-data.sexgetchar;getchar; printf部门;getsp-data.department;getchar; printf技术职称;getsp-data.level;getchar; printf技术职称编号;getsp-data.jsbh;getchar; printf电话;getsp-data.phone;getchar; printf基本工资;getsnumstr;p-data.jbgzatofnumstr;getchar; printf职务工资;getsnumstr;p-data.zwgzatofnumstr;getchar; printf补助;getsnumstr;p-data.bzatofnumstr;getchar; p-data.yfgzp-data.jbgzp-data.zwgzp-data.bz; ifp-data.yfgz800 p-data.tax0; else ifp-data.yfgz1400 p-data.taxp-data.yfgz-800*0.05; else p-data.taxp-data.yfgz-1400*0.1; p-data.sfgzp-data.jbgzp-data.zwgzp-data.bz-p-data.tax; printf恭喜你修改成功n; getch; saveflag1; else printf无法修改n; /*保存函数*/saveLink m FILE *fp; Node *p; int count0; fpdhello.txt,wb;文件的打开读取 iffpNULL判断如果文件为空,就会输出下面的语句 printf无法代开文件 n; getchar; return; pm-next;下移 whilepNULL fwritep,sizeofNode,1,fp;写入 pp-next; count;用count记录文件是否保存成功 ifcount0 printf文件保存成功n; getchar; saveflag0; else systemcls; printf没有新数据保存成功n; getchar; fclosefp;/*插入函数*/insertLink m Link p,newinfo; char ch; char find20; char numstr20; systemcls; printfplease the find20 n; getsfind;获得要输入的数 newinfoNode *mallocsizeofNode; ifnewinfoNULL printf没有记录n; getchar; return; printf请输入插入数据n; printf职工卡号;getsnew

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值