《数据结构与算法》工资管理系统综合实验报告.docx

上传人:b****6 文档编号:7908847 上传时间:2023-01-27 格式:DOCX 页数:34 大小:242.96KB
下载 相关 举报
《数据结构与算法》工资管理系统综合实验报告.docx_第1页
第1页 / 共34页
《数据结构与算法》工资管理系统综合实验报告.docx_第2页
第2页 / 共34页
《数据结构与算法》工资管理系统综合实验报告.docx_第3页
第3页 / 共34页
《数据结构与算法》工资管理系统综合实验报告.docx_第4页
第4页 / 共34页
《数据结构与算法》工资管理系统综合实验报告.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

《数据结构与算法》工资管理系统综合实验报告.docx

《《数据结构与算法》工资管理系统综合实验报告.docx》由会员分享,可在线阅读,更多相关《《数据结构与算法》工资管理系统综合实验报告.docx(34页珍藏版)》请在冰豆网上搜索。

《数据结构与算法》工资管理系统综合实验报告.docx

《数据结构与算法》工资管理系统综合实验报告

《数据结构与算法》工资管理系统综合实验报告

 

《数据结构与算法》

综合实验报告

 

课程名称:

《数据结构与算法》综合实验

专业:

运算机科学与技术

班级学号:

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->next=NULL)。

单链表插入操作在单链表L中第i个位置插入一个数据元素e,第一找到单链表中的第i-1个结点,然后申请一个新的结点由指针s指示,s结点数据域为e。

修改第-1个结点的指针使其指向s,然后使s结点的指针域指向原第i个结点。

(三)、单链表的删除

注意:

删除算法中的循环条件(p-next!

NULL)&&(k

NULL)&&(k

1、开创一块连续空间,初始化为闲暇静态链表。

2、闲暇链上的结点分配。

3、闲暇链上的回收分配。

4、静态单链表结点的分配与开释

六、算法描述(流程图与讲明)

(一)、详细描述

工资治理系统(要求)

该系统能够实现工资治理。

系统包括录入、游玩、查询、统计等功能。

其中录入功能要求能够添加新的工资信息到文件;游玩功能要求能按照工资卡号、姓名分类游玩,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号、姓名查询;统计功能要求能够按照月份累计统计某职工在某时刻段实发工资总金额。

(提示)

(1)文件中一行数据对应一个职工工资信息。

(2)工资信息的数据结构采纳结构体数据,一个数组元素对应一条工资单记录。

(3)工资单信息包括工资卡号、姓名、月份、应发工资、水费、电费、税金、实发工资等。

(4)实发工资=应发工资-水费-电费-税金,其中税金运算方法为:

1)、应发工资应发工资〈800元,税金=0

2)、800〈应发工资〈1400元,税金=(应发工资-800)*5%

3)、应发工资〉1400元,税金=(应发工资-1400)*10%

该系统分:

菜单函数、查询函数、添加函数、删除函数、显示函数、修改函数、储存函数、插入函数、和主函数九个模块。

菜单函数的要紧显示的是主菜单,你能够通过菜单函数选择你要选择的模块,选择你要执行的方法,菜单函数共有八个选择,在0~7之间你人选择一个,就会进入到相应的模块。

选择1带你进入添加模块;

选择2带你进入查询模块;

选择3带你进入删除模块;

选择4带你进入储存模块;

选择5带你进入插入模块;

选择6带你进入修改模块;

选择7带你进入显示函数;

选择0带你返回菜单函数;

职员的信息包括职工卡号、职员id、职员姓名、性不、部门、技术职称编号、电话、差不多工资、职务工资、应发工资、实发工资、税金、补助。

(二)、数据结构的采纳

添加模块和插入模块都运用到单链表的输入和插入,查询模块运用到了单链表的查找,删除模块运用到了单链表的删除,储存模块,修改模块,返回模块还有显示模块都运用到了单链表的输入和输出

(三)、算法的描述

本系统一开始就运用了结构体类型,定义了一个结构体类型变量worker,来定义职员的各种信息,还定义了一个数据节点,用于创建单链表。

菜单函数:

显示功能总页面,用cprintf()程序输出,system("cls")功能是清屏,清除所有显示的信息,

定位函数:

Node*locate(Linkm,charfind[],charfangshi[]){},m为链表,find,fangshi为两个数组,利用strcmp(fangshi,"id")程序,如果strcmp()==0,表示利用id完成查询、删除或修改,本程序要紧是完成用Id或name方式选择查询、删除或修该

查询函数:

chaxun(Linkm),完成是否又该工人的查询,如果m的指针域为空,表示没有工人的记录,否则通过id或name查询,调用lacate()函数,如果lacate()的值不为空,输入职员信息,按任意键终止。

添加函数:

add(Linkm),若m的指针域不为空,连续输入数值,申请节点,用节点存放输入数值,若职工卡号输入0,返回主页面,否则连续输入

删除函数:

delete(Linkm),r若m的指针域为空,表示没有记录,通过调用lacate()确定用哪一种方式进行删除,若找到则执行删除,否则没有该记录。

修改函数:

modify(Linkm),若m的指针域为空,表示没有记录,用get()输入id,用id得到想要修改的数据,修改完显示修改成功,否则显示失败。

显示函数:

xianshi(Linkm)若m的指针域为空,表示没有记录,显示所有职员的信息。

插入函数:

insert(Linkm)申请新节点,若节点为空,则没有插入记录,用get()输入插入的数据,从第一个节点开始,到显示插入成功,若重复插入则返回,否则连续插入。

储存函数;save(Linkm)用fp=fopen("d:

\\hello.txt","wb");语句创建一个放在d盘下的文件,若文件为空则不能打开,用p节点之向m的指针域,若p不为空,用fwrite(p,sizeof(Node),1,fp)写入文件,储存,

这些功能要紧用数据结构的单链表完成的,用得到的是c语言的知识。

(四)、系统功能模块图

2查询模块

按照姓名查询

屏幕输出

工资治理系统

4储存

模块

7显示模块

0退

从文件读入

按照id号查询

从键盘输入

6修改模块

1添加模块

3删除模块

5插入模块

按照姓名删除

按照id号删除询

按照id号插入

图6.1系统功能模块图

 

(五)、系统功能模块图

 

 

 

 

图6.2系统流程模块图

(六)、函数流程图

图6.3add()函数流程图

图6.4delete()函数流程图

图6.5save()函数流程图

 

图6.6insert()函数流程图

图6.7modify()函数流程图

图6.8xianshi()函数流程图

图6.9locate()函数流程图

七、运行结果(抓图)与分析

7.1主界面

执行成功之后,第一显示主菜单,如图7.1:

图7.1

7.2输入添加函数模块实现

选择”1”你将进入添加模块,在添加模块里你能够执行对职员的姓名,职工卡号等的添加,如图7.2:

图7.2

7.3输入查询函数模块实现

选择”2”你将进入查询模块,一是通过职员的id号查询职员的信息,还能够通过职员的姓名进行查询。

例如:

进入主菜单,你第一选择的是“2”,进入查询模块,然后你能够选择通过id或者是姓名进行职员信息查询,选择“1”,通过id查询,选择“2”通过姓名查询,如果你选择“2“,然后输入id号01,之后按回车键,就会显示一行你要查询的那个职员的信息,如图7.3:

图7.3

7.4输入删除函数模块实现

选择“3”你将你进入删除模块,你能够通过id号和职员的姓名进行删除,方法雷同,如图7.4

图7.4

7.5输入储存函数模块实现

输入“4”进行文件的储存,储存的路径是"d:

\\hello.txt","wb",如图7.5:

图7.5

7.6输入插入函数模块实现

输入“5”你将进入插入模块,你能够选择要插入的位置,是第一个数据后面依旧第几个数据后面,选择之后即可进行信息的录入,如果在职工卡号后输入0,则返回主页面,否则连续插入方法跟添加雷同,如图7.6:

图7.6

7.7输入修改函数模块实现

输入“6”,你将进入修改界面,你能够先选择你要修改的职员的id,之后你能够选择你要修改的信息,修改之后你会用到一个模块,储存模块,如图7.7

图7.7

7.8输入显示函数模块实现

输入“7”你将进入显示模块。

显示模块要紧的功能确实是显示信息。

执行完其他操作之后你能够通过显示信息显示出来,如图7.8

图7.8

7.9输入退出函数模块实现

输入“0”,退出界面,如图7.9

图7.9

八、源程序代码

#include

#include

#include

#include

//#include

intsaveflag=0;//标志一下,定义一个标志变量,用到的时候再找

typedefstructworker//定义一个structworker,相当于java的一个类

{

chargzkh[20];/*职工卡号*/

charid[20];/*id号*/

charname[20];/*姓名*/

charsex;/*性不*/

//intgl;/*工龄*/

chardepartment[20];/*部门*/

charlevel[10];/*技术职称*/

charjsbh[20];/*技术职称编号*/

charphone[20];

floatjbgz;/*差不多工资*/

floatzwgz;/*职务工资*/

floatyfgz;/*应发工资*/

floatsfgz;/*实发工资*/

floattax;

floatbz;/*补助*/

};

typedefstructnode

{

structworkerdata;//结构体work类型的变量data

structnode*next;//结构体note类型的指针变量,变量名为next

}Node,*Link;//note类型的指针变量

menu()/*菜单函数*/

{

system("cls");

//textcolor(12);

//gotoxy(10,5);

cprintf("王娇的工资治理系统:

\n");

//gotoxy(10,8);

cprintf("********************菜单********************\n");

//gotoxy(10,9);

cprintf("*1添加2查询*\n");

//gotoxy(10,10);

cprintf("*3删除4储存*\n");

//gotoxy(10,11);

cprintf("*5插入6修改*\n");

//gotoxy(10,12);

cprintf("*7显示0退出*\n");

//gotoxy(10,13);

cprintf("**********************************************\n");

}

/*定位函数*/

Node*locate(Linkm,charfind[],charfangshi[])

{

Node*r;

if(strcmp(fangshi,"id")==0)/*按照id查询*/

{

r=m->next;

while(r)

{

if(strcmp(r->data.id,find)==0)

returnr;

r=r->next;

}

}

elseif(strcmp(fangshi,"name")==0)

{

r=m->next;

while(r)

{

if(strcmp(r->data.name,find)==0)

returnr;

r=r->next;

}

}

}

/*查询函数*/

chaxun(Linkm)

{

intchoose;

charinputdata[20];/*存放查询的内容*/

Node*p;

if((m->next)==NULL)

{

system("cls");

printf("\n没有该职员的信息!

\n");

getchar();

return;

}

system("cls");

printf("1通过id查询2通过姓名查询\n");//选择1通过id查询,选择2,通过name查询

printf("请输入[1/2]\n");

scanf("%d",&choose);getchar();

if(choose==1)

{

printf("请输入数据!

\n");

scanf("%s",&inputdata);getchar();

p=locate(m,inputdata,"id");

if(p)

{

printf("工资卡号:

=%4s姓名:

=%4s实发工资:

=%4f税务:

=%4f差不多工资:

=%4f\n",

p->data.gzkh,p->data.name,p->data.sfgz,p->data.tax,p->data.jbgz);

//printf("%4s%4s%4f%4f%4f\n",p->data.gzkh,p->data.name,p->data.sfgz,p->data.tax,p->data.sfgz);

printf("按任意键连续!

\n");

getchar();

}

else

{

printf("无法找到!

\n");

getchar();

}

}

elseif(choose==2)

{

printf("请输入数据!

\n");

scanf("%s",&inputdata);getchar();

p=locate(m,inputdata,"name");

if(p!

=NULL)

{

printf("工资卡号:

=%4s姓名:

=%4s应发工资:

=%4f税务:

=%4f实发工资:

=%4f\n",

p->data.gzkh,p->data.name,p->data.sfgz,p->data.tax,p->data.jbgz);

//printf("%s%s%f%f%f\n",p->data.gzkh,p->data.name,p->data.sfgz,p->data.tax,p->data.sfgz);

printf("按任意键连续!

\n");

getchar();

}

else

{

printf("无法找到!

\n");

getchar();

}

}

}

/*添加函数*/

add(Linkm)

{

Node*p,*r,*s;

charnumstr[20];

r=m;

while(r->next!

=NULL)

{

r=r->next;

}

while(m)

{

p=(Node*)malloc(sizeof(Node));//申请结点

if(p==NULL)

{

printf("无法申请经历空间!

\n");

exit(0);

}

printf("职工编号:

");

gets(p->data.gzkh);

if(strcmp(p->data.gzkh,"0")==0)

{

break;

}

printf("id号:

");

gets(p->data.id);

printf("姓名:

");

gets(p->data.name);

printf("性不:

");

//gets(p->data.sex);

p->data.sex=getchar();

getchar();

printf("部门:

");

getchar();

gets(p->data.department);

printf("技术职称:

");

gets(p->data.level);

printf("技术职称编号:

");

gets(p->data.jsbh);

printf("电话:

");

gets(p->data.phone);

printf("差不多工资:

");

gets(numstr);

p->data.jbgz=atof(numstr);

printf("职务工资:

");

gets(numstr);

p->data.zwgz=atof(numstr);

printf("补助:

");

gets(numstr);

p->data.bz=atof(numstr);

p->data.yfgz=p->data.jbgz+p->data.zwgz+p->data.bz;//应发工资=差不多工资+职务工资+补助;

if(p->data.yfgz<800)

p->data.tax=0;//如果应发工资<800那么税金为0,

elseif(p->data.yfgz<=1400)

p->data.tax=(p->data.yfgz-800)*0.05;//如果应发工资大余800小于1400税金=(应发工资-800)*0.05

else

p->data.tax=(p->data.yfgz-1400)*0.1;//如果应发工资大于1400税金=(应发工资-1400)*0.1

p->data.sfgz=p->data.jbgz+p->data.zwgz+p->data.bz-(p->data.tax);//实发工资=差不多工资+职务工资+补助-税金;

p->next=NULL;

r->next=p;

r=p;

saveflag=1;

}

}

/*删除函数*/

delete(Linkm)

{

intchoose;

Node*p,*r;

charfind[20];

if(m->next==NULL)

{

system("cls");

printf("没有记录!

\n");

getchar();

return;

}

system("cls");

printf("1通过id删除2通过姓名删除\n");//选择1,通过id删除,选择2通过name删除

printf("请输入1或2:

\n");

scanf("%d",&choose);getchar();

if(choose==1)

{

printf("请输入已存在的id号!

\n");

scanf("%s",find);getchar();

p=locate(m,find,"id");

if(p!

=NULL)

{

r=m;

while(r->next!

=p)

r=r->next;

r->next=p->next;

free(p);

printf("d删除成功!

\n");

getchar();

saveflag=1;

}

else

{

printf("无法找到id号!

\n");

getchar();

}

}

elseif(choose==2)

{

printf("请输入已存现在的姓名!

\n");

scanf("%s",find);getchar();

p=locate(m,find,"name");

if(p!

=NULL)

{

r=m;

while(r->next!

=p)

r=r->next;

r->next=p->next;

free(p);

printf("删除成功!

\n");

getchar();

saveflag=1;

}

else

{

printf("无法找到姓名!

\n");

getchar();

}

}

}

/*显示数据*/

xianshi(Linkm)

{

Node*p;

p=m->next;

if(p==NULL)

{

printf("没有记录!

\n");

getchar();

return;

}

while(p)

{

printf("\t工资卡号姓名应发工资税金实发工资\n");

printf("\t%4s\t%4s\t%4f\t%4f\t%4f\n",p->data.gzkh,p->data.name,p->data.yfgz,p->data.tax,p->data.sfgz);

p=p->next;

}

getch();

}

/*修改函数*/

modify(Linkm)

{

Node*p;

charfind[20];

charnumstr[20];

if(m->next==NULL)

{

system("cls");

printf("没有记录!

\n");

getchar();

return;

}

system("cls");

print

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

当前位置:首页 > 经管营销 > 金融投资

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

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