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

合集下载

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

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

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

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

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

二、系统需求分析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) 对系统进行性能测试,测试系统的稳定性和数据处理效率。

数据结构课程设计报告---通讯录

数据结构课程设计报告---通讯录

数据结构课程设计报告---通讯录## 一、项目背景随着信息科技的发展,现代社会通讯录的应用越来越普遍,满足了人们信息的获取和管理的需求。

本项目的设计目的在于使用面向对象的程序思想,以面向对象的方式它来实现对通讯录信息的管理,进而提高信息的管理效率,提升信息的可靠性和安全性,最终达到为社会实施科学管理的目的。

## 二、系统需求1. 界面美观、格式明确,有良好的友好提示。

2. 系统稳定性强,能承受短时间的高并发量使用。

3. 提供友好的系统操作界面,对用户操作进行一定的约束,方便用户操作。

4.提供有效的联系人信息管理功能,能够实现增删改查等操作。

5.支持联系人信息备份和恢复,以及密码设置。

6.能够防止任何人未经授权而访问系统,或者磁盘信息的泄露。

此系统的设计主要分为三大部分,即界面层、业务逻辑层和数据存储层。

界面层通过展示信息给用户,实现数据的输入及输出;业务逻辑层主要处理用户请求,实现对数据的操作;数据存储层通过文件存储数据,实现对联系人信息的永久保存。

本项目采用C++语言,以链表数据结构为基础,将用户的联系人存储在链表中,充分利用其动态性,实现联系人的增删改查操作.同时,为了提供更进一步的使用,增加了密码功能,对未授权访问进行防止,以及数据备份和恢复功能。

## 四、功能实现1. 界面设计:首先,根据系统所需要的功能,采用控制台方式,以文字提示形式,配以整齐美观的各项参数和信息,实现各项功能。

2. 加密控制:本系统实现授权登陆加密功能,使系统对未经授权的用户隐藏信息,以确保系统的安全性。

3. 测试功能:功能的测试旨在确保程序的完整性和正确性。

4. 管理功能:本系统实现联系人信息的增删改查操作,在这几项功能的实现过程中,使用链表数据结构,更好的实现程序的功能。

5. 修改密码功能:此功能实现用户可以修改自己的密码,以确保用户自己可以比较安全的使用系统,不会受到他人的侵犯。

6. 加载和存储数据:通过使用文件存储,实现数据的存储和读取,以及备份功能,实现对数据永久保存。

数据结构课程设计(通讯录)

数据结构课程设计(通讯录)

数据结构课程设计(通讯录)
题目描述:
设计一个通讯录程序,实现以下功能:
1. 添加联系人信息
2. 删除联系人信息
3. 修改联系人信息
4. 查找联系人信息
5. 显示所有联系人信息
6. 退出程序
要求:
1. 使用链表作为数据结构存储联系人信息
2. 界面友好,操作简单方便
3. 能够防止重复添加联系人信息
设计思路:
1. 定义一个结构体Contact表示联系人信息,包括姓名、电话、邮箱等成员变量。

2. 定义一个链表结构体List表示联系人链表,包括头结点、
节点数量等成员变量。

3. 实现添加联系人信息函数,首先判断联系人是否存在,如果存在则提示用户,否则分配一个新的节点,并将联系人信息存储在节点中,将新节点插入链表中。

4. 实现删除联系人信息函数,首先判断联系人是否存在,如果不存在则提示用户,否则在链表中删除该节点。

5. 实现修改联系人信息函数,首先判断联系人是否存在,如果不存在则提示用户,否则修改节点中的信息。

6. 实现查找联系人信息函数,遍历链表查找是否有匹配姓名的联系人。

7. 实现显示所有联系人信息函数,遍历链表打印出所有联系人信息。

8. 在main函数中调用上述函数,根据用户输入的指令调用对应的函数,直到用户选择退出程序。

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

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

一、设计题目(问题)描述和要求某一中学,现在需要建立学生通讯录管理系统,以管理学生信息。

要求:(1)可以录入新的通讯信息(包括姓名,通讯地址,邮编,联系电话等)(2)可以按照姓名进行查询相关信息(3)可以修改相关信息二、系统分析与概要设计根据问题描述和要求,系统要求能够按姓名查找、增加、删除和保存各学生的信息。

确定程序应该具备如下功能:“查询学生信息”、“增加学生信息”、“修改学生信息”“删除学生信息”、“数据存盘”基本模块。

系统可以将学生信息数据保存到磁盘文件student.txt,从而可以通过磁盘文件读出学生数据信息,为了便于统计在生成学生信息时同时生成学生编号,这样每输入一个学生信息编号顺序加1,这样也方便了管理员查询学生信息。

三、详细设计和编码1.数据类型定义根据系统要求,可以将姓名和邮编和联系电话通讯地址定义为字符型。

2.各模块算法描述查询学生信息: Que_name()输入要查询的学生姓名,比较名字与保存的信息是否相同,若相同则查找到,否则,没查找到。

增加学生信息: Add()输入要添加的学生信息并保存。

删除学生信息: Del()输入要删除的学生姓名,若与数据相同则删除,否则输出查找不到该信息。

修改学生信息: Mod()输入要修改的学生姓名,输入要修改的信息,并确认。

数据存盘: Sav()创建文件,将信息写入文件。

3.程序关键算法流程图(1)主函数流程(2) 某操作算法流程Student:: Add()(3) Student:: Del()4) Student:: Mod()(5) Student:: Que_name()(6) Student:: Sav()(7) Student:: Load()四、调试分析(内容包括:调试过程中遇到的问题并且是如何解决的以及对设计实现的回顾讨论和分析;算法的时空分析和改进设想;经验和体会等)五、测试结果六、小结通过本次设计,加强了对于编写管理系统程序的运用,能够更好的运用循环。

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

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

《数据结构》课程设计报告书题目:通讯录管理系统系别: 计算机科学与应用系学号:学生姓名:指导教师:完成日期: 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.创建通讯录:通讯录是一个存储联系人信息的数据结构,可以存储联系人的姓名、电话号码、邮箱地址等信息。

2.添加联系人:可以向通讯录中添加新的联系人,包括姓名、电话号码、邮箱地址等信息。

3.查找联系人:可以根据姓名或电话号码查找通讯录中的联系人,并显示其详细信息。

4.修改联系人:可以根据姓名或电话号码修改通讯录中的联系人信息。

5.删除联系人:可以根据姓名或电话号码删除通讯录中的联系人。

为了实现上述功能,我们可以使用链表来实现通讯录的存储,每个节点表示一个联系人。

每个节点包含姓名、电话号码、邮箱地址等信息,并且有指向下一个节点的指针。

为了提高查找联系人的效率,我们还可以使用哈希表来实现联系人的快速查找。

哈希表采用键值对的方式存储数据,通讯录中的联系人可以以姓名为键,联系人节点为值存储在哈希表中。

结果实验的最终结果是一个完善的通讯录管理系统,能够实现创建通讯录、添加联系人、查找联系人、修改联系人和删除联系人等功能。

在实现过程中,我们遵循了以下步骤:1.首先,我们设计了联系人节点的数据结构,包括姓名、电话号码、邮箱地址等字段,并定义了节点的操作方法。

2.接着,我们设计了通讯录的数据结构,使用链表来存储联系人节点,并实现了通用的链表操作方法,如插入节点、删除节点等。

3.然后,我们设计了哈希表的数据结构,使用哈希函数将联系人节点存储在哈希表中,并实现了查找联系人的快速算法。

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

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

数据结构课程设计通讯录管理系统报告前言通讯录管理系统是一种常见的应用程序,用于帮助用户有效地组织和管理他们的联系人信息。

本报告旨在介绍和分析一个基于数据结构设计的通讯录管理系统,其中实现了基本的通讯录功能,并且通过合适的数据结构和算法进行优化。

功能需求通讯录管理系统需要实现以下基本功能: - 添加联系人信息 - 查找联系人信息 - 删除联系人信息 - 更新联系人信息 - 显示所有联系人信息数据结构选择为了实现通讯录管理系统的功能,我们选择使用链表作为数据结构。

链表是一种简单而灵活的数据结构,可以动态地添加或删除节点,非常适合存储联系人信息这种动态的数据。

在这里,我们采用双向链表,使得查找、插入和删除操作更加高效。

算法设计添加联系人信息添加联系人信息时,我们需要遍历链表找到合适的位置插入新节点,这里的算法复杂度为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.通讯录管理系统**7 .建立二叉树,层序、先序遍历14. 拓扑排序姓名:李东东学号: 201110510212 班级: 11 计科(2)班指导教师:李娟徐星2013年 6 月 24日1.通讯录管理系统开发目的数据结构旨在使读者学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据逻辑结构和存储结构,以及相应的运算,把现实世界中的问题转化为计算机内部的表示和处理。

设计目的进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法;掌握软件设计的基本内容和设计方法,并培养规范化软件设计的能力;将理论知识和实际结合起来,锻炼分析解决实际问题的能力。

设计要求实现通讯录的建立和输出、通讯者的插入、删除和查询等几种操作功能。

用单链表作存储结构;用菜单作为应用程序的主要界面,主界面的主控菜单如下:通讯录链表************************************1.通讯录链表的建立2.通讯录结点的插入3.通讯录结点的查询4.通讯录结点的删除5.通讯录链表的输出0.退出通讯录管理系统************************************请选择菜单号<0~5>:*:使用数字0~5来选择菜单项,其他输入无效,并给出错误提示。

设计功能程序运行后的功能有:(1)菜单选择界面(2)建立通讯录记录(3)插入联系人记录(4)查找联系人记录(名称和编号查询)(6)删除联系人记录(7)输出所有联系人记录(8)退出程序算法设计系统流程图如图所示:主函数设计实现循环运行的功能时定义一个变量j=1,在选择退出后再将j赋值为0,要考虑判定是否建表的情况定义了一个全局变量flag1=0,建链表后flag1赋值为1。

为了达到选择各功能,采用switch判定选择项并跳转入相应功能函数。

判定是否建表语句:if(flag1!=1){printf("请先建立表!");getchar();system("cls");}建立通讯链表设计要建立链表,首先要生成结点,因此,尾插法建立链表算法描述如下:(1)使链表的头尾指针head、rear指向新生成的头结点(也就是尾结点);(2)置结束标志为0(假);(3)while(结束标志不为真){P指向新生成的结点;读入一个通讯者数据至新结点的数据域;将新结点链到尾结点之后;使尾指针指向新结点;提示是否继续建表,读入一个结束的标志;}(4)尾结点的指针域置空置NULL。

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

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

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++)课程设计——通讯录管理系统

数据结构(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绪论 (2)1.1任务⽬的 (2)1.2需求分析 (2)1.3详细功能 (2)2概要设计 (3)2.1通讯录各模块调⽤关系 (3)2.2结构体函数 (3)2.3主函数与各函数的调⽤ (3)3详细设计 (5)3.1各个算法的实现 (5)4调试结果 (13)5运⾏结果 (14)6总结 (15)7参考⽂献 (16)1.1任务⽬的⽤《数据结构》中的链表做数据结构,结合c语⾔基本知识,编写⼀个通讯录管理系统,以把所学知识应⽤到实际软件开发中去。

了解并掌握数据结构与算法的设计⽅法,具备初步的独⽴分析和设计能⼒,初步掌握软件开发过程的问题分析,系统设计,程序编码,测试等基本⽅法和技能:提⾼综合运⽤所学的理论知识和⽅法独⽴分析和解决问题的能⼒,训练⽤系统的观点和软件开发⼀般规范进⾏软件开发,培养软件⼯作者所应具备的科学的⼯作⽅法和作风。

1.2需求分析设计⼀个实⽤的学⽣通讯录管理系统,⽤双向链表做数据结构,编写⼀个通讯录管理系统实现通讯录信息的输⼊,添加,显⽰,并以姓名做关键字进⾏查找,删除信息等功能,输⼊的信息需要包含学⽣的姓名,地址,电话。

1.3详细功能1.显⽰菜单showmenu();2.添加信息Appenditem();3.输出信息print();4.按姓名查找信息Finditem1();5.删除信息Removeitem();6.保存信息到⽂件Saveandfree();7.打开⽂件Open();2概要设计2.1通讯录各模块调⽤关系2.2结构体函数struct Telephone{char name[20];char addrass[20];char telephone[20];struct Telephone *next;};typedef struct Telephone TEL;TEL *head=NULL;2.3主函数与各函数的调⽤void main(){char ch;Open(); //打开⽂件while(1){showmenu(); //显⽰菜单scanf(" %c",&ch); switch(ch){case '1':Appenditem(); //添加信息break;case '2':print(); //输出信息break;case '3':Finditem1(); //查找信息1.按姓名break;case '4': Removeitem(); //删除信息print(); //输出删除后的结果break;case '0':Saveandfree(); //保存并释放内存exit(0); //退出break;default:printf("选择错误!");break;}}}3详细设计3.1各个算法的实现1.显⽰菜单(图1):void showmenu(){printf("\n★☆★☆请选择以下功能★☆★☆\n"); printf("\t1.添加信息。

通讯录——数据结构课程设计

通讯录——数据结构课程设计

通讯录——数据结构课程设计通讯录是一个用于存储和管理联系人信息的工具。

在数据结构课程设计中,我们需要设计一个通讯录系统,使用户能够方便地添加、查找、修改和删除联系人信息。

下面是通讯录系统的标准格式文本,详细介绍了系统的功能和实现方法。

一、系统概述通讯录系统是一个基于数据结构的软件应用程序,用于存储和管理联系人信息。

它提供了一系列功能,包括添加联系人、查找联系人、修改联系人和删除联系人。

二、系统功能1. 添加联系人用户可以通过系统界面输入联系人的姓名、电话号码、电子邮件地址等信息,系统将这些信息存储在数据结构中。

每一个联系人的信息应包括惟一的标识符,以便于后续的查找、修改和删除操作。

2. 查找联系人用户可以通过姓名、电话号码或者电子邮件地址等关键字进行联系人的查找。

系统将根据用户提供的关键字,在数据结构中进行搜索,并返回与之匹配的联系人信息。

3. 修改联系人用户可以选择要修改的联系人,并提供新的姓名、电话号码、电子邮件地址等信息。

系统将根据用户提供的联系人标识符,在数据结构中找到对应的联系人,并更新其信息。

4. 删除联系人用户可以选择要删除的联系人,并确认删除操作。

系统将根据用户提供的联系人标识符,在数据结构中找到对应的联系人,并将其从通讯录中删除。

三、系统实现1. 数据结构选择为了高效地存储和管理联系人信息,我们选择使用链表作为数据结构。

每一个节点表示一个联系人,包含姓名、电话号码、电子邮件地址等信息,以及指向下一个节点的指针。

2. 添加联系人用户输入联系人信息后,系统将创建一个新的节点,并将其插入到链表的末尾。

为了保证联系人信息的惟一性,系统将检查新节点的标识符是否与已有节点的标识符重复。

如果重复,则提示用户重新输入。

3. 查找联系人用户输入关键字后,系统将从链表的头节点开始遍历,逐个比较节点中的姓名、电话号码和电子邮件地址与关键字是否匹配。

如果找到匹配的联系人,系统将返回其信息。

如果遍历完整个链表仍未找到匹配的联系人,则提示用户未找到。

数据结构通讯录管理系统课程设计实验报告心得

数据结构通讯录管理系统课程设计实验报告心得

数据结构通讯录管理系统课程设计实验报告心得数据结构通讯录管理系统课程设计实验报告心得一、引言在本次数据结构课程设计实验中,我们小组选择了通讯录管理系统作为项目。

通讯录管理系统是一种常见的应用程序,用于方便地存储和管理联系人信息。

本报告将对我们小组在实验过程中的设计思路、实现方法和心得体会进行详细介绍。

二、需求分析通讯录管理系统的基本功能包括添加联系人、删除联系人、修改联系人信息和查询联系人等。

除此之外,我们还希望能够支持批量导入和导出联系人信息,以及按照姓名、电话号码等字段进行排序和筛选。

三、设计思路1. 数据结构选择为了高效地存储和操作联系人信息,我们选择使用链表作为主要的数据结构。

链表可以动态地分配内存空间,并且插入和删除操作的时间复杂度较低。

2. 模块划分根据需求分析,我们将通讯录管理系统划分为以下几个模块:- 主菜单模块:显示系统功能选项,并根据用户输入调用相应模块。

- 添加联系人模块:向通讯录中添加新的联系人信息。

- 删除联系人模块:根据用户输入的姓名或电话号码删除对应的联系人信息。

- 修改联系人模块:根据用户输入的姓名或电话号码修改对应的联系人信息。

- 查询联系人模块:根据用户输入的姓名或电话号码查询对应的联系人信息,并显示在屏幕上。

- 导入导出模块:支持将通讯录中的联系人信息导出到文件,以及从文件中导入联系人信息。

四、实现方法1. 数据结构设计我们使用了一个结构体来表示每个联系人的信息,包括姓名、电话号码和电子邮件地址等字段。

同时,我们为每个节点添加了指向下一个节点的指针。

2. 功能实现- 添加联系人:通过用户输入,创建一个新节点,并将其插入到链表中合适的位置。

- 删除联系人:根据用户输入的姓名或电话号码,在链表中找到对应节点并删除。

- 修改联系人:根据用户输入的姓名或电话号码,在链表中找到对应节点并修改其字段值。

- 查询联系人:根据用户输入的姓名或电话号码,在链表中找到对应节点并显示其字段值。

数据结构课程设计通讯录

数据结构课程设计通讯录

数据结构课程设计通讯录一、课程目标知识目标:1. 理解并掌握通讯录数据结构的基本概念,包括线性表的实现方式及其操作;2. 学会运用数组、链表等常见数据结构存储和检索通讯录信息;3. 掌握排序和查找算法在通讯录中的应用。

技能目标:1. 能够运用所学知识,设计并实现一个简单的通讯录管理系统;2. 掌握使用编程语言(如C/C++/Java等)实现通讯录的基本操作,如增加、删除、修改和查询联系人;3. 学会分析不同数据结构在通讯录管理中的性能特点,选择合适的算法优化系统。

情感态度价值观目标:1. 培养学生对数据结构在解决实际问题中应用的兴趣和认识,激发其学习主动性和积极性;2. 培养学生的团队合作意识,通过小组讨论和协作完成课程设计任务;3. 增强学生的信息素养,使其认识到数据结构在信息管理中的重要性。

课程性质:本课程设计为实践性较强的课程,旨在通过实际操作,让学生将所学的数据结构知识应用于通讯录管理系统中。

学生特点:针对高年级学生,具备一定的编程基础和数据结构理论知识,具备独立思考和解决问题的能力。

教学要求:注重理论与实践相结合,强调动手实践能力,关注学生的个性化发展,培养创新精神和团队合作能力。

通过本课程的学习,使学生能够将所学知识应用于实际项目中,提高解决实际问题的能力。

二、教学内容1. 通讯录数据结构基础- 线性表的基本概念与实现(教材第3章)- 通讯录数据结构设计原理(教材第4章)2. 通讯录管理系统功能设计- 联系人信息的增加、删除、修改、查询操作(教材第5章)- 排序与查找算法在通讯录中的应用(教材第6章)3. 编程语言与数据结构实现- C/C++/Java等编程语言的基本语法复习(教材第2章)- 使用编程语言实现通讯录数据结构及操作(教材第7章)4. 实践操作与系统优化- 设计并实现一个简单的通讯录管理系统(综合教材第3-7章内容)- 分析不同数据结构在通讯录管理中的性能特点,进行系统优化(教材第8章)5. 课程项目与团队协作- 分组讨论,明确项目需求和分工(教材第9章)- 团队协作完成课程设计,并进行成果展示与评价(教材第10章)教学内容安排与进度:第1周:通讯录数据结构基础,线性表的概念与实现第2周:通讯录管理系统功能设计,编写基本操作接口第3周:编程语言复习,实现通讯录数据结构及操作第4周:实践操作,设计并实现通讯录管理系统第5周:系统性能分析,优化数据结构和算法第6周:课程项目总结,团队协作成果展示与评价三、教学方法1. 讲授法:通过教师讲解,使学生掌握通讯录数据结构的基本概念、原理和实现方法。

数据结构通讯录管理

数据结构通讯录管理

一、数据结构课程设计目标《数据结构》是计算机专业一门重要的专业技术基础课程,是一门关键性核心课程。

《数据结构》课程的目标是使学生学会分析研究计算机加工对象的特性,选择合适的数据结构和存储表示,以及编制相应的实现算法,培养和提高学生程序设计的能力。

《数据结构》课程也是一门实践性较强的课程,设置实践环节是十分重要的。

本课程设计的目标就是要达到理论与实际应用相结合,提高学生组织数据及编写大型程序的能力,并培养基本的、良好的程序设计技能以及合作能力。

二、问题描述编写一个简单的通讯录管理程序。

通讯录记录有姓名、地址、电话号码、电子邮箱等4项。

三、需求分析1、要求:1)添加:增加一个人的记录到通讯录中;2)显示:在屏幕上显示所以通讯录中的人员信息,应能分屏显示;3)存储:将通讯录信息保存在一个文件中;4)装入:即将文件中的信息读入程序;5)查询:可根据姓名查找某人的相关信息,若找到显示其姓名、地址、电话号码、电子邮箱;6)修改:可修改一个人的除姓名之外的其他信息;2、详细功能如下:A.插入:系统将提示用户输入新添加学生信息,学生信息数据包括姓名、性别、地址、编号、电话等。

B.查询:提示用户输入要查找的学生姓名,然后系统用查找函数查找,接着系统使用相关命令输出所查找的学生的全部信息。

C.删除:首先提示用户输入要删除的学生姓名,然后调用删除函数,删除该学生的所有相关资料。

D.输出后退出系统,退出通讯录管理系统。

四、概要设计1、通讯录管理系统功能说明图:2、设计结构体及基本数据成员类型:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>struct record{char num[10],name[20],tel[20],address[40],unit[10],email[30];}stu[500];int pc=0;FILE *fp;void mainmenu();//主菜单void newrecord();//新名片void searchbyname();//按姓名查询void searchbynum();//按编号查询void showall();//显示所有void readfromfile();//读取文件void writetofile();//写入文件void deletebynum();//按编号删除void deletebyname();//按姓名删除void modifybynum();//按编号修改void modifybyname();//按姓名修改3、实现主程序与各模块的调用关系:void mainmenu()//主菜单{char choic;system("cls");printf("\n\t\t******************** 主菜单********************");printf("\n\t\t*********** 0-新添名片1-全部显示************");printf("\n\t\t*********** 2-按编号查询3-按姓名查询************");printf("\n\t\t*********** 4-按姓名删除5-按编号删除************");printf("\n\t\t*********** 6-按姓名修改7-按编号修改************");printf("\n\t\t*********** 8-保存退出9-不保存退出***********");printf("\n\t\t************************************************");printf("\n\t\t请选择:");choic=getch();switch (choic){case '0':newrecord();break;case '1':showall();break;case '2':searchbynum();break;case '3':searchbyname();break;case '4':deletebyname();break;case '5':deletebynum();break;case '6': modifybyname ();break;case '7': modifybyname ();break;case '8':writetofile();break;case '9':exit(0);default:mainmenu();}}五、详细设计各个操作的算法:1、导入名片信息:void main(){ readfromfile();while (1){ mainmenu();}}void readfromfile()//从文件导入{ if((fp=fopen("stu.txt","rb"))==NULL){ printf("\n\t\t通讯录文件不存在");if ((fp=fopen("stu.txt","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 (pc=0;!feof(fp) && fread(&stu[pc],sizeof(struct record),1,fp);pc++);printf("\n\t\t文件导入成功");printf("\n\t\t按任意键返回菜单");getch();return;}printf("\n\t\t文件导入成功");printf("\n\t\t通讯录文件中无任何纪录");printf("\n\t\t按任意键返回菜单");getch();return;}2、删除名片信息:void deletebyname()//按姓名删除{ int a=0;int findmark=0;int j;int deletemark=0;int i;char name[20];printf("\n\t\t请输入要删除的姓名:");scanf("%s",name);for (i=a;i<pc;i++){ if (strcmp(stu[i].name,name)==NULL){ printf("\n\t\t以下是您要删除的名片纪录:");findmark++;printf("\n\t\t________________________________");printf("\n\t\t编号:%s",stu[i].num);printf("\n\t\t姓名:%s",stu[i].name);printf("\n\t\t电话:%s",stu[i].tel);printf("\n\t\t地址:%s",stu[i].address);printf("\n\t\temail:%s",stu[i].email);printf("\n\t\t________________________________");printf("\n\t\t是否删除?(y/n)");if (getch()=='y'){ for (j=i;j<pc-1;j++) /*纪录移动,从stud数组中删除之*/stu[j]=stu[j+1];pc--;deletemark++;printf("\n\t\t删除成功");if((i+1)<pc){ printf("\n\t\t是否继续删除相同姓名的名片信息?(y/n)");if (getch()=='y'){ a=i;continue;}}printf("\n\t\t是否继续删除?(y/n)");if (getch()=='y')deletebyname();return;}if((i+1)<pc){ printf("\n\t\t是否继续删除相同姓名的名片信息?(y/n)");if (getch()=='y'){ a=i;continue;}}}elsecontinue;}if ((deletemark==0)&&(findmark==0)){ printf("\n\t\t没有该名片的纪录");printf("\n\t\t是否继续删除?(y/n)");if (getch()=='y')deletebynum();return;return;}else if (findmark!=0){ printf("\n\t\t没有重名信息");printf("\n\t\t没有该名片的纪录");printf("\n\t\t是否继续删除?(y/n)");if (getch()=='y')deletebynum();return;return;}}void deletebynum()//按编号删除{ int i,j;int deletemark=0;char num[20];printf("\n\t\t请输入要删除的名片编号:");scanf("%s",num);if(pc==0){ printf("\n\t\t文件中无任何纪录");printf("\n\t\t按任意键返回菜单");getch();return;}for (i=0;i<pc;i++){ if (strcmp(stu[i].num,num)==NULL){ printf("\n\t\t以下是您要删除的名片纪录:");printf("\n\t\t编号:%s",stu[i].num);printf("\n\t\t姓名:%s",stu[i].name);printf("\n\t\t电话:%s",stu[i].tel);printf("\n\t\t地址:%s",stu[i].address);printf("\n\t\temail:%s",stu[i].email);printf("\n\t\t是否删除?(y/n)");if (getch()=='y'){ for (j=i;j<pc-1;j++) /*纪录移动,从stud数组中删除之*/ stu[j]=stu[j+1];pc--;deletemark++;printf("\n\t\t删除成功");printf("\n\t\t是否继续删除?(y/n)");if (getch()=='y')deletebynum();return;}elsereturn;}continue;}if (deletemark==0){ printf("\n\t\t没有该名片的纪录");printf("\n\t\t是否继续删除?(y/n)");if (getch()=='y')deletebynum();return;}}3、添加名片信息:void newrecord()//添加新名片{ printf("\n\t\t**************** 请输入名片信息****************\n");printf("\n\t\t输入编号:");scanf("%s",&stu[pc].num);printf("\n\t\t输入姓名:");scanf("%s",&stu[pc].name);printf("\n\t\t输入电话号码:");scanf("%s",&stu[pc].tel);printf("\n\t\t输入地址:");scanf("%s",&stu[pc].address);printf("\n\t\t输入单位:");scanf("%s",&stu[pc].unit);printf("\n\t\t输入email:");scanf("%s",&stu[pc].email);pc++;printf("\n\t\t是否继续添加?(y/n):");if (getch()=='y')newrecord();return;}4、显示名片信息:void showall()//显示所有名片{ int i;system("cls");if(pc!=0){ printf("\n\t\t*************** 以下为通讯录所有信息************");for (i=0;i<pc;i++){ printf("\n\t\t编号:%s",stu[i].num);printf("\n\t\t姓名:%s",stu[i].name);printf("\n\t\t电话:%s",stu[i].tel);printf("\n\t\t地址:%s",stu[i].address);printf("\n\t\t单位:%s",stu[i].unit);printf("\n\t\temail:%s",stu[i].email);printf("\t\t");if (i+1<pc){ printf("\n\t\t__________________________");system("pause");}}printf("\n\t\t************************************************");}elseprintf("\n\t\t通讯录中无任何纪录");printf("\n\t\t按任意键返回主菜单:");getch();return;}5、查询名片信息:void searchbyname()//按姓名查询{ int mark=0;int i;int a=0;printf("\n\t\t***************** 按姓名查找*******************");char name[20];printf("\n\t\t请输入姓名:");scanf("%s",name);for(i=a;i<pc;i++){ if (strcmp(stu[i].name,name)==0){ printf("\n\t\t************* 以下是您查找的名片信息***********");printf("\n\t\t学号:%s",stu[i].num);printf("\n\t\t姓名:%s",stu[i].name);printf("\n\t\t电话:%s",stu[i].tel);printf("\n\t\t地址:%s",stu[i].address);printf("\n\t\te-mail:%s",stu[i].email);printf("\n\t\t************************************************");mark++;if ((i+1)<pc){ printf("\n\t\t是否继续查找相同名字的名片信息:(y/n)");if (getch()=='y'){ a=i;continue;}elsereturn;}else{ printf("\n\t\t按任意键返回菜单");getch();return;}}}if(mark!=0){ printf("\n\t\t没有相同姓名的学生纪录");printf("\n\t\t按任意键返回菜单");getch();return;}else{ printf("\n\t\t没有相同姓名的名片纪录");printf("\n\t\t按任意键返回菜单");getch();return;}}void searchbynum()//按编号查询{ int mark=0;int i;int a=0;printf("\n\t\t****************** 按编号查找******************\n");char num[10];printf("\n\t\t请输入编号:");scanf("%s",num);for(i=0;i<pc;i++){ if (strcmp(stu[i].num,num)==0){ printf("\n\t\t************** 以下是您查找的名片信息**********");printf("\n\t\t编号:%s",stu[i].num);printf("\n\t\t姓名:%s",stu[i].name);printf("\n\t\t电话:%s",stu[i].tel);printf("\n\t\t地址:%s",stu[i].address);printf("\n\t\te-mail:%s",stu[i].email);printf("\n\t\t************************************************");printf("\n\t\t按任意键返回主菜单:");mark++;getch();return;}}if (mark==0){ printf("\n\t\t没有改名片的信息");printf("\n\t\t按任意键返回主菜单");getch();return;}}6、修改名片信息:void modifybyname(){int mark=0;int i;int a=0;int j;int findmark=0;int deletemark=0;printf("\n\t\t***************** 按姓名修改*******************");char name[20];printf("\n\t\t请输入姓名:");scanf("%s",name);for(i=a;i<pc;i++){ if (strcmp(stu[i].name,name)==0){printf("\n\t\t************* 以下是您修改的名片信息***********");printf("\n\t\t学号:%s",stu[i].num);printf("\n\t\t姓名:%s",stu[i].name);printf("\n\t\t电话:%s",stu[i].tel);printf("\n\t\t地址:%s",stu[i].address);printf("\n\t\te-mail:%s",stu[i].email);printf("\n\t\t************************************************");}printf("请输入要修改的内容:");for (j=i;j<pc-1;j++)stu[j]=stu[j+1];pc--;deletemark++;printf("\n\t\t输入编号:");scanf("%s",&stu[pc].num);printf("\n\t\t输入姓名:");scanf("%s",&stu[pc].name);printf("\n\t\t输入电话号码:");scanf("%s",&stu[pc].tel);printf("\n\t\t输入地址:");scanf("%s",&stu[pc].address);printf("\n\t\t输入单位:");scanf("%s",&stu[pc].unit);printf("\n\t\t输入email:");scanf("%s",&stu[pc].email);pc++;printf("\n\t\t是否继续修改?(y/n):");if (getch()=='y')modifybyname;return;}}void modifybynum(){int mark=0;int i;int a=0;int j;int findmark=0;int deletemark=0;printf("\n\t\t****************** 按编号修改******************\n");char num[10];printf("\n\t\t请输入编号:");scanf("%s",num);for(i=0;i<pc;i++){ if (strcmp(stu[i].num,num)==0){printf("\n\t\t************** 以下是您修改的名片信息**********");printf("\n\t\t编号:%s",stu[i].num);printf("\n\t\t姓名:%s",stu[i].name);printf("\n\t\t电话:%s",stu[i].tel);printf("\n\t\t地址:%s",stu[i].address);printf("\n\t\te-mail:%s",stu[i].email);printf("\n\t\t************************************************");}printf("请输入要修改的内容:");{for (j=i;j<pc-1;j++)stu[j]=stu[j+1];pc--;deletemark++;}printf("\n\t\t输入编号:");scanf("%s",&stu[pc].num);printf("\n\t\t输入姓名:");scanf("%s",&stu[pc].name);printf("\n\t\t输入电话号码:");scanf("%s",&stu[pc].tel);printf("\n\t\t输入地址:");scanf("%s",&stu[pc].address);printf("\n\t\t输入单位:");scanf("%s",&stu[pc].unit);printf("\n\t\t输入email:");scanf("%s",&stu[pc].email);pc++;printf("\n\t\t是否继续修改?(y/n):");if (getch()=='y')modifybynum();return;}}六、软件说明书1、运行环境:Microsoft Visual C++6.02、操作步骤:在此,把软件使用过程写出,并对此程序的一些细节和具体的操作方法加以说明,说明如下:将软件进行初始化,即在VC++6.0中运行该程序,进入程序主界面,如下:(1)根据你要添加的学生人数开始创建通讯录,按照系统给您的提示依次输入学生信息,再根据提示进行查找、删除、显示、修改、退出等操作。

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

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

学生通讯录管理系统数据结构课程设计在咱们的校园生活中,学生通讯录管理系统可真是个好东西。

想象一下,一个个同学的联系方式,电话、微信、QQ统统都在上面,简直像是把大家的生活都放在了一个小本本里。

要是没有这个系统,咱们联系同学可就麻烦了,想找人得一一翻记录,真是浪费时间,像是在玩“捉迷藏”一样。

想想看,早上起来,脑袋还没转过来,就要想起谁的电话,那可真是要抓狂。

这通讯录系统呀,它的结构可是讲究得很。

你可以想象成一个大大的树,上面挂着无数个小果子,每个果子里都有一个同学的信息。

这样一来,想找谁直接往上找就行,方便得很。

数据一旦存进去,就像是钉钉子一样,稳稳当当。

系统能记录的信息可多了,名字、班级、联系方式,简直是多到数不清。

遇到小组作业的时候,想找谁都能立马拿到联系方式,真是省了不少力气。

然后,这通讯录还可以做分类,嘿嘿,按班级、年级来分,真是神了。

就像大家去市场买东西,东西太多了,分类之后,找起来可就容易多了。

这样一来,谁说学生没有组织能力呢?其实这通讯录系统就是个小小的组织者,帮我们把大家的联系信息都理得清清爽爽,真是贴心。

想想咱们一起复习的时候,找不到同学的电话,心里那个急呀,简直就像在大海捞针。

再说说这系统的安全性,虽然大家都是好同学,但隐私问题还是得重视。

系统里有些敏感信息,咱们可不能随便让别人看见。

这样,咱们的通讯录就像一个保险箱,钥匙就掌握在自己手里,安全又放心。

每次登录系统,得输入密码,那种感觉就像在保卫自己的小秘密,真是妙不可言。

这系统也需要维护,不能一味地依赖。

想想之前那些旧的纸质通讯录,翻来翻去,容易撕掉,弄得稀巴烂。

现在好了,系统里随时随地都能修改、更新,一点都不麻烦。

新同学加入、老同学转学,随时可以调整。

想想以前写信联系,那可得等好几天,生怕信丢了,心里急得像热锅上的蚂蚁。

哎,提到信,我倒是想起那些年我们的通讯录。

每天在学校里传来传去,感觉像是一种“情书”,只不过写的全是联系信息,哈哈。

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

实验课程名称数据结构课程设计专业班级计科(2)班学生姓名黄家元学号 10410902031 指导教师冯韵2012至2013 学年第1学期第1 至2周目录1 概述 (3)1.1 现状分析 (3)1.2 存在问题 (3)1.3 实现的意义 (3)2 系统分析 (3)2.1 用户需求分析 (3)2.2 管理员需求分析 (3)3 概要设计 (4)4 详细设计 (4)4.1 通讯录建立模块设计 (4)4.2 通讯录插入模块设计 (5)4.3 通讯录查询模块设计 (5)4.4 通讯录删除模块设计 (6)4.5 通讯录输出模块设计 (6)5 运行与测试 (8)5.1 主界面输出显示 (8)5.2 通讯录建立模块的输出 (8)5.3 通讯录插入模块的输出 (8)5.4 通讯录查询模块的输出 (9)5.4.1 按编号查询 (9)5.4.2 按姓名查询 (9)5.5 通讯录删除模块的输出 (9)5.5.1 按编号删除 (10)5.5.2 按姓名删除 (10)5.6 显示通讯录中所有成员 (10)6 总结与心得 (11)7参考文献: (11)8、附加程序代码 (11)1 概述1.1 现状分析此系统利用线性表中的链表来建立一个通讯录,通讯录包括通讯者的编号、姓名、性别、电话及地址等信息,管理员对通讯录中的每一个通讯者的信息可以作插入、查询、删除、更新、排序操作。

同样每一个通讯者对自己的信息进行插入、查询、删除、修改等操作。

1.2 存在问题利用线性表中的链表怎样建立一个通讯录?在通讯录中管理员和通讯者对此各有的相关操作?1.3 实现的意义通过这个实验更加较熟练掌握C语言的基本内容及程序设计的基本方法。

通过设计一个完整程序,当中运用了数据结构的算法知识,并运用C语言上机调试的基本方法,更加掌握数据结构中链表的相关知识。

2 系统分析2.1 用户需求分析每一个用户能在通讯录对自己的信息进行建立、插入、查找、删除等相关操作。

实现方便用户随时登陆进行相关操作。

2.2 管理员需求分析管理员能很方便地对通讯录的所有用户进行管理,能在通讯录中进行建立、插入、查找、删除等相关操作。

3 概要设计4 详细设计4.1 通讯录建立模块设计通讯录的建立通过链表来实现,先分配新的结点,向通讯录中建立新的成员的详细信息,然后按头插入法继续建立新的成员的详细信息。

程序代码如下:LinkList CreateList(void){LinkList head=(ListNode *)malloc(sizeof(ListNode));ListNode *p,*rear;int flag=0;rear=head;while(flag==0){p=(ListNode *)malloc(sizeof(ListNode));printf("编号(4)姓名(8)性别(2)电话(11)地址(31)\n");printf("*****************************\n");scanf("%s%s%s%s%s",p->data.num,p->,p->data.sex,p->data.phone,p->data.addr);rear->next =p;rear=p;printf("结束建表吗?(1/0):");scanf("%d",&flag);}rear->next=NULL;return head;}4.2 通讯录插入模块设计在链表中采用头插入法,向通信录中添加新的成员的详细信息程序代码如下:void InsertNode(LinkList head,ListNode *p){ListNode *p1,*p2;p1=head;p2=p1->next;while(p2!=NULL&&strcmp(p2->data.num,p->data.num)<0){p1=p2;p2=p2->next;}p1->next=p;p->next=p2;}4.3 通讯录查询模块设计通过顺序查找的方法进行查找,采用了按编号、姓名查找两种方法。

程序代码如下:ListNode * ListFind(LinkList head){// 有序通讯录链表上的查找ListNode *p;char num[5];char name[9];int xz;printf("===============\n");printf(" 1. 按编号查询\n");printf(" 2. 按姓名查询\n");printf("=================\n");printf(" 请选择: ");p=head->next; //假定通讯录表带头结点scanf("%d",&xz);if(xz==1){printf("请输入要查找者的编号:");scanf("%s",num);while(p && strcmp(p->data.num,num)<0)p=p->next;if(strcmp(p->data.num,num)==0)printf("%s,%s,%s,%s,%s\n",p->data.num,p->, p->data.sex,p->data.phone,p->data.addr);if(p==NULL||strcmp(p->data.num,num)>0)p=NULL;//没有查到要查找的通讯者}elseif(xz==2){printf("请输入要查找着的姓名:");scanf("%s",name);while(p && strcmp(p->,name)!=0)p=p->next;}return p;}4.4 通讯录删除模块设计先对所要删除的成员在通讯录中进行查找,再将其删除。

采用了按编号、姓名删除程序代码如下:void DelNode(LinkList head){char k;ListNode *p,*q;p=ListFind(head); //调用查找函数if(p==NULL){printf("没有查到要删除的通讯着!\n");return;}printf("真的要删除改结点嘛?(y/n) : ");scanf("%c",&k);if(k=='y'||k=='Y'){q=head;while(q!=NULL && q->next!=p)q=q->next;q->next=p->next;//删除结点free(p); //释放被删除的结点空间printf("通讯者已被删除!\n");}4.5 通讯录输出模块设计采用顺序操作的方法进行收索,并输出所收索的成员。

void PrintList(LinkList head){ListNode *p;p=head->next;//使p指向链表开始结点printf("编号姓名性别联系电话地址\n");printf("--------------------------------------------\n");while(p!=NULL){printf("%s,%s,%s,%s,%s\n",p->data.num,p->,p->data.sex,p->data.phone,p->data.addr);printf("--------------------------------------------\n");p=p->next; //后移一个结点}整个过程的流程图5 运行与测试5.1 主界面输出显示将程序进行编译、运行图5.1 运行显示5.2 通讯录建立模块的输出输入1,建立通讯录中成员信息图5.2 通讯录建立显示5.3 通讯录插入模块的输出输2,向通讯录插入新的成员信息图5.3 插入新成员显示5.4 通讯录查询模块的输出输入3,则向通讯录链表进行成员的查询,采用按编号、姓名查询两种方法5.4.1 按编号查询图5.4 按编号查询显示5.4.2 按姓名查询图5.5 按姓名查询显示5.5 通讯录删除模块的输出输入4,先对所要删除的成员进行查找,再对查找到得成员进行删除操作,也采用了按编号、姓名两种方法进行操作5.5.1 按编号删除图5.6 按编号删除显示5.5.2 按姓名删除图5.7 按姓名删除显示5.6 显示通讯录中所有成员图5.8 通讯录所有成员显示6 总结与心得通过为期一周的课程设计、对论文的不断改进和反复的修改,我们对《C语言》这门课程有了更深一步的了解。

它是计算机程序设计的重要理论技术基础,在我们计算科学专业的学习中占据着十分重要的地位。

同时也使我们知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。

因为我们学习知识就是为了实践。

而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西,运用《C语言》中的算法思想作数据结构,结合C语言基本知识,编写一个通讯录管理系统。

通过完成本课题,进一步熟悉C语言的基本知识,并掌握数据结构的一些基本算法思想,掌握C语言的文件操作(包括从磁盘读入和向磁盘写入内容),进一步熟悉指针的用法,数组的建立运用和函数的调用等,还掌握了设计一篇论文的格式和基本要求,这也是本次实验最重要的收获,为以后作毕业设计打下坚实的基础。

7参考文献:[1] 严蔚敏吴伟民数据结构(c语言版)[M] 北京:清华大学出版社,2007[2] 何钦铭,冯雁,陈越. 数据结构课程设计浙江:浙江大学出版社,2007[3] 李春葆,陶红艳,金晶,赵丙秀. 数据结构与算法教程. 北京:清华大学出版社,2007[4] 赵文静. 数据结构与算法[M]. 北京: 科学出版社, 2007.8: 41-64[5] 傅清祥,王晓东. 数据结构与算法设计[M]. 北京: 电子工业出版社, 2006.3: 31-46 8、附加程序代码# include<stdio.h># inclu de<string.h># include<stdlib.h>typedef struct{char num[5];char name[9];char sex[3];char phone[13];char addr[31];}DataType;typedef struct node{DataType data;struct node * next;}ListNode;typedef ListNode * LinkList;LinkList head;ListNode *p;int menu_select();LinkList CreateList(void);void InsertNode(LinkList head,ListNode *p);ListNode *ListFind(LinkList head);void DelNode(LinkList head);void PrintList(LinkList head);void main(){for( ; ; ){switch(menu_select()){case 1:printf("*****************************\n");printf("* 通讯录链表的建立*");printf("*******************************\n");head=CreateList();break;case 2:printf("*****************************\n");printf("* 通信者信息的添加*\n");printf("*****************************\n"); printf("编号(4)姓名(8)性别(2)电话(11)地址(31)\n");printf("*****************************\n");p=(ListNode *)malloc(sizeof(ListNode));scanf("%s%s%s%s%s",p->data.num,p->,p->data.sex,p->data.phone,p->data.addr);InsertNode(head,p);break;case 3:printf("*****************************\n");printf("* 通信者信息的查询*\n");printf("*****************************\n");p=ListFind(head);if(p!=NULL){printf("编号姓名性别联系电话地址\n");printf("*****************************\n");scanf("%s,%s,%s,%s,%s",p->data.num,p->,p->data.sex,p->data.phone,p->data.addr);printf("*****************************\n");}elseprintf("没查到要查询的通信者!\n");break;case 4:printf("*****************************\n");printf("* 通信者信息的删除*\n");printf("*****************************\n");DelNode(head);break;case 5:printf("*****************************\n");printf("* 通讯录链表的输出*\n");printf("*****************************\n");PrintList(head);break;case 0:printf("\t 再见!\n");return ;}}}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("请输入0--5:");for( ; ; ){scanf("%d",&sn);if(sn<0||sn>5)printf("\n\t输入错误,重选0--5:");elsebreak;}return sn;}LinkList CreateList(void){LinkList head=(ListNode *)malloc(sizeof(ListNode));ListNode *p,*rear;int flag=0;rear=head;while(flag==0){p=(ListNode *)malloc(sizeof(ListNode));printf("编号(4)姓名(8)性别(2)电话(11)地址(31)\n");printf("*****************************\n");scanf("%s%s%s%s%s",p->data.num,p->,p->data.sex,p->data.phone,p->data.addr);rear->next =p;rear=p;printf("结束建表吗?(1/0):");scanf("%d",&flag);}rear->next=NULL;return head;}void InsertNode(LinkList head,ListNode *p){ListNode *p1,*p2;p1=head;p2=p1->next;while(p2!=NULL&&strcmp(p2->data.num,p->data.num)<0){p1=p2;p2=p2->next;}p1->next=p;p->next=p2;}ListNode * ListFind(LinkList head){// 有序通讯录链表上的查找ListNode *p;char num[5];char name[9];int xz;printf("===============\n");printf(" 1. 按编号查询\n");printf(" 2. 按姓名查询\n");printf("=================\n");printf(" 请选择: ");p=head->next; //假定通讯录表带头结点scanf("%d",&xz);if(xz==1){printf("请输入要查找者的编号:");scanf("%s",num);while(p && strcmp(p->data.num,num)<0)p=p->next;if(strcmp(p->data.num,num)==0)printf("%s,%s,%s,%s,%s\n",p->data.num,p->, p->data.sex,p->data.phone,p->data.addr);if(p==NULL||strcmp(p->data.num,num)>0)p=NULL;//没有查到要查找的通讯者}elseif(xz==2){printf("请输入要查找着的姓名:");scanf("%s",name);while(p && strcmp(p->,name)!=0)p=p->next;}return p;}void DelNode(LinkList head){char k;ListNode *p,*q;p=ListFind(head); //调用查找函数if(p==NULL){printf("没有查到要删除的通讯着!\n");return;}printf("真的要删除改结点嘛?(y/n) : ");scanf("%c",&k);if(k=='y'||k=='Y'){q=head;while(q!=NULL && q->next!=p)q=q->next;q->next=p->next;//删除结点free(p); //释放被删除的结点空间printf("通讯者已被删除!\n");}}void PrintList(LinkList head){ListNode *p;p=head->next;//使p指向链表开始结点printf("编号姓名性别联系电话地址\n");printf("--------------------------------------------\n");while(p!=NULL){printf("%s,%s,%s,%s,%s\n",p->data.num,p->,p->data.sex,p->data.phone,p->data.addr);printf("--------------------------------------------\n");p=p->next; //后移一个结点}}。

相关文档
最新文档