C# 数据库课程设计

                        数据库课程设计报告

 

 

 

 

 

 

 

题目:安徽工业大学通讯录管理系统

 

 

 

 

 

 

 

 

 

学号: 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 通讯录系统的数据流图


C# 数据库课程设计_第1张图片 

 

 

 

 

 

 

 


 C# 数据库课程设计_第2张图片

 

 

 

 

 

C# 数据库课程设计_第3张图片 


 

 

 

 

 

 


 

 

 

 

2.2 通讯录系统概念结构设计

由需求分析的结果可知,本系统设计的实体包括:

1)登录基本信息:用户名,密码。

2)联系人基本信息:姓名,性别,出生日期,email,电话号码

3)分组人基本信息:姓名,分组名称(院校),工作地点。

这些实体间的联系包括:

(1) 每位用户可以有多位联系人,多位联系人也可属于多个用户

(2) 每位联系人属于一个分组。

由上述分析可得到系统的E—R图:

C# 数据库课程设计_第4张图片

 

 

 

 

 

 

 

 

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

email

char

not null

电话号码

char

not null

2.3 分组信息表

Table 2.3 Group

属性名

字段类型

完整性约束

姓名

char

Primary key

分组名称

char

Primary key

工作地点

char

Not null

 

2.4 通讯录系统数据库创建

  users表

 C# 数据库课程设计_第5张图片

 

 

联系人表

 C# 数据库课程设计_第6张图片

 

 

分组信息表

C# 数据库课程设计_第7张图片

 

 

 

 

 

 

 

2.5通讯录系统总体结构设计

 C# 数据库课程设计_第8张图片

 

 

 

 

  

2.5 总体结构

Fig 2.5 Form

通讯录系统的开发及实现

3.1 通讯录系统的登录模块

打开此系统,我们先看到的是欢迎界面。从欢迎界面中,我们可以选择以管理员或是普通用户的身份进入通讯录系统。

C# 数据库课程设计_第9张图片

 

若以管理员身份登录,进入login

C# 数据库课程设计_第10张图片

 

 

 

若以普通用户的身份登录,进入login1

C# 数据库课程设计_第11张图片

 

3.2 通讯录系统的主界面

3.2.1 管理员界面

textbox中输入用户名和密码,点击登录按钮,与数据库的users表连接,验证输入的用户名和密码是否都正确。另外,当用户名和密码输入不正确或者为空时,都会弹出提示框来提示操作错误,重新输入。如果输入正确,则可以进入通讯录系统的主界面main。

 C# 数据库课程设计_第12张图片

 

若以普通用户的身份登录,验证方法同上,进入通讯录系统主界面main1.

 C# 数据库课程设计_第13张图片

 

 

3.3通信录系统的插入界面

 

进入插入界面后,按照顺序将要添加的联系人信息填写完整,如果信息输入不完整,拒绝插入,反之,可以完成插入,显示插入成功的提示。可以返回通讯录系统登录主界面刷新查看,添加完成。

C# 数据库课程设计_第14张图片

 

 

C# 数据库课程设计_第15张图片 

 

 

3.4 通讯录系统的修改界面

进入修改界面,修改要修改的信息,要提示的是,在数据库中,姓名为主键,在此不做修改。修改完成后,点击确定,返回一个修改成功的提示。此时,回到通讯录系统的主界面刷新查询,可以看到修改完成。

 C# 数据库课程设计_第16张图片

 C# 数据库课程设计_第17张图片

3.5 通讯录系统的分组管理

把分组信息表中的信息读到分组管理界面的datagridview中。

C# 数据库课程设计_第18张图片

 

选中某一行,点击删除。

 

 C# 数据库课程设计_第19张图片

若删除成功,点击刷新,可以看到:

 C# 数据库课程设计_第20张图片

 

 

 

3.6 通讯录系统分组信息的添加和修改

为了方便操作,让添加和修改使用同一个显示界面,在分组管理的主界面点击修改按钮时,弹出插入窗口,将此窗口的名字改为“修改”。

 

 C# 数据库课程设计_第21张图片

 

 

 

 

Windows窗体使用的背景图片

 图片均来自网上下载,大家可以自己下载设置不同的背景

 

 C# 数据库课程设计_第22张图片


C# 数据库课程设计_第23张图片 

 C# 数据库课程设计_第24张图片

 

五.总结

(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();

       } 

 }  

 }

你可能感兴趣的:(C#,数据库)