资源描述
石家庄科技信息职业学院
顶岗实习岗位技术工作论文
进销存系统设计与实现
学 号: 121404203
姓 名: ***
专 业: 软件技术
年 级: 12软件
企业指导老师:
二〇一五年三月
题 目
企业指导教师
评 语
指导教师 (签章)
年 月 日
摘 要
随着现代工业的发展,计算机信息企业管理系统越来越受到企业的重视,本系统是根据企业的特点,集进、销、存于一体的进销存管理软件。在设计过程中最大限度的满足用户的要求,因此,该系统具有较强的实用性。本系统界面友好,操作简单,可维护性强,功能完备。本系统介绍了进销存管理信息系统开发的全过程,主要从管理思想、系统分析说明、系统使用说明、技巧与体会等方面对管理系统加以论述。前言部分指明了选题背景和开题意义;而后有详细介绍了系统的分析、系统的开发与设计说明等内容;最后给出了系统的心得体会。本系统开发以SQL Server 2005为后台数据库的进销存管理系统。
关键词:.NET Framework 3.5; C/S; 进销存
目 录
1绪论 1
2 系统概述 2
2.1系统需求分析 2
2.1.1 系统需求概述 2
2.2 系统功能需求 2
2.2.1 登录管理模块 2
2.2.2 资料管理模块 2
2.2.3 进货管理模块 2
2.2.4 销售管理模块 2
2.3 用户角色分析 3
3 系统总体设计 3
3.1系统流程分析 4
3.2操作流程图分析 5
3.3软件模块结构设计 5
3.3.1 系统方案确定 5
3.3.2 软件结构设计 5
3.4数据库的设计 7
3.4.1概念结构设计 7
3.4.2表结构设计 9
3.4.3触发器设计 13
3.4.4存储过程设计 13
4 系统的实现 15
4.1 系统的登录界面 15
4.2 系统主界面 16
4.3 货物信息界面 16
4.4 供应商信息维护界面 18
4.5 进货入库界面 19
4.6 入库商品查询界面 22
4.7 销售出库界面 24
总 结 26
致 谢 27
参考文献 27
1绪论
中小企业在我国经济发展中具有重要地位,目前我国的中小企业数量较多、地区分布广泛、行业分布跨度大,随着全球经济一体化的发展及中国加入WTO,中小企业将面临外资企业的和国外产品与服务的严峻挑战,比较而言,外资企业具有更为雄厚的资金实力、丰富的管理经验和先进的技术手段,因此,如果我国的中小企业不借助先进的管理思想转变经营理念、使用信息化手段提高企业的管理水平和工作效率,将很难在今后的国际竞争中取胜利。企业管理在很多方面、很大程度上都必须借助信息化的工具来完成,采用电脑管理进货,库存和销售等诸多环节也已成为必然趋势。为了适应这种形式,中小企业不仅要有一定的硬件的基础,还要有一套完整的进销存管理系统。而要实现这一功能,就要求中小企业管理者配备一套高效的进销存管理系统,以方便对信息资源进行高效的管理。
通过设计开发,本系统分为普通用户和超级用户,实现了普通操作员能根据超级用户(管理员)分配的权限进行进货入库,销售出库等相应的操作。超级用户能进行所有的操作,完善商品信息,添加修改用户权限等。
经过分析,我们使用Microsoft公司的Visual Studio 2005开发工具,Visual studio 2005是企业级开发管理工具,也是Visual Studio产品发布10年来最具有革命意义的一次升级。它的优点不胜枚举,其中最突出的三点是商务智能(BI
)、可编程性和安全性。非常适合进销存系统的开发。
2 系统概述
2.1系统需求分析
2.1.1 系统需求概述
进销存管理系统目前应用越来越普遍,几乎每个企业都具有相应的进销存管理系统,该项目开发的软件为红铭电脑销售公司的进销存管理系统软件,是鉴于目前公司的业务不断扩大,公司先前的纯文本式管理以不能满足公司的日常事物管理,为提高公司的运转效率,公司对业务和员工管理的自动化与准确化的要求日益强烈背景下构思出来的。
2.2 系统功能需求
2.2.1 登录管理模块
此模块是系统的用户管理模块,本模块分两种身份登录普通用户和超级用户,用户不必选择身份,系统会自动识别登陆身份。输入用户名和密码,验证正确后方可进入系统。
2.2.2资料管理模块
资料管理模块主要用于对公司人员、商品的基本信息、供货商的基本信息、客户的基本信息等进行维护。
2.2.3进货管理模块
该模块主要用于实现商品进货数据录入、退货数据录入和相应的查询。
2.2.4销售管理模块
该模块主要是用于实现商品的销售数据录入、客户退货数据录入和销售信息查询。
2.3 用户角色分析
本系统主要面向两类用户:普通用户和超级用户,不同的用户对系统的需求则不同如下:
(1)普通用户对功能的需求普通用户登录后可对系统进行进货,入库货物查询,销售出库出库货物查询操作等基本操作。
(2)超级用户对系统的需求超级用户登录后可以对系统进行所有的操作,包括商品信息维护,公司人员管理,销售入库,销售出库,出库货物查询,权限设置等。
3 系统总体设计
3.1系统流程分析
为了更清楚地说明系统框架,以便更好地说明设计该系统的解决方案,我们给出了系统流程图,如图3.1。系统流程图展示了该系统所有功能模块之间的逻辑关系,其中的各个功能模块基本上都代表了一个或多个独立的页面,并将在下面的的系统设计阶段得到体现。
系统用户
是否登录
分配权限
否
是
管理员用户权限
分配
普通用户操作权限
操作模块中的数据
操作所有模块
资料管理
进货管理
销售管理
.......
........
........
3.1系统流程图
由流程图可以看出,使用者首先通过登录管理模块进行身份验证,验证通过后,系统会根据该使用者的账户信息进行授权。如果是超级用户,则为其提供全部模块的使用权限,如果是普通用户,则为其开放对相应模块的权限。
3.2操作流程图分析
用户进入系统首先打开起始页登陆界面。输入用户名和密码即可进入系统界面,超级用户,通过导航可以操作其他功能。使用普通用户身份登录输入用户名和密码进入系统界面,只能操作超级用户为其分配的模块。
3.3软件模块结构设计
3.3.1 系统方案确定
通过对系统的调研与分析,系统主要完成的功能有:资料管理、进 货管理、销售管理、报表管理、权限管理、系统帮助。
3.3.2软件结构设计
本系统是执行时,先根据不同的操作人员的需要来进行相应的模块,然后可以输入数据或者进行其它的查询和浏览等操作。总体来说,本系统属于进销存管理系统
资料管理
销售管理
销售管理
报表管理
权限管理
数据备份
系统帮助
一个事务型管理系统。系统结构图3.3.2所示
资料管理
人员管理
商品信息维护
客户信息维护
供应商信息维护
进货管理
进货入库
退货出库
进货商品查询
退货商品查询
销售管理
销售出库
退货入库
出库商品查询
客户
退货商品查询
3.3.2系统结构图
3.4数据库的设计
3.4.1概念结构设计
概念结构设计的重点在于信息结构的设计,它是整个数据库系统设计的关键。它独立于逻辑结构设计和DBMS。现实世界中一组具有某些共同特性和行为的对象就可以抽象为一个实体。对象类型的组成成分可以抽象为实体的属性。为此本系统从业务逻辑数据流中抽象出各个实体:普通用户、超级用户、客户、入库货物等。并根据系统实际确定各实体之间的关系。
进销存管理系统中用户与货物的E-R图:
普通用户
查询
货物
添加
货物
图3.4.1 E-R图
普通用户与货物这两个实体是多对多联系;一位普通用户要添加多种货物,一种货物可以由多位普通用户可以添加。
超级用户与货物的E-R图
超级用户
查询
货物
添加
货物
删除
货物
图3.4.2 E-R图
数据流层图
超级用户(管理员)
进货入库
返回 数据
信息 信息
删除入库货物
销售出库
返回信息 数据信息
修改命令 返 修 返回信息
回 改
信 命
息 令
删除出库货物
图3.4.3超级用户管理货物DFD图
3.4.2表结构设计
在需求分析,系统分析的工作完成后,接下来就是数据库的设计了。数据库设计是整个数据库应用系统开发过程中一个重要环节,在设计数据库表结构之前,首先要创建一个数据库,数据库采用Microsoft 推出的SQL 2005的数据库。
表3.9这个表是用来记录供货商信息的。
表3.9供货商清单
编号
字段名称
数据结构
是否为空
关键字
1
供应商号
Char(10)
否
是
2
拼音编码
Char(10)
是
否
3
名称
Varchar(20)
否
否
4
地址
Varchar(20)
是
否
5
邮编
Char(4)
是
否
6
区号
Char(4)
是
否
7
类型
Char(10)
是
否
8
电话
Varchar(20)
是
否
9
传真
Varchar(12)
是
否
表3.10表是用来记录以入库货物的信息的
表3.10进货入库
编号
字段名称
数据结构
是否为空
关键字
1
订单号
Char(14)
否
是
2
供货商号
Char(10)
是
否
3
业务员
Char(10)
是
否
4
拼音编码
Char(10)
是
否
5
货物名称
Char(10)
是
否
6
货物数量
int
是
否
7
货物单位
Char(10)
是
否
8
进价
Money
是
否
9
进货日期
Datetime
是
否
10
税额
Numeric(28,6)
是
否
表3.11客户清单是用来记录客户信息的。
表3.11客户清单
编号
字段名
数据类型
是否为空
关键字
1
客户编号
Char(10)
否
是
2
拼音编码
Char(10)
是
否
3
名称
Varchar(20)
是
否
4
地址
Varchar(20)
是
否
5
邮编
Char(6)
是
否
续表:
6
区号
Char(6)
是
否
7
地区
Char(6)
是
否
8
电话
Varchar(12)
是
否
9
传真
Varchar(12)
是
否
10
业务员
Char(10)
是
否
表3.12人员管理是用来管理公司职员的。
表3.12人员管理
编号
字段名
数据类型
是否为空
关键字
1
姓名
Char(10)
否
是
2
工作类型
Char(10)
是
否
3
职位
Char(10)
是
否
4
文化程度
Char(10)
是
否
5
工作经验
Char(10
是
否
6
单位
Char(20)
是
否
表3.13商品清单是用来记录商品信息的。
表3.13商品清单
编号
字段名
数据类型
是否为空
关键字
1
货号
Char(14)
否
否
2
拼音编码
Char(10)
是
否
3
品名
Char(15)
否
是
4
单位
Char(6)
是
否
5
产地
Varchar(50)
是
否
6
类别
Char(20)
是
否
7
进货价
Money
是
否
8
销售价
Money
是
否
9
最低销价
Money
是
否
续表:
10
税额
float
是
否
11
剩余数量
int
是
否
表3.14退货出库是用来记录以退货物的信息的。
表3.14退货出库
编号
字段名
数据类型
是否为空
关键字
1
订单号
Char(14)
否
是
2
供货商号
Char(10)
是
否
3
业务员
Char(10)
是
否
4
拼音编码
Char(10)
是
否
5
货物名称
Char(10
是
否
5
退货数量
Int
是
否
6
退货单位
Char(10)
是
否
7
退货价格
Money
是
否
8
退货日期
datetime
是
否
表3.15退货入库是用来记录客户退货入库信息的。
编号
字段名
数据类型
是否为空
关键字
1
订单号
Char(14)
否
是
2
客户编号
Char(14)
是
否
3
退货产品
Char(10)
是
否
4
退货数量
Int
是
否
5
货物单位
Char(10)
是
否
6
退货日期
Datetime
是
否
7
业务员
Char(10)
是
否
续表:
8
退货价格
money
是
否
表3.15退货入库
表3.16销售出库是用来记录以买出货物信息的。
表3.16销售出库
编号
字段名
数据类型
是否为空
关键字
1
订单号
Char(14)
否
是
2
客户编号
Char(10)
是
否
3
销售产品
Char(10)
是
否
4
销售数量
Int
是
否
5
销售日期
Datetime
是
否
6
业务员
Char(10)
是
否
7
销售价格
Money
是
否
8
最低价格
Money
是
否
9
税额
Char(10)
是
否
10
货物单位
Char(10)
是
否
表3.17用户清单是用来记录用户信息的。
表3.17用户清单
编号
字段名
字段类型
是否为空
关键字
1
用户名(主键)
Char(10)
否
是
2
密码
Char(10)
否
否
3
说明
Char(8)
是
否
3.4.3触发器设计
为了使系统的使用尽量简单,减少用户的输入工作量,同时提高系统的工作效率。根据实际需求设计如下触发器:
1. 触发器Buy , Sell 用途:在卖出和进货时,自动更改商品的数量。
Create trigger [buy]
on [dbo].[进货入库] for insert,update
as
declare @num int
select @num=货物数量from inserted
update 商品清单
set 剩余数量=((select 剩余数量from 商品清单where 品名=(select 货物名称from inserted))+@num)
where 品名=(select 货物名称from inserted)
Create trigger [sell]
on [dbo].[销售出库] for insert,update
as
declare @num int
select @num=销售数量from inserted
update 商品清单
set 剩余数量=((select 剩余数量from 商品清单where 品名=(select 销售产品from inserted))-@num)
where 品名=(select 销售产品from inserted)
3.4.4存储过程设计
存储过程提供了数据驱动应用程序中的许多优点,使用它数据操作可以封装在单个命令中,为获取最佳性能而进行优化并通过附加安全性得到增强。根据实际需求设计如下存储过程:
1.用途:断开数据库的连接。
Create proc p_killspid
@dbname varchar(200) --要关闭进程的数据库名
as
declare @sql nvarchar(500)
declare @spid nvarchar(20)
declare #tb cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #tb
fetch next from #tb into @spid
while @@fetch_status=0
begin
exec('kill '+@spid)
fetch next from #tb into @spid
end
close #tb
deallocate #tb
go
2.用途:备份数据库。
Create proc rstsky
@pl1 int
as
if @pl1 = 1
begin
RESTORE DATABASE [sky] FROM DISK = N'C:\backUp\sky.bak'
end
else if @pl1 =2
begin
RESTORE DATABASE [sky] FROM DISK = N'D:\backUp\sky.bak'
end
else if @pl1 =3
begin
RESTORE DATABASE [sky] FROM DISK = N'E:\backUp\sky.bak'
end
else
RESTORE DATABASE [sky] FROM DISK = N'F:\backUp\sky.bak'
4 系统的实现
经过前面的精心准备,现在我们终于可以进行系统的实现阶段了,本节我们将首先进行系统的界面设计,下面就将这些页面分别进行介绍。
4.1 系统的登录界面
1) 用户登录界面
代码如下:
public static DataTable Description;
int i =0; //用于记载登陆的次数
private void button1_Click(object sender, EventArgs e)
{
if (i<2)
{
Program.mycon = new SqlConnection("Data Source=.; Initial Catalog=Sky; Integrated Security=True");
Program.mycon.Open();
Program.mycommand = new SqlCommand("select * from 用户清单 where 用户名='" + this.textBox1.Text + "' and 密码='" + this.textBox2.Text + "'",Program.mycon);
SqlDataReader myread =Program.mycommand.ExecuteReader();
myread.Read();
if (myread.HasRows)
{
linkDataBase.userName = this.textBox1.Text;
linkDataBase.userPwd = this.textBox2.Text; //记载当前用户名和密码
Description = Program.linkTb("select 说明 from 用户清单 where 用户名 ='" + this.textBox1.Text + "'", "用户清单");
linkDataBase.userDes = Description.Rows[0][0].ToString(); //用于记载是否是超级用户
Mainform a = new Mainform();
this.Hide();
a.Show();
}
else
{ 、
i+=1;
MessageBox.Show("用户名或密码错误,还有" +(3-i)+ "次机会", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Question);
}......
4.2 系统主界面
代码如下:
private void Mainform_Load(object sender, EventArgs e)
{
try
{
string week = "";
DateTime Date = System.DateTime.Now;
week = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(Convert.ToDateTime(Date).DayOfWeek);
this.notifyIcon1.ShowBalloonTip(2, "HM进销存管理系统", "今天是:" + System.DateTime.Now.ToString("D") + " " + week + " 欢迎您的使用", ToolTipIcon.Info);
string txt = "select * from 用户权限表 where 用户名='" + linkDataBase.userName + "'"; //判断用户的权限
string table = "用户权限表";
myTable = Program.linkTb(txt, table);
}......
4.3货物信息界面
图4.3 货物信息主页面
代码如下:
public Goods()
{
InitializeComponent();
}
private void Fill1()
{
this.textBox11.DataBindings.Add("Text", dataGridView1.DataSource, "货号");
this.textBox12.DataBindings.Add("Text", dataGridView1.DataSource, "拼音编码");
this.textBox13.DataBindings.Add("Text", dataGridView1.DataSource, "品名");
this.textBox14.DataBindings.Add("Text", dataGridView1.DataSource, "单位");
this.textBox15.DataBindings.Add("Text", dataGridView1.DataSource, "产地");
this.textBox16.DataBindings.Add("Text", dataGridView1.DataSource, "类别");
this.textBox17.DataBindings.Add("Text", dataGridView1.DataSource, "进货价");
this.textBox18.DataBindings.Add("Text", dataGridView1.DataSource, "销售价");
this.textBox19.DataBindings.Add("Text", dataGridView1.DataSource, "最低售价");
this.textBox20.DataBindings.Add("Text", dataGridView1.DataSource, "税额");
}
private void Goods_Load(object sender, EventArgs e)
{
bindingSource1.DataSource= linkDataBase.link("select * from 商品清单", "商品清单 ");
bindingNavigator1.BindingSource = bindingSource1;
dataGridView1.DataSource = bindingSource1;
Fill1();
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = null;
string txt = "";
if (toolStripTextBox1.Text.Trim() =="")
{
txt = "select * from 商品清单";
}
else
{
txt = "select * from 商品清单 where 拼音编码 like '" + this.toolStripTextBox1.Text.Trim() + "%'";
}
bindingSource1.DataSource = linkDataBase.link(txt, "供货商清单");
dataGridView1.DataSource = bindingSource1;
bindingNavigator1.BindingSource = bindingSource1;
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
dataGridView1.CurrentCell = null;
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
dataGridView1.EndEdit();
bindingSource1.EndEdit();
if (linkDataBase.mytable.GetChanges()!=null)
{
linkDataBase.mysql.Update(linkDataBase.mytable);
MessageBox.Show("数据保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
return;
}
}
private void toolStripButton3_Click(object sender, EventArgs e)
{
商品信息report goods = new 商品信息report();
goods.Show();
}
4.4供应商信息维护界面
图4.4 供应商信息主界面
代码如下:
private void Provider_Load(object sender, EventArgs e)
{
bindingSource1.DataSource=linkDataBase.link("Select * from 供货商清单","供货商清单");
bindingNavigator1.BindingSource = bindingSource1;
dataGridView1.DataSource = bindingSource1;
......
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = null;
string txt = "";
if (toolStripTextBox1.Text.Trim() == "")
{
txt = "select * from 供货商清单";
}
else
{
txt = "select * from 供货商清单 where 供货商号 like '" + this.toolStripTextBox1.Text.Trim() + "%'";
}
bindingSource1.DataSource = linkDataBase.link(txt, "供货商清单");
dataGridView1.DataSource = bindingSource1;
bindingNavigator1.BindingSource = bindingSource1;
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
dataGridView1.CurrentCell = null;
dataGridView1.CommitEd
展开阅读全文