通讯录链表课程设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

一、摘要 (2)

一、实验内容 (3)

1.1问题描述 (3)

1.2选题目的 (3)

二、概要设计 (3)

3.1功能函数 (3)

3.2主程序流程图 (3)

三、实验结果 (4)

四、部分实验结果的截图 (4)

4.1主页面 (4)

4.2 通讯录链表的建立的页面 (4)

4.3通讯录链表的插入的页面 (5)

4.4通讯录链表的查询的页面 (5)

4.5通讯录链表的删除的页面 (6)

4.6通讯录链表的输出的页面 (6)

五、实验心得 (6)

六、部分功能代码 (7)

七、参考文献 (13)

八、附录 (14)

摘要

本课程设计主要利用结构类型,指针,函数等C语言知识来实现通讯录链表的建立、通讯录结点的插入、通讯录结点的删除、通讯录结点的查询、通讯录链表的输出、退出管理这六大功能。

关键字:结构类型通讯录结点

通讯录管理链表课程设计

一、实验内容:

1.1问题描述:

给出n个学生的基本信息,信息包括学生的学号、姓名、性别、年龄、电话号码、家庭住址,并能进行查询、删除、插入、输出操作,设计一个简单的学生信息管理程序。

1.2选题目的:

本课程设计可加深对C语言的理解,增强动手能力,以培养学生合作的能力,为毕业设计作好实践环节上的准备。通讯录系统是在学校常见的计算机信息管理系统。它的主要任务是对个人信息进行管理,如学生信息的输入、查询、修改、增加、删除,迅速准确地完成各种学生信息的统计和查询。

二、概要设计:

3.1功能函数:

菜单选择函数程序:intmenu_select();

用尾插法建立通讯录链表函数:linklistcreatelist(void);

在有序链表head中插入结点:voidinsertnode(linklisthead,listnode *p);

通讯录链表上的查找:listnode *listfind(linklist head);

通讯录链表上结点的删除:voiddelnode(linklist head);

通讯录链表上结点的输出:voidprintlist(linklist head);

新建结点:linklistinsertdata(void);

3.2主程序流程图:

三、实验结果:

实现了题目要求的基本功能,没有功能的拓展。

四、部分实验结果的截图:

4.1主页面:

4.2 通讯录链表的建立的页面:

4.3通讯录结点的插入页面:

4.4通讯录结点的查询的页面:

4.5通讯录结点的删除的页面:

4.6通讯录链表的输出页面:

五、实验心得:

在大学本科阶段就对C语言有了一定的了解,但是从没像现在这样完整的去做个系统,通过这次课程设计我充分认识到了指针的灵活性,当然也存在着一定的复杂性,本实验还存在着一定的欠缺,例如当存在两个学号不一样姓名一样的同学时,通过姓名查询时只能输出一个,由于时间的限制,现在只能做到这样实现基本的功能,课后我会努力找到解决此问题的方法,总之这次课程设计让我感慨良多,受益匪浅,让我学到很多东西。

六、部分功能代码:

1.建立通讯录链表的设计

要建立链表,首先要生成结点,因此,尾插法建立链表,算法描述如下:(1)使链表的头尾指针head、real指向新生成的头结点(也是尾结点); (2)置结束标志为0(假);

(3)while(结束标志不为真)

{

P指向新生成的结点;

读入一个通讯者数据至新结点的数据域;

将新结点链到尾结点之后;

使尾指针指向新结点;

提示:是否结束建表,读入一个结束标志;

}

(4)尾结点指针域置空值NULL.

具体算法实现如下:

linklistcreatelist(void)

{ //尾插法建立带头结点通讯录链表算法

linklist head=(listnode *)malloc(sizeof(listnode));

listnode *p,*rear ;

int flag=0; //结束标志置0

rear=head; //尾指针初始指向头结点

while(flag==0)

{ p= insertdata();

rear->next=p; //新结点连接到尾结点之后

rear=p; //尾指针指向新结点

printf("结束建表吗?(1/0):");

scanf("%d",&flag); //读入一个标志数据

}

rear->next=NULL; //终端结点指针域置空

return head; //返回链表头指针

}

2.通信者信息的插入

链表结点的插入,是要求将一个通讯者数据结点按其编号的次序插入有序通讯录表的相应位置,以保持通讯录表的有序性,插入结点的基本思想是:使用两个指针变量p1和p2分别指向当前刚访问过的结点和下一个待访问的结点,循环顺序查找链表,寻找插入结点的位置,其中p1指向待插入位置的前一个结点。算法描述如下:

(1)用p1指向原链表头结点,p2指向链表的第一个结点;

(2)While(p2!=NULL&&p2->data.numdata.num)

{

p1=p2; //p1指向刚访问过的结点;

p2=p2->next; //p2指向表的下一个结点;

}

(3)插入新结点。具体实现如下:

voidInsertNode(LinkListhead,ListNode *p)

{

ListNode *p1,*p2;

相关文档
最新文档