许昌职业技术学院
毕业设计
题 目:企业客户管理系统
姓 名: 王 如 意
班 级: 09 级 5 班
专 业: 软 件 技 术
指导教师: 王 希 军
完成时间: 2012. 5. 23
目录
内容摘要 1
前言 2
第一章 课题中涉及的关键技术 2
1.1 ASP.NET 的简介 2
1.2 Microsoft SQL Server 2005简介 4
1.2.1 ADO简介 4
1.2.2 ADO.NET 包含的对象 4
1.2.3 SQL简介 5
1.3 C#简介 6
1.4 B/S模式介绍 6
第二章 需求分析 7
2.1 系统需求分析 7
第三章 系统总体设计 7
3.1 系统的数据库设计 8
3.2 软件功能构架图 9
第四章 主要功能详细设计 10
4.1 系统用户信息的设计 10
4.2 客户管理的设计与实现 12
4.3 企业产品管理 14
4.4 产品销售管理 15
4.5 修改密码 17
第五章 程序的调式与维护 19
5.1 调试的目的和方法 19
5.2 程序的维护 19
第六章 结束语 19
致谢 20
参考文献 20
企业客户管理系统
王如意
内容摘要
随着信息技术的应用,特别是计算机应用技术越来越深入且广泛的应用,为客户资源管理现代化提供了重要手段。在瞬息万变的市场环境中,企业要立于不败之地,必须依托现代化的管理思想和手段,其中客户管理尤为重要。企业客户管理系统作为ERP软件中的CRM组件的一个功能模块,本系统实现了企业客户管理的信息化,可对企业所有客户的相关信息进行有效管理。本文详细阐述了使用C#及SQL Server开发该系统的设计、分析、实施的过程。该系统适合中小型企业对客户资源的有效管理,从而为企业带来长久的竞争优势。
关键词:企业客户管理;ASP.NET;Server server;C#
前言
随着Internet技术的蓬勃发展,全世界范围内,所有企业都在经历着一场变革。企业在扩大市场、提高效率和保持客户的原始商业驱动力不变的情况下,如何从浩如烟海的信息中,获取最有效的市场情况和客户信息,并及时作出反应,方能提高企业的竞争力。与此同时,客户的期望也在发生着变化,客户完全可以决定选择哪位供应商。随着网络、通讯技术的发展,客户选择可摆脱传统地域的。因此如何最大程度的留住客户,积极发展新客户,成为了企业竞争的一个重要方面。
企业不断创新的前提是依据市场的需求,而不能再是浮躁的包装概念。由于外部环境竞争逐步公平化,以及行业内的人员流动,使得更多的竞争要素同质化,企业要想建立和保持自己的竞争优势,就要通过建立自己的品牌战略,争取和保持更多的客户资源,谁拥有客户,谁就拥有市场,谁就把握主动。因此改善企业与客户之间关系成为重点,而企业客户管理系统就是基于此问题的解决。
该系统所面向的对象为企业的客户。整个系统从符合操作简便、界面友好、灵活、使用安全的要求出发,采用ASP.NET作为前台开发工具,SQL Server2005作为后台数据库平台,基于B/S的三层模式的客户关系管理系统。旨在实现利用数据库来存储、管理大量数据信息。设计并完成对其各种数据的分类、查询和统计,尽可能实现友好的操作界面。
第一章 课题中涉及的关键技术
1.1 ASP.NET 的简介
ASP即Active Server Pages的缩写,意为“活动服务器网页”。它是一种包含了使用VBScript或JavaScript脚本程序代码的网页。当浏览器浏览ASP网页时,Web服务器就会根据请求生成相应的HTML代码,然后再返回给浏览器。这样浏览器端看到的就是动态生成的网页。
如下图1.1所示为ASP的工作原理。用户给出已知的网页地址(URL),通过浏览器向远程服务器请求ASP页面。服务器接收请求并读取服务器上相应的ASP文件,并将该文件传递到服务器上的脚本引擎;脚本引擎解释ASP文件,并生成HTML页面,然后服务器将该HTML页面传回到用户的浏览器。浏览器解释并显示HTML页面,这个页面就是用户看到的网页。
因为脚本是在服务器端运行的,所以Web服务器完成所有的处理后,将标准的HTML页面送往浏览器。这意味着ASP只能在可以支持的服务器上运行。让脚本驻留在服务器端的好处是用户不可能看到原始的脚本代码,看到的仅仅是最终产生的HTML内容。
图1.1 ASP的工作原理
ASP.NET不仅仅是 Active Server Page (ASP) 的下一个版本,而且是一种建立在通用语言上的程序构架,能被用于一台Web服务器来建立强大的Web应用程序。ASP.NET提供许多比现在的Web开发模式强大的优势。其主要特点主要如下:
(1)执行效率大幅提高
(2)世界级的工具支持
(3)强大性和适应性
(4)简单性和易学性
(5)高效可管理性
1.2 Microsoft SQL Server 2005简介
1.2.1 ADO简介
ADO(ActiveX Data Objects)是一组用于和数据源进行交互的面向对象类库。它提供了平台互用性和可伸缩的数据访问。ADO.NET增强了对非连接编程模式的支持,并支持RICH XML。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO.NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。
ADO.NET是一组用于和数据源进行交互的面向对象类库。通常情况下,数据源是数据库,但它同样也能够是文本文件、Excel表格或者XML文件。
ADO.NET允许和不同类型的数据源以及数据库进行交互。然而并没有与此相关的一系列类来完成这样的工作。因为不同的数据源采用不同的协议,所以对于不同的数据源必须采用相应的协议。一些老式的数据源使用ODBC协议,许多新的数据源使用OleDb协议,并且现在还不断出现更多的数据源,这些数据源都可以通过.NET的ADO.NET类库来进行连接。
ADO.NET提供与数据源进行交互的相关的公共方法,但是对于不同的数据源采用一组不同的类库。这些类库称为Data Providers,并且通常是以与之交互的协议和数据源的类型来命名的。
1.2.2 ADO.NET 包含的对象
(1)SqlConnection 对象
与数据库交互,连接它需指明数据库服务器、数据库名字、用户名、密码,和连接数据库所需要的其它参数。Connection对象会被command对象使用,这样就能够知道是在哪个数据库上面执行命令。
(2)COMMAND对象
成功于数据建立连接后,就可以用COMMAND对像来执行查询,修改,插入,删除等命令
(3)sqlDataReader对象
data reader对象允许你获得从command对象的SELECT语句得到的结果。
(4)DataSet对象
DataSet对象是数据在内存中的表示形式。
(6)SqlDataAdapter对象
ADO.NET是与数据源交互的.NET技术。有许多的Data Providers,它将允许与不同的数据源交流――取决于它们所使用的协议或者数据库。然而无论使用什么样的Data Provider,你将使用相似的对象与数据源进行交互。SqlConnection对象管理与数据源的连接。SqlCommand对象允许你与数据源交流并发送命令给它。为了对进行快速的只“向前”地读取数据,使用SqlDataReader。如果想使用断开数据,使用DataSet并实现能进行读取或者写入数据源的SqlDataAdapter。
1.2.3 SQL简介
SQL(Structured Query Language,译为结构化查询语言)是它是关系型数据库的标准语言。利用它,用户可以用几乎同样的语句在不同的数据库系统上执行同样的操作。SQL语言的功能如下:
(1)数据定义 数据定义主要通过数据库定义语言DDL (Date Definition Language )来实现,利用它可以实现数据库的表、视图及索引的定义、修改和删除等操作。
(2)数据操作 数据操作主要通过数据操纵语言DML(Data Manipulation Language)来实现,实现对数据的查询、插入、更新和修改等操作。
(3)数据控制 数据控制是指对数据的安全性和完整性的控制,主要通过数据控制语言DCL(Data Contronl Language)来实现,实现对于用户对用户权限、数据完整性约束的定义。
SQL Server 2005是Microsoft 公司开发的大型关系数据库管理系统,具有强大的关系数据库创建、开发、设计和管理功能,它提供了对分布式事务处理的支持,并对开发工具具有良好的支持,为大型数据库项目提供了企业级解决方案。
1.3 C#简介
C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模版,不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。并且C#成为ECMA与ISO标准规范。C#看似基于C++写成,但又融入其它语言如Delphi、Java、VB等。
1.4 B/S模式介绍
随着Internet技术的发展,管理系统的开发正逐步采用一种全新的技术模式:B/S(Browser/Server)模式(见图1.2)。
B/S本质上也是一种C/S结构,它是传统的两层C/S结构在Web上的发展。相对于C/S结构而言,B/S结构是把原来在客户机一侧的应用程序模块与显示功能分开,将应用程序模块单独作为一层放在Web服务器上,客户端只需要安装浏览器就可以了,这样将系统的业务处理部分统一放在Web服务器上,客户端只起到与用户交互的作用。
图1.2 B/S(Browser/Server)模式
B/S结构的工作原理是:Web服务器接收浏览器的Web请求,并处理Web页请求,同时将数据请求通过数据库接口转换成数据库服务器能接受的形式(如SQL),之后送到数据库服务器,数据库服务器根据数据请求执行相应的数据库操作(如查询、修改、统计等),并将结果通过数据库接口的转换送回Web服务器,Web服务器将结果处理成Web浏览器能够接受的形式(HTML),送回发出请求的Web浏览器,由浏览器将其显示在客户端。
第二章 需求分析
2.1 系统需求分析
1.客户管理功能 系统有不同的功能模块,管理员登陆系统后台后就可以对客户的基本信息对客户信息的查询删除,修改,联系人信息的管理(对联系人进行添加,修改和删除操作 ),交往记录的管理(包括添加修改和删除操作)。
2.产品管理功能
3.销售管理功能
4.合同管理功能
5. 软硬件环境需求 系统应可运行于Windows平台(数据库服务器运行于Windows平台)。系统采用B/S架构,可通过浏览器访问,使用IE6.0或更高版本可顺利完成全部系统操作。系统数据库使用MS SQL Server 2005(或更高版本)。
6. 性能需求 为了保证系统运行的长久稳定,需要满足以下的性能需求:
(1)数据处理的准确性和及时性 本系统主要是对输入数据的处理,包括添加,修改和查询,因此系统处理的准确性和及时性是本系统的必要性能。
(2)可维护性和可扩展性 本系统的应用平台设计中选择B/S结构,并采用三层架构,将整个业务应用划分为:表现层(Web)、业务逻辑层(BLL)、数据访问层(DAL),使系统具有良好的可维护性和可扩展性。
(3)系统的标准性 系统在设计开发使用过程中都要涉及到很多计算机硬件和软件。
第三章 系统总体设计
3.1 系统的数据库设计
根据需求分析,本系统模块使用的数据库设计为6个表,分别介绍如下:
用户信息表记录了管理员用户的基本信息,表名为Users,主键为user_id
用户信息表结构如表3.1所示。
表3.1:用户信息表
中文字段 | 英文字段 | 数据类型 | 允许空 |
标识列 PK | User_id | int | 否 |
用户密码 | User_Password | nvarchar(50) | 否 |
用户名 | User_name | nvarchar(50) | 否 |
部门类别 | User_Power | int | 否 |
表3.2:客户信息表
中文字段 | 英文字段 | 数据类型 | 允许空 |
客户编号 | Custom_id | int | 否 |
客户名称 | Custom_name | nvarchar(20) | 是 |
负责人 | Custom_charge | nvarchar(20) | 是 |
简介 | Custom_introduce | nvarchar(200) | 是 |
客户级别 | Custom_level | int | 是 |
表3.3:销售统计表
中文字段 | 英文字段 | 数据类型 | 允许空 |
编号 | ID | int | 否 |
客户编号 | Custom_id | int | 是 |
产品编号 | Product_id | int | 是 |
销售数量 | Product_sale | int | 是 |
单价 | Product_price | decimal(19, 2) | 是 |
销售月份 | Product_date | datetime | 否 |
表3.4:产品管理表
中文字段 | 英文字段 | 数据类型 | 允许空 |
标识列 PK | Product_id | int | 否 |
产品名称 | Product_name | nvarchar(50) | 是 |
描述 | Product_describe | nvarchar(200) | 是 |
图3-1系统数据表
3.2 软件功能构架图
通过对软件详细功能的描述,我们对系统的认识又进了一步,为了对系统的功能有一个更加直观的把握,系统的软件结构图如下:
企业客户管理系统
客户销售统计
企业客户信息
系统用户信息
企业产品管理
产品销售管理
企业合同管理
修改密码
图3-2系统软件结构图
第四章 主要功能详细设计
通过对系统的需求进行分析,我们得到了系统的所有功能结构,并且归纳出了系统所涉及到的实体对象,并且在SQL Server数据库中完成了物理表的结构设计,下面就是使用一门程序设计工具来管理这些数据库信息,完成各种功能的实现。
4.1 系统用户信息的设计
为了系统的安全,当然只能运行管理员的身份才可以登陆系统进行各种信息的管理,如果非管理员,则只能进入相对应的模块进行查看、编辑,本模块的功能就是为了验证登陆者身份的,只有用户在登陆页中输入了正确的用户名和密码才可以登陆系统的操作主界面进行各种信息的管理。登陆模块的流程图见4-1所示。
图4-1登陆模块流程图
当用户登录时服务器会对其进行检测,如果用户名或密码错误或为空,页面上会有相应的提示。如果正确则会进入系统主界面。见图4-2。
图4-2登陆界面
具体实现如下:
protected void ImageBtn_login_Click(object sender, ImageClickEventArgs e)
{
YS.BLL.Users UserLogin = new YS.BLL.Users();
string pwdMd5 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Tbx_pwd.Text.Trim(), "md5");//加密转换
string strsql = " User_name='" + Tbx_name.Text.Trim() + "' and User_Password='" + pwdMd5 + "'";
//获取登陆用户ID
Session["Login_UserID"] = int.Parse(UserLogin.GetValue(" User_name='" + Tbx_name.Text.Trim() + "'", "User_id").ToString());
if (UserLogin.Exists(strsql) == true)
{
Session["User_Power"] = UserLogin.GetList(strsql).Tables[0].Rows[0]["User_Power"].ToString();//dr["User_Power"];
if (Session["User_Power"].ToString() == "0")
{
Response.Redirect("users.aspx");
}
else if (Session["User_Power"].ToString() == "1")
{
Response.Redirect("contract.aspx");
}
else if (Session["User_Power"].ToString() == "2")
{
Response.Redirect("contract_stat.aspx");//
}
else
{
Response.Redirect("customer.aspx");
}
}
else
{
Lbl_note.Text = "用户名或密码错误,请重新输入!";
}
}
4.2 客户管理的设计与实现
作为企业客户管理系统的一个重要功能模块无非是对各个客户的信息进行有效的管理,它是本系统的核心功能,其他的功能都是与客户对象离不开的。对客户信息的管理包括对客户信息的录入,查看,编辑和删除。客户管理界面如图4-3所示。
图4-3客户管理
实现代码如下:
//编辑:
public void DataGrid_edit(object sender, DataGridCommandEventArgs e)
{
if (Session["User_power"].ToString() == "0")
{
Dgd_customer.EditItemIndex = (int)e.Item.ItemIndex;
BindGrid();
}
}
//修改:
public void DataGrid_update(object sender, DataGridCommandEventArgs e)
{
try
{
string colvalue1 = ((TextBox)e.Item.Cells[1].Controls[0]).Text;
string colvalue2 = ((TextBox)e.Item.Cells[2].Controls[0]).Text;
string colvalue3 = ((TextBox)e.Item.Cells[3].Controls[0]).Text;
cusM.Custom_name = colvalue1;
cusM.Custom_charge = colvalue2;
cusM.Custom_level =int.Parse(colvalue3);
cusM.Custom_id = int.Parse(Dgd_customer.DataKeys[(int)e.Item.ItemIndex].ToString());
cus.Update(cusM);
Lbl_note.Text = "编辑成功";
Dgd_customer.EditItemIndex = -1;
}
catch
{
Lbl_note.Text = "编辑失败";
Lbl_note.Style["color"] = "red";
}
BindGrid();
}
//删除:
public void DataGrid_delete(object sender, DataGridCommandEventArgs e)
{
if (Session["User_Power"].ToString() == "0")
{
try
{
cus.Delete(int.Parse(Dgd_customer.DataKeys[(int)e.Item.ItemIndex].ToString()));
//cm.ExecuteNonQuery();
Lbl_note.Text = "删除成功";
}
catch (SqlException)
{
Lbl_note.Text = "删除失败";
Lbl_note.Style["color"] = "red";
}
//cm.Connection.Close();
BindGrid();
}
}
//增加:
protected void Lbtn_add_Click(object sender, System.EventArgs e)
{
try
{
if (Session["User_power"].ToString() == "0" || Session["User_power"].ToString() == "3")
Response.Redirect("addcustomer.aspx");
}
catch
{
Response.Write("您不是合法用户,请登入后再操作,返回");
Response.End();
}
}
4.3 企业产品管理
该模块主要管理企业产品的相关信息,记录产品的产品编号、产品名称以及产品的描述等信息,主要功能包含对产品的增加、删除和修改,从而实现对产品的及时更新与存储功能。产品管理界面如图4-4所示。
图4-4产品管理界面
关键代码:
protected void Btn_add_Click(object sender, System.EventArgs e)
{
try
{
proM.Product_name = Tbx_productname.Text;
proM.Product_describe = Tbx_introduce.Text;
pro.Add(proM);
Response.Redirect("product.aspx");
}
catch (SqlException)
{
Lbl_note.Text = "添加失败";
Lbl_note.Style["color"] = "red";
}
}
4.4 产品销售管理
产品销售管理模块主要是对客户销售的情况进行统计,主要记录着客户的名称、产品编号、产品名称、销售数量、单价以及销售日期等信息。功能主要是对客户销售情况的修改、删除、统计和添加新客户销售情况等。销售管理界面如图4-5所示。
图4-5产品销售界面
关键代码如下:
public void DataGrid_edit(object sender, DataGridCommandEventArgs e)
{
Dgd_sale.EditItemIndex = (int)e.Item.ItemIndex;
BindGrid();
}
public void DataGrid_update(object sender, DataGridCommandEventArgs e)
{
try
{
string colvalue1 = ((TextBox)e.Item.Cells[1].Controls[0]).Text;
string colvalue2 = ((TextBox)e.Item.Cells[3].Controls[0]).Text;
string colvalue3 = ((TextBox)e.Item.Cells[5].Controls[0]).Text;
string colvalue4 = ((TextBox)e.Item.Cells[6].Controls[0]).Text;
string colvalue5 = ((TextBox)e.Item.Cells[7].Controls[0]).Text;
int csid = int.Parse(Dgd_sale.DataKeys[(int)e.Item.ItemIndex].ToString());
if (cus_update.Exists("Custom_id='" + colvalue1.ToString() + "'") == true && pro_update.Exists("Product_id='" + colvalue2.ToString() + "'")==true)
{
cussaleM.Custom_id = int.Parse(colvalue1.ToString());
cussaleM.Product_id = int.Parse(colvalue2.ToString());
cussaleM.Product_sale = int.Parse(colvalue3.ToString());
cussaleM.Product_price =decimal.Parse(colvalue4.ToString());
cussaleM.Product_date =DateTime.Parse(colvalue5.ToString());
cussaleM.ID = csid;
cussale.Update(cussaleM);
Lbl_note.Text = "编辑成功";
Lbl_note.Style["color"] = "red";
}
else
{
Lbl_note.Text = "编辑失败,更新的用户编号或产品编号不存在!";
Lbl_note.Style["color"] = "red";
}
Dgd_sale.EditItemIndex = -1;
}
catch
{
Lbl_note.Text = "编辑失败";
Lbl_note.Style["color"] = "red";
}
BindGrid();
}
public void DataGrid_delete(object sender, DataGridCommandEventArgs e)
{
try
{
cussale.Delete(int.Parse(Dgd_sale.DataKeys[(int)e.Item.ItemIndex].ToString()));
Lbl_note.Text = "删除成功";
}
catch
{
Lbl_note.Text = "删除失败";
Lbl_note.Style["color"] = "red";
}
BindGrid();
}
4.5 修改密码
只有以系统管理员的身份才能进入该模块进行用户密码的修改,如图4-6。
图4-6修改密码界面
具体代码:
protected void Btn_ok_Click(object sender, EventArgs e)
{
YS.BLL.Users updateUserPwd = new YS.BLL.Users();
YS.Model.Users updateUserM = new YS.Model.Users();
string pwdMd5 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Tbx_newpwd.Text.Trim(), "md5");//加密转换
int updateUPower = int.Parse(Session["User_Power"].ToString());
int updateUID = int.Parse(Session["Login_UserID"].ToString());
try
{
updateUserM.User_id = updateUID;
updateUserM.User_name = Tbx_name.Text.Trim();
updateUserM.User_Password = pwdMd5;
updateUserM.User_Power = updateUPower;
updateUserPwd.Update(updateUserM);
Lbl_note.Text = "修改成功,请返回!";
}
catch (SqlException)
{
Lbl_note.Text = "修改有误!";
}
}
第五章 程序的调式与维护
为了使项目功能得到更好的完善,及时发现项目中所隐藏的问题。并不断进行项目改进,最终将完美的项目交给客户验收,加强对程序调试工作的组织和维护管理就显得尤为重要。
5.1 调试的目的和方法
俗话说“三分编程七分调试” ,调试的目的是为了发现程序中的错误,所以程序的调试是十分重要的。
程序的调试是件非常复杂的工作,要求程序员概念明确、逻辑清晰、性格沉稳,同时调试的技巧也是至关重要。程序的调试方法很多,主要有“跳到当前光标处”即“Ctrl+F10”、“条件中断” 、“利用可视化调试窗体” “设置跟踪点”等。不管哪种方法只要掌握其技巧灵活运用对于程序中的错误还是不难发现的。
5.2 程序的维护
程序的维护就是在软件已经交付使用之后,为了改正错误或者满足新的需求而修改软件的过程。一般它有几种性质的维护:
A.改正性维护、
B.适应性维护
C.完善性维护
D预防性维护
针对于维护过程,只要根据软件的实际需求,以及软件设计原则,检查可供选择的设计方案,寻找一种最理想的维护方法去修改程序之中的错误、故障,从而去及时的纠正修改使软件功能更加完美。
第六章 结束语
客户关系管理是信息技术与传统的营销、销售和服务管理想整合的产物,是一种旨在改善企业与客户之间关系的新型管理机制,其核心思想是“以客户为中心”,通过完善的客户服务和深入的客户分析来满足客户的需求,保证实现客户的终生价值,为企业创造最大利润。
在系统的开发过程中,我对系统开发与实际应用有了更深了理解和认识,为我以后的学习和工作打下了坚实的理论与实际操作相结合的基础。同时,在开发过程中,我对ADO.NET、SQL数据库、C#以及word的使用等相关技术知识也有了更多的认识。由于开发设计能力有限,开发经验不足,系统仍存在很多不足,与实际应用中还有很大差距。
致谢
本论文最终得以顺利完成,非常感谢我的指导教师以及张小燕同学。从论文选题直到论文的最终完成,他们都给予我尽心尽力的指导。王老师严谨的治学态度深深的影响着我,对我今后的学习、工作、生活必将产生影响。借此机会,特向表示最诚挚的感谢。
感谢我们学院的所有领导和老师。他们严谨的学风、渊博的知识、诲人不倦的品格一直感染和激励着我不断上进。
在本论文的写作中,我也参照了大量的著作和文章。感谢我的家人、同学、朋友对我的大力支持,他们的无私奉献、关爱和支持使我能够继续去追求自己的人生理想和目标。感谢所有关心、帮助和支持我的人。
参考文献
[1]王淑敏 《ASP.NET动态网站设计》北京:清华大学出版社 2010年7月出版
[2]王恩波 《数据库实用教程-SQLServer2005 》高等教育出版社 2007.1
[3]刘瑞新 《ASP动态网站开发指导及实例》北京:机械工业出版社 2005年3月
[4]钱哨等编著 《C# WinForm实践开发教程》北京:中国水利水电出版社2008.6