超市管理系统java程序设计报告图文完整.docx
《超市管理系统java程序设计报告图文完整.docx》由会员分享,可在线阅读,更多相关《超市管理系统java程序设计报告图文完整.docx(64页珍藏版)》请在冰豆网上搜索。
超市管理系统java程序设计报告图文完整
JennywascompiledinJanuary2021
超市管理系统java程序设计报告图文完整
xx学院
程序设计课程设计(C)
报告
项目名称:
超市项目管理系统
学生姓名:
xxx
学号:
xxx
班级:
xxx
指导老师:
xxx
日期:
xxx
1、项目描述
超市收银管理系统是一个辅助超市收银员统计商品以及辅助管理员统计货物情况和收益情况的实用性工具。
根据超市的日常管理需要,超市收银系统应该包括基本档案管理、商品库存管理、会员管理、交易管理等四大功能,其中基本档案管理包括收银员信息管理和商品信息管理;商品库存管理包括商品入库管理和商品出库管理;会员管理包括会员信息管理和积分管理;交易管理包括交易信息管理和销售信息管理。
2、需求分析
(1)界面需求
软件的操作界面是图形界面还是字符界面,以简洁清晰、操作方便为首要目标。
基于超市收银的基本业务分析,和必须解决的两大难题,针对性地制定出所要设计小型超市收银管理系统所需要的系统功能,如下七点:
(1)设计软件提供用户登陆界面,为用户提供账号密码管理工具,具体为添加用户、删除用户、修改用户名、密码。
(2)设计软件将对单个商品进库产品进行管理,对进库清单进行录入、修改、查询和统计,也提供出库功能,对出库清单进行录入和查询。
(3)设计软件将能对商品信息情况进行修改操作和查询操作,能设置库存商品单价,能对库存商品总值进行统计。
(4)设计软件能对超市会员信息进行管理,具体为添加会员信息、删除员工信息、修改会员信息操作、查询会员信息操作。
(5)设计软件能对每单生意信息进行管理,具体为每单生意信息的添加、查询、修改。
(2)数据需求
需要输入什么类型的数据、什么值的数据,即数据模型的建立。
是由项目内容及软件设计者决定的。
以数据描述的清晰、数据意义的完整为目标。
出库表:
入库表:
收银员表:
商品信息表:
会员表:
(3)功能需求
系统应该具有哪些功能,与项目描述以及设计者的理解直接相关。
对一般的管理软件来说,必须包括数据的输入输出、增删改查、排序、统计等功能。
请按实际项目需求填写用例。
一般按动作(动词)结果(名词)的形式书写。
1、登录功能:
Action1:
输入库里存有的用户和密码,输入正确,登录成功,输入错误,登录失败;
Action2:
点击重置按钮,刷新用户名和密码。
2、主窗体菜单功能
Action1:
下拉菜单模块,菜单模块里面有子菜单。
分为,收银员信息、收银员信息管理;商品、商品信息管理;商品出入库管理,商品交易管理;
会员信息菜单、会员信息管理菜单;设置菜单、联系我们选项、退出系统选项。
3、收银员添加信息功能
Action1:
填入收银员的编号、姓名、密码,信息入库,并可做登录名和密码。
4、收银员信息排列
Action1:
可以列出收银员名单、点击表格某一行,可以显示对于的信息填入对应的文本里。
5、收银员的信息查询
Action1:
可以通过对姓名的模糊查询,查询到收银员。
6、收银员信息的修改
Action1:
通过修改对应得文本框,然后点击修改按钮完成信息修改。
7、商品添加信息功能
Action1:
填入商品的编号、名称等,信息入库,并可做登录名和密码。
8、商品信息排列
Action1:
可以列出商品名单、点击表格某一行,可以显示对于的信息填入对应的文本里。
9、商品的信息查询
Action1:
可以通过对商品名称的模糊查询,查询到商品。
10、商品信息的修改
Action1:
通过修改对应得文本框,然后点击修改按钮完成信息修改。
11、商品交易添加信息功能
Action1:
可以通过商品的编号确认商品,然后输入交易数量,自动生成价格收益等。
Action2:
商品的库存会相对应的减少。
12、商品交易信息排列
Action1:
可以列出商品名单、点击表格某一行,可以显示对于的信息填入对应的文本里。
3、概要设计(总体设计)
功能模块设计:
超市收银管理系统是为辅助超市收银员日常管理而设计,本系统功能结果图如下:
本系统共包括四大模块,分别是基本档案管理模块、商品库存管理模块、会员管理模块、交易管理模块。
每个模块的功能如下:
1.基本档案管理模块功能:
(1)实现收银员信息的查询、增加、删除、修改功能。
(2)实现商品信息的查询,包括增加、删除、修改功能。
2.商品库存管理模块功能:
(1)实现销售商品入库信息的增加、删除、修改。
(2)实现销售商品出库信息的增加、删除、修改。
3.会员管理模块功能:
(1)实现会员信息的查询、增加、删除、修改功能。
(2)实现会员积分信息的查询、增加、删除、修改功能。
4.交易管理模块功能:
(1)实现每笔交易信息的查询、增加、删除、修改功能。
(模拟购物)
数据库设计:
1、把收银员信息当做一个实体的话,其属性关系有收银员编号、收银员姓名。
2、把商品信息当做一个实体的话,其属性关系有商品编号、商品名称、商品类别、商品数量、商品进价、商品售价。
3、把商品出库信息当做一个实体的话,其属性关系有出库交易单编号、商品出货数量、会员卡编号、收银员编号、商品编号、总收入。
4、把商品入库信息当做一个实体的话,其属性关系有入库交易单编号、入库商品编号、入库商品数量、总支出。
5、把会员信息当做一个实体的话,其属性关系有会员卡ID、会员姓名、会员消费数量、会员积分。
总体的E-R图如下:
4、详细设计
以概要设计为基础,每个功能模块用一个或多个函数来实现,书写每个函数的算法,规划各函数之间的调用关系。
详情请见数据库构成图以及功能分析模块。
5、程序编辑和调试
严格按照详细设计中的算法,编写各函数的代码,同时进行单个函数的编译、链接、运行、修改;集成编译、链接、运行、修改。
这一阶段,学生可能认为是最重要、最漫长的,实则不然。
真正重要的是前面的概要设计和详细设计,若它们的设计不完善、不准确,将导致编码、编译、调试的漏洞百出、顾此失彼。
本人采用的是javaswing构图工具,虽然减少了许多的代码量,但也带来了一些问题,如,功能按钮的代码生成后与自己的编程习惯不同,导致静态函数调用问题一直报错。
6、测试
软件测试的目的在于检验程序是否正确、能否达到预期的目的;是尽可能地发现程序中存在的错误并改正,不是也不可能发现程序中存在的所有错误。
必然需要一定量的数据作为测试的试验品。
叫测试用例。
测试用例是一组条件或变量(输入数据和期望结果的集合),测试者根据它来确定应用软件或软件系统是否正确工作。
测试用例是通过实验达到引起构件失效和发现构件故障的目的。
确定软件程序或系统是否通过测试的方法叫做测试准则。
一个测试用例有5个属性:
名称、可执行的路径全称、输入数据、测试预言(期望的测试结果与输出结果的比较)和日志(测试产生的输出)。
测试用例常从以下几方面来选择:
数据类型的验证,数据的边界值、非法值,选择结构中各分支的都要执行到的数据、循环的初终值等。
测试活动技术主要包括:
构件检查、可用性测试、单元测试、集成测试和系统测试。
构件检查是通过对源代码的手工检查发现单个构件中的故障。
可用性测试用于找出现实系统做了什么和用户的期望值之间的差异。
单元测试通过测试单个单元的方法以发现故障。
集成测试通过集成多个单元来查找故障。
系统测试关注整个系统、系统的功能和非功能需求以及目标环境等。
此处填写程序测试的测试用例。
程序中哪些地方需要完善。
登录界面:
输入用户名和密码。
主界面:
登录成功,进入主界面。
主界面菜单显示:
输入收银员编号、姓名、密码,进行注册。
信息添加成功(注册成功)
收银员信息查询界面:
点击菜单中的信息,会进行自动填充到输入栏中,方便修改。
为了避免误操作,修改会进行提示。
修改成功!
通过名字可以进行模糊查询
商品基本信息填写界面:
信息添加成功!
商品查询,同样是按商品名称进行模糊查询。
作者信息介绍窗口。
会员的信息添加。
商品入库。
入库成功,列表值修改。
商品出库,但由于输入出库数量超过库存,所以异常。
自动算出商品交易的总额,自动显示库存量。
商品列表库存值修改成功
退出商品,同样,为了避免误操作,退出系统会有相应的提示。
7、总结
介绍和总结在课程设计阶段学习的得失、感悟、后续工作。
此次只设计了短短的两周。
虽说时间很短,但其中的每一天都使我收获很大、受益匪浅,它不但极大地加深了我对一些理论知识的理解,不仅使我在理论上对Java有了全新的认识,在实践能力上也得到了提高,真正地做到了学以致用,更学到了很多做人的道理,对我来说受益非浅。
这也是第一次让我亲身感受到理论与实际的相结合,让我大开眼界。
也是对以前所学知识的一个初审吧!
这次实训对于我以后学习、找工作也是受益菲浅的,在短短的三周中相信这些宝贵的经验会成为我今后成功的重要的基石;这对于我的学业,乃至我以后人生的影响无疑是极其深远的。
这次完成较为完善的小项目虽然是我们的第一次,不过大家的表现都不错,由此看来,我们在进入大学的这几个月里学到了不少的专业知识,只是自己感觉不到而已。
对于所学专业,我们不能过于自卑和担忧,否则会妨碍自己学习。
对于我来说,这两周是学习的重要环节,有利于我们巩固专业知识、掌握工作技能,提高就业筹码。
我把本次为期两周的课程设计看作是“理论与实践相结合的桥梁”。
通过这周的实训和学习,我知道了此次实训的目的,也清楚目前自己的不足,那就是缺乏相应的知识与经验,对所学的专业知识不能够很好地运用于实践操作。
正所谓“百闻不如一见”,经过这次自身的切身实践,我才深切地理会到了“走出课堂,投身实践”的必要性。
平时,我们只能在课堂上与老师一起纸上谈兵,思维的认识基本上只是局限于课本的范围之内,也许就是这个原因就导致我们对专业知识认识的片面性,使得我们只知所以然,而不知其之所以然!
限制了我们网络知识水平的提高。
但是课本上所学到的理论知识是为我们的实际操作指明了方向、提供相应的方法,真正的职业技巧是要我们从以后的实际工作中慢慢汲取的。
而针对实际操作中遇到的一些特殊的问题,我们不能拘泥于课本,不可纯粹地“以本为本”。
在这次课程设计中我得到了许多收获,我第一次体会到软件工程师的工作是什么样子的,也发现了很多不曾注意到的细节,在实训的演示过程中,我对作为一名软件工程师注意的事项应该从小事做起、从基本做起。
把职业能力训练与职业素质有机的结合起来。
相信这对我接下来学习专业知识会起到很有效的帮助,在接下来的几个月里,我会以作为一名职业人的身份在这几个方面要求自己,严格自我,向软件工程师靠近。
而经过这次实训,让我明白如果是一个完整项目的开发,必须需要他人的帮助来完成。
因此不管在工作中还是在生活中要和老师、同学保持良好的关系是很重要的。
做事首先要学做人,要明白做人的道理,如何与人相处是现代社会的做人的一个最基本的问题。
对于自己这样一个即将步入社会的人来说,需要学习的东西很多,他们就是最好的老师,正所谓“三人行,必有我师”,我们可以向他们学习很多知识、道理。
实训结束了感觉虽然辛苦,但很充实。
我想这就是Java工程师的工作。
我也体会到软件工程师成功地完成一个任务的那种兴奋,那种小有成就的感觉是只有置身其中的人才能体会的。
总之,这次实训为我提供了与众不同的学习方法和学习体会,从书本中面对现实,为我将来走上社会打下了扎实的基础。
作为在校计算机专业的学生,现在我能做的就是吸取知识,提高自身的综合素质,提高自己的职业技能,自己有了能力,到时候才会是“车到山前必有路”。
我相信在不久的未来,会有属于我自己的一片天空。
8、附件:
包
package;
import*收银员登录验证。
*@authorcsp-pc
*
*/
publicclassCashierDao{
publicCashierlogon(Connectioncon,Cashiercashier)throwsException{
CashierresultCashier=null;
Stringsql="select*fromcashierwherename=andpassword=";;
import.*;
import*收银员信息的dao
*@authorcsp-pc
*
*/
publicclassCashierinforDao{
publicintcashierinforAdd(Connectioncon,Cashierinforcashierinfor)throwsException{
Stringsql="insertintocashiervalue(,,)";
PreparedStatementpstmt=(sql);
(1,());eplaceFirst("and","where"));
;
import*该类实现商品的添加、修改、查找、删除的dao。
*@authorcsp-pc
*
*/
publicclassGoodsDao{
publicintgoodsAdd(Connectioncon,Goodsgoods)throwsException{
Stringsql="insertintogoodsvalue(,,,,,)";eplaceFirst("and","where"));
return();
}
publicintgoodsdelete(Connectioncon,Stringnumber)throwsException{
Stringsql="deletefromgoodswherenumber=";
PreparedStatementpstmt=(sql);
(1,number);quals(str)||str==null){
returntrue;
}else{
returnfalse;
}
}
quals(str)&&str!
=null){
returntrue;
}else{
returnfalse;
}
}
*/
publicstaticvoidmain(String[]args){
(newRunnable(){
publicvoidrun(){
try{
authorFrameframe=newauthorFrame();
(true);
}catch(Exceptione){
();
}
}
});
}
/**
*Createtheframe.
*/
publicauthorFrame(){
setTitle("\u5173\u4E8E\u6211\u4EEC");
setDefaultCloseOperation;
setBounds(100,100,450,300);
contentPane=newJPanel();
(newEmptyBorder(5,5,5,5));
setContentPane(contentPane);
(null);
JLabellabel=newJLabel("\u6E56\u5317\u6587\u7406\u5B66\u9662");
(newImageIcon("D:
\\java\\workspace\\\u8D85\u5E02\u7BA1\u7406\u7CFB\u7EDF\\image\\book
(2).png"));
(newFont("宋体",,18));
(73,10,189,49);
(label);
JLabellblNewLabel=newJLabel("\u6570\u5B66\u4E0E\u8BA1\u7B97\u673A\u79D1\u5B66\u5B66\u9662");
(newImageIcon("D:
\\java\\workspace\\\u8D85\u5E02\u7BA1\u7406\u7CFB\u7EDF\\image\\book
(1).png"));
(newFont("宋体",,15));
(73,69,289,35);
(lblNewLabel);
JLabellblNewLabel_1=newJLabel("\u8F6F\u5DE51511");
(newImageIcon("D:
\\java\\workspace\\\u8D85\u5E02\u7BA1\u7406\u7CFB\u7EDF\\image\\"));
(newFont("宋体",,13));
(73,114,144,15);
(lblNewLabel_1);
JLabellabel_1=newJLabel("\u9648\u4ED5\u9E4F");
(newFont("宋体",,13));
(newImageIcon("D:
\\java\\workspace\\\u8D85\u5E02\u7BA1\u7406\u7CFB\u7EDF\\image\\"));
(73,149,94,15);
(label_1);
JLabellabel_2=newJLabel("57");
(newImageIcon("D:
\\java\\workspace\\\u8D85\u5E02\u7BA1\u7406\u7CFB\u7EDF\\image\\"));
(newFont("宋体",,13));
(73,182,121,15);
(label_2);
}
}
package;
import*商品出库链接窗体。
*@authorcsp-pc
*
*/
publicclassB_outInterFrmextendsJInternalFrame{
privateJTextFieldoutamountTxt;
privateJTextFieldgoodsidTxt;
privateJLabellblNewLabel;
privateJTextFieldmeber_idTxt;
privateJTextFieldcashier_idTxt;
privateJLabellabel_2;
privateJLabellabel_4;
privateJTextFieldmoney_putTxt;
privateJButtonJb_outconfirm;
privateJButtonJb_outsetconfirm;
/**
*Launchtheapplication.
*/
DbUtildbUtil=newDbUtil();
BusinessDaobusinessDao=newBusinessDao();
GoodsDaogoodsDao=newGoodsDao();
privateJTextFieldramountTxt;
publicstaticvoidmain(String[]args){
(newRunnable(){
publicvoidrun(){
try{
B_outInterFrmframe=newB_outInterFrm();
(true);
}catch(Exceptione){
();
}
}
});
}
/**
*Createtheframe.
*/
publicB_outInterFrm(){
setTitle("\u5546\u54C1\u51FA\u5E93\u7BA1\u7406");
setIconifiable(true);
setClosable(true);
setBounds(100,100,450,360);
getContentPane().setLayout(null);
JLabellabel=newJLabel("\u51FA\u5E93\u6570\u91CF\uFF1A");
(230,67,66,15);
getContentPane().add(label);
outamountTxt=newJTextField();
(294,64,112,21);
getContentPane().add(outamountTxt);
(10);
JLabellabel_1=newJLabel("\u5546\u54C1\u7F16\u53F7\uFF1A");
(24,67,66,15);
getContentPane().add(label_1);
goodsidTxt=newJTextField();
(88,64,112,21);
getContentPane().add(goodsidTxt);
(10);
lblNewLabel=newJLabel("\u4F1A\u5458\u7F16\u53F7\uFF1A");
(24,220,66,15);
getContentPane().add(lblNewLabel);
meber_idTxt=newJTextField();
(88,217,112,21);
getContentPane().add(meber_idTxt);
(10);
cashier_idTxt=newJTextField();
(307,217,99,21);
getContentPane().add(cashier_idTxt);
(10);
label_2=newJLabel("\u6536\u94F6\u5458\u7F16\u53F7\uFF1A");
(227,220,86,15);
getContentPane().add(label_2);
label_4=newJLabel("\u76C8\u5229\u663E\u793A\uFF1A");
(24,164,68,15);
getContentPane