1、河南城建学院 《信息系统分析与设计》课程设计报告书 设 计 题 目: 书店信息管理系统 专 业: 信息管理与信息系统 指 导 老 师: 郝伟 小 组 成 员: 李宁 吴典 张党伟 贾文科 李胜辉 设 计 时 间: 2015年 1月 3日 目录 一 引言 3 二 可行性分析 3 1
2、技术可行性 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 公司基本信息 35 一
3、 引言 信息在社会与经济得快速发展下,所起得作用越来越重要,信息资源得开发与利用得水平也成为了一个国家综合素质得一个表现。计算机在对信息得处理与使用中,有较为方便得使用,各种数据库与系统得设计也为商业带来了极大得便利。 传统得书店,不论其规模得大小,都就是拥有大量得图书,在管理与统计方面需要投入大量得时间与精力,因此,讲传统书店与现代得信息化结合到一起,设计一个合适得书店管理信息系统,对于书店得经营有着极为方便得提升。使用计算机对书店进行管理,可以极大得提高对信息得处理速度,节省大量得人力,时间,减少开支。 二 可行性分析 1 技术可行性 书店配置多台电脑,用于对整个书店得全局得掌控
4、可以对书店工作人员得基本情况与上下班情况得管理,对书店图书得进销存有着详细得记录与统计。并且对书店工作人员进行培训,可以使其学会使用该系统。 2 经济可行性 书店管理系统就是一个小型得管理软件,开发与维护得经费都不会太高。在图书得销售上,只要做到人员得合理分配与调用,对图书得合理购货及售出,就可以为书店带来良好得经济效益。 3、开发工具 本系统前台数据库采用Microsoft SQL Server 2005,该数据库系统在安全性、准确性、运行速度方面有绝对得优势,并且处理数据量大、效率高;后台选择以、NET平台作为开发平台,以C#作为开发语言,采用Visual Studio 2005
5、作为主要得开发工具,可与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)入库单 (5)进货单 (6)送货单 (7)财务报表
9、 数据存储包括如下几个部分: 1. 商品信息 2. 采购订单 3. 财务报表 4. 送货单 5. 进货单 6. 入库单 外部实体包括如下几个部分: 1. 库存部门 2. 总经理 3. 供应商 4. 财务部门 处理过程包括如下几部分: 1. 订单处理 2. 订单汇总 数据元素卡片 总编号:1-01 名称: 采购订单编号 编号:01 别名: 说明: 本书店得采购订单编号 类型: 字符 有关编码得说明: 共8位 长度: -
10、13 CD XXXXXXXX 范围: 采购订单 操作日期 当日单据流水号 有关得数据结构/组合数据(使用场合):采购订单 采购入库申请单 采购付款单 有关销售业务数据字典内容提取,下面就是为数据流程图做了相应得提取: 数据流包括如下部分: 订单 销售订单 财务信息 申请购买 销售订单处理
11、财务信息 数据存储包括如下几个部分: 图书信息 销售订单 财务报表 外部实体包括如下几个部分: 客户 库存部门 总经理 财务部门 处理过程包括如下几部分: 销售订单处理 财务报表汇总 数据字典 销售订单 销售进账 库存信息数据流 库存信息数据流 八:数据库设计 主要数据表结构 员工表 字段包含员工编号,
12、员工姓名,性别,员工部门,联系方式等 表设计: 数据库中实际存储 员工权限表 字段包含id,用户名称,用户密码,进货管理,销售管理、库存管理,系统管理,基础信息管理 表设计 在数据库中实际存储 仓库存储表 包含字段:图书编号,图书名称,图书作者,图书版本,产品编号,出版社,库存数量,实际价格,加权平均价格,销售价格,库存总价值,本类图书库存上限,本类图书库存下限 表设计 数据库中实际存储 销售订单统计表 字段包含:订单号,订单日期,图书名称,图书数量,应付金额,实付金额,差额,出版社 表设计 数据库中实际存储 出版社信息表 字段包
13、含:出版社编号,出版社名称,传真,电话,联系人,地址等 表设计 在数据库中存储 其它表得设计如下 九:系统设计 八.采购业务功能模块设计 9、1业务功能图 总体业务功能图 采购业务功能图 9、2业务代码设计 代码设计 9、3 E-R图 9、4 IPO图 采购图书申请单 备货缺货处理 收退货处理 销售业务功能模块设计 E_R图 十:系统实现 10、1系统登录设计 窗体设计 在窗体中分别添加两个Label控件,
14、两个textbox控件,两个Button控件。 1, 代码设计 private void btnLogin_Click(object sender, EventArgs e) { if (txtUserName、Text == string、Empty) { MessageBox、Show("用户名不正确”,”错误提示”, MessageBoxButtons、OK , MessageBoxIcon、Error); return;
15、 } DataSet ds = null; popedom、SysUser = txtUserName、Text; popedom、Password = txtUserPwd、Text; ds=baseinfo、Login(popedom); if (ds、Tables[0]、Rows、Count > 0) { frmMain frm_main = new frmMain();
16、 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"])) frm_main、tlmSale、Enabled = true; if (Convert、ToBoolean(ds、Tables[0]、Rows[0]["sto
17、rage"])) 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]、Rows[0]["base"])) frm_main、tlmBase、Enabled = true; this、Visible = false;
18、 } else { MessageBox、Show("用户名称或密码不正确”,”错误提示”,BoxButtons、OK,MessageBoxIcon、Error); } } private void txtUserName_KeyUp(object sender, KeyEventArgs e) { if (e、KeyValue == 13) txtUserPwd、Focus();
19、 } private void txtUserPwd_KeyUp(object sender, KeyEventArgs e) { if (e、KeyValue == 13) btnLogin、Focus(); } private void btnExit_Click(object sender, EventArgs e) { this、Close(); } private void groupBox1_Enter(
20、object sender, EventArgs e) { } 10、2系统主窗体设计 1,在窗体中分别添加一个MenuStrip控件、一个Timer控件与一个StatusStrip控件。 2.代码设计 public frmMain() { Initializeponent(); } private void (object sender, EventArgs e) { BaseInfo、frmUnits frm_units
21、 = new EMS、BaseInfo、frmUnits(); frm_units、Show(); } private void (object sender, EventArgs e) { new EMS、BaseInfo、frmStock()、Show(); } private void (object sender, EventArgs e) { new EMS、BaseInfo、frmEmployee(
22、)、Show(); } private void { new EMS、BuyStock、frmUnitsList()、Show(); } private void (object sender, EventArgs e) { new EMS、BuyStock、frmUnitsList()、Show(); } private void (object sender, EventArgs e)
23、 { Application、Exit(); } private void frmMain_FormClosed(object sender, FormClosedEventArgs e) { Application、Exit(); } private void tlmSystem_Click(object sender, EventArgs e) { new EMS、SetSystem、frmSetOP
24、)、Show(); } 10、3进货管理窗体设计 1、1进货单 进货单就是采购员进行图书采购进行操作得页面,在此页面可以进行添加一个新得进货单,如下图所示 1、2代码如下 进货统计 进货统计窗体就是进行把进货信息整合到一起统一显示得窗体,窗体图如下: 2、2,代码设计 public partial class frmBuyStockSum : Form { BaseClass、BaseInfo baseinfo = new EMS、BaseClass、BaseInfo(); BaseClass、cBi
25、llInfo billinfo = new EMS、BaseClass、cBillInfo(); public frmBuyStockSum() { Initializeponent(); } private void tlbtnSumDetailed_Click(object sender, EventArgs e) { DataSet ds = null; billinfo、Handle = tltxtHandle、Text
26、 billinfo、Units = tltxtUnits、Text; ds = baseinfo、BuyStockSumDetailed(billinfo,"tb_StockSumDeailed",dtpStar、Value,dtpEnd、Value); dgvStockList、DataSource = ds、Tables[0]、DefaultView; } private void tlbtnSum_Click(object sender, EventArgs e)
27、 { DataSet ds = null; ds = baseinfo、BuyStockSum("tb_StockSum"); dgvStockList、DataSource = ds、Tables[0]、DefaultView; } } 10、4销售管理窗体设计 1、、1 销售单 销售单据就是书店对外销售得统计数据,此页面可以记录销售得时候生成得日期,单据编号,经手人,销售单位以及所销售得图书与金额。如下图所示: 1、2 代码设计 此部分代码感觉很不错得就就是单据编号得自动
28、生成,代码如下: private void frmSellStock_Load(object sender, EventArgs e) { txtBillDate、Text = DateTime、Now、ToString("yyyy-MM-dd"); DataSet ds = null; string P_Str_newBillCode = ""; int P_Int_newBillCode = 0; ds = baseinfo、GetAllBi
29、ll("tb_sell_main"); if (ds、Tables[0]、Rows、Count == 0) { txtBillCode、Text = DateTime、Now、ToString("yyyyMMdd") + "XS" + "1000001"; } else { P_Str_newBillCode = Convert、ToString(ds、Tables[0]、Rows[ds、Table
30、s[0]、Rows、Count - 1]["billcode"]); P_Int_newBillCode = Convert、ToInt32(P_Str_newBillCode、Substring(10, 7)) + 1; P_Str_newBillCode = DateTime、Now、ToString("yyyyMMdd") + "XS" + P_Int_newBillCode、ToString(); txtBillCode、Text = P_Str_newBillCode;
31、 } txtHandle、Focus(); } private void btnSelectHandle_Click(object sender, EventArgs e) { EMS、SelectDataDialog、frmSelectHandle selecthandle; selecthandle = new EMS、SelectDataDialog、frmSelectHandle(); selecthandle、sel
32、lStock = this; //将新创建得窗体对象设置为同一个窗体类得实例(对象) selecthandle、M_str_object = "SellStock"; //用于识别 就是那一个窗体调用得selecthandle窗口得 selecthandle、ShowDialog(); } private void btnSelectUnits_Click(object sender, EventArgs e) { EMS、SelectData
33、Dialog、frmSelectUnits selectUnits; selectUnits = new EMS、SelectDataDialog、frmSelectUnits(); selectUnits、sellStock = this; //将新创建得窗体对象设置为同一个窗体类得实例(对象) selectUnits、M_str_object = "SellStock"; //用于识别 就是那一个窗体调用得selectUnits窗口得 selectUnits、Show
34、Dialog(); } private void dgvStockList_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { SelectDataDialog、frmSelectStock selectStock = new EMS、SelectDataDialog、frmSelectStock(); selectStock、sellStock = this; //将新创建得窗体对象设置为同一个窗体
35、类得实例(对象) selectStock、M_int_CurrentRow = e、RowIndex; selectStock、M_str_object = "SellStock"; //用于识别 就是那一个窗体调用得selectStock窗口得 selectStock、ShowDialog(); } 统计图书进货数量与金额得代码如下: try { float tqty = 0; float tsum
36、 = 0; for (int i = 0; i <= dgvStockList、RowCount; i++) { tsum = tsum + Convert、ToSingle(dgvStockList[5, i]、Value、ToString()); tqty = tqty + Convert、ToSingle(dgvStockList[3, i]、Value、ToString()); txtFullP
37、ayment、Text = tsum、ToString(); txtStockQty、Text = tqty、ToString(); } } catch { } } 10、4 库存管理 private void SetdgvStockListHeadText() { dgvStockList、Columns[0]、HeaderText = "商¦¨¬品¡¤编À¨¤号?"; dg
38、vStockList、Columns[1]、HeaderText = "商¦¨¬品¡¤名?称?"; dgvStockList、Columns[2]、HeaderText = "商¦¨¬品¡¤型¨ª号?"; dgvStockList、Columns[3]、HeaderText = "商¦¨¬品¡¤规?格?"; dgvStockList、Columns[4]、HeaderText = "商¦¨¬品¡¤单Ì£¤位?"; dgvStockList、Columns[5]、HeaderText = "商
39、¦¨¬品¡¤产¨²地Ì?"; dgvStockList、Columns[6]、HeaderText = "库a存ä?数ºy量¢?"; dgvStockList、Columns[7]、Visible = false; dgvStockList、Columns[8]、Visible = false; dgvStockList、Columns[9]、Visible = false; dgvStockList、Columns[10]、HeaderText = "盘¨¬点Ì?
40、数ºy量¢?"; dgvStockList、Columns[11]、Visible = false; dgvStockList、Columns[12]、Visible = false; } private void tlBtnFind_Click(object sender, EventArgs e) { if (tlCmbStockType、Text == string、Empty) { Message
41、Box、Show("查¨¦询¡¥类¤¨¤别Àe不?能¨¹为a空?!ê?", "错䨪误¨®提¬¨¢示º?!ê?", MessageBoxButtons、OK, MessageBoxIcon、Error); tlCmbStockType、Focus(); return; } else { if (tlTxtFindStock、Text、Trim() == string、Empty)
42、{ dgvStockList、DataSource = baseinfo、GetAllStock("tb_stock")、Tables[0]、DefaultView; this、SetdgvStockListHeadText(); return; } } DataSet ds = null; //创ä¡ä建¡§DataSet对?象¨® if (tlCmbS
43、tockType、Text == "商¦¨¬品¡¤产¨²地Ì?") //按ã¡ä单Ì£¤位?编À¨¤号?查¨¦询¡¥ { stockinfo、Produce = tlTxtFindStock、Text; ds = baseinfo、FindStockByProduce(stockinfo, "tb_Stock"); dgvStockList、DataSource = ds、Tables[0]、DefaultView; }
44、 else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//按ã¡ä单Ì£¤位?名?称?查¨¦询¡¥ { stockinfo、FullName = tlTxtFindStock、Text; ds = baseinfo、FindStockByFullName(stockinfo, "tb_stock"); dgvStockList、DataSource = ds、Tables[0]、DefaultView; }
45、 this、SetdgvStockListHeadText(); } private void frmCheckStock_Load(object sender, EventArgs e) { dgvStockList、DataSource = baseinfo、GetAllStock("tb_stock")、Tables[0]、DefaultView; this、SetdgvStockListHeadText(); } privat
46、e void dgvStockList_CellEnter(object sender, DataGridViewCellEventArgs e) { tltxtFullName、Text = dgvStockList[1, e、RowIndex]、Value、ToString(); G_Str_tradecode = dgvStockList[0, e、RowIndex]、Value、ToString(); } private void tlbtnCheckStock_Click(obj
47、ect sender, EventArgs e) { if (tltxtCheckStock、Text == string、Empty) { MessageBox、Show("盘¨¬点Ì?数ºy量¢?不?能¨¹为a空?!ê?","错䨪误¨®提¬¨¢示º?",MessageBoxButtons、OK,MessageBoxIcon、Error); return; } //验¨¦证¡è输º?入¨?得Ì?文?本
48、À?必À?须?为a阿ã¡é拉¤-伯?数ºy字Á?。¡ê for (int i = 0; i < tltxtCheckStock、Text、Length; i++) { if (!Char、IsNumber(tltxtCheckStock、Text, i)) { MessageBox、Show("库a存ä?上¦?限T设¦¨¨置?必À?须?为a阿ã¡é拉¤-伯?数ºy字Á?!ê?", "错䨪误¨®提¬¨¢示º?", MessageBo
49、xButtons、OK, MessageBoxIcon、Error); return; } } stockinfo、TradeCode = G_Str_tradecode; stockinfo、Check = Convert、ToSingle(tltxtCheckStock、Text); int d= baseinfo、CheckStock(stockinfo); dgvStockList、
50、DataSource = baseinfo、GetAllStock("tb_stock")、Tables[0]、DefaultView; this、SetdgvStockListHeadText(); MessageBox、Show("保À¡ê存ä?库a存ä?商¦¨¬品¡¤盘¨¬点Ì?成¨¦功|!ê?","成¨¦功|提¬¨¢示º?",MessageBoxButtons、OK,MessageBoxIcon、Information); } private void tlBtnExit_Click(object






