通讯录管理系统实验报告
- 格式:doc
- 大小:381.96 KB
- 文档页数:26
通讯录系统实验报告通讯录系统实验报告一、引言通讯录系统是一种方便管理联系人信息的工具。
随着社会的发展和科技的进步,人们的联系方式越来越多样化,传统的纸质通讯录已经无法满足人们的需求。
因此,设计和开发一个高效、便捷的通讯录系统成为了一个重要的课题。
二、实验目的本次实验的目的是设计和实现一个通讯录系统,使用户能够方便地存储、查找和管理联系人信息。
通过这个实验,我们可以学习和掌握数据库的基本操作,提高我们的编程能力和实践能力。
三、实验过程1.需求分析在设计通讯录系统之前,我们首先需要进行需求分析。
通过调研和访谈,我们了解到用户对通讯录系统的需求主要包括以下几点:- 用户可以添加、编辑和删除联系人信息;- 用户可以按照姓名、电话号码等字段进行快速查找;- 用户可以导入和导出联系人信息,方便备份和共享;- 界面简洁明了,操作简单易用。
2.数据库设计在进行数据库设计时,我们需要确定通讯录系统的数据结构。
通讯录系统的主要数据包括联系人的姓名、电话号码、邮箱等信息。
我们可以使用关系型数据库来存储这些数据,并通过SQL语句进行操作。
3.界面设计为了提高用户体验,我们需要设计一个简洁明了的界面。
界面设计应该符合用户的使用习惯,操作简单易懂。
在设计界面时,我们可以考虑使用图形化界面或者命令行界面。
4.编码实现在编码实现过程中,我们需要根据需求分析和数据库设计来进行编码。
编码实现的重点是实现用户的各项操作功能,包括添加联系人、编辑联系人、删除联系人、查找联系人等。
5.测试和优化在编码实现完成后,我们需要进行测试和优化。
通过测试,我们可以发现和修复潜在的bug,优化系统的性能和稳定性。
四、实验结果经过几天的努力,我们成功地设计和实现了一个通讯录系统。
该系统具有以下特点:- 界面简洁明了,操作简单易用;- 用户可以方便地添加、编辑和删除联系人信息;- 用户可以按照姓名、电话号码等字段进行快速查找;- 用户可以导入和导出联系人信息,方便备份和共享。
实验报告----通讯录管理系统专业:计算机嵌入式班级:10455341日期2012-05-28一.实验目的1.通过这一项目的实现,进一步掌握利用连接都数据库进行访问。
2.掌握利用来操纵数据库中的数据的方法。
3.通过本次实验来提高编程能力和独立解决编程问题的能力。
二.实验内容1.设计并实现“通讯录管理系统”。
该系统提供多用户的通讯录管理,并能对通讯录中的联系人分组。
2.具体任务①完成“用户管理”窗口②完成“用户登录”窗口③完成“主窗体”窗口④完成“新增/修改联系人”窗口⑤完成“新增/修改分组”窗口(不在题目要求范围之内)⑥完成“查找联系人”窗口⑦完成“用户注册”窗口(为方便使用用户管理而添加的,不在题目要求范围之内)三.实验环境Microsoft Visual Studio 2008语言:C#四.实验分析、代码及运行结果本次实验实现通讯录管理系统的基本功能,包括用户管理、用户登录、修改/新增联系人、修改/新增分组、查找联系人、用户注册等。
本实验中所有数据全部放在ADDBRS数据库中,该库在Form1_Load中创建,并同时在库中创建Users和Groups两张表,在以后每注册一个用户的时候就同时创建一张以用户名命名的表,用于存储联系人的信息。
主界面中对分组和联系人的增删改已经查看的控件不止一个,但下面的空间均调用菜单栏中的方法来实现操作。
添加/修改联系人为同一个窗口,添加/修改分组为同一个窗口在centerData类中声明一个静态字符串centerData.constr来代替所有代码中连接数据库所用到的字符串。
1.登陆窗体①截图②代码using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data;using System.Data.SqlClient;namespace 通讯录管理系统1{ public partial class Form1 : Form{ public Form1(){ InitializeComponent(); }public void AddLink() //用于将所有注册过的联系人添加在combox1的下拉菜单中{ comboBox1.Items.Clear();SqlConnection con = new SqlConnection();con.ConnectionString = CenterData.constr;con.Open();SqlCommand cmd = new SqlCommand("select name from Users", con);SqlDataReader dr = cmd.ExecuteReader();while (dr.Read()){ comboBox1.Items.Add(dr[0]); }con.Close();}private void Form1_Load(object sender, EventArgs e){ try //该距用于判断数据库ADDBRS是否已经存在{ SqlConnection con = new SqlConnection();con.ConnectionString = CenterData.constr;con.Open();con.Close();}catch //如果不存在try运行出错,则运行该语句,创建数据库和两个表{ SqlConnection conn = new SqlConnection();conn.ConnectionString = "Data Source=localhost;User ID=sa;Password=sa;";onn.Open();SqlCommand cmd = conn.CreateCommand();mandText = "create database [ADDBRS] ";cmd.ExecuteNonQuery();mandText = @"use [ADDBRS] create table Users (name nvarchar(50) NOT NULL,password nvarchar(50) NOT NULL,maxMan int NOT NULL,maxGroup int NOT NULL) ";cmd.ExecuteNonQuery();//Users用于存储用户名、密码、最多组别、最多联系人mandText = @"use [ADDBRS] create table Groups (GroupName nvarchar(50) NOT NULL,UserName nvarchar(50) NOT NULL)";cmd.ExecuteNonQuery();//Groups用于存储每个所有用户的分组信息conn.Close();}finally{ // TODO: 这行代码将数据加载到表“ers”中。
通讯录管理系统实践报告一、需求分析1、功能要求通讯录管理系统至少应具有以下功能:(1)、能通过键盘向通讯录输入数据。
要求随时都能使用该项功能实现记录输入,一次可以输入一条记录,也可以输入多条记录。
所谓一条记录,是指通讯录中一个人的完整信息。
每个通讯录记录包括如下信息:序号、姓名、电话、所在城市。
(2)、能按照“所在城市”排序顺序显示通讯录存储的记录信息。
(3)、能对通讯录的信息进行删除。
要求删除时以记录为单位,既能一次删除一条记录,也能一次删除多条记录。
2 技术要求(1)通讯录信息以磁盘文件的形式存储,文件名,文件格式由设计者确定。
(2)对于通讯录功能中的数据输入、显示、删除等功能,要求编写功能独立的函数予以实现,其所属的各项功能尽量由独立的函数实现。
(3)以菜单方式实现功能选择控制。
(4)通讯录管理结束后,能正常退出通讯录管理程序。
(5)本通讯录管理程序能够实现300条记录的管理。
程二、.各功能的具体说明如下:通讯录信息输入。
1、、通过显示信息项目,逐渐输入通讯录记录信息。
1)(、每次输入记录后,通过询问的方式决定是否继续进行记录(2)输入。
因此,使用该功能即可录入一条记录,也可连续录入多条记录。
3)每次录入记录之前,显示通信录种理由的记录数。
( 2 通讯录信息查询)按排列顺序显示,即对通讯录中的记录进行排序后,在按照1(排序显示不能但不管使用何种排序算法,排序结果显示出来。
改变通讯录记录的物理顺序。
条20)当通讯录信息较多时,实行分屏显示,每屛最多显示(2 记录信息。
)显示记录时,对每一条记录增加与现实顺序一致的序号。
3(通讯录信息查询3(1)提供按姓名查询(2)查找成功后显示每一条符合条件记录的完整信息,当一屛不能完成显示时,实行分屏显示,每屛最多显示20条符合条件的记录。
当找不到符合条件记录时,给出相应的提示信息。
4 通讯录信息删除(1)提供按姓名删除,当找到指定记录时,进行删除操作。
找不到指定记录时,给出相应的提示信息。
数据结构通讯录管理系统课程设计实验报告背景随着信息化的快速发展,通讯录管理系统成为了每个人生活中必备的工具之一。
传统的纸质通讯录已经无法满足人们对于信息管理的需求,因此开发一个高效、便捷、用户友好的通讯录管理系统显得尤为重要。
本次课程设计实验的目标是设计一个基于数据结构的通讯录管理系统,实现通讯录的创建、查找、修改、删除等功能。
通过本次实验,我们可以学习和掌握数据结构中的链表、哈希表等基础概念和算法,并将其应用到实际项目中。
分析通讯录管理系统主要有以下几个功能:1.创建通讯录:通讯录是一个存储联系人信息的数据结构,可以存储联系人的姓名、电话号码、邮箱地址等信息。
2.添加联系人:可以向通讯录中添加新的联系人,包括姓名、电话号码、邮箱地址等信息。
3.查找联系人:可以根据姓名或电话号码查找通讯录中的联系人,并显示其详细信息。
4.修改联系人:可以根据姓名或电话号码修改通讯录中的联系人信息。
5.删除联系人:可以根据姓名或电话号码删除通讯录中的联系人。
为了实现上述功能,我们可以使用链表来实现通讯录的存储,每个节点表示一个联系人。
每个节点包含姓名、电话号码、邮箱地址等信息,并且有指向下一个节点的指针。
为了提高查找联系人的效率,我们还可以使用哈希表来实现联系人的快速查找。
哈希表采用键值对的方式存储数据,通讯录中的联系人可以以姓名为键,联系人节点为值存储在哈希表中。
结果实验的最终结果是一个完善的通讯录管理系统,能够实现创建通讯录、添加联系人、查找联系人、修改联系人和删除联系人等功能。
在实现过程中,我们遵循了以下步骤:1.首先,我们设计了联系人节点的数据结构,包括姓名、电话号码、邮箱地址等字段,并定义了节点的操作方法。
2.接着,我们设计了通讯录的数据结构,使用链表来存储联系人节点,并实现了通用的链表操作方法,如插入节点、删除节点等。
3.然后,我们设计了哈希表的数据结构,使用哈希函数将联系人节点存储在哈希表中,并实现了查找联系人的快速算法。
通讯录管理系统C++实验报告《C++数据结构》课程设计班级信管1123 指导老师吴卫祖学号 201211671330 姓名易梓麒2014 年 7 月 7 日目录目录 (4)通讯录管理系统 (5)一. 问题描述 (5)1.1系统总体描述 (5)1.2需求分析 (6)1.3系统实现方案 (6)二.概要设计(流程) (6)三.详细模块设计 (9)3.1信息录入 (9)3.2显示信息 (10)3.3按姓名查找信息 (10)3.4删除联系人信息 (11)3.5保存信息至文件 (12)3.6读取信息 (12)3.7添加信息 (13)3.8退出 (13)3.9主函数 (14)四.程序运行示意图 (15)4.1主界面 (15)4.2输入信息 (16)4.3显示记录 (16)4.4删除记录 (17)4.5查阅记录 (17)4.6保存记录 (18)4.7读取记录 (19)4.8添加记录 (19)五.总结与心得 (20)六.附录#源代码 (20)通讯录管理系统一.问题描述1.1系统总体描述本系统是一款基于对通讯录中联系人进行管理的系统,可使用户更好的对通讯录中的联系人进行基本的操作。
1.2需求分析根据需求,该系统应具备以下功能:1.对联系人基本信息的录入2.显示所有联系人的基本信息3.按照姓名查找联系人信息4.删除联系人信息5.保存联系人信息至文件6.从文件中读取联系人的信息7.添加新联系人信息1.3系统实现方案为实现系统功能,本系统共分为构建链表函数,显示函数,查找函数,删除函数,保存函数,读取函数,添加函数以及退出系统。
这七个函数通过主函数switch语句进行调用。
二.概要设计(流程)开始进入主函数三.详细模块设计3.1信息录入输入信息函数(Createlist)首先建立一个空的链表,其次进行对联系人基本信息比如联系人姓名,电话,Email,以及与自己的关系等的输入。
代码示意图如下:3.2显示信息显示函数(showlist)用于向用户显示用户所输入过的联系人的各种资料,包括姓名,电话,Email,关系等。
C通讯录管理系统实验报告1. 引言通讯录是我们日常生活中非常常见的一种信息管理工具,用于存储和管理联系人的信息。
本实验旨在设计和实现一个基于C语言的通讯录管理系统。
本文将介绍系统的设计思路、功能实现以及使用过程中的注意事项。
2. 设计思路通讯录管理系统主要包括以下功能: - 添加联系人:输入联系人的姓名、电话号码和电子邮件信息,将其添加到通讯录中。
- 删除联系人:输入联系人的姓名,从通讯录中删除该联系人。
- 查找联系人:输入联系人的姓名,系统将显示该联系人的详细信息。
- 修改联系人:输入联系人的姓名,可以修改该联系人的电话号码和电子邮件信息。
- 显示所有联系人:系统将按照添加的顺序显示通讯录中所有联系人的信息。
在设计过程中,我们采用了如下的步骤思考: 1. 定义联系人结构体:使用结构体来存储联系人的姓名、电话号码和电子邮件信息。
2. 定义通讯录结构体:使用动态数组来存储联系人的信息,以及记录通讯录的当前大小和最大容量。
3. 实现添加联系人功能:动态扩展通讯录数组的容量,将新的联系人信息添加到数组中。
4. 实现删除联系人功能:根据输入的姓名,查找并删除对应的联系人。
5. 实现查找联系人功能:根据输入的姓名,查找并显示对应联系人的详细信息。
6. 实现修改联系人功能:根据输入的姓名,查找并修改对应联系人的电话号码和电子邮件信息。
7. 实现显示所有联系人功能:按照添加的顺序,显示通讯录中所有联系人的信息。
3. 功能实现3.1 定义联系人结构体联系人结构体包含姓名、电话号码和电子邮件信息的变量。
3.2 定义通讯录结构体通讯录结构体包含一个指向联系人结构体的指针和记录当前容量和最大容量的变量。
3.3 实现添加联系人功能在添加联系人之前,首先需要判断通讯录数组是否已满。
如果已满,则需要动态扩展通讯录数组的容量。
然后,将新的联系人信息添加到数组中,更新通讯录的当前大小。
3.4 实现删除联系人功能根据输入的联系人姓名,在通讯录数组中查找对应的联系人。
通讯录管理系统实验报告通讯录管理系统实验报告一、引言通讯录是我们日常生活中不可或缺的一部分,它帮助我们记录和管理与各种人的联系方式。
然而,传统的纸质通讯录存在着不便携、易丢失、难以更新等问题。
为了解决这些问题,我们设计并实现了一个通讯录管理系统。
二、系统设计1. 功能设计我们的通讯录管理系统具有以下主要功能:- 添加联系人:用户可以输入联系人的姓名、电话号码、电子邮件等信息,并将其保存到系统中。
- 查找联系人:用户可以根据姓名、电话号码等关键字在通讯录中查找指定的联系人。
- 编辑联系人:用户可以对已有的联系人信息进行修改,包括姓名、电话号码、电子邮件等。
- 删除联系人:用户可以选择删除不需要的联系人信息。
- 导出联系人:用户可以将通讯录中的联系人信息导出为Excel或CSV文件,以便在其他应用程序中使用。
2. 技术实现为了实现上述功能,我们使用了以下技术:- 前端界面:采用HTML、CSS和JavaScript技术,实现用户友好的界面设计。
- 后端逻辑:采用Python编程语言,使用Flask框架搭建Web应用程序。
- 数据存储:使用MySQL数据库存储联系人信息,并通过SQL语句实现数据的增删改查操作。
三、系统实现1. 前端界面我们的前端界面采用了简洁、直观的设计风格,用户可以通过输入框和按钮进行各种操作。
在添加联系人时,用户需要填写姓名、电话号码等信息,并点击保存按钮将联系人信息提交到后端。
在查找联系人时,用户可以输入关键字并点击搜索按钮,系统将根据关键字在通讯录中查找匹配的联系人并显示在界面上。
2. 后端逻辑后端逻辑主要由Flask框架实现,通过路由和视图函数来处理用户的请求。
当用户提交添加联系人的请求时,后端会接收到用户输入的信息,并将其存储到数据库中。
当用户搜索联系人或编辑联系人时,后端会根据用户的请求在数据库中进行相应的查询和更新操作。
当用户删除联系人时,后端会从数据库中删除对应的联系人信息。
通讯录管理实验报告通讯录管理实验报告一、引言通讯录是现代社会中不可或缺的一项工具,它能够帮助我们有效地管理联系人信息,提高沟通效率。
然而,随着社会的发展和科技的进步,传统的纸质通讯录已经无法满足人们的需求。
因此,本次实验旨在探索和研究通讯录管理的现代化方法。
二、实验目的1. 研究并比较不同通讯录管理软件的功能和特点;2. 分析并评估通讯录管理软件对用户的实际需求的满足程度;3. 提出改进建议,以优化通讯录管理软件的设计和使用体验。
三、实验方法本次实验采用了以下方法:1. 调查问卷:设计并分发调查问卷,收集用户对不同通讯录管理软件的使用体验和需求反馈;2. 功能比较:选取几款常见的通讯录管理软件,对其功能进行详细比较和分析;3. 用户体验测试:邀请一些用户进行实际操作测试,观察他们在使用过程中的反应和问题。
四、实验结果与分析1. 调查问卷结果显示,用户对通讯录管理软件的主要需求是方便快捷地添加、编辑和查找联系人信息,以及支持多种联系方式的整合。
2. 功能比较结果表明,不同的通讯录管理软件在功能上存在差异,有些软件提供了更多的高级功能,如群组管理、备份与恢复等,而有些软件则更注重简洁易用的界面设计。
3. 用户体验测试发现,一些通讯录管理软件存在操作繁琐、界面复杂等问题,导致用户在使用过程中感到困惑和不便。
五、改进建议基于实验结果和分析,我们提出以下改进建议:1. 界面设计优化:通讯录管理软件应该追求简洁、直观的界面设计,方便用户快速上手和操作。
2. 功能定制化:根据用户需求,通讯录管理软件应提供个性化的功能定制选项,使用户能够根据自己的实际需求进行设置。
3. 数据安全保护:通讯录管理软件应加强数据安全保护措施,防止用户隐私信息泄露或丢失。
4. 多平台兼容性:通讯录管理软件应支持多种操作系统和设备,以满足用户在不同设备上的使用需求。
六、结论通过本次实验,我们对通讯录管理软件进行了深入研究和分析,发现了其功能和设计上的一些问题,并提出了相应的改进建议。
数据结构课程设计通讯录管理系统报告前言通讯录管理系统是一种常见的应用程序,用于帮助用户有效地组织和管理他们的联系人信息。
本报告旨在介绍和分析一个基于数据结构设计的通讯录管理系统,其中实现了基本的通讯录功能,并且通过合适的数据结构和算法进行优化。
功能需求通讯录管理系统需要实现以下基本功能: - 添加联系人信息 - 查找联系人信息 - 删除联系人信息 - 更新联系人信息 - 显示所有联系人信息数据结构选择为了实现通讯录管理系统的功能,我们选择使用链表作为数据结构。
链表是一种简单而灵活的数据结构,可以动态地添加或删除节点,非常适合存储联系人信息这种动态的数据。
在这里,我们采用双向链表,使得查找、插入和删除操作更加高效。
算法设计添加联系人信息添加联系人信息时,我们需要遍历链表找到合适的位置插入新节点,这里的算法复杂度为O(n),其中n表示链表的长度。
查找联系人信息查找联系人信息时,我们需要遍历链表查找目标节点,这里的算法复杂度为O(n)。
删除联系人信息删除联系人信息时,我们同样需要遍历链表找到目标节点并删除,其算法复杂度为O(n)。
更新联系人信息更新联系人信息时,我们首先需要查找到目标节点,然后进行更新操作,其算法复杂度也为O(n)。
系统优化为了提高系统的性能,我们可以通过以下几种方式进行优化: - 使用哈希表索引联系人信息,减少查找联系人的时间复杂度; - 引入缓存机制,减少频繁的IO 操作。
总结通过本报告的介绍和分析,我们了解了一个基于数据结构设计的通讯录管理系统的实现原理和优化方法。
在实际应用中,针对具体需求和场景,我们可以进一步优化系统性能,提升用户体验。
通讯录管理系统作为一种简单而实用的应用程序,将在日常生活中发挥重要作用。
《数据结构》实验报告题目: 实验七 通讯录管理系统学号:2010810071 成 绩班级: 计算1013日期:2011.12.13 姓名:何荣贤指导老师:杨艳华一、实验目的:本次的实验目的在于使读者深入了解查找表的特性,掌握各种查找方法,以便在实际问题背景下灵活运用他们;并且回顾文件操作的使用。
二、实验环境:本次试验在VC++环境下调试。
三、实验内容与完成情况:1.问题描述编程完成通讯录的一般性管理工作,如通讯录中记录的增加、修改、查找、删除、输出等功能。
2.基本要求一个完整的系统应具有以下功能:⑴每个记录包含姓名、电话号码、住址等个人信息;⑵将建立的通讯录以磁盘文件的形式存储,所有的通讯录管理活动均以文件操作的方式进 行;⑶在查找通讯录中的记录时,以记录的“姓名”为查找关键字进行查找。
3.程序代码#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#define header1 "|---------------------电话簿-----------------------|\n" #define header2 "| num | name | phonenum | address |\n" #define header3 "|-------|----------|---------------|---------------|\n" #define end "|----------------------结束------------------------|"#define N 100typedef struct tele{int num;char name[10];char address[20];}telebook;void menu(){system("cls");printf("\n\n\n"); /*输出主菜单*/printf("\t\t|* **** 欢迎进入电话薄管理系统! **** *|\n"); printf("\t\t|********************menu********************|\n"); printf("\t\t| |\n"); printf("\t\t| 1 增加 2 读取 |\n"); printf("\t\t| |\n"); printf("\t\t| 3 查找 4 修改 |\n"); printf("\t\t| |\n"); printf("\t\t| 5 删除 6 排序 |\n"); printf("\t\t| |\n"); printf("\t\t| 0 退出 |\n"); printf("\t\t|********************************************|\n"); }void printheader() /*输出菜单头*/{printf(header1);printf(header2);printf(header3);}int add(telebook temp[]){int i;int m=0;FILE *fp;system("cls");exit(0);}printf("每次输入一百个人的信息!\n");printf("如果输入0退出输入!\n");for(i=m;i<(100+m);i++){printf("num:");scanf("%d",&temp[i].num);if(temp[i].num==0)break;printf("name:");scanf("%s",&temp[i].name);printf("phonenum:");scanf("%s",&temp[i].phonenum);printf("address:");scanf("%s",&temp[i].address);fwrite(&temp[i],sizeof(struct tele),1,fp);}m+=100;fclose(fp);system("cls");return 0;}int read(telebook temp[]){int count,i;FILE *fp;system("cls");exit(0);}printheader();for(count=0;fread(&temp[count],sizeof(struct tele),1,fp)==1;count++);/*读取文件内信息的个数。
通讯录管理信息系统实验报告学号:200932020104姓名:罗碧玉【实验目的】1、掌握应用系统开发过程中数据库的设计与实现。
2、巩固第一阶段所学有关Access数据库的基本操作,包括数据库的建立、数据表的建立、表记录的增加删除修改和统计、索引的建立、表间关系的建立、查询和视图的设计等。
【实验内容】“个人通讯录管理系统”的功能是管理自己的通讯录,要求能对通讯录中的记录信息进行增加、删除、编辑操作,能浏览联系人的基本信息,能按照姓名查询联系人的信息等。
请完成通讯录管理系统的数据库设计。
具体要求:1、数据库结构规划设计:分析通讯录管理系统的数据库结构,包括需要几张表,需要哪些字段。
例如通讯录可包括姓名、班级、电话、Email、QQ号等字段。
请根据个人的需要进行规划。
2、建立项目文件3、在项目中建立数据库3、建立表(自行设计表结构,需能满足上述功能的要求)4、适当输入记录5、确定表间关系6、针对自己建立的数据库练习查询和视图的建立。
【实验原理】需求分析:随着信息社会的高速发展,人与人之间的联系越来越频繁,通讯方式越来越多样化,如何保证与朋友、同学、同事、领导、亲戚等之间的联系,并能方便快捷的查找、记录、修改其相关通讯信息。
仅靠以前单独的手工记录已远远不能满足当前的需要。
开发一个通讯录管理系统,借助计算机可以方便、快捷、灵活的管理个人的朋友及相关人员的通讯信息,了解友人相关信息,帮助与友人保持联络。
数据库原理:数据库设计的任务是确定系统所需的数据库。
数据库是表的集合,通常一个系统只需一个数据库。
设计的任务是根据需求分析,确定数据库所包含的表及字段、表间的关系,然后具体确定表的结构,包括字段名、字段类型及宽度,需要的索引等。
系统总体说明:根据对需求得到的数据结构进行分析,按数据输入输出的要求,确定表和表间的关系,并进行验证、调整、修改、完善,使其能够实现用户对数据和功能的要求:1、登录管理:输入用户名和密码登录该通讯录系统。
一、实验背景随着科技的发展,人们的生活节奏越来越快,通讯方式也日益多样化。
为了方便人们管理和查阅通讯信息,通讯录管理系统应运而生。
本实验旨在通过设计和实现一个通讯录管理系统,提高通讯信息管理的效率和便捷性。
二、实验目的1. 熟悉通讯录管理系统的基本功能和操作流程;2. 掌握通讯录管理系统的设计方法和实现技巧;3. 提高编程能力和系统分析能力。
三、实验内容1. 系统需求分析根据实验要求,本通讯录管理系统应具备以下功能:(1)添加联系人:输入联系人信息,包括姓名、电话、邮箱、QQ号等,并将其保存到系统中;(2)删除联系人:根据联系人姓名或电话,删除指定联系人信息;(3)修改联系人信息:根据联系人姓名或电话,修改指定联系人的信息;(4)查询联系人:根据联系人姓名、电话、邮箱或QQ号,查询指定联系人的信息;(5)导出通讯录:将通讯录信息导出到文本文件或Excel文件;(6)导入通讯录:从文本文件或Excel文件中导入通讯录信息。
2. 系统设计本系统采用C++编程语言,利用面向对象编程思想进行设计。
系统采用单例模式,确保全局只有一个通讯录对象。
联系人信息以链表形式存储,便于插入、删除和修改操作。
(1)数据结构设计联系人信息使用结构体存储,包括姓名、电话、邮箱、QQ号等字段。
```cppstruct Contact {string name;string phone;string email;string qq;Contact next;};```(2)类设计- Contact类:负责存储联系人信息,包括姓名、电话、邮箱、QQ号等字段;- ContactManager类:负责管理联系人链表,包括添加、删除、修改、查询、导出和导入等功能。
```cppclass Contact {public:string name;string phone;string email;string qq;Contact next;Contact(string n, string p, string e, string q) : name(n), phone(p), email(e), qq(q), next(NULL) {}};class ContactManager {private:Contact head;public:ContactManager() : head(NULL) {}~ContactManager() {// 释放链表内存Contact temp;while (head != NULL) {temp = head;head = head->next;delete temp;}}void AddContact(Contact contact) {// 添加联系人}void DeleteContact(string phone) {// 删除联系人}void ModifyContact(string phone, Contact newContact) { // 修改联系人信息}Contact QueryContact(string phone) {// 查询联系人return NULL;}void ExportContact() {// 导出通讯录}void ImportContact() {// 导入通讯录}};```3. 系统实现根据系统设计,使用C++编程语言实现各个功能模块。
一、实验目的本次实验旨在通过C语言编程,实现一个通讯管理系统,以巩固和加深对C语言基本知识的理解和掌握,提高编程和程序调试的基本技能,并锻炼运用C语言解决实际问题的能力。
二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 编程语言:C语言三、实验内容本实验设计了一个基于C语言的通讯管理系统,主要包括以下功能:1. 联系人信息的录入与存储;2. 联系人信息的浏览;3. 联系人信息的查询(按姓名、电话、邮箱查询);4. 联系人信息的删除;5. 联系人信息的修改;6. 通讯录信息的保存与加载。
四、实验步骤1. 创建一个结构体`Contact`来存储联系人信息,包括姓名、电话、邮箱等字段。
```ctypedef struct {char name[50];char phone[20];char email[50];} Contact;```2. 设计一个函数`AddContact`用于添加联系人信息。
```cvoid AddContact(Contact contacts, int size) {Contact newContact;printf("请输入姓名:");scanf("%s", );printf("请输入电话:");scanf("%s", newContact.phone);printf("请输入邮箱:");scanf("%s", newContact.email);contacts[size] = newContact;(size)++;}```3. 设计一个函数`DisplayContacts`用于显示所有联系人信息。
```cvoid DisplayContacts(Contact contacts, int size) {for (int i = 0; i < size; i++) {printf("姓名:%s,电话:%s,邮箱:%s\n", contacts[i].name, contacts[i].phone, contacts[i].email);}}```4. 设计一个函数`SearchContact`用于查询联系人信息。
《程序设计与算法综合实习I》通讯录题目:班级:学生学号:学生姓名:指导老师:提交时间:成绩:软件学院课程设计报告评分表1、对问题的描述:通讯录1.1、简要描述:设计一个通讯录程序,并简单实现通讯人的添加、删除、修改、查找、统计、存入文件等功能1.2、系统功能分析:添加功能修改功能删除功能查找功能统计功能存入文件功能1.3、开发平台及工具介绍:基于c语言设计该程序,是用codeblocks实现功能。
2、系统设计1.1系统总体结构设计:系统各个功能的总体关系3、功能实现struct Contact//结构体{char Name[20];char Tel[15];char Address[100];char Mail[50];char Birth[10];char Type[15];struct Contact *next;通讯录数据读取修改删除创建联系人查找统计};struct classfy{//统计模块使用结构体char leixing[20];int Numcount;};3.1、主函数开始显示一系列功能选项否输入n,判断n是否是0~6?否根据n的值调用各功能模块函数判断flag是否等于0?是结束具体设计如下:int main(){ //主函数struct Contact *pHead;int n;int flag=1;pHead=(struct Contact*)malloc(sizeof(struct Contact));pHead=create();while(flag==1){menu();printf("请输入要执行的操作:");scanf("%d",&n);switch(n){case 1:insert(pHead);break;case 2:Change(pHead);break;case 3:delete(pHead);break;case 4:Search(pHead);break;case 5:tongji(pHead);break;case 6:shuchu(pHead);break;case 0:flag=0;exit(0);break;default:printf("输入错误,重新输入");scanf("%d",&n);break;}}}3.2、界面设计void menu(){system("cls");printf("\n\n\n\n");printf("\t\tR-----------------通讯录----------------2\n");printf("\t\tR\t\t\t\t\t2\n");printf("\t\tR\t\t\t\t\t2\n");printf("\t\tR\t \t1.增加联系人\t \t2\n");printf("\t\tR\t \t2.修改联系人\t \t2\n");printf("\t\tR\t \t3.删除联系人\t \t2\n");printf("\t\tR\t \t4.查找联系人\t \t2\n");printf("\t\tR\t \t5.统计联系人\t \t2\n");printf("\t\tR\t \t6.列出全部联系人\t2\n");printf("\t\tR\t \t0.退出\t\t\t2\n");printf("\t\tR\t\t\t\t\t2\n");printf("\t\tR\t\t\t\t\t2\n");printf("\t\tR--------Designd By Zheng Weipeng-------2\n"); }3.3、创建函数具体设计如下:struct Contact *create(){ //创建链表 struct Contact *pHead=NULL,*p,*p1; FILE *fp; int n=0;if((fp=fopen("TXL.txt","r"))==NULL){printf("文件创建失败,回车键返回."); getch(); } else{p=p1=(struct Contact*)malloc(sizeof(struct Contact)); fscanf(fp,"%s",p ->Name); fscanf(fp,"%s",p ->Tel);fscanf(fp,"%s",p ->Address); fscanf(fp,"%s",p ->Mail);读取文件内容Fp==NULL ?文件内容赋给链表结束开始否feof (fp )?是否fscanf(fp,"%s",p->Birth);fscanf(fp,"%s",p->Type);while(!feof(fp)){n++;if(n==1) pHead=p;elsep1->next=p;p1=p;p=(struct Contact*)malloc(sizeof(struct Contact));fscanf(fp,"%s",p->Name);fscanf(fp,"%s",p->Tel);fscanf(fp,"%s",p->Address);fscanf(fp,"%s",p->Mail);fscanf(fp,"%s",p->Birth);fscanf(fp,"%s",p->Type);}p1->next=NULL;fclose(fp);return pHead;}}3.4、插入函数struct Contact *insert(struct Contact *pHead){ //插入函数FILE *fp;struct Contact *p,*p1;if((fp=fopen("TXL.txt","a+"))==NULL){printf("文件打开失败");}p=p1=(struct Contact*)malloc(sizeof(struct Contact));p=pHead;while((p->next)!=NULL){p=p->next;}printf("请输入姓名: ");scanf("%s",p1->Name);fprintf(fp,"%s\n",p1->Name);printf("请输入电话: ");scanf("%s",p1->Tel);fprintf(fp,"%s\n",p1->Tel);printf("请输入地址: ");scanf("%s",p1->Address);fprintf(fp,"%s\n",p1->Address);printf("请输入邮箱: ");scanf("%s",p1->Mail);fprintf(fp,"%s\n",p1->Mail);printf("请输入生日: ");scanf("%s",p1->Birth);fprintf(fp,"%s\n",p1->Birth);printf("请输入类型(同学、家人、老师、工作): ");scanf("%s",p1->Type);fprintf(fp,"%s\n\n",p1->Type);p->next=p1;p1->next=NULL;fclose(fp);printf("数据保存成功,任意键返回主菜单.\n");getch();return(pHead);}3.5、修改函数(实现对联系人单项修改)struct Contact Change(struct Contact *pHead){ //修改函数FILE *fp;struct Contact *p1;char flag=0,saveflag=0;int i=0;int n;char a[10],b[20];fp=(fopen("TXL.txt","w"));p1=pHead;printf("\n修改联系人姓名:");scanf("%s",a);while(p1!=NULL){if(strcmp(p1->Name,a)==0){printf("\n找到要修改联系人:\n");printf("姓名:%s\n",p1->Name);printf("电话:%s\n",p1->Tel);printf("地址:%s\n",p1->Address);printf("邮箱:%s\n",p1->Mail);printf("生日:%s\n",p1->Birth);printf("类型:%s\n\n",p1->Type);flag=1;break;}else{p1=p1->next;}}if(flag==0){fclose(fp);printf("没有该条通讯录,回车键返回");getch();}if(flag==1&&p1!=NULL){printf("修改类型:1.姓名2.电话3.地址4.邮箱5.生日6.类型\n");printf("输入数字选择修改类型: ");scanf("%d",&n);printf("输入修改内容: ");scanf("%s",b);switch(n){case 1:p1->Name[0]='\0';strcpy(p1->Name,b);break;case 2:p1->Tel[0]='\0';strcpy(p1->Tel,b);break;case 3:p1->Address[0]='\0';strcpy(p1->Address,b);break;case 4:p1->Mail[0]='\0';strcpy(p1->Mail,b);break;case 5:p1->Birth[0]='\0';strcpy(p1->Birth,b);break;case 6:p1->Type[0]='\0';strcpy(p1->Type,b);break;}}p1=pHead;while(p1!=NULL){fprintf(fp,"%s\n",p1->Name);fprintf(fp,"%s\n",p1->Tel);fprintf(fp,"%s\n",p1->Address);fprintf(fp,"%s\n",p1->Mail);fprintf(fp,"%s\n",p1->Birth);fprintf(fp,"%s\n",p1->Type);p1=p1->next;saveflag=1;}if(flag==1&&saveflag==1){printf("修改成功,任意键返回主菜单");getch();}fclose(fp);return (*pHead);}}3.6、删除函数struct Contact delete(struct Contact *pHead){ //删除函数FILE *fp;struct Contact *p,*p1;int saveflag=0,flag=1;char a[10];fp=fopen("TXL.txt","w");p=pHead;p1=p;printf("请输入要删除联系人的姓名:");scanf("%s",a);while(p!=NULL){if(strcmp(p->Name,a)==0){printf("找到该联系人。
数据结构通讯录管理系统课程设计实验报告心得数据结构通讯录管理系统课程设计实验报告心得一、引言在本次数据结构课程设计实验中,我们小组选择了通讯录管理系统作为项目。
通讯录管理系统是一种常见的应用程序,用于方便地存储和管理联系人信息。
本报告将对我们小组在实验过程中的设计思路、实现方法和心得体会进行详细介绍。
二、需求分析通讯录管理系统的基本功能包括添加联系人、删除联系人、修改联系人信息和查询联系人等。
除此之外,我们还希望能够支持批量导入和导出联系人信息,以及按照姓名、电话号码等字段进行排序和筛选。
三、设计思路1. 数据结构选择为了高效地存储和操作联系人信息,我们选择使用链表作为主要的数据结构。
链表可以动态地分配内存空间,并且插入和删除操作的时间复杂度较低。
2. 模块划分根据需求分析,我们将通讯录管理系统划分为以下几个模块:- 主菜单模块:显示系统功能选项,并根据用户输入调用相应模块。
- 添加联系人模块:向通讯录中添加新的联系人信息。
- 删除联系人模块:根据用户输入的姓名或电话号码删除对应的联系人信息。
- 修改联系人模块:根据用户输入的姓名或电话号码修改对应的联系人信息。
- 查询联系人模块:根据用户输入的姓名或电话号码查询对应的联系人信息,并显示在屏幕上。
- 导入导出模块:支持将通讯录中的联系人信息导出到文件,以及从文件中导入联系人信息。
四、实现方法1. 数据结构设计我们使用了一个结构体来表示每个联系人的信息,包括姓名、电话号码和电子邮件地址等字段。
同时,我们为每个节点添加了指向下一个节点的指针。
2. 功能实现- 添加联系人:通过用户输入,创建一个新节点,并将其插入到链表中合适的位置。
- 删除联系人:根据用户输入的姓名或电话号码,在链表中找到对应节点并删除。
- 修改联系人:根据用户输入的姓名或电话号码,在链表中找到对应节点并修改其字段值。
- 查询联系人:根据用户输入的姓名或电话号码,在链表中找到对应节点并显示其字段值。
c#班级通讯录管理系统实训报告————————————————————————————————作者:————————————————————————————————日期:《C#应用程序设计》实训报告系部:信息工程系班级:12软件班姓名:陶沪指导教师:刘春友实训时间:2013年春季学期班级通讯录管理系统实训报告一、实训主题班级通讯录系统的开发和运用二、实训时间:2013年6月1日~2013年6月27日三、实训目的教会学生利用Visul status 2005开发平台开发出班级通讯录系统,并利用.net Framework组件实际与数据库的连接,建立班级通讯录的显示,查询,添加,修改,删除四个功能块窗体,以及登录界面和主界面两个辅助窗体.最终实现班级通讯录系统增,删,改,查四项基本功能.四、实训内容与要求:“班级通讯录管理系统”是以班级学生的个人信息为主的管理系统,合理的数据库结构设计可以提高数据存储的效率,保证数据的完整性和一致性。
运用结构化开发方法,分析并开发一个小型、简单的“班级通讯录管理系统”。
功能:设计一个班级通讯录管理系统,班级通讯录数据信息构成内容可自行设计(如班级、学号、姓名、性别、年龄、电话、邮政编码、邮箱等)。
要求实现显示、查找、添加、删除、修改某个记录等功能。
五、实训中的重要知识和方法概述: 提供诸如SQL Server 和XML这样的数据源以及通过OLE DB和ODBC公开的数据源的一致访问。
包含于用于连接到数据库,执行命令和检索结果的.NET Framework 数据提供程序。
这些结果或者被直接处理,放在 DataSet对象中以便用特别的方式向用户开放,并与来自多个源的数据组合:或者在层之间传递。
DataSet对象也可以独立于.NET Framework数据提供程序,用于管理应用程序本地的数据或源自XML 的数据。
用于访问和操作数据的两个主要组件是:.NET Framework数据提供程序和DataSet。
实验报告一程序设计目的和要求1.掌握从“对象“的角度看问题,而不仅仅是功能的划分的思想;2..熟练掌握将对象所具有的功能和属性封装到一个类中及其用功能;3.熟练掌握文件的存取方法;4.了解综合系统设计的基本原理;5.掌握C语言程序的综合应用。
二程序设计任务内容通讯录管理系统给用户提供了一个在Windows操作系统上运行的通讯录管理平台,用户可以对联系人进行在电话号码、姓名以及简介等方面的添加、删除、修改等管理操作。
同时系统还可以判断登录用户功能,根据用户的分类,其拥有的权限也不同,系统可以通过判断登录用户的用户名和密码,从而判断其是否是首次登陆。
系统亦可获取登录用户的权限信息,从而判断该用户能够使用该系统的哪些特定功能,不同级别的用户不能够越权使用系统功能。
通讯录管理系统软件是为用户提供一个保存联系人及信息管理进行辅助的应用软件、功能描述如下。
1.用户选择:进入界面后用户可以选择自己的种类,当用户登录后根据权限判断该用户是新用户还是老用户,可以使用哪些对应的功能。
2.给用户提供功能选择界面: 新老用户对应的功能选择界面是不同的。
功能选择界面包括输入功能选项、调用相应程序两大需求。
3.初始化联系人:用户根据提示输入联系人的电话号码、姓名、简介。
可一次性输入多个联系人的相关信息。
系统将联系人的信息存储在系统磁盘的文件中,以便进行管理、查找和备份。
4.浏览联系人:用以查看联系人的信息以及联系人的电话号码。
5.修改联系人:提示用户输入要进行修改操作的联系人的信息,如果在文件中有该联实验报告系人的电话号码存在,则将该电话号码所对应的姓名、电话号码、简介以及得票数所对应文件中加以修改。
由系统提示是否继续进行修改操作,让用户可多次进行修改操作。
6.修改密码:按照提示用户要输入旧密码一次以及新密码两次来进行用户的密码修改,被修改的信息将会储存在文件中,下一次用户要登陆的话得输入新密码才能成功登陆进行其他操作。
三程序详细设计说明系统结构设计1.总体设计本系统的总体思想基于结构化的程序设计。
应用高级语言程序设计中的基本控制结构,如循环和选择,着重实现管理系统的增、删、改、查等典型的管理功能。
因此,系统的设计方法是结构化设计方法,开发手段是C语言,在Microsoft Visual C++ 6.0环境下开发。
2.系统模块结构图依据需求分析结果,通讯录管理系统可以分为3个模块:用户选择模块、用户登陆模块、用户管理模块。
如图1所示。
实验报告3.系统流程描述:实验报告结束图2系统流程图4.界面设计通讯录管理系统的界面设计主要遵循方便易用、界面友好的原则,具体设计如下。
(1) 用户选择界面设计①进入界面后有三个选项,分别是“登陆”,“新建”和“退出”,选择了“新建”的话会提示进入新建用户名和密码,选择登陆,分别要输入用户姓名和密码,如果输入有误则会提示有错误。
当输入的姓名和密码都是正确的时候会进入到用户的功能界面。
图3 登录界面效果图(2)功能选择界面的设计实验报告图4 功能选择界面效果图(3) 执行结果界面设计由于C语言对图形化界面的支持比较有限,因此,对于该管理系统,首要考虑的是结果的清晰易读。
对于此类的界面设计要采用一些简单处理,将执行的每一个功能都很清晰的表示出来。
示例:若用户选择了“好友管理”,执行结果如图所示实验报告图5 浏览联系人执行结果图若选择“增加好友”,则会出现:实验报告图6 增加好友界面(3).用户功能选项模块有“增加好友”,“查询记录”,“修改联系人”,“删除记录”,“返回主菜单”和“退出”6项功能管理。
对联系人有修改的操作,会将操作结果保存至文件,对于需要查看结果的操作,将文件中的操作结果输出到屏幕上。
模块功能树如图9所示图7 用户功能选择模块功能图函数声明:①Find ()●功能:查找联系人的信息文件。
根据用户输入的文件名创建联系人信息文件,将用户输入的若干联系人信息记录存入该文件并保存。
最后列表显示文件内容。
●输入:按要求输入联系人的电话号码,姓名,其他信息,并且选择是否继续添加●处理:提示用户逐条输入联系人信息;将完整的联系人信息存入文件;循环判断用户是否要继续添加联系人;实验报告●查找:列表显示用户创建并输入内容后的文件内容。
图8 查找联系人的界面②Hyxg ()●功能:修改联系人●输入:输入“c”即可●输出:列表显示所有联系人的信息实验报告图9 浏览联系人界面③Delete ()●功能:删除联系人的信息。
根据用户输入联系人的电话号码,然后会显示出联系人的相关信息,然后根据提示对联系人进行各项信息的删除,可以进行循环修改。
●输出:做完修改操作后联系人信息记录图10 删除联系人界面④Mmxg()●功能:按照用户的意愿对用户的密码进行修改●输入:原始密码。
实验报告新密码两次。
●处理:当用户输入的原始密码与文件中的密码不相符时,提示输入密码错误;若输入正确则需要输入两次新密码来进行对原始密码的修改如果两次新密码输入不也一样,系统会提醒用户输入密码不一样,请重新输入●输出:显示修改密码成功图11 修改密码成功的界面四程序部分源程序代码和调试过程可以使用排序的方法对联系人进行更方便的储存和调用#include<conio.h>#include<stdio.h>#include<string.h>#include<stdlib.h>const int L=600000000;typedef struct Telephone //建立结构体{char secret[20]; //密码char yanzheng[20]; //验证密码char hao[20]; //用户号实验报告char zuming[50]; //分组名char name[50]; //好友姓名char sex[30]; //性别char tel[30]; //电话char adr[30]; //地址char eip[30]; //邮编struct Telephone *next;}TEL;TEL *head; //建立头结点FILE *fp; // 建立文件int i;TEL *p1,*p2,*p3; //用指针指向结构体void Initiate(); //初始化指针。
void Create(); //的功能是:创建新的通信录。
void Denglu(); //登录通信录。
void Jinru(); //进入创建与登录界面。
void Menu(); //通信录主菜单。
void Add(); //在通信录的末尾,写入新的信息,并返回选单。
void Xtgl(); //系统管理。
void Hygl(); //好友管理。
void Find(); //查找记录。
void Mmxg(); //通信录密码修改void Hyxg(); //通信录好友信息修改void Delete(); //删除某人的信息,如果未找到要删的人,提示通信录中没有此人的信息,并返回选单。
void Help(); //通信录操作帮助。
void main(){Initiate(); //初始化Jinru(); //进入进入界面}//初始化void Initiate(){if((head =(TEL *)malloc(sizeof(TEL)))==NULL) exit(1); //初始化指针。
head->next=NULL;}//开始进入void Jinru(){实验报告system("cls");system("color 3f");char choice;printf("\t\t\t温馨提示:\n\n\t\t\t如果您还没有创建,请先创建!\n\n\n\n");printf("\t\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\n");printf("\t\t\t^^ a.创建^^\n\n");printf("\t\t\t^^ b.登录^^\n\n\n");printf("\t\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\n");printf("\t\t\t请选择a或b\n\n\t\t\t"); //进入界面输出提示用户scanf("%s",&choice); //用户输入数据printf("\n");if(choice=='a'||choice=='b') //进行判断{switch(choice){case'a':Create();break; //进行选择case'b':Denglu();break; //进行选择}}else{printf("\t\t\t输入有误!请重新输入\n\n\n\t\t\t");//输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观Jinru(); //返回进入界面}}//创建通信录void Create(){system("cls");system("color 2f");//fp=fopen("mm","w+");p1=(TEL *)malloc(sizeof(TEL)); //申请一个新的空间printf("请输入用户号:\n"); //输出提示用户scanf("%s",&p1->hao);//fprintf(fp,"%s",p1->hao);//用户输入数据printf("请输入密码:\n\n注意!小于20位!\n\n");//输出提示用户scanf("%s",&p1->secret);//第一次输入的密码用户输入数据//fprintf(fp,"%s",p1->secret);printf("请再次输入密码:\n\n注意!小于20位!\n\n");//输出提示用户实验报告scanf("%s",&p1->yanzheng); //第二次输入的密码用户输入数据//fclose(fp);if(strcmp(p1->yanzheng,p1->secret)!=0) //比较两次输入是否一样{printf("两次输入密码不一致!请重新输入!");//输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观Create(); //返回创建界面}else{system("cls");printf("\n\n\n\n\n\n\t\t\t\t正在创建中!");//输出提示用户printf("\n\n\t\t\t\t请稍侯...\n"); //输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观system("cls");printf("\n\n\n\n\n\t\t\t\t恭喜创建成功!");//输出提示用户printf("\n\n\t\t\t\t正在进入登录界面!"); //输出提示用户printf("\n\n\t\t\t\t请稍侯...\n"); //输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观Denglu();}}//登录界面void Denglu(){system("cls");//fp=fopen("mm","r+");p2=(TEL *)malloc(sizeof(TEL)); //申请一个新的空间printf("\n\n\n\n\n\t\t\t\t欢迎登录个人通信录系统!");//输出提示用户printf("\n\n\t\t\t\t请输入用户号:\n\t\t\t\t");//输出提示用户scanf("%s",&p2->hao);//fscanf(fp,"%s,",&p1->hao);if(strcmp(p2->hao,p1->hao)==0) //比较与原用户号是否一样{printf("\n\n\t\t\t\t请输入密码:\n\t\t\t\t");//输出提示用户scanf("%s",&p2->secret); //用户输入数据//fscanf(fp,"%s",&p1->secret);if(strcmp(p1->yanzheng,p2->secret)==0) //比较与原密码是否一实验报告样{system("cls");printf("\n\n\n\n\n\t\t\t\t正在登录中!");//输出提示用户printf("\n\n\t\t\t\t请稍侯...\n");//输出提示用户//fclose(fp);for(i=0;i<L;i++); //减慢速度使界面更美观system("cls");printf("\n\n\n\n\n\t\t\t\t恭喜登录成功!\n\n\t\t\t\t");//输出提示用户printf("正在进入主菜单!");//输出提示用户printf("\n\n\t\t\t\t请稍侯...\n");//输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观Menu(); //进入主菜单}else{system("cls");printf("\n\n\n\n\n\t\t\t\t密码不正确!\n");//输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观Denglu(); //返回登录界面}}else{system("cls");printf("\n\n\n\n\n\t\t\t\t该用户没注册!\n");//输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观Denglu(); //返回登录界面}}void Xtgl(){char choice;system("cls");printf("\n\n\t\t**********欢迎使用个人通信录系统************\n\n");//输出提示用户printf("\n\n\t\t****\t\ta.密码修改\t\t****\n\n");//进行选择printf("\t\t****\t\tb.返回主菜单\t\t****\n\n");//进行选择printf("\t\t****\t\tc.退出通信录\t\t****\n\n");//进行选择实验报告printf("\n\n\t\t**********欢迎使用个人通信录系统************\n\n");//输出提示用户printf("\t\t\t\t请选择小写字母a~c\n\t\t\t\t");//输出提示用户scanf("%s",&choice); //用户输入数据if(choice=='a'||choice=='b'||choice=='c')//进行判断{switch(choice){case'a':Mmxg();break; //修改通信录信息case'b':Menu();break; //返回主菜单case'c':system("cls");printf("\n\n\n\n\n\n\n\n\t\t\t*******感谢您的使用*******");//输出提示用户printf("\n\n\t\t\t\t正在退出!");//输出提示用户printf("\n\n\t\t\t\t请稍侯...\n");//输出提示用户for(int i=0;i<L;i++);//减慢速度使界面更美观exit(0); //退出程序}}else{printf("\t\t\t输入有误!请重新输入\n\n\n\t\t\t");//输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观Xtgl(); //返回系统管理界面}}void Hygl(){system("cls");char choice;printf("\n\n\t\t**********欢迎使用个人通信录系统************\n\n");//输出提示用户printf("\t\t****\t\ta.增加好友\t\t****\n\n");//进行选择printf("\t\t****\t\tb.查询记录\t\t****\n\n");//进行选择printf("\t\t****\t\tc.修改记录\t\t****\n\n");//进行选择printf("\t\t****\t\td.删除记录\t\t****\n\n");//进行选择printf("\t\t****\t\te.返回主菜单\t\t****\n\n");//进行选择printf("\t\t****\t\tf.退出通信录\t\t****");//进行选择实验报告printf("\n\n\t\t**********欢迎使用个人通信录系统************\n\n");//输出提示用户printf("\t\t\t\t请选择小写字母a~f\n\t\t\t\t");//输出提示用户scanf("%s",&choice); //用户输入数据if(choice=='a'||choice=='e'||choice=='b'||choice=='c'||choice=='d'||choice=='f')//进行判断{switch(choice){case'a':Add();break; //增加通信录信息case'b':Find();break; //查询通信录信息case'c':Hyxg();break; //修改通信录信息case'd':Delete();break; //删除通信录信息case'e':Menu();break; //返回主菜单case'f': //退出通信录system("cls");printf("\n\n\n\n\n\n\n\n\t\t\t*******感谢您的使用*******");//输出提示用户printf("\n\n\t\t\t\t正在退出!");//输出提示用户printf("\n\n\t\t\t\t请稍侯...\n");//输出提示用户for(int i=0;i<L;i++);//减慢速度使界面更美观exit(0); //退出程序}}else{printf("\n\n\t\t\t\t输入有误!请重新输入\n\n\t\t\t\t\t");//输出提示用户for(int i=0;i<L;i++); //减慢速度使界面更美观Hygl(); //返回主菜单}}//显示菜单void Menu(){system("cls");char choice;system("color 5f");printf("\n\n\t\t**********欢迎使用个人通信录系统************\n\n");//输出提示用户实验报告printf("\n\n\t\t****\t\ta.好友管理\t\t****\n\n");//进行选择printf("\t\t****\t\tb.系统管理\t\t****\n\n");//进行选择printf("\t\t****\t\tc.操作帮助\t\t****\n\n");//进行选择printf("\t\t****\t\td.退出通信录\t\t****\n\n");//进行选择printf("\n\n\t\t**********欢迎使用个人通信录系统************\n\n");//输出提示用户printf("\t\t\t\t请选择小写字母a~d\n\t\t\t\t");//输出提示用户scanf("%s",&choice); //用户输入数据if(choice=='a'||choice=='b'||choice=='c'||choice=='d')//进行判断{switch(choice){case'a':Hygl();break; //修改通信录信息case'b':Xtgl();break; //修改通信录信息case'c':Help();break; //操作帮助case'd': //退出通信录system("cls");printf("\n\n\n\n\n\n\n\n\t\t\t*******感谢您的使用*******");//输出提示用户printf("\n\n\t\t\t\t正在退出!");//输出提示用户printf("\n\n\t\t\t\t请稍侯...\n");//输出提示用户for(int i=0;i<L;i++);//减慢速度使界面更美观exit(0); //退出程序}}else{printf("\n\n\t\t\t\t输入有误!请重新输入\n\n\t\t\t\t\t");//输出提示用户for(int i=0;i<L;i++); //减慢速度使界面更美观Menu(); //返回主菜单}}//添加通讯录信息void Add(){system("cls");int j,m,i,n;TEL *p1[100],*p2; //用指针指向结构体实验报告printf("请输入添加分组个数:"); //输出提示用户printf("\n\n注意!请输入阿拉伯数字!\n\n");//输出提示用户scanf("%d",&n); //用户输入数据if(n>0){for(j=1;j<=n;j++){p1[j]=(TEL *)malloc(sizeof(TEL)); //申请一个新的空间printf("分组名:");scanf("%s",&p1[j]->zuming); //用户输入数据printf("请输入添加第%d组好友个数:",j); //输出提示用户printf("\n\n注意!请输入阿拉伯数字!\n\n",j);scanf("%d",&m); //用户输入数据if(m>0){for(i=1;i<=m;i++){p1[i]=(TEL *)malloc(sizeof(TEL)); //申请一个新的空间printf("请输入第%d个好友信息!\n",i);//输出提示用户printf("姓名:\n");scanf("%s",&p1[i]->name); //用户输入数据printf("性别:\n");scanf("%s",&p1[i]->sex); //用户输入数据printf("电话:\n");scanf("%s",&p1[i]->tel);//用户输入数据printf("地址:\n");scanf("%s",&p1[i]->adr);//用户输入数据printf("邮编:\n");scanf("%s",&p1[i]->eip);//用户输入数据p1[i]->next=NULL;if(head->next==NULL){head->next=p1[i];}else{for(p2=head;p2->next!=NULL;p2=p2->next);//找到结点尾实验报告p2->next=p1[i];}}//保存到链表}else{printf("此操作无法进行!返回中...");//输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观Add();}}}else{printf("此操作无法进行!返回中..."); //输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观Add();}system("cls");printf("\n\n\n\n\n\n\n\n\t\t\t\t信息正在保存中!");//输出提示用户printf("\n\n\t\t\t\t请稍侯...\n"); //输出提示用户for( i=0;i<L;i++); //减慢速度使界面更美观system("cls");printf("\n\n\n\n\n\n\n\n\n\t\t\t\t恭喜添加成功!");//输出提示用户printf("\n\n\t\t\t\t返回中!请稍侯...\n\n"); //输出提示用户for( i=0;i<L;i++); //减慢速度使界面更美观Hygl(); //返回好友管理}//查找通信录信息void Find(){system("cls");TEL *p; //用指针指向结构体char name[50];if(head->next==NULL){printf("\n\n\n\n\n\n\t\t\t\t查找中!"); //输出提示用户实验报告printf("请稍侯...\n\n\n"); //输出提示用户for(int i=0;i<L;i++); //减慢速度使界面更美观printf("此通信录为空!"); //输出提示用户printf("\n返回中!请稍侯...\n"); //输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观Hygl(); //返回好友管理}printf("请输入要查找的姓名:\n"); //输出提示用户scanf("%s",&name); //用户输入数据for(p=head->next;p!=NULL;p=p->next){if(strcmp(p->name,name)==0){system("cls");printf("\n\n\n\n\n\n\t\t\t\t查找中!请稍侯...\n\n\n");//输出提示用户for(int i=0;i<L;i++); //减慢速度使界面更美观printf("\t\t\t\t姓名\t性别\t地址\t邮编\t电话\n");//输出提示用户printf("\t\t\t\t%s\t%s\t%s\t%s\t%s\n",p->name,p->sex,p->adr,p->eip,p->tel);//输出数据printf("\n\t\t\t\t");system("pause");Hygl(); //返回好友管理}else if(p->next==NULL){system("cls");printf("\n\n\n\n\n\n\t\t\t\t查找中!请稍侯...\n\n\n");//输出提示for(int i=0;i<L;i++); //减慢速度使界面更美观printf("\n\n\n\n\n\t\t\t\t无此信息!");//输出提示用户printf("\n\t\t\t\t返回中!请稍侯...\n");//输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观Hygl(); //返回好友管理}}Hygl(); //返回好友管理}void Hyxg(){实验报告system("cls");char name[50]; //先查找后删除TEL *p, *p1; //用指针指向结构体if (head->next == NULL){printf("此通信录为空!"); //输出提示用户printf("\n返回中!请稍侯...\n"); //输出提示用户//return;for(int i=0;i<L;i++); //减慢速度使界面更美观Hygl(); //返回好友管理}printf("请输入要修改的姓名:\n"); //输出提示用户scanf("%s",name); //用户输入数据for(p=head->next;p!=NULL;p=p->next){if(strcmp(p->name,name)==0)break;else if(p->next==NULL){for(int i=0;i<L;i++); //减慢速度使界面更美观printf("无此信息!"); //输出提示用户printf("\n返回中!请稍侯...\n"); //输出提示用户//return;for(i=0;i<L;i++); //减慢速度使界面更美观Hygl(); //返回好友管理}}p1=(TEL *)malloc(sizeof(TEL)); //申请一个新的空间printf("\n新姓名:\n"); //添加信息scanf("%s",p1->name); //用户输入数据strcpy(p->name,p1->name);printf("性别:\n"); //输出提示用户scanf("%s",p1->sex); //用户输入数据strcpy(p->sex,p1->sex);printf("电话:\n"); //输出提示用户scanf("%s",p1->tel); //用户输入数据strcpy(p->tel,p1->tel);printf("地址:\n");scanf("%s",p1->adr); //用户输入数据实验报告strcpy(p->adr,p1->adr);printf("邮编:\n"); //输出提示用户scanf("%s",p1->eip); //用户输入数据strcpy(p->eip,p1->eip);system("cls");printf("\n\n\n\n\n\n\t\t\t\t信息修改中!"); //输出提示用户printf("请稍侯...\n\n"); //输出提示用户for(int i=0;i<L;i++); //减慢速度使界面更美观printf("\t\t\t\t此信息已修改!\n\n");//显示修改的信息printf("\t\t\t\t姓名\t性别\t地址\t邮编\t电话\n\t\t\t\t");printf("%s\t%s\t%s\t%s\t%s\n",p->name,p->sex,p->adr,p->eip,p->tel);//输出数据//free(p1);printf("\n\n\t\t\t\t返回中!请稍侯..."); //输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观Hygl(); //返回好友管理}void Mmxg(){system("cls");p3=(TEL *)malloc(sizeof(TEL)); //申请一个新的空间printf("\n\n\n\n\n\t\t\t\t请输入原密码:");//输出提示用户printf("\n\n\t\t\t\t");scanf("%s",p3->secret); //用户输入数据if((strcmp(p1->secret,p3->secret))==0){printf("\n\n\n\n\n\t\t\t\t请输入新密码:");//输出提示用户printf("\n\n\t\t\t\t");scanf("%s",p1->secret); //用户输入数据system("cls");printf("\n\n\n\n\n\n\n\n\n\t\t\t\t新密码保存中!");//输出提示用户printf("\n\n\t\t\t\t请稍侯......"); //输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观system("cls");printf("\n\n\n\n\n\n\n\t\t\t\t恭喜!\n\n\t\t\t\t密码修改成功!");//输出提示用户printf("\n\n\t\t\t\t正在返回主菜单!请稍侯......");//输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观实验报告Xtgl(); //返回主菜单}else{system("cls");printf("\n\n\n\n\n\n\n\n\t\t\t\t原密码输入错误!");//输出提示用户printf("\n\n\t\t\t\t请重新输入!"); //输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观Mmxg(); //返回密码修改界面}}//删除通信录信息void Delete(){system("cls");char name[50]; //先查找后删除TEL *p = head->next, *p1 =head->next,*p2; //用指针指向结构体if (head->next == NULL){printf("\n\n\n\n\n\t\t\t\t查找中!请稍侯...");//输出提示for(int i=0;i<L;i++); //减慢速度使界面更美观printf("\n\t\t\t\t此通信录为空!"); //输出提示printf("\n\t\t\t\t返回中!请稍侯...\n"); //输出提示// return;for(i=0;i<L;i++); //减慢速度使界面更美观Hygl(); //返回好友管理}printf("\n\n\n\n\n\t\t\t\t请输入要删除的姓名:\n");//输出提示用户scanf(" %s",name); //用户输入数据while ((strcmp(p->name,name)!=0 )&& p->next != NULL){p1=p;p =p->next;}if (strcmp(name, p->name)==0) //输出删除信息{if (p == head->next&&p->next!=NULL)head->next = p->next;else if(p==head->next&&p->next==NULL)实验报告{head->next=p->next;printf("\t\t\t\t正在删除信息中!请稍侯...");//输出提示用户for(int i=0;i<L;i++); //减慢速度使界面更美观system("cls");printf("\n\n\n\n\n\t\t\t\t信息已删除,此通信录为空!!");//输出提示用户printf("\n\t\t\t\t返回中!请稍侯...");//输出提示用户//return;for(i=0;i<L;i++); //减慢速度使界面更美观Hygl(); //返回好友管理}elsep1->next = p->next;}else{printf("\n\n\n\n\n\t\t\t\t查找中!请稍侯..."); //输出提示用户for(int i=0;i<L;i++);printf("\n\t\t\t\t此信息不存在!!!\n"); //输出提示用户for(i=0;i<L;i++); //减慢速度使界面更美观// return;for(i=0;i<L;i++); //减慢速度使界面更美观Hygl(); //返回好友管理}printf("\t\t\t\t正在删除信息中!请稍侯...");for(int i=0;i<L;i++); //减慢速度使界面更美观printf("\n\t\t\t\t此信息已删除!\n\t\t\t\t"); //输出提示用户printf("姓名\t性别\t地址\t邮编\t电话\n"); //输出提示用户for(p2=head->next;p2!=NULL;p2=p2->next)printf("%s\t%s\t%s\t%s\t%s\n",p2->name,p2->sex,p2->adr,p2->eip,p2->tel);//输出数据}void Help(){system("cls");printf("\n\n\n\n\n\n\n\t\t\t\t请您按提示操作!!!!!!!!!");//输出提示用户printf("\n\n\t\t\t\t谢谢合作!!!!!!!!!\n\n\t\t\t\t");//输出提示用户实验报告system("pause");Menu(); //返回主菜单}五软件使用说明1.在使用该软件系统时,应首先定义用户,这样才可以以用户的身份进行登录和操作。