超市管理系统设计与实现(本科毕业设计)(共29页).doc
精选优质文档-倾情为你奉上软件课程设计姓 名: 学 号: 班 级: 计算机科学与技术 设计题目: 超市收费系统的设计与实现 指导教师: 摘 要 随着现代科学技术的迅猛发展,计算机技术已渗透到各个领域,成为各行业必不可少的工具。在当今激烈的市场竞争中,让顾客享受既实惠又快捷的购物服务是商战中制胜的一大要素。改革开放的今天,各种大型超市林立,超市已成为消费者日常活动的主要场所。而超市商品也非常之多,建立一套方便快捷的超市收费系统是企业必然要解决的一个问题。系统采用的编程工具是VS2013版本与SQL作为数据库。系统分为前台系统和后台系统,其中,前台系统提供了很方便的商品销售收费功能,这其中包括会员卡用户可享受九折折优惠。而后台系统则提供了一些商品管理功能,如采购入库,库存盘点,出库明细,员工管理等模块。 本文主要介绍超市收费系统的运行环境、功能作用、设计的方案等各方面的内容。论文共分为五大部分。第一部分简要叙述了研究内容。第二,三部分首先进行问题的分析,其次进行构建,然后进行总体设计和详细设计。第四部分为系统实现,主要分为前台模块和后台模块。第五部分为系统测试,主要包括前台和后台的测试。关键词:收费; 销售; 超市;目 录444555专心-专注-专业1 引 言1.1课题研究内容综合运用以前所学的专业知识,设计开发一个超市收费系统软件,本设计要求实现功能采购入库,出入库明细,条形码数据的输入,会员卡号的输入,进行货品销售。 具体包括以下内容:(1)在设计与开发中,主要放在简单地进行货品销售,会员卡打折(统一九折)。(2)在设计与开发中,既探讨前台的销售,又能实现后台的采购入库,会员卡设置,员工管理,出入明细等功能。(其中前台只负责输入条码,输入会员卡号,实现收费。其他的所有功能和设置均放在后台进行)实现超市货品的入库,会员卡用户资料的录入,以及进行货品销售的收费,而前台的收费分为会员卡用户和非会员卡用户两种收费,对于有卡用户,在输入卡号后,可实现商品价格按九折折价格进行收费,若要取消销售某商品,则直接点删除,总价格也会相应的扣除.2 系统需求分析数据库应用系统是以数据库为基础的信息管理系统,它一般包含两个方面内容,一个数据库设计,二是程序设计。在建立数据库应用系统之前,一般应先进行系统的需求分析,了解用户对系统的要求,然后进行系统的总体设计,最后编写程序代码和调试程序。数据库应用系统的开发过程,需求分析包括了对数据本身的需求分析和对功能的需求分析。两个分析的结果将分别作为数据库设计和程序设计的依据。实际上在设计数据库应用系统时,这两个需求分析是紧密相关的,不论是数据库设计,还是程序设计都需要考虑这两个方面的因素。2.1系统模块构建2.1.1系统整体结构功能模块系统整体结构功能模块图如图2-1:图2-1系统整体结构功能模块图根据系统整体结构功能模块分析,系统分为前台和后台两部分;前台主要提供给收银员使用,进行销售收费;后台提供给管理员使用,主要执行商品信息管理、出入库明细管理、销售数据管理、员工管理以及会员卡用户管理等工作。2.1.2前、后台功能模块 本系统是多用户系统,用户可分为管理员和收银员两类,登录或者未登录情况下判断当前使用人员的权限,避免安全性问题。收银员登录系统,系统自动清空销售临时数据,进入系统,对于非会员用户收银员首先录入商品编号,然后输入数量,而对于会员卡用户,收银员选择会员类型,输入会员卡号,系统自动将折扣转为90%,然后系统自动汇总金额,同时列表显示销售商品的流水数据,收银员可以删除需要退掉的商品,然后点击结账,完成交易过程。前台功能模块图如图图2-2 前台功能模块图后台管理员登录系统以后,可以对商品单位进行添加、查询,可以对会员资料进行添加、查询操作,可以进行采购入库操作,进行库存盘点操作,进行进货统计操作,进行出库明细查询操作,和退出系统操作。后台功能模块如图3-3所示:3 数据库设计3.1 E-R图和关系图供应商,商品关系模型E-R图如图3-1所示:图3-1 供应商,商品关系模型E-R图各个表之间的关系图如图3-2:图3-2 各个表之间的关系图3.2数据库表设计由数据模型利用SQL进行数据库的详细设计,其基本表的设计如下:1. 供应商信息表供应商信息表:存储供应商信息.如表3-1:表3-1 供应商信息表字段名称数据类型说明SupplyidChar(10)供应商编号SupplynameChar(10)供应商名称SupplytelChar(20)供应商电话2. 商品信息表商品信息表:存储商品信息.如表3-2:表3-2 商品信息表字段名称数据类型说明FoodidChar(10)商品编号FoodnameChar(10)商品名称Foodnumint商品现有量Foodsumint商品总量FoodvalueInt商品价格3.商品进货表商品进货表:存储商品进货信息.如表3-3:表3-3 商品进货表字段名称数据类型说明FooidChar(10)商品编号SupplyidChar(10)提供商编号Numint进货数量timeChar(10)进货时间4.销售纪录表销售纪录表:存储销售情况的清单.如表3-4:表3-4 销售纪录表字段名称数据类型说明UserzhChar(10)收银员账号UsernameChar(10)收银员姓名FooidChar(10)商品编号FoodnameChar(10)商品姓名NumChar(10)数量TimeChar(50)销售日期5.管理员表管理员表:管理员的基本信息.如表3-5:表3-5 管理员表字段名称数据类型说明MainidChar(10)管理员账号PasswordChar(10)管理员密码MannameChar(10)管理员姓名MantelChar(50)联系方式6.收银员表收银员表:收银员的基本信息.如表3-6:表3-6 库存表字段名称数据类型说明UseridChar(10)账号PasswordChar(10)密码TelChar(50)电话NameChar(10)姓名7.销售临时纪录表销售临时纪录表:收银员出售货物时临时纪录.如表3-7:表3-7 计量单位表字段名称数据类型说明物品编号Char(10)物品名称Char(10)物品数量Char(10)售价int小计int总价格时间Char(50)8. 会员资料表会员资料表,存储有卡会员的资料,以便结账时给予折扣.如表4-8:表4-8 会员资料表字段名称数据类型说明VipidChar(10)会员编号VipnameChar(10)会员姓名4 系统实现4.1 前台模块前台程序流程图如图4-1所示:开始图4-1 前台程序流程图登录模块:功能:本模块的主要功能是对用户身份进行验证,只有系统的合法用户才能进入系统。其窗体如图4-2:图4-2 用户登录界面在进行系统登录过程中,登录模块将调用数据库里的收银员表,并对用户名和密码进行验证,只有输入了正确的用户名和密码后,系统登录才会成功。并在输入了错误的或者是不存在的用户名和密码时,系统会给出出错信息提示.其提示错误输入或错误操作如图4-3 所示: 图4-3 登录错误界面主要就是在点击登陆后判断用户名账号和密码是否为空或者是否匹配,匹配成功即可进入收银员销售界面,在密码错误或者为空时提示错误信息string str = "server=NO1;database=SuperMarket;integrated security=true"SqlConnection con = new SqlConnection(str);con.Open();string use = user1.Text.ToString();string mima = password.Text.ToString();SqlDataAdapter ad = new SqlDataAdapter("select * from Table_user where userid='" + use + "' and password='" + mima + "'", con);DataSet set = new DataSet();ad1.Fill(set, "s1");if (set.Tables"s1".Rows.Count != 0)flag = 0;c.man = use;Form3 f = new Form3();this.Hide();f.Show();前台模块:功能:本模块的主要功能是把销售信息写入销售表,同时对库存数据进行更新,以备用户将来对销售信息和库存信息进行查询。商品销售:将销售信息录入thing表中临时存放,可以进行添加销售信息和删除,并在结账的时候讲销售信息导入数据库jilu表中 图4-4 收银员销售界面cmd.CommandText = "update food set foodnum='"+sheng+"' where foodid='" + bh + "'"cmd.Connection = con;cmd.ExecuteNonQuery();/*将刚刚购买的东西插入进数据库表thing中*/string t = DateTime.Now.ToString();cmd.CommandText = "insert into thing (物品编号,物品名称,物品数量,售价,小计,时间) values('" + bh + "','" + name + "','" + num + "','" + money + "','" + num * money + "','" + t + "')"cmd.Connection = con;cmd.ExecuteNonQuery();sum_money += num * money;moneyy.Text = sum_money.ToString();shiji.Text = sum_money.ToString();/*对dataGridView1绑定数据源*/SqlDataAdapter da2 = new SqlDataAdapter("select * from thing", con);da2.Fill(set, "thing");dataGridView1.DataSource = set.Tables"thing"foodid.Text = ""foodnum.Text = ""在添加物品时如果有错误,单击一行点击删除即可删除该条记录,并且金额也会相应更改图4-5 货物不足int shu =Convert.ToInt32(set.Tables"thing9".Rows0"foodnum".ToString();int money = Convert.ToInt32(set.Tables"thing9".Rows0"foodvalue".ToString();string name = set.Tables"thing9".Rows0"foodname".ToString();if (shu < num)MessageBox.Show("库存量不够,近期会进货!");foodid.Text = ""foodnum.Text = ""return;物品库存量不足时也会提出相应的窗口购买的物品删除功能图4-6 删除商品删除一条记录联通数据的出售记录一起删除,并且把商品表中减去的数量恢复SqlCommand cmd = new SqlCommand("update food set foodnum='"+(kucun+num)+"' where foodid='"+bh+"'",con);cmd.ExecuteNonQuery();cmd.CommandText = "delete from thing where 物品编号='" + bh + "' and 时间='"+tim+"'" ;cmd.Connection = con;cmd.ExecuteNonQuery();SqlDataAdapter ad2 = new SqlDataAdapter("select * from thing", con);ad2.Fill(set, "th");dataGridView1.DataSource = set.Tables"th"cmd.CommandText = "delete from jilu where foodid='" + bh + "' and time='" + tim + "'"cmd.Connection = con;cmd.ExecuteNonQuery();会员结账时为实收金额的90%,图4-7 结账结账时要清空thing表(临时信息表)和dataGridView1的数据SqlCommand cmd1 = new SqlCommand("delete from thing", con);con.Open();cmd1.ExecuteNonQuery();SqlDataAdapter ad = new SqlDataAdapter("select * from thing", con);DataSet set = new DataSet();ad.Fill(set, "nu");dataGridView1.DataSource = set.Tables"nu"con.Close();sum_money = 0;4.2后台模块 后台程序流程图如图4-8所示:图4-8 后台程序流程图管理员登录后进入主该页面,跟收银员一样从数据库中验证是否匹配,成功就进入下面的界面图4-9 管理员登录界面主要有商品库存的查看,交易记录的查询,员工管理,进货记录和管理以及会员的注册图4-10 商品库存界面图4-11 交易记录界面图4-12 进货记录界面图4-13 员工信息界面主要就是dataGridView绑定数据库中的数据源来查看记录SqlDataAdapter ad = new SqlDataAdapter("select * from Table_manager where manid='"+c.man+"'",con);DataSet set = new DataSet();ad.Fill(set, "fz");string name = set.Tables"fz".Rows0"manname".ToString();label1.Text = "欢迎您:"+name;SqlDataAdapter foo = new SqlDataAdapter("select * from food order by foodid asc", con);foo.Fill(set, "fo");dataGridView1.DataSource = set.Tables"fo"SqlDataAdapter jl = new SqlDataAdapter("select * from jilu order by time desc", con);jl.Fill(set, "j");dataGridView2.DataSource = set.Tables"j"SqlDataAdapter use = new SqlDataAdapter("select * from Table_user ", con);use.Fill(set, "us");dataGridView3.DataSource = set.Tables"us"SqlDataAdapter sup = new SqlDataAdapter("select food.FoodId,FoodName,supply.SupplyId,supplyname,num,Supplytel,time from supply,gongying,food where food.FoodId=gongying.FoodId and supply.SupplyId=gongying.SupplyId order by time desc", con);sup.Fill(set, "su");dataGridView4.DataSource = set.Tables"su"对员工管理可以进行添加图4-14 员工增加界面获取注册时候的信息然后将数据导入数据库添加成功后图4-15 员工增加成功界面add a = new add();a. Show();SqlDataAdapter ad = new SqlDataAdapter("select * from Table_user where userid='" + id + "'", con);DataSet set = new DataSet();ad.Fill(set, "fz");if (set.Tables"fz".Rows.Count != 0)MessageBox.Show("用户名已经存在!");textBox1.Text = ""textBox2.Text = ""textBox3.Text = ""textBox4.Text = ""elseSqlCommand cmd = new SqlCommand("insert into Table_user(userid,password,tel,name) values('" + id + "','" + mima + "','" + tel + "','" + nam + "')", con);cmd.ExecuteNonQuery();Form3 f = new Form3();f.Show();this.Close();对员工可以进行解雇,主要就是删除数据库中的元素,让datagridview重新绑定数据库图4-16 员工删除string id= dataGridView3.Rowsa.Cells0.Value.ToString();SqlCommand cmd = new SqlCommand("delete from Table_user where userid='" + id + "'", con);cmd.ExecuteNonQuery();SqlDataAdapter ad = new SqlDataAdapter("select * from Table_user", con);DataSet set=new DataSet();ad.Fill(set, "fz");dataGridView3.DataSource = set.Tables"fz"进购货物时可以选择补充库存还是购买新物品图4-17 补充库存根据商品编号从数据库中找到相应的数据,将商品数量更新在根据商品编号和商家编号导入新的信息到数据库,并更新商品库存和进货记录SqlCommand cmd = new SqlCommand("update food set foodnum='" + xianyou + "' where foodid='" + bh + "'", con);cmd.ExecuteNonQuery();cmd.CommandText="update food set foodsum='" + sum + "' where foodid='" + bh + "'"cmd.Connection=con;cmd.ExecuteNonQuery();string nu = num.ToString();string nowtime=DateTime.Now.ToString();cmd.CommandText = "insert into gongying(foodid,supplyid,num,time) values('" + bh + "','" + shangjia + "','" + nu + "','" + nowtime + "')"cmd.Connection = con;cmd.ExecuteNonQuery();MessageBox.Show("进货成功!"); 图4-18 进货成功进购一种仓库没有的商品时,需要获得该商品的全部信息图4-19 购买新货物品编号有系统自动生成,进货成功后需要更新商品库存和进货记录SqlCommand cmd = new SqlCommand("insert into food(foodid,foodname,foodnum,foodsum,foodvalue) values('" + len + "','" + name + "','" + num + "','" + num + "','" + money + "')", con);cmd.ExecuteNonQuery();SqlDataAdapter sup = new SqlDataAdapter("select * from supply where supplyname='" + shangjia + "'",con);sup.Fill(set, "su");string supid = set.Tables"su".Rows0"supplyid".ToString();string time=DateTime.Now.ToString();cmd.CommandText = "insert into gongying(foodid,supplyid,num,time) values('" + len + "','" + supid + "','" + num + "','" + time + "')"cmd.Connection = con;cmd.ExecuteNonQuery();MessageBox.Show("进货成功!");对会员进行操作时,可以看到会员信息和添加会员,这里没有删除会员。考虑到会员卡统一九折,没有必要去注销,没有添加删除功能图4-20 会员信息图4-21 添加会员注册成功后让datagridview重新绑定会员数据库,更新会员信息图4-21 添加会员成功需要判断是否VIP表中有该信息,存在弹出提示窗口,不存在就可以注册会员SqlDataAdapter ad = new SqlDataAdapter("select * from vip where vipid='" + id + "'", con);DataSet set = new DataSet();ad.Fill(set, "v");if (set.Tables"v".Rows.Count = 0)SqlCommand cmd = new SqlCommand("insert into vip(vipid,vipname) values('" + id + "','" + name + "')", con);cmd.ExecuteNonQuery();SqlDataAdapter vi = new SqlDataAdapter("select * from vip ", con);vi.Fill(set, "vv");dataGridView5.DataSource = set.Tables"vv"MessageBox.Show("注册成功!");textBox7.Text = ""textBox8.Text = ""elseMessageBox.Show("该VIP编号已存在!");textBox7.Text = ""textBox8.Text = ""return;5 结果测试5.1前台测试收银员输入正确的用户名和密码,如果输入错误密码,或不存在的用户名,则弹出错误提示框。(功能运行正常)销售主页面的测试:输入正确的,存在的商品条码,和数量,按enter,系统将从数据库调出数据,显示相应信息在下方导航框内,并在应收金额出现相应价格计算总和.若输入错误的条码,则会弹出错误提示框。 (功能运行正常)删除一条记录时,数据库内容也会恢复和更新(功能运行正常)若选中会员结账输入存在的会员卡号,则会弹出欢迎的对话框,点OK后,折扣处变为90%,若输入错误的卡号,则会弹出错误的提示框。 (功能运行正常)5.2后台模块的测试采购入库的测试:若输入存在的编号,则会自动调出相应商品信息,输入数量后点确定,则成功入库,若输入错误编号,或不存在的编号,则会弹出错误提示框。(功能运行正常)添加员工测试在添加员工的界面,如果有信息填写不完整会弹出错误提示框,如果填入正确信息,则注册成功(功能正常运行)添加会员测试添加会员时如果会员已经存在或者编号不正常则会弹出错误提示框,如果填入正确信息,则注册成功(功能正常运行)商品查看,交易记录,进货记录测试都能正确显示数据库中的信息,没有出现错或者遗漏的数据(功能正常运行) 总 结在对C#和sql有一定的理解下,完成了超市收费系统的设计与实现,中间过程很坎坷,刚开始也不会连接数据库,我查阅了大量书籍,也在网上查了不少资料,使我有很大的提升。使用了sql数据库实现了对各个数据的操作,熟悉了C#与数据库连接的过程,对数据库的理解有了更一步的提升。总之,这次的课程设计对自己能力的提升有很大的帮助参考文献1刘丽霞C#范例开发大全清华大学出版社,2010.7.12但尧C#编程指南清华大学出版社,2011.13王小科,赵会东C#项目开发案例整合电子工厂出版社,2011.94吴绍兴,刘岩,C#项目开发案例导航电子工厂出版社,2012.35王珊,萨师煊,数据库系统概论高等教育出版社,2016.9