通讯录管理系统

合集下载

通讯录管理系统设计报告

通讯录管理系统设计报告

通讯录管理系统设计报告一、引言通讯录在日常生活中扮演着重要的角色,用来存储和管理各种联系人信息,方便人们随时找到需要联系的人或组织。

随着移动互联网的普及,通讯录的管理变得更加便捷和高效。

为了提高通讯录的管理效率,我们设计并开发了一款通讯录管理系统。

二、系统概述通讯录管理系统是一个基于Web的应用程序,用户可以通过浏览器访问系统,进行通讯录的管理操作。

系统主要包括以下功能:•用户登录与注册:用户可以注册新账号,并通过账号密码登录系统。

•联系人管理:用户可以添加、编辑、删除联系人信息,包括姓名、电话号码、邮箱等。

•分组管理:用户可以创建分组并将联系人归类到不同分组。

•搜索功能:用户可以通过关键词搜索联系人信息。

•导出和导入功能:用户可以将联系人信息导出为Excel表格,并可以通过Excel文件导入联系人到系统中。

三、系统架构通讯录管理系统采用了前后端分离的架构,前端使用Vue.js框架开发,提供友好的用户界面;后端使用Node.js和Express框架搭建RESTful API,负责数据的存储和管理。

系统中的数据存储在MySQL数据库中,用户的密码使用bcrypt进行加密存储,确保用户信息的安全性。

同时,系统对用户权限进行了细致管理,保障用户在系统中的数据安全。

四、系统界面系统的界面设计简洁直观,用户可以轻松进行操作。

主要包括登录页面、通讯录首页、联系人管理页面、分组管理页面等。

用户登录页面:[登录页面截图]通讯录首页:[通讯录首页截图]联系人管理页面:[联系人管理页面截图]五、系统特色•简洁高效:系统操作简单直观,提供了快速的联系人管理功能。

•个性化定制:用户可以根据自己的需求创建分组,快速查找联系人。

•数据安全:采用了加密技术和权限管理,确保用户数据的安全性。

•导入导出功能:支持Excel文件导入导出,方便用户管理大批量联系人信息。

六、未来展望通讯录管理系统将继续进行优化和迭代,引入更多智能化功能,如联系人推荐、消息提醒等,提升用户体验。

数据结构 通讯录管理系统

数据结构 通讯录管理系统

数据结构通讯录管理系统数据结构通讯录管理系统1、引言1.1 目的和范围本文档旨在详细描述一个通讯录管理系统的设计和实现,以便帮助开发人员了解系统的功能和特性。

本系统可以用于存储和管理个人联系信息,实现添加、删除、修改和查询等功能。

1.2 定义、缩略语和缩写词- 通讯录:存储个人联系信息的系统。

- 系统:通讯录管理系统。

2、总体概述2.1 系统背景通讯录管理系统是为了方便用户管理个人联系信息而开发的软件。

它提供了一系列功能,包括添加联系人、删除联系人、修改联系人信息以及搜索联系人等。

该系统旨在提供一个高效、方便和可靠的通讯录管理解决方案。

2.2 产品功能- 添加联系人:用户可以添加新的联系人,并输入其姓名、方式号码、电子邮箱等信息。

- 删除联系人:用户可以删除已经存在的联系人。

- 修改联系人信息:用户可以修改已经存在的联系人的姓名、方式号码、电子邮箱等信息。

- 搜索联系人:用户可以根据姓名、方式号码等信息搜索联系人。

- 显示所有联系人:系统可以显示所有已经存在的联系人。

2.3 用户特点通讯录管理系统的主要用户群体为个人用户,他们需要管理自己的联系人信息。

这些用户对于系统的易用性、稳定性和功能性要求较高,因此系统需要提供简单直观的用户界面,并保证操作的正确性和数据的安全性。

3、系统需求3.1 功能需求3.1.1 添加联系人- 用户可以输入联系人的姓名、方式号码、电子邮箱等信息进行添加。

- 系统应该对输入进行合法性检查,确保输入的信息符合格式要求。

- 添加联系人后,系统应该将联系人信息保存到数据库中。

3.1.2 删除联系人- 用户可以删除已经存在的联系人。

- 删除联系人后,系统应该将联系人信息从数据库中删除。

3.1.3 修改联系人信息- 用户可以修改已经存在的联系人的姓名、方式号码、电子邮箱等信息。

- 系统应该对输入进行合法性检查,确保输入的信息符合格式要求。

- 修改联系人信息后,系统应该将修改后的联系人信息保存到数据库中。

java课程设计(通讯录管理系统)

java课程设计(通讯录管理系统)

掌握Java语言基础
理解面向对象编程思 想
掌握数据库操作技术
提高团队协作和沟通 能力
完成一个实用的通讯 录管理系统
联系人管理:添加、删除、修改、查询联系人信息 联系人分组:创建、删除、修改、查询联系人分组 联系人搜索:根据姓名、电话、邮箱等信息进行搜索 联系人导出:将联系人信息导出为Excel、CSV等格式的文件 联系人导入:从Excel、CSV等格式的文件中导入联系人信息 系统设置:修改系统语言、主题、字体等设置
数据库类型:MySQL
数据库表结构:用户表、 联系人表、分组表等
主键和外键:用户ID、联 系人ID、分组ID等
数据库操作:增删改查等 基本操作
数据库优化:索引、缓存、 分表等优化措施
数据库安全:用户权限管 理、数据加密等安全措施
界面布局:简洁 明了,易于操作
色彩搭配:协调 统一,易于阅读
功能模块:联系 人管理、分组管 理、搜索功能等
汇报人:
添加标题
添加标题
查询方式:支持模糊查询和精确查 询
查询优化:使用索引提高查询效率
功能描述:删除指定联系人信 息
实现方法:调用数据库删除接 口
操作步骤:选择联系人,点击 删除按钮,确认删除
注意事项:确保删除操作不会 影响其他数据完整性
添加联系人:输入姓名、电话、邮箱等信 息
修改联系人:修改姓名、电话、邮箱等信 息
删除联系人:删除指定联系人
查询联系人:根据姓名、电话、邮箱等信 息进行查询
导出联系人:将联系人信息导出为Excel 或CSV文件
导入联系人:将Excel或CSV文件中的联系 人信息导入到系统中
修改模块界面:提供用户友 好的界面,方便用户操作

C#通讯录管理系统总结汇报

C#通讯录管理系统总结汇报

C#通讯录管理系统总结汇报课题名称:C#通讯录管理系统专业:软件技术班级: 1 1 1 1姓名:祝中兴学号: 2011828136目录1系统分析 (3)1.1需求分析 (3)1.2储存过程分析 (3)2系统的实现 (5)2.1登陆界面的实现 (5)2.2主窗体的实现 (6)2.3新增联系人实现 (12)2.4查找联系人实现 (17)3结论 (20)1系统分析1.1需求分析本系统将实现多用户对各自通讯录的管理功能,包括:添加联系人、修改联系人、删除联系人、查找联系人。

为了体现多用户的特性,还必须包含一个用户管理子系统,作用是对用户的信息进行管理。

具体功能模块如图1-1所示图1-1功能模块1.2储存过程分析查找联系人模块使用储存过程来搜索数据,查找联系人的储存过程如下//(教材P250)ALTER PROCEDURE [查找联系人](@name varchar(50),@phone varchar(50),@user varchar(50))ASif len(@user)=0 return 1if len(@name)=0 and len(@phone)=0beginselect 姓名,组别,工作单位,联系电话,电子邮箱? from [联系人]returnendif len(@name)<>0 and len(@phone)=0beginset @name='%'+@name+'%'select姓名,组别,工作单位,联系电话,电子邮箱? from [联系人] where 姓名 like @namereturnendif len(@name)=0 and len(@phone)<>0beginselect姓名,组别,工作单位,联系电话,电子邮箱? from [联系人] where 联系电话 like @phonereturnendif len(@name)=0 and len(@phone)<>0beginselect姓名,组别,工作单位,联系电话,电子邮箱? from [联系人] where 联系电话 like @phone and 姓名 like @namereturnendGo2系统的实现2.1登陆界面的实现登录窗体如图2-1图2-1处理流程图如图2-2示不合法接受到用户输入不匹配合法匹配2-2录窗体流程图实现代码如下private void btnCannel_Click(object sender, EventArgs e){Application.Exit();}private void btnOk_Click(object sender, EventArgs e){string username, password;等待用户输入验证数据合法验证身份等待用户输入username = txtUserName.Text.Trim();password = txtPassWord.Text.Trim();if (username == ""){MessageBox.Show("用户名不能为空!");return;}if (password == ""){MessageBox.Show("密码不能为空!");return;}SqlConnection conn = new SqlConnection();conn.ConnectionString = "server=.;DataBase=PhoneBook;UID=sa;PWD=;";conn.Open();SqlCommand cm = new SqlCommand();cm.Connection = conn;mandText = "select count(*) from 用户 where 用户名='" + username + "'and 密码='" + password + "' ";int recordC = Convert.ToInt32(cm.ExecuteScalar());if (recordC == 1){this.Hide();frmMain f = new frmMain();f.tsslUserName.Text = txtUserName.Text.Trim();f.Show();}else{MessageBox.Show("用户不合法!");}conn.Close();}2.2主窗体的实现主窗体设计如图2-3图2-3主窗体处理流程图如图2-4示等待用户命令添加命令 修改命令 删除命令 查找命令 视图命令2.4窗体流程图实现代码如下加载联系人 分组信息分组数量加载当前分组 的联系人信息 加载添加联系人窗体 加载修改联系人窗体 删除联系人 加载查找联系人窗体 修改视图模式public partial class frmMain : Form{public frmMain(){InitializeComponent();}private string strConn =System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];//主窗体加载事件private void MainForm_Load(object sender, EventArgs e){LoadGroup();if (trvGroup.Nodes.Count > 0){trvGroup.SelectedNode = trvGroup.Nodes[0];LoadList();}else{lvContact.Clear();}}//加载分组信息到TreeViewprivate void LoadGroup(){try{trvGroup.Nodes.Clear();SqlConnection conn = new SqlConnection(strConn);SqlCommand cmd = new SqlCommand();cmd.Connection = conn;mandText = "select distinct 组别 from 联系人 where 用户名='" + tsslUserName.Text + "'";conn.Open();SqlDataReader sdr = cmd.ExecuteReader();while (sdr.Read()){trvGroup.Nodes.Add(sdr[0].ToString());}sdr.Close();conn.Close();}catch}//加载当前分类的联系人信息private void LoadList(){if (trvGroup.Nodes.Count == 0){lvContact.Clear();return;}if (trvGroup.SelectedNode.Index >= 0){string strGroup = trvGroup.SelectedNode.Text;try{lvContact.Clear();lvContact.Columns.Add("姓名", 100);lvContact.Columns.Add("工作单位", 150);lvContact.Columns.Add("联系电话", 100);lvContact.Columns.Add("电子邮箱", 150);SqlConnection conn = new SqlConnection(strConn);SqlCommand cmd = new SqlCommand();cmd.Connection = conn;mandText = "select 编号,姓名,工作单位,联系电话,电子邮箱 from 联系人 where 组别='" + strGroup + "' and 用户名='" + tsslUserName.Text + "'";conn.Open();SqlDataReader sdr = cmd.ExecuteReader();int count = 0;while (sdr.Read()){ListViewItem lvi = new ListViewItem();lvi.Text = sdr["姓名"].ToString();lvi.SubItems.Add(sdr["工作单位"].ToString());lvi.SubItems.Add(sdr["联系电话"].ToString());lvi.SubItems.Add(sdr["电子邮箱"].ToString());lvi.Tag = sdr["编号"];lvi.ImageIndex = 0;lvContact.Items.Add(lvi);count++;}tsslCount.Text = "共计" + count.ToString() + "个联系人";sdr.Close();conn.Close();catch{ }}}//添加方法在主窗体中的实现private void Add(){frmAdd f = new frmAdd();if (f.ShowDialog(this) == DialogResult.OK){LoadGroup();if (trvGroup.Nodes.Count > 0){trvGroup.SelectedNode = trvGroup.Nodes[0];LoadList();}else{lvContact.Clear();}}}//编辑方法在主窗体的实现private void Edit(){if (lvContact.SelectedItems.Count == 1){int id = Convert.ToInt32(lvContact.SelectedItems[0].Tag);frmEdit f = new frmEdit(id);if (f.ShowDialog(this) == DialogResult.OK){LoadGroup();if (trvGroup.Nodes.Count > 0){trvGroup.SelectedNode = trvGroup.Nodes[0];LoadList();}else{lvContact.Clear();}}}}//删除方法在住窗体中的实现private void Delete(){if (lvContact.SelectedItems.Count < 1){return;}if (MessageBox.Show("是否要删除选中的联系人?", "删除确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) {string strWhere = " where 编号 in (";foreach (ListViewItem lvi in lvContact.SelectedItems) {strWhere += lvi.Tag.ToString() + ",";}strWhere = strWhere.Substring(0, strWhere.Length - 1); strWhere += ")";try{SqlConnection conn = new SqlConnection(strConn);SqlCommand cmd = new SqlCommand();cmd.Connection = conn;mandText = "delete from 联系人 " + strWhere; conn.Open();cmd.ExecuteNonQuery();conn.Close();LoadGroup();if (trvGroup.Nodes.Count > 0){trvGroup.SelectedNode = trvGroup.Nodes[0];LoadList();}else{lvContact.Clear();}}catch { }}}//搜索方法在主窗体中的实现private void Search(){frmSearch f = new frmSearch(tsslUserName.Text);f.ShowDialog();}2.3新增联系人实现新增联系人设计如图2-5图2-5新增联系人窗体流程图如图2-6NYNY添加命令图2-6实现代码如下public partial class frmAdd : Form{获取配置信息联系人数量<MAX分组数量<MAX加载分组信息等待用户命令添加联系人禁用添加联系人功能禁用添加分组功能public frmAdd(){InitializeComponent();}private string strUserName = "";private int groupCount = 0;private int contentCount = 0;private string txtFilePath = "";private string strConn =System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];private void frmAdd_Load(object sender, EventArgs e){//获取用户名strUserName = ((frmMain)(this.Owner)).tsslUserName.Text;try{SqlConnection conn = new SqlConnection(strConn);SqlCommand cmd = new SqlCommand();cmd.Connection = conn;//获取配置信息mandText = "select * from 用户where 用户名='"+strUserName+"'";conn.Open();SqlDataReader sdr = cmd.ExecuteReader();if (sdr.Read()){groupCount = Convert.ToInt32(sdr["组别数量最大值"]);contentCount = Convert.ToInt32(sdr["联系人数量最大值"]);}sdr.Close();//获取联系人数mandText = "select count(*) from 联系人where 用户名='" + strUserName + "'";int count = Convert.ToInt32(cmd.ExecuteScalar());if (count >= contentCount){MessageBox.Show("联系人的个数已经达到上限!\r\n如需继续添加联系人,请联系管理员。

学生通讯录管理系统收获及体会

学生通讯录管理系统收获及体会

学生通讯录管理系统收获及体会学生通讯录管理系统是一种用于管理学生联系方式和个人信息的工具,它可以帮助学校、教师和学生更好地进行沟通和合作。

在使用这个系统的过程中,我收获了很多经验和体会。

首先,学生通讯录管理系统可以提高信息交流的效率。

在过去,教师和学生之间的沟通通常是通过纸质通讯录或面对面交流进行的,这种方式可能会导致信息传递不及时或遗漏。

而通过这个系统,教师和学生可以随时随地更新和查看联系方式,及时互相联系,并且系统可以发送通知和提醒,确保信息能够及时传递和接收。

这种高效的信息交流可以提高教学效果和学生参与度。

其次,学生通讯录管理系统可以增强学生之间的互动和合作。

通过这个系统,学生可以找到自己班级或学校的其他学生的联系方式,方便他们之间进行交流和合作。

比如,学生可以通过系统查找组队伙伴、寻求同学的学习帮助或者参与一些学校活动。

这种互动和合作可以促进学生之间的友谊和团队精神,也有助于他们在学业上取得更好的成绩。

此外,学生通讯录管理系统还可以提高学校管理的效率。

学校可以通过这个系统集中管理学生的个人信息,包括联系方式、班级和课程等。

这样,当学校需要与学生沟通时,可以直接通过系统发送通知,而不需要逐个联系学生或者使用其他不够高效的方式。

此外,学校还可以通过系统汇总学生的反馈和建议,了解学生的需求和问题,从而更好地进行管理和改进。

总的来说,学生通讯录管理系统是一种非常有用的工具,它可以提高学校、教师和学生之间的沟通效率,促进学生之间的互动和合作,提高学校管理的效率。

通过使用这个系统,我深刻体会到了信息技术在教育领域的重要性和应用价值,也意识到了信息管理对于学校和学生的重要性。

希望未来能够有更多的学校和教育机构使用这种系统,以提升教育质量和学生的学习体验。

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

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

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

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

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

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

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

算法设计添加联系人信息添加联系人信息时,我们需要遍历链表找到合适的位置插入新节点,这里的算法复杂度为O(n),其中n表示链表的长度。

查找联系人信息查找联系人信息时,我们需要遍历链表查找目标节点,这里的算法复杂度为O(n)。

删除联系人信息删除联系人信息时,我们同样需要遍历链表找到目标节点并删除,其算法复杂度为O(n)。

更新联系人信息更新联系人信息时,我们首先需要查找到目标节点,然后进行更新操作,其算法复杂度也为O(n)。

系统优化为了提高系统的性能,我们可以通过以下几种方式进行优化: - 使用哈希表索引联系人信息,减少查找联系人的时间复杂度; - 引入缓存机制,减少频繁的IO 操作。

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

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

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

通讯录管理系统(C语言)

通讯录管理系统(C语言)

通讯录管理系统(C语⾔)/** 对通讯录进⾏插⼊、删除、排序、查找、单个显⽰功能*/#include <stdio.h>#include <malloc.h>#include <string.h>#include <stdlib.h>int n;typedef struct _Address_List{char name[30]; //名字char work[30]; //职业char handset[20]; //⼿机号码char email[30]; //电⼦邮件char address[30]; //地址struct _Address_List *next;}address_List;#define LEN sizeof(address_List)address_List *Release(address_List *head);//创建⼀个通讯录address_List *Create(void){address_List *head,*p1,*p2;char name[30];n = 0;p1 = (address_List *)malloc(LEN);p2 = p1;printf("请输⼊通讯录的内容!\n姓名输⼊为0时表⽰创建完毕!\n");printf("请输⼊姓名:");gets(name);if(strcmp(name,"0")!=0){strcpy(p1->name,name);printf("请输⼊职业:");gets(p1->work);printf("请输⼊⼿机:");gets(p1->handset);printf("请输⼊电⼦邮件:");gets(p1->email);printf("请输⼊通讯地址:");gets(p1->address);head = NULL;while(1){n = n+1;if(n == 1){head = p1;}else{p2->next = p1;}p2 = p1;printf("请输⼊姓名:");gets(name);if(strcmp(name,"0") == 0){break;}else{p1 = (address_List *)malloc(LEN);strcpy(p1->name,name);printf("请输⼊职业:");gets(p1->work);printf("请输⼊⼿机:");gets(p1->handset);printf("请输⼊电⼦邮件:");gets(p1->email);printf("请输⼊通讯地址:");gets(p1->address);}}return head;}else{return0;}}//打印整个通讯录void print(address_List *head){address_List *p;if(head != NULL){p = head;printf("本通讯录现在共有%d⼈;\n",n);printf("---姓名---------职业----------⼿机--------Email-------------通讯地址\n");printf("====================================================================\n");do{printf("=%s\t\t",p->name);printf("=%s\t\t",p->work);printf("=%s\t\t",p->handset);printf("=%s\t\t",p->email);printf("=%s\n",p->address);p = p->next;}while(p != NULL);printf("==================================================================\n"); }else{printf("通讯录为空,⽆法输出!\n");}}//在通讯录插⼊address_List *insert(address_List *head){address_List *p0,*p1,*p2;char name[20];p1 = head;printf("请输⼊增加的内容:\n");printf("请输⼊姓名:");gets(name);if(strcpy(name,"0") == 0){printf("姓名不能为0,增加失败!\n");return head;}else{p0 = (address_List *)malloc(LEN);strcpy(p0->name,name);printf("请输⼊职业:");gets(p1->work);printf("请输⼊⼿机:");gets(p1->handset);printf("请输⼊电⼦邮件:");gets(p1->email);printf("请输⼊通讯地址:");gets(p1->address);n = n+1;if(head == NULL){head = p0;p0->next = NULL;return head;}else{while(strcmp(p0->name,p1->name) > 0 && (p1->next != NULL)){p2 = p1;p1 = p1->next;}if(strcmp(p0->name,p1->name) <0 || strcmp(p0->name,p1->name) == 0){if(head == p1){head = p0;}else{}p0->next = p1;}else{p1->next = p0;p0->next = NULL;}return head;}}}//删除通讯录中某个⼈address_List *delete_txl(address_List *head){address_List *p,*q;char name[30];if(head == NULL){printf("通讯录为空,⽆法删除!\n");return head;}p = head;printf("请输⼊需要删除的⼈姓名:");gets(name);if(strcmp(head->name,name) == 0){head = head->next;free(p);printf("删除操作成功!\n");return head;}else{q = head;p = head->next;while(p != NULL){if(strcmp(p->name,name) == 0){q->next = p->next;free(p);printf("删除操作成功!\n");return head;}p = p->next;q = q->next;}}}//显⽰通讯录中某个⼈address_List *display(address_List *head){address_List *p1,*p2;char name[30];int m;if(head == NULL){printf("通讯录为空,⽆法显⽰!\n");return head;}p1 = head;m = 0;printf("请输⼊要显⽰⼈的姓名:");gets(name);while(p1 != NULL){while(strcmp(p1->name,name) != 0 && p1->next != NULL){p2 = p1;p1 = p1->next;}if(strcmp(p1->name,name) == 0){m++;printf("%s的通讯内容如下:\n",name);printf("---姓名---------职业----------⼿机--------Email-------------通讯地址\n");printf("====================================================================\n"); printf("=%s=\t\t",p1->name);printf("=%s=\t\t",p1->work);printf("=%s=\t\t",p1->handset);printf("=%s=\n",p1->address);printf("====================================================================\n"); }p1 = p1->next;}if(m == 0){printf("此⼈不在通讯录中!\n");}return head;}//对通讯录进⾏排序操作address_List *Sort(address_List *head){address_List *p1,*p2;int i,j;typedef struct _Address_List1{char name[30]; //名字char work[30]; //职业char handset[20]; //⼿机号码char email[30]; //电⼦邮件char address[30]; //地址}address_List1;address_List1 Sort[200];address_List1 temp;if(head == NULL){printf("通讯录为空,⽆法排序!\n");return head;}p1 = head;for(i = 0;i < n,p1 != NULL; i++){strcpy(Sort[i].name,p1->name);strcpy(Sort[i].work,p1->work);strcpy(Sort[i].handset,p1->handset);strcpy(Sort[i].email,p1->email);strcpy(Sort[i].address,p1->address);p2 = p1;p1 = p1->next;}head = Release(head);for(j = 0; j < n-1; j++){for(i = j+1; i < n; i++){if(strcmp(Sort[i].name,Sort[j].name) < 0){Sort[i] = temp;temp = Sort[j];Sort[j] = temp;}}}p1 = (address_List *)malloc(LEN);p2 = p1;strcpy(p1->name,Sort[0].name);strcpy(p1->work,Sort[0].work);strcpy(p1->handset,Sort[0].handset);strcpy(p1->email,Sort[0].email);strcpy(p1->address,Sort[0].address);head = p1;for(i = 1; i < n; i++){p1 = (address_List *)malloc(LEN);strcpy(p1->name,Sort[i].name);strcpy(p1->work,Sort[i].work);strcpy(p1->handset,Sort[i].handset);strcpy(p1->email,Sort[i].email);strcpy(p1->address,Sort[i].address);p2->next = p1;p2 = p1;}p2->next = NULL;printf("按姓名排序后的结果是:\n");print(head);return head;}address_List *Search_name(address_List *head){address_List *p1,*p2;int m;char name[30];if(head == NULL){printf("通讯录为空,⽆法查找!\n");return head;}p1 = head;printf("**************************\n");printf("****请输⼊要查找的姓名:**\n");printf("**************************\n");m = 0;gets(name);while(p1 != NULL){while(strcmp(p1->name,name) != 0 && (p1->next != NULL)){p2 = p1;p1 = p1->next;}if(strcmp(p1->name,name) == 0){m++;printf("你查找的内容是:\n");printf("++++++++++++++++++++++++++++++++\n");printf("++ %s\t%s\t%s\t%s\t%s ++",p1->name,p1->work,p1->handset,p1->email,p1->address); printf("++++++++++++++++++++++++++++++++\n");}p1 = p1->next;if(m == 0){printf("你查找的姓名不在通讯录中!\n");}break;}return head;}//释放整个通讯录address_List *Release(address_List *head){address_List *p;while(head != NULL){p = head;head = head->next;free(p);}return head;}//保存(以⽂件的形式保存)void save(address_List *head){FILE *fp;address_List *p;char Filename[30]; //保存后的⽂件名if(head ==NULL){printf("待保存的通讯录为空,⽆法保存!\n");return ;}printf("请输⼊保存后的⽂件名:");gets(Filename);fp = fopen("Filename.txt","w");if(fp == NULL){printf("⽆法打开⽂件!\n");return ;}p = head;fprintf(fp,"姓名\t职业\t⼿机\tEmail\t地址\n");for(;p != NULL;){fprintf(fp,"姓名\t职业\t⼿机\tEmail\t地址",p->name,p->work,p->handset,p->email,p->address);p = p->next;}printf("保存完毕!\n");}//⽂件读出函数address_List *Load(address_List *head){FILE *fp;char Filename[30];address_List *p1,*p2;printf("请输⼊要输出的⽂件名:");gets(Filename);fp = fopen("Filename.txt","r");if(fp == NULL){printf("此通讯录不存在,⽆法输出!\n");return head;}else{head = Release(head);}p1 = (address_List *)malloc(LEN);fscanf(fp,"%s%s%s%s%s",p1->name,p1->work,p1->handset,p1->email,p1->address);if(feof(fp) != 0){printf("⽂件为空,⽆法打开!\n");return head;}else{rewind(fp);p2 = p1;head = p1;n = 0;while(feof(fp) == 0){fscanf(fp,"%s%s%s%s%s",p1->name,p1->work,p1->handset,p1->email,p1->address);if(feof(fp) != 0){break;}p2->next = p1;p2 = p1;p1 = (address_List *)malloc(LEN);n = n+1;}p2->next = NULL;p1 = head;head = head->next;n = n-1;free(p1);print(head);printf("打开完毕!\n");return head;}fclose(fp);}//菜单选择函数address_List *menu(address_List *head){char num[10];while(1){printf("*******************************\n");printf("*****1. 姓名查找 **********\n");printf("*****2. 单个显⽰ **********\n");printf("*****3. 增加 **********\n");printf("*****4. 退出 **********\n");printf("*******************************\n");printf("请输⼊你选择的操作:");gets(num);switch(*num){case'1':{head = Search_name(head);print(head);}break;case'2':{head = display(head);break;case'3':{head = insert(head);print(head);}break;case'4':return head;default:printf("操作有误,此项不存在!\n");break;}if(strcmp(num,"6") == 0){break;}}return head;}//主函数int main(void){address_List *head = NULL;char num[10];printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n"); printf("*=*=*=*=*=*=*= 程序说明 *=*=*=*=*=*=*\n");printf("*=*=*=*=*=*=*= 请及时保存创建完毕的通讯录内容 *=*=*=*=*=*=*\n");printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n"); while(1){printf("*******************************\n");printf("****** 1. 创建通讯录 *******\n");printf("****** 2. 按名字排序 *******\n");printf("****** 3. 综合操作 *******\n");printf("****** 4. 保存 *******\n");printf("****** 5. 打开 *******\n");printf("****** 6. 删除 *******\n");printf("****** 7. 退出 *******\n");printf("*******************************\n");printf("请输⼊你选择的操作:");gets(num);switch(*num){case'1':{if(head == NULL){head = Create();print(head);}else{head = Release(head);head = Create();print(head);}}break;case'2':{head = Sort(head);}break;case'3':{head = menu(head);}break;case'4':{save(head);print(head);}break;case'5':{head = Load(head);}break;case'6':{print(head);}break;case'7':{head = Release(head);}break;default:{printf("操作有误,此项不存在!\n"); }break;}if(strcmp(num,"7") == 0){break;}}return0;}。

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

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

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

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

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

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

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

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

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

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

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

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

通讯录管理系统绪论在时代不断发展的今天,很多东西都在不断的进步,当然,信息的发展也在不断的随着进步起来,因此,我们所要研究的课题信息管理系统也在向我们缓缓走来,并且涉及到很多的领域,以至于涉及到很多的方面,从大的来讲可以涉及到公司企业的系统的管理,从小的方面来讲可以涉及到单个人的联系方式的管理等等,并且随着时代不断的发展,还会涉及到更多的领域。

1引言1.1课题简介:所谓通讯录管理系统,其实就是在世界上的每个社会上的成员作为用户来说,在他的通讯录的联系人存储中保存他所有联系人的信息的管理,以及时一个管理信息的系统。

它所管理的内容对于每一个用户来说都是非常非常重要的,所以,这个所谓的通讯录管理系统必须能够具有很多很强的功能,其中包括对我们所需要的信息必须是完整的,当然对我们也必须是非常有用的,并且它还应该具有随时并且很快查询出我们所要信息的功能,从而用户使用的一个合理的,提供了很大的方便。

1.2开发的意义:当今我们面临着科技的一直提高,计算机科学技术已经逐渐趋向成熟,网上通讯工具的迅速发展,它的功能如此强大以至于已经被人们深刻认识,并且它已经逐渐开始走进人类的社会,与此同时它的地位也在很多的领域发挥着很到的作用。

单纯的从计算机这个方面来说,由于这个领域还很小,所以要使用它来实现我们所需的铜须路的管理,具有太多别的方式不能达到的优点,其中这些优点包括很快的检查速度、便利的查找、存储的容量要足够大、意思安全性也要很强、但所需的费用必须合理,尽可能的很低等等。

这些优点使得通讯录管理的效率得到了很大的提高。

所以从以上的分析可以看出,要开发这样一套软件来管理我们的系统这件事是很有必要的,因此,我感觉这也是锻炼我在将理论运用到现实社会生活中的一次实际的考验,有很大的意义。

我也希望通过本次的涉及能让我达到学为所用,从而让我的学习成为有意义,成为有价值的一种时间上的付出。

1.3开发环境及实现技术1.3.1开发环境:Visual studio 2005,SQL severe1.3.2开发工具简介:Visual Studio 2005(以下简称为VS 2005)是一种很新的开发工具,并且这种工具是由美国的微软公司开发出来的,这种最新的版本具有很多的全新功能,其中这种新的功能体现在很多方面在语言方面的强化,并且它的贡献也有很多,其中更好的执行就是它所提供的一种效能,并且在安全这方面也有了很大提高,他已经成为一种编程环境,并且这种环境的功能是很强大的,也是具有很高端效率的,提供了一种统一的并且集成的环境,它还能够支持很多种编程语言在同样的开发环境编写新程序并且对所编写的应用程序进行调试并加以部署。

它是一种全套的并且完整的提供开发的工具集,用于生成 Web应用程序,并且它还是一个完全的能够面向对象的一种新型的开发平台。

SQL Severe也就是:数据库管理系统(DBMS),并且它是由Microsoft公司开发和推广的,但是在刚刚开始的时候它是由好几个公司在一起共同开发的,版本也随着时代和技术的发展而不断的更新。

其中数据库(DB)是存放数据的仓库,只不过这些数据存在一定的关联,并按一丁的格式存放在计算机内。

简单的说,数据并不仅仅只是单纯的、数字的数据,它还包括文本的内容,当然还有很多例如视频等这些动态的数据。

而数据库管理系统(DBMS)是一种系统,并且这种系统的功能是用来管理数据库,还可以根据数据的模型来组织数据,它还包括很多的功能,例如:数据的定义、操作、是否完整无缺的检查以及是否具有隐私的保护等等。

2 系统的分析与设计2.1系统开发的目标和思想本系统主要根据我们人类在日常的社会生活中对实际联系人管理的运用而进行开发设计的.其目的是为了方便人们管理联系人通讯工作的需要,提高数据存储的可靠性,并且方便存储和查询、搜索等一系列的操作。

在这个简单的基础上还要设计好一个可以供我们人类正常使用的界面.因此要做很多的设计,例如将我们每个人通讯录里的联系人进行分类以及一些信息的处理等功能。

2.2系统的可行性研究和需求分析(一)可行性研究通讯录管理系统在我们实际应用中非常广泛,其中很多的功能都很齐全也很强大。

它不仅是新老同学联系的桥梁,也是和家人沟通慰问的一种亲情便利工具,而且还是自我娱乐的好方式。

通讯录管理系统的功能一般包括:增添、修改、删除、搜索、查看及生成等功能。

实现的功能概括为用于注册用户,包括家人和朋友;还提供注册用户的个人资料进行修改;对于用户的联系,方便联系人之间的查找;可以对于自己的家人和朋友做进一步的资料获得;用户可以对他们所有的联系人的基本资料作相应的改动,包括删除等功能。

不过它在一些方面还是会存在一些不完善的地方,不过通过努力和深入探究一定会在短时间内弥补这些缺点,提高质量,完善功能。

以便系统能有效完成,实行更多的功能,从而能够给用户带来方便。

可行性研究的目的就是判断其是否可行,关键是能否在最短的时间以耗资最少为基础来实现其是否可以解决问题。

其中可行性主要包括以下三个方面:(1)技术上的可行性研究:因为与本次所设计的系统相似的管理方面的系统这方面的开发设计已经有一定的时期,也有很多次成功,所以在技术这些方面的基础已经很牢固,因而技术上的准备应该不会存在什么大问题。

(2)经济上的可行性研究:因为该系统的规模是比较小的,所以在经济方面也是在可以接接受的范围。

(3)操作的可行性研究:对于我们所研究的这个问题以至于这类的问题,我们应该现提出问题,然后分析,最后解决之后再反复研究,以便最后保证系统的正常运行。

(二)需求分析通讯录管理涉及用户信息、联系人信息等数据管理。

如果仅仅从管理这方面来说可以把通讯录的内容分为三类:联系人分类、联系人信息管理。

该系统的信息管理包括对联系人的增添、修改、删除、搜索、查看等操作,它还应该具有很多的功能,包括:对不同的用户登录设置想要的登录权限和方法、可以查看联系人信息的情况等。

3通讯录管理系统设计★首先简单介绍一下的存储类型:(1)无结构(2)有结构,无层次的数据(3)有层次的数据:XML 文档等等3.1系统概要设计3.1.1功能模块分析本系统将实现很多的功能,具体功能如下图:3.1.2数据库设计注:1.数据库名、表名、字段名用英文,以防编码错误。

2.字段名尽量不要与关键字重名。

如重名,用[]将字段名括起来 ★ 表的结构: 表名:Users 。

作用:保存一些信息,这些信息都包括所要进行登录操作的用户的用户名和密码。

如下图所示:表名:ATTN 。

作用:保存我们在我们联系的范围内的人的一些信息。

如下表所示:★ 表的关系:在我们设计的这个系统中两个表之间的关系如图所示:连接数据库的相关代码:<?xml version="1.0" encoding="utf-8" ?><configuration><configSections></configSections><connectionStrings><add name="Server.Properties.Settings.PhoneBookConnectionString"connectionString="Data Source=localhost\sqlexpress;initial Catalog=PhoneBook;Integrated Security=True;Pooling=False"providerName="System.Data.SqlClient" /><add name="Server.Properties.Settings.PhoneBookConnectionString1"connectionString="Data Source=localhost\sqlexpress;initial Catalog=PhoneBook;Integrated Security=True;Pooling=False"providerName="System.Data.SqlClient" /></connectionStrings></configuration>3.2制作“用户管理”窗体任务实现:通过一系列的实现从而创建所要的窗体3.3 制作“用户登录”窗体3.3.1设计用户登录界面3.3.2 任务实现(1)窗体布局2314 5678(2)窗体布局说明用户登录窗体布局说明:(3)窗体功能描述:a 登录窗体的目的是为了验证所要登录的用户的身份,这个窗体使我们进入系统所看到的第一个界面。

b当用户输入用户名和密码后,通过确定这一按钮的判断,可以查询得知所要登录的用户是否正确,是否可以进入接下来的窗体的界面。

(4)处理流程图★创建窗体static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new Form1());}改为static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new frmLogin());}相关代码1) 单击“取消”按钮关闭窗体即退出。

2) 单击“确定”按钮验证文本框内容、验证用户以下是用户登录成功或失败的相关代码:try{//检测文本框内容if (txtUserName.Text.Trim() == "" || txtPassword.Text.Trim() == ""){MessageBox.Show("用户名和密码不能为空!","登录失败",MessageBoxButtons.OK,MessageBoxIcon.Error);return;}//验证用户SqlConnection conn = new SqlConnection();conn.ConnectionString=System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];;conn.Open();string sql = "select count(*) from 用户where 用户名='"+txtUserName.Text.Trim()+"' and 密码='"+txtPassword.Text.Trim()+"'";SqlCommand cmd = new SqlCommand();cmd.Connection=conn;mandText=sql;int result = Convert.ToInt32(cmd.ExecuteScalar());conn.Close();if (result == 1){//登录成功frmMain f = new frmMain();f.tsslUserName.Text = txtUserName.Text.Trim();f.Show();this.Hide();}else{MessageBox.Show("用户名和密码错误!", "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}}catch (Exception ee){MessageBox.Show("发生错误/r/n"+ee.Message, "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}3.4 制作“主操作”窗体3.4.1 总体设计(1)窗体布局123465(2)主窗体布局:(3) 窗体功能描述:我们所设计的这个管理系统的主窗体是整个系统的主要部分,也是将各个窗体联系在一起的一个嫁接,如果用户找不到每个操作的入口的话,就可以通过主窗体来实现。

相关文档
最新文档