数据结构课程设计-通讯录管理系统

《数据结构》课程设计报告书题目:通讯录管理系统系别:计算机科学与应用系学号:学生姓名:指导教师:完成日期: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 测试运行程序,看到主界面。

合集下载

学生通讯录管理系统数据结构课程设计代码

学生通讯录管理系统数据结构课程设计代码

一、概述在当今数字化信息时代,学生通讯录管理系统已成为学校教育管理和日常生活中不可或缺的一部分。

针对校园学生的通讯录管理系统,既能方便学生之间的交流通信,也能方便管理者对学生信息进行统一管理。

本次课程设计旨在设计一个学生通讯录管理系统的数据结构与代码,实现信息的存储、查询和管理的功能。

二、系统需求分析1.系统功能需求(1) 实现学生基本信息的录入和存储,包括尊称、学号、性别、通信方式等信息;(2) 实现学生信息的查询、修改和删除功能;(3) 实现学生信息的按关键字检索功能,如按尊称、学号、班级等进行检索;(4) 实现学生通讯录的导出和导入功能,方便数据备份和迁移;(5) 实现用户权限管理功能,包括管理员和普通用户权限的划分。

2.系统性能需求(1) 系统应具有良好的用户界面设计,操作简单、友好;(2) 系统应具有较高的数据安全性,保护学生个人信息不被泄露;(3) 系统应具有较高的稳定性和可靠性,能够长时间稳定运行;(4) 系统应具有较高的查询和数据处理效率,能够快速响应用户请求。

三、系统设计1. 数据结构设计(1) 学生信息采用结构体进行存储,包括尊称、学号、性别、通信方式等字段;(2) 学生通讯录采用链表结构进行存储,方便动态添加、删除和查询操作;(3) 用户权限采用权限控制字段进行划分,保证不同用户有不同的操作权限。

2. 系统架构设计(1) 采用C语言进行开发,具有较高的执行效率和跨评台性;(2) 采用面向对象编程思想进行系统的模块化设计,方便系统维护和扩展;(3) 采用简洁的用户界面设计,操作逻辑清晰,用户体验良好。

四、代码实现以下为部分代码示例,展示系统核心功能的实现:1. 学生信息的录入和存储typedef struct Student {char name[20];int id;char gender[10];char contact[20];} Student;// 使用链表存储学生信息typedef struct Node {Student data;struct Node *next;} Node;2. 学生信息的查询、修改和删除// 查询学生信息void searchStudent(Node *head, char *name) {Node *p = head->next;while (p != NULL) {if (strcmp(p->, name) == 0) {// 输出学生信息printf("Name: s, ID: d, Gender:s, Contact: s\n", p->, p->data.id, p->data.gender, p->data.contact); return;}p = p->next;}printf("The student is not found\n");}// 修改学生信息void modifyStudent(Node *head, char *name, int id, char *gender, char *contact) {Node *p = head->next;while (p != NULL) {if (strcmp(p->, name) == 0) {// 修改学生信息strcpy(p->, name);p->data.id = id;strcpy(p->data.gender, gender);strcpy(p->data.contact, contact);return;}p = p->next;}printf("The student is not found\n");}// 删除学生信息void deleteStudent(Node *head, char *name) {Node *p = head;while (p->next != NULL) {if (strcmp(p->next->, name) == 0) { Node *temp = p->next;p->next = p->next->next;free(temp);return;}p = p->next;}printf("The student is not found\n");}3. 用户权限管理int m本人n() {// 管理员权限if (isAdmin) {// 管理员操作} else {// 普通用户操作}return 0;}五、系统测试与优化1. 系统测试(1) 对系统进行功能测试,包括学生信息录入、查询、修改、删除等功能的测试;(2) 对系统进行性能测试,测试系统的稳定性和数据处理效率。

数据结构课程设计-通讯录管理系统

数据结构课程设计-通讯录管理系统

《数据结构》课程设计报告书题目:通讯录管理系统系别: 计算机科学与应用系学号:学生姓名:指导教师:完成日期: 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 操作。

总结通过本报告的介绍和分析,我们了解了一个基于数据结构设计的通讯录管理系统的实现原理和优化方法。

在实际应用中,针对具体需求和场景,我们可以进一步优化系统性能,提升用户体验。

通讯录管理系统作为一种简单而实用的应用程序,将在日常生活中发挥重要作用。

数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统
数据结构课程设计中的通讯录管理系统可以涉及到以下几个方面的知识点:
1. 数据结构:通讯录管理系统中需要使用到的数据结构包括数组、链表、哈希表等。

其中,数组用于存储通讯录中的人员信息,链表用于存储联系人信息,哈希表用于实现快速查找功能。

2. 算法:通讯录管理系统中需要使用到的算法包括查找算法、排序算法、动态规划算法等。

其中,查找算法用于实现快速查找联系人功能,排序算法用于实现通讯录的排序功能,动态规划算法用于实现最长公共子序列问题等。

3. 数据库:通讯录管理系统需要使用到数据库来存储通讯录中的数据。

需要掌握关系型数据库的设计和操作,包括数据表的设计、SQL 语句的编写等。

4. 界面设计:通讯录管理系统需要有友好的用户界面,需要进行界面设计和开发,包括前端技术的使用,如HTML、CSS和JavaScript等。

5. 系统测试:通讯录管理系统需要进行系统测试,包括功能测试、性
能测试等,确保系统能够正常运行并满足用户需求。

通过设计和实现通讯录管理系统,可以锻炼学生对数据结构和算法的理解和应用能力,同时还能提高学生的编程能力和团队合作能力。

学生通讯录管理系统数据结构课程设计

学生通讯录管理系统数据结构课程设计

学生通讯录管理系统数据结构课程设计一、需求分析在学生通讯录管理系统中,我们需要实现以下功能:1.学生信息的录入与管理2.通讯录信息的增删查改3.数据的持久化存储二、系统设计1. 数据结构设计为了实现学生通讯录管理系统的功能,我们需要设计以下数据结构:•学生信息结构体包括学号、姓名、性别、年龄等字段•通讯录信息结构体包括联系人姓名、电话号码、邮箱等字段2. 算法设计2.1 添加学生信息当用户选择添加学生信息时,系统会要求用户输入学号、姓名、性别、年龄等信息,然后将这些信息存储在学生信息的数据结构中。

void addStudentInfo() {// 读取用户输入的学生信息// 将学生信息存储在学生信息结构体中}2.2 修改通讯录信息用户可以根据联系人姓名查找通讯录信息,并进行修改操作,比如修改电话号码、邮箱等内容。

void modifyContactInfo() {// 根据联系人姓名查找通讯录信息// 用户进行修改操作}2.3 删除通讯录信息用户可以根据联系人姓名删除通讯录信息。

void deleteContactInfo() {// 根据联系人姓名删除通讯录信息}3. 数据存储设计为了持久化存储数据,我们可以选择使用文件存储或数据库存储。

在本系统中,我们选择文件存储的方式,数据以文本的形式存储在文件中。

三、系统实现通过以上设计,我们可以开始实现学生通讯录管理系统。

在实现过程中,我们需要注意保证数据结构的正确性和数据操作的合法性,从而确保系统的稳定性和可靠性。

四、总结通过本次数据结构课程设计,我们深入了解了学生通讯录管理系统的实现原理和功能设计。

在接下来的学习中,我们将继续努力提升自己的编程能力,不断完善系统的功能和性能,为实现更多复杂系统打下坚实的基础。

数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统一、系统需求分析通讯录管理系统的主要目标是提供一个方便、高效的方式来管理联系人信息。

具体需求包括: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)联系人信息录入、添加功能:包括手机号(此处用短号,5位,不能重复)、姓名、家庭住址的录入和添加。

(2)联系人信息查询功能:能①按手机号进行查询。

②按联系人姓名进行查询。

(3)排序:①能按手机号升序进行排序;②能按姓名进行升序排序,姓名相同时按手机号从小到大进行排序(4)联系人信息的修改、删除功能:①按手机号进行联系人信息的修改和删除。

②按姓名进行联系人信息的修改和删除,多个姓名时,再指定具体的号码。

(5)统计功能:统计自己的联系人有多少个。

三、课题设计的基本思想,原理和算法描述(1)本次课程设计题目为简易手机通讯录管理系统,主要运用到线性表中顺序表的相关知识,以及顺序查找的思想和冒泡排序算法。

(2)界面设计//菜单函数int menu(){int c;printf("\n\n\t☆☆☆☆☆☆☆手机通讯录信息管理系统☆☆☆☆☆☆☆☆\n\n");printf("******************************************************************* ***\n");printf(" 1.添加联系人信息\n");printf(" 2.查询联系人信息\n");printf(" 3.对联系人信息进行排序\n");printf(" 4.修改联系人信息\n");printf(" 5.删除联系人信息\n");printf(" 6.统计联系人个数\n");printf(" 0.退出信息管理系统\n");printf("******************************************************************* ***\n\n");printf("★请输入您的选择(0-6):");while(1){scanf("%d",&c);if(c<0||c>6)printf("\n▲输入错误!请重新选择:");elsebreak;}return c;}//主函数void main(){SqList * L;InitList(L);system("color 3f");while(1){switch(menu()){case 1:system("cls");printf("\n\t\t\t信息的增加\n");ListAdd(L);break;case 2:system("cls");printf("\n\t\t\t信息的查询\n");Search(L);break;case 3:system("cls");printf("\n\t\t\t对信息进行排序\n");Paixu(L);break;case 4:system("cls");printf("\n\t\t\t信息的修改\n");ListModify(L);break;case 5:system("cls");printf("\n\t\t\t信息的删除\n");Delete(L);break;case 6:system("cls");printf("\n\t\t\t统计联系人个数\n");ListLength(L);break;case 0:printf("再见!\n");return;default:printf("\n▲输入错误!请重新选择:");break;}}}(3)功能模块的实现初始化顺序表void InitList(SqList *&L)L=(SqList *)malloc(sizeof(SqList));L->length=0;}②增加信息函数。

通讯录管理系统数据结构课程设计

C语言课程设计:通讯录管理系统目录一、需求分析 (2)二、概要设计 (2)三、详细设计 (3)四、上机操作 (14)五、实习心得 (19)六、源程序 (20)一、需求分析具有数据的插入、修改、删除、显示和查询功能的电话簿管理程序。

(1)数据包括:人名、工作单位、电话号码和E-MAIL地址。

(2)可对记录中的姓名和电话号码进行修改。

(3)可增加和删除记录。

(4)可显示所有的保存记录。

(5)可按人名或电话号码进行查询。

[提示]建议采用结构体数组和文件系统实现。

结构体成员包括人名、工作单位、电话号码和E-MAIL地址。

根据题目的要求程序应该采用结构体数组和文件系统实现。

应该有文件的操作功能;在程序中应该包括输入、显示、删除、查询、添加、修改、保存、加载和退出的功能。

二、概要设计根据上面的分析,可以将程序系统的设计分为如下几个模块:插入、显示、删除、查询、修改、保存和退出。

三、详细设计1、主函数;主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。

其中各功能模块用菜单方式选择。

流程图N【程序】int main()***********\n");printf("\t\t**********************************************\n");scanf("%d",&n);for(i=0;i<n;i++) ame);printf("请输入工作单位:\n");scanf("%s",&pMan[Size+i].Depart);printf("请输入电话号码:\n");scanf("%s",&pMan[Size+i].TEL);printf("请输入Email地址:\n");scanf("%s",&pMan[Size+i].Email);}if(Save(pMan,Size+n)){printf("\t\t*********** 恭喜!数据插入成功! ***********\n");}else{printf("\t\t*********** 操作失败,请稍后再试 !***********\n");}return Size+n;}2、显示模块此模块为显示所有记录,流程图如下:【程序】void Display(ManpMan,int Size){printf("您要删除的信息为:\n");printf("%s\t\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email);printf("是否确认删除(Y/N)\n");scanf("%s",&control);switch(control){case 'y':pMan->Name[0]='\0';pMan->Depart[0]='\0';pMan->TEL[0]='\0';pMan->Email[0]='\0';if(Save(pMan,Size))开始输入要修改记录的姓名是否找到信息提示未找到信息显示要修改的信息修改需要修改的条目,并保存结束N Y***********\n");printf("\t\t**********************************************\n");scanf("%d",&n);for(i=0;i<n;i++) ame);printf("请输入工作单位:\n");scanf("%s",&pMan[Size+i].Depart);printf("请输入电话号码:\n");scanf("%s",&pMan[Size+i].TEL);printf("请输入Email地址:\n");scanf("%s",&pMan[Size+i].Email);}if(Save(pMan,Size+n)){printf("\t\t*********** 恭喜!数据插入成功! ***********\n");}else{printf("\t\t*********** 操作失败,请稍后再试 !***********\n");}return Size+n;}void Modify(Man * pMan,int Size) {printf("您要删除的信息为:\n");printf("%s\t\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email);printf("是否确认删除(Y/N)\n");scanf("%s",&control);switch(control){case 'y':pMan->Name[0]='\0';pMan->Depart[0]='\0';pMan->TEL[0]='\0';pMan->Email[0]='\0';if(Save(pMan,Size))//将新信息写入文件{printf("\t\t**************恭喜!信息删除成功!**************\n");;printf("\t\t**********************************************\n");break;}else{printf("\t\t************操作失败,请稍后再试! *************\n");printf("\t\t**********************************************\n");break;}case 'n':printf("信息未删除!\n");break;default:printf("选择有误!\n");break;}}else{printf("\t\t*********抱歉,没有找到相关信息! *********\n");printf("\t\t******************************************\n");}}void Display(Man * pMan,int Size) //显示所有记录{int i;printf("\t人名\t 工作单位\t 电话号码\t E-mail地址\n");printf("\t************************************************************\n");for(i=0;i<=Size;i++,pMan++)//依次输出文件中的信息{printf("\t%s\t\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email); printf("\t-----------------------------------------------------------\n");}}void S_asname(Man * pMan,int Size) //查找信息{int i=0;char name[8];printf("\t\t***********请输入要查询信息的姓名:***********\n");printf("\t\t**********************************************\n");scanf("%s",name);while(i<Size&&strcmp(pMan->Name,name))//查找{pMan++;i++;}if(!strcmp(pMan->Name,name))//找到后输出{printf("\t\t***************查到的信息为: ***************\n");printf("\t*************************************************************\n"); printf("\t人名\t 工作单位\t 电话号码\t E-mail地址\n");printf("\t*************************************************************\n"); printf("\t%s\t\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email); printf("\t*************************************************************\n");}else{printf("\t\t***********抱歉,没有找到相关数据 ************\n");printf("\t\t**********************************************\n");}}void S_astel(Man * pMan,int Size) //按电话查找模块{int i=0;char tel[12];printf("\t\t***********请输入要查询信息的电话:************\n");printf("\t\t**********************************************\n");scanf("%s",tel);while(i<Size&&strcmp(pMan->TEL,tel)) //查找信息{pMan++;i++;}if(!strcmp(pMan->TEL,tel)) //输出找到的信息{printf("\t\t****************查到的信息为: ****************\n");printf("\t*******************************************************\n");printf("\t人名\t 工作单位\t 电话号码\t E-mail地址\n");printf("\t*******************************************************\n");printf("\t%s\t\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email); printf("\t*******************************************************\n");}else{printf("\t\t************抱歉,没有找到相关数据 ************\n");printf("\t\t**********************************************\n");}}int main() //主函数{Man man[500],*pman=man;;char control;int size;printf("\t\t**********************************************\n"); //窗口初始化 printf("\t\t********** 欢迎使用通讯录管理系统! ***********\n");printf("\t\t*--------------------------------------------*\n");printf("\t\t* 请按回车键继续! *\n");printf("\t\t**********************************************\n");scanf("%c",&control);if(control){size=Scan(pman); //判断文件是否存在printf("\t\t\t请输入相应操作数操作\n");for(;;) //菜单生成{printf("\t\t**********************************************\n");printf("\t\t* 1--插入信息 *\n");printf("\t\t* 2--按姓名查找 *\n");printf("\t\t* 3--按电话查找 *\n");printf("\t\t* 4--删除信息 *\n");printf("\t\t* 5--显示信息 *\n");printf("\t\t* 6--修改信息 *\n");printf("\t\t* 0--退出系统 *\n");printf("\t\t**********************************************\n");scanf("%s",&control);switch(control){case '1': size=Insert(pman,size);break; //插入新的通讯录case '2': S_asname(pman,size);break; //按姓名查找case '3': S_astel(pman,size);break; //按电话查找case '4': Delete(pman,size);break; //删除信息case '5': Display(pman,size);break; //显示所有信息case '6': Modify(pman,size);break; //修改信息case '0': printf("**************谢谢使用!再见!**************\n"); //退出系统return 0;default: printf("**********输入数字有误,请重新输入**********\n");break;}}}return 0;}。

数据结构(C++)课程设计——通讯录管理系统

湖南工业大学计算与通讯学院课程设计报告书课程名称:数据结构课程设计班级: 08级信计2班学号: ******** *名:**指导老师:小纪峰1,设计项目名称:通讯录管理系统2,课程设计目的:通过设计一个《通讯录管理系统》,进一步熟悉C中类的概念、基本知识和技利用所学的基本知识和技能解决简单的面向对象的程序设计问题。

了解系统开发的需求分析、类层次设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对C的理解与Visual C++环境的使用:逐步熟悉程序设计的方法,并养成良好的编程习惯。

3,内容及设计要求:编写一个通讯录管理系统。

以把所学数据结构知识应用到实际软件开发中去。

设计内容:本系统应完成一下几方面的功能:1)输入信息——enter();2)显示信息———display( );3)查找以姓名作为关键字———search( );4)删除信息———delete( );5)存盘———save ( );6)装入———load( ) ;设计要求:1)每条信息至包含:姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项2)作为一个完整的系统,应具有友好的界面和较强的容错能力3)上机能正常运行,并写出课程设计报告.3.12 详细功能如下:A,添加:系统将提示用户输入新添加人员信息,输入到文件中,人员信息数据包括姓名(name),街道(street),城市(city),邮编(eip),国家(state).B,删除:首先由用户输入要删除的人员的姓名,然后调用删除函数,删除该人员的所有相关资料.C,显示所有人员信息:该功能将显示已经保存的所有人员的姓名,街道,城市,邮编及国家.D,查询:可由用户输入要查找的人员姓名,然后系统用查找函数查找,接着系统使用相关文件命令输出所查找的人员的全部信息.E,退出系统关闭通讯录管理系统.3.2,规格说明:4,详细设计:4.1,通讯录管理系统功能说明图:通讯录管理系统4.2,数据结构及各模块分析:4.21:设计类,对象及基本数据类型:4.211创建一个record类,它有五个数据成员:char name[20]; 姓名char street[20]; 街道char city[20]; 城市char eip[20]; 邮编char state[20]; 国家包含函数:功能如下: void mainmenu(); 主菜单void searchmenu(); 查找菜单void enter(); 新添纪录void search(); 按姓名查询 void display(); 显示所有void load(); 读取文件void save(); 写入文件void delete(); 按姓名删除4.212,结构体:struct record{char street[20];char name[20];char city[20];char state[20];char eip[20];}student[500];struct slnode{record date;struct slnode *next;struct slnode *prior;};4.3,设计流程图6,调试分析及心得体会:6.1,调试分析:void load()//从文件导入{if((fp=fopen("student","rb"))==NULL) //打开文件进行读的操作{printf("\n\t\t通讯录文件不存在");if ((fp=fopen("student","wb"))==NULL)//打开文件进行读的操作{printf("\n\t\t建立失败");exit(0);}else{printf("\n\t\t通讯录文件已建立");printf("\n\t\t按任意键进入主菜单");getch(); //从键盘接收一个字符}return; //返回主函数的主菜单}exit(0);}fseek(fp,0,2); /*文件位置指针移动到文件末尾*/if (ftell(fp)>0) /*文件不为空*/{rewind(fp); /*文件位置指针移动到文件开始位置*/for (num=0;!feof(fp) && fread(&student[num],sizeof(struct record),1,fp);num++);.......getch();return;}6.11void search()//查找人{int j=0,a=0;//j用来记录查找.......scanf("%s",name);for(int i=a;i<num;i++,p=p->next)//num用来表示联系人的个数{if(strcmp(name,p->next->)==0)//查找是否有该人,有则输出该点所有信息,并往下查找。

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