资源描述
摘要
现代高速发展的信息时代,超市管理系统己是一个超市管理者与决策者不可缺 少的管理工具,因此超市管理系统应该能够为用户提供充足的信息,便捷的操作, 快速的查询手段。
本程序是一个典型的信息管理程序,其开发过程主要包括后台数据库的建立以 及前端应用程序的开发两个方面。对于前者使用Microsoft SQL Server 2005建立 起一个集数据一致性、完整性、安全性好的数据库,而对于后者则使用Microsoft Visual Studio 2005编写易于使用,满足需求的运行程序。
整个项目主要完成对超市商品的日常管理,包括进货管理,销售管理,库存管 理,员工管理和会员管理五个方面。在功能上系统可以完成对相关信息的浏览、查 询、添加、删除、修改等功能。本课题的核心之一是销售管理、库存管理和进货管 理三者之间的联系,同时系统有完整的用户管理及权限管理功能。
关键字:数据库,控件,权限
三. 程序总体结构设计1程序结构设计
功能模块设计用户登录模块
启动程序后,首先输入用户名与密码,若用户名或密码正确则进入程序主界面, 否则程序会给出出错的信息提示。
1. 用户管理模块a)用户管理子模块
系统管理员可以对用户权限进行管理,同时对用户进行添加新用户,删除用 户,修改用户信息;本模块对普通用户不可见。
b)修改密码子模块所有登录的人员都对自己的密码进行修改。
2. 商品管理模块(系统管理员可以操作,普通用户不可见)a)进货管理子模块
可以添加新货的信息,删除货品信息,修改货品信息;同时录入进货信息是更新 库存信息。
b)库存管理子模块可以采用条件查询得到相应库存商品信息,从而依据销售及库存情况制定进货计 划。
c)销售管理子模块
负责为所有新商品销售制定计划;包括促销打折,商品价格制定等。
3. 销售录入管理模块所有用户都可以操作。可以浏览销售的商品的信息。在每次商品交易后,会
更新商品库存信息及会员消费信息。
4. 会员管理模块a)会员管理子模块
系统管理员可以对会员信息进行管理;包括增加新会员,删除会员,修改会员信 息及浏览。
b)会员信息查询子模块可以通过所给的查询条件得到相应会员的信息,并可以统计目前超市会员人数, 一直与制定销售策略。
程序设计流程图程序流程图-管理员权限如图所示:
退出系统
提示错误信息
系统设置
商品管理
会员管理
销售录入
进货管理
销售管理
库存管理
会员信息管理
会员信息查询
信 息 销
录 入
程序流程图-销售人员权限如图所示:
>输入身份证为用户名
修改密码销售信息录入
图3-2程序流程图-销售人员
程序设计功能图
超市商品程序设计是一个典型的信息管理程序,基于对前面的一系列系统功能 分析,同时考虑到本程序实际的设计特点,从而涉及实现了程序使用者对商品管理 的完整的操作管理流程的功能图。
超市管理系统
登录管理
管理人员
销售人员
修改登录密码
交易商品信息录入
会员管理
员工管理
库存管理
销售管理
进货管理
图3-3程序设计总功能图
3.2数据库设计
由于本程序设计是典型的可视化的信息管理程序,其开发主要包括数据库的建 立及应用程序的编写。关于数据库的构建主要包括数据库需求分析,概念结构设计, 数据结构设计。
数据库需求分析主要是收集基本数据及确定数据的处理要求,需求分析主要解决如下问题:"
1)数据要求:用户需要从数据库中获取什么数据,并决定在数据库中存储那些数据。
2)操作要求:明确用户对数据的操作要求,从而确定数据之间的关系。
数据库概念结构设计(E-R图)
概念模型是对于信息世界的建模,是现实世界到信息世界的抽象,是数据库设 计人员和用户之间进行交流的语言。
概念设计的目的是要确定系统的概念模型,因为概念模型是数据库系统的核心 和基础,所以概念设计是数据库设计的关键。
根据上述的数据库及程序总体分析,对E-R图进行逐步细化和设计。
1.用户实体描述E-R图
图3-4用户实体E-R图
2.会员实体描述E-R图
图3-6进货记录实体E-R图
4.销售管理实体描述E-R图
5.销售录入实体描述E-R图
3. 2. 3数据库数据结构设计
依据功能模块设计,数据库概念设计,对于本程序数据库,最终包括用户表 (UserTable),会员表(MarketMember),进货记录表(Input),销售管理表 (SaleMassage),销售录入表(Sale)。
本程序数据库名称:MarketMagSys
数据库表结构如下:
表 3-1 用户表(User Table)
字段名
字段类型
是否空
主键/外键
字段说明
User ID
Varchar (10)
Not Null
主键
用户编号
User Name
Varchar (50)
Not Null
用户名
User Pw
Varchar (50)
Not Null
用户密码
User Style
Varchar (50)
Not Null
用户权限
表 3-2 会员表(MarketMember)
字段名
字段类型
是否空
主键/外键
字段说明
Member1D
Varchar (10)
Not Null
主键
会员编号
MemberCard
Varchar (20)
Not Null
会员卡号
MemberName
Varchar (50)
Null
会员姓名
MeniberPhone
Varchar (50)
Null
会员电话
MemberAddress
Varchar (50)
Null
会员地址
RegDate
smalldatetime
Not Null
注册日期
表3-3进货记录表(Input)
字段名
字段类型
是否空
主键/外键
字段说明
StockID
Varchar (10)
Not Null
主键
进货编号
MerchlD
Varchar (10)
Not Null
外键
商品编号
MerchNum
Tnt
Not Null
进货数量
MerchPrice
Money
Not Null
单价
TotaiPrice
money
Not Null
总价
StockDate
smalldatetime
Not Null
进货日期
DealMan
Varchar (10)
Not Null
外键
办理人
Remark
Varchar (50)
Null
注明
Abstract
The development of modern high-speed information age, the supermarket management system is a supermarket managers and decision makers an indispensable management tool, the supermarket management system should be able to provide sufficient information for users, easy operation, fast query tool. This procedure is a typical information management program, its development process, including background of the establishment of the database and front-end application development aspects. The former uses Microsoft SQL Server 2005 to build a set of data consistency, integrity, security, good database, but the latter is written using Microsoft Visual Studio 2005 is easy to use, to meet the needs of running the program. The entire project was completed for the daily management of supermarket goods, including the purchase management, sales management, inventory management, staff management and management of five members. Functionally complete information system can browse, search, add, delete, modify and so on. The core of this issue is one of sales management, inventory management and purchase management links between the three, while the system has a complete user management and permissions management.
Keywords: database, control, authority表3-4销售管理表(Sal eMas sage)
字段名
字段类型
是否空
主键/外键
字段说明
MerchlD
Varchar (10)
Not Null
主键
商品编号
MerchName
Varchar (50)
Not Null
商品名称
MerchPrice
smallmoney
Null
商品价格
MerchNum
int
Null
库存数量
PlanNum
Tnt
Null
计划进货数
ProSalcPrice
smallmoney
Not Null
促销价格
ProSaleDates
smalldatetime
Not Null
促销开始
ProSaleDateE
smalldatetime
Not Null
促销结束
AllowAbate
Char (4)
Not Null
可打折
AlowSale
Char (4)
Not Null
可销售
Factory
Varchar (50)
Not Null
厂家编号
表3-5销售录入表(Sale)
字段名
字段类型
是否空
主键/外键
字段说明
MerchlD
Varchar (10)
Not Null
主键
商品编号
SaleDate
smalldatetime
Not Null
外键
销售日期
SaleNum
int
Not Null
销售数量
SumMoney
Money
Not Null
总金额
PayWay
Varchar (10)
Not Null
支付方式
Saleman
Varchar (10)
Not Null
外键
销售人
SaleTablelD
Varchar (10)
Not Null
销售单号
membercard
Char (20)
Null
会员卡号
SalelD
Varchar (10)
Not Null
销售编号
四. 程序详细设计1数据库配置
本程序设计使用SQL server 2005数据库实现后台管理。因此用SQL server 2005. NetFramework数据提供程序的sqlConnection对象连接数据库。由于在安装 SQL server 2005数据库时系统会检查配置时需要.net framework3. 0的支持,否则 在会安装报错,所以最好先安装Microsoft Visual Studio 2005
在安装SQL server 2005时需要注意:
在指定账号认证模式和设置步骤时,要采用混合模式,本程序中用户名:sa,密 码:123
在SQL server 2005数据库安装完成后为了让其他应用程序访问数据库,要做 如下设置:打开配置工具-〉SQL Server外围应用配置器-〉服务和连接的外围应用 配置器,选择MSSQLSERVER-) DATABASE ENGINE-)远程连接,选择本地连接和远程 连接,同时使用TCP/TP和named pipes如图4-2
图4-1服务和连接的外围应用配置器4.2功能模块实现
用户登录模块用户登录界面如卜-:
1)界面功能说明:为用户进入此程序系统提供的登录窗口。程序首先进行用户输入 的用户名和密码与数据库中的相应字段信息进行比较,判断其正确性,然后依据 用户名判断其相应的用户权限,若一致,则打开被屏蔽的用户操作界面,依据其 用户权限进入相应的操作界面。
2)功能实现的函数说明:在本功能中通过对Connection对象中的属性
Connectionstring设置来提供登录数据库和指向特定数据库的所需信息。设置 代码如下:
private string connectionstring = "workstation id=localhost;Integrated Securi ty=SSPI; database=MarketMagSys,/;通过定义事件方法private void loginbutt_Click()实现判断用户名与密码是否
匹配及判断向相应用户权限功能。
3) 界面主要功能代码详细设计:
private void loginbutt_Click(object sender, System. EventArgs e){ for (int i=0;i<LogTable. Rows. Count;i++)
( this.LogRow = LogTable. Rows[i];//将界面输入的用户名与密码与数据库中 字段进行比较if (LogRow[l]. ToStringO. TrimO ==this. UserNameTxt. Text. ToStringO. Trim()& &LogRow[2]. ToStringO. TrimO ==this. PwdTxt. Text. ToStringO. TrimO)
( CanLogin 二 true;
strUser = LogRow[l]. ToStringO. TrimO ;
strUserRole = LogRow[3]. ToStringO. TrimO ;
strUserId=LogRow[0]. ToStringO. TrimO ;
this. Close();
return;
)}
MessageBox. Show( 〃您输入的用户号或密码不正确! 〃);return;
}4. 2. 2程序设计主界面
程序主界面如下:
图4-4程序主界面
1) 界面功能说明:用户在登录窗口登录成功后进入此界面,在此依据主界面菜单作 为用户操作导航,用户进行相应操作。
2) 功能实现的方法说明:通过定义方法private void MainFrm_Load ()实现对用 户权限控制。通过定义事件方法private void UserMag_Click () , private void ExitSys_Click () , private void QryStatMember_Click () , private void chgpwd_Click () private void NewSell_Click () , private void InputMerch Click () , private void QryMerchStore Click () , private void SelSetlMag Cl ick () , private voidEditMem Click ()等实现界面菜单各命 令按钮功能。
如:实现用户管理菜单代码如下:(其他菜单实现方法同下)private void UserMag Click(object sender, System. EventArgs e)
( try
( UserMag UserM =new UserMag(); }
catch(Exception Ex)
( MessageBox. Show (Ex. ToString ()) ;}3)界面主要功能代码详细设计: static void Main()
(Login log = new Login();
log. ShowDialogO ;
if (Login. CanLogin==truc)
( Application. Run (new MainFrmO);}}
设置不同级别相应的主菜单状态代码如下:
private void MainFrm Load (object sender, System. EventArgs e)( this. MainstatusBar. Text 二”当前用户:"+ Login. strUser+ ”今天是:
,,+DateTime. Today;;if ( Login, strUserRole ==经理”)〃管理员级别所有菜单可见
{ this. UserMag.Enabled = true;
this. MerchStore. Enabled = true;
this.SelSetlMag. Enabled = true;
this.InputMerch. Enabled = true;
this. CountMember. Enabled = true;
this. EditMem. Enabled = true;
this.NewSell. Enabled = true;
}else if (Login. strUserRole == 〃销售人员〃)
( this. NewSell. Enabled = true;}}
用户管理模块用户管理界面如下:
图4-5用户管理界面
图4-6询问信息对话框
1)界面功能说明:此模块只对管理员可见。管理员可以对用户的信息进行浏览,添 加,删除,修改操作。管理员进行添加、修改时,程序会自动将信息插入到后台 数据库保存。
2)功能实现的方法说明:使用控件的DateBings属性调用方法Add ()实现一个空间 与一个数据元素的数据绑定。代码如下:
this. Userid. DataBindings. Add(,,Text,/, DGtable, 〃用户编码”);其他控件与其 数据进行绑定代码同上。
通过使用数据对象DateGridView来显示网格中自定义的数据,实现方法是为数 据对象添加数据源:选定相应的服务器名,找到匹配的数据库,从数据库中找到 要显示的数据库表中的字段。
3) 界面主要功能代码详细设计:
删除用户按钮实现的代码如下:
private void DelUserbutt_Click(object sender, System.EventArgs e)( //显示与用户的询问窗口代码如下:
if (MessageBox. Show(〃确实要删除这条记录吗?〃,〃询问〃,MessageBoxButtons. YesNo) == DialogResult.Yes)
( try
( if (UserAmend. Count > 0)
UserAmend. RemoveAt(UserAmend. Position);
el se
(MessageBox. Show(〃没有可以删除的数据〃,〃提示
〃,MessageBoxButtons. OK, MessageBoxIcon. Error); }
)
catch(Exception express)
( MessageBox. Show (express. ToString (), 〃提示
〃,MessageBoxButtons. OK, MessageBoxIcon. Error); }return;
}}
提交信息按钮实现的代码如下: private void SubEdi tButt Click (object sender, System. EventArgs e)( if (this. Userid. Text. Trim()= 〃〃)
( MessageBox. Show(〃用户编号不能为空!〃,〃提示”, MessageBoxButtons. OK, MessageBoxIcon. Error);
return;}
判断“用户姓名不能为空”,“用户权限不能为空”的代码设计同上(代码略)UserAmend. EndCurrentEdit ();
if (DGtable. GctChanges () != null)
( try
( this. UserMagsqlDataAdapter. Update(DGtable);}
catch (Except ion express)
( MessageBox. Show (express. ToStringO, 〃提示
”,MessageBoxButtons. OK, MessageBoxIcon. Error);this. DGtable. RejectChanges (); }
)return;
}添加新用户 添加新用户界面如下:
目录
一. 引言41课题研究意义与发展前景4
1. 2程序设计的目的与功能特点4超市管理系统程序设计总体分析5
2. 1程序总体需求分析与功能需求分析52程序设计可行性分析6
1. 3程序设计开发环境与开发工具7程序总体结构设计10
2. 1程序结构设计102数据库设计13
二. 程序详细设计221数据库配置22
3. 2功能模块实现23结束语50
三. 致谢51参考文献52
图4- 7添加新用户
图4-8错误提示信息对话框
1)界面功能说明:在用户管理界面中点击添加新用户按钮时,会链接到此界面。在 添加完用户信息时,系统会将数据插入数据库用户表中保存,并用户可以在用户 管理界面的主明细表中浏览到添加的信息。如果输入信息不符合字段设置的规 定,则提示相应的错误信息。
2)功能实现的方法说明:在本功能中通过对Connection对象中的属性 Connectionstring设置来提供登录数据库和指向特定数据库的所需信息。
private SqlConnection Connectionl = newSqlConnection(^workstationid=localhost;database二MarketMagSys;Connect! imeout=30;Trusted_Connection=yes/z);
3) 界面主要功能代码详细设计:
通过定义下列事件实现添加新用户命令按钮
private void AddUserbutt Click (object sender, System. EventArgs e)
( try
( if (this. Userid. Text != "" && this. UserName. Text != "" &&
this. UserPassword. Text != "" && this. RoleList. Text != 〃〃)( if (this. UserPassword. Text == this. ConPwd. Text)
使用SQL的插入语句向用户表中插入数据代码如下:
NewUserComrnand= "insert into
UserTable(UserID, UserName, UserPW, UserStyle) values(〃 + 〃’"
this. Userid. Text. ToStringO. Trim() +" + ”, 〃 +
this. UserName. Text. ToStringO. Trim() + 〃'〃 + 〃, " + 〃'〃 +
this. UserPassword. Text. ToStringO. TrimO + 〃'〃 +" + 〃'〃 +
this. RoleList. Text. ToStringO. TrimO + 〃'〃 + 〃)〃;
SqlCommand1 = new SqlCommand(NewUserCommand, Connectionl);
//通过ExecuteNonQuery ()函数的返回值确定是否插入成功代码如下:
int Succnum = SqlCommandl. ExecuteNonQuery();
if (Succnum > 0) MessageBox. Show(z,录入成功〃);
this. UserPassword. Text = 〃〃;
this. ConPwd. Text ="〃;
this.Userid.Text =
this. UserName. Text= 〃〃;
}
else
( MessageBox. Show(/,两次用户密码输入不一致!〃,〃提示",MessageBoxButtons. OK, MessageBoxIcon. Error);
this. UserPassword. Text =;
this. ConPwd. Text =
return;
}
}
else( MessageBox. Show(〃用户编号、姓名、密码、权限不能为空!〃,
MessageBoxButtons. OK, MessageBoxIcon. Error);
return;}
}
catch (Exception ex){ this. UserPassword. Text = 〃〃;
this. ConPwd. Text = 〃";this.UserTd. Text =
this. UserName. Text= 〃〃;
MessageBox. Sho\v("输入错误请重试!错误原因:〃+ex. ToStringO,
MessageBoxButtons. OK, MessageBoxIcon. Error);
提示〃,
〃提示〃,
return;2.修改密码
修改密码界而如下:
图4-9修改密码
图4-10修改密码错误提示信息
1)界面功能说明:此功能对管理员及普通用户都可见。用户在登录后可以对自己的 密码进行修改。程序此时检验确认两次新密码输入一致,若一致,提交到数据库 用户表中,否则,则提示密码错误并重新输入。
2)界面主要功能代码详细设计:
通过定义下列事件实现修改密码命令按钮。
private void Chgbutt_Click(object sender, System. EventArgs e)( try
{ if (this. NewPas sword. Text==this. ConPwd. Text)
{ SqlConncctl. Open ();
SqlCommand cmd=cn. CreateCommand ();//SQL语句的修改命令完成密码修改功能
cmd. CommandText=/zupdate userTable Set
UserPW=',,+NewPassword. Text. ToStringO. Trim()+〃' 〃+〃where
Userld=,"+Login. strUserId+,/, 〃;
cmd. ExecuteNonQuery ();
MessageBox. Show(〃修改成功! 〃,〃提示〃,MessageBoxButtons. OK);
}
else
{ MessageBox. Show(〃输入错误请重试!。〃提示〃,MessageBoxButtons. OK,
MessageBoxIcon. Error);}
}
catch (Exception)( }}
商品管理模块1.进货管理 进货管理界面如下:
图4-11进货管理
1) 界面功能说明:在此界面用户可以对商品的进货记录进行各种增加,删除,修改 等操作,在鼠标单击命令按钮的同时,数据完成在前台界面与后台数据库之间的数 据传递。在对此界面操作后可以在库存管理界面查询到所有与进货相匹配的数据。
2) 功能实现的方法说明:在此首先通过使用控件的DateBings属性调用方法Add () 实现一个空间与一个数据元素的数据绑定。代码如下:
this. Inputld. DataBindings. Add(,,Text,z, FinishStockdtable, 〃进货编号〃);
FinishStockCurrenAmend = (CurrencyManager)
BindingContext[FinishStockdtable]
其他控件与其数据之间的数据绑定功能实现方法同上。
3) 界面主要功能代码详细设计:
通过定义下列事件实现每个tool.button命令按钮功能。
private void EditMerchInfoTool_ButtonClick(object sender,System. Windows. Forms. ToolBarButtonClickEventArgs e) 实现“新纪录”按钮功能代码如下:
( if (e. Button. ToolTipText = 〃新记录〃)
( FinishStockCurrenAmend. AddNew();
return;}实现“删除记录”按钮功能代码如下:
if (c. Button. ToolTipText == 〃删除记录")
( if (MessageBox. ShowC确实要删除这条记录吗?〃,〃询问”,MessageBoxButtons. YesNo) == DialogResult.Yes)
( try
{ i f (Fi ni shStockCurrenAniend. Count > 0)FinishStockCurrenAmend. RemoveAt(FinishStockCurrenAmend.Position); else
( MessageBox. ShowC没有可以删除的数据","提示
”, MessageBoxButtons. OK, MessageBoxlcon. Error);)}
catch(Exception express){ MessageBox. Show (express. ToStringO, 〃提示
〃,MessageBoxButtons. OK, MessageBoxlcon. Error) ;}return;}
}
//实现“保存修改”按钮功能代码如下:
if (e. Button. ToolTipText =="保存修改〃)
( if (this. InputNumber. Text. TrimO =〃〃)//对每一字段的错误都会弹出提示信息
( MessageBox. Show(〃进货数量不能为空!",〃提示”,MessageBoxButtons. OK, MessageBoxIcon. Error);
return;)
if (this. Price. Text. Trim()=〃〃)
( MessageBox. Show(〃商品单价不能为空! 〃,〃提示
”,MessageBoxButtons. OK, MessageBoxIcon. Error);
return;}
if (this. Sum. Text. Trim()== 〃〃)
( MessageBox. Show (〃总额不能为空!",〃提示
”, MessageBoxButtons. OK, MessageBoxIcon. Error);
return;}
if (this. InputDate. Text. TrimO ==////)
{ MessageBox. Show(z,进货日期不能为空! 〃,〃提示
〃,MessageBoxButtons. OK, MessageBoxIcon. Error);
return;)
if (this. OpertionMan. Text. TrimO = "")
( MessageBox. Show(〃经手人不能为空! 〃,〃提示
”,MessageBoxButtons. OK, MessageBoxIcon. Error);
return;}
FinishStockCurrenAmend. EndCurrentEdit();
if (FinishStockdtable. GetChanges() != null)
( try
( this. FinishStocksqlDataAdaptcr. Update (FinishStockdtable) ;} 〃使用
修改语句完成修改提交功能
catch(Exception express)
( MessageBox. Show (express. ToStringO, 〃提示
”,MessageBoxButtons. OK, MessageBoxIcon. Error);
this. FinishStockdtable. RejectChanges();}
)
return;)实现“取消修改”命令按钮功能代码如下:
if (e. Button. ToolTipText == 〃取消修改〃)( try
( FinishStockCurrenAmend. CancelCurrentEdit() ;}
catch(Exception express)
{ MessageBox. Show (express. ToString (), 〃提示”, MessageBoxButtons. OK, MessageBoxIcon. Error);}
return;}if (e. Button. ToolTipText = 〃退出")
(this. CloseO ; }实现“上一记录”命令按钮功能代码如下:
if (e. Button. ToolTipText == 〃上一记录〃){ if (FinishStockCurrenAmend. Position > 0)
( this. FinishStockDGrid. UnSelect(FinishStockCurrenAmend. Position);
FinishStockCurrenAmend. Position—;
this. FinishStockDGrid. Select(FinishStockCurrenAmend. Position);
this. FinishStockDGrid. CurrcntRowIndcx =FinishStockCurrenAmend. Position;
)
return;}实现〃下一记录〃命令按钮功能代码如下:
if (e. Button. ToolTipText == 〃下一记录〃)( if (FinishStock
展开阅读全文