题目:安徽工业大学通讯录管理系统
学号: 1590.......
姓名:程学长
指导教师:陈业斌
完成日期:2018年6月7日
目录
一 引言
1.1 通讯录系统设计开发的目的和意义
1.2设计通讯录系统的任务及目标
1.3通讯录系统开发及运行的软硬件环境
二 通讯录系统的分析与设计
2.1 通讯录系统需求分析
2.1.1通讯录系统的目标任务
2.1.2 通讯录系统的数据流图
2.2 通讯录系统概念结构设计
2.3 通讯录系统逻辑结构设计
2.4 通讯录系统数据库创建
2.5 通讯录系统总体结构设计
三 通讯录系统的开发及实现
3.1 通讯录系统的登录模块
3.2 通讯录系统的主界面
3.2.1 管理员登录界面
3.2.2 普通用户登录界面
3.3通信录系统的插入界面
3.4 通讯录系统的修改界面
3.5 通讯录系统的分组管理
3.6 通讯录系统分组信息的插入和修改
四 C#Windows窗体使用的背景图片
五 总结
参考文献
附录 实验源码
一:引言
1.1安徽工业大学通讯录系统设计开发的目的和意义
方便各级校友和在校人员交流
适应快速发展的网络时代,大大方便了人们之间的交流
1.2设计通讯录系统的任务及目标
通讯录管理系统以方便人们的联系而创建的一个系统。在此系统中,为每个使用此系统的用户开发了用户名和密码,保证了用户的信息安全性。与此同时,此系统用于储存用户的基本信息和常用的联系方式,它方便了用户个人信息的储存和快速查阅的功能。
1.3通讯录系统开发及运行的软硬件环境
开发通讯录系统开发平台及运行环境如下:
系统开发平台:Microsoft Visual Studio 2012
系统开发语言:C#
数据库管理软件:SQL Server 2008
运行平台:Windows 10
二:通讯录系统的分析与设计
2.1 通讯录系统需求分析
2.1.1通讯录系统的目标任务
通讯录管理系统主要功能分为七个模块:用户登录、用户查询、添加记录、修改记录、删除记录、分组信息的查询以及分组信息的增删。
用户登录:实现不同用户登录通讯录。
显示全部:实现用户对所有存在于数据库中的数据的显示,方便用户了解数据存储的情况。
查找记录:实现用户在本软件数据库中查找自己需要的数据功能。
添加记录:实现用户添加一条完整的记录,包括姓名、生日、电话、邮箱。
修改记录:用户对数据库中已存在的记录进行修改,然后保存已经修改过的数据。
删除记录:用户对数据库中已经存在的记录进行行删除操作,然后保存修改过的数据。
分组信息查询:方便用户对通讯录的管理,针对通讯录中的人进行分组。
分组信息的增删:实现用户增加、删除、修改联系人分组。
2.1.2 通讯录系统的数据流图
2.2 通讯录系统概念结构设计
由需求分析的结果可知,本系统设计的实体包括:
(1)登录基本信息:用户名,密码。
(2)联系人基本信息:姓名,性别,出生日期,email,电话号码
(3)分组人基本信息:姓名,分组名称(院校),工作地点。
这些实体间的联系包括:
(1) 每位用户可以有多位联系人,多位联系人也可属于多个用户
(2) 每位联系人属于一个分组。
由上述分析可得到系统的E—R图:
2.3 通讯录系统逻辑结构设计
由系统E—R图转化而得到的关系模式如下:
(1)users(用户名,密码),其用户名为主键。
(2)联系人表(姓名,性别,出生日期,email,电话号码),其姓名为主键。
(3)分组信息(姓名,分组名称,工作地点),(姓名,分组名称)为主键。
数据库中用到的表:
表 2.1 users表
Table 2.1 users
属性名 |
字段类型 |
完整性约束 |
用户名 |
char |
Primary key |
密码 |
char |
Not Null |
表 2.2 联系人表
Table 2.2 Linkman
属性名 |
字段类型 |
完整性约束 |
姓名 |
char |
Primary key |
性别 |
char |
not null |
出生日期 |
datetime |
not null |
char |
not null |
|
电话号码 |
char |
not null |
表 2.3 分组信息表
Table 2.3 Group
属性名 |
字段类型 |
完整性约束 |
姓名 |
char |
Primary key |
分组名称 |
char |
Primary key |
工作地点 |
char |
Not null |
2.4 通讯录系统数据库创建
users表
联系人表
分组信息表
2.5通讯录系统总体结构设计
图 2.5 总体结构
Fig 2.5 Form
三 通讯录系统的开发及实现
3.1 通讯录系统的登录模块
打开此系统,我们先看到的是欢迎界面。从欢迎界面中,我们可以选择以管理员或是普通用户的身份进入通讯录系统。
若以管理员身份登录,进入login
若以普通用户的身份登录,进入login1
3.2 通讯录系统的主界面
3.2.1 管理员界面
在textbox中输入用户名和密码,点击登录按钮,与数据库的users表连接,验证输入的用户名和密码是否都正确。另外,当用户名和密码输入不正确或者为空时,都会弹出提示框来提示操作错误,重新输入。如果输入正确,则可以进入通讯录系统的主界面main。
若以普通用户的身份登录,验证方法同上,进入通讯录系统主界面main1.
3.3通信录系统的插入界面
进入插入界面后,按照顺序将要添加的联系人信息填写完整,如果信息输入不完整,拒绝插入,反之,可以完成插入,显示插入成功的提示。可以返回通讯录系统登录主界面刷新查看,添加完成。
3.4 通讯录系统的修改界面
进入修改界面,修改要修改的信息,要提示的是,在数据库中,姓名为主键,在此不做修改。修改完成后,点击确定,返回一个修改成功的提示。此时,回到通讯录系统的主界面刷新查询,可以看到修改完成。
3.5 通讯录系统的分组管理
把分组信息表中的信息读到分组管理界面的datagridview中。
选中某一行,点击删除。
若删除成功,点击刷新,可以看到:
3.6 通讯录系统分组信息的添加和修改
为了方便操作,让添加和修改使用同一个显示界面,在分组管理的主界面点击修改按钮时,弹出插入窗口,将此窗口的名字改为“修改”。
四 Windows窗体使用的背景图片
图片均来自网上下载,大家可以自己下载设置不同的背景
五.总结
(1)一开始做数据库课程设计时,我花了半天时间构思做什么以及如何设计,最后确定做个安徽工业大学通讯录管理系统,觉得这个挺有意思的。
(2)然后开始用C#设计,Windows 窗体部分比较简单,难的是代码如何写,经过我翻阅C#书以及从网上查阅资料,最终完成了代码部分。
(3)然后我开设计数据库,因为已经学过数据库了,所以这部分并不太难
(4)最后连接数据库,进行测试,测试阶段花的比设计时间还长,其中有一个错误令我印象深刻,
sql = "select 姓名,性别,出生日期,email,电话号码,分组名称,工作地点 from 联系人表,分组信息 where 分组名称 = '" + textBox1.Text.Trim() + "' and 联系人表.姓名=分组信息.姓名";
一开始如下,运行时,一直报错。最后发现了错,少了 联系人表.姓名
sql = "select 联系人表.姓名,性别,出生日期,email,电话号码,分组名称,工作地点 from 联系人表,分组信息 where 分组名称 = '" + textBox1.Text.Trim() + "' and 联系人表.姓名=分组信息.姓名";
(5)调试好所有的错误之后,我为了使界面美观,又从网上下载了Windows 窗体背景图片,并加入进去
(6)最后完成了实验报告
(7)这次的数据里课程设计,说心里话,我真的收获很多,首先,我对VS 2012 和C# 这门语更加熟悉了,其次,我对数据库也更加熟悉了
参考文献
[1] 王珊 萨师煊.数据库系统概论.第四版.北京.高等教育出版社.2006年
[2] 王超,潘杨.Visual C# 通用范例开发金典.北京.电子工业出版社.2008年
[3] 马骏.c#程序设计及应用教程.第二版.北京.人民邮电出版社.2009年
[4] 陈向群,陈鸣,戴葵等.高等院校计算机课程设计指导丛书.北京.机械工程出版社.2012年
附录.源代码
1.publicclass类源程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Threading.Tasks;
namespace Course_Design_of_Database
{
class publicclass
{
public static SqlConnection createconn()
{
string connStr = @"Data Source=DESKTOP-KD4V0Q1\SQLEXPRESS;Initial Catalog=DatabaseTongxunlu;Integrated Security=True";
SqlConnection conn = new SqlConnection(connStr);
return conn;
}
public static DataTable gettable(string sql)
{
SqlConnection conn = createconn();
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
public static bool zhixingSQl(string sql)
{
SqlConnection conn = createconn();
SqlCommand cmd = new SqlCommand(sql, conn);
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
if (cmd.ExecuteNonQuery()>0)
{
return true;
}
else
{
return false;
}
conn.Close();
}
public static bool checkUser(string userName, string passWord)
{
string sql = "select 密码 from users where 用户名= '" + userName + "'";
DataTable dt = gettable(sql);
if (passWord == dt.Rows[0]["密码"].ToString().Trim())
{
return true;
}
else
{
return false;
}
}
}
}
2. welcome界面源程序
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Course_Design_of_Database
{
public partial class welcome : Form
{
public welcome()
{
InitializeComponent();
}
private void Welcome_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
login lo = new login();
lo.Show();
}
private void button2_Click(object sender, EventArgs e)
{
login1 lo1 = new login1();
lo1.Show();
}
}
}
3. login 界面源程序
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Course_Design_of_Database
{
public partial class login : Form
{
public login()
{
InitializeComponent();
}
private void buttonok_Click(object sender, EventArgs e)
{
if (textBoxname.Text.Length != 0 && textBoxpwd.Text.Length != 0)
{
if (publicclass.checkUser(textBoxname.Text.Trim(), textBoxpwd.Text.Trim()))
{
main formMain = new main();
formMain.Show();
}
else
{
MessageBox.Show("用户名或密码不正确", "提示");
}
}
else
{
MessageBox.Show("用户名或¨密码不能¨为空", "提示");
}
}
private void buttoncancel_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void login_Load(object sender, EventArgs e)
{
}
}
}
4.login1 界面源程序
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Course_Design_of_Database
{
public partial class login1 : Form
{
public login1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (textBoxname.Text.Length != 0 && textBoxpwd.Text.Length != 0)
{
if (publicclass.checkUser(textBoxname.Text.Trim(), textBoxpwd.Text.Trim()))
{
main1 formMain = new main1();
formMain.Show();
}
else
{
MessageBox.Show("用户名或密码不正确", "提示");
}
}
else
{
MessageBox.Show("用户名或¨密码不能¨为空", "提示");
}
}
private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
5.main界面源程序
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Course_Design_of_Database
{
public partial class main : Form
{
public main()
{
InitializeComponent();
}
private void 插入ToolStripMenuItem_Click(object sender, EventArgs e)
{
insert forminsert = new insert();
forminsert.Show();
}
private void main_Load(object sender, EventArgs e)
{
DataTable dt = publicclass.gettable("select * from 联系人表");
dataGridView1.DataSource = dt;
}
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
{
string name;
int index = dataGridView1.CurrentRow.Index;
name = dataGridView1["姓名", index].Value.ToString().Trim();
string sql = "delete 联系人表 where 姓名='" + name + "'";
if (MessageBox.Show("是否要删除", "提示", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
{
if (publicclass.zhixingSQl(sql))
{
MessageBox.Show("删除成功|");
group formgroup1 = new group();
formgroup1.Show();
}
else
{
MessageBox.Show("删除失败");
}
}
}
private void 修改ToolStripMenuItem_Click(object sender, EventArgs e)
{
string name;
int index = dataGridView1.CurrentRow.Index;
name = dataGridView1["姓名", index].Value.ToString().Trim();
modify formmodify = new modify(name);
formmodify.Show();
}
private void 添加分组ToolStripMenuItem_Click(object sender, EventArgs e)
{
group formgroup = new group();
formgroup.Show();
}
private void 查询ToolStripMenuItem_Click(object sender, EventArgs e)
{
string sql;
if (textBoxname.Text.Length != 0)
{
sql = "select * from 联系人表 where 姓名= '" + textBoxname.Text.Trim() + "'";
}
else
{
sql = "select * from 联系人表";
}
DataTable dt = publicclass.gettable(sql);
dataGridView1.DataSource = dt;
}
private void button1_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
6.main1界面源程序
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
//using Excel = Microsoft.Office.Interop.Excel;
using System.Data.OleDb;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Course_Design_of_Database
{
public partial class main1 : Form
{
public main1()
{
InitializeComponent();
}
private void 查询ToolStripMenuItem_Click(object sender, EventArgs e)
{
string sql;
if (textBox1.Text.Length != 0)
{
sql = "select 联系人表.姓名,性别,出生日期,email,电话号码,分组名称,工作地点 from 联系人表,分组信息 where 分组名称 = '" + textBox1.Text.Trim() + "' and 联系人表.姓名=分组信息.姓名";
}
else
{
sql = "select 联系人表.姓名,性别,出生日期,email,电话号码,分组名称,工作地点 from 联系人表,分组信息 where 联系人表.姓名=分组信息.姓名";
}
DataTable dt = publicclass.gettable(sql);
dataGridView1.DataSource = dt;
}
private void button1_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
7.insert界面源程序
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Course_Design_of_Database
{
public partial class insert : Form
{
public insert()
{
InitializeComponent();
}
private void in_insert_Click(object sender, EventArgs e)
{
if (in_name.Text.Length != 0 && in_phone.Text.Length != 0 &&
in_email.Text.Length != 0 && in_datatime.Text.Length != 0 &&
comboBox1.SelectedItem != null)
{
string sql = "insert into 联系人表 (姓名,性别,出生日期,email,电话号码)values('" +
in_name.Text.Trim() + "','" + comboBox1.SelectedItem.ToString() + "','" + in_datatime.Text.Trim() +"','" + in_email.Text.Trim() + "','" + in_phone.Text.Trim() + "')";
if (publicclass.zhixingSQl(sql))
{
MessageBox.Show("插入成功");
this.Close();
}
else
{
MessageBox.Show("插入失败");
}
}
else
{
MessageBox.Show("请完整填写信息");
}
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void insert_Load(object sender, EventArgs e)
{
try
{
comboBox1.Items.Add("man");
comboBox1.Items.Add("woman");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
8.modify界面源程序
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Course_Design_of_Database
{
public partial class modify : Form
{
string _name;
public modify(string name)
{
InitializeComponent();
_name = name;
}
private void mo_modify_Click(object sender, EventArgs e)
{
if (mo_name.Text.Length != 0 && mo_phone.Text.Length != 0 &&
mo_email.Text.Length != 0 && mo_datetime.Text.Length != 0 &&
mo_sex.Text.Length != 0)
{
string sql = "update 联系人表 set 性别= '" + mo_sex.Text.Trim() + "',出生日期 = '" +
mo_datetime.Text.Trim() + "',email='" + mo_email.Text.Trim() + "' ,电话号码='" + mo_phone.Text.Trim() + "' where 姓名= '" + _name + "'";
if (publicclass.zhixingSQl(sql))
{
MessageBox.Show("修改成功");
this.Close();
}
else
{
MessageBox.Show("修改失败");
}
}
else
{
MessageBox.Show("请完整填写信息");
}
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void modify_Load(object sender, EventArgs e)
{
DataTable dt = publicclass.gettable("select * from 联系人表 where 姓名 = '" + _name + "'");
mo_name.Text = _name;
mo_sex.Text = dt.Rows[0][1].ToString().Trim();
mo_datetime.Text = dt.Rows[0][2].ToString().Trim();
mo_email.Text = dt.Rows[0][3].ToString().Trim();
mo_phone.Text = dt.Rows[0][4].ToString().Trim();
}
}
}
9.group界面源程序
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Course_Design_of_Database
{
public partial class group : Form
{
public group()
{
InitializeComponent();
}
private void group_Load(object sender, EventArgs e)
{
DataTable dt = publicclass.gettable("select * from 分组信息");
dataGridView1.DataSource = dt;
}
private void 添加ToolStripMenuItem_Click(object sender, EventArgs e)
{
group1 formgroup1 = new group1();
formgroup1.Show();
}
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
{
string name;
int index = dataGridView1.CurrentRow.Index;
name = dataGridView1["姓名", index].Value.ToString().Trim();
string sql = "delete 分组信息 where 姓名='" + name + "'";
if (MessageBox.Show("是否要删除", "提示", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
{
if (publicclass.zhixingSQl(sql))
{
MessageBox.Show("删除成功");
}
else
{
MessageBox.Show("删除失败");
}
}
}
private void 刷新ToolStripMenuItem_Click(object sender, EventArgs e)
{
group_Load(null, null);
}
private void 修改ToolStripMenuItem_Click_1(object sender, EventArgs e)
{
string gr_name;
int index = dataGridView1.CurrentRow.Index;
gr_name = dataGridView1["姓名", index].Value.ToString().Trim();
group1 modgr = new group1(gr_name);
modgr.Show();
}
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
10.group1界面源程序
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Course_Design_of_Database
{
public partial class group1 : Form
{
public group1()
{
InitializeComponent();
}
public group1(string gr_num)
{
InitializeComponent();
this.Text = "修改";
this.gr_name1.Text = gr_num;
this.gr_name1.Enabled = false;
this.button1.Text = "修改";
}
private void button1_Click(object sender, EventArgs e)
{
if (this.Text != "修改")
{
if (gr_name1.Text.Length != 0 && gr_name.Text.Length != 0 && gr_add.Text.Length != 0)
{
string sql = "insert into 分组信息(姓名,分组名称,工作地点) values('" +
gr_name1.Text.Trim() + "','" + gr_name.Text.Trim() + "','" + gr_add.Text.Trim() + "')";
if (publicclass.zhixingSQl(sql))
{
MessageBox.Show("插入成功");
this.Close();
}
else
{
MessageBox.Show("插入失败");
}
}
else
{
MessageBox.Show("请完整填写信息");
}
}
else
{
if (gr_name1.Text.Length != 0 && gr_name.Text.Length != 0 && gr_add.Text.Length != 0)
{
string sql = "update 分组信息 set 工作地点='" + gr_add.Text.Trim() + "',分组名称 = '" +
gr_name.Text.Trim() + "' where 姓名= '" + gr_name1.Text.Trim() + "'";
if (publicclass.zhixingSQl(sql))
{
MessageBox.Show("修改成功");
this.Close();
}
else
{
MessageBox.Show("修改失败");
}
}
else
{
MessageBox.Show("请完整填写信息");
}
}
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}
}