用简单链表管理员工信息.docx

上传人:b****5 文档编号:29045477 上传时间:2023-07-20 格式:DOCX 页数:12 大小:39.47KB
下载 相关 举报
用简单链表管理员工信息.docx_第1页
第1页 / 共12页
用简单链表管理员工信息.docx_第2页
第2页 / 共12页
用简单链表管理员工信息.docx_第3页
第3页 / 共12页
用简单链表管理员工信息.docx_第4页
第4页 / 共12页
用简单链表管理员工信息.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

用简单链表管理员工信息.docx

《用简单链表管理员工信息.docx》由会员分享,可在线阅读,更多相关《用简单链表管理员工信息.docx(12页珍藏版)》请在冰豆网上搜索。

用简单链表管理员工信息.docx

用简单链表管理员工信息

沈阳航空工业学院

课程设计

学号200604021008

班级6402101

姓名赵慧慧

指导教师王晓岩

年月日

沈阳航空工业学院

课程设计任务书

院系:

电子专业:

电子信息工程班级:

6402101学号:

200604021008题目:

用简单链表管理员工信息

一、课程设计时间

2007年9月10日至2007年9月14日,共计1周,20学时。

二、课程设计内容

用C语言编写软件完成以下任务:

从键盘输入4位员工的信息到动态创建的线性单向链表中;然后通过访问该链表,将其中的所有节点中的员工信息存放到文件myfile.dat中。

每位员工的信息如下:

杜永宁软件部5760王传华销售部3920

殷泳培训部2940杨柳青软件部5440。

三、课程设计要求

1.程序质量:

✧贯彻结构化的程序设计思想。

✧用户界面友好,功能明确,操作方便。

✧用户界面中的菜单至少应包括“输入员工信息”、“显示员工信息”、“保存员工信息”、“退出”4项。

✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。

2.课程设计说明书:

课程结束后,上交课程设计说明书和源程序。

课程设计说明书的格式和内容参见提供的模板。

四、指导教师和学生签字

指导教师:

________学生签名:

________

五、说明书成绩

六、教师评语

 

目录

一、需求分析1

二、程序流程图2

三、核心技术的实现方法、程序段及注释4

四、个人总结8

五、参考文献8

六、源程序8

 

一、需求分析

经过对程序设计题目的分析可知,整个程序的设计实现大致分为三个模块,其中每一个模块对应一个函数,他们的功能分别是输入员工信息函数,显示员工信息的函数和保存员工信息的函数,具体如下:

1.定义一个结构体,分别输入员工的姓名、所在部门和编号信息。

2.创建三个自定义子函数,用于输入、显示和保存。

3.创建主函数,通过主函数实现对子函数的调用执行程序设计任务。

4.退出函数,实现终止程序的执行。

退出函数属于附加函数,可以在一次运行当中循环执行所有的功能,并根据需要最终终止程序的执行。

每一个员工的纪录都包含姓名、所在部门、编号三个信息。

在程序当中,将员工信息类型定义为结构体类型,添加的员工信息直接写入d盘的myfile.dat文件中,现实函数每次对员工纪录的访问,其数据来源都是myfile.dat文件。

二、程序流程图

1.程序总体流程图

 

 

2.具体功能设计

(1)向链表添加节点的函数Insertlist

p为整个链表的头,in为要插入的节点,t为新节点

p=Null

Returnt

如果p->next为真

p=p->next

p->next=t;

returnh

 

(2)输出信息函数Print

定义初始化数据

输出“姓名”,“部门”,“编号”

当(out!

=Null)

out=out->next

(3)保存信息函数Save

如果文件为空

Return0

p!

=Null

p=p->next

三、核心技术的实现方法、程序段及注释

本程序主要由一个定义的结构体、三个子函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。

在这些函数当中,输入员工信息函数、显示员工信息函数和保存信息函数是程序中较为核心的部分,下面分别进行说明。

1.添加员工信息的函数Insertlist

(1)该函数用于插入节点,定义了文件指针,打开员工信息的文件。

(2)如果输入的数据为空,则返回t,如果输入的数据不为空,则由p=p->next输出下一个节点。

具体函数段如下,

structyuangong*InsertList(structyuangong*p,conststructyuangong*in)//从链表插入一个节点

{

structyuangong*t=(structyuangong*)malloc(sizeof(structyuangong)),*h=p;

*t=*in;

t->next=NULL;

if(p==NULL)

returnt;

else

{

while(p->next)

p=p->next;

p->next=t;

returnh;

}

}

2.输出信息的函数Print

Print的作用在于显示出输入的员工信息,当进入系统后通过选择自动显示所有员工的信息。

Out先指向第一个结点,当输出完第一个结点之后,out指向第二个结点。

程序中out=->next的作用是将out原来所指向的结点中next的值赋给out,而out->next的值就是第二个结点的起始地址。

将它赋给out,就是使out指向第二个结点。

具体函数段如下,

voidPrint(conststructyuangong*out)//子函数,输出信息

{

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

printf("%-30s%-30s%-30s\n","姓名","部门","编号");

while(out!

=NULL)

{

printf("%-30s%-30s%-30d\n",out->name,out->bumen,out->num);

out=out->next;

}

}

3.保存信息函数Save

如果文件为空,则返回;如果文件不为空并且有数据,则保存成功,p=p->next就指向下一个节点。

具体函数段如下,

voidsave(structyuangong*p)//子函数,保存信息

{

inti;

FILE*fp;

if((fp=fopen("d:

\\myfile.dat","wb"))==NULL)

return;

for(i=0;p!

=NULL;i++)

{

if(fwrite(p,sizeof(structyuangong),1,fp)!

=1)

printf("保存失败!

");

p=p->next;

}

fclose(fp);

}

4.主函数

在主函数中我应用了switch函数,通过多分支选择语句对三个子菜单进行调用,供选择。

具体函数段如下,

main()

{

intchoice;

structyuangong*start=NULL,t;

FILE*fp;

if((fp=fopen("myfile.dat","rb"))==NULL)

return0;

while((choice=memu())!

=4)

{

switch(choice)

{

case1:

printf("*******请输入员工的姓名、部门、编号:

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

scanf("%s%s%d",&t.name,&t.bumen,&t.num);

start=InsertList(start,&t);

break;

case2:

Print(start);

break;

case3:

save(start);

printf("保存成功!

\n");

break;

default:

puts("错误:

非法命令!

");

break;

}

}

Print(fp,start);

return0;

}

四、个人总结

通过这一周的课设使我学到了许多,起初我对这个题目完全不知道该从哪看起,但经过向老师请教和与同学讨论,渐渐地我知道了怎样建立一个链表,怎样向链表插入节点。

我觉得这次课设不仅锻炼了我们的思维,还增强了我们的分析问题能力,使我觉得在你编程序时,即使一个小小的标点也会出很多问题,就会使整个程序无法进行下去。

当自己把问题都解决时觉得这一周没有浪费时间,这一周的负出总算有点成果了。

所以在以后的学习中我们要多动脑、多思考、多讨论,此次课设使我受益匪浅。

五、参考文献

1谭浩强.C程序设计.北京:

清华大学出版社,2005

2刘成等.C语言程序设计实验指导与习题集.北京:

中国铁道出版社,2006

六、源程序

#include

#include

#include

structyuangong

{//定义一个结构体

charname[30];

charbumen[30];

intnum;

structyuangong*next;

};

structyuangong*InsertList(structyuangong*p,conststructyuangong*in)//从链表插入一个节点

{

structyuangong*t=(structyuangong*)malloc(sizeof(structyuangong)),*h=p;

*t=*in;

t->next=NULL;

if(p==NULL)

returnt;

else

{

while(p->next)

p=p->next;

p->next=t;

returnh;

}

}

 

voidPrint(conststructyuangong*out)//子函数,输出信息

{

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

printf("%-30s%-30s%-30s\n","姓名","部门","编号");

while(out!

=NULL)

{

printf("%-30s%-30s%-30d\n",out->name,out->bumen,out->num);

out=out->next;

}

}

voidsave(structyuangong*p)//子函数,保存信息

{

inti;

FILE*fp;

if((fp=fopen("d:

\\myfile.dat","wb"))==NULL)

return;

for(i=0;p!

=NULL;i++)

{

if(fwrite(p,sizeof(structyuangong),1,fp)!

=1)

printf("保存失败!

");

p=p->next;

}

fclose(fp);

}

intmenu(void)//菜单

{

inta;

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

printf("***输入1请输入员工信息***\n"

"***输入2显示员工信息***\n"

"***输入3保存***\n"

"***输入4退出***\n");

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

scanf("%d",&a);

return(a);}

main()//主函数

{

intchoice;

structyuangong*start=NULL,t;

FILE*fp;

if((fp=fopen("d:

\\myfile.dat","w"))==NULL)

return0;

while((choice=menu())!

=4)

{

switch(choice)

{

case1:

printf("*******请输入员工的姓名、部门、编号:

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

scanf("%s%s%d",&t.name,&t.bumen,&t.num);

start=InsertList(start,&t);

break;

case2:

Print(start);

break;

case3:

save(start);

printf("保存成功!

\n");

break;

default:

puts("错误:

非法命令!

");

break;

}

}

Print(fp,start);

return0;

}

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

当前位置:首页 > 成人教育 > 专升本

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

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