基于C#和Sql Server实现的库存管理系统

Change

发布日期: 2021-05-02 09:31:31 浏览量: 138
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、引言

本系统采用 VS2008+sqlserver2000 开发,处理一些简单的数据,主要在于库存的查询分析,各种信息的操作以及日报月报的查询。包括了各个基本表的操作,由于时间所限,仅仅完成了商品入库的操作,并未完成出库操作,由此日报月报也受到了一定的影响,无法准确计算系统的利润。但仍实现了计划的功能,并能提供每天每月的准确统计数据,有利于业务的操作与统计。

二、可行性研究

本次开发采用了成熟的开发平台与数据库,使用 VS2008 及 sqlserver 2000,保证了开发的顺利进行,并采用的是 C/S 结构,部署简单,在本人的电脑上进行的开发,并未使用太多资源,系统操作简单,限制少。

三、需求分析

为了对库存进行有效的操作,在系统开发的过程中需要对与库存有关的数据、实体进行操作,因此,需要系统提供对库存有关的各种信息进行操作。用户可以使用本系统方便的对个人信息,商品类别信息,商品基本信息进行操作,并可以通过系统多种方式查询当前库存商品情况,进行入库操作,系统自动对每日每月的入库信息进行统计,形成报表,方便用户了解公司的运作情况。

系统应主要包括以下几个功能:

  • 个人信息的维护,包括修改个人信息(注册信息,密码等),注册新用户等
  • 商品分类信息的维护
  • 商品基本信息维护
  • 商品库存信息查询
  • 商品入库管理
  • 统计报表,完整的月报表统计查询

顶层数据流图

第二层数据流图

四、总体设计

4.1 根据系统功能分析,画出系统功能模块图如下:

4.2 系统模块描述:

模块名称 模块描述 模块输入 系统功能 输出
登录 用户登录 用户名;密码 检索数据库 若成功,则提示登录成功
主界面 选择系统功能 点击模块名称 转到相应界面 转到相应界面
人员管理 提供对人员信息的操作(只能对自己的信息进行操作),以及注册新用户 选择要操作的信息 对指定信息进行指定操作 若成功,则提示成功
供应商管理 提供对供应商信息的操作 选择要操作的信息 对指定信息进行指定操作 若成功,则提示成功
商品信息管理 提供对商品信息的操作; 选择要操作的信息 对指定信息进行指定操作 若成功,则提示成功
库存信息查询 提供对库存信息的查询 选择要按何种方式查询 执行指定操作 显示查询结果
报表统计 提供对报表信息的查询 选择要按何种方式查询 执行指定操作 显示查询结果
商品入库 将商品入库,同时修改相应信息 商品信息,包括数量,单价,金额等 执行指定操作,修改数据 成功时提示

4.3 数据库设计

4.3.1 数据库对象

根据系统功能需求与数据流程图,本数据库管理系统需要 9 个数据表,分别是操作员个人信息表、商品类别表、商品信息表、库存信息表、供货商信息表、入库主表、入库子表、入库日报表、入库月报表。

4.3.2 基本表

操作员个人信息表(用户号, 用户名, 性别, 联系方式,密码)

字段名 字段类型 字段大小 允许空 说明
用户号 Varchar 20 用户号,用于登录
用户名 Varchar 20 用户名称
性别 nvarchar 2 性别
联系方式 Varchar 20 联系方式
密码 Varchar 20 密码

商品类别表(商品类别号,商品类别)

字段名 字段类型 字段大小 允许空 说明
商品类别号 Varchar 20 商品类别号
商品类别 Varchar 20 类别名称

商品信息表(商品编号,商品名称,商品类别,出货单价)

字段名 字段类型 字段大小 允许空 说明
商品编号 Varchar 20 商品编号
商品名称 Varchar 20 商品名称
商品类别 Varchar 20 商品类别名称
出货单价 Float 8 出货时的单价

库存信息表(商品编号,商品名称,数量, 最低限额,最高限额)

字段名 字段类型 字段大小 允许空 说明
商品编号 Varchar 20 商品编号
商品名称 Varchar 20 商品名称
数量 Int 4 库存的数量
最低限额 Float 8 库存最低限额
最高限额 Float 8 库存最高限额

供货商信息表(供应商编号,供应商名称,地址,联系方式)

字段名 字段类型 字段大小 允许空 说明
供应商编号 Varchar 20 供应商编号
供应商名称 Varchar 20 供应商名称
地址 Varchar 20 地址
联系方式 varchar 20 联系方式

入库子表(入库编号,商品编号,商品名称,数量,进货单价,金额,供应商编号)(入库编号的规则:入 + 当前日期 + 编号)

字段名 字段类型 字段大小 允许空 说明
入库编号 Varchar 20 入库编号,按规则‘入’+“日期”+“编号”生成(例:“入 20110616001”)
商品编号 Varchar 20 商品编号
商品名称 Varchar 20 商品名称
数量 Int 4 入库的商品数量
进货单价 float 8 进货单价
金额 Float 8 本次花费的成本
供应商编号 varchar 20 供应商的编号

入库主表(入库编号,入库时间,采购人编号,供应商编号) 

字段名 字段类型 字段大小 允许空 说明
入库编号 Varchar 20 入库编号
入库时间 Datatime 8 入库时间
采购人编号 Varchar 20 采购人编号
供应商编号 varchar 20 供应商编号

入库日报表(入库日期,商品编号,本日入库数量,本日入库金额)

字段名 字段类型 字段大小 允许空 说明
入库日期 Datatime 8 入库日期
商品编号 Varchar 20 商品编号
本日入库数量 Float 8 本日入库数量
本日入库金额 Float 8 本日入库金额

入库月报表(月份,商品编号,本月入库数量,本月入库金额)

字段名 字段类型 字段大小 允许空 说明
月份 Varchar 20 月份
商品编号 Varchar 20 商品编号
本日入库数量 Float 8 本日入库数量
本日入库金额 Float 8 本日入库金额

五、详细设计

5.1 界面设计

登录界面

主界面

注册新用户界面

更新个人信息界面

供应商管理界面

新增/更新供应商管理界面

商品信息维护界面

新增/更新商品类别信息界面

库存信息查询界面

报表统计界面

商品入库界面

5.2 类的设计

本系统采用面向对象的方法进行设计,对表的操作都封装在类中,同时构建一个数据库操作类,负责所有对数据库的操作。共包含 13 个类,分别为

其中,GRN,GRNchildren,GRNparent 类负责入库单的操作,InDataReport,InMonthReport 负责入库日报表月报表的操作,manager,product,productcls,Program,server,storemessage 负责用户,商品,商品类别,供应商,库存信息的操作,sqlhelper 负责数据库的操作,凭证号码负责按照业务规则生成相应的凭证号码(如入库编号等)

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Data;
  6. using System.Data.SqlClient;
  7. namespace 库存管理系统
  8. {
  9. class InMonthReport
  10. {
  11. #region 实体的属性
  12. private string month;
  13. /// <summary>
  14. /// 入库日期
  15. /// </summary>
  16. public string Month
  17. {
  18. get { return month; }
  19. set { month = value; }
  20. }
  21. private string igno;
  22. /// <summary>
  23. /// 商品编号
  24. /// </summary>
  25. public string Igno
  26. {
  27. get { return igno; }
  28. set { igno = value; }
  29. }
  30. private double icount;
  31. /// <summary>
  32. /// 本月入库数量
  33. /// </summary>
  34. public double Icount
  35. {
  36. get { return icount; }
  37. set { icount = value; }
  38. }
  39. private double iprize;
  40. /// <summary>
  41. /// 本月入库采购金额
  42. /// </summary>
  43. public double Iprize
  44. {
  45. get { return iprize; }
  46. set { iprize = value; }
  47. }
  48. #endregion
  49. public static List<InMonthReport> GetAllItems()
  50. {
  51. string sql = "select * from 入库月报表";
  52. DataSet ds = new DataSet();
  53. ds = SqlHelper.ExecuteDataSet(sql);
  54. List<InMonthReport> lim = new List<InMonthReport>();
  55. if (ds.Tables[0].Rows.Count > 0)
  56. {
  57. for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
  58. {
  59. InMonthReport im = new InMonthReport();
  60. im.Month =ds.Tables[0].Rows[i][0].ToString();
  61. im.Igno = ds.Tables[0].Rows[i][1].ToString();
  62. im.Icount = Convert.ToDouble(ds.Tables[0].Rows[i][2].ToString());
  63. im.Iprize = Convert.ToDouble(ds.Tables[0].Rows[i][3].ToString());
  64. lim.Add(im);
  65. }
  66. return lim;
  67. }
  68. else
  69. {
  70. lim = null;
  71. return lim;
  72. }
  73. }
  74. public void Save()
  75. {
  76. string sql = "insert into 入库月报表(月份,商品编号,本月入库数量,本月入库采购金额) values('";
  77. sql += this.Month + "','";
  78. sql += this.Igno + "',";
  79. sql += this.Icount + ",";
  80. sql += this.Iprize + ")";
  81. SqlHelper.ExecuteNoQuery(sql);
  82. }
  83. public void Update()
  84. {
  85. string sql = "update 入库月报表 set ";
  86. sql += "本月入库数量=" + this.Icount + ",";
  87. sql += "本月入库采购金额=" + this.Iprize + " ";
  88. sql += "where 商品编号= '" + this.Igno + "' and 月份='" + this.Month + "'"; ;
  89. SqlHelper.ExecuteNoQuery(sql);
  90. }
  91. public static List<InMonthReport> 取某月报表信息ById(string id)
  92. {
  93. string sql = "select * from 入库月报表 where 月份='" + id + "'";
  94. DataSet ds = new DataSet();
  95. ds = SqlHelper.ExecuteDataSet(sql);
  96. List<InMonthReport> lm = new List<InMonthReport>();
  97. if (ds.Tables[0].Rows.Count > 0)
  98. {
  99. for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
  100. {
  101. InMonthReport imr = new InMonthReport();
  102. imr.Month = ds.Tables[0].Rows[i][0].ToString();
  103. imr.Igno = ds.Tables[0].Rows[i][1].ToString();
  104. imr.Icount = Convert.ToDouble(ds.Tables[0].Rows[i][2].ToString());
  105. imr.Iprize = Convert.ToDouble(ds.Tables[0].Rows[i][3].ToString());
  106. lm.Add(imr);
  107. }
  108. return lm;
  109. }
  110. else
  111. {
  112. lm = null;
  113. return lm;
  114. }
  115. }
  116. public static List<InMonthReport> 取某商品月报表信息ById(string id)
  117. {
  118. string sql = "select * from 入库月报表 where 商品编号='" + id + "'";
  119. DataSet ds = new DataSet();
  120. ds = SqlHelper.ExecuteDataSet(sql);
  121. List<InMonthReport> lm = new List<InMonthReport>();
  122. if (ds.Tables[0].Rows.Count > 0)
  123. {
  124. for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
  125. {
  126. InMonthReport imr = new InMonthReport();
  127. imr.Month = ds.Tables[0].Rows[i][0].ToString();
  128. imr.Igno = ds.Tables[0].Rows[i][1].ToString();
  129. imr.Icount = Convert.ToDouble(ds.Tables[0].Rows[i][2].ToString());
  130. imr.Iprize = Convert.ToDouble(ds.Tables[0].Rows[i][3].ToString());
  131. lm.Add(imr);
  132. }
  133. return lm;
  134. }
  135. else
  136. {
  137. lm = null;
  138. return lm;
  139. }
  140. }
  141. public static InMonthReport 取某月某商品月报表信息ById1(string id1, string id2)
  142. {
  143. string sql = "select * from 入库月报表 where 商品编号='" + id1 + "' and 月份='" + id2 + "'";
  144. DataSet ds = new DataSet();
  145. ds = SqlHelper.ExecuteDataSet(sql);
  146. InMonthReport p = new InMonthReport();
  147. if (ds.Tables[0].Rows.Count > 0)
  148. {
  149. p.Month = ds.Tables[0].Rows[0][0].ToString();
  150. p.Igno = ds.Tables[0].Rows[0][1].ToString();
  151. p.Icount = Convert.ToDouble(ds.Tables[0].Rows[0][2].ToString());
  152. p.Iprize = Convert.ToDouble(ds.Tables[0].Rows[0][3].ToString());
  153. return p;
  154. }
  155. else
  156. {
  157. p = null;
  158. return p;
  159. }
  160. }
  161. }
  162. }

六、实现

用户登录:用户名:001,密码:001

登录成功后转到主界面

进入注册用户界面,注册用户,用户名为 003

成功后返回

修改个人信息,仅能修改本人信息

修改密码界面

返回后转到供应商管理界面

新增供应商

库存商品查询

限额分析

商品库存查询

报表统计—-日报表查询(可通过多种方式查询—-按日期,按商品编号,商品编号 + 日期)

月报表查询(可通过多种方式查询—-按月份,按商品编号,商品编号 + 月份)

商品入库

添加商品到入库单,可连续添加

七、维护与总结

硬件要求: PC 机;操作系统:Window 7;数据库服务器:SQL Server 2000;同时需要.net framework 2.0 以上。

在本次设计中涉及到了面向对象的设计方法以及 ERP 管理的部分知识,在设计过程中加深了对面向对象的理解和认识,但是由于水平和时间的不足,在程序中仍有许多需要改进的地方,如界面中进行操作时的规则检验,在一些程序的细节方面仍然考虑不足,需要改进的地方仍有很多,在以后的日子里我会将它进一步优化,以期将它做得更好。

上传的附件 cloud_download 基于C#和Sql Server实现的库存管理系统.7z ( 3.05mb, 3次下载 )
error_outline 下载需要10点积分

发送私信

如果哪天我们真的久别重逢,我希望你别来无恙

15
文章数
14
评论数
最近文章
eject