1、 中小型超市管理系统 61 2020年5月29日 文档仅供参考 目录 第1章 绪论 1 1.1社会背景 1 1.2超市背景 1 1.3可行性分析 1 第2章 系统需求分析 3 2.1 用户功能需求分析 3 2.2 系统性能要求 3 2.3 系统用例图分析 4 第3章 系统概要设计 7 3.1 设计思想 7 3.2 系统功能结构图 7 3.3 系统功能模块分析 7 3.3.1 营业模块 7 3.3.2 店铺管理员模块 7 3.3.3 超级管理员模块 7 3.3.4 会员管理模块 8 3.4 设计原则 8 3.5
2、 业务流程分析 8 第4章 系统详细设计 13 4.1 数据库设计 13 4.2 系统功能设计 17 第5章 系统测试运行 33 5.1 模块测试 33 5.2 整体测试 33 第6章 总结 34 参考文献 35 致谢辞 36 第1章 绪论 1.1社会背景 随着现代科学技术的迅猛发展,计算机技术已经渗透到各个领域,成为各行业必不可少的工具,特别是Internet技术的推广和信息高速公路的建立,使IT产业在市场竞争中越发显示出其独特的优势,步入信息化时代,有巨大的数据信息等待加工处理和传输,这使得对书数据库的进一步开发和利用显得尤为迫切。 作为国内市场的一些中小型超
3、市,它们在信息化过程中的步伐要落后于大中型超市,而对于这些企业的资源管理,信息的存储和处理也显得迫切需要,要适应市场竞争,就需要有高效的处理方式和管理方法,因此加快超市的信息化进程是必可少的。 实习期间,我经过对市场的调查,针对现在各中小型超市对经营业务和人事管理的实际需要,开发了这套超市管理系统。在开发过程中,我们针对当前各超市管理的特点和技术人员的实际水平,采用基于Windows图形用户界面这一易学易用的操作环境,在系统设计过程中,我们尽量采用易懂易读的人机界面,使用户能够在短期内完全掌握。我又始终发系统的正确性放在首位,力求数据的完整和处理的正确性。在此基础上优化程序代码,加速系统运行
4、和减少对系统资源的占用。 1.2超市背景 在中国超市形成在20世纪90年代初期,现在已经成为中国零售业的一种重要形态,为国民经济的发展发挥了重要的作用。随着超市高速的发展,其经营管理也变得愈加复杂,早期的售货员站柜台的形式早已不能满足现有销售也的发展,这样就迫切地需要引入新的管理技术。 超市形态具有种种优点,但在当前状况下,它仍存在零售业企业所共有的落后的一面,如:不能有效地管理每种商品,收款结算速度慢,容易出现营业差错,不宜进行商品调价,盘点效率低等,而且在超市日常管理中,商品的进、销、存等决策以经验为主,缺乏实时分析功能,管理人员对及时传递资料的要求始终得不到满足。苏辙超市形态的高速
5、发展,其经营管理也变得愈加复杂,日常所需要处理的数据量也逐渐增大,商业运转的中间环节也越来越多,原始的人工管理已无法应对这复杂的市场。为此,在选题过程中,我选择了超市管理系统设计题目,依靠现代化的计算机信息处理技术来管理超市,从而节省了大量的人力、物力,改进了员工的工作条件,减轻了劳动强度,而且能够快速反映出商品的进、销、存等状况和各种反馈信息分析,使管理人员快速对市场的变化做出相应的决策,加快超市经营管理效率。 1.3可行性分析 1.技术可行性分析:该系统采用 Microsoft Visual Studio 作为开发工具,它们功能强大、开发简便,支持.NET 4.0 Framewor
6、k、LINQ技术和AJAX技术。特别是LINQ技术更方便编程人员对数据库中的数据进行操作,使开发效率更高。利用Microsoft SQL 软件作为数据库软件,SQL 的强大和易用性联合VS 在实现上更加方便。因此超市管理系统在技术上是可行的。 2.经济可行性分析:因为经过网络传递销售信息能够不受距离的限制,因此能够借阅许多的人力和物力,方便管理,由此能够减少不必要的开支,同时该系统能够提高超市的销售效率,即提高了超市的经济效益,因此从经济上完全是可行的。 3.操作可行性分析:本系统采用基于Windows的图形用户界面,而该系统是大家熟悉的操作系统,对于那些有一般的计算机知识的人员就能
7、够轻松上手。而整个超市管理系统采用最友好的交互界面,简介明了,不需要对数据库进行深入的了解。 第2章 系统需求分析 2.1 用户功能需求分析 该系统主要针对四种用户的登录使用,分别是营业员,店铺管理员,超级管理员,会员管理员。她们分别实现以下功能: 营业员经过刷条形码显示商品的所有信息,包括价格和折扣率,自动根据所有商品计算出商品总额,支付时如果有会员卡能够用会员卡里的现金支付或者使用会员卡的积分打折,结完账后自动更新会员卡中的金额和积分。当遇到顾客突然不要某些商品时能够进行该商品的删除,或者当顾客要重新回去拿某些忘买的
8、商品时能够对该顾客的账单进行挂单操作。当营业员离开时能够锁定系统,重新进入系统需要输入密码。还能够进行换岗操作。 店铺管理员能够注册营业员的信息,也能够对自己账户的信息进行修改。能够对营业员的信息进行管理,能够对不同营业员的营业信息进行查询,包括勤务考核和营业状况,同时还能够对营业利润查询,包括按日查询和按月查询,统计利润总额。对商品进行管理,包括添加商品,管理商品,添加商品类型,管理商品类型,添加货源公司,管理货源公司。对超市存货进行查看,能够显示商品数量低于一定值的商品。 超级管理员能够对分店进行管理,查看分店的营业情况。对分店管理员进行注册和管理,对会员积分,会员折扣和会员期限的设置
9、对个人信息的修改。 会员管理员添加会员,管理会员,会员卡的充值,挂失,解锁,挂失。 2.2 系统性能要求 1.安全性 该系统的安全性主要是防止她人非法进入系统,从而保证了数据的安全性,数据存储的完整性和数据的可靠性。设置四种不同的身份进行登录,超级管理员,店铺管理员,营业员和会员管理员;系统也设立了数据备份和恢复机制,从一定程度上能够降低数据的损坏程度。 2.高效性 使用超市管理系统能够快速查询超市的营业情况以及每个营业员的考勤及营业情况,还能够查看货物的剩余和销售情况,能够适时的根据货物的营业情况进行调整进货措施。 3.便捷性 本系统的界面友好,操作方便,能够达到所见即所
10、得的效果,方便用户的使用。 2.3 系统用例图分析 整个超市管理系统分为四个模块,营业模块,店铺管理员模块,超级管理员模块和会员管理模块。 营业模块用例图如图2-1所示: 图2-1 营业模块用例图 店铺管理员模块用例图如图2-2所示: 图2-2 店铺管理员模块用例图 超级管理员模块用例图如图2-3所示: 图2-3 超级管理员模块用例图 会员管理模块用例图如图2-4所示: 图2-4会员管理模块用例图 第3章 系统概要设计 3.1 设计思想 1.系统分成几个相对独立的模块,但这些模块都进行集中式管理。 2.分层的模块化程序设计思想,整个
11、系统采用模块化结构设计。作为应用程序有较强的可操作性和扩展性。 3.数据流设计,在应用系统设计中,相对独立的模块间以数据流相互连接,使各模块间的耦合性较低,方便系统运行,提高系统安全性。 3.2 系统功能结构图 系统总体结构如图3-1所示: 图3-1 超市管理系统功能结构图 3.3 系统功能模块分析 本系统主要分为营业模块,店铺管理员模块,超级管理员模块和会员管理模块四个功能模块。 3.3.1 营业模块 能够自动计算商品总额,根据会员卡对商品进行打折。使用会员卡支付,打印回单等 3.3.2 店铺管理员模块 能够对自己和营业员的信息进行修改和管理;能够对不同营业员的营
12、业信息进行查询,包括勤务考核和营业利润;还能够查询总的营业利润,对商品进行添加,修改,商品类型的添加和修改和货源公司的添加和修改;查看商品库存。 3.3.3 超级管理员模块 能够对分店进行管理,查看分店的营业情况。对分店管理员进行注册和管理,对会员积分,会员折扣和会员期限的设置。 3.3.4 会员管理模块 能够添加会员,管理会员,对会员卡的充值,挂失,解锁,挂失。 3.4 设计原则 为了使本系统功能齐全完备,操作简便,最大限度的提高软件的质量,从而满足用户的实际需要,在设计开发过程中遵循了如下原则: 1.合法性原则:依据产品核算系统的工作规定以及要求,参照核算实
13、际的工作情况,进行诸如产品进货、销售等工作。 2.实用性原则:适合产品信息管理工作的实际需求,并能够处理一些特殊情况的要求,另外,尽可能预留空间,以便扩充功能。 3.准确性原则:对输入的相关资料建立检错机制,及时报错,使用户能够及时准确的输入合法资料。 4.易操作原则:要求设计的系统功能齐全,界面友好,操作方便,必要的地方进行提示。 5.安全性原则:能够为该系统的用户设置用户权限。 3.5 业务流程分析 超市管理系统主要是是以先进的管理理念和科学的计算机技术来取代原始的手工操作。在新系统开发前,我们对这个超市管理系统业务流程进行了系统的调查,得出了下面的几个业务模块的流程图。 营
14、业员模块流程图如图3-2所示: 图3-2 营业界面流程图 店铺管理员模块流程图如图3-3所示: 图3-3 店铺管理员流程图 超级管理员模块流程图如图3-4所示: 图3-4 超级管理员流程图 会员管理模块流程图如图3-5所示: 图3-5 会员管理员流程图 第4章 系统详细设计 4.1 数据库设计 数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响。合理的数据库结构设计能够提高数据存储的效率,保证数据的完整和一致
15、 本系统主要用到了以下8张表: 1.用户信息表: 图4-1 用户表 2.用户日志表: 图4-2 用户日志表 3.销售日志表: 图4-3 销售日志表 4.会员表: 图4-4 会员表 5.会员日志表: 图4-5 会员日志表 6.会员管理日志表: 图4-6 会员日志管理表 7.商品信息表: 图4-7 商品信息表 8.货源信息表 图4-8 货源信息表 4.2 系统功能设计 登录界面: 图4-9 登录界面 代码说明: public partial class Login : Form {
16、 public static string username = null; public Login() { InitializeComponent(); } LoginAndUser l = new LoginAndUser(); public static DateTime lasttime; public static int flag=0; private void button1_Click(object sen
17、der, EventArgs e)//登陆 { username = ID.Text.Trim(); string password = Pwd.Text.Trim(); lasttime = DateTime.Now; if (l.judgeUsernameIsExist(username) == true)//判断是否存在该用户名 { if (l.judgeUserNameAndPassword(usernam
18、e, password) == true)//判断用密码是否正确 { if (l.getUserAllow(username) == 1)//用户允许位为1 { if (l.getUserFlag(username) == 0)//标志位0,被禁用 { MessageBox.Show("不好意思,该账号已被禁用!", "提
19、示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); } else { string shopName=l.getShopNameByUsername(username); int shopID=l.getShopIDByName(shopName);
20、 if (l.getShopFlag(shopID) == 1) { l.AddLoginCount(username);//增加用户登录次数 if (l.getUserTypeName(username) == "营业员") {
21、 this.Hide(); Choice c = new Choice(); c.ShowDialog(); } else if (l.getUserTypeName(username) == "分店管理员") {
22、 l.UpdateLastLoginTime(username); this.Hide(); ShopManageStage ab = new ShopManageStage(); ab.ShowDialog(); }
23、 else if (l.getUserTypeName(username) == "超级管理员") { l.UpdateLastLoginTime(username); this.Hide(); SuperManageBStage sm = new SuperManageBStage();
24、 sm.ShowDialog(); } else if (l.getUserTypeName(username) == "会员管理员") { l.UpdateLastLoginTime(username);
25、 this.Hide(); MemberCenter m = new MemberCenter(); m.ShowDialog(); } } else {
26、 MessageBox.Show("该商店已禁用!", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); } } } else //密码错误 { MessageBox.Show("待审核。。。。", "提示", MessageBoxButtons.OKCancel
27、 MessageBoxIcon.Information); } } else { if (MessageBox.Show("密码错误!", "警告", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information) == DialogResult.Retry) { Pwd.Cle
28、ar(); } } } else { if (MessageBox.Show("用户名不存在!", "警告", MessageBoxButtons.RetryCancel, MessageBoxIcon.Information) == DialogResult.Retry) { ID.Clear();
29、 Pwd.Clear(); } } } private void button2_Click(object sender, EventArgs e)//退出 { Application.Exit(); } private void ID_TextChanged(object sender, EventArgs e)//显示头像 { string username = ID.T
30、ext.Trim(); if (l.judgeUsernameIsExist(username) == false) { errorProvider1.SetError(ID, "用户名不存在"); } else { errorProvider1.SetError(ID, null); } if (l.judgeUsernameIsExist(us
31、ername) == true) { string path = Application.StartupPath.Substring(0, Application.StartupPath.Substring(0, Application.StartupPath.LastIndexOf('\\')).LastIndexOf('\\')); pictureBox1.Image = Image.FromFile(path + "\\" + l.getUserPhotoUrlByUsername(userna
32、me)); Pwd.Focus(); } else pictureBox1.Image = null; } private void Login_Load(object sender, EventArgs e) { ID.Focus(); if (l.judgeIsEnableRegister() == true) label4.En
33、abled = true; else label4.Enabled = false; } // public static int register; private void label4_Click(object sender, EventArgs e)//注册 { //register = 1;//从登陆页点击 // this.Hide(); Register r = new Regi
34、ster(); r.ShowDialog(); } private void Login_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason != CloseReason.UserClosing) return; DialogResult da = MessageBox.Show("确定退出登陆吗? ", "提示", MessageBoxButtons.OKCancel,
35、 MessageBoxIcon.Question); if (da == DialogResult.OK) { Application.Exit(); } else { e.Cancel = true; } } } 营业界面: 图4-10 营业界面 部分代码说明: 条形码部分: private void textBox1_TextC
36、hanged(object sender, EventArgs e) { string GoodsNO=textBox1.Text.Trim(); int shopID = l.getShopIDByName(l.getShopNameByUsername(username)); if (l.judgeGoodsIsExist(GoodsNO,shopID)) { dataGridView1.Rows.Add(1);
37、 string goodsName = l.getGoodNameByNO(GoodsNO,shopID); double sellprice = l.getGoodSellPriceeByNO(GoodsNO, shopID); double preprice = l.getGoodPrePriceByNO(GoodsNO, shopID); string spe = l.getGoodSpecificationByNO(GoodsNO, shopID);
38、 double dis = l.getGoodDisCountByNO(GoodsNO, shopID); // dataGridView1.AllowUserToAddRows = true; // dataGridView1.AllowUserToAddRows = true; dataGridView1.CurrentRow.Index dataGridView1.Rows[count].Cells[0].Value = GoodsNO;
39、 dataGridView1.Rows[count].Cells[1].Value = goodsName; dataGridView1.Rows[count].Cells[2].Value = sellprice; dataGridView1.Rows[count].Cells[3].Value = 1;//数量默认是1 dataGridView1.Rows[count].Cells[4].Value = spe; dataGridView1.Ro
40、ws[count].Cells[5].Value = dis; double number=Convert.ToDouble(dataGridView1.Rows[count].Cells[3].Value); double heji = sellprice * dis * number ;//获取此商品的总额 dataGridView1.Rows[count].Cells[6].Value = heji; ++count; shij
41、i += heji;//累加合计值 yingshou = shiji;//总额赋值给实际应收值 profit += (heji-number*preprice) * 1;//一次交易所得利润 yingshou = Convert.ToDouble(string.Format("{0:F2}", yingshou));//实际应收值保留两位小数 label16.Text = string.Format("{0:C}", shiji);//总额
42、 label24.Text = string.Format("{0:C2}", yingshou); //应收 //利润,商品数量递减,所卖商品日志 textBox1.Clear(); } } 结账部分代码: private void button2_Click(object sender, EventArgs e)//结账 { if
43、 (isMember == true)//如果是会员 { yingshou = yingshou * memberDiscount; double memberMoney = l.getMemberMoney(memberNo); if (memberMoney > 0)//如果会员卡金额大于0,则提示是否使用会员卡支付 { if (MessageBox.Show("是否使用会员卡支付?", "提示",
44、MessageBoxButtons.YesNo) == DialogResult.Yes)//确定使用会员卡支付 { if (memberMoney >= yingshou)//可完全用会员卡支付 { try { double nowmoney = l.getMemberMoney(me
45、mberNo) - yingshou; l.updateMembreNowMoney(memberNo, nowmoney);//修改会员卡现有金额 temp = 2; string sellGoods = PrintGoodsInfo(); sellGoods += "实收:" + yingshou + "元\t" + "会员卡支付:" +
46、 yingshou + "元\t"; if (MessageBox.Show(sellgoods, "打印", MessageBoxButtons.OK) == DialogResult.OK) { summoney += yingshou; Sumprofit += profit; //sumjiaomoney += 0; jiaomoney = 0; l.addMemberJiFen(yingshou, memberNo);//增加会员卡积分 profit = Convert.ToDouble(string.Format("{0:F2}", profit
47、));//利润值保留两位小数 l.addSellLog(sellID, username, Business.shopID, sellGoods, yingshou, profit, Business.memberNo, 0);//保存单次交易营业日志 double addjifen = l.getMemberJiFenBySell(yingshou, memberNo); l.addMemberLog(memberNo, yingshou, addjifen, shopID, null,sellID); //会员卡使用日志
48、 UpdateGoodsNumber();//修改商品减少商品数量 //现金为0 此处不再加 ClearStaticInfo();//清除静态变量值 clear();//清除控件值(初始化) textBox1.Focus(); }
49、 } catch { MessageBox.Show("支付失败!", "提示"); } } else //只够一部分 {
50、 try { memberElseMoney = yingshou - l.getMemberMoney(memberNo);//剩余应付金额 // UpdateGoodsNumber();//修改商品减少商品数量 // l.addMemberJiFen(l.getMemberMoney






