1、河南城建学院 《信息系统分析与设计》课程设计报告书 设 计 题 目: 书店信息管理系统 专 业: 信息管理与信息系统 指 导 老 师: 郝伟 小 组 成 员: 李宁 吴典 张党伟 贾文科 李胜辉 设 计 时 间: 2015年 1月 3日 目录 一 引言 3
2、 二 可行性分析 3 1 技术可行性 3 三 需求分析 4 基本功能 4 四 组织结构分析 4 4.1 组织结构图 4 4.2组织/业务关系图 4 五 业务流程分析 5 5.1业务流程图 5 六 数据流程分析 6 七 数据字典 9 八:数据库设计 13 九:系统设计 18 9.1业务功能图 18 9.2业务代码设计 19 9.3 E-R图 20 9.4 IPO图 20 十:系统实现 23 10.1系统登录设计 23 10.2系统主窗体设计 24 10.3进货管理窗体设计 26 10.4销售管理窗体设计 28 10.5系统维护和管理 33 10.6
3、 公司基本信息 35 一 引言 信息在社会和经济的快速发展下,所起的作用越来越重要,信息资源的开发和利用的水平也成为了一个国家综合素质的一个表现。计算机在对信息的处理和使用中,有较为方便的使用,各种数据库和系统的设计也为商业带来了极大的便利。 传统的书店,不论其规模的大小,都是拥有大量的图书,在管理和统计方面需要投入大量的时间和精力,因此,讲传统书店和现代的信息化结合到一起,设计一个合适的书店管理信息系统,对于书店的经营有着极为方便的提升。使用计算机对书店进行管理,可以极大的提高对信息的处理速度,节省大量的人力,时间,减少开支。 二 可行性分析 1 技术可行性 书店配置多台电
4、脑,用于对整个书店的全局的掌控。可以对书店工作人员的基本情况和上下班情况的管理,对书店图书的进销存有着详细的记录和统计。并且对书店工作人员进行培训,可以使其学会使用该系统。 2 经济可行性 书店管理系统是一个小型的管理软件,开发和维护的经费都不会太高。在图书的销售上,只要做到人员的合理分配和调用,对图书的合理购货及售出,就可以为书店带来良好的经济效益。 3.开发工具 本系统前台数据库采用Microsoft SQL Server 2005,该数据库系统在安全性、准确性、运行速度方面有绝对的优势,并且处理数据量大、效率高;后台选择以.NET平台作为开发平台,以C#作为开发语言,采用Visu
5、al Studio 2005作为主要的开发工具,可与SQL Server 2005数据库无缝连接。 ASP.NET ASP.NET 建立在 .NET Framework 的编程类之上,它提供了一个 Web 应用程序模型,并且包含使生成 ASP Web 应用程序变得简单的控件集和结构。ASP.NET 包含封装公共 HTML 用户界面元素(如文本框和下拉菜单)的控件集。但这些控件在 Web 服务器上运行,并以 HTML 的形式将它们的用户界面推送到浏览器。在服务器上,这些控件公开一个面向对象的编程模型,为 Web 开发人员提供了面向对象的编程的丰富性。ASP.NET 还提供结构服务(如会话状
6、态管理和进程回收),进一步减少了开发人员必须编写的代码量并提高了应用程序的可靠性。另外,ASP.NET 使用这些同样的概念使开发人员能够以服务的形式交付软件。使用 XML Web services 功能,ASP.NET 开发人员可以编写自己的业务逻辑并使用 ASP.NET 结构通过 SOAP 交付该服务。 三 需求分析 该图书管理系统针对小型的实体书店,在开发方面,以实用为目的。做到便于工作人员的使用和管理,而且可以和好的对图书的信息管理和进销存方面有较为方便快捷的处理。 基本功能 1登录 工作人员的登录,用于对整个系统的控制,防止其他人员的随意登录 2 人员信息管理 用于对整个
7、书店的工作人员的信息的处理,工作时间的管理,人员的调度等 3 会员的管理 可以对书店的会员的添加,删除,其他的操作处理 4 图书查询 查询图书的详细信息,统计每天的图书的剩余量,销售的总量,库存量等 5 订单管理 包括每本图书的详细订单,以及进货图书的订单 6 库存管理 可以对每本图书的库存量进行统计,和需要进货的图书的提醒。 四 组织结构分析 4.1 组织结构图 决策管理人员 门 店 采 购 部 门 库 存 统 计 部 门 4.1-1 4.2组织/业务关系图 联系 组织 业务 程度 门 店 采购部 仓 库 经 理 销售活动 *
8、 采购活动 * 库存管理 * 行政监督管理 * 五 业务流程分析 5.1业务流程图 5.1-1 六 数据流程分析 顶层数据流程图 采购数据流程图 销售业务顶层数据流程图 销售一层数据流程图 七 数据字典 有关采购业务数据字典内容提取,下面是为数据流程图做了相应的提取: 数据流包括如下几部分: (1)商品信息 (2)采购申请单 (3)采购订单 (4
9、入库单 (5)进货单 (6)送货单 (7)财务报表 数据存储包括如下几个部分: 1. 商品信息 2. 采购订单 3. 财务报表 4. 送货单 5. 进货单 6. 入库单 外部实体包括如下几个部分: 1. 库存部门 2. 总经理 3. 供应商 4. 财务部门 处理过程包括如下几部分: 1. 订单处理 2. 订单汇总 数据元素卡片 总编号:1-01 名称: 采购订单编号 编号:01 别名: 说明: 本书店的采购订单编号 类型: 字符
10、 有关编码的说明: 共8位 长度: -13 CD XXXXXXXX 范围: 采购订单 操作日期 当日单据流水号 有关的数据结构/组合数据(使用场合):采购订单 采购入库申请单 采购付款单 有关销售业务数据字典内容提取,下面是为数据
11、流程图做了相应的提取: 数据流包括如下部分: 订单 销售订单 财务信息 申请购买 销售订单处理 财务信息 数据存储包括如下几个部分: 图书信息 销售订单 财务报表 外部实体包括如下几个部分: 客户 库存部门 总经理 财务部门 处理过程包括如下几部分: 销售订单处理 财务报表汇总 数据字典 销售订单 销售进账 库存信息数据流
12、 库存信息数据流 八:数据库设计 主要数据表结构 员工表 字段包含员工编号,员工姓名,性别,员工部门,联系方式等 表设计: 数据库中实际存储 员工权限表 字段包含id,用户名称,用户密码,进货管理,销售管理.库存管理,系统管理,基础信息管理 表设计 在数据库中实际存储 仓库存储表 包含字段:图书编号,图书名称,图书作者,图书版本,产品编号,出版社,库存数量,实际价格,加权平均价格,销售价格,库存总价值,本类图书库存上限,本类图书库存下限 表设计 数据库中实际存储 销售订单统计表
13、 字段包含:订单号,订单日期,图书名称,图书数量,应付金额,实付金额,差额,出版社 表设计 数据库中实际存储 出版社信息表 字段包含:出版社编号,出版社名称,传真,电话,联系人,地址等 表设计 在数据库中存储 其它表的设计如下 九:系统设计 八.采购业务功能模块设计 9.1业务功能图 总体业务功能图 采购业务功能图 9.2业务代码设计 代码设计 9.3 E-R图 9.4 IPO图 采购图书申请单 备
14、货缺货处理 收退货处理 销售业务功能模块设计 E_R图 十:系统实现 10.1系统登录设计 窗体设计 在窗体中分别添加两个Label控件,两个textbox控件,两个Button控件。 1, 代码设计 private void btnLogin_Click(object sender, EventArgs e) { if (txtUserName.Text == string.Empty) { MessageBox.Sh
15、ow("用户名不正确”,”错误提示”, MessageBoxButtons.OK , MessageBoxIcon.Error); return; } DataSet ds = null; popedom.SysUser = txtUserName.Text; popedom.Password = txtUserPwd.Text; ds=baseinfo.Login(popedom); if (ds.Ta
16、bles[0].Rows.Count > 0) { frmMain frm_main = new frmMain(); frm_main.Show(); if (Convert.ToBoolean(ds.Tables[0].Rows[0]["stock"])) frm_main.tlmBuy.Enabled = true; if (Convert.ToBoolean(ds.Tables[0].Rows[0]["vendition"])
17、) frm_main.tlmSale.Enabled = true; if (Convert.ToBoolean(ds.Tables[0].Rows[0]["storage"])) frm_main.tlmStock.Enabled = true; if (Convert.ToBoolean(ds.Tables[0].Rows[0]["system"])) frm_main.tlmSystem.Enabled = true; if (Convert.ToBoolean(ds.Tables[0]
18、Rows[0]["base"])) frm_main.tlmBase.Enabled = true; this.Visible = false; } else { MessageBox.Show("用户名称或密码不正确”,”错误提示”,BoxButtons.OK,MessageBoxIcon.Error); } } private void txtUserName_KeyUp(objec
19、t sender, KeyEventArgs e) { if (e.KeyValue == 13) txtUserPwd.Focus(); } private void txtUserPwd_KeyUp(object sender, KeyEventArgs e) { if (e.KeyValue == 13) btnLogin.Focus(); } private void btnExit_Click(object sender, E
20、ventArgs e) { this.Close(); } private void groupBox1_Enter(object sender, EventArgs e) { } 10.2系统主窗体设计 1,在窗体中分别添加一个MenuStrip控件、一个Timer控件和一个StatusStrip控件。 2.代码设计 public frmMain() { InitializeComponent();
21、} private void fileUnits_Click(object sender, EventArgs e) { BaseInfo.frmUnits frm_units = new EMS.BaseInfo.frmUnits(); frm_units.Show(); } private void fileStore_Click(object sender, EventArgs e) { new EMS.BaseInfo.
22、frmStock().Show(); } private void fileEmployee_Click(object sender, EventArgs e) { new EMS.BaseInfo.frmEmployee().Show(); } private void { new EMS.BuyStock.frmUnitsList().Show(); } private void fileCurr
23、entBook_Click(object sender, EventArgs e) { new EMS.BuyStock.frmUnitsList().Show(); } private void fileEnd_Click(object sender, EventArgs e) { Application.Exit(); } private void frmMain_FormClosed(object sender, FormClos
24、edEventArgs e) { Application.Exit(); } private void tlmSystem_Click(object sender, EventArgs e) { new EMS.SetSystem.frmSetOP().Show(); } 10.3进货管理窗体设计 1.1进货单 进货单是采购员进行图书采购进行操作的页面,在此页面可以进行添加一个新的进货单,如下图所示 1.2代码如下 进货统计 进货
25、统计窗体是进行把进货信息整合到一起统一显示的窗体,窗体图如下: 2.2,代码设计 public partial class frmBuyStockSum : Form { BaseClass.BaseInfo baseinfo = new EMS.BaseClass.BaseInfo(); BaseClass.cBillInfo billinfo = new EMS.BaseClass.cBillInfo(); public frmBuyStockSum() { Initiali
26、zeComponent(); } private void tlbtnSumDetailed_Click(object sender, EventArgs e) { DataSet ds = null; billinfo.Handle = tltxtHandle.Text; billinfo.Units = tltxtUnits.Text; ds = baseinfo.BuyStockSumDetailed(billinfo,"tb_St
27、ockSumDeailed",dtpStar.Value,dtpEnd.Value); dgvStockList.DataSource = ds.Tables[0].DefaultView; } private void tlbtnSum_Click(object sender, EventArgs e) { DataSet ds = null; ds = baseinfo.BuyStockSum("tb_StockSum"); dgvS
28、tockList.DataSource = ds.Tables[0].DefaultView; } } 10.4销售管理窗体设计 1..1 销售单 销售单据是书店对外销售的统计数据,此页面可以记录销售的时候生成的日期,单据编号,经手人,销售单位以及所销售的图书和金额。如下图所示: 1.2 代码设计 此部分代码感觉很不错的就是单据编号的自动生成,代码如下: private void frmSellStock_Load(object sender, EventArgs e) { txtBillDate.Text =
29、 DateTime.Now.ToString("yyyy-MM-dd"); DataSet ds = null; string P_Str_newBillCode = ""; int P_Int_newBillCode = 0; ds = baseinfo.GetAllBill("tb_sell_main"); if (ds.Tables[0].Rows.Count == 0) { txtBillC
30、ode.Text = DateTime.Now.ToString("yyyyMMdd") + "XS" + "1000001"; } else { P_Str_newBillCode = Convert.ToString(ds.Tables[0].Rows[ds.Tables[0].Rows.Count - 1]["billcode"]); P_Int_newBillCode = Convert.ToInt32(P_Str_newBillCode.S
31、ubstring(10, 7)) + 1; P_Str_newBillCode = DateTime.Now.ToString("yyyyMMdd") + "XS" + P_Int_newBillCode.ToString(); txtBillCode.Text = P_Str_newBillCode; } txtHandle.Focus(); } private void btnSelectHandle_Click(object se
32、nder, EventArgs e) { EMS.SelectDataDialog.frmSelectHandle selecthandle; selecthandle = new EMS.SelectDataDialog.frmSelectHandle(); selecthandle.sellStock = this; //将新创建的窗体对象设置为同一个窗体类的实例(对象) selecthandle.M_str_object = "SellStock";
33、 //用于识别 是那一个窗体调用的selecthandle窗口的 selecthandle.ShowDialog(); } private void btnSelectUnits_Click(object sender, EventArgs e) { EMS.SelectDataDialog.frmSelectUnits selectUnits; selectUnits = new EMS.SelectDataDialog.frmSelectUnits();
34、 selectUnits.sellStock = this; //将新创建的窗体对象设置为同一个窗体类的实例(对象) selectUnits.M_str_object = "SellStock"; //用于识别 是那一个窗体调用的selectUnits窗口的 selectUnits.ShowDialog(); } private void dgvStockList_CellDoubleClick(object sender, DataGridViewCell
35、EventArgs e) { SelectDataDialog.frmSelectStock selectStock = new EMS.SelectDataDialog.frmSelectStock(); selectStock.sellStock = this; //将新创建的窗体对象设置为同一个窗体类的实例(对象) selectStock.M_int_CurrentRow = e.RowIndex; selectStock.M_str_object
36、 "SellStock"; //用于识别 是那一个窗体调用的selectStock窗口的 selectStock.ShowDialog(); } 统计图书进货数量和金额的代码如下: try { float tqty = 0; float tsum = 0; for (int i = 0; i <= dgvStockList.RowCount; i++) {
37、 tsum = tsum + Convert.ToSingle(dgvStockList[5, i].Value.ToString()); tqty = tqty + Convert.ToSingle(dgvStockList[3, i].Value.ToString()); txtFullPayment.Text = tsum.ToString(); txtStockQty.Text = tqty.ToString();
38、 } } catch { } } 10.4 库存管理 private void SetdgvStockListHeadText() { dgvStockList.Columns[0].HeaderText = "商¦¨¬品¡¤编À¨¤号?"; dgvStockList.Columns[1].HeaderText = "商¦¨¬品¡¤名?称?"; dgvStockList.Columns[2].HeaderText = "商
39、¦¨¬品¡¤型¨ª号?"; dgvStockList.Columns[3].HeaderText = "商¦¨¬品¡¤规?格?"; dgvStockList.Columns[4].HeaderText = "商¦¨¬品¡¤单Ì£¤位?"; dgvStockList.Columns[5].HeaderText = "商¦¨¬品¡¤产¨²地Ì?"; dgvStockList.Columns[6].HeaderText = "库a存ä?数ºy量¢?"; dgvStockL
40、ist.Columns[7].Visible = false; dgvStockList.Columns[8].Visible = false; dgvStockList.Columns[9].Visible = false; dgvStockList.Columns[10].HeaderText = "盘¨¬点Ì?数ºy量¢?"; dgvStockList.Columns[11].Visible = false; dgvStockList.Columns[12].
41、Visible = false; } private void tlBtnFind_Click(object sender, EventArgs e) { if (tlCmbStockType.Text == string.Empty) { MessageBox.Show("查¨¦询¡¥类¤¨¤别Àe不?能¨¹为a空?!ê?", "错䨪误¨®提¬¨¢示º?!ê?", MessageBoxButtons.OK, MessageBoxIcon.Error)
42、 tlCmbStockType.Focus(); return; } else { if (tlTxtFindStock.Text.Trim() == string.Empty) { dgvStockList.DataSource = baseinfo.GetAllStock("tb_stock").Tables[0].DefaultVie
43、w; this.SetdgvStockListHeadText(); return; } } DataSet ds = null; //创ä¡ä建¡§DataSet对?象¨® if (tlCmbStockType.Text == "商¦¨¬品¡¤产¨²地Ì?") //按ã¡ä单Ì£¤位?编À¨¤号?查¨¦询¡¥ { stockinfo.
44、Produce = tlTxtFindStock.Text; ds = baseinfo.FindStockByProduce(stockinfo, "tb_Stock"); dgvStockList.DataSource = ds.Tables[0].DefaultView; } else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//按ã¡ä单Ì£¤位?名?称?查¨¦询¡¥ { stock
45、info.FullName = tlTxtFindStock.Text; ds = baseinfo.FindStockByFullName(stockinfo, "tb_stock"); dgvStockList.DataSource = ds.Tables[0].DefaultView; } this.SetdgvStockListHeadText(); } private void frmCheckStock_Load(objec
46、t sender, EventArgs e) { dgvStockList.DataSource = baseinfo.GetAllStock("tb_stock").Tables[0].DefaultView; this.SetdgvStockListHeadText(); } private void dgvStockList_CellEnter(object sender, DataGridViewCellEventArgs e) {
47、tltxtFullName.Text = dgvStockList[1, e.RowIndex].Value.ToString(); G_Str_tradecode = dgvStockList[0, e.RowIndex].Value.ToString(); } private void tlbtnCheckStock_Click(object sender, EventArgs e) { if (tltxtCheckStock.Text == string.Empty)
48、 { MessageBox.Show("盘¨¬点Ì?数ºy量¢?不?能¨¹为a空?!ê?","错䨪误¨®提¬¨¢示º?",MessageBoxButtons.OK,MessageBoxIcon.Error); return; } //验¨¦证¡è输º?入¨?的Ì?文?本À?必À?须?为a阿ã¡é拉¤-伯?数ºy字Á?。¡ê for (int i = 0; i < tltxtCheckStock.Text.Length; i++)
49、 { if (!Char.IsNumber(tltxtCheckStock.Text, i)) { MessageBox.Show("库a存ä?上¦?限T设¦¨¨置?必À?须?为a阿ã¡é拉¤-伯?数ºy字Á?!ê?", "错䨪误¨®提¬¨¢示º?", MessageBoxButtons.OK, MessageBoxIcon.Error); return; }
50、 } stockinfo.TradeCode = G_Str_tradecode; stockinfo.Check = Convert.ToSingle(tltxtCheckStock.Text); int d= baseinfo.CheckStock(stockinfo); dgvStockList.DataSource = baseinfo.GetAllStock("tb_stock").Tables[0].DefaultView; this.SetdgvS






