课程设计文档格式.docx
- 文档编号:8125099
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:20
- 大小:125.81KB
课程设计文档格式.docx
《课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《课程设计文档格式.docx(20页珍藏版)》请在冰点文库上搜索。
voidDel_LinkList(LinkListhead)5
(六)通讯录链表的输出:
voidOutput_LinkList(LinkListhead)6
(七)主函数:
voidmain()6
四、系统测试7
(一)测试intmenu_select()函数7
(二)测试LinkListCreat_LinkList()函数8
(三)测试voidInsert_LinkList(LinkListhead,LNode*p)函数8
(四)测试LNode*Find_LinkList(LinkListhead)函数8
(五)测试voidDel_LinkList(LinkListhead)函数8
(六)测试voidOutput_LinkList(LinkListhead)函数9
(七)测试系统的退出9
五、总结9
六、附件(代码、部分图表)9
通讯录管理系统
一、系统开发的背景
为了便于人们对通讯者基本信息进行管理,方便快速的查找到所需信息,因此开发出通讯录管理系统。
二、系统分析与设计
(一)系统功能要求
录入通讯者的基本信息,按通讯者编号或姓名,可以查询通讯者的电话或地址等信息。
1、建立通讯者基本信息(包括编号、姓名、电话、地址、qq等);
2、有插入、查询、删除通讯者结点功能;
3、可以输出通讯者信息。
(二)系统模块结构设计
通过对系统功能的分析,通讯录管理系统功能如图1所示。
图1通讯录管理系统功能图
通过上图的功能分析,把整个系统划分为7个模块:
1、通讯录系统菜单选择,该模块主要实现:
通讯录管理系统中各项功能的选择,借助函数intmenu_select()来实现;
2、通讯录链表的建立,该模块主要实现:
通讯者基本信息(编号、姓名、电话、地址、qq)的建立,借助函数LinkListCreat_LinkList()来实现;
3、通讯者结点的插入,该模块主要实现:
将一个通讯者记录的数据结点按其编号的次序插入通讯表相应位置,新增结点,借助函数voidInsert_LinkList(LinkListhead,LNode*p)来实现;
4、通讯者结点的查询,该模块主要实现:
通过通讯者编号或姓名,从表头顺序访问表中结点,查找该结点是否存在,借助函数LNode*Find_LinkList(LinkListhead)来实现;
5、通讯者结点的删除,该模块主要实现:
调用查询函数,查找到要删除的结点,删除该结点,借助函数voidDel_LinkList(LinkListhead)来实现;
6、通讯录链表的输出,该模块主要实现:
输出通讯录中所有通讯者的信息,借助函数voidOutput_LinkList(LinkListhead)来实现;
7、退出管理系统,该模块主要实现:
提示用户是否退出通讯录系统,n=0时,退出管理系统。
三、系统的设计与实现
intmenu_select()
该模块的具体代码如下所示。
intmenu_select()
{
intn;
printf("
~~~~通讯录管理系统~~~~\n"
);
\n"
1.通讯录链表的建立\n"
printf("
2.通讯者结点的插入\n"
3.通讯者结点的查询\n"
4.通讯者结点的删除\n"
5.通讯录链表的输出\n"
0.退出管理系统\n"
~~~~~~~~~~~~~~~~\n"
请选择0-5:
"
for(;
;
)
scanf("
%d"
&
n);
if(n<
0||n>
5)
printf("
\n\t输入错误,重选0-5:
"
else
break;
}
returnn;
}
LinkListCreat_LinkList()
LinkListCreat_LinkList()//尾插法建立带头结点的通讯录链表算法
{
LinkListhead=(LNode*)malloc(sizeof(LNode));
//申请头结点
LNode*p,*rear;
intflag=0;
//结束标志置0
rear=head;
//尾指针初始指向头结点
while(flag==0)
p=(LNode*)malloc(sizeof(LNode));
//申新结点
编号姓名电话地址qq\n"
scanf("
%s%s%s%s%s"
p->
data.num,p->
data.name,p->
data.phone,p->
data.addr,p->
data.qq);
rear->
next=p;
//新结点连接到尾结点之后
rear=p;
//尾指针指向新结点
结束建表吗?
(1/0):
flag);
rear->
next=NULL;
//终端结点指针置空
returnhead;
//返回链表头指针
voidInsert_LinkList(LinkListhead,LNode*p)
voidInsert_LinkList(LinkListhead,LNode*p)
LNode*p1,*p2;
p1=head;
p2=p1->
next;
while(p2!
=NULL&
&
strcmp(p2->
data.num)<
0)
p1=p2;
//p1指向刚访问过的结点
p2=p2->
//p2指向表的下一个结点
}
p1->
//插入p所指向的结点
p->
next=p2;
//连接表中剩余的结点
LNode*Find_LinkList(LinkListhead)
LNode*Find_LinkList(LinkListhead)//通讯录链表上的查找
LNode*p;
charnum[5];
charname[9];
intz;
1.按编号\n"
2.按姓名\n"
请选择:
p=head->
z);
if(z==1)
printf("
请输入编号:
%s"
num);
while(p&
strcmp(p->
data.num,num)<
0)
p=p->
if((p==NULL)||strcmp(p->
data.num,num)>
p=NULL;
//没有查到要查找的通讯
elseif(z==2)
请输入姓名:
name);
while(p&
data.name,name)!
=0)
returnp;
voidDel_LinkList(LinkListhead)
charj;
LNode*p,*q;
p=Find_LinkList(head);
//调用查找函数
if(p==NULL)
没有查到要删除的通讯者!
}
elseif(p!
=NULL)
是否删除该结点?
(y/n)"
scanf("
j);
if(j=='
y'
||j=='
Y'
{
q=head;
if(q->
next==p)
{q=q->
q->
next=p->
//删除结点
free(p);
}
else
{
for(;
)
{
if(q->
next!
=p)
q=q->
else
break;
}
q->
free(p);
//释放被删结点空间
删除成功!
voidOutput_LinkList(LinkListhead)
编号姓名电话地址qq\n"
while(p!
=NULL)
%s,%s,%s,%s,%s\n"
//后移一个结点
voidmain()
该模块的具体代码如下所示。
voidmain()
for(;
switch(menu_select())
case1:
*通讯录链表的建立*\n"
head=Creat_LinkList();
case2:
*通讯者结点的插入*\n"
//申请新结点
scanf("
Insert_LinkList(head,p);
case3:
*通讯者结点的查询*\n"
p=Find_LinkList(head);
if(p!
{
printf("
}
没有查到要查询的通讯者!
break;
case4:
*通讯者结点的删除*\n"
Del_LinkList(head);
case5:
*通讯录链表的输出*\n"
Output_LinkList(head);
case0:
\t再见!
\n"
return;
四、系统测试
(一)测试intmenu_select()函数
图XXXXXXXXX
(二)测试LinkListCreat_LinkList()函数
(三)测试voidInsert_LinkList(LinkListhead,LNode*p)
函数
(四)测试LNode*Find_LinkList(LinkListhead)函数
(五)测试voidDel_LinkList(LinkListhead)函数
(六)测试voidOutput_LinkList(LinkListhead)函数
(七)测试系统的退出
五、总结
该管理系统完成了通讯录的建立,添加,查询,删除,输出等功能。
该课程设计利用一个简单实用的菜单,通过菜单进行选择,实现和完成了通讯录管理中的不同功能。
此次课程设计利用链表结构来解决实际应用问题的能力,使我进一步理解和熟悉了线形表的链式存储结构。
在程序编写中,我借助单链表的建立、插入、查找、删除及链表的输出算法来实现了通讯录的各项功能。
其中,通讯录的删除操作存在问题,每次进行删除操作时,进行是否删除选项后,总会返回菜单选项,并没有删除掉要求删除的结点;
进行改错时,我明白了删除该结点时,需找到它的前驱结点,而不是都指向头结点。
通过此次课程设计,我对链表的基本运算有了更深层的理解,在以后的程序编写中,我会更多的加强练习,争取理解每一步算法。
六、附件(代码、部分图表)
流程图:
代码:
#include"
stdio.h"
#include"
string.h"
stdlib.h"
typedefstruct{//通讯录结点类型
charname[10];
charphone[15];
charaddr[20];
charqq[12];
}DataType;
typedefstructnode{//结点类型定义
DataTypedata;
//结点数据域
structnode*next;
//结点指针域
}LNode;
typedefLNode*LinkList;
LinkListhead;
intmenu_select()
LinkListCreat_LinkList()//尾插法建立带头结点的通讯录链表算法
voidInsert_LinkList(LinkListhead,LNode*p)
LNode*Find_LinkList(LinkListhead)//通讯录链表上的查找
voidDel_LinkList(LinkListhead)
voidOutput_LinkList(LinkListhead)
voidmain()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计