资源描述
郑 州 科 技 学 院
C#课 程 设 计
课程设计名称:超市进销存销售管理系统
专 业 班 级 : 10级计科2班
学 生 姓 名 : 汪明鑫
学 号 : 201015063
指 导 教 师 : 王玉萍
摘 要
超市进销存管理系统是目前应用于公司或是企业进销存管理系统中的典型代表,涉及到了商品或货物管理中主要的6个方面,即进货、销售、钱流、库存、统计及查账。通过一个典型超市进销存管理系统的例子,介绍了现代企业进销存管理信息化的一般解决方案,其重要性不言而喻。但是,目前超市在具体的业务流程处理过程中仍然使用手工操作的方式来实施,不仅费时、费力、效率低下,而且无法达到理想的效果。
本系统是根据企业的特点,集进、销、存于一体,为企业量身定做的进销存管理软件。在设计过程中最大限度满足用户的要求,因此,该系统具有较强的实用性和针对性。本系统界面友好,操作简单,可维护性强,功能完备。本论文介绍了进销存管理信息系统开发的全过程,详细介绍了系统的分析、系统的开发与设计说明等内容,最后给出了系统的使用说明和系统设计的心得体会。
目 录
1.引言 1
1.1问题的提出 1
1.2课题的研究目的 2
1.3课题的研究意义 2
2.概要设计 3
2.1设计目的 3
2.2设计内容 3
3.系统分析 3
3.1需求分析 3
3.2 可行性分析 4
4.系统设计 4
4.1系统运行环境 4
4.2系统设计 4
4.3概念结构设计 6
4.4逻辑结构设计 8
4.5窗体设计 9
5.主要功能模块设计 12
5.1员工基本信息窗体 12
5.2供应商信息窗体 16
5.3商品进货窗体 20
5.4商品查询窗体 27
总 结 28
参考文献 30
1.引言
超市进销存管理系统是超市商品销售及货物管理的主要控制部分,直接影响销售的方便性及管理的规范性。随着信息时代的发展,对效率的要求日益提高,企业经营涉及进、销、存多个环节,涉及商品种类繁多,业务量大,库存管理复杂,使用手工管理已无法胜任,因而软件控制销售和管理已经取代了传统全手工方式。如何采用先进的计算机系统管理进货、库存、销售等诸多环节也已成为趋势及必然。超市具有自身的特点:商品要求一般齐全,进出货关系较为简单,员工人数种类不多;在软件角度看,数据较少,对存储和速度要求不高。但正由于员工较少,使用软件控制成为必须。
1.1问题的提出
目前,大量的中小超市企业中,存在这样的现象:分散的、不连贯的进销存信息使超市管理者或相关管理人员无法看到进销存的全部资料及相关报表,信息的分散使得产生的结果也无法保持一致和完整性,造成中小超市在进销存管理上存在如下问题:
1) 无法统计销售信息?
2) 无法准确全面掌握各业务进展状态?
3) 对销售人员工作过程掌握不够?
4) 业务人员对产品没有一定认识?
5) 销售及市场流程不清晰,流程变动较大?
6) 对市场信息、竞争的资讯掌握程度较不完善?
7) 无结构统一销售及市场情况报表?基本销售及市场费用统计较不完备?
8) 销售人员辞职时失单现象严重?等等。
加之,现在顾客的期望值越来越高,顾客需要更好的服务(产品及个性化服务)。企业的竞争已逐渐从产品的竞争转变为服务的竞争,因此中小企业要发展就必须需要进一步优化业务流程以提高企业竞争能力。因此,加强超市进销存管理是企业发展的必然,通过计算机来大量完成本来由工作人员手工完成的工作,真正达到合理和充分利用现有资源,减轻工作压力。
1.2课题的研究目的
研究该课题是为了通过对“超市进销存管理系统”的设计与实现,熟悉这类的信息管理系统的开发原理及流程。在设计过程,能够深入地理解面向对象设计方法的优越性,获得这些方面的相关经验。对一个即将毕业的计算机专业本科生来说,又想在软件行业领域里有所发展,研究并应用面向对象设计方法是百益无一害的,可以使其走向社会后能够快速地适应行业需求。这正是本次设计的根本目的所在。
1.3课题的研究意义
首先,该课题属于管理信息系统范畴。而管理信息系统(Management Information System,简称MIS)在现代社会已深入到各行各业,是一个不断发展的新学科,是由人和计算机设备或其他信息处理手段组成并用于管理信息的系统。再加上行业信息化的热潮才刚刚开始,特别是中小型企业的信息化建设步伐刚刚迈出第一步。管理信息系统的开发的市场将是非常庞大的。这种需求对开发人员在数量上和素质上的要求也是非常迫切的。为了满足市场的需求以及能在竞争中取胜,系统设计人员就不仅仅是单纯地满足用户对功能的要求,还要从设计方法上来加以改进。
其次,面向对象方法是一种非常实用的软件开发方法,它一出现就受到软件技术人员的青睐,现在已经成为计算机科学研究的一个重要领域,并逐渐成为软件开发的一种主要方法。面向对象的程序设计将数据及对数据的操作方法封装在一起,作为一个互相依存、不可分离的整体。采用这种方法来设计系统,可以增加系统的安全性。同时通过继承与多态性,使程序具有很高的可重用性,使软件的开发和维护带来了方便。由于面向对象方法的突出优点,它才被广大用户所爱好。
2.概要设计
2.1设计目的
根据所学的数据库原理与程序设计的知识,能够针对一个小型的数据库管理信息系统,进行系统的需求分析,系统设计,数据库设计,编码,测试等,完成题目要求的功能,从而达到掌握开发一个小型数据库管理信息系统的目的。
2.2设计内容
题目可根据自己熟悉的物品填充,例如图书进销存系统、电脑设备进销存系统、药品进销存系统等等,下面以超市进销存系统为例完成功能:
1) 商品信息、供应商信息
2) 商品进货、商品查询
以上功能可根据自己对不同物品主要的管理需求进行调整,可以增加或减少相应功能。
3.系统分析
3.1需求分析
对普通超市来讲,涉及原材料的进货渠道、销售情况及库存等方面的管理,管理的好与坏对超市的持久性至关重要。概括地说,用户对进销存系统的需求具有普遍性。超市进销存销售管理系统适用于超市采购、销售和仓库部门,对超市采购、销售及仓库的业务全过程进行有效控制和跟踪。使用超市进销存销售管理系统可有效减少盲目采购、降低采购成本、合理控制库存、减少资金占用并提高市场灵敏度,提升超市的市场竞争力。
3.2 可行性分析
开发任何一个基于计算机的系统,都会受到时间和资源上的限制。因此,在接受任何一个项目开发任务之前,必须根据客户可能提供的时间和资源条件进行可行性分析,以减少项目开发风险,避免人力、物力和财力的浪费。
本系统数据库采用目前比较流行的Microsoft SQL Server,该数据库系统在安全性、准确性、运行速度方面有绝对的优势,并且处理数据库量大,效率高;开发工具采用Delphi7,Delphi7是目前应用最广泛的数据库系统开发工具,可以快速开发Windows应用程序。
4.系统设计
4.1系统运行环境
系统开发平台:Microsoft Visual Studio 2008
系统开发语言:C#
数据库管理软件:SQL Server 2005
运行平台:Win7
运行环境:Microsoft.NET Framework SDK v2.0
4.2系统设计
图表 1 超市进销存销售管理系统功能结构图
超市进销存管理系统
销售管理
进货管理
库存管理
系统维护
基本档案
员工信息
供应商信息
商品进货
商品查询
商品销售
商品退货
库存警报
库存查询
数据备份
数据还原
图表 2 系统业务流程图
否
是
系统登 录
是否登录
系统主窗体
销售管理
进货管理
库存管理
系统维护
基本档案
供应商信息表
备注
地址
加入时间
传真
是否发布
供应商编号
供应商姓名
联系人姓名
联系电话
4.3概念结构设计
图表3 供应商信息表
员工信息表
家庭电话
员工职位
手机号码
员工生日
是否发布
员工编号
员工姓名
登录密码
员工性别
所属部门
家庭住址
登录ID
进货信息表
应付金额
销售单价
实付金额
商品数量
删除标记
操作员编号
员工姓名
库存名称
货物名称
进货单价
备注
进货公司名称
商品计量单位
进货时间
图表4 进货信息表
4.4逻辑结构设计
根据设计好的E-R图在数据库中建立各表,系统数据库中各表的逻辑结构如下:
供应商信息表:
字段名
数据类型
长度
主键
描述
CompanyID
varchar
50
否
供应商编号
CompanyName
nvarchar
100
否
供应商姓名
CompanyDirector
nvarchar
50
否
联系人姓名
CompanyPhone
nvarchar
20
否
联系电话
CompanyFax
nvarchar
20
否
传真
CompanyAddress
nvarchar
200
否
地址
CompanyRemark
nvarchar
400
否
备注
ReDateTime
datetime
8
否
加入日期
Falg
int
4
否
是否发布
员工信息表:
字段名
数据类型
长度
主键
描述
EmpID
nvarchar
20
是
员工编号
EmpName
nvarchar
20
否
员工姓名
EmpLoginName
nvarchar
20
否
登录ID
EmpLoginPwd
nvarchar
20
否
登录密码
EmpSex
nvarchar
4
否
员工性别
EmpBirthday
datetime
8
否
员工生日
EmpDept
nvarchar
20
否
所属部门
EmpPost
nvarchar
20
否
员工职位
EmpPhone
nvarchar
20
否
家庭电话
EmpPhoneM
nvarchar
20
否
手机号码
EmpAddress
nvarchar
200
否
家庭住址
EmpFalg
int
1
否
是否发布
商品信息表:
字段名
数据类型
长度
主键
描述
GoodsID
nvarchar
20
是
商品编号
EmpId
nvarchar
20
否
操作员编号
JhCompName
nvarchar
100
否
进货公司名称
DepotName
nvarchar
20
否
仓库名称
GoodsName
nvarchar
50
否
货物名称
GoodsNum
int
4
否
商品数量
GoodsUnit
nvarchar
20
否
商品计量单位
GoodsJhPrice
nvarchar
8
否
进货单价
GoodsSellPrice
nvarchar
8
否
销售单价
GoodsNeedPrice
nvarchar
8
否
应付金额
GoodsNoPrice
nvarchar
8
否
实付金额
GoodsRemark
nvarchar
200
否
备注
GoodTime
datetime
8
否
进货时间
Falg
int
4
否
删除标记
4.5窗体设计
图表 3 登录窗口
图表 4 主窗口
图表 5 员工基本信息窗体
图表6 进货信息表
图表 7 商品进货信息
5.主要功能模块设计
5.1员工基本信息窗体
1.通过对员工信息的录入,修改,删除,保存进行操作,在对员工的信息录入时候,员工姓名,登录名称和登录密码的相关操作是必须的 ,因为涉及到了下次登录时候身份的鉴定,相关代码如下:
public int getPan()
{
int intFalg1 = 0;
if (intFalg != 3)
{
if (txtEmpName.Text == "")
{
MessageBox.Show("员工姓名不能为空!", "提示");
txtEmpName.Focus();
return intFalg1;
}
if (txtEmpLoginName.Text == "")
{
MessageBox.Show("登录名称不能为空!", "提示");
return intFalg1;
}
if (intFalg != 2)
{
if (txtEmpLoginPwd.Text == "")
{
MessageBox.Show("登录密码不能为空!", "提示");
return intFalg1;
}
}
2.通过对员工的查询,可以知道员工的信息,查询可根据很多方面的信息而查到所向知道的员工的信息,所一就需要输入查询条件,根据查询条件而知道所向知道的信息,比如员工姓名,性别,所属部门,员工职位,姓名查询是最准确并且速度的方法,性别,所属部门,职位这些查询条件是比较含糊的查询,客户通过自己想要的方式查到员工的信息,相关的代码如下:
private void txtOK_Click(object sender, EventArgs e)
{
string P_Str_selectcondition = this.cbxCondition.Text;
//Items[this.cbxCondition.SelectedIndex].ToString();
if (P_Str_selectcondition == null)
{
MessageBox.Show("请选择查询条件!");
return;
}
if (this.txtKeyWord.Text == "")
{
MessageBox.Show("输入查询条件!");
return;
}
switch (P_Str_selectcondition)
{
case "员工姓名":
tbMenthod.tb_EmpInfoFind(txtKeyWord.Text,1,dataGridView1);
break;
case "员工性别":
tbMenthod.tb_EmpInfoFind(txtKeyWord.Text, 2, dataGridView1);
break;
case "所属部门":
tbMenthod.tb_EmpInfoFind(txtKeyWord.Text, 3, dataGridView1);
break;
case "员工职位":
tbMenthod.tb_EmpInfoFind(txtKeyWord.Text, 4, dataGridView1);
break;
default:
break;
}
}
如果客户 查询到员工的信息之后,想做一些的修改 删除,添加之类的修改,如果添加员工信息的话,则要录入新员工的详细信息,如修改的员工信息的话可根据某方面的信息进行相关的修该,如删除员工信息的话,则要对员工的信息进行全部的删除,并相应的保存到数据库里面,方便下次客户对员工的信息进行相关的操作,具体修改 ,删除,添加的操作代码如下:
private void toolSave_Click(object sender, EventArgs e)
{
if (getPan() == 1)
{
if (intFalg == 1)
{
if (tbMenthod.tb_EmpInfoFind(txtEmpLoginName.Text,"",1) == 1)
{
MessageBox.Show("登录名称已被占用!!");
txtEmpLoginName.Text = "";
txtEmpLoginName.Focus();
return;
}
if (tbMenthod.tb_EmpInfoAdd(EmpClass) == 1)
{
MessageBox.Show("添加成功");
intFalg = 0;
tbMenthod.tb_EmpInfoFind("", 5, dataGridView1);
ClearControls();
ControlStatus();
}
else
{
MessageBox.Show("添加成失败");
intFalg = 0;
//tbMenthod.tb_EmpInfoFind("2",dataGridView1);
ClearControls();
ControlStatus();
}
}
if (intFalg == 2)
{
if (tbMenthod.tb_EmpInfoUpdate(EmpClass)==1)
{
MessageBox.Show("修改成功");
intFalg = 0;
tbMenthod.tb_EmpInfoFind("", 5, dataGridView1);
ClearControls();
ControlStatus();
}
else
{
MessageBox.Show("修改成失败");
intFalg = 0;
//tbMenthod.tb_EmpInfoFind("2",dataGridView1);
ClearControls();
ControlStatus();
}
}
if (intFalg == 3)
{
if (tbMenthod.tb_EmpInfoDelete(EmpClass) == 1)
{
MessageBox.Show("删除成功");
intFalg = 0;
tbMenthod.tb_EmpInfoFind("", 5, dataGridView1);
ClearControls();
ControlStatus();
}
else
{
MessageBox.Show("删除失败");
intFalg = 0;
ClearControls();
ControlStatus();
}
}
}
}
5.2供应商信息窗体
2. 对控件的清零状态,方便进行相关的操作,即信息初始化,代码如下:
private void ClearControls()
{
txtCompanyDirector.Text = "";
txtCompanyAddress.Text = "";
txtCompanyFax.Text = "";
txtCompanyName.Text = "";
txtCompanyPhone.Text = "";
txtCompanyRemark.Text = "";
}
2.1 通过对供应商的信息录入,并保存到数据库里面,此外应注意的是供应商的名称,联系电话,地址是必须的填写的,否则不不可以录入并进行相关操作的,如少填写一项,会弹出相应的对话框,代码如下:
public int GetCount()
{
int intReslult = 0;
if (intFalg == 1 || intFalg == 2)
{
if (txtCompanyName.Text == "")
{
MessageBox.Show("供应商名称不能为空!", "提示");
return intReslult;
}
if (txtCompanyPhone.Text == "")
{
MessageBox.Show("联系电话不能为空!", "提示");
return intReslult;
}
if (txtCompanyDirector.Text == "")
{
MessageBox.Show("地址不能为空!", "提示");
return intReslult;
}
2.2客户对相关的信息进行操作之后,需要保存到数据库,但是应注意的是相关的信息必须是准确的,避免下次信息调出的时候出现差错,因为数据库是共同享有的,所以必须保证供应商资料的准确性,通过保存之前的添加,修改,删除操作并保存到数据库的代码如下:
private void toolSave_Click(object sender, EventArgs e)
{
if (GetCount() == 1)
{
if (intFalg == 1)
{
if (CompanyMenthod.tb_CompanyMenthodAdd(Company) == 1)
{
if (intReturn == 1)
{
frmGonYingShang frmCop= (frmGonYingShang)this.Owner;
jhgood.filltProd(frmCop.treeView1,frmCop.imageList1);
ClearControls();
ControlStatus();
intFalg = 0;
this.Close();
}
MessageBox.Show("添加成功");
intFalg = 0;
CompanyMenthod.tb_CompanyFind("", 3, dataGridView1);
ClearControls();
ControlStatus();
}
else
{
MessageBox.Show("添加失败");
intFalg = 0;
CompanyMenthod.tb_CompanyFind("", 3, dataGridView1);
ClearControls();
ControlStatus();
}
}
if (intFalg == 2)
{
if (CompanyMenthod.tb_CompanyMenthodUpDate(Company) == 1)
{
MessageBox.Show("修改成功");
intFalg = 0;
CompanyMenthod.tb_CompanyFind("", 3, dataGridView1);
ClearControls();
ControlStatus();
}
else
{
MessageBox.Show("修改失败");
intFalg = 0;
CompanyMenthod.tb_CompanyFind("", 3, dataGridView1);
ClearControls();
ControlStatus();
}
}
if (intFalg ==3)
{
if (CompanyMenthod.tb_CompanyMenthodDelete(Company) == 1)
{
MessageBox.Show("删除成功");
intFalg = 0;
CompanyMenthod.tb_CompanyFind("", 3, dataGridView1);
ClearControls();
ControlStatus();
}
else
{
MessageBox.Show("删除失败");
intFalg = 0;
CompanyMenthod.tb_CompanyFind("", 3, dataGridView1);
ClearControls();
ControlStatus();
}
}
}
}
2.3客户对供应商的信息做好相关的操作之后,则方便其他客户对供应商的资料查询,可根据的供应商的名称,负责人姓名而知道所想知道的相关信息,相关的代码如下:
private void txtOK_Click(object sender, EventArgs e)
{
string P_Str_cmdtxt = String.Empty;
string P_Str_selectcondition = this.cbxCondition.Text;
if (P_Str_selectcondition == null)
{
MessageBox.Show("请选择查询条件!");
return;
}
if (this.txtKeyWord.Text == "")
{
MessageBox.Show("输入查询条件!");
return;
}
展开阅读全文