通讯录管理系统:数据结构实践与算法设计

0 下载量 187 浏览量 更新于2024-06-24 收藏 276KB DOC 举报
本文档是关于"通讯录管理系统"的数据结构课程设计,主要针对计算机科学与技术领域。作者李东东,学号201110510212,来自11计科(2)班,由指导教师李娟和徐星于2013年6月24日完成。设计的目标是通过实践巩固课堂上学习的数据结构理论,如二叉树的层序和先序遍历,以及拓扑排序,应用于实际问题的解决。 项目的核心目的是设计并实现一个通讯录管理程序,使用单链表作为主要的数据结构,支持的功能包括通讯录链表的建立、插入、查询、删除以及输出,以菜单形式呈现用户界面。用户可以通过菜单选择进行操作,如添加新的联系人、查找特定联系人或删除记录。程序设计的关键在于主函数的循环控制,确保在没有创建链表时,用户会被提示先建立通讯录。 设计中采用了switch语句来根据用户的选择跳转到不同的功能函数,例如,如果用户试图在未建立链表的情况下执行查询或删除操作,程序会提示用户先建立通讯录。同时,全局变量flag1用于标记链表是否已建立,只有当链表存在(flag1=1)时,才能执行相应的功能。 设计还涉及到了算法设计,比如利用系统流程图展示程序的整体结构,以及对主函数的逻辑设计,确保在循环中能够处理用户的交互请求,直到用户选择退出程序。通过这个项目,学生不仅能够加深对数据结构的理解,还能锻炼软件设计和问题解决能力。 整个设计旨在将理论知识与实际操作相结合,提升学生的编程技能和解决问题的实际经验。通过这个通讯录管理系统,学生能够将二叉树、链表和排序算法等概念运用到实际应用中,从而更好地掌握数据结构在软件开发中的重要性。
2023-05-30 上传
《数据结构》 课 程 设 计 报 告 书 题 目: 通讯录管理系统 系 别: 计算机科学与应用系 学 号: 学生: 指导教师: 完成日期: 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; }