C语言链表员工信息管理系统实验报告材料册Word文档下载推荐.docx

上传人:b****5 文档编号:20666530 上传时间:2023-01-24 格式:DOCX 页数:27 大小:150.83KB
下载 相关 举报
C语言链表员工信息管理系统实验报告材料册Word文档下载推荐.docx_第1页
第1页 / 共27页
C语言链表员工信息管理系统实验报告材料册Word文档下载推荐.docx_第2页
第2页 / 共27页
C语言链表员工信息管理系统实验报告材料册Word文档下载推荐.docx_第3页
第3页 / 共27页
C语言链表员工信息管理系统实验报告材料册Word文档下载推荐.docx_第4页
第4页 / 共27页
C语言链表员工信息管理系统实验报告材料册Word文档下载推荐.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

C语言链表员工信息管理系统实验报告材料册Word文档下载推荐.docx

《C语言链表员工信息管理系统实验报告材料册Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言链表员工信息管理系统实验报告材料册Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。

C语言链表员工信息管理系统实验报告材料册Word文档下载推荐.docx

统计员工信息:

统计员工中各个等级的员工个数,并打印;

排序:

根据员工分数,降序排列员工信息,并打印;

保存:

利用指针函数保存链表中的信息;

3.2模块功能描述

第4章调试与实现

4.1调试中遇到的重点和难点

在使用链表时对于链表节点的指向不清,操作地址混淆

4.2解决办法

利用画图的方法,明确对指针指向的问题

4.3实现展示

显示员工信息

主程序显示

查询

删除

统计

第5章总结

通过此次实验,让我认识到了自身能力的不足,也发现了平时一些不易发现的小毛病,让我意识到了程序中,任何一个小的细节,将会导致的大问题,比如在此次程序的编写中,一个微不足道的取地址符将会导致内存的崩溃和输出内容的错误,使我养成了检查代码的习惯;

此次程序中,我使用的是链表,在学习数据结构理论知识时,觉得链表使用应该是简单,方便,快捷的,但通过此次实践证明,理论与实际的巨大差距,不但对指针的认识更加具体,也让我磨炼了意志力,学会了责任与担当,挑战了个人能力,认识自身缺点。

第6章代码清单

#include"

windows.h"

stdio.h"

stdlib.h"

string.h"

intsaveflag=0;

//是否需要存盘的标志变量

structworker

{

charname[10];

charnum[10];

//工号

charsex[5];

intsorce[5];

chardj[10];

};

typedefstructnode

structworkerdata;

structnode*next;

}Node,*Link;

//Linkl(注意是:

字母l不是数字1)

voidadd(Linkl);

voiddisp(Linkl);

//查看员工所有信息

voiddel(Linkl);

//删除功能

Node*Locate(Linkl,charfindmess[],charnameornum[]);

voidserch(Linkl);

//查询功能

voidTongji(Linkl);

//统计

voidSort(Linkl);

//排序

voidChange(Linkl);

//修改功能

voidsave(Linkl);

//将链表中的数据写入文件

voidprinte(Node*p);

//本函数用于打印链表中某个节点的数据内容

//以下4个函数用于输出中文标题

voidprintstart();

voidWrong();

voidNofind();

voidprintc();

voidShow_Window()

{

system("

colorF4"

);

printf("

\t*****************************************************************\n"

\t**\n"

\t*[1]增加员工信息[2]删除员工信息*\n"

\t*[3]查询员工信息[4]修改员工信息*\n"

\t*[5]插入员工记录[6]统计员工记录*\n"

\t*[7]排序[8]保存员工信息*\n"

\t*[9]显示数据[0]退出系统*\n"

}//voidShow_Window菜单结束

voidDisp(Linkl)//显示链表中存储的员工记录,内容为worker结构中定义的内容

intcount=0;

Node*p;

p=l->

next;

//l存储的是单链表中头结点的指针,该头结点没有存储员工信息,指针域指向的后继结点才有员工信息

if(!

p)/*p==NULL,NUll在stdlib中定义为0*/

{

printf("

\n\t提示:

没有员工记录可以显示!

\n"

return;

}

\t\t\t\t显示结果\n"

printstart();

//打印横线

printc();

//打印标题

while(p)//逐条输出链表中存储的员工信息

printe(p);

p=p->

}//voidDisp结束

voidprintstart()

-----------------------------------------------------------------------\n"

}

voidWrong()

\n输入错误!

voidNofind()

\n没有找到该员工!

voidprintc()

\t工号\t姓名\t性别\t成绩\t等级\n"

voidprinte(Node*p)//用于打印链表中某个节点的数据内容

\t%s\t%s\t%s\t%d\t%s\t\n"

p->

data.num,p->

data.name,p->

data.sex,*p->

data.sorce,p->

data.dj);

//用于定位连表中符合要求的结点,并返回该指针

Node*Locate(Linkl,charfindmess[],chargh[])

Node*r;

if(strcmp(gh,"

num"

)==0)//按工号查询

r=l->

while(r!

=NULL)

{

if(strcmp(r->

data.num,findmess)==0)//若找到findmess值的工号

returnr;

r=r->

}

return0;

//若未找到,返回一个空指针

//add()函数中,无节点时,r指向list头,有节点时,r指向末尾节点

voidAdd(Linkl)//增加员工

Node*p,*r,*s;

//实现添加操作的临时的结构体指针变量

intflag=0;

r=l;

s=l->

//链表没有节点时,s=null;

/链表有节点时,指向第一个员工节点

while(r->

next!

=NULL)//如果存在后继结点时,r指针后移一个

r=r->

//将指针移至于链表最末尾,准备添加记录

while

(1)

请输入工号(以'

0'

返回上一级菜单):

"

scanf("

%s"

num);

if(strcmp(num,"

0"

)==0)//输入'

跳出while

(1),即跳出add()函数

break;

s=l->

//每次从第一个节点开始找,看num是否重复。

while(s)//工号重复时,返回主菜单

if(strcmp(s->

data.num,num)==0)

{

printf("

\n提示:

工号为'

%s'

的员工已经存在,若要修改请你选择'

4修改'

!

flag=1;

//

return;

}

s=s->

}//

p=(Node*)malloc(sizeof(Node));

//生成没赋值的新节点p

strcpy(p->

data.num,num);

请输入姓名:

p->

data.name);

getchar();

请输入性别:

data.sex);

请输入员工成绩:

%d"

&

p->

data.sorce);

//getchar();

if(*p->

data.sorce<

=100&

&

*p->

data.sorce>

=90)

strcpy(p->

data.dj,"

优秀"

elseif(*p->

data.sorce<

90&

=80)

strcpy(p->

良好"

80&

=70)

中等"

70&

data.sorce>

=60)

合格"

60||*p->

data.sorce==NULL)

不合格"

//信息输入已经完成

next=NULL;

//表明这是链表的尾部结点

r->

next=p;

//将新建的结点加入链表尾部中

r=p;

saveflag=1;

printc();

Sleep(100);

}//while

(1)

}//voidAdd增加结束

voidDel(Linkl)//删除

intsel;

Node*p,*r;

//实现删除操作的临时的结构体指针变量

charfindmess[20];

l->

next)//当list无后继结点时,提示和结束返回del()

{

没有记录可以删除!

\n\t1按工号删除\n\t2按姓名删除\n"

scanf("

sel);

if(sel==1)//按工号删除

请输入要删除的工号:

findmess);

p=Locate(l,findmess,"

if(p)

r=l;

while(r->

=p)

r=r->

//从第一个结点找起,直到发现r->

next=p,是待删除结点,跳出循环

r->

next=p->

//rr->

next(p)p->

next

free(p);

printf("

该员工已经成功删除!

saveflag=1;

else

Nofind();

//显示一句话

}//if(sel==1)

elseif(sel==2)//按姓名删除

请输入要删除的姓名:

name"

}//if(sel==2)

else

Wrong();

//显示输入错误的话

}//voidDel删除结束

voidserch(Linkl)//查询功能

//实现查询操作的临时的结构体指针变量

next)

没有数据可以查询!

请输入要查找的工号:

\t\t\t\t查找结果\n"

printstart();

printc();

printe(p);

//打印p结点各个数据成员的值

voidChange(Linkl)//修改功能

没有资料可以修改!

请输入要修改的员工工号:

p=Locate(l,findmess,"

if(p)

请输入新工号:

data.num);

请输入新姓名:

请输入新性别:

请输入新的员工分数:

if(*p->

数据修改成功!

//shoudsave=1;

Nofind();

//if(p)结束

}//voidChange(Linkl)//修改功能结束

//插入记录:

按工号查询到要插入的节点的位置,然后在该工号之后插入一个新节点。

voidInsert(Linkl)

Node*s,*r,*p;

//p指向插入位置,p指新插入记录节点

charch,new_num[10],old_num[10];

//old_num[]保存插入点位置之前的工号,new_num[]保存输入的新记录的工号

cls"

Disp(l);

while

(1)

请你输入已存在的工号(以'

返回上一级菜单:

)"

old_num);

if(strcmp(old_num,"

跳出while

(1),即跳出Insert()函数

return;

//作用?

每次从第一个节点开始找

flag=0;

while(s)//查询该工号是否存在,flag=1表示该工号存在

{

data.num,old_num)==0)

{

break;

}

}

if(flag==1)

//若工号存在,则进行插入之前的新记录的输入操作

else

getchar();

\n该工号不存在,时候再次尝试?

(y/n):

scanf("

%c"

ch);

if(ch=='

y'

||ch=='

Y'

{continue;

}

else

{return;

}//回主菜单

}//while

(1)

//以下新记录的插入新节点,工号不能跟已存在的工号相同,操作与Add()相同

请你输入待插入的工号(以'

new_num);

if(strcmp(new_num,"

每次从第一个节点开始找,看num是否重复。

while(s)//工号重复时,返回主菜单

if(strcmp(s->

data.num,new_num)==0)

提示:

的员工已经存在'

flag=1;

return;

s=s->

}//while(s)

p=(Node*)malloc(sizeof(Node));

p)

\n\t错误!

不能申请所需的内存!

//如没有申请到,打印提示信息

return;

//返回主界面

}

strcpy(p->

data.num,new_num);

getchar();

请输入分数:

//信息输入已经完成

dat

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

当前位置:首页 > 工作范文 > 其它

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

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