通讯录系统程序设计报告
- 格式:doc
- 大小:1.82 MB
- 文档页数:23
通讯录管理系统C语言课程设计报告
一、课题简介
通讯录管理系统是一种常见的应用程序,旨在帮助用户组织和管理他们的联系人信息。
本课程设计将利用C语言来实现一个基本的通讯录管理系统,旨在帮助学生掌握C语言编程的基本知识和技能。
二、设计目的
1.帮助学生熟悉C语言的基本语法和编程逻辑;
2.提高学生对数据结构的理解和运用能力;
3.培养学生的编程能力和软件开发思维;
4.提高学生的团队合作和项目管理能力。
三、设计内容
本课程设计将围绕以下几个方面展开:
1.用户界面设计:设计一个简洁直观的用户界面,包括菜单选项、输
入输出界面等;
2.数据结构设计:设计通讯录数据结构,包括联系人姓名、电话号码
等信息的存储方式;
3.功能实现:实现通讯录管理系统的基本功能,包括添加联系人、删
除联系人、查找联系人等操作;
4.文件操作:实现通讯录数据的读写操作,将联系人信息保存到文件
中,以便下次运行时读取;
5.错误处理:处理用户输入错误等异常情况,保证程序的稳定性和可
靠性。
四、预期效果
通过本课程设计,学生将能够掌握以下技能:
1.掌握C语言基本语法和编程逻辑;
2.熟悉数据结构的设计和运用;
3.提高编程能力和软件开发思维;
4.培养团队合作和项目管理能力。
五、总结
通过设计一个通讯录管理系统的C语言课程项目,学生将在实践中加深对C语言的理解和应用,提高编程技能和解决问题的能力。
希望本课程设计能够为学生的编程学习提供一定的帮助和指导。
以上为《通讯录管理系统C语言课程设计报告》的简要介绋,希望能够为课程设计的顺利进行提供一定的参考和指引。
通讯录管理系统c语言课程设计报告(一)通讯录管理系统C语言课程设计报告1. 简介通讯录管理系统是一款基于C语言开发的软件,旨在帮助用户方便地存储、查找、编辑和删除联系人信息。
本报告将对该系统的功能和设计进行详细介绍。
2. 系统功能通讯录管理系统具备以下主要功能:•添加联系人:用户可以输入联系人的姓名、电话号码、电子邮件等信息,并将其添加到通讯录中。
•查找联系人:用户可以根据姓名或电话号码等方式,快速查找通讯录中的联系人信息。
•编辑联系人:用户可以修改通讯录中已有联系人的信息,如电话号码、电子邮件等。
•删除联系人:用户可以从通讯录中删除特定联系人。
•显示通讯录:用户可以查看通讯录中的所有联系人信息。
•退出系统:用户可以选择退出通讯录管理系统。
3. 系统设计数据结构通讯录管理系统主要使用以下数据结构存储联系人信息:•结构体:定义了一个联系人的数据结构,包括姓名、电话号码、电子邮件等字段。
•数组:用于存储多个联系人信息,构成通讯录。
数组的每个元素对应一个联系人的结构体。
主要函数添加联系人函数void addContact(struct Contact contacts[], int *num Contacts)•功能:向通讯录中添加一个联系人。
•输入参数:通讯录数组contacts、通讯录中联系人数量numContacts的指针。
•输出:无。
查找联系人函数void searchContact(struct Contact contacts[], int n umContacts)•功能:根据用户提供的关键词在通讯录中查找联系人。
•输入参数:通讯录数组contacts、通讯录中联系人数量numContacts。
•输出:无。
编辑联系人函数void editContact(struct Contact contacts[], int num Contacts)•功能:根据用户选择的联系人在通讯录中编辑联系人信息。
通讯录管理系统设计报告一、引言通讯录在日常生活中扮演着重要的角色,用来存储和管理各种联系人信息,方便人们随时找到需要联系的人或组织。
随着移动互联网的普及,通讯录的管理变得更加便捷和高效。
为了提高通讯录的管理效率,我们设计并开发了一款通讯录管理系统。
二、系统概述通讯录管理系统是一个基于Web的应用程序,用户可以通过浏览器访问系统,进行通讯录的管理操作。
系统主要包括以下功能:•用户登录与注册:用户可以注册新账号,并通过账号密码登录系统。
•联系人管理:用户可以添加、编辑、删除联系人信息,包括姓名、电话号码、邮箱等。
•分组管理:用户可以创建分组并将联系人归类到不同分组。
•搜索功能:用户可以通过关键词搜索联系人信息。
•导出和导入功能:用户可以将联系人信息导出为Excel表格,并可以通过Excel文件导入联系人到系统中。
三、系统架构通讯录管理系统采用了前后端分离的架构,前端使用Vue.js框架开发,提供友好的用户界面;后端使用Node.js和Express框架搭建RESTful API,负责数据的存储和管理。
系统中的数据存储在MySQL数据库中,用户的密码使用bcrypt进行加密存储,确保用户信息的安全性。
同时,系统对用户权限进行了细致管理,保障用户在系统中的数据安全。
四、系统界面系统的界面设计简洁直观,用户可以轻松进行操作。
主要包括登录页面、通讯录首页、联系人管理页面、分组管理页面等。
用户登录页面:[登录页面截图]通讯录首页:[通讯录首页截图]联系人管理页面:[联系人管理页面截图]五、系统特色•简洁高效:系统操作简单直观,提供了快速的联系人管理功能。
•个性化定制:用户可以根据自己的需求创建分组,快速查找联系人。
•数据安全:采用了加密技术和权限管理,确保用户数据的安全性。
•导入导出功能:支持Excel文件导入导出,方便用户管理大批量联系人信息。
六、未来展望通讯录管理系统将继续进行优化和迭代,引入更多智能化功能,如联系人推荐、消息提醒等,提升用户体验。
通讯录管理系统课程设计报告系统存储结构一、引言通讯录管理系统是一种方便快捷地存储和管理联系人信息的应用程序。
在该系统中,数据的存储结构至关重要,它直接关系到系统的性能和稳定性。
本文将介绍通讯录管理系统的系统存储结构设计,包括数据的组织方式、存储介质选择等内容。
二、存储结构设计1. 数据的组织方式在通讯录管理系统中,联系人信息是系统中最主要的数据之一。
为了高效地存储和管理这些信息,我们选择采用数据库的方式进行组织。
数据库将联系人信息按照一定的结构进行组织和存储,方便系统对数据的检索和更新。
2. 数据库的选择在选择数据库时,我们考虑到系统的使用特点和性能要求,最终选择了关系型数据库。
关系型数据库具有良好的数据一致性和完整性,能够满足系统的数据管理需求。
同时,支持 SQL 查询语言的特性也使得对数据进行灵活的操作成为可能。
3. 数据表设计在关系型数据库中,数据是以表的形式进行存储的。
针对通讯录管理系统的需求,我们设计了以下几张表:•用户表:用于存储系统的用户信息,包括用户名、密码等;•联系人表:用于存储用户的联系人信息,包括姓名、电话号码、邮箱地址等;•分组表:用于将联系人进行分类管理,方便用户对联系人信息进行组织。
每张表之间通过外键进行关联,确保数据的一致性和完整性。
三、存储介质选择除了数据库存储外,系统还需要选择适当的存储介质来保存一些系统配置信息和用户的登录状态等数据。
我们选择了文件系统作为存储介质,将这些数据以文件的形式进行存储。
四、存储结构的优化为了提高系统的性能和响应速度,我们对存储结构进行了一定的优化。
主要包括以下几点:•索引设计:对关键字段建立索引,加快检索速度;•归档策略:定期对系统中的数据进行归档,减少存储空间的占用;•缓存机制:使用缓存技术对频繁访问的数据进行缓存,减少数据库访问的频率。
五、总结系统存储结构的设计对于通讯录管理系统的性能和稳定性具有重要影响。
通过合理选择数据库和存储介质,并对存储结构进行优化,可以有效提高系统的用户体验和响应速度。
C 语言课程设计题目:通讯录管理系统设计者:院系:数理学院专业:信息与计算科学班号:123111学号:***********指导教师:***2012年6月29日1.题目要求通讯录管理系统是具有数据插入、更新、删除、显示和查询功能的电话簿管理程序。
(1)数据包括姓名、工作单位、电话号码和E-MAIL地址等。
(2)可对记录中的姓名和电话号码进行更新。
(3)可增加和删除记录。
(4)可显示所有的保存的记录。
(5)可按姓名或电话号码进行查询。
2.需求分析1.信息记录要存放到文件中,要实现文件的输入、输出功能;2.实现数据的添加、删除、更新和显示,要提供输入、删除、更新和显示功能;3.要实现按人名或电话号码进行查询,因而要提供查找功能;4.应该提供键盘式选择菜单以实现功能选择。
5.采用模块化,由上到下的设计方法,通过数字选择菜单功能,上级菜单可进入下级菜单,下级菜单可返回上级菜单。
3.总体设计根据上面得需求分析,系统有菜单选择、数据输入、数据查找、数据更新、数据的存储等功能。
可以将系统设计分为四大模块,即显示、查找、更新(包括增加和删除)和退出,如图1所示。
其中,主要功能是显示、查询和更新三个模块。
4.详细设计4.1主函数主函数设计比较简洁,只提供输入、功能处理和输出部分得函数调用。
其中各功能模块采用菜单方式选择。
另外,菜单部分也可以写出函数。
具体流程图如图2所示。
【程序】main(){int n,w;do{puts("***************通讯录管理系统***************\n");puts("********************菜单********************\n");puts("1.显示通讯录\n");puts("2.查找\n");puts("3.更新\n");puts("4.退出\n");puts("********************************************\n");printf("选择功能(1-4):");scanf("%d",&n);if(n<1||n>4){w=1;getchar();}else {w=0;}}while(w==1);switch(n) /*选择功能*/{case 1:list();break; /*列出通讯录*/ case 2:find();break; /*查找*/case 3:choose();break; /*更新通讯录*/ case 4:printf("谢谢使用!\n\n"); /*退出*/ }}4.2各功能模块设计★数据结构通讯录的数据信息:姓名、工作单位、电话号码、E-MAIL均采用字符型数组,用结构体的形式,把各信息作为结构的成员。
C语言通讯录管理系统课程设计报告一、引言通讯录管理系统是一种常见的实用性软件,用于记录和管理个人或组织的联系人信息。
本文档旨在介绍一种基于C语言开发的通讯录管理系统的设计与实现。
通过本系统,用户可以方便地添加、删除、搜索和编辑联系人信息,实现了通讯录的基本功能。
二、系统需求分析本通讯录管理系统的主要功能包括: 1. 添加联系人:用户可以添加联系人的姓名、电话号码、邮箱等信息。
2. 删除联系人:用户可以根据联系人的姓名或电话号码删除对应的联系人信息。
3. 查找联系人:用户可以根据联系人的姓名或电话号码查找对应的联系人信息。
4. 修改联系人:用户可以修改已存在联系人的信息。
5. 显示所有联系人:用户可以查看通讯录中所有的联系人信息。
三、系统设计1. 数据结构设计为了实现通讯录管理系统,我们需要设计适当的数据结构来存储联系人信息。
在本设计中,使用结构体数组来表示每个联系人的信息,其中每个结构体包含姓名、电话号码、邮箱等成员变量。
struct Contact {char name[50];char phoneNumber[20];char email[50];};2. 功能模块设计本系统主要包含以下几个功能模块:a. 添加联系人模块用户可以选择添加新的联系人,输入姓名、电话号码和邮箱等信息后,系统将在通讯录中添加新的联系人。
b. 删除联系人模块用户可以根据输入的姓名或电话号码查找对应的联系人信息,并选择删除对应的联系人。
c. 查找联系人模块用户可以根据输入的姓名或电话号码查找对应的联系人信息,并在界面上显示查询结果。
d. 修改联系人模块用户可以根据输入的姓名或电话号码查找对应的联系人信息,并选择修改对应的联系人。
e. 显示所有联系人模块用户可以选择显示通讯录中所有的联系人信息,在界面上进行展示。
3. 系统框架设计本系统的整体框架如下:1. 主菜单显示2. 根据用户的选择,进入对应的功能模块四、系统流程图下图展示了通讯录管理系统的整体流程:主菜单 -> 用户选择功能模块 -> 执行对应模块功能五、代码实现以下为通讯录管理系统的部分核心代码实现,完整代码可参考附录部分。
数据结构课程设计通讯录管理系统报告前言通讯录管理系统是一种常见的应用程序,用于帮助用户有效地组织和管理他们的联系人信息。
本报告旨在介绍和分析一个基于数据结构设计的通讯录管理系统,其中实现了基本的通讯录功能,并且通过合适的数据结构和算法进行优化。
功能需求通讯录管理系统需要实现以下基本功能: - 添加联系人信息 - 查找联系人信息 - 删除联系人信息 - 更新联系人信息 - 显示所有联系人信息数据结构选择为了实现通讯录管理系统的功能,我们选择使用链表作为数据结构。
链表是一种简单而灵活的数据结构,可以动态地添加或删除节点,非常适合存储联系人信息这种动态的数据。
在这里,我们采用双向链表,使得查找、插入和删除操作更加高效。
算法设计添加联系人信息添加联系人信息时,我们需要遍历链表找到合适的位置插入新节点,这里的算法复杂度为O(n),其中n表示链表的长度。
查找联系人信息查找联系人信息时,我们需要遍历链表查找目标节点,这里的算法复杂度为O(n)。
删除联系人信息删除联系人信息时,我们同样需要遍历链表找到目标节点并删除,其算法复杂度为O(n)。
更新联系人信息更新联系人信息时,我们首先需要查找到目标节点,然后进行更新操作,其算法复杂度也为O(n)。
系统优化为了提高系统的性能,我们可以通过以下几种方式进行优化: - 使用哈希表索引联系人信息,减少查找联系人的时间复杂度; - 引入缓存机制,减少频繁的IO 操作。
总结通过本报告的介绍和分析,我们了解了一个基于数据结构设计的通讯录管理系统的实现原理和优化方法。
在实际应用中,针对具体需求和场景,我们可以进一步优化系统性能,提升用户体验。
通讯录管理系统作为一种简单而实用的应用程序,将在日常生活中发挥重要作用。
C++通讯录管理系统课程设计报告1. 引言本文档是关于C++通讯录管理系统课程设计的报告。
通讯录管理系统是一款方便用户管理联系人信息的应用程序。
本文将详细介绍设计理念、功能需求、系统设计及实现等方面的内容。
2. 功能需求为了满足用户对通讯录管理的需求,本系统应具备以下功能:2.1 添加联系人用户可以通过系统添加联系人信息,并包括联系人的姓名、电话号码、电子邮件地址等基本信息。
2.2 删除联系人用户可以选择删除通讯录中现有的联系人信息。
2.3 查询联系人用户可以根据联系人的姓名、电话号码等信息进行查询,以便于快速找到所需的联系人。
2.4 修改联系人信息用户可以对通讯录中现有联系人的信息进行修改,包括姓名、电话号码、电子邮件地址等。
2.5 显示所有联系人用户可以查看通讯录中所有联系人的详细信息。
3. 系统设计3.1 数据结构通讯录管理系统可以使用结构体来表示联系人的信息,每个联系人的信息包括姓名(name)、电话号码(phone)、电子邮件地址(email)等字段。
struct Contact {std::string name;std::string phone;std::string email;};3.2 类设计系统设计中包含以下类:3.2.1 ContactManagerContactManager是通讯录管理类,负责管理联系人信息的添加、删除、查询、修改和显示等操作。
成员函数:•void addContact(const Contact& contact): 添加联系人信息。
•void deleteContact(const std::string& name): 删除指定姓名的联系人信息。
•Contact findContact(const std::string& name): 根据指定姓名查询联系人信息。
•void modifyContact(const std::string& name, const Contact& contact): 修改指定姓名的联系人信息。
通讯录管理系统课程设计报告一、引言通讯录管理系统是一种用于存储和管理联系人信息的应用程序,它可以帮助用户方便地记录和查找各种联系人信息。
在本课程设计报告中,我们将讨论通讯录管理系统的设计和实现过程,以及系统的功能特点和操作流程。
二、需求分析通讯录管理系统需要具备以下基本功能: 1. 添加联系人信息:用户可以输入姓名、电话号码、电子邮件地址等信息来添加新的联系人。
2. 查找联系人信息:用户可以通过姓名或电话号码等关键词来查找已添加的联系人信息。
3. 修改联系人信息:用户可以对已有联系人信息进行修改和更新。
4. 删除联系人信息:用户可以选择删除不需要的联系人信息。
5. 显示所有联系人信息:系统可以按照一定的格式将所有联系人信息展示给用户。
三、系统设计1. 数据结构为了存储联系人信息,我们可以使用一个包含姓名、电话号码、电子邮件地址等字段的结构体来表示每个联系人。
可以使用链表或数组来组织所有联系人信息。
2. 模块设计通讯录管理系统可以划分为以下几个模块: - 添加联系人模块:实现添加新联系人信息的功能。
- 查找联系人模块:实现根据关键词查找联系人信息的功能。
- 修改联系人模块:实现对已有联系人信息进行修改和更新的功能。
- 删除联系人模块:实现删除不需要的联系人信息的功能。
- 显示联系人模块:实现将所有联系人信息按照一定格式展示给用户的功能。
3. 用户界面设计用户界面应该简洁明了,包括各个功能的按钮或选项,以及输入框和显示信息的区域。
用户应该能够方便地进行各种操作和查看联系人信息。
四、系统实现1. 数据存储可以使用文件来存储联系人信息,也可以使用数据库来进行数据持久化。
2. 界面实现可以使用图形界面或命令行界面来实现用户交互功能,不同的界面设计会影响用户体验。
3. 功能实现根据需求分析中的功能,实现各个模块的功能代码,确保系统可以正确地完成相关操作。
五、功能测试在系统实现完毕后,需要进行功能测试,确保系统的各个功能都能正常运行,并且符合需求。
《W i n d o w s应用开发》综合实验报告课题名称:通讯录管理系统——系统功能实现模块专业:软件技术班级:103361姓名:杨雪学号:02指导教师:李莹成绩:完成日期:2012 年 5 月16 日目录1系统分析 (3)1.1需求分析 (3)1.2储存过程分析 (3)2系统的实现 (5)2.1登陆界面的实现 (5)2.2主窗体的实现 (6)2.3新增联系人实现 (12)1系统分析1.1需求分析本系统将实现多用户对各自通讯录的管理功能,包括:添加联系人、修改联系人、删除联系人、查找联系人。
为了体现多用户的特性,还必须包含一个用户管理子系统,作用是对用户的信息进行管理。
具体功能模块如图1-1所示图1-1功能模块1.2储存过程分析查找联系人模块使用储存过程来搜索数据,查找联系人的储存过程如下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 @namereturnend2系统的实现2.1登陆界面的实现登录窗体如图2-1图2-1处理流程图如图2-2示2-2录窗体流程图实现代码如下private void btnOK_Click(object sender, EventArgs e){try{if (txtUserName.Text.Trim() == "" || txtPassword.Text.Trim() == ""){MessageBox.Show("用户名不能为空,登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}//验证用户SqlConnection conn = new SqlConnection("server=.;database=通讯录管理系统;uid=sa;pwd=521125;");StringBuilder sql = new StringBuilder();sql.AppendFormat("select count(*) from 用户where 用户名=杨雪and 密码='01'", txtUserName.Text.Trim(), txtPassword.Text.Trim());SqlCommand cmd = new SqlCommand(sql.ToString(), conn);conn.Open();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("发生错误!" + ee.Message, "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}}2.2主窗体的实现主窗体设计如图2-3图2-3主窗体处理流程图如图2-4示2.4窗体流程图实现代码如下public partial class frmMain : Form{private string strConn = "server=.;database=通讯录管理系统;uid=sa;pwd=521125;";public frmMain(){InitializeComponent();}private void treeView1_AfterSelect(object sender, TreeViewEventArgs e){LoadList();}//主窗体加载事件private void frmMain_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 组别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详细信息ToolStripMenuItem_Click(object sender, EventArgs e){lvContact.View=View.Details;}//详细信息在菜单栏上的事件private void详细信息ToolStripMenuItem1_Click(object sender, EventArgs e){lvContact.View=View.Details;}//添加方法在主窗体中的实现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){string id=lvContact.SelectedItems[0].Text.ToString();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="";foreach (ListViewItem lvi in lvContact.SelectedItems){strWhere+=lvi.Text.ToString();}try{SqlConnection conn=new SqlConnection(strConn);SqlCommand cmd=new SqlCommand();cmd.Connection=conn;mandText = "delete from 联系人where 姓名='" + 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();if (f.ShowDialog() == DialogResult.OK){LoadGroup();if (trvGroup.Nodes.Count > 0){trvGroup.SelectedNode = trvGroup.Nodes[0];LoadList();}else{lvContact.Clear();}}}}2.3新增联系人实现新增联系人设计如图2-5图2-5新增联系人窗体流程图如图2-6图2-6实现代码如下public partial class frmAdd : Form{private string strconn = "server=.;database=通讯录管理系统;pwd=521125";private string strUserName= "";private int groupCount = 0;private int contentCount = 0;private string txtFilePath = "";public frmAdd(){InitializeComponent();}private void textBox2_TextChanged(object sender, EventArgs e){}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 = "selete * 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("联系人的个数已经达到上限如需继续添加联系人,请联系管理员.", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);btnOK.Enabled = false;}conn.Close();}catch { }pic.Image =通讯录管理系统.Properties.Resources.main1;//加载组别LoadGroup();}protected void LoadGroup(){try{cmbGroup.Items.Clear();SqlConnection conn = new SqlConnection(strconn);SqlCommand cmd = new SqlCommand();cmd.Connection = conn;mandText = "selete disinct 组别from 联系人";conn.Open();SqlDataReader sdr = cmd.ExecuteReader();while (sdr.Read()){cmbGroup.Items.Add(sdr[0].ToString());}sdr.Close();conn.Close();if (groupCount > 0 && cmbGroup.Items.Count == groupCount){cmbGroup.DropDownStyle =ComboBoxStyle.DropDownList;}else{cmbGroup.DropDownStyle = ComboBoxStyle.DropDown;}}catch { }}private void pic_Click(object sender, EventArgs e){if (dlg.ShowDialog() == DialogResult.OK){pic.Image = Image.FromFile(dlg.FileName);txtFilePath = dlg.FileName;}}private void btnOK_Click(object sender, EventArgs e){#region获取信息//用户名strUserName = ((frmMain)(this.Owner)).tsslUserName.Text;//姓名string name;if (txtName.Text == ""){MessageBox.Show("联系人姓名不能为空", "添加失败", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}else{name = txtName.Text;}string group;if (cmbGroup.Text.Trim() == ""){group = "未分组";}else{group = cmbGroup.Text.Trim();}//电话string phone = txtPhone.Text.Trim();//工作单位string company = txtCompany.Text.Trim();//emailstring email = txtEmail.Text.Trim();//照片byte[] b = null;if (txtFilePath != ""){try{FileStream fs = new FileStream(txtFilePath, FileMode.Open, FileAccess.Read);int len = Convert.ToInt32(fs.Length);b = new byte[len];fs.Read(b, 0, len);fs.Close();}catch{b = null;}}#endregion获取信息#region添加数据try{SqlConnection conn = new SqlConnection(strconn);SqlCommand cmd_maxid = new SqlCommand();cmd_maxid.Connection = conn;//获取最大编号cmd_mandText = "selete isnull(max(编号),0)+1 from 联系人";conn.Open();int maxid;try{maxid = Convert.ToInt32(cmd_maxid.ExecuteScalar());}catch{maxid = 1;}//insertSqlCommand cmd_insert = new SqlCommand();cmd_insert.Connection = conn;cmd_mandText = "insert into联系人(编号,用户名,组别,姓名,工作单位,联系电话,电子邮箱,照片)values(@编号,@用户名,@组别,@姓名,@工作单位,@联系电话,@电子邮箱,@照片)";cmd_insert.Parameters.Add("@编号", SqlDbType.Int);cmd_insert.Parameters.Add("@用户名", SqlDbType.VarChar, 50);cmd_insert.Parameters.Add("@组别", SqlDbType.VarChar, 50);cmd_insert.Parameters.Add("@姓名", SqlDbType.VarChar, 50);cmd_insert.Parameters.Add("@工作单位", SqlDbType.VarChar, 500);cmd_insert.Parameters.Add("@联系电话", SqlDbType.VarChar, 200);cmd_insert.Parameters.Add("@电子邮箱", SqlDbType.VarChar, 200);cmd_insert.Parameters.Add("@照片", SqlDbType.Image);cmd_insert.Parameters["@编号"].Value = maxid;cmd_insert.Parameters["@用户名"].Value = strUserName;cmd_insert.Parameters["@组别"].Value = group;cmd_insert.Parameters["@姓名"].Value = name;cmd_insert.Parameters["@工作单位"].Value = company;cmd_insert.Parameters["@联系电话"].Value = phone;cmd_insert.Parameters["@电子邮箱"].Value = email;if (txtFilePath == ""){cmd_insert.Parameters["@照片"].Value = DBNull.Value;}else{cmd_insert.Parameters["@照片"].Value = b;}cmd_insert.ExecuteNonQuery();conn.Close();DialogResult = DialogResult.OK;}catch (Exception ee){MessageBox.Show(ee.Message);return;}#endregion添加数据}private void btnCancel_Click(object sender, EventArgs e){DialogResult = DialogResult.Cancel;}}结论课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,回顾起此次课程设计,至今我们仍感慨颇多,的确,从理论到实践,学到很多很多的东西。
通讯录系统程序设计报告专业班级:电创新1301班项目名称:通讯录系统程序设计(address book system)小组成员:陈灯念(组长)罗晶晶杨苒晨于桐桐盛超群指导老师:张丽静完成日期:2013年1月2日教师评价:目录一、系统简介1. 目标功能2. 实现功能3. 未实现功能二、成员分工及完成情况三、数据库1. 登录数据库2. 查询数据库3. 老师通讯信息数据库4. 同学信息数据库四、具体模块设计1. 登录部分2. 主界面3. 单击同学按钮4. 单击老师按钮5. 单击按姓名查找按钮6. 单击按学号查找按钮功能五、项目总结一系统简介①目标功能:1.电创新1301班的同学可以用个人姓名作为用户名,个人学号作为密码,进行登录界面的登录。
若姓名与密码匹配,则登录成功。
若输入的姓名不是电创新1301班同学的姓名或用户名与密码不匹配或密码错误,则弹出消息框显示“登录错误,请重试!”2.登录后显示主界面。
(1)双击“同学”按钮,弹出对话框,可依次查看电创新1301班同学通讯信息。
(2)单击“老师”按钮,弹出对话框,可依次查看电创新1301班老师通讯信息。
(3)单击“朋友”按钮,弹出对话框,可依次查看自己的朋友的通讯信息。
(4)单击“家人”按钮,弹出对话框,可依次查看自己的家人通讯信息。
(5)单击“按姓名查询”按钮,弹出一个对话框,键盘输入被查询人(须为电创新1301班同学)的姓名,再单击“咱们来查找吧”按钮,即弹出消息框显示被查询人的通讯信息。
(6)单击“按学号查询”按钮,弹出一个对话框,键盘输入被查询人(须为电创新1301班同学)的学号,再单击“咱们来查找吧”按钮,即弹出消息框显示被查询人的通讯信息。
3. 点击同学,老师,朋友或家人按钮后,弹出对话框,可以单击“添加”按钮或“删除”按钮添加或删除联系人或者单击“修改”按钮修改联系人的信息。
②实现功能:通过本小组成员的通力合作,在看书和上网查询资料后,目前本通讯录实现的功能有:1.电创新1301班的同学可以用个人姓名作为用户名,个人学号作为密码,进行登录界面的登录。
若姓名与密码匹配,则登录成功。
若输入的姓名不是电创新1301班同学的姓名或用户名与密码不匹配或密码错误,则弹出消息框显示“登录错误,请重试!”2. 登录后显示主界面。
(1)双击“同学”按钮,弹出对话框,可依次查看电创新1301班同学通讯信息。
(2)单击“老师”按钮,弹出对话框,可依次查看电创新1301班老师通讯信息。
(3)单击“按姓名查询”按钮,弹出一个对话框,键盘输入被查询人(须为电创新1301班同学)的姓名,再单击“咱们来查找吧”按钮,即弹出消息框显示被查询人的通讯信息。
(4)单击“按学号查询”按钮,弹出一个对话框,键盘输入被查询人(须为电创新1301班同学)的学号,再单击“咱们来查找吧”按钮,即弹出消息框显示被查询人的通讯信息。
3.单击同学,老师,朋友或家人按钮后,弹出对话框,可以单击“添加”按钮或“删除”按钮添加或删除联系人或者单击“修改”按钮修改联系人的信息。
③未实现功能:1. 单击“朋友”按钮,弹出对话框,可依次查看自己的朋友的通讯信息。
2. 单击“家人”按钮,弹出对话框,可依次查看自己的家人通讯信息。
我们猜想若要实现这两项功能,需要再对班级31位同学每个人都建立一个单独的数据库,信息量过大,而且还要对单独的数据库与学号进行连接,我们时间和能力有限。
二成员分工及完成情况陈灯念:登录功能实现、查询功能实现,已成功实现杨苒晨:老师通讯录、美工设计,已成功实现。
罗晶晶:同学通讯录,已成功实现。
于桐桐:PPT,前期资料查找,已成功实现。
盛超群:word,查询功能实现,已成功实现。
此外,大家都积极的上网查询了资料。
三数据库以下为数据库截图:1.登录数据库2.查询数据库3.老师通讯信息数据库4.同学信息数据库1..登录部分当输入的用户名为电创新1301班同学的姓名,密码为其匹配的学号时登录成功并进入主界面除此之外,其他输入均为错误输入,会弹出提示消息框此模块代码如下:下面解释一下其中用到的部分函数和方法:● UpdateData(TRUE):将表单中控件的输入内容更新到所关联的变量上,也就是让位两个编辑框控件的变量m_username 和m_userpwd 获得输入值。
● CUserRecordset m_user: 生成一个CUserRecordset 类的实例m_user,用以操作数据库中定义的表“puser”。
● if(m_user.IsOpen()); m_user.Close(); 判断puser 记录集是否打开,如果打开的话则关闭,以保证后边的操作能正确执行。
● m_user.m_strFilter.Format("username='%s'anduserpwd='%s'",m_Unam e,m_Upwd):定义查询语言,其对应规则为:“username= m_Uname and userpwd= m_Upwd”。
● m_user.Open(CRecordset::snapshot,NULL,CRecordset::none):执行查询● if(m_user.IsEOF()) {…} else {…}:判断是否已经查询到表的末尾,如果是的话表明没有符合的用户,用户名或密码错误,否则提示登录成功。
● m_user.Close():操作完后要及时关闭数据库,保证其他操作的正确执行。
● AfxMessageBox("密码错误,请重试!"):利用标准信息框,输出警告信息。
至此验证密码的代码编写完毕。
注意:要记得UpdateData(TRUE),否则可能得不到输入的数据;另外要急得及时关闭数据库,否则后续的打开操作可能无法执行。
编译选择菜单“Build—Rebuild All”即可编译程序。
我们看到在调试区出现了大堆错误,因为其中忘了两点重要的内容:(1)选择WorkSpace 的FileView 选项卡,在编辑区打开文件“Demo01files\Header Files\StaAfx.h”,在其中加入下面的内容:#include<afxdb.h>这是与CRecordSet 调用相关的头文件声明。
(2)打开文件“Demo01 files\Source Files\Demo01Dlg.cpp”,在其中加入下面的内容:#include "UserRecordset.h"这是与CUserRecordset 调用相关的头文件声明。
2.主界面设置背景图片:先在MFC中导入一张bmp图片,再去掉OnPaint()函数的Else块中原有语句,插入如下代重绘按钮,改变按钮及字体的颜色:先新建一个Cbutton的继承类CTestBtn,在新建类中加入一个函数void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct),其代码如下。
然后在对话框的头文件中包含CTestBtn类,即#include “TestBtn.h”。
最后设置需重绘按钮的属性为Ownerdraw,并给按钮连接一个关联CtestBtn类的变量。
改变静态框字体颜色:打开Class Wizard,选中WM_CTLCOLOR,代码如下:3.单击同学按钮可以进行翻页,依次查询给此界面的编辑框分别连接上变量:然后,添加一个对话框IDD_DIALOG1,给此界面的编辑框分别连接上变量:然后再在添加按钮下加入代码:修改按钮的做法同添加按钮一样,都是新建一个对话框之后进行操作。
新插入的对话框需要在头文件中定义,这样才可以使用。
定义如下:删除功能直接在删除按钮下添加如此代码:注:绿色代码部分为一开始尝试的程序。
功能实现效果不加,但也有一定参考意义。
4.单击老师按钮单击删除按钮输入姓名后单击OK此模块代码如下:5单击按姓名查找按钮输入电创新1301班同学名字后,单击“咱们查找吧“按钮后此模块代码如下:对此代码的解释如下M_pSet属于ADO的一个成员,是CRecordset中的指针,用于操作游标等例如:m_pSet->MoveNext()用来移动游标到下一条记录m_pSet->IsEOF()判断是否为记录尾m_pSet->MoveLast()移动游标到最后一条m_pSet->IsBOF()是否游标为记录首m_pSet->SetFieldNull(NULL);清空数据区6.单击按学号查找按钮功能类似五项目总结为了完成此次大作业,我们小组5个人通力合作,每个人都在积极的上网查找资料,看了很多以前别的人做的成品,知道了一个大致的方向,而后我们开始自己着手做。
学习MFC的时候还没有意识到原来他的功能可以如此强大,在数据库的建立过程中,也查找了很多资料,后来在界面优化的代码也是来源于网络。
这次大作业让我们亲身感受到了MFC的神奇。