C语言职工信息系统链表Word文档下载推荐.docx
- 文档编号:16997991
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:20
- 大小:230.36KB
C语言职工信息系统链表Word文档下载推荐.docx
《C语言职工信息系统链表Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言职工信息系统链表Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
)返回count。
出口
用hamming(>
调用函数bin<
)
Hamming函数
循环体
Bin函数
算法设计:
<
1)算法描述:
因为hamming函数需要分别将两个整数转换为合法代码,因此编写函数“voidbin(intn,charstr[]>
”。
Bin函数的功能是将形参n转换为合法代码并保存到b指向的一维数组中。
Hamming函数先两次调用bin函数,分别将形参X和Y转换为合法代码并分别保存到a和b指向的一维数组中,在用循环语句从前向后遍历a和b指向的数组各元素,函数最后返回统计结果。
2)实现方法:
用VC6.0软件进行调试,分析,输入m,n两个值,进行分析,调用函数hanmming<
),在从hanmming<
)函数中调用函数bin<
),返回count的值,输出,a,b数组中的值和返回值count的值。
源代码:
#include<
stdio.h>
voidbin(intn,charstr[]>
{
inti=15,j。
while(n!
=0>
{
str[i--]=n%2+'
0'
。
n/=2。
}
for(j=0。
j<
=i。
j++>
str[j]='
str[16]='
\0'
}
inthamming(intx,inty,chara[],charb[]>
intcount=0,i。
bin(x,a>
bin(y,b>
for(i=0。
i<
16。
i++>
if(a[i]!
=b[i]>
count++。
returncount。
voidmain(>
chara[17],b[17]。
intm,n,x。
FILE*fp。
fp=fopen("
myf2.out"
"
w"
>
if(fp==NULL>
printf("
error"
do{
scanf("
%d,%d"
&
m,&
n>
}while(m>
32767&
&
m<
0&
n<
0>
x=hamming(m,n,a,b>
\n%s\n%s\ndistanceof%dand%dis%d\n"
a,b,m,n,x>
fprintf(fp,"
11145107"
fclose(fp>
程序调试:
就是输入的时候,n和m的值范围问题,当输入范围不正确时候跳不出来
解决方法:
用一个do{}while。
循环条件为大于32767和小于0的时候退出。
测试:
第二部分
职工信息管理系统
1)题目名称:
内容:
职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等<
职工号不重复)。
试设计一职工信息管理系统,使之能提供以下功能:
1、职工信息录入功能(职工信息用文件保存,也可不用>
2、职工信息浏览功能
3、排序:
按工资排序
4、查询或排序功能:
(至少一种查询方式:
顺序、折半查找)
按工资范围查询
5、职工信息删除、修改功能(任选一项>
2)解题的基本思路
程序采用模块化,每一个模块对应一种功能,调用函数予以实现,分别为7个模块,分别是创建与添加模块、显示模块、查找模块、修改模块、删除模块、存档模块、文件统计模块、退出模块,把复杂的问题分成每一个独立功能的小问题来解决。
3)设计方案
1、功能模块图
按姓名查找
(4)算法设计
该程序主要分为7个模块,分别是创建与添加模块、显示模块、查找模块、修改模块、删除模块、存档模块、文件统计模块、退出模块
创建与添加模块:
该模块的功能是输入职工信息。
函数为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>
退出模块:
该模块功能是退出管理档案。
5)程序调试与测试:
欢迎界面:
主界面:
创建与增加模块:
输入职工信息为:
职工号
职工姓名
职工性别
职工出生年月
职工学历
职工职位
职工工资
1
A
f
11
ben
a
1000
2
B
m
22
b
2000
3
C
33
c
3000
4
D
44
d
4000
输入第一次时:
输入第二次时:
输入第三次时:
输入第四次时:
输入四次后显示的结果为:
输入查找职工号为3的职工信息:
输入查找职工姓名为c的职工信息:
修改模块:
修改职工号为3的职工信息为:
5
E
55
ee
e
5000
职工信息变成:
删除职工号为5的职工信息:
删除后的结果为:
6)总结
此次实践课编写的是一个应用程序,相对于以前我们见到的程序,它要大得多,运行的结果也没有预想中的好,数据的输出格式不太规范,而且各模块也出现了一些小问题,我很有耐心的一次又一次的进行修改,最后运行的结果基本上达到了预期的目的。
本次C语言的实习课让我对C语言的学习又有了更深入的了解,也让我更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中学到的知识远远超过了在课堂上学到的,这次程序设计课让我增添了许多程序设计经验,为我们将来走上工作岗位其了不小的铺垫作用。
本次实习中遇到了很多以前没有遇到过的问题,也曾想过要放弃,但看到那些同学都在那认真的写程序,给了我继续的信心。
在同学和老师的帮助下,我顺利的结束了本次实习,让我知道原来凭借自己努力取得的成功会让自己这么欣慰。
7)附录:
源代码
#include<
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。
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又重设为新链的最后一个有用结点
voidchange(Node*woker>
//修改职工信息函数
Node*p。
charfind[20]。
if(!
woker->
next>
\n>
没有资料可以修改!
return。
请输入要修改的职工号:
find>
p=woker->
while(p!
if(strcmp(p->
data.num,find>
//如果找到的话返回的是符合要求
p=p->
if(p>
intx。
while(1>
完成修改请输入0否则输入任意数再进行修改:
%d"
x>
if(x==0>
{break。
}
请输入新职工号(原来是%s>
:
data.num>
请输入新职工姓名(原来是%s>
请输入新职工性别(原来是%s>
请输入新出生年月(原来是%s>
请输入新职工学历(原来是%s>
请输入新职工职位(原来是%s>
请输入新职工工资(原来是%s>
该项记录资料已经成功修改!
elseprintf("
你要修改的信息不存在!
voidDisp(Node*woker>
//输出职工信息
p=woker->
p>
没有记录可以显示!
\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->
voidTongji(Node*woker>
//查找统计函数
intsel。
intflag2=0,ha=0。
//若链表为空
没有资料可以统计分类!
\n=====>
0退出\n=====>
1按职工号统计\n=====>
2按职工姓名名称统计\n"
sel>
if(sel==1>
\n输入你要统计分类的职工号:
while(p>
{
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>
\n\n\n共查找到%d条记录:
\n\n"
flag2>
\n按职工姓名%s统计分类的结果为0个\n\n"
elseif(sel==0>
voidload(Node*woker>
{Node*p,*q。
//指向文件的指针
intrecordNum。
//统计记录数
if((fp=fopen("
职工管理系统.txt"
"
rb"
==NULL>
//打开文件
cannotopenfile\n"
//不能打开
p=woker。
recordNum=0。
while(!
feof(fp>
{q=(Node*>
fscanf(fp,"
%s%s%s%s%s%s%s"
/*从文件读入记录*/
next=q。
q->
p=q。
recordNum++。
文件里共有%d条记录:
recordNum>
voidsave(Node*woker>
//将职工信息保存到文件
intn。
需要保存到文件吗?
1—保存,0—不保存)"
if(n==1>
if(woker->
next==NULL>
printf("
无记录"
elsep=woker->
if((fp=fopen("
wb"
//打开文件,并判断打开是否正常
//打开文件出错
data.num,&
data.name,&
data.sex,&
data.birthday,&
data.degree,&
data.position,&
p=p->
//关闭文件
voiddismiss(Node*woker>
//删除职工信息函数
{Node*p,*r,*s。
charfind[10]。
没有资料可以显示!
return。
请
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 职工 信息系统