C语言程序设计职工信息管理系统链表Word格式文档下载.docx
- 文档编号:18010432
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:33
- 大小:432.96KB
C语言程序设计职工信息管理系统链表Word格式文档下载.docx
《C语言程序设计职工信息管理系统链表Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计职工信息管理系统链表Word格式文档下载.docx(33页珍藏版)》请在冰豆网上搜索。
函数为voidAdd(Node*woker)
原理:
采用尾插法,先建立链表与头结点,新增一个结点,键盘输入职工号、职工姓名、职工性别、职工出生年月、职工学历、职工职位、职工工资,将这些信息存储到新增结点中,将新增加的节点连到链表的尾端,如此以往,将尾结点的指针域置空,这样就得到了一条存储职工信息的链表,这样就完成了职工信息的创建与增加。
显示模块:
该模块功能是显示职工信息。
函数为voidDisp(Node*woker)
先新建一个指针P指向头结点,判断它的指针域是否为空,若为空,则输出“没有记录可以显示”;
若不为空,则输出它的指针域所指向节点所储存的职工信息,并将该指针向后移一个结点,直到P指向空,即输出了所有职工的信息,这样就完成了所有职工信息的显示。
查找模块:
该模块功能是查找职工信息。
函数为voidTongji(Node*woker)
该模块分为两种查找方法,分别是按职工号查找和按职工姓名查找,因为这两种查找方法雷同,所以这里将只解释按职工号查找的原理。
先键盘输入一个要查找的职工号并新建一个指针P指向头结点,判断它的指针域是否为空,若为空,则输出“没有资料可以统计分类”,若不为空,则判断它的指针域所指向节点所储存的职工信息中的职工号,若相等,则输出这个职工的其他所有信息,并将P指向下一个结点,再次进行判断,直到P指向空,即输出了所有查找到的信息。
若不相等,则P指向下一个结点,再次进行判断,直到P指向空,即输出了所有查找到的信息,这样就完成了职工信息的查找。
修改模块:
该模块功能是修改职工信息。
函数为voidchange(Node*woker)
根据查找原理,查找到要修改信息的职工,删除这一节点,并新建一个节点,键盘输入想要修改的内容,并储存到新的结点中,将新的节点连接到链表中原先删除结点的位子,这样就完成了职工信息的修改。
删除模块:
该模块功能是删除管理职工信息。
函数为voiddismiss(Node*woker)
根据查找的原理,查找到要修改信息的职工,删除这一节点,并将其前驱结点的指针域指向其后继结点,这样就完成了职工信息的删除。
存档模块:
将内存中的信息存储到文件中。
函数为voidsave(Node*woker)
打开文件,新建一个指针P指向头结点,判断它的指针域是否为空,若为空,则输出“无记录”,若不为空,则将这个职工的所有信息输入到文件中,并将P指向下一个结点,直到P指向空,即输入了的信息,
文件统计模块:
打开文件,统计职工数目,并输出。
函数为voidload(Node*woker)
退出模块:
该模块功能是退出管理档案。
(3)重要数据结构,重要模块/函数算法;
1:
voidAdd(Node*woker)//添加记录
{
Node*p,*r,*s;
charn[10];
//先用于输入职工号,也用于判断是否跳出循环
r=woker;
s=woker->
next;
//使s为第一个有用的结点
while(r->
next!
=NULL)//这个循环的作用是使r为最后一个有用的结点
r=r->
//将指针置于最末尾
while
(1)
{
printf("
>
提示:
输入0则返回主菜单!
\n"
);
\n请你输入职工号:
"
scanf("
%s"
n);
if(strcmp(n,"
0"
)==0)break;
p=(Node*)malloc(sizeof(Node));
//申请空间
strcpy(p->
data.num,n);
\n请输入姓名:
p->
data.name);
\n请输入性别:
data.sex);
\n请输入出生年月:
&
p->
data.birthday);
\n请输入学历:
data.degree);
\n请输入职位:
data.position);
\n请输入工资:
data.salary);
已经完成一条记录的添加。
p->
next=NULL;
r->
next=p;
//这一步是必需的,将p与先前的链表连起来构成一条新链表
r=p;
//也是必需的.将r又重设为新链的最后一个有用结点
}
2:
显示模块
voidDisp(Node*woker)//输出职工信息
Node*p;
p=woker->
if(!
p)
\n>
没有记录可以显示!
return;
\t\t\t\t显示结果\n"
职工号职工姓名职工性别职工生日职工学历职工职位职工工资\n"
while(p)
\n%-13s%-11s%-7s%-10s%-13s%-10s%-5s\n"
data.num,p->
data.name,p->
data.sex,p->
data.birthday,p->
data.degree,p->
data.position,p->
p=p->
3:
查找模块
voidTongji(Node*woker)//查找统计函数
intsel;
intflag2=0,ha=0;
charfind[20];
woker->
next)//若链表为空
没有资料可以统计分类!
printf("
\n=====>
0退出\n=====>
1按职工号统计\n=====>
2按职工姓名名称统计\n"
scanf("
%d"
sel);
if(sel==1)
\n输入你要统计分类的职工号:
find);
while(p)
{
if(strcmp(p->
data.num,find)==0)
{
flag2++;
}
if(flag2==1&
&
ha!
=flag2)
{printf("
ha=flag2;
}
elseif(flag2>
ha){printf("
ha=flag2;
if(flag2)
\n*************************按设备号%s统计分类的有%d条记录:
*************************\n\n"
find,flag2);
else{printf("
\n按职工号%s统计的结果为0个\n\n"
elseif(sel==2)
\n输入你要统计分类的职工姓名:
data.name,find)==0)
\n******************按设备名称%s统计的有%d条记录:
********************\n\n"
\n按职工姓名%s统计分类的结果为0个\n\n"
elseif(sel==0)return;
4:
修改模块
voidchange(Node*woker)//修改职工信息函数
next)
没有资料可以修改!
请输入要修改的职工号:
p=woker->
while(p!
=NULL)
data.num,find)==0)//如果找到的话返回的是符合要求
break;
if(p)
intx;
while
(1)
完成修改请输入0否则输入任意数再进行修改:
x);
if(x==0)
{break;
}
请输入新职工号(原来是%s):
data.num);
请输入新职工姓名(原来是%s):
请输入新职工性别(原来是%s):
请输入新出生年月(原来是%s):
请输入新职工学历(原来是%s):
请输入新职工职位(原来是%s):
请输入新职工工资(原来是%s):
该项记录资料已经成功修改!
elseprintf("
你要修改的信息不存在!
5:
删除模块
voiddismiss(Node*woker)//删除职工信息函数
{Node*p,*r,*s;
charfind[10];
next)
没有资料可以显示!
return;
请输入您要删除的职工号!
while(p!
if(strcmp(p->
data.num,find)==0)//如果找到的话返回的是符合要求
break;
p=p->
找不到您想删除的职工号!
else
{r=woker;
=p)
s=r->
r->
next=r->
next->
6:
存档模块
voidsave(Node*woker)//将职工信息保存到文件
intn;
FILE*fp;
//指向文件的指针
需要保存吗?
(1-保存0-不保存)"
n);
if(n)
if(woker->
next==NULL)
printf("
无记录"
elsep=woker->
if((fp=fopen("
职工管理系统.dat"
"
wb"
))==NULL)//打开文件,并判断打开是否正常
cannotopenfile\n"
//打开文件出错
=NULL)
fprintf(fp,"
%s%s%s%s%s%s%s"
data.num,&
data.name,&
data.sex,&
data.birthday,&
data.degree,&
data.position,&
fclose(fp);
//关闭文件
7:
文件统计模块
voidload(Node*woker)
{Node*p,*q;
intrecordNum;
//统计记录数
if((fp=fopen("
rb"
))==NULL)//打开文件
//不能打开
p=woker;
recordNum=0;
while(!
feof(fp))
{q=(Node*)malloc(sizeof(Node));
fscanf(fp,"
/*从文件读入记录*/
next=q;
q->
p=q;
recordNum++;
文件里共有%d条记录:
recordNum);
8:
主函数模块
voidmain()
Node*woker;
intflag;
Node*p,*q;
\t\t\t\t职工信息管理系统\n"
woker=(Node*)malloc(sizeof(Node));
woker->
p=woker;
**************************************目录**************************************"
\n1添加记录\n"
\n2修改记录\n"
\n3浏览记录\n"
\n4分类查找记录\n"
\n5删除记录\n"
\n6从文件读取记录\n"
\n0*-EXIT-*\n"
请输入你要操作的序号:
flag);
switch(flag)
case0:
已经退出系统,ByeBye!
case1:
Add(woker);
save(woker);
//增加记录
case2:
change(woker);
//修改记录
case3:
Disp(woker);
//显示记录信息
case4:
Tongji(woker);
//查找记录
case5:
dismiss(woker);
//删除记录
case6:
load(woker);
break;
//读取记录
default:
输入错误!
(4)程序的运行和测试结果
主界面:
创建与增加模块:
输入职工信息为:
职工号
职工姓名
职工性别
职工出生年月
职工学历
职工职位
职工工资
1
A
f
11
aa
a
1000
2
B
m
22
bb
b
2000
3
C
33
cc
c
3000
4
D
44
dd
d
4000
输入第一次时:
输入第二次时:
输入第三次时:
输入第四次时:
输入四次后显示的结果为:
输入查找职工号为3的职工信息:
输入查找职工姓名为c的职工信息:
修改模块:
修改职工号为3的职工信息为:
5
E
55
ee
e
5000
职工信息变成:
删除职工号为5的职工信息:
删除后的结果为:
四、实验中的问题及心得
此次实践课编写的是一个应用程序,相对于以前我们见到的程序,它要大得多,运行的结果也没有预想中的好,数据的输出格式不太规范,而且各模块也出现了一些小问题,在老师和同学的帮助下,我很有耐心的一次又一次的进行修改,最后运行的结果基本上达到了预期的目的。
本次C语言的实习课让我对C语言的学习又有了更深入的了解,也让我更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中学到的知识远远超过了在课堂上十几周学到的,这次程序设计课让我增添了许多程序设计经验,为我们将来走上工作岗位其了不小的铺垫作用。
本次实习中遇到了很多以前没有遇到过的问题,也曾想过要放弃,但看到那些同学都在那认真的写程序,给了我继续的信心。
在同学和老师的帮助下,我顺利的结束了本次实习,让我知道原来凭借自己努力取得的成功会让自己这么欣慰,也让我知道了友谊和团结的重要性。
(4)程序清单
#include"
stdio.h"
stdlib.h"
string.h"
structwokers//定义一个woker的结构体
charnum[10];
//职工号
charname[15];
//职工姓名
charsex[15];
//职工性别
charbirthday[15];
//职工出生年月
chardegree[10];
//职工学历
charposition[10];
//职工职位
charsalary[10];
//职工工资
};
typedefstructnode
structwokersdata;
structnode*next;
//建立一个链表。
}Node;
\n请你输入职工
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 职工 信息管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)