C语言课程设计单项链表实现工资管理系统.docx

上传人:b****8 文档编号:24051102 上传时间:2023-05-23 格式:DOCX 页数:40 大小:131.86KB
下载 相关 举报
C语言课程设计单项链表实现工资管理系统.docx_第1页
第1页 / 共40页
C语言课程设计单项链表实现工资管理系统.docx_第2页
第2页 / 共40页
C语言课程设计单项链表实现工资管理系统.docx_第3页
第3页 / 共40页
C语言课程设计单项链表实现工资管理系统.docx_第4页
第4页 / 共40页
C语言课程设计单项链表实现工资管理系统.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

C语言课程设计单项链表实现工资管理系统.docx

《C语言课程设计单项链表实现工资管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计单项链表实现工资管理系统.docx(40页珍藏版)》请在冰豆网上搜索。

C语言课程设计单项链表实现工资管理系统.docx

C语言课程设计单项链表实现工资管理系统

高级语言(C语言)课程设计说明书

 

起止日期:

2012年07月2日至2012年07月14日

 

题目

工资管理系统

学生姓名

班级

学号

成绩

 

通信与信息工程学院

一.课程设计要求

课程设计系统组成及模块功能:

工资管理程序主要完成对职工的工资信息录入,然后进行排序,统计,查询,计算税金等功能操作。

具体要求如下:

1.职工录入工资信息包括:

编号,姓名,基本工资,扣款,应发工资,税金,实发工资

2.程序主菜单如下:

"**************MENU*************",/*菜单的标题行*/

0.initlist/*初始化单链表*/

1.Enterlist/*输入数据,创建单链表*/

2.Listall/*显示所有记录*/

3.Calcthesalary/*计算实发工资*/

4.Searchrecordonname/*查找职工信息数据*/

5.Deletearecord/*删除记录*/

6.Sortonsfgz/*按实发工资升序排序*/

7.Computerticketnumber/*计算所需票面数*/

8.Totalonnumber/*分类合计*/

9.Quit/*退出*/

3.要求定义如下函数,对应菜单功能

/******函数原型*********/

voidinit();/*单链表初始化*/

voidcreate();/*创建单链表,输入数据*/

voidcalc();/*计算实发工资*/

voiddelete();/*删除*/

voidsearch();/*查找*/

voidcomputer();/*计算所需各种票面张数*/

voidsort();/*排序*/

voidlist();/*显示所有数据*/

voidprint(SALARY*p);/*输出单条记录*/

floatfax(floatx);/*计算税金*/

voidtotal();/*分类合计*/

intmenu_select();/*主菜单*/

二.程序的功能设计

此工资管理系统主要利用链表实现,由如下八个功能模块实现

1、输入模块。

主要完成输入工资信息的工作,并存入链表中。

2、输出模块。

主要完成对所有工人信息的输出。

3、修改模块。

主要完成对职工信息的修改工作。

4、插入模块。

主要完成对职工信息的插入工作。

5、查询模块。

主要完成对某个职工信息的查询工作。

6、删除模块。

主要完成对某退休或离职职工信息的删除。

7、排序模块。

主要完成对所有职工按实发工资进行的升序或降序排列。

8、保存模块。

主要完成对已经输入和修改或删除的保存文件。

9、退出。

退出系统

三.程序的数据结构

本程序运用结构体、单项链表等数据结构。

职工信息结构体如下:

structworker//定义数据结构//

{

charno[11];//编号//

charname[15];//姓名//

charxb[10];//性别//

doublejbgz;//基本工资//

doublekoukuan;//扣款//

doubleyfgz;//应发工资//

doubleshuijin;//税金//

doublesfgz;//实发工资//

charpost[10];//职位//

structworker*next;

};

typedefstructworkerSTU;//结构体类型名///

四、程序的函数设计

1.函数的功能描述

intmenu_select(void);//主菜单//

STU*append(STU*head);//添加记录//

STU*appendNode(STU*head);

voidlist(STU*head);//显示所有数据//

STU*modify(STU*head);//修改职工记录//

STU*modifyNode(STU*head);

void*search(STU*head);//查询职工信息//

void*no(STU*head);//编号查询//

void*name(STU*head);//姓名查询//

STU*dele(STU*head);//删除职工信息//

STU*deleNode(STU*head,chark[11]);

void*save(STU*head);//保存文件//

STU*insert(STU*head);//插入职工信息//

STU*tax(STU*head);//计算税金//

STU*calc(STU*head);//计算应发工资//

STU*total(STU*head);//计算实发工资//

STU*sort(STU*head);//对职工信息进行排序//

STU*insort(STU*head);//升序函数//

STU*desort(STU*head);//降序函数//

void*index(STU*head);//分类统计//

void*index1(STU*head);

void*index2(STU*head);

void*index3(STU*head);

void*index4(STU*head);

intuser_ID();//登录账户函数//

STU表示结构体类型名

Head表示链表的头结点

2.、函数的调用关系

voidmain()

{intch;

chara;

STU*head=NULL;

system("color02");//背景色/前景色的设置(0黑色、1蓝色、2绿色、3浅绿色、4红色、5紫色、6黄色、7白色、8灰色、9淡紫色、A淡绿色、B淡浅绿色、C淡红色、D淡紫色、E淡黄色、F亮白色)//

a=getchar();

while(!

a);

system("cls");

user_ID();

while

(1)

{

ch=menu_select();

switch(ch)

{

case1:

head=append(head);

break;//制作工资表//

case2:

list(head);

break;//输出所有的职工的信息//

case3:

head=modify(head);

break;//修改职工信息//

case4:

head=insert(head);

break;//插入职工信息//

case5:

search(head);

break;//查询职工信息//

case6:

head=dele(head);

break;//删除职工信息//

case7:

head=sort(head);

break;//对职工信息进行排序//

case8:

save(head);

break;//保存文件//

case9:

index(head);

break;//分类统计//

case0:

exit(0);//退出//

default:

printf("Inputerror!

\n");

break;

}

}

五、程序源代码

#include

#include

#include

#include

#include

#include

structworker//定义数据结构//

{

charno[11];//编号//

charname[15];//姓名//

charxb[10];//性别//

doublejbgz;//基本工资//

doublekoukuan;//扣款//

doubleyfgz;//应发工资//

doubleshuijin;//税金//

doublesfgz;//实发工资//

charpost[10];//职位//

structworker*next;

};

typedefstructworkerSTU;//结构体类型名//

/******函数原型*********/

intmenu_select(void);//主菜单//

STU*append(STU*head);//添加记录//

STU*appendNode(STU*head);

voidlist(STU*head);//显示所有数据//

STU*modify(STU*head);//修改职工记录//

STU*modifyNode(STU*head);

void*search(STU*head);//查询职工信息//

void*no(STU*head);//编号查询//

void*name(STU*head);//姓名查询//

STU*dele(STU*head);//删除职工信息//

STU*deleNode(STU*head,chark[11]);

STU*insert(STU*head);//插入职工信息//

STU*tax(STU*head);//计算税金//

STU*calc(STU*head);//计算应发工资//

STU*total(STU*head);//计算实发工资//

STU*sort(STU*head);//对职工信息进行排序//

STU*insort(STU*head);//升序函数//

STU*desort(STU*head);//降序函数//

voidindex(STU*head);//分类统计//

voidindex1(STU*head);

voidindex2(STU*head);

voidindex3(STU*head);

voidindex4(STU*head);

intuser_ID();//登录账户函数//

voidmain()

{intch;

chara;

STU*head=NULL;

system("color02");//背景色/前景色的设置(0黑色、1蓝色、2绿色、3浅绿色、4红色、5紫色、6黄色、7白色、8灰色、9淡紫色、A淡绿色、B淡浅绿色、C淡红色、D淡紫色、E淡黄色、F亮白色)//

printf("&****&****&****&****&****&****&****&\n");

printf("**欢迎使用工资管理系统**\n");

printf("************************************\n");

printf("**************************表头***************************\n");

printf("**********@@@实验名称:

工资管理系统**********\n");

printf("**********@@@学校:

西安科技大学**********\n");

printf("**********@@@姓名:

张帝**********\n");

printf("**********@@@学号:

1107050415**********\n");

printf("**********@@@专业:

电子信息工程**********\n");

printf("*********************************************************\n");

printf("&&&&&&&&&&&&********按任意键继续********&&&&&&&&&&&&&&&&&\n");

a=getchar();

while(!

a);

system("cls");

user_ID();

while

(1)

{

ch=menu_select();

switch(ch)

{

case1:

head=append(head);

break;//制作工资表//

case2:

list(head);

break;//输出所有的职工的信息//

case3:

head=modify(head);

break;//修改职工信息//

case4:

head=insert(head);

break;//插入职工信息//

case5:

search(head);

break;//查询职工信息//

case6:

head=dele(head);

break;//删除职工信息//

case7:

head=sort(head);

break;//对职工信息进行排序//

case8:

index(head);

break;//分类统计//

case0:

exit(0);//退出//

default:

printf("Inputerror!

\n");

break;

}

}

}

intmenu_select(void)

{intch;

printf("&*************主菜单*************************&\n");

printf("*1.制作工资表*\n");

printf("*2.输出所有的职工的信息*\n");

printf("*3.修改职工的信息*\n");

printf("*4.插入职工信息*\n");

printf("*5.查询职工的信息*\n");

printf("*6.删除职工的信息*\n");

printf("*7.对职工信息进行排序*\n");

printf("*8.分类统计*\n");

printf("*0.退出*\n");

printf("&********************************************&\n");

printf("请输入你的选择:

");

scanf("%d",&ch);

returnch;

}

STU*append(STU*head)

{charc;

system("cls");

do{head=appendNode(head);//向链表末尾添加一个节点//

printf("确认添加新纪录请按Y/y!

");

printf("其他键视为不添加!

\n");

printf("你想添加一个新的记录吗(Y/N)?

");

scanf("%c",&c);

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

system("cls");

returnhead;

}

STU*appendNode(STU*head)

{

STU*p=NULL;

STU*pr=head;

p=(STU*)malloc(sizeof(STU));//为新添加的节点申请内存//

if(p==NULL)//若申请内存失败,则输出错误信息,退出程序//

{

printf("Noenoughmemorytoalloc");

exit(0);

}

if(head==NULL)//若原链表为空,则将新建节点置为首节点//

{

head=p;

}

else

{

while(pr->next!

=NULL)//若未到表尾,则继续移动指针pr,直到pr指向表尾//

{

pr=pr->next;

}

pr->next=p;//将新建节点添加到链表的末尾//

}

pr=p;//让pr指向新建节点//

printf("输入职工的编号:

");

scanf("%s",p->no);

printf("输入职工的姓名:

");

scanf("%s",p->name);

printf("输入职工的性别:

");

scanf("%s",p->xb);

printf("输入职工的职位:

");

scanf("%s",p->post);

printf("输入职工的月基本工资:

");

scanf("%lf",&p->jbgz);

printf("输入职工的月扣款数:

");

scanf("%lf",&p->koukuan);

p->sfgz=0;//初始实发工资为0//

p->shuijin=0;//初始税金为0//

p->yfgz=0;//初始应发工资为0//

pr->next=NULL;//将新建节点置为表尾//

returnhead;

}

voidlist(STU*head)

{

STU*p=head;

system("cls");

if(p==NULL)

printf("工资表为空请重新输入!

!

\n");

else

{head=calc(head);

head=tax(head);

head=total(head);

printf("*************************************工资表*******************\n");

printf("编号\t姓名\t性别\t职位\t基本工资\t扣款\t应发工资\t实发工资");

while(p!

=NULL)

{printf("%s\t%s\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n",p->no,p->name,p->xb,p->post,p->jbgz,p->koukuan,p->yfgz,p->sfgz);

p=p->next;}

}

}

STU*modify(STU*head)

{

charc;

STU*p=NULL;

STU*q=head;

system("cls");

do{p=modifyNode(head);

printf("继续修改请按Y/y!

");

printf("其他键视为不修改!

\n");

printf("你想继续修改记录吗(Y/N)?

");

scanf("%c",&c);

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

returnhead;

}

STU*modifyNode(STU*head)

{inti,j;

chark[11];

STU*p=NULL;

STU*q=head;

system("cls");

if(q==NULL)

{printf("工资表为空请重新输入!

!

\n");

returnhead;}

printf("请输入你想修改的职工的编号:

");

scanf("%s",k);

while(q&&strcmp(q->no,k)!

=0)//做比较判断//

q=q->next;//没找到,指针后移继续查找//

if(q==NULL)//指针为空,说明没有找到//

{printf("Notfound!

\n");

returnhead;

}

else

{printf("编号\t姓名\t性别\t职位\t基本工资\t扣款\t应发工资\t实发工资");

printf("%s\t%s\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n",q->no,q->name,q->xb,q->post,q->jbgz,q->koukuan,q->yfgz,q->sfgz);

printf("按1修改职工编号\n");

printf("按2修改职工姓名\n");

printf("按3修改职工性别\n");

printf("按4修改职工职位\n");

printf("按5修改职工基本工资\n");

printf("按6修改职工扣款数\n");

printf("请输入要修改的列名:

");

scanf("%d",&i);

switch(i)

{case1:

system("cls");

printf("请输入修改后的职工编号:

");

scanf("%s",q->no);

system("cls");

printf("\n\n是否继续修改?

\n");

printf("是请输入1\n");

printf("否请输入2\n");

printf("你的选择:

");

scanf("%d",&j);

switch(j)

{

case1:

p=modifyNode(head);break;

case2:

system("cls");break;

default:

printf("Inputerror!

\n");

break;

}

break;

case2:

system("cls");

printf("请输入修改后的职工姓名:

");

scanf("%s",q->name);

system("cls");

printf("\n\n是否继续修改?

\n");

printf("是请输入1\n");

printf("否请输入2\n");

printf("你的选择:

");

scanf("%d",&j);

switch(j)

{

case1:

modifyNode(head);break;

case2:

system("cls");break;

default:

printf("Inputerror!

\n");

break;

}

break;

case3:

system("cls");

printf("请输入修改后的职工性别:

");

scanf("%s",q->xb);

system("cls");

printf("\n\n是否继续修改?

\n");

printf("是请输入1\n");

printf("否请输入2\n");

printf("你的选择:

");

scanf("%d",&j);

switch(j)

{

case1:

modifyNode(head);break;

case2:

system("cls");break;

default:

printf("Inputerror!

\n");

break;

}

break;

case4:

system("cls");

printf("请输入修改后的职工职位:

");

sc

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

当前位置:首页 > 人文社科 > 法律资料

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

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