客户回款数据库设计.docx

上传人:b****3 文档编号:5320409 上传时间:2022-12-15 格式:DOCX 页数:18 大小:188.58KB
下载 相关 举报
客户回款数据库设计.docx_第1页
第1页 / 共18页
客户回款数据库设计.docx_第2页
第2页 / 共18页
客户回款数据库设计.docx_第3页
第3页 / 共18页
客户回款数据库设计.docx_第4页
第4页 / 共18页
客户回款数据库设计.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

客户回款数据库设计.docx

《客户回款数据库设计.docx》由会员分享,可在线阅读,更多相关《客户回款数据库设计.docx(18页珍藏版)》请在冰豆网上搜索。

客户回款数据库设计.docx

客户回款数据库设计

客户回款数据库设计

1、需求分析

1.1可行性分析

本次设计主要是针对客户回款数据库设计,所谓回款就是指有些企业是以代销的形式销售商品,销售商品并不立即结款,而是打欠条,以后定期结款,业务员拿回来的钱就叫回款。

回款是做业务的核心工作之一,也是企业生存、发展的要素之一,只有不断提高回款质量,不断提高业绩,企业才能健康发展,自己才能快速进步。

但是这中间也存在一定的风险,有的客户“撒下香饵钓金螯”,一开始还比较守信用,回款比较及时,但骗取厂家信任之后,则加大进货量,此后便以种种伎俩拖欠货款,甚至逃掉。

企业如何化解客户的回款风险,是摆在当今所有企业面前的一个重要难题。

如果将中国企业每年的坏帐、呆帐汇总,那是一笔让人触目惊心的数目,由此可见回款工作在销售管理中的重要性越来越突出。

而对于企业而言,能否顺利及时收到回款,则决定着企业的利益能否真正地实现,甚至是决定着一个企业能否生存下去。

因此,在尽量短的时间内回收货款,就成为现代企业销售管理的一个基本原则。

然而,在现代经济转轨的社会背景下,企业的回款任务能否顺利完成,并不完全取决于企业自身,关键在于客户能否进行积极、有效的合作。

显然,对于大多数客户而言,资金并不总是处于充足的状态,更为重要的是,客户的道德信用日趋恶化,一些客户甚至以欠款、赖帐为荣。

在这种情况下,企业为了避免由于回款不力而陷入被动经营的怪圈,就必须加强回款工作的管理,改进回款工作的技巧。

同时随着科学技术的发展、社会的进步、计算机的迅速发展,企业回款管理的方法也日新月异,以前全部由人工管理的方法存在着很多的缺点:

管理效率低,劳动强度大,信息处理速度低而且准确率也不够令人满意。

为了提高企业客户回款管理效率,减轻劳动强度提高,提高信息处理速度和准确性以及为管理员提供更方便、更科学的服务项目。

我们选择了由计算机来设计一个客户回款管理系统的方案,让计算机对客户回款进行自动管理,企业相关管理员可以直接在计算机上实现对客户回款的信息管理,并能在一定程度上实现自动化。

本次设计针对这些复杂的关系和数据进行管理,有利于企业进行回款工作,有利于客户和企业之间的回款交流工作。

1.2系统主要功能

(1)基本信息的记录,包括客户信息,责任销售员信息,合同信息等。

(2)客户回款记录,这是本系统的核心任务。

(3)客户回款管理的信息查询、修改以及维护。

(4)相关报表的生成。

(5)利用账单对客户进行预警,账单中包含剩余金额和截止时间。

(6)相关责任销售员和其客户的管理。

(7)操作日志的管理。

(8)客户回款管理系统的使用帮助。

1.3系统实现方法

我们首先要制作一个客户回款信息的存储库,这个存储库储存客户信息、客户回款信息以及合同等,并将这个存储库作为回款系统的后台。

接下来再建立一个主表,也就是客户回款信息表,作为前台功能展开,在这边可以查询客户信息,客户回款信息等,同时也可以对这些信息进行更新,实时监控客户的回款情况,对于超过预警时间的客户予以警告。

最后新系统要在友好的界面下达到预期效果,并在良好的可靠性、高速的效率、易使用的目的下,在安全性和稳定性前提下,给用户们提供各种方便的操作。

在本次设计的客户回款系统中我们后台使用SQLServer2008,前台使用C#。

为了进一步规范应收帐款的日常管理和健全客户的信用管理体系,对应收帐款和已收到的回款账目在销售的事前、事中、事后进行有效控制,特制定本数据库方案和实施办法。

系统设计要求能够满足客户和企业的使用要求,客户每次登录的回款记录和查询,以及企业为方便掌握回款信息和便捷交易而设定的明确的系统。

1.4数据流图

图1回款管理系统数据流图

2、概念设计

概念模型是对信息世界建模,所以概念模型应该能够方便、准确地表达出上述信息世界中的常用概念。

概念模型的表示方法有很多种,在本设计中我们采用实体-联系方法,该方法用E-R图来描述现实世界的概念模型。

2.1分E-R图设计

图2客户实体的属性

图3销售员实体的属性

图4回款记录实体的属性

图5合同实体的属性

2.2合并分E-R图

图6回款管理系统基本E-R图

注:

此处省略了四个实体的属性,这四个实体的属性已经在分E-R图中给出。

3、逻辑设计

3.1E-R图向关系模型转换

将概念结构设计得到的E-R图转换成关系模式,转换一般遵循以下原则:

1)一个实体转换为一个关系模式。

实体的属性就是关系的属性,实体的码就是关系的码。

2)对于实体间的联系可根据联系的具体类型转换成不同的关系模式。

我们根据回款管理系统的E-R图转换得到以下关系模式:

客户(客户ID,姓名,性别,电话,住址);

销售员(职工ID,姓名,性别,电话,职称);

回款记录(回款ID,合同ID,回款金额,回款时间);

合同(合同ID,客户ID,职工ID,签订时间,应付金额,截止日期)。

3.2定义属性的类型、长度以及表的完整性约束

客户信息表CusInfo

字段名

类型

长度

是否主码

是否外码

其他

CusID

varchar

20

Yes

No

CusName

varchar

20

No

No

Notnull

CusSex

char

2

No

No

CusTel

varchar

15

No

No

Notnull

CusAdd

varchar

10

No

No

销售员信息表SaleInfo

字段名

类型

长度

是否主码

是否外码

其他

SaleID

varchar

20

Yes

No

SaleName

varchar

20

No

No

Notnull

SaleSex

char

2

No

No

SaleTel

varchar

15

No

No

Notnull

SaleJob

varchar

20

No

No

Notnull

回款记录表RMR

字段名

类型

长度

是否主码

是否外码

其他

RMRID

varchar

20

Yes

No

BarID

varchar

20

No

Yes

RMAmo

real

No

No

Notnull

RMDate

date

No

No

Notnull

合同信息表BarInfo

字段名

类型

长度

是否主码

是否外码

其他

BarID

varchar

20

Yes

No

CusID

varchar

20

No

Yes

SaleID

varchar

20

No

Yes

BarDate

date

No

No

Notnull

Loan

real

No

No

Notnull

Deadline

data

No

No

Notnull

3.3数据模型的优化

为了消除在系统实现中出现插入异常、删除异常、数据冗余以及数据修改复杂等问题,我们对上面建立的4个关系模式运用关系数据理论进行分析。

如果表中属性之间存在部分函数依赖、传递函数依赖,我们就需要对表进行分解,消除其中的部分函数依赖和传递函数依赖,使表中只存在完全函数依赖。

经过分析,发现上面建立的4个关系模式都已经达到最高的范式级别,都可以达到BC范式,因此不需要再对其进行分解。

3.4设计用户子模式

本次设计的回款管理系统需要对客户进行预警管理,因此我们在这边设计了一个账单视图。

视图中包括客户ID,合同ID,剩余金额,截止日期4项,客户每次回款完毕以后都会收到这张账单,对客户起到提示作用。

销售员也可以通过查询账单来查看客户的剩余金额和截止日期,以便通知客户及时回款。

账单(客户ID,合同ID,剩余金额,截止日期)。

4、物理设计

4.1物理设计内容

数据库的物理设计通常分为两步:

(1)确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构;

(2)对物理结构进行分析,评价的重点是时间和空间效率。

对于数据库查询事务,需要得到如下信息:

●查询的关系;

●查询条件所涉及的属性;

●连接条件所涉及的属性;

●查询的投影属性。

对于数据更新事务,需要得到如下信息:

●被更新的关系;

●每个关系上的更新操作条件所涉及的属性;

●修改操作要改变的属性值。

4.2确定存储结构

1.确定数据的存放位置

为了提高系统性能,应该根据应用情况将数据的易变部分与稳定部分、经常存取部分和存取频率较低部分分开存放。

2.确定系统配置

本次设计使用的SQLServer2008提供了一些系统配置变量、存储分配参数,供我们对数据库进行物理优化。

初始情况下,系统都为这些变量赋予了合理的默认值。

但是这些值不一定适合每一种应用环境,在进行物理设计时,需要重新对这些变量赋值,以改善系统的性能。

5、数据库的实施和维护

5.1数据载入

5.3数据库系统的特点和不足

本次设计的客户回款数据库,可以对客户的回款记录进行跟踪,做到实时监控和预警,并且实现简单。

对于现在很多企业面对的客户回款不及时的问题可以进行有效的解决,在本数据库中,使用了一个叫合同的表,其实这个就是现实中的欠条,用来记录客户和商家之间的赊销情况。

在我设计的这个数据库中,合同不仅记录了客户信息、销售员信息、赊销金额等一些常见的款项,我还加入了签订日期和截止日期,这个主要用来提醒客户及时回款。

但是本数据库也存在一些不足,首先就是功能过于简单,在现实中,销售员赊销商品给客户情况更加复杂,在合同中不止记录我设计的那几个款项,还包括赊销的物品,数量,物品单价等一些具体的款型,这个主要是防止客户赖账,不承认自己之前的欠款。

同时在本数据库中,查询操作比较繁琐,这个主要是为了是创建的表符合更高的范式要求。

同时对于查看的内容应该根据用户类型进行区分,例如客户只能查询自己的信息,回款记录等,而销售员可以进行增添用户信息,回款信息等,销售员的权限更高。

这些问题都可以在以后数据库设计中加入,使之更符合用户的需求。

6、小结

数据库是一门很重要的学科,在现在大数据量的情况下,如何将这些数据有效的存储起来是一件很不容易的事情。

本次课程设计我的题目是客户回款数据库设计,刚看到这个题目的时候,自己都不知道这个是做什么的。

经过查阅网上的资料知道了回款的意思,也知道了回款中经常出现的问题,这个主要是因为客户的信誉以及商场上的一些不成文规定。

在现在的大金额的交易中,客户一般不会把钱一次性付清,主要有一下几方面的原因:

客户可用资金不是很充裕;客户对买到的商品要先适用一段时间,如果有问题客户进行退货之类的操作;大环境都是如此。

因此在这之间常常出现讨债之类的问题,我们设计的客户回款数据库主要就是解决这个问题。

在前期的需求分析中,我主要考虑了客户与销售员之间的金钱关系,以及我设计的系统要实现的功能。

初步分析以后,发现我还有很多的东西没有考虑,包括具体的回款预警、回款记录之类的问题。

我又对自己没有考虑的东西进行了重新的分析,对系统需求深入考虑了一下。

然后也明确了自己设计这个数据库使用什么数据库管理系统以及前台界面的编程语言。

在概念设计的时候,我返工了一次,这个主要是一开始我的思维出现了一点偏差,后期发现这样设计的数据库会遇到很大的麻烦。

开始我将合同作为一个客户与销售员之间的联系,而合同内容为金额、签订时间、截止时间等,这样设计当然没有问题,在分E—R图设计的时候,我将每个实体都设计好了,在合并E—R图的时候就遇到了困难,因为客户还款是根据合同来还款的,也就是说虽然是客户在还钱,实际上发生联系的是合同和回款记录,但是合同是一个联系,我在这边思考了很久,考虑应该怎么解决,后来我觉的这个合同不能作为一个联系,而是一个实体,这个实体与客户实体、销售员实体三者之间存在关系,而在还款的时候,合同和回款记录发生联系,这样很好的解决了这个问题。

这边出现这个问题主要是受现实中的思维的影响,因为在现实中,人们都是知道客户还钱给销售员产生回款记录,但是就其本质,其实是客户根据合同来还款,比如说还款时间,还款金额等。

所以有些想当然的事情是不能直接下决定的,因为在设计中有些东西是与我们平常的想法是有些出入的,或者说我们平时只是考虑了表面,没有进行深入的研究。

在设计好概念模型以后,一切就变的比较顺利,将E—R图转换成关系模式时,只要注意关系模式中的完整性约束条件,因为有的信息是不能为空的,比如在合同中金额肯定是不能空的,因为客户与销售员之前就是因为金额发生关系,因此金额是不能为空的。

本次设计的回款数据库系统是通过一个Bill表来进行预警,这个Bill表是一个视图,可以查看用户剩余金额以及截止日期。

在前台设计中,没有设计的很复杂,主要是因为自己的水平有限,只设计了一个简单的界面,用来进行增、删、改、查等相关操作。

本次数据库课程设计,将我平时学到的数据库知识有了起来,以及平时自己一些不懂的地方重新学习了一下,整个过程也是蛮曲折的,遇到了很多的困难,通过自己的反复推敲,以及与同学的商量,最后圆满的解决了出现的问题。

虽说设计的数据库系统还有待完善,但是至少觉得自己可以进行一点实际操作,很多时候我们学到的知识很难运用到实际中,或者说实际与我们学的理论差距很大,我们应该要不断将自己学的东西用到实践中,并不断在实践中发现自己的不足,然后再通过理论学习去弥补自己的缺陷。

在理论到实际的过程中,总会遇到很多的错误和困难,只有不断去克服他们,自己才会有所突破。

程序源代码:

创建客户信息表

createtableCusInfo

(CusIDvarchar(20)primarykey,

CusNamevarchar(20)notnull,

CusSexchar

(2),

CusTelvarchar(15)notnull,

CusAddvarchar(10)

);

创建销售员信息表

createtableSaleInfo

(SaleIDvarchar(20)primarykey,

SaleNamevarchar(20)notnull,

SaleSexchar

(2),

SaleTelvarchar(15)notnull,

SaleJobvarchar(20)notnull

);

创建合同信息表

createtableBarInfo

(BarIDvarchar(20)primarykey,

CusIDvarchar(20),

SaleIDvarchar(20),

BarDatedatenotnull,

Loanrealnotnull,

Deadlinedatenotnull,

foreignkey(CusID)referencesCusInfo(CusID),

foreignkey(SaleID)referencesSaleInfo(SaleID)

);

创建回款记录表

createtableRMR

(RMRIDvarchar(20)primarykey,

BarIDvarchar(20),

RMAmorealnotnull,

RMDatedatenotnull,

foreignkey(BarID)referencesBarInfo(BarID)

);

创建账单视图

createviewBill(CusID,BarID,MonRemain,DeadLine)

as

selectCusID,BarInfo.BarID,AVG(Loan)-SUM(RMAmo),Deadline

fromBarInfo,RMR

whereBarInfo.BarID=RMR.BarID

groupbyBarInfo.BarID,CusID,DeadLine

withcheckoption;

管理系统界面:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Windows.Forms;

usingSystem.Data.SqlClient;

namespacehuikuan

{

publicpartialclassForm1:

Form

{

SqlDataAdapteradapter;

DataTableselectedTable0=newDataTable();

DataTableselectedTable1=newDataTable();

DataTableselectedTable2=newDataTable();

DataTableselectedTable3=newDataTable();

DataTableselectedTable4=newDataTable();

publicForm1()

{

InitializeComponent();

}

privatevoidForm1_Load(objectsender,EventArgse)

{

bindingNavigator1.BindingSource=bindingSource1;

dataGridView1.AllowUserToAddRows=false;

dataGridView1.AllowUserToDeleteRows=false;

}

privatevoidlistBox1_SelectedIndexChanged(objectsender,EventArgse)

{

intindex=listBox1.SelectedIndex;

switch(index)

{

case0:

{

comboBox1.Items.Clear();

selectedTable0.Clear();

stringqueryString="select*fromBarInfo";

adapter=newSqlDataAdapter(queryString,

Properties.Settings.Default.HuiKuanConnectionString);

string[]a={"BarID","CusID","SaleID","BarDate","Loan","Deadline"};

comboBox1.Items.AddRange(a);

SqlCommandBuilderbuilder=newSqlCommandBuilder(adapter);

adapter.InsertCommand=builder.GetInsertCommand();

adapter.DeleteCommand=builder.GetDeleteCommand();

adapter.UpdateCommand=builder.GetUpdateCommand();

adapter.Fill(selectedTable0);

bindingSource1.DataSource=selectedTable0;

dataGridView1.DataSource=bindingSource1;

break;

}

case1:

{

comboBox1.Items.Clear();

selectedTable1.Clear();

stringqueryString="select*fromCusInfo";

adapter=newSqlDataAdapter(queryString,

Properties.Settings.Default.HuiKuanConnectionString);

string[]a={"CusID","CusName","CusSex","CusTel","CusAdd"};

comboBox1.Items.AddRange(a);

SqlCommandBuilderbuilder=newSqlCommandBuilder(adapter);

adapter.InsertCommand=builder.GetInsertCommand();

adapter.DeleteCommand=builder.GetDeleteCommand();

adapter.UpdateCommand=builder.GetUpdateCommand();

adapter.Fill(selectedTable1);

bindingSource1.DataSource=selectedTable1;

dataGridView1.DataSource=bindingSource1;

break;

}

case2:

{

comboBox1.Items.Clear();

selectedTable2.Clear();

stringqueryString="select*fromRMR";

adapter=newSqlDataAdapter(queryString,

Properties.Settings.Default.HuiKuanConnectionString);

string[]a={"RMRID","BarID","RMAmo","RMDate"};

comboBox1.Items.AddRange(a);

SqlCommandBuilderbuilder=newSqlCommandBuilder(adapter);

adapter.InsertCommand=builder.GetInsertCommand();

adapter.DeleteCommand=builder.GetDeleteCommand();

adapter.UpdateCommand=builder.GetUpdateCommand();

adapter.Fill(selectedTable2);

bindingSource1.DataSource=selectedTable2;

dataGridView1.DataSource=bindingSource1;

break;

}

case3:

{

comboBox1.Items.Clear();

selectedTable3.Clear();

stringqueryString="select*fromSaleInfo";

adapter=newSqlDataAdapter(queryString,

Properties.Settings.Default.HuiKuanConnectionString);

string[]a={"Sa

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1