《易成超市管理系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《易成超市管理系统的设计与实现.docx(38页珍藏版)》请在三一办公上搜索。
1、 报告编号:第一组综合课程设计报告易成超市管理系统的设计与实现学生姓名: 指导教师: 所 在 系: 电 子 信 息 系 所学专业: 计算机科学与技术 年 级: 2012年12月目 录摘 要1第一章 前言2第二章 需求分析32.1 登录管理32.2 进货管理32.3 人员管理32.4 销售管理32.5 库存管理3第三章 概要设计43.1 总体设计43.2 数据库设计53.2.1 数据库概念结构设计53.2.2 数据库表格的设计5第四章 详细设计64.1 登录模块的设计64.2 进货模块的设计84.3 人员模块的设计134.4 销售模块的设计164.5 库存模块的设计204.6 设计中问题的解决2
2、3第五章 系统实现24第六章 总结35参考文献36易成超市管理系统的设计与实现摘 要随着小型超市的规模不断发展扩大,商品数量急剧增加,有关商品的各种信息量也成倍增长,传统的人工记忆方式以渐渐不适应时代的发展。而随着现代科学技术的迅猛发展,计算机技术已渗透到各个领域,所以利用计算机管理数据库显得尤为迫切。在以前系统运做中存在很多问题,所有的进货单,出货单都是人工填写,耗时而且易出现错误;库存也是人工记帐,无法随时掌握最准确的存货情况;对于销售数据,往往要花好多时间和精力去计算每个业务员的销售业绩,每项商品的销售状况,为了解决上述问题,提高经济效益,准备导入超市管理系统进行采购,销售,库存等的计算
3、机化管理。只需点击几次鼠标就能完成所有的功能,这样一来既省时又省力,大大提高超市员工的工作效率和管理水平。鉴于超市管理系统中现实存在的多种问题,所有我们系统研究了超市管理的流程,利用面向对象的Java语言和数据库SQL语句对系统做了全面的设计。本超市管理系统包括系统模块、进货模块、销售模块、库存模块和人员管理模块,在我们实训期间已经基本完成了超市管理系统的功能。一个完整的管理系统当然离不开后台数据库的支持,在这次设计中,我们用的是Structured Query Language(SQL)数据库作为基础,实现该系统的开放。关键词:小型超市 管理模块 java语言 SQL数据库 第一章 前言我们
4、这组所选的课题是“易成超市管理系统的设计与使用”。目前市场上的超市管理系统,大部分为基于分布式数据库的网络管理系统,对于规模较小的超市没有必要花巨资来购买这样功能全面的管理系统,此外,对于那样功能齐全的管理系统也需要花大精力来维护。基于这种情况,我们用所学的java知识,可以开发一种既能节约资金,又能完成小超市日常的管理任务。本系统所包括的模块主要有:系统管理模块(主要是用户登录以及密码修改)、进货管理模块、销售管理模块、人员信息管理模块和库存管理模块。在系统的设计中,系统管理模块可以管理登录本系统的人员,主要包括:管理员、采购员、营业员和库存管理员;进货管理模块主要涉及到进货厂商信息的管理、
5、进货单的管理以及商品的管理;销售管理模块主要完成各类商品的销售,金额的统计以及相关的信息查询;人员信息管理模块包括了对超市工作人员信息的整合与查询;库存管理模块完成了对仓库中商品的数量管理,并与销售和进货模块联系紧密,可以提供有用的信息。系统的安全性方面,我们规定了不同权限的登录用户,管理员可以登录到任何一个管理模块,而其他类型的超市人员只能登录到属于自己权限之内的模块,在进入自己所属的模块后,可以修改自己的密码。通过这样的权限限制就可以方便的控制系统的安全性。总之,小型超市管理系统是一个经济、实惠的应用软件,适合小规模的商店和超市。操作难度小,易学易用。第二章 需求分析2.1 登录管理在设计
6、中,我们设置了四种人员类型:管理员、营业员、采购员和库存管理员,每种类型的人员拥有自己的用户名和密码,并且通过参数传递,可以进入属于自己的页面并可以在当前界面修改自己的密码。2.2 进货管理在设计中,这个模块主要包括三大块:厂商信息管理、进货单管理、商品信息管理。厂商信息管理中包含对厂商信息的增加、删除、修改和浏览;进货单管理中包含对进货单的填写和浏览,在进货过程中,要动态地增加该商品在仓库的库存量;商品信息管理中包含对商品的添加、删除、修改和浏览,并具有对商品信息查询的三种方式:商品编号查询、商品种类查询和商品进价查询。2.3 人员管理这个模块的功能比较简单,主要就是实现对超市工作人员信息的
7、管理,包括增添、删除、修改和浏览,并具有对这些信息的三种查询方式:工号查询、人员类型查询和工资查询。2.4 销售管理此模块分为前台和后台操作。前台主要完成收银操作,不仅要显示出所卖商品的有关信息,还得完成金额的应收、实收和找零功能,并动态地减少相应商品的库存量,在收银过程结束之前中可以随时终止并删除交易记录;后台主要执行查询功能,包括对所有交易记录的查询、按指定日期查询和按商品编号查询。2.5 库存管理库存管理模块主要是与进货模块以及销售模块联系在一起,库存量是这个模块里最重要的变量,它会动态地随着销售和进货而改变自己的值。在设计当中,主要包括对库存量的几种查询方式:商品编号查询、厂商编号查询
8、、商品种类查询和商品库存量动态查询,此模块中还有一个重要功能,就是库存预警功能,用户可以自己手动设置库存安全值,然后就可以查看哪些商品积压过多或是货量短缺,超市可以根据这些情况制定相应措施,如打折销售或是赶快进货。第三章 概要设计3.1 总体设计我们为了这次课程设计,在工作开始前就画了系统模块图图,使得整个系统更加明了化,系统采用三级选择操作,由用户进行操作选择不同结构的栈类、选择测试的数据类型、选择该数据的操作。系统模块图如图3.1所示:系统模块进货模块库存模块销售模块人员模块 登陆模块 修改密码 厂商信息管理, 进 货 货物查询 货物交易 收银操作 查询信息 库存浏览 库存预警 员工信息管
9、理 查询信息易成超市管理系统图3.1 系统模块图363.2 数据库设计3.2.1 数据库概念结构设计 nmnm管理员营业员人员库存管理员采购员查看进货仓库商品厂商库存管理m1mnm1m1图3.2 ER图 3.2.2 数据库表格的设计 (1)厂商信息表 (厂商编号,厂商名称, 地址, 联系电话, 联系人) (2)商品表 (商品编号, 商品名称, 商品种类, 计量单位, 进价, 售价, 备注) (3)进货单表 (ID,商品编号, 商品名称, 商品种类, 厂商编号, 厂商名称,计量单位, 进价, 数量, 金额, 进货日期, 采购员, 备注) (4)用户表 (用户名, 密码, 类型) (5)销售表 (
10、商品编号, 商品名称,计量单位, 售价, 销售数量,金额, 销售日期, 销售员, 备注) (6)人员信息表(工号, 员工类型, 姓名, 性别, 工资, 出生日期) (7)库存表 (商品编号, 商品名称, 商品种类, 库存量,计量单位, 厂商编号, 厂商名称, 备注) 第四章 详细设计4.1 登录模块的设计这个模块的设计当中,主要有几个要点:使不同类型的人员进入自己的主页面;三次错误登录后报错;修改密码。在实现第一个功能的时候,采取了参数传递的措施,比如:当选择了“管理员”这个登录类型并通过验证后,会通过构造函数传递参数,在我们这个这个程序里面,用的是用户名,同时在管理员的主界面中,通过构造函数
11、里的参数接受传过来的用户名参数,并赋给当前类中所设置的另一个参数,这时进入的页面就是管理员页面了。在登录时,设置了一个变量,起到控制出错次数的作用,当输入的用户名或密码产生错误并达到三次以上,就会跳出警告信息,流程图如图4.1所示。修改密码,也是用参数传递,管理员页面已用参数接收到了管理员用户名,在调用修改密码方法时,将参数通过构造函数传递,在密码修改这个类中,设置了密码参数来接收传过来的参数,这时管理员修改的就是自己的密码了。流程图如图4.2所示开始判断是否为空连接数据库num +1判断是否匹配进入流程结束给出提示返回判断清空文本框返回判断NYY N图4.1 登录流程图开始通过参数传递得到用
12、户名输入旧密码是否正确输入第一次新密码长度小于6位输入第二次新密码长度小于6位两次密码输相同修改成功结束密码错误返回NNYYNNYY图4.2 修改密码流程图 4.2 进货模块的设计进货模块中,所涉及到的内容较多,但功能其实并不复杂,涉及到厂商管理、进货单管理和商品管理。厂商管理中,有增删改查四个功能,在删除和修改这两个功能的实现中,我们本来是想通过对厂商编号查询,等确认信息后再执行删除和修改,可是后来觉得,随着厂商的数目增多,编码并不是最好的查询方式,后来我们就直接用厂商名称来做这个枢纽,这样更方便一些。流程图如图4.3所示。在进货单管理中,有填写和查询进货单两个功能。在实现填写进货单这个功能
13、时,考虑到了几个项目的联动,比如当输入商品编号和厂商编号后,按下确定,会自动显示出和此商品、此厂商有关的信息,商品名称、厂商名称、进货价格等等;当选择进货日期时,我们利用了Java中的Calendar类和它所自带的方法,这样就可以使年月日相互匹配了,例如闰年的判断、大月小月的天数判断,2月天数的变化等等;在下拉表中选择采购员时,下拉表中的项目可以随着数据库的变动而变动。流程图如图4.4所示。在商品管理中,也出现了和厂商管理一样的问题,本来是用商品编号作为枢纽来完成对商品信息的删除和修改,最后出于对用户使用方便的考虑,将商品类型和商品名称联动起来作为枢纽,即选择一个商品种类后,属于该种类的商品也
14、就随之显现出来,便于用户选择。流程图如图4.5所示。在对商品查询的方式中,有编号、种类和进价查询,较为重要的是进价查询。这是一个动态查询,用户可以自己输入想查询的进价范围,并且我们还对输入的内容进行了限制,比如:不能为零,不能超过某个金额范围,只能输入数字,高进价不能小于等于低进价等等。流程图如图4.6所示。N添加厂商信息是否小于4位填写厂商名称大于20位填写厂商地址大于20位填写电话号码11位填写联系人字母或数字确定添加添加成功结束删除厂商信息修改厂商信息选择厂商信息是否正确点击查询点击删除删除成功NYYNYN选择厂商名称确定修改点击查询确定修改NYNYNNNYNY开始操作图4.3 厂商信息
15、管理流程图开始填写商品编号选择厂商编号或厂商名称填写数量选择进货日期和采购员确认商品编号为整数且小于5数量为整数且小于1000提交进货单结束YNNY图4.4 填写进货单流程图NNNNYYNNYNYYY商品编号5输入商品编号输入商品名称商品名称20选择商品种类和计量单位输入进价、售价0进价售价5输入修改信息0进价售价 100000修改成功查询数据库中商品表的信息提取信息返回二维表格中并显示出来浏览成功Y选择操作图4.5 商品管理流程图YNYNYNYN商品表中存在该商品选择的类是否存在最低进价和最高进价都是double型查询商品表中所有为该类的商品信息提取信息并返回二维数组表格中显示出来输入商品编
16、号查询商品表中为该商品号的商品信息提取信息并将值返回对应的文本框中输入最低及最高进价选择货物种类最低进价=最高进价查询商品表中满足该条件的商品信息提取信息并返回二维数组表格中显示出来开始按货物种类查询按商品编号查询按货物进价查询查看货物信息结束货物操作图4.6 商品查询流程图4.3 人员模块的设计人员管理模块中,主要有对人员信息的增删改查功能和查询信息功能。在对人员信息进行删除和修改时,我们人员类型和员工姓名作为联动纽带,具体流程图如图4.7所示。在查询功能中,有三种查询:工号、人员类型和工资查询。工号、人员类型查询属于静态查询,工资查询属动态查询,和前面所说的一样,我们也对用户输入的内容进行
17、了判断控制,比如:输入的内容必须是数字(整数或浮点数),输入不能为空、不能等于零及不能大于10000,在对最低工资和最高工资的比较中,又有高工资里输入的数字不能小于等于低工资;在点击清空按钮时,不仅文本框中的内容会清空,表里原来显示的内容也会同时被清空。流程图如图4.8所示。N 添加人员信息输入工号是否为数字提示出错返回小于5位选择员工类型输入姓名字母或汉字输入工资大于一万选择出生日期结束提示出错返回提示出错返回提示出错返回Y N Y Y YNN N开始删除修改员工信息选择员工类型选择姓名点击查询信息正确确定删除或修改取消退出Y N 选择操作图4.7 员工信息管理流程图查询员工信息按工资查询点
18、击查询输入最高工资输入最低工资等于0或大于一万开始结束等于0或大于一万最高工资小于最低工资Y N NYNY按工号查询输入工号点击查询是否存在NY查询类型图4.8 员工信息查询流程图4.4 销售模块的设计 销售模块是超市系统中最为重要的环节,其收银界面也是包含功能最多的界面。 收银时,输入商品编号和销售数量后,按下确认,会首先出现待确认的信息,如:商品编号、商品名称、计量单位、售价、数量、总金额、销售日期等等,这个时侯,如果营业员确认了这些销售信息,就可以进行收银,在收银时,如果因购买的东西过多过贵导致所付现金过大时,会提示信息,建议刷卡或是去后台交易,当所付金额少了,也会有相应的提示信息;若是
19、收银员在确认信息时发现错误,可以立即停止交易并能删除这一项交易记录,但不会改变数据库中的值。流程图如图4.9和图4.10所示。 销售模块分为两个子模块,一是前面所说的前台收银,二是后台查询子模块。在查询销售信息的功能实现中,主要有商品编号查询、交易日期查询和全部信息查询,三种方式使得此模块更为全面。流程图如图4.11所示。NYNNYYNNY商品编号存在销售数量为整数且库存量备注字符数=应收,且为float型增加数据库中销售表的数据修改数据库中库存表中的库存量收银开始增加成功修改成功结束输入实收图4.10 收银流程图YNYNYN商品编号不为空查询数据库中的销售表提取销售表中的信息并返回到二维数组
20、表中显示出来查询的日期销售表中存在查询数据库中所有是该日期的交易销售表中存在该商品查询数据库中所有是该日期的交易提取销售表中的信息并返回到二维数组表中显示出来提取销售表中的信息并返回到二维数组表中显示出来开始售后查询按商品编号查询按销售日期查询浏览全部交易实现浏览结束输入商品编号选择日期操作类型图4.11 售后查询流程图4.5 库存模块的设计库存模块设计中,也是分为两个子模块,一是查询功能,而是预警功能。查询方式主要有四种:商品编号、厂商编号、商品种类和库存量查询。前三种被设计为对库存量的静态查询,最后一种查询是对库存量的动态查询,这里的功能设计与前面所说的进价查询和工资查询差不多,都对用户输
21、入的内容进行了判断控制,唯一不同的是,前面两种都是规定不准输入超过预先设好的值,但在这里,我们是动态地利用了数据库,也就是如果输入的值大于数据库中当前最大的库存量值,就会报错。流程图如图4.12图4.15所示。预警功能是我们这个系统中较为新颖的功能。这个功能的设置主要是防6仓库中货物囤积过多或所剩不多这两种情况。在预警界面中,用户可以自己设置安全值,也就是设置库存量的最大值和最小值,超市管理人员可以根据自己超市的实际情况设置,如有某些商品积压过多,超市可以考虑打折出售,若商品数量过少,则需继续进货。流程图如图4.16所示。库存管理与进货管理、销售管理是息息相关的,一种货物数量的增加和减少,都会
22、带动库存量的变化。进入相关界面输入商品编号输入格式是否正确查询商品编号对应的库存信息信息是否存在返回结果Y是否退出Y图4.12 按商品编号查询流程图弹出提示对话框 N Y NN进入相关界面选择商品种类返回结果集是否退出Y N图4.13 按种类查询流程图开始结束开始结束进入相关界面输入厂商编号输入格式是否正确查询该编号对应的厂商名称信息是否存在返回厂商名称Y是否退出Y弹出提示对话框 N Y N返回对应商品的结果集图4.14 按厂商编号查询流程图图4.15 按库存量查询流程图 N进入相关界面输入库存范围输入格式是否正确返回符合条件的结果集是否退出Y YN开始结束开始结束N开始今日预警界面选择要查看
23、的预警类型库存紧缺预警库存积压预警返回结果集安全值是否需重设结束N重新输入安全值Y图4.16 库存预警流程图4.6 设计中问题的解决 在实现联动功能的时候,我们遇到了一个问题,以人员管理为例,当选择了人员类型后,员工姓名时常不能正确的显示出来,或是,如果第一次正确显示了,当换了另一种类型后,显示出来的姓名却仍是上一次的,当时这个问题让我们很头疼。最后,我们找到了问题所在,确定类型和显示姓名是两个事件,同时发生时会产生冲突,也就会出现错误,于是,我们加了一个“互斥锁”,使这两个事件互斥,处理其中一件事时,会将互斥锁锁上,处理完后,再释放,从而允许另一个事件进来处理。第五章 系统实现下面将给出一些
24、系统运行时的画面和与实现某些功能相关代码的介绍图5.1 登录界面图5.1展示了系统的登录界面,四种登录类型清晰可见,方便用户选择。在人员类型的版面设计上,主要用到了JRadioButton类。图5.2 登录错误出现的界面如果用户输错了用户名或密码,会弹出如图5.2所示的警告窗口。在实现过程中,主要用到了checkLogin()方法,它将用户输入的内容与数据库中的内容作比较,相同则进入系统,不同即报错,此外,还定义了一个checkErrorCount()方法,主要计算出错的次数,当超过三次时,则退出登录界面。图5.3 管理员界面及快捷方式展示若用户登录成功,会进入相应人员类型的界面,图5.3以管
25、理员界面为例,用户这时可以用鼠标点选想要操作的功能,也可以直接用快捷方式,利用键盘操作。主要用到的代码为:this.addKeyListener(new KeyAdapter()public void keyPressed(KeyEvent ke) if(ke.isControlDown() & ke.getKeyCode() = KeyEvent.VK_E) Close(); 上面的代码是以用快捷方式Ctrl+E控制退出这个功能为例的。图5.4 修改密码界面图5.4展示了修改密码的界面,用户填错了其中任何一项都会报错,当修改成功时,会出现如图5.5所示的画面。图5.5 修改密码成功后出现的界
26、面这里用到的是Change()方法,和登录时一样,实现这个方法时,会将输入的初始密码与数据库中的数值比较是否相同,还会判断输入的新密码和确认新密码是否匹配且是否满足输入条件。 图5.6 四个模块的登录界面图4.6所展示的四幅漂亮图片,分别是整个超市系统四个大型模块的主界面,其设计会让用户耳目一新,也让系统更加美观。用代码实现时,主要用到了以下代码:class MyPanel extends JPanel Image img=Toolkit.getDefaultToolkit().getImage(4.jpg); public void paint(Graphics g) g.drawImage
27、(img,0,0,this); 此外,菜单的设置和快捷方式的设置,也让看似简单的画面充满内涵。图5.7 商品信息修改过程1 图5.8 商品信息修改过程2 图5.9 商品信息修改过程3图5.10 商品信息修改过程4图5.11 商品信息修改过程图5.7至图5.11展示了进货模块中修改商品信息的过程,可以看到,当用户选择了商品的类型后,商品名称中会自动显示属于该种类的所有商品名称,这样的联动功能方便了用户的操作。当然,整个系统中随处可见联动带来的好处,这里仅以修改商品信息为例。这里用到的方法主要有public void init()public void Box1() 上面第一个方法起到的作用是给商
28、品名称(box2)初始化,先移除box2里的原有项目,再从数据库里自动添加商品名称,完成初始化;第二个方法是给商品类型(box1)添加了监听器,完成的功能是:当选定一种商品类型后,box2里会自动筛选出属于这一类的商品名称。通过这两个方法,即实现了联动的功能。图5.12 前台收银界面图5.13 收银过程图5.12和图5.13显示了销售模块中的前台收银界面,清楚的界面设计让营业员和顾客可以一目了然的了解销售情况,交易前的记录删除和交易时的收银找零都在此显现出来。图 5.14 按工资查询界面图 5.15 输入错误提示图5.16 查询成功后的画面图5.14至图5.16展示的是人员模块中的工资查询过程
29、,用户可以按自己的意愿输入内容,但输入的内容同时也受到了限制,只有当输入的内容符合要求时,才可以查看到相应的信息。此功能的实现过程当中,最重要的是判断用户输入的内容是否合法,如设计当中,我们用了正则表达式来判断输入的是否是数字txt.getText().matches(0-9+.+0-9+)|(0-9+),并通过一系列的if语句来控制最低工资和最高工资之间的关系。图5.17 库存预警界面图5.18 设置安全值图 5.19 库存紧缺的货物图5.20 库存积压的货物图5.17至图5.20展示了库存模块中的库存预警过程,这也是本系统中的一个新颖功能,仓库里哪些货物多了或者少了,想靠人工去慢慢计算是很
30、不现实的,这时,超市管理人员可以按照本超市的实际情况设置安全值,那么只要鼠标一点,哪些货物积压,哪些货物短缺,结果那就一目了然了。在这个类中,除了公共类StockWarning外,还定义了一个类StockDialog,这是为“设置安全值”的实现写的一个类,其中,我们写了Character.isDigit(strMax.charAt(k)来判断从用户输入内容中一个个提取出来的字符是否是数字;将TestField里的字符串通过 int max=java.lang.Integer.valueOf(txtMax.getText().trim().intValue()转换为整型数据,以便接下来判断输入的
31、最大库存量和最小库存量之间的关系。第六章 总结这是我们第一次做这样的应用系统管理软件,所以在实训之前,我们组的组员就开始在图书馆查阅相关方面的书籍了,了解了整个系统制作流程和要点。这次的小型超市管理系统,初步实现了小规模超市的一般需求,像登录管理、进货管理、人员管理、销售管理和库存管理,几个模块紧密相连,便于用户操作。我们这个小型超市管理系统,主要有以下几个优点:1. 整个系统的界面很美观,在进入登录界面之前,还有一幅欢迎画面闪动,给用户一种耳目一新的感觉,程序运行过程中所展现的几个界面也很漂亮;2. 整个程序中,联动的功能随处可见,这方便了用户的操作,用户不必总是用键盘输入,因为可以直接用鼠
32、标在下拉框里选择相关内容,轻松且简单;3. 在每个模块的登录界面上,用户除了可以用鼠标点击选择功能之外,还可以用快捷方式(如Ctrl+E即为退出等)选择,这个功能仍然体现了系统操作的方便优势;4. 查询方式中,动静皆有,用户既可以直接点击查询,也可以按照自己的意愿从键盘输入数值,动态查询。当然,虽然系统已经完成,我们仍还有一些问题没有解决:1. 在每个界面上,当用户点击“退出”按钮或点击叉时,都会跳出一个提示框,询问是否确认退出,这时,如果用户仅用鼠标点击“是”或“否”,都会正常执行,但用户用键盘上的回车键控制时,按是和否所出现的效果是一样的,都会退出;2. 对在姓名文本框中所输入的内容进行限
33、制时,不知道怎样实现“只能输入汉字”这个功能,最后只好从网上找了相应的正则表达式来控制,但具体的意思却未了解;3. 本系统没有实现用户注册功能,包括:用户在注册时会通过选择问题并给出答案的方式来记住密码,在忘记密码的时候,可以通过回答问题获得系统赋予的新的默认密码;4. 还没实现完全用户操作,因为考虑的因素很多,所以会有遗漏。通过此次实训,我们锻炼了自己的动手能力,巩固了本学期在java课程里所学的知识点,更在整个过程中加强了团队配合的能力。最后谢谢老师的指导!参考文献:1 面向对象与Java程序设计 朱福喜 北京:清华大学出版社 2009年3月2 Java程序设计郑莉,王行言 北京:清华大学出版社 2006年1月3 java语言程序设计陆迟 北京:电子工业出版社 2002年8月4 java语言应用开发基础柳西玲,许斌 北京:清华大学出版社 2006年7月