数据结构实践课论文之通讯录系统管理
数据结构 通讯录管理系统

数据结构通讯录管理系统数据结构通讯录管理系统1、引言1.1 目的和范围本文档旨在详细描述一个通讯录管理系统的设计和实现,以便帮助开发人员了解系统的功能和特性。
本系统可以用于存储和管理个人联系信息,实现添加、删除、修改和查询等功能。
1.2 定义、缩略语和缩写词- 通讯录:存储个人联系信息的系统。
- 系统:通讯录管理系统。
2、总体概述2.1 系统背景通讯录管理系统是为了方便用户管理个人联系信息而开发的软件。
它提供了一系列功能,包括添加联系人、删除联系人、修改联系人信息以及搜索联系人等。
该系统旨在提供一个高效、方便和可靠的通讯录管理解决方案。
2.2 产品功能- 添加联系人:用户可以添加新的联系人,并输入其姓名、方式号码、电子邮箱等信息。
- 删除联系人:用户可以删除已经存在的联系人。
- 修改联系人信息:用户可以修改已经存在的联系人的姓名、方式号码、电子邮箱等信息。
- 搜索联系人:用户可以根据姓名、方式号码等信息搜索联系人。
- 显示所有联系人:系统可以显示所有已经存在的联系人。
2.3 用户特点通讯录管理系统的主要用户群体为个人用户,他们需要管理自己的联系人信息。
这些用户对于系统的易用性、稳定性和功能性要求较高,因此系统需要提供简单直观的用户界面,并保证操作的正确性和数据的安全性。
3、系统需求3.1 功能需求3.1.1 添加联系人- 用户可以输入联系人的姓名、方式号码、电子邮箱等信息进行添加。
- 系统应该对输入进行合法性检查,确保输入的信息符合格式要求。
- 添加联系人后,系统应该将联系人信息保存到数据库中。
3.1.2 删除联系人- 用户可以删除已经存在的联系人。
- 删除联系人后,系统应该将联系人信息从数据库中删除。
3.1.3 修改联系人信息- 用户可以修改已经存在的联系人的姓名、方式号码、电子邮箱等信息。
- 系统应该对输入进行合法性检查,确保输入的信息符合格式要求。
- 修改联系人信息后,系统应该将修改后的联系人信息保存到数据库中。
数据结构课程设计-通讯录管理系统

《数据结构》课程设计报告书题目:通讯录管理系统系别: 计算机科学与应用系学号:学生姓名:指导教师:完成日期: 2012年5月28日1 问题描述(1)题目内容:通讯录管理。
(2)基本要求:利用单链表实现通讯录的建立、通讯者的插入、通讯者的删除、通讯者的查询以及通讯录的输出。
(3)设计目的:通过本次课程设计,了解通讯录的一些基本功能。
掌握利用单链表进行插入,查找,用关键字建立单链表。
2 需求分析经过本次的课程设计,我认为通讯录主要实现的功能如下:(1)添加信息:一个通讯录应该有其基本的添加功能。
在程序设计时,我通过一个具有添加功能的函数,实现了个人信息的添加,如:姓名,性别,电话号码,QQ号码,地址。
(2)删除信息:当您不需要某个联系人的信息时,可以直接将该人的信息删除。
(3)查找:一个通讯录应该具有令一基本功能就就是查找,本设计时可以按联系人为关键字查找的,只要您输入要查找人的姓名或手机号码或QQ号码就可出来相应的个人信息。
(4)输出:一个通讯录应该具有输出所有联系人的功能,本设计按照次序可以从头到尾把通讯录中的所有联系人都输出,供自己查瞧。
(5)退出:当您做完您要做的事情之后,就可以退出该程序。
3 总体设计3、1 算法的定义LinkList Creat_LinkList()创建空单链表void Insert_LinkList(LinkList H)建立通讯录,录入联系人的信息,可以把联系人的姓名,性别,手机号,QQ号,地址录入系统。
void Locate_LinkList(LinkList H)按照联系人的姓名,手机号码,QQ号码查找通讯录中联系人的信息。
void Delete_LinkList(LinkList H)按照联系人的姓名,手机号码,QQ号码删除联系人的所有信息。
void print_LinkList(LinkList H)输出通讯录中的所有联系人的信息供使用者查瞧。
3、2 系统流程图图3-1通讯录管理功能图3、3 详细程序设计1)定义数据结构typedef struct Node //定义数据结构{char name[20];//姓名char sex[4]; //性别char tel[11];//电话号码char qq[13]; //qq号码char ad[100];//地址Node *next;//存放后继元素的地址}LNode,*LinkList;2)创建一个空的单链表LinkList Creat_LinkList(){//创建空单链表,入口参数无LinkList H;H=new LNode;if(H)//确认创建头结点创建就是否成功,若成功,修改单链表头结点的指针域为0表空表{H->next=NULL;}return H;}3)向通讯录中插入联系人void Insert_LinkList(LinkList H){LinkList p;p=new LNode;if(!p){cout<<"不能插入!"<<endl;}cout<<"请输入您要插入的联系人信息:"<<endl;cout<<"姓名:"<<endl;cin>>p->name;cout<<"性别:"<<endl;cin>>p->sex;cout<<"手机号码:"<<endl;cin>>p->tel;cout<<"QQ号码:"<<endl;cin>>p->qq;cout<<"地址:"<<endl;cin>>p->ad;p->next=H->next;H->next=p;cout<<"插入成功"<<endl;}4)查询通讯录中某个联系人的信息void Locate_LinkList(LinkList H){int x;LinkList p=H->next;cout<<"您要通过哪种方式查询?"<<endl;cout<<"1、通过联系人姓名查询"<<endl;cout<<"2、通过联系人手机号码查询"<<endl;cout<<"3、通过联系人QQ号码查询"<<endl;cin>>x;char str[30];if(x==1){cout<<"请输入您要查询的联系人的姓名:";cin>>str;while(p && strcmp(p->name,str)!=0){p=p->next;}}if(x==2){cout<<"请输入您要查询的联系人的手机号码:";cin>>str;while(p&&strcmp(p->tel,str)!=0){p=p->next;}}if(x==3){cout<<"请输入您要查询的联系人的QQ号码:";cin>>str;while(p&&strcmp(p->qq,str)!=0){p=p->next;}}if(p==NULL){cout<<"没有找到您要查找的联系人的信息!"<<endl;}else{cout<<"您要找的联系人的信息为:"<<endl;cout<<"姓名:"<<p->name<<endl;cout<<"性别:"<<p->sex<<endl;cout<<"手机号:"<<p->tel<<endl;cout<<"QQ号码"<<p->qq<<endl;cout<<"地址"<<p->ad<<endl;}}5)删除通讯录中某个联系人的信息void Delete_LinkList(LinkList H){if(H->next==NULL){cout<<"通讯录为空,不能删除"<<endl;}else{int x;char str[30];LinkList p,q;p=H->next;cout<<"请输入您要删除的方式:"<<endl;cout<<"1、按照联系人的姓名删除"<<endl;cout<<"2、按照联系人的手机号码删除"<<endl;cout<<"3、按照联系人的QQ号码删除"<<endl;cin>>x;q=H;if(x==1){cout<<"请输入您要删除的联系人的姓名:"<<endl;cin>>str;while(strcmp(p->name,str)!=0){q=p;p=p->next;}}if(x==2){cout<<"请输入您要删除的联系人的手机号码:"<<endl;cin>>str;while(strcmp(p->tel,str)!=0){q=p;p=p->next;}}if(x==3){cout<<"请输入您要删除的联系人的QQ号码:"<<endl;cin>>str;while(strcmp(p->qq,str)!=0){q=p;p=p->next;}}if(p==NULL){cout<<"没有您要删除的联系人的记录"<<endl;}else{q->next=p->next;p->next=NULL;free(p);cout<<"该联系人已删除"<<endl;}}}6)输出所有联系人void print_LinkList(LinkList H){if(H->next==NULL){cout<<"通讯录为空"<<endl;}else{LinkList p;p=H->next;while(p!=NULL){cout<<"性别:"<<p->sex<<endl;cout<<"手机号:"<<p->tel<<endl;cout<<"QQ号码:"<<p->qq<<endl;cout<<"地址:"<<p->ad<<endl;p=p->next;}}}7)主函数void main(){int a;LinkList List;List=Creat_LinkList();do{cout<<"*****欢迎进入通讯录管理*****"<<endl;cout<<"*****添加联系人请按1*****"<<endl;cout<<"*****查找联系人请按2*****"<<endl;cout<<"*****删除联系人请按3*****"<<endl;cout<<"*****输出所有联系人请按4*****"<<endl;cout<<"*****退出请按0*****"<<endl;cout<<"请输入您的选择:"<<endl;cin>>a;switch(a){case 0:break;case 1:Insert_LinkList(List);break;case 2:Locate_LinkList(List);break;case 3:Delete_LinkList(List);break;case 4:print_LinkList(List);break;}cout<<"操作完毕,请再次选择!"<<endl;}while(a!=0);}3、4 测试运行程序,瞧到主界面。
数据结构课程设计 通讯录 管理系统

《数据结构》课程设计题目:学生通讯录管理系统设计与实现院、系:计算机信息与技术系学科专业:计算机科学与技术学号: ********* 学生姓名:**指导教师:目录第一章设计要求 (3)1.1 问题描述 (3)1.2 需求分析 (3)第二章概要设计 (4)2.1 主界面设计 (4)2.2 存储结构设计 (4)2.3 系统功能设计 (4)第三章模块设计 (6)3.1 系统子程序及功能设计 (6)3.2 系统功能图 (7)第四章详细设计 (8)4.1 数据类型定义 (8)4.2 系统主要子程序详细设计 (8)第五章测试分析 (13)第六章源程序清单 (17)第七章工作总结 (18)第八章参考文献 (19)第九章附录—源代码 (20)第一章设计要求1.1 问题描述纸质通讯录已经不能满足大家的要求,容易丢失、查找困难等问题是纸质通讯录所有能克服的缺点。
“学生通讯录管理系统”是为了帮助老师、同学等管理和分析的一种应用程序。
1.2 需求分析1.建立一个新的通讯录2.查询通讯录中满足要求的信息3.插入新的通讯录信息4.删除不需要的通讯录信息5.查看所有通讯录信息6.能将所有的通讯录数据(*.x后缀)保存到磁盘上7.能将磁盘上的通讯录文件(*.x后缀)读到内存中进行操作8.能删除磁盘上已有的通讯录文件9.能释放一个现有通讯录所占的所有内存10.显示当前目录下的所有通讯录文件第二章概要设计2.1 主界面设计主界面的设计关乎到用户的使用体验以及使用效率。
所以一个好的主界面是征服用户的关键因素。
主界面的命令输入方式采用了类似DOS的命令行界面。
下图是输入了help后的界面:2.2 存储结构设计在内存中,通讯录中所有的节点均用单链表将其组织起来。
并在插入的时候按学号有序的排列,便于查找以及其它的操作。
2.3 系统功能设计1.初始化一个新的通讯簿。
2.向通讯簿中增加一条新的记录。
3.输出某个节点的信息。
4.显示通讯簿的所有信息。
数据结构课程设计通讯录管理系统报告

数据结构课程设计通讯录管理系统报告前言通讯录管理系统是一种常见的应用程序,用于帮助用户有效地组织和管理他们的联系人信息。
本报告旨在介绍和分析一个基于数据结构设计的通讯录管理系统,其中实现了基本的通讯录功能,并且通过合适的数据结构和算法进行优化。
功能需求通讯录管理系统需要实现以下基本功能: - 添加联系人信息 - 查找联系人信息 - 删除联系人信息 - 更新联系人信息 - 显示所有联系人信息数据结构选择为了实现通讯录管理系统的功能,我们选择使用链表作为数据结构。
链表是一种简单而灵活的数据结构,可以动态地添加或删除节点,非常适合存储联系人信息这种动态的数据。
在这里,我们采用双向链表,使得查找、插入和删除操作更加高效。
算法设计添加联系人信息添加联系人信息时,我们需要遍历链表找到合适的位置插入新节点,这里的算法复杂度为O(n),其中n表示链表的长度。
查找联系人信息查找联系人信息时,我们需要遍历链表查找目标节点,这里的算法复杂度为O(n)。
删除联系人信息删除联系人信息时,我们同样需要遍历链表找到目标节点并删除,其算法复杂度为O(n)。
更新联系人信息更新联系人信息时,我们首先需要查找到目标节点,然后进行更新操作,其算法复杂度也为O(n)。
系统优化为了提高系统的性能,我们可以通过以下几种方式进行优化: - 使用哈希表索引联系人信息,减少查找联系人的时间复杂度; - 引入缓存机制,减少频繁的IO 操作。
总结通过本报告的介绍和分析,我们了解了一个基于数据结构设计的通讯录管理系统的实现原理和优化方法。
在实际应用中,针对具体需求和场景,我们可以进一步优化系统性能,提升用户体验。
通讯录管理系统作为一种简单而实用的应用程序,将在日常生活中发挥重要作用。
学位论文—论文__通讯录管理系统

通讯录管理系统设计摘要随着交通的发展以及通信的发展,人们之间的距离越来越近了,范围也越来越大了,联系也越来越紧密了,这就迫切要求我们把所有人的联系方式统一管理起来,为此,本设计就为用户提供了一个管理联系方式的方法,本系统设计通过用ASP建立一个WEB平台管理联系方式信息,使用户可以随时随地管理自己的联系人资料,这个系统改变了人类生活中关于通讯录管理这一块,使人们搜索联系方式更方便,此系统会更加促进人们之间的关系往友好方向发展。
关键词:ASP,ACCESS,通讯录目录第1章绪论 (1)1.2.1 B/S架构与C/S架构的对比 (1)1.2.2 WEB编程语言对比 (2)第2章系统总体设计 (3)2.1 开发平台和应用技术搭建 (3)2.1.1 架构选择 (3)2.1.2 编程语言 (3)2.1.3 数据库 (3)2.1.4 编辑软件 (3)2.1.5 应用服务器 (4)2.2 软件总体功能 (4)第3章系统详细设计 (4)3.1 功能模块设计 (4)3.1.1 通讯录查询模块 (4)3.1.2 通讯录管理模块 (6)3.1.3 用户管理模块 (11)3.1.4 系统设置模块 (14)3.2 数据库设计 (15)3.2.1 通讯录表 (15)3.2.2 系统设置表 (15)3.2.3 用户表 (15)第4章系统实现技术 (16)4.1 软件实现技术 (16)4.1.1 统一风格 (16)4.1.2 数据库连接 (16)4.1.3 校验权限 (17)4.1.4 新建用户的校验 (17)4.2 关键模块的实现 (18)4.2.1 系统设置的实现 (18)4.2.2 列表行间隔显示 (18)4.2.3 模糊匹配所有字段 (18)第5章系统测试 (19)注释............................................... 错误!未定义书签。
参考文献.. (19)附录............................................... 错误!未定义书签。
数据结构通讯录管理系统报告

数据结构通讯录管理系统报告数据结构通讯录管理系统报告⒈系统介绍⑴目的和背景本通讯录管理系统旨在提供一个便捷的方式来管理个人联系人信息。
用户可以使用该系统添加、编辑和删除联系人信息,并实现相关功能,如搜索、排序等。
⑵功能概述本系统主要包含以下功能:●添加联系人:用户可以输入联系人的姓名、方式号码、电子邮件等信息来添加新的联系人。
●编辑联系人:用户可以对已存在的联系人进行信息的修改或更新。
●删除联系人:用户可以选择删除指定联系人以删除其相关信息。
●搜索联系人:用户可以根据姓名或方式号码进行联系人的快速搜索。
●排序联系人:用户可以对联系人按照姓名或方式号码等属性进行升序或降序排列。
●显示联系人:用户可以查看已存储的所有联系人信息。
⑶系统架构本系统基于数据结构的链表实现,通过使用链表结构来存储所有的联系人信息。
每个联系人都是链表的一个节点,包含姓名、方式号码等属性,以及指向下一个联系人的指针。
⒉系统设计⑴数据结构设计本系统使用链表来存储联系人信息。
链表的每个节点包含以下数据项:●姓名:联系人的姓名,类型为字符串。
●方式号码:联系人的方式号码,类型为字符串。
●电子联系人的电子邮件地质,类型为字符串。
●下一个节点的指针:指向下一个联系人节点的指针,类型为链表节点指针。
⑵系统模块设计本系统包含以下模块:●菜单模块:显示主菜单和相应的选项,接受用户输入并调用其他模块执行相应的操作。
●添加模块:添加新的联系人信息,包括姓名、方式号码、电子邮件等。
●编辑模块:修改已存在联系人的信息,如姓名、方式号码、电子邮件等。
●删除模块:删除指定联系人的信息。
●搜索模块:根据指定的姓名或方式号码搜索联系人信息。
●排序模块:按照姓名或方式号码等属性对联系人信息进行排序。
●显示模块:显示当前存储的所有联系人信息。
⒊系统实现⑴编程语言和工具本系统使用C++编程语言实现,使用了链表和相关的指针操作来实现联系人管理功能。
⑵算法设计●添加联系人:通过创建新的链表节点并将其插入到链表末尾来实现联系人的添加功能。
数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统
数据结构课程设计中的通讯录管理系统可以涉及到以下几个方面的知识点:
1. 数据结构:通讯录管理系统中需要使用到的数据结构包括数组、链表、哈希表等。
其中,数组用于存储通讯录中的人员信息,链表用于存储联系人信息,哈希表用于实现快速查找功能。
2. 算法:通讯录管理系统中需要使用到的算法包括查找算法、排序算法、动态规划算法等。
其中,查找算法用于实现快速查找联系人功能,排序算法用于实现通讯录的排序功能,动态规划算法用于实现最长公共子序列问题等。
3. 数据库:通讯录管理系统需要使用到数据库来存储通讯录中的数据。
需要掌握关系型数据库的设计和操作,包括数据表的设计、SQL 语句的编写等。
4. 界面设计:通讯录管理系统需要有友好的用户界面,需要进行界面设计和开发,包括前端技术的使用,如HTML、CSS和JavaScript等。
5. 系统测试:通讯录管理系统需要进行系统测试,包括功能测试、性
能测试等,确保系统能够正常运行并满足用户需求。
通过设计和实现通讯录管理系统,可以锻炼学生对数据结构和算法的理解和应用能力,同时还能提高学生的编程能力和团队合作能力。
数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统一、系统需求分析通讯录管理系统的主要目标是提供一个方便、高效的方式来管理联系人信息。
具体需求包括:1、能够添加联系人,包括姓名、电话号码、电子邮件、地址等基本信息。
2、可以对联系人信息进行修改和删除操作。
3、支持按照姓名、电话号码等关键字进行快速查找。
4、能够以列表形式展示所有联系人的信息。
二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储联系人信息。
考虑到联系人信息的多样性和动态性,链表是一个不错的选择。
链表可以方便地进行插入、删除和修改操作,并且能够灵活地调整存储空间。
另外,为了提高查找效率,我们可以结合使用哈希表。
通过将联系人的关键信息(如姓名或电话号码)进行哈希运算,快速定位到对应的联系人节点。
三、系统功能实现1、添加联系人功能当用户选择添加联系人时,系统会提示用户输入联系人的各项信息。
这些信息被封装成一个结构体,并通过链表的插入操作添加到链表中。
同时,将关键信息映射到哈希表中,以便后续快速查找。
2、修改联系人功能用户输入要修改的联系人的关键字,系统通过哈希表快速找到对应的联系人节点。
然后,提示用户输入修改后的信息,并更新链表和哈希表中的数据。
3、删除联系人功能与修改功能类似,通过关键字找到联系人节点,从链表和哈希表中删除相应的节点和信息。
4、查找联系人功能用户输入查找关键字,系统通过哈希表进行快速定位,如果找到匹配的联系人,则显示其详细信息。
5、展示所有联系人功能遍历链表,将所有联系人的信息以列表形式输出到屏幕上。
四、系统界面设计为了提高用户体验,系统设计了简洁直观的界面。
主界面提供了添加、修改、删除、查找和展示所有联系人等功能选项。
用户通过选择相应的选项,进入对应的操作流程。
五、代码实现示例以下是部分关键代码的示例:```c//联系人结构体typedef struct Contact {char name50;char phoneNumber20;char email50;char address100;struct Contact next;} Contact;//哈希表节点结构体typedef struct HashNode {char key50;Contact contact;struct HashNode next;} HashNode;//链表插入联系人void insertContact(Contact head, Contact newContact) {newContact>next = head;head = newContact;}//哈希函数unsigned int hashFunction(const char key) {unsigned int hash = 0;while (key) {hash =(hash << 5) + key++;}return hash % HASH_TABLE_SIZE;}//查找联系人Contact findContact(Contact head, const char key, HashNode hashTable) {unsigned int hashValue = hashFunction(key);HashNode node = hashTablehashValue;while (node) {if (strcmp(node>key, key) == 0) {return node>contact;}node = node>next;}Contact current = head;while (current) {if (strcmp(current>name, key) == 0 ||strcmp(current>phoneNumber, key) == 0) {//更新哈希表HashNode newNode =(HashNode )malloc(sizeof(HashNode));strcpy(newNode>key, key);newNode>contact = current;newNode>next = hashTablehashValue;hashTablehashValue = newNode;return current;}current = current>next;}return NULL;}```六、系统测试在完成系统的开发后,需要进行全面的测试以确保系统的稳定性和可靠性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
景德镇陶瓷学院学院《数据结构教程》课程设计论文题目一:通讯录管理系统题目七:二叉树建立,先序、层次遍历学号:114060300109专业班级:14信管(1)班姓名:刘清指导老师:李娟完成日期:2016/1/15题目一:通讯录管理系统摘要:通讯录管理是一个比较实用的小型管理系统,该系统用于对通讯人员的姓名、电话号码的管理。
该设计采用菜单作为应用程序的主要界面,用控制语句来改变程序执行的顺序,控制语句是实现结构化程序设计的基础。
该设计的任务是利用一个简单实用的菜单,通过菜单项进行选择,实现和完成通讯录管理中常用的几个不同的功能。
关键词:查询单链表一、需求分析a)功能需求分析1>通过菜单,与用户实现信息交互,进而完成用户需求。
2>当用户选择某一功能之后,系统开始运行程序,实现用户的这一功能。
b)环境需求分析开发环境操作系统:Windows 7开发软件: VisualC++c)方法需求分析该系统由于数据可能会很大,故采用文件操作,能够打开或修改指定文件及将多个文件组成一个文件。
d)输入的形式和输入值的范围本程序中,输入通讯录的信息:编号、姓名、性别、联系电话、地址。
e)输出的形式1.当用户选择创建通讯录功能时,程序输出提示,要求用户输入新建联系人的信息,包括编号(程序中我起名为序列号)、姓名、性别、联系电话以及地址。
2.当用户选择查询联系人信息的时候,系统会提示用户是按名字搜索还是按编号搜索,之后系统便会把该编号(或该名字)对应的联系人的信息输出(包括联系人编号、姓名、性别、联系电话、地址)。
3.当用户选择删除联系人的信息时,也只需要把联系人的编号或者名字输入,系统依据该编号和名字找对应的联系人,然后将其删除。
4.当用户选择输出全部联系人的信息的时,系统不会提示用户输入任何信息,系统会调出所有储存的数据(即联系人信息),输出。
5.当用户不需要使用该通讯录管理系统的时,系统提示结束语,系统返回初始界面。
f)测试数据使用合法数据进行程序调试,不断完善程序本身。
二、概要设计(总体设计)程序功能结构图三、详细设计程序运行流程图四、代码设计(1)主函数设计void main() // 主函数{sequenlist *L;DataType *student;int i, n = 0;L = (sequenlist *)malloc(sizeof(sequenlist));while(1){switch(menu_select()) //用switch函数判断用户输入的指令进行分析调用相应函数{case 1:printf("***********************************\n");printf("联系人线性表的建立\n"); printf("***********************************\n");createList(L);writeToText(L, stu,n); //写入文件操作break;case 2:printf("***********************************\n");printf("添加联系人信息\n");printf("请输入要添加的联系人的信息:\n");printf("\n序列号姓名性别电话地址\n");printf("***********************************\n");student = (DataType*)malloc(sizeof(DataType));fflush(stdin);scanf("%s%s%s%s%s",student->num,student->name,student->gender,student->tel,student->addr);printf("请输入要插入的位置:\n");scanf("%d", &i);insert(L, student, i); //调用插入函数break;case 3:printf("***********************************\n");printf("联系人线性表的建立\n"); printf("***********************************\n");i = findList(L);if(i != -1){printf("您要查询的联系人为:\n序列号姓名性别电话\n");printf("------------------------------\n");printf("%s%s%s%s%s", L->stu[i].num,L->stu[i].name, L->stu[i].gender, L->stu[i].tel,L->stu[i].addr);printf("------------------------------\n");}elseprintf("没有你要查询的联系人的信息!");break;case 4:printf("***********************************\n");printf("删除联系人信息\n");printf("***********************************\n");delNode(L);break;case 5:printf("***********************************\n");printf("输出所有联系人的信息\n");printf("***********************************\n");printList(L);break;case 0:printf("感谢你的使用 ^_^");getch();return;}}}(2)源代码/** 程序名称:通讯录管理系统* 创建日期:2016/ 01 / 12* 创建人: @刘清lqing*/#include <stdio.h>#include <string.h>#include <malloc.h>#include <conio.h>#define MAXSIZE 100typedef struct {char num[8]; //联系人序列号char name[8]; //联系人姓名char gender[8]; //联系人性别char tel[11]; //联系人电话char addr[20]; //联系人地址}DataType;DataType stu[MAXSIZE]; //定义全局数组typedef struct{DataType stu[MAXSIZE];int length;}sequenlist;int menu_select() //菜单选择{int sn;printf("\n");printf("===========================================\n");printf(" 1.联系人信息线性表的建立\n");printf(" 2.插入联系人信息\n");printf(" 3.查询联系人信息\n");printf(" 4.删除联系人信息\n");printf(" 5.输出所有联系人的信息\n");printf("0.退出通讯录管理系统\n");printf("===========================================\n");printf("\n请选择 0 — 5:\n");for(;;){scanf("%d", &sn);if(sn < 0 || sn > 5)printf("\n\t你的输入有误,请重新选择序号.\n"); // 判断用户输入的信息正确性elsebreak;}return sn;}void createList(sequenlist *L) //创建列表{int i;static int n;printf("要输入几位联系人?请输入:\n");//fflush(stdin);scanf("%d", &n);printf("以下请输入这%d位联系人的信息:\n");for(i = 0; i < n; i++){printf("第%d位联系人:", i);printf("\n序列号姓名性别电话地址\n");fflush(stdin);scanf("%s%s%s%s%s", L->stu[i].num, L->stu[i].name, L->stu[i].gender, L->stu[i].tel, L->stu[i].addr);}L->length = n;}void printList(sequenlist *L) //输出联系人(打印){int i;printf("\n序列号姓名性别电话地址\n");printf("--------------------------------------\n"); for(i = 0; i < L -> length; i++){printf("第%d位联系人:", i);printf("%s%s%s%s%s\n", L->stu[i].num,L->stu[i].name, L->stu[i].gender, L->stu[i].tel,L->stu[i].addr);printf("--------------------------------------");}}int insert(sequenlist *L, DataType *student, int i) //插入联系人(新建/添加联系人){int j;if(L-> length == MAXSIZE){printf("overflow!!!"); //超过限制弹出警告(提示) return 0;}else if((i < 0)|| (i > L->length)){printf("error, please input the right 'i'"); //提示用户在规定的范围内输入正确的指令return 0;}else{for(j = L->length-1; j >= i; j--){strcpy(L->stu[j+1].num, L->stu[j].num);strcpy(L->stu[j+1].name, L->stu[j].name);strcpy(L->stu[j+1].gender, L->stu[j].gender); strcpy(L->stu[j+1].tel, L->stu[j].tel);strcpy(L->stu[j+1].addr, L->stu[j].addr);}strcpy(L->stu[i].num, student->num);strcpy(L->stu[i].name, student->name);strcpy(L->stu[i].gender, student->gender);strcpy(L->stu[i].tel, student->tel);strcpy(L->stu[i].addr, student->addr);L->length = L->length + 1;}return 1;}int findList(sequenlist *L) //查找联系人{char num[8];char name[9];int i = 0, xz;printf("===============================\n");printf("1、按序列号查询\n");printf("2、按姓名查询\n");printf("===============================\n");printf("请选择\n");fflush(stdin);scanf("%d", &xz);if(xz == 1){printf("请输入要查找联系人的序列号:");scanf("%s", num);for(i = 0; i < L-> length; i++){if(strcpy(L->stu[i].num, num) == 0)return i;}}else if(xz == 2){printf("请输入要查找联系人的姓名:");scanf("%s", name);for(i = 0; i < L-> length; i++){if(strcpy(L->stu[i].name, name)== 0)return i;}}return -1;}void delNode(sequenlist *L) //删除联系人{int i, j;printf("请先查找你要删除的联系人信息:\n");i = findList(L);if(i == -1){printf("没有查到要删除的联系人信息!");return;}for(j = i; j < L->length; j++){strcpy(L->stu[j].tel, L->stu[j+1].tel);strcpy(L->stu[j].num, L->stu[j+1].num);strcpy(L->stu[j].name, L->stu[j+1].name);strcpy(L->stu[j].gender, L->stu[j+1].gender);strcpy(L->stu[j].addr, L->stu[j+1].addr);}L -> length--;printf("该联系人的信息已被删除!");}int writeToText(sequenlist *L, DataType stu[],int n) //写入文件{int i=0;FILE *fp = fopen("ConnectList.txt","w"); //创建文件if(!fp){printf("Can't open file\n");return -1;}fprintf(fp,"*********通讯录*********\n");fprintf(fp,"序列号姓名性别电话地址\n");fprintf(fp,"-------------------------------------------\n");while(i<n){fprintf(fp,"%s%s%s%s%s\n",L->stu[i].num,L->stu[i].name, L->stu[i].gender, L->stu[i].tel,L->stu[i].addr);i++;}fprintf(fp,"-------------------------------------------\n");fprintf(fp,"*********共有%d条记录*********\n",n);fclose(fp); //关闭文件printf("写入成功!\n");return 0;}void main() // 主函数{sequenlist *L;DataType *student;int i, n = 0;L = (sequenlist *)malloc(sizeof(sequenlist));while(1){switch(menu_select()) //用switch函数判断用户输入的指令进行分析调用相应函数{case 1:printf("***********************************\n");printf("联系人线性表的建立\n"); printf("***********************************\n");createList(L);writeToText(L, stu,n); //写入文件操作break;case 2:printf("***********************************\n");printf("添加联系人信息\n");printf("请输入要添加的联系人的信息:\n");printf("\n序列号姓名性别电话地址\n");printf("***********************************\n");student = (DataType*)malloc(sizeof(DataType));fflush(stdin);scanf("%s%s%s%s%s",student->num,student->name,student->gender,student->tel,student->addr);printf("请输入要插入的位置:\n");scanf("%d", &i);insert(L, student, i); //调用插入函数break;case 3:printf("***********************************\n");printf("联系人线性表的建立\n"); printf("***********************************\n");i = findList(L);if(i != -1){printf("您要查询的联系人为:\n序列号姓名性别电话\n");printf("------------------------------\n");printf("%s%s%s%s%s", L->stu[i].num,L->stu[i].name, L->stu[i].gender, L->stu[i].tel,L->stu[i].addr);printf("------------------------------\n");}elseprintf("没有你要查询的联系人的信息!");break;case 4:printf("***********************************\n");printf("删除联系人信息\n");printf("***********************************\n");delNode(L);break;case 5:printf("***********************************\n");printf("输出所有联系人的信息\n");printf("***********************************\n");printList(L);break;case 0:printf("感谢你的使用 ^_^");getch();return;}}}五、系统测试与操作说明六、总结本题涉及到链表的建立以及文件的操作,文件是大一上学期学的,但当时老师并没有讲的很仔细,因为好奇和兴趣,所以去自学了。