通讯录管理系统的设计与实现
c语言实现通讯录管理系统(用链表实现)

c语⾔实现通讯录管理系统(⽤链表实现)题⽬:通讯录(通过链表实现)设计并实现⼀个简易的通讯录软件,管理个⼈通讯记录。
⼀条通讯记录可包括:姓名、⼯作单位、⼿机、住宅电话、E-Mail、家庭住址等(可⾃⾏增删,但不可过少)。
该系统应实现以下基本功能:(1)增加新的通讯记录。
(2)删除已有的通讯记录。
(3)修改已有的通讯记录。
(4)浏览全部或指定(如指定姓名、⼯作单位等)的通讯记录。
(5)合理组织排列各项功能,界⾯可使⽤键盘操作。
(6)以⽂件的形式存储数据。
说明:⼤⼀时的c语⾔课设,⽤链表实现⼀个通讯录管理系统,为了美观好看,花了很多时间调整齐度,记录⼀下⼤⼀时的作业。
其主要功能是对通讯录可输⼊,显⽰,插⼊,删除,最难是可保存,这个学⽂件的时候不怎么会。
内容我⾃⼰弄了7个,名字,性别,⼯作单位,⼿机,住宅电话,E-Mail,家庭住址(其他太多其实都是⼀样的,就懒得加了)。
主要运⽤到对指针中的链表的功能和使⽤要⽐较扎实,分部列写就可以了。
实现图⽚:附上代码:1 #include <stdio.h>2 #include <string.h>3 #include <stdlib.h>4 typedef struct student5 {6char name[20];//名字7char wm[20];//性别8char work[100];//⼯作单位9char stel[20];//⼿机10char htel[20];//住宅号码11char mail[20];//E-Mail12char home[100];//家庭住址13struct student *next;14 }stu;15 stu *head;//头指针16void screen()//主菜单17 {18 printf("\n=======================================================\n");19 printf(" 欢迎来到通讯录管理系统\n\n");20 printf(" 1.输⼊数据 2.显⽰数据\n");21 printf(" 3.插⼊数据 4.删除数据\n");22 printf(" 5.查看数据 6.修改数据\n");23 printf(" 7.保存数据 8.返回主菜单\n");24 printf("\n~~~~~~输~~~~~~⼊~~~~~~9~~~~~~退~~~~~~出~~~~~~程~~~~~~序\n");25 }26void input()//输⼊数据27 {28int ans;//判断是否继续输⼊29 stu *p1,*p2;30 p1=(stu *)malloc(sizeof(stu));//申请内存来⽤31if(p1!=NULL)32 {33 printf("========输⼊数据========\n");34 head=p1;35while(1)36 {37 printf("名字:");38 scanf("%s",&p1->name);39 printf("性别:");40 scanf("%s",&p1->wm);41 printf("⼯作单位:");42 scanf("%s",&p1->work);43 printf("⼿机:");44 scanf("%s",&p1->stel);45 printf("住宅号码:");46 scanf("%s",&p1->htel);47 printf("E-Mail:");48 scanf("%s",&p1->mail);49 printf("家庭地址:");50 scanf("%s",&p1->home);51 printf("===================================\n");52 p2=p1;53 p1=(stu *)malloc(sizeof(stu));//申请下⼀个要⽤的空间54if(p1!=NULL)55 p2->next=p1;56 printf("请选择是否继续输⼊:1.继续 2.退出\n请选择:");//⽤户选择57 scanf("%d",&ans);58if(ans==1)//继续59continue;60else//退出61 {62 printf("========输⼊完毕========\n");63 p2->next=NULL;64free(p1);//将申请的的⽆⽤内存释放65break;66 }67 }68 }69 }70void look(stu *p1)//显⽰数据71 {72 printf("========显⽰数据========\n");73while(p1!=NULL)74 {75 printf("名字:%s\n",p1->name);76 printf("性别:%s\t",p1->wm);77 printf("⼯作单位:%s\t",p1->work);78 printf("⼿机:%s\t",p1->stel);79 printf("住宅号码:%s\t",p1->htel);80 printf("E-Mail:%s\t",p1->mail);81 printf("家庭住址:%s\n",p1->home);82 printf("=====================================\n");83 p1=p1->next;84 }85 printf("========显⽰完毕========\n");86 }87void insert()//插⼊数据88 {89int ans;//选择插⼊位置90char name[20];//插⼊者的名字91 printf("========插⼊数据========\n");92 stu *p1,*p2,*p3;93 p1=head;94 p3=(stu *)malloc(sizeof(stu));//申请内存95 p3->next=NULL;96 printf("请输⼊插⼊者的数据:\n");97 printf("名字:");98 scanf("%s",&p3->name);99 printf("性别:");100 scanf("%s",&p3->wm);101 printf("⼯作单位:");102 scanf("%s",&p3->work);103 printf("⼿机:");104 scanf("%s",&p3->stel);105 printf("住宅号码:");106 scanf("%s",&p3->htel);107 printf("E-Mail:");108 scanf("%s",&p3->mail);109 printf("家庭地址:");110 scanf("%s",&p3->home);111 printf("请选择插⼊位置:1.⾸位置插⼊ 2.尾部插⼊ 3.插到某⼈前⾯\n请选择:");112 scanf("%d",&ans);113switch(ans)114 {115case1://放到头指针116 p3->next=p1;117 head=p3;118break;119case2://放到尾部120while(p1->next!=NULL)121 p1=p1->next;122 p1->next=p3;123break;124case3://放到某⼈前⾯125 printf("请输⼊插到谁前⾯名字:");126 scanf("%s",name);127while(strcmp(name,p1->name)!=0)128 {129 p2=p1;130 p1=p1->next;131 }132 p2->next=p3;133 p3->next=p1;134break;135 }136 printf("========插⼊成功========\n");137 }138void deleted()//删除数据139 {140 stu *p1,*p2;141char name[20];//删除者名字142 printf("========删除数据========\n");143 printf("请输⼊要删除者的名字:");144 scanf("%s",name);145 p1=head;146if(head==NULL)//通讯录已经没数据了147 {148 printf("通讯录⾥什么也没有了。
通讯录管理系统设计报告

通讯录管理系统设计报告一、引言通讯录在日常生活中扮演着重要的角色,用来存储和管理各种联系人信息,方便人们随时找到需要联系的人或组织。
随着移动互联网的普及,通讯录的管理变得更加便捷和高效。
为了提高通讯录的管理效率,我们设计并开发了一款通讯录管理系统。
二、系统概述通讯录管理系统是一个基于Web的应用程序,用户可以通过浏览器访问系统,进行通讯录的管理操作。
系统主要包括以下功能:•用户登录与注册:用户可以注册新账号,并通过账号密码登录系统。
•联系人管理:用户可以添加、编辑、删除联系人信息,包括姓名、电话号码、邮箱等。
•分组管理:用户可以创建分组并将联系人归类到不同分组。
•搜索功能:用户可以通过关键词搜索联系人信息。
•导出和导入功能:用户可以将联系人信息导出为Excel表格,并可以通过Excel文件导入联系人到系统中。
三、系统架构通讯录管理系统采用了前后端分离的架构,前端使用Vue.js框架开发,提供友好的用户界面;后端使用Node.js和Express框架搭建RESTful API,负责数据的存储和管理。
系统中的数据存储在MySQL数据库中,用户的密码使用bcrypt进行加密存储,确保用户信息的安全性。
同时,系统对用户权限进行了细致管理,保障用户在系统中的数据安全。
四、系统界面系统的界面设计简洁直观,用户可以轻松进行操作。
主要包括登录页面、通讯录首页、联系人管理页面、分组管理页面等。
用户登录页面:[登录页面截图]通讯录首页:[通讯录首页截图]联系人管理页面:[联系人管理页面截图]五、系统特色•简洁高效:系统操作简单直观,提供了快速的联系人管理功能。
•个性化定制:用户可以根据自己的需求创建分组,快速查找联系人。
•数据安全:采用了加密技术和权限管理,确保用户数据的安全性。
•导入导出功能:支持Excel文件导入导出,方便用户管理大批量联系人信息。
六、未来展望通讯录管理系统将继续进行优化和迭代,引入更多智能化功能,如联系人推荐、消息提醒等,提升用户体验。
Java通讯录管理系统设计报告

Java通讯录管理系统设计报告1. 引言随着社会发展和信息技术的进步,通讯录在人们的日常生活和工作中变得越来越重要。
Java通讯录管理系统是一种用于管理个人和组织联系信息的软件系统。
本篇文档将详细介绍Java通讯录管理系统的设计和实现。
2. 功能需求Java通讯录管理系统具有以下功能需求: - 添加联系人:用户可以添加新的联系人,包括姓名、电话号码、电子邮件等相关信息。
- 删除联系人:用户可以删除已存在的联系人。
- 编辑联系人:用户可以修改已存在联系人的信息。
- 搜索联系人:用户可以根据姓名、电话号码或其他关键字搜索联系人。
- 显示联系人列表:用户可以查看所有联系人的列表,并按照姓名或其他方式进行排序。
- 导入/导出联系人:用户可以将联系人导入/导出到文件中,以实现数据的备份和共享。
3. 系统设计3.1 技术栈选择Java通讯录管理系统采用Java语言进行开发,使用Java的面向对象特性来实现系统的各个功能模块。
系统使用MySQL数据库来存储联系人的信息。
3.2 系统架构Java通讯录管理系统采用三层架构,分为表示层、业务逻辑层和数据访问层。
•表示层:负责与用户的交互,包括图形界面和用户输入输出的处理。
•业务逻辑层:负责处理用户的请求,对联系人信息进行增加、删除、编辑、搜索等操作,并调用数据访问层进行数据的读写。
•数据访问层:负责与数据库交互,进行联系人信息的读写操作。
3.3 类设计在Java通讯录管理系统中,主要涉及以下类的设计: - Contact类:表示一个联系人,包含姓名、电话号码、电子邮件等属性。
- ContactDAO接口:定义对联系人的增删改查等操作。
- ContactDAOImpl类:实现ContactDAO接口,负责与数据库进行交互。
- ContactService类:负责处理业务逻辑,调用ContactDAOImpl 类进行联系人信息的操作。
- ContactConsole类:表示层的用户界面,处理用户输入输出和展示联系人信息。
数据结构课程设计通讯录管理系统报告

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

数据结构课程设计通讯录管理系统一、系统需求分析通讯录管理系统的主要目标是提供一个方便、高效的方式来管理联系人信息。
具体需求包括: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;}```六、系统测试在完成系统的开发后,需要进行全面的测试以确保系统的稳定性和可靠性。
桌面通讯录管理系统的 设计与实现

北京师范大学毕业论文(设计)论文(设计)题目桌面通讯录管理系统的设计与实现院(系):信息科学与技术学院专业:计算机科学与技术专业学号:0632133015学生姓名:张荣荣指导教师:尹乾指导教师职称:副教授指导教师单位:信息科学与技术学院2009 年11 月01 日目录绪论 (4)第一章、概述 (5)1.1 数据库及其应用 (5)1.2 数据库系统 (5)1.3 数据库系统简介 (6)第二章、数据库系统设计 (7)2.1数据库设计概述 (7)2.2数据库设计周期 (7)第三章、图书管理系统具体设计 (8)3.1 图书管理系统总体规划 (8)3.2需求分析 (9)3.3功能设计 (11)3.4逻辑设计 (11)3.5物理设计 (12)第四章、数据库实现 (13)4.1数据库的建立 (13)4.2数据库应用程序的实现 (16)4.3桌面通讯录管理系统的调试 (37)4.4桌面通讯录管理系统其它设计工作 (38)第五章、结束语 (40)参考文献 (41)桌面通讯录管理系统的设计与实现摘要本文介绍了数据库管理系统的基本设计方法,详细阐述了整个应用系统的设计思路,并对各部分设计周期进行了详尽的分析,最终达成了一个完整的设计方案;在文章的最后,还根据数据库系统的调试结果,提出了可以进一步改进的部分,以便在投入实际应用后系统可以更加稳定可靠的工作。
本文的数据库系统是一个桌面通讯录管理系统,包括查看界面和管理界面,分别有添加、删除、查看等功能。
通讯录管理是同学们都熟悉的内容,在这个项目中,可以通过自己设计的表单对一个简单的数据表进行管理,包括添加、修改、删除以及查询等功能,最后生成一个可执行文件,并在桌面上创建一个快捷方式,随时使用这个应用程序去管理通讯录。
关键字桌面通讯录管理系统数据库系统AbstractThis article describes the basic design of the database management system approach, elaborated the entire application system design ideas, and all parts of the design cycle of a detailed analysis, and finally reach a complete design; in the article Finally, according to the database system debugging results, further improvements can be made part of the post in order to put into practical application systems can be more stable and reliable work.This database system is a desktop address book management system, including the view interface and management interface, respectively, add, delete, view and other functions.Address book management is the students are familiar with the content, in this project, you can form their own design for a simple data table management, Including add, modify, delete, and query functions, ultimately producing an executable file, and create a shortcut on the desktop, ready to use this application to manage contacts.KeywordsDesktop Address Book Management System Database System绪论通讯录管理是同学们都熟悉的内容,在这个项目中,可以通过自己设计的表单对一个简单的数据表进行管理,包括添加、修改、删除以及查询等功能,最后生成一个可执行文件,并在桌面上创建一个快捷方式,随时使。
C#通讯录管理系统课程设计

项目目标
掌握数据库设计的基本原理 和方法
理解面向对象编程的思想和 方法
掌握C#编程语言的基本语 法和特性
掌握Windows Forms应 用程序的开发方法和技巧
掌握软件工程和项目管理的 基本知识和技能
提高团队协作和沟通能力, 培养解决问题的能力
联系人分组:工作、生活、 学习等
联系人搜索:根据姓名、 电话、地址等搜索联系人
联系人管理:添加、修改、 删除、查询等操作
数据备份与恢复:定期备 份数据,防止数据丢失
系统架构设计
架构设计原则:高内聚、低耦 合、可扩展、可维护
架构设计方法:分层架构、模 块化设计、服务化设计
架构设计要素:用户界面、业 务逻辑、数据存储、通信协议
架构设计工具:UML、Visio、 PowerDesigner等
数据库设计
数据库类型:SQL Server 数据库结构:用户表、联系人表、分组表等 数据库字段:用户名、密码、联系人姓名、电话、邮箱等 数据库操作:增删改查、排序、筛选等
界面设计
主界面:显示联系人列表、搜索框、添加联系人按钮等 联系人详情界面:显示联系人信息、编辑按钮、删除按钮等 添加联系人界面:输入联系人姓名、电话、邮箱等信息 编辑联系人界面:修改联系人信息 删除联系人界面:确认删除联系人 搜索联系人界面:输入关键词,显示符合条件的联系人列表
单元测试
单元测试的概念:对软件中的最 小可测试单元进行测试
单元测试的方法:白盒测试、黑 盒测试、灰盒测试
添加标题
添加标题
添加标题
添加标题
单元测试的目的:验证软件单元 的功能是否正确
单元测试的工具:NUnit、JUnit、 Te s t N G 等
通讯录管理系统毕业设计(两篇)2024

引言概述:通讯录管理系统是一种用于管理联系人信息的软件,它能够为用户提供便捷的联系人管理和信息查询功能。
本文将继续介绍通讯录管理系统的设计和实现,重点关注系统的用户界面设计、数据存储与管理、通讯录的分类与搜索功能、用户权限管理以及通讯录系统的扩展与升级。
正文内容:1.用户界面设计1.1设计原则:用户友好性、易用性和美观性原则1.2主界面设计:主界面布局、功能模块展示、导航设计1.3交互设计:交互方式、操作流程、反馈机制1.4响应式设计:适配多种设备和屏幕分辨率2.数据存储与管理2.1数据库设计:确定实体和属性、建立表结构、定义关系2.2数据库连接:连接数据库、读写操作、异常处理2.3数据备份与恢复:数据备份策略、备份文件管理、数据恢复机制2.4数据安全性:权限控制、数据加密、数据完整性3.通讯录的分类与搜索功能3.1通讯录分类:基本分类和用户自定义分类3.2联系人添加与编辑:输入验证、字段定义、数据关联3.3联系人查询:关键字查询、条件过滤、多条件组合查询3.4联系人导入导出:支持多种数据格式、数据匹配与转换、导入导出策略3.5通讯录分享与同步:用户权限设置、跨设备同步、冲突解决4.用户权限管理4.1用户注册与登录:用户信息获取、身份验证、登录状态管理4.2用户权限分配:管理员与普通用户权限区分、权限控制细化4.3用户信息管理:个人信息修改、密码重置、账号注销4.4安全性保护:登录失败锁定、密码加密、会话管理5.通讯录系统的扩展与升级5.1模块化设计:可插拔式功能模块、模块间接口定义5.2扩展性设计:支持插件开发、动态加载与卸载5.3性能优化:数据索引优化、查询优化、缓存机制5.4系统升级:版本管理、更新提示、升级策略总结:通过上述的详细阐述,我们可以看到,通讯录管理系统涵盖了用户界面设计、数据存储与管理、通讯录的分类与搜索功能、用户权限管理以及通讯录系统的扩展与升级等多个关键领域。
在该系统的设计过程中,我们需要重点关注用户友好性、数据安全性和系统的可扩展性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验报告实验名称:通讯录管理系统的设计与实现试验时间:2011.1.13班级:姓名学号:指导老师:1.问题描述:通讯录是用来记录,查询联系人通讯信息的工具。
电子通讯录已成为手机,电子词典等电子设备中不可缺少的工具软件。
设计一个能够,满足这种需求的软件。
基本功能模块:输入,显示,查找,插入,删除,保存,读入,排序,修改,移动,退出。
2.设计要求:(1)基本要求1.设计通讯录数据的逻辑结构和物理结构。
2.通讯录至少包含下列数据信息:姓名,电话,地址等。
3.完成图示基本功能。
4.软件易用,操作简单。
5.根据自己使用通讯录的体会,扩充其他功能,如按姓名查找,按学号查找,按序号查找等。
(2)较高要求1.数据输入有效性检验:如姓名不能为空,号码中不能有非法字符等。
2.提供分组管理的相关功能,如:分组显示,加入组,组创建,组查询等。
3.可视化的界面设计。
3.测试案例:请输入您的选择(0--6): 1分别输入编号,姓名,性别,电话,地址(输入0 结束通信录的建立): 编号:01姓名:张三电话:152****1919地址:2-222编号:0请输入您的选择(0--6): 2编号:01姓名:张三电话:152****1919地址:2-222是否继续添加?(Y/N):N请输入您的选择(0--6): 3请选择查询的方式(1 编号,2 姓名):1 请输入编号:01编号:01姓名:张三电话:152****1919地址:2-222请问是否继续查询?(Y/N):N请输入您的选择(0--6): 4输入删除编号:01删除学生信息如下:编号:01姓名:张三电话:152****1919地址:2-222请输入您的选择(0--6): 5通讯录的全部信息如下:*****编号*****姓名*****性别*****电话*****地址*****学生总人数为:1请输入您的选择(0--6):6 记录已保存!请输入您的选择(0--6):0 结束!!!4.数据结构设计:数据域描述通讯录的相关信息,根据每个学生的基本信息含有多个属性,其中包括序号,姓名,性别,电话,地址等,为此可根据学生信息建立结构体,类型定义如下:typedef struct{ char num; //学号char name; //姓名char sex; //性别char phone; //电话char addr; //地址}DataType;根据通讯录的设计要求,可用单向链表实现该通讯录系统的功能。
链表结点只含一个数据域和一个指针,用typedef定义通讯录的结点类型。
线性表的链式存储结构定义如下:typedef struct node{ //结构类型定义DataType data; //结点数据域Struct node * next; //结点指针域}ListNode;typedef ListNode *LinkList;ListNode * p; //定义一个指向结点的指针变量LinkList head; //定义指向单链表的头指针5.算法设计:1)建立通讯录链表建立带头结点的单链表,运用尾插法建表void StudentRecords::Build() {string NUM;bool flag=false;ListNode *p;cout<<"分别输入编号,姓名,性别,电话,地址(输入0 结束通信录的建立):"<<endl;while(!flag){cout<<"编号:";cin>>NUM;if(NUM>"0") {p=new ListNode; //创建一个新头结点p->data.num=NUM;cout<<"姓名:";cin>>p->;cout<<"性别:";cin>>p->data.sex;cout<<"电话:";cin>>p->data.phone;cout<<"地址:";cin>>p->data.addr;p->next=head->next;head->next=p;}else break;}cout<<endl;}2)通讯录信息的插入单链表结点插入元素的基本思想:使用两个指针变量p和q分别指向访问过的结点和下一个待访问的结点,循环顺序查找链表,寻找插入结点的位置,其中p指向待插入位置的前一个结点。
首先:p指向原链表的头结点,q指向链表的第一个指针;while(q!=NULL&&q->data.num){p=q; //p指向访问过的结点q->next; //q指向表的下一个结点}然后插入新结点:void StudentRecords::Add(){ListNode *p;bool flag=true;while(flag) {p=new ListNode;cout<<"分别输入编号,姓名,性别,电话,地址:"<<endl;cout<<"编号:";cin>>p->data.num;cout<<"姓名:";cin>>p->;cout<<"性别:";cin>>p->data.sex;cout<<"电话:";cin>>p->data.phone;cout<<"地址:";cin>>p->data.addr;p->next=head->next;head->next=p;cout<<endl;cout<<"是否继续添加?(Y/N):";char YN;cin>>YN;if(YN=='Y')flag=true;else flag=false;}}3)通讯录的查找基本思想:首先输入要查找的通讯录学号或姓名,从表头顺序访问表中的结点,如查找成功,则返回一个指向查找到的通讯者结点的指针,若查找失败,则返回一个空指针NULL.void StudentRecords::Check(){ListNode *p,*q;int i;bool flag1,flag2,flag3,flag;flag=true;char YN='Y';string NUM;string NAME;while(flag){if(!head->next){cout<<"通信录为空!"<<endl;break;}else{while(YN=='Y') {flag3=false;cout<<"请选择查询的方式(1编号,2姓名):";cin>>i;switch(i){case 1:cout<<"请输入编号:";cin>>NUM;break;case 2:cout<<"请输入姓名:";cin>>NAME;break;default:cout<<"输入错误,请重新输入!"<<endl;flag3=true;break;}if(!flag3){p=head->next;flag1=false;while(p){flag2=false;switch(i){case 1:if(NUM==p->data.num){flag2=flag1=true;q=p;}p=p->next;break;case 2:if(NAME==p->){flag2=flag1=true;q=p;}p=p->next;break;default:break;}if(flag2){cout<<"该学生信息如下:"<<endl;cout<<"编号:"<<q->data.num<<endl;cout<<"姓名:"<<q-><<endl;cout<<"性别:"<<q->data.sex<<endl;cout<<"电话:"<<q->data.phone<<endl;cout<<"地址:"<<q->data.addr<<endl;}}cout<<endl;if(!flag1)cout<<"查无此人"<<endl;cout<<"请问是否继续查询?(Y/N):";cin>>YN;if(YN=='Y')flag=true;else flag=false;}}}cout<<endl;}}4)通讯录的删除基本思想:现调用查找函数,查找到要删除的结点,删除void StudentRecords::Delete(){ListNode *p,*q;string NUM;char YN='Y';bool flag,flag1;flag1=true;while(flag1){while( YN=='Y'){ flag=false;p=head;q=p->next;if(!q){cout<<"通信录为空!"<<endl;flag1=false;break;}cout<<"输入删除编号:";cin>>NUM;while(q){if(NUM==q->data.num){cout<<"确认删除"<<NUM<<"的信息(Y/N):";cin>>YN;if(YN=='Y')flag1=true;else flag1=false;cout<<"删除学生信息如下:"<<endl;cout<<"编号:"<<q->data.num<<endl;cout<<"姓名:"<<q-><<endl;cout<<"性别:"<<q->data.sex<<endl;cout<<"电话:"<<q->data.phone<<endl;cout<<"地址:"<<q->data.addr<<endl;p->next=q->next;delete q;flag=true;break;}else {p=p->next; q=p->next;}}if(!flag) cout<<"查无此人!"<<endl;cout<<"是否继续进行删除?(Y/N):";cin>>YN;if(YN=='Y')flag1=true;else flag1=false;}}cout<<endl;}5)通讯录的输出基本思想:将头指针赋给一个指针变量p,然后用p向后扫描,输出相应结点的值,直到表尾p为空为止.void StudentRecords::PrintList(){ListNode *p,*q,*s,*Max,*Min,*first;int count=0;if(head->next){first=new ListNode;s=first;cout<<"通信录的全部信息如下:"<<endl<<endl;cout<<"****编号"<<"***********姓名"<<"**********性别"<<"**********电话"<<"**************地址***********"<<endl;while(head->next){Min=head->next ;Max=Min->next ;q=head;while(Max&&Min){if(Max->data .num <Min->data .num ){Min=Max;Max=Max->next ;}e lse Max=Max->next ;}while(q->next !=Min)q=q->next ;q->next =Min->next;s->next=Min;s=Min;s->next =NULL;}delete head;head=first;p=head->next;while(p){cout<<setw(8)<<p->data.num<<setw(17)<<p-><<setw(13)<<p->data.sex<<setw(16)<<p->data.phone<<setw(21)<<p->data.addr<<endl;p=p->next;count++;}cout<<endl<<"学生总人数为:"<<count<<endl;}else cout<<"通信录为空!"<<endl;cout<<endl;}void StudentRecords::cin_file(char*filename){ifstream infile(filename,ios::in);if(!infile){cerr<<"open error!"<<endl;exit(1);}ListNode ch,* p;while(infile>>ch.data.num){p=new ListNode;infile>>>>ch.data.sex>>ch.data.phone>>ch.data.addr;p->data.num=ch.data.num;p->=;p->data.sex=ch.data.sex;p->data.phone=ch.data.phone;p->data.addr=ch.data.addr;p->next=head->next;head->next=p;}infile.close();}6)通讯录的保存void StudentRecords::Preservation_file(){ofstream outfile("RD.txt",ios::out);if(!outfile){cerr<<"open error!"<<endl;exit(1);}ListNode * p;p=head->next;while(p){outfile<<setw(8)<<p->data.num<<setw(17)<<p-><<setw(13)<<p->data.sex<<setw(16)<<p->data.phone<<setw(22)<<p->data.addr<<endl;p=p->next;}cout<<"记录已保存!"<<endl<<endl;outfile.close();}7)界面设计6.运行与测试1)运行程序,显示菜单,如图:2)按“1”创建表。