1、编号:大学本科毕业论文销售管理与智能分析系统毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作 者 签 名: 日 期: 指导教师签名: 日期: 使用授权说明本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本
2、;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名: 日 期: 学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。作者签名: 日期: 年 月 日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的
3、规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。涉密论文按学校规定处理。作者签名:日期: 年 月 日导师签名: 日期: 年 月 日销售管理与分析系统摘 要:本文销售管理与分析系统,研究了销售的统计和智能分析,设计并开发了一套管理系统。该系统的优势在于:打破常规表格浏览数据方式,采用新的直方图的方式,将数据以直方图的形式显示出来,能帮助管理者更直观,更方便的观察销售数据的变化;能根据已有的销售记录预测未来一段时间内的销售情况。关键词
4、:销售数据管理;仓库管理;数据统计;数据预测1 引言销售数据管理系统随着信息化时代的到来和企业不断发展的需要,在国内外都有很大的市场和研究空间。现有的销售数据管理系统主要是对于大型数据仓库和中小型数据仓库的研究。有关大型数据仓库的管理系统大多为企业内部自己开发,其针对性比较强,功能也比较完善,但是他的数据模型也很难运用到其他行业数据仓库的管理,其通用性很差,并且开发成本也比较昂贵。对于中小型数据仓库的管理系统,市场上有很多。他们的大部分功能都相差不远。这些管理系统只具备常规的数据管理,维护功能。对于更有价值的数据统计,数据预测功能,这些系统通常是不具备的。即使有少数的系统可能做过这些方面的研究
5、,但是其数据显示模式也是常规的表格形式。这种表格数据让企业决策者很难从中找到潜在的市场价值。相对于中小型企业来说,数据统计和数据预测功能,直观的数据显示形式,常常都是很受欢迎的。而具有这些功能的比较完善的系统市场上少之又少。这些企业为了生存不会开发针对其自身行业领域的专门系统。而为了在行业内竞争中获利,这些中小型企业非常需要廉价的功能完善的系统。显然这些与市场上的产品空白形成了矛盾。针对国内外研究现状的分析,对于中小型销售数据仓库管理的研究,本系统提出了新的开发模型。2 系统需求分析 需求分析在系统中占有重要地位。需求分析就是通过与用户的广泛交流,得到未来系统必须具备的功能,即了解未来系统必须
6、做什么,定义系统功能和用户界面,使客户了解系统,开发人员了解系统需求,同时作为制定项目计划的基础。所以说只有好的系统分析才能做出一个好的系统。2.1业务需求分析基本的需求主要包括:对数据基本信息的管理,对销售明细的查询,统计,基本业务报表的输出和打印,数据维护,对未来销售状况的预测,等。主要联系是:管理员人事信息员工工资商品信息销售记录数据维护报表打印数据查询信息管理智能预测图2-1 系统需求联系图2.2功能需求分析根据以上业务需求分析,在加上相关的系统用户注册,密码找回,帮助系统,可以总结出功能需求。如下图所示:销售管理系统登录模块基本信息管理信息查询数据统计报表打印智能分析帮助注册密码找回
7、人事信息员工工资商品信息销售记录商品信息销售情况员工名单商品订单销售记录图2-2 系统模块联系图2.3系统性能分析1.系统必须稳定,具有较高的可靠性和容错性 整个系统必须具备很高的安全性,达到可靠稳定,不易出错,容易修复,并且不能影响正常使用。2.系统软件功能必须完善,便于管理和维护整套销售管理系统必须能满足用户的需求,便于操作,界面简洁,且易于维护。3.系统需预留与其他系统的接口为了适应业务增长的需求,系统需要考虑以后功能的扩充,以及与其他系统的连接等问题。3 数据库设计数据库是存放数据及相关信息的仓库,是事务处理,信息管理等应用系统的基础。数据库设计的意义关系到系统开发的成败。本系统采用关
8、系模型建立数据库。关系模型以二维表格的形势组织数据库中的数据。3.1数据采集系统的原始数据主要来源于网络上的中小型企业。这些数据只是企业内部数据的一部分。由于论文的目的主要是提供给开发者一个可以借鉴的模型,并与传统的模型形成对比,一发现其优点所在。对于系统的研究开发这些数据已经足够了。3.2 E-R数据图人事信息和员工工资的E-R模型:员工员工号姓名出生日期学历职位联系方式地址身份证号工资总额奖金基本工资属于图3-1 人事信息和员工工资的E-R图商品信息和销售记录的E-R模型:商品类别数量进入价格商品名称商品代码库存量卖出价格销售日期销售年月销售记录号商品销售记录销售图3-2 商品信息和销售记
9、录的E-R图管理员信息包括:员工号,密码,权限,密保问题,密保答案。3.3数据表划分及逻辑结构根据E-R模型,可以对数据表划分及确定逻辑结构。人事信息表(Workers):列名数据类型主键允许空员工号varchar(30)是否姓名varchar(30)否否性别varchar(50)否否出生日期datetime否否身份证号varchar(30)否否地址varchar(30)否否联系方式varchar(30)否否职位varchar(30)否否学历varchar(30)否否员工工资表(Salary):列名数据类型主键允许空员工号varchar(30)是否姓名varchar(30)否否身份证号varc
10、har(30)否否工资float否否奖金float否否总额float否否商品信息表(Products):列名数据类型主键允许空商品代码varchar(30)是否商品名称varchar(30)否否商品类别varchar(30)否否进入价格float否否卖出价格float否否库存量float否否销售记录表(ProductDetails):列名数据类型主键允许空销售记录号bigint是否商品代码varchar(30)否否商品名称varchar(30)否否商品类别varchar(30)否否销售数量float否否销售年月datetime否否管理登录表(Users):列名数据类型主键允许空员工号varch
11、ar(30)是否密码varchar(30)否否权限varchar(30)否否密保问题varchar(30)否否密保答案varchar(30)否否4 总体设计总体设计主要解决在系统设计中,所涉及到的前台数据流程控制,后台数据库,视图的创建,以及Matlab建模程序设计。4.1总体分析前面已经分析过功能需求,在其中的数据统计,报表打印等模块要用到大量的视图。接着上一章的数据库创建后,接下来主要说明系统中所用到的视图的创建,智能分析模块的理论基础,以及相关的matlab程序设计。4.2前台数据流程统计模块:包含,商品信息统计,销售记录统计。由于统计模块的显示模式有两种(常规表格,图形显示),所以为了
12、减少编程负担,精简程序,使商品信息统计和销售记录统计都采用一个处理模型。针对常规表格模式,采取调用数据库命令的形式;对于图形显示模型,主要是将统计条件存储到视图中,然后打开图形绘制窗体,读取视图中的数据并以图形的形式显示出来。智能分析模块:包括,商品盈亏分析,商品销售预测,总盈亏分析。商品盈亏分析和总盈亏分析的数据流程主要是,视图统计,然后计算,最后显示结果。商品销售预测的数据流程比较复杂,在预测数据时需要把将要预测的商品信息存储到视图中,然后由程序读取,传递给已经编制好的matlab程序生成的组件,有这些组件计算要预测的信息。4.3后台数据库和视图支持下面是各个模块中所用到的数据视图,辅助视
13、图,及各视图的创建代码:/生成商品订单数据源的辅助视图create view ProductDD2 as select 商品代码,max(销售年月) as 销售年月 from ProductDD1 group by 商品代码 go/生成商品订单数据源的辅助视图create view ProductDD3 as select a.商品代码,a.商品名称,a.销售总量,b.销售年月 from ProductDD1 a,ProductDD2 b where a.商品代码 = b.商品代码 and a.销售年月 = b.销售年月 go/生成商品订单数据源create view ProductDD as
14、 select a.商品代码,a.商品名称,a.商品类别,a.库存量,b.销售总量 as 总销售量,b.销售总量-a.库存量 as 订购量,b.销售年月 from Products a,ProductDD3 b where a.商品代码 = b.商品代码 go智能预测模块:/智能预测所用视图/用于辅助计算-求总销售额create view ZNFXZ as select 商品名称,sum(销售额)as 总销售额from ProductDetails group by 商品名称 go/用于辅助计算-求净利润create view ZNFXZ1 as select a.商品名称,a.总销售额 *
15、(b.卖出价格 - b.进入价格)/b.卖出价格 as 净利润 from ZNFXZ a,Products bwhere a.商品名称 = b.商品名称 go-验证是否可预测用的辅助模块视图create view viewZN as select 商品代码,商品名称,销售年月,sum(销售额) as 月销售额 from ProductDetails group by 商品代码,商品名称,销售年月 go/验证是否可预测用的模块视图/如果记录条数小于8,则不能预测销售数据create view viewZNJL as select 商品代码,商品名称,count(*) as 记录条数 from v
16、iewZN group by 商品代码,商品名称 go/分析模块用的视图alter view viewZNFX as select 商品名称,(Datediff(month,cast(1996-1-1 as datetime),cast(销售年月 as datetime) as 月数,sum(销售额) as 月销售额,销售年月from ProductDetails where 商品名称 = 牛奶 group by 商品名称,销售年月 go4.4 Matlab程序设计在智能分析的数据预测功能中,要使用到最小二乘法。在已有销售记录的基础上使用最小二乘法可以预定制定时间的销售额。下面详细说明最小二乘
17、法拟合的matlab实现。最小二乘法拟合:在这里系统选用最小二乘法拟合多项式函数,次数去2。下面是系统中用到的matlab程序:function result = tnh(A,B,X) K = polyfit(A,B,2); result = polyval(K,X);end在程序中A为某个商品的最近8个销售记录时间距离1996-01-01的月数;B为对应A中每个月的销售额;X为要预测的日期距离1996-01-01的月数。以上模型为最小二乘法,针对不同的企业和销售模式其数据预测可能需要不同的模型,本系统是调用matlab生成的组件,传递给模型数据,然后得出结果。为了给系统提供更好的适应性,如果
18、需要不同的预测模型,可以直接建模后用matlab程序生成组件,更换掉原来的组件即可运行。5 详细设计详细设计将描述系统中各个模块的操作流程,界面设计,以及实现程序代码。5.1 登录模块登录模块通过用户名和密码检查用户是否合法,同时使用验证信息防止恶意登录。下面是登录窗体(Logn)的显示界面:图5-1 登录窗体界面图其中员工号和密码是用户在注册中填写的信息,验证信息为随即生成的两个1-9的整数组成的运算式,只有用户输入正确的员工号,密码,并且在验证框中输入正确的结果后方能进入系统。5.2 注册模块在登录窗体(Logn)中点击注册用户就可以启动注册用户窗体。下面描述用户注册流程:输入信息数据合法
19、?更新Users注册成功关闭注册,显示登录是否已注册?是否为公司员工?二次密码是否一致?重新输入否是否否是是是否图5-2 用户注册模块数据流程图 图5-3 用户注册窗体界面图5.3 密码找回模块在登录窗体(Logn)中点击密码找回就可以启动密码找回窗体。下面描述密码找回流程:输入员工号是否有此人显示密保问题输入答案答案是否正确输入密码两次密码一致保存密码否是是是否否重新输入图5-4 密码找回模块数据流程图 图5-5密码找回窗体界面图5.4 主菜单模块主菜单模块主要是为其他各个功能模块提供操作界面,其界面如下:图5-6 主菜单窗体界面图主菜单模块代码比较简单,此处不再详述。5.5 基本信息管理模
20、块该模块包括人事信息管理,员工工资管理,商品信息管理,其代码大致相同,此处只对人事信息管理列出代码:人事信息管理界面:图5-7 人事信息管理窗体界面图人事信息管理主要代码: /flag变量用于控制新建按钮是否可用 /为防止出现异常 /每次插入新的行后都要保存一次后才能再次插入 int flag = 1; private void workersBindingNavigatorSaveItem_Click(object sender, EventArgs e) try this.Validate();this.workersBindingSource.EndEdit();this.tableAd
21、apterManager.UpdateAll(this.ePDateDataSet); flag = 1; MessageBox.Show(保存成功!); catch (Exception err) MessageBox.Show(err.Message);/-保存- Private void workersBindingNavigatorSaveItem_Click_1(object sender, EventArgs e) if (YzNotNull()trythis.Validate(); this.workersBindingSource.EndEdit(); this.tableAd
22、apterManager.UpdateAll(this.ePDateDataSet); flag = 1; MessageBox.Show(保存成功!); catch (Exception err) MessageBox.Show(err.Message); else MessageBox.Show(有数据项为空,请填写完整的数据后再保存!);return; private bool YzNotNull() if(出生日期DateTimePicker.Value=null|地址TextBox.Text=|联系方式TextBox.Text=|身份证号TextBox.Text=|姓名TextBox
23、.Text=|性别TextBox.Text=|学历TextBox.Text=|员工号TextBox.Text=|职位TextBox.Text=) return false; elsereturn true; /-添加新行- private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e) if (flag = 0) return; elseflag = 0; bindingNavigatorAddNewItem.Enabled = false;5.6 查询模块该模块包括人事信息查询,员工工资查询,商品信息信息,销
24、售记录查询,其代码大致相同,此处不再详述。销售记录查询界面:图5-8 销售记录查询窗体界面图5.7 统计模块统计模块包括商品信息统计,销售记录统计。统计结果显示形式有表格形式,直方图形式。在代码上商品信息统计,销售记录统计大致相同。此处只列出销售记录的代码和图形。销售记录统计界面(表格模式):(图中为白米的销售额统计情况)图5-9 销售情况数据统计窗体界面图销售记录统计界面(直方图模式):(图中为海苔酱的销售量直方图)图5-10 数据统计模块直方图显示模式窗体界面图销售记录主要代码:/-显示统计结果-private void button1_Click(object sender, Event
25、Args e) /如果没有选商品类别,返回 if (comboBox1.SelectedIndex = -1 | comboBox2.SelectedIndex = -1) MessageBox.Show(请选择商品类别和商品名称); return; string cmdString; SqlConnection conn = new SqlConnection(Properties.Settings.Default.EPDateConnectionString);/-如果选择的是直方图模式,调整视图数据,打开图形显示窗体 if (radioButtonZFT.Checked = true)
26、C3TJDraw form = new C3TJDraw(); C3TJDraw form1 = new C3TJDraw(); /调整视图数据 cmdString = alter view viewTJ as select 销售年月,sum(销售额) as 月销售额 from ProductDetails where 商品名称 = + comboBox2.SelectedItem.ToString() + group by 销售年月 ; SqlCommand cmd = new SqlCommand(cmdString, conn); tryconn.Open();cmd.ExecuteNo
27、nQuery(); catch (Exception err) MessageBox.Show(err.Message); return; finallyconn.Close();form.Close();form1.Show(); return;/-如果是常规模式,则在表中显示数据 cmdString = select 商品代码,商品名称,销售年月,sum(销售额)as 月销售额 from ProductDetails where 商品名称 = + comboBox2.SelectedItem.ToString() + group by 商品代码,商品名称,销售年月;SqlDataAdapt
28、er adapter = new SqlDataAdapter(cmdString, conn); DataTable table = new DataTable(); tryadapter.Fill(table); dataGridView1.DataSource = table; catch (Exception err) MessageBox.Show(err.Message); 图形绘制模块的主要代码:SqlDataAdapter adapter = new SqlDataAdapter(); DataTable table = new DataTable(); private voi
29、d C3TJDraw_Load(object sender, EventArgs e) /-读取视图到表table中,供后续调用 SqlConnection conn = new SqlConnection(Properties.Settings.Default.EPDateConnectionString); string search = select * from viewTJ go; adapter = new SqlDataAdapter(search,conn); adapter.Fill(table); /-绘图- private void C3TJDraw_Paint(obje
30、ct sender, PaintEventArgs e) /-设置变量 int h1, h2, w1, w2, wd, hd, yl, xl, yd, xd, rd, clmNB; decimal rk; int maxValue = 1; int c1, c2, cWidth, cHeight; string xString; string yString; /-给变量赋值 h1 = 20; h2 = 110; w1 = w2 = 50; wd = 30; hd = 10; yl = this.Height - h1 - h2; xl = this.Width - w1 - w2; yd =
31、 50; xd = 50; clmNB = table.Rows.Count; /-查找列中最大值 for (int i = 0; i maxValue) maxValue = Convert.ToInt16(table.Rowsi1); rk = Convert.ToDecimal(Convert.ToDecimal(yl - yd) /Convert.ToDecimal(maxValue); rd = (xl-xd)/(2*clmNB); /-绘制坐标轴 Graphics g = e.Graphics; Pen blackpen = new Pen(Color.LightBlue, 2.0
32、f); blackpen.StartCap = LineCap.Flat; blackpen.EndCap = LineCap.ArrowAnchor; /画出直线 g.DrawLine(blackpen, new Point(w1, this.Height - h2), new Point(this.Width - w2, this.Height - h2); g.DrawLine(blackpen, new Point(w1, this.Height - h2), new Point(w1, h1); /x,y坐标标示g.DrawString(table.Columns0.ColumnNa
33、me.ToString(), this.Font, Brushes.Black, this.Width - w2-10, this.Height - h2 +5);g.DrawString(table.Columns1.ColumnName.ToString(), this.Font, Brushes.Black, w1+5, h1); /-绘制图形 SolidBrush blueBrush = new SolidBrush(Color.LightBlue); for(int i = 1;i= 4) yString = yString.Substring(0, 4); /-绘制,填充直方图g.
34、DrawRectangle(blackpen,c1,c2,cWidth,cHeight);g.FillRectangle(blueBrush,c1,c2,cWidth,cHeight); /-绘制标示/直方图标示g.DrawString(yString, this.Font, Brushes.Black, c1, c2 - wd); System.Drawing.StringFormat drawFormat = new System.Drawing.StringFormat(StringFormatFlags.DirectionVertical); g.DrawString(xString,
35、this.Font,Brushes.Black,c1,this.Height-h2 +hd,drawFormat);其中部分变量的意义请看下图:h1ydwdw1h2hdxdw2图5-11 直方图显示窗体程序变量示意图5.8 报表打印模块报表打印模块包括员工名单,商品订单,销售记录情况。关于报表的制作,三者基本相同,此处不再累述。下面只显示商品订单的信息。商品订单报表界面:图5-12 商品订单报表窗体界面图5.9 数据维护模块数据维护主要是通过调用数据库命令将数据库中的数据备份到指定的位置,以供数据恢复是使用。用户单击数据备份后选择保存位置后就可以将数据库的备份保存到指定位置。数据恢复工作可以在
36、SQL Server 2005 中通过还原数据库完成。5.10 智能分析模块该模块有三个功能商品盈亏分析,商品销售预测,总销售盈亏分析。商品盈亏分析的运行结果如下:(下图为系统对番茄酱的销售情况的分析)图5-13 智能预测商品盈亏分析窗体界面图从图中可以看出番茄酱的目前总盈利7835.835元,净利润占销售额的百分比为:40.05692%,可见已达到目标销售范围,系统建议继续销售。商品销售预测的运行结果如下:(下图为对番茄酱的销售情况的分析)图5-14 智能预测商品销售预测窗体界面图从图中可以看出番茄酱在1999年4月的销售额预计为326.2292。总销售盈亏的运行结果如下:图5-15 智能预
37、测总销售盈亏分析窗体界面图到目前为止,公司销售额为1258488元,净利润为545404.9元,净利润占销售额百分比为43.33811%。以上模块的主要实现代码如下: /-商品盈亏分析- private void button1_Click(object sender, EventArgs e) if (comboBox2.SelectedIndex = -1) MessageBox.Show(请选择要分析的商品!); return; richTextBox2.Text = ; string pd; float zxse; float jj; float mj; float jlr; floa
38、t jlb; try /求商品的总销售额 SqlConnection conn = new SqlConnection(Properties.Settings.Default.EPDateConnectionString); string search = select sum(销售额) as 销售额 from ProductDetails where 商品名称 = + comboBox2.SelectedItem.ToString() + group by 商品名称; SqlDataAdapter adapter = new SqlDataAdapter(search, conn); Dat
39、aTable table = new DataTable(); adapter.Fill(table); zxse = (float)Convert.ToDouble(table.Rows00); /求进入价格,卖出价格 search = select 进入价格,卖出价格 from Products where 商品名称 = + comboBox2.SelectedItem.ToString() + ; SqlDataAdapter adapter1 = new SqlDataAdapter(search, conn); DataTable table1 = new DataTable(); adapter1.Fill(table1); jj = (float)Conv