资源描述
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、概要设计(总体设计)
3.1功能模块设计:
超市收银管理系统是为辅助超市收银员寻常管理而设计,本系统功能成果图如下:
本系统共涉及四大模块,分别是基本档案管理模块、商品库存管理模块、会员管理模块、交易管理模块。每个模块功能如下:
1. 基本档案管理模块功能:
(1)实现收银员信息查询、增长、删除、修改功能。
(2)实现商品信息查询,涉及增长、删除、修改功能。
2.商品库存管理模块功能:
(1)实现销售商品入库信息增长、删除、修改。
(2)实现销售商品出库信息增长、删除、修改。
3.会员管理模块功能:
(1)实现会员信息查询、增长、删除、修改功能。
(2)实现会员积分信息查询、增长、删除、修改功能。
4.交易管理模块功能:
(1)实现每笔交易信息查询、增长、删除、修改功能。(模仿购物)
3.2数据库设计:
1、把收银员信息当做一种实体话,其属性关系有收银员编号、收银员姓名。
2、把商品信息当做一种实体话,其属性关系有商品编号、商品名称、商品类别、商品数量、商品进价、商品售价。
3、把商品出库信息当做一种实体话,其属性关系有出库交易单编号、商品出货数量、会员卡编号、收银员编号、商品编号、总收入。
4、把商品入库信息当做一种实体话,其属性关系有入库交易单编号、入库商品编号、入库商品数量、总支出。
5、把会员信息当做一种实体话,其属性关系有会员卡ID、会员姓名、会员消费数量、会员积分。
总体E-R图如下:
4、详细设计
以概要设计为基本,每个功能模块用一种或各种函数来实现,书写每个函数算法,规划各函数之间调用关系。
详情请见数据库构成图以及功能分析模块。
5、程序编辑和调试
严格按照详细设计中算法,编写各函数代码,同步进行单个函数编译、链接、运营、修改;集成编译、链接、运营、修改。
这一阶段,学生也许以为是最重要、最漫长,实则否则。真正重要是前面概要设计和详细设计,若它们设计不完善、不精确,将导致编码、编译、调试漏洞百出、顾此失彼。
本人采用是java swing构图工具,虽然减少了许多代码量,但也带来了某些问题,如,功能按钮代码生成后与自己编程习惯不同,导致静态函数调用问题始终报错。
6、测试
软件测试目在于检查程序与否对的、能否达到预期目;是尽量地发现程序中存在错误并改正,不是也不也许发现程序中存在所有错误。
必然需要一定量数据作为测试实验品。叫测试用例。测试用例是一组条件或变量(输入数据和盼望成果集合),测试者依照它来拟定应用软件或软件系统与否对的工作。测试用例是通过实验达到引起构件失效和发现构件故障目。拟定软件程序或系统与否通过测试办法叫做测试准则。一种测试用例有5个属性:名称、可执行途径全称、输入数据、测试预言(盼望测试成果与输出成果比较)和日记(测试产生输出)。
测试用例常从如下几方面来选取:数据类型验证,数据边界值、非法值,选取构造中各分支都要执行到数据、循环初终值等。
测试活动技术重要涉及:构件检查、可用性测试、单元测试、集成测试和系统测试。构件检查是通过对源代码手工检查发现单个构件中故障。可用性测试用于找浮现实系统做了什么和顾客盼望值之间差别。单元测试通过测试单个单元办法以发现故障。集成测试通过集成各种单元来查找故障。系统测试关注整个系统、系统功能和非功能需求以及目的环境等。
此处填写程序测试测试用例。
程序中哪些地方需要完善。
登录界面:输入顾客名和密码。
主界面:登录成功,进入主界面。
主界面菜单显示:
输入收银员编号、姓名、密码,进行注册。
信息添加成功(注册成功)
收银员信息查询界面:
点击菜单中信息,会进行自动填充到输入栏中,以便修改。
为了避免误操作,修改会进行提示。
修改成功!
通过名字可以进行模糊查询
商品基本信息填写界面:信息添加成功!
商品查询,同样是按商品名称进行模糊查询。
作者信息简介窗口。
会员信息添加。
商品入库。
入库成功,列表值修改。
商品出库,但由于输入出库数量超过库存,因此异常。
自动算出商品交易总额,自动显示库存量。
商品列表库存值修改成功
退出商品,同样,为了避免误操作,退出系统会有相应提示。
7、总结
简介和总结在课程设计阶段学习得失、感悟、后续工作。
本次只设计了短短两周。虽说时间很短,但其中每一天都使我收获很大、受益匪浅,它不但极大地加深了我对某些理论知识理解,不但使我在理论上对Java有了全新结识,在实践能力上也得到了提高,真正地做到了学以致用,更学到了诸多做人道理,对我来说受益非浅。这也是第一次让我亲身感受到理论与实际相结合,让我大开眼界。也是对此前所学知识一种初审吧!这次实训对于我后来学习、找工作也是受益菲浅,在短短三周中相信这些宝贵经验会成为我此后成功重要基石;这对于我学业,乃至我后来人生影响无疑是极其深远。
这次完毕较为完善小项目虽然是咱们第一次,但是人们体现都不错,由此看来,咱们在进入大学这几种月里学到了不少专业知识,只是自己感觉不到而已。对于所学专业,咱们不能过于自卑和担忧,否则会妨碍自己学习。对于我来说,这两周是学习重要环节,有助于咱们巩固专业知识、掌握工作技能,提高就业筹码。
我把本次为期两周课程设计看作是“理论与实践相结合桥梁”。通过这周实训和学习,我懂得了本次实训目,也清晰当前自己局限性,那就是缺少相应知识与经验,对所学专业知识不可以较好地运用于实践操作。正所谓“百闻不如一见”,通过这次自身切身实践,我才深切地理睬到了“走出课堂,投身实践”必要性。平时,咱们只能在课堂上与教师一起纸上谈兵,思维结识基本上只是局限于课本范畴之内,也许就是这个因素就导致咱们对专业知识结识片面性,使得咱们只知因此然,而不知其之因此然!限制了咱们网络知识水平提高。但是课本上所学到理论知识是为咱们实际操作指明了方向、提供相应办法,真正职业技巧是要咱们从后来实际工作中慢慢汲取。而针对实际操作中遇到某些特殊问题,咱们不能拘泥于课本,不可纯粹地“以本为本”。
在这次课程设计中我得到了许多收获,我第一次体会到软件工程师工作是什么样子,也发现了诸多不曾注意到细节,在实训演示过程中,我对作为一名软件工程师注意事项应当从小事做起、从基本做起。把职业能力训练与职业素质有机结合起来。相信这对我接下来学习专业知识会起到很有效协助,在接下来几种月里,我会以作为一名职业人身份在这几种方面规定自己,严格自我,向软件工程师接近。
而通过这次实训,让我明白如果是一种完整项目开发,必要需要她人协助来完毕。因而不论在工作中还是在生活中要和教师、同窗保持良好关系是很重要。做事一方面要学做人,要明白做人道理,如何与人相处是当代社会做人一种最基本问题。对于自己这样一种即将步入社会人来说,需要学习东西诸多,她们就是最佳教师,正所谓“三人行,必有我师”,咱们可以向她们学习诸多知识、道理。
实训结束了感觉虽然辛苦,但很充实。我想这就是Java工程师工作。我也体会到软件工程师成功地完毕一种任务那种兴奋,那种小有成就感觉是只有置身其中人才干体会。
总之,这次实训为我提供了与众不同窗习办法和学习体会,从课本中面对现实,为我将来走上社会打下了夯实基本。作为在校计算机专业学生,当前我能做就是吸取知识,提高自身综合素质,提高自己职业技能,自己有了能力,届时候才会是“车到山前必有路”。我相信在不久将来,会有属于我自己一片天空。
8、附件:
com.dao包
package com.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.model.Cashier;
/**
* 收银员登录验证。
* @author csp-pc
*
*/
public class CashierDao {
public Cashier logon(Connection con,Cashier cashier) throws Exception {
Cashier resultCashier = null;
String sql = "select * from cashier where name=?and password=?";//查询收银员姓名和密码
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1,cashier.getName());
pstmt.setString(2,cashier.getPassword());
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
resultCashier = new Cashier(sql,sql);
resultCashier.setName(rs.getString("name"));
resultCashier.setPassword(rs.getString("password"));//得到姓名和密码
}else{
}
return resultCashier;
}
}
package com.dao;
import java.sql.*;
import com.model.*;
import com.util.StringUtil;
/**
* 收银员信息dao
* @author csp-pc
*
*/
public class CashierinforDao {
public int cashierinforAdd(Connection con,Cashierinfor cashierinfor) throws Exception{
String sql="insert into cashier value(?,?,?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setInt(1,cashierinfor.getNumber());//这个数据类型需要再考虑考虑。
pstmt.setString(2,cashierinfor.getName());
pstmt.setString(3,cashierinfor.getPassword());
return pstmt.executeUpdate();
}
public ResultSet CashierinforList(Connection con,Cashierinfor cashierinfor) throws Exception{
StringBuffer sb=new StringBuffer("select * from cashier");
if (StringUtil.isNotEmpty(cashierinfor.getName())){
sb.append(" and name like '%"+cashierinfor.getName()+"%'");
}
PreparedStatement pstmt=con.prepareStatement(sb.toString().replaceFirst("and","where"));
// 典型消息查询算法。
return pstmt.executeQuery();
}
public int cashierinfordelete(Connection con,String number) throws Exception{
String sql="delete from cashier where number=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1,number);
return pstmt.executeUpdate();
}
public int cashierinformodify(Connection con,Cashierinfor cashierinfor) throws Exception{
String sql="update cashier set name=?,password=?where number=? ";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1,cashierinfor.getName());
pstmt.setString(2,cashierinfor.getPassword());
pstmt.setInt(3,cashierinfor.getNumber());
return pstmt.executeUpdate();
}
}
package com.dao;
import java.sql.*;
import com.model.Cashierinfor;
import com.model.Goods;
import com.util.StringUtil;
/**
* 该类实现商品添加、修改、查找、删除dao。
* @author csp-pc
*
*/
public class GoodsDao {
public int goodsAdd(Connection con,Goods goods) throws Exception{
String sql="insert into goods value(?,?,?,?,?,?)";//数据库插入商品信息
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setInt(1,goods.getNumber());
pstmt.setString(2,goods.getName());
pstmt.setString(3,goods.getKind());
pstmt.setInt(4,goods.getAmount());
pstmt.setInt(5,goods.getWprice());
pstmt.setInt(6,goods.getRprice());
return pstmt.executeUpdate();
}
public ResultSet GoodsList(Connection con,Goods goods) throws Exception{
StringBuffer sb=new StringBuffer("select * from goods");//查询
if (StringUtil.isNotEmpty(goods.getName())){
sb.append(" and name like '%"+goods.getName()+"%'");//按商品名进行模糊查询
}
PreparedStatement pstmt=con.prepareStatement(sb.toString().replaceFirst("and","where"));
return pstmt.executeQuery();
}
public int goodsdelete(Connection con,String number) throws Exception{
String sql="delete from goods where number=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1,number);//删除商品信息
return pstmt.executeUpdate();
}
public int goodsmodify(Connection con,Goods goods) throws Exception{
String sql="update goods set name=?,kind=?,amount=?,wholesale_price=?,retail_price=?where number=? ";
//修改商品信息
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1,goods.getName());
pstmt.setString(2,goods.getKind());
pstmt.setInt(3,goods.getAmount());
pstmt.setInt(4,goods.getWprice());
pstmt.setInt(5,goods.getRprice());
pstmt.setInt(6,goods.getNumber());
return pstmt.executeUpdate();
}
public ResultSet Goodsid(Connection con,Goods goods)throws Exception{
String sql="select * from goods where number=?";//通过id查找所在商品相应行,拟定详细商品
PreparedStatement pstmt=con.prepareStatement(sql);
if(StringUtil.isNotEmpty(Integer.toString(goods.getNumber()))){
pstmt.setInt(1,goods.getNumber());
}
return pstmt.executeQuery();
}
}
package com.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.model.Businessout;
/**
* 出货dao类
* @author csp-pc
*
*/
public class BusinessDao {
public int b_outAdd1(Connection con,Businessout businessout) throws Exception{
String sql="insert into business_out value(null,?,?,?,?,?)" ;//数据库插入语句
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setInt(1,businessout.getGoods_amount());
pstmt.setInt(2,businessout.getMember_id());
pstmt.setInt(3,businessout.getCashier_id());
pstmt.setInt(4,businessout.getGoods_id());
pstmt.setInt(5,businessout.getMoney_put());//得到相应出库信息值。
return pstmt.executeUpdate();
}
}
package com.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.model.Member;
/**
* 会员信息dao
* @author csp-pc
*
*/
public class MemberDao {
public int addMember(Connection con,Member member) throws Exception{
String sql="insert into member(id,name) value(?,?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setInt(1,member.getId());
pstmt.setString(2,member.getName());
return pstmt.executeUpdate();
}
}
Com.model包
package com.model;
/**
* 商品出库交易模型。
* @author csp-pc
*
*/
public class Businessout {
private int id;
private int goods_amount;
private int member_id;
private int cashier_id;
private int goods_id;
private int money_put;
public int getId() {
return id;
}
public int getGoods_amount() {
return goods_amount;
}
public int getMember_id() {
return member_id;
}
public int getCashier_id() {
return cashier_id;
}
public int getGoods_id() {
return goods_id;
}
public int getMoney_put() {
return money_put;
}
public void setId(int id) {
this.id = id;
}
public void setGoods_amount(int goods_amount) {
this.goods_amount = goods_amount;
}
public void setMember_id(int member_id) {
this.member_id = member_id;
}
public void setCashier_id(int cashier_id) {
this.cashier_id = cashier_id;
}
public void setGoods_id(int goods_id) {
this.goods_id = goods_id;
}
public void setMoney_put(int money_put) {
this.money_put = money_put;
}
public Businessout(int goods_amount,int goods_id) {
super();
this.goods_amount = goods_amount;
this.goods_id = goods_id;
}
}
package com.model;
/**
* 顾客登录模型。
* @author csp-pc
*
*/
public class Cashier {
private int id;
private String Name;
private String Password;
public Cashier(String name,String password) {
super();
Name = name;
Password = password;
}
public int getId() {
return id;
}
public String getName() {
return Name;
}
public String getPassword() {
return Password;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
Name = name;
}
public void setPassword(String password) {
Password = password;
}
}
package com.model;
/**
* 收银员基本信息模型。
* @author csp-pc
*
*/
public class Cashierinfor {
private int number;
private String name;
private String password;
public Cashierinfor() {
super();
// TODO 自动生成构造函数存根
}
public Cashierinfor(int number,String name,String password) {
super();
this.number = number;
this.name = name;
this.password = password;
}
public int getNumber() {
return number;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
public void setNumber(int number) {
this.number = number;
}
public void setName(String name) {
this.name = name;
}
public void setPassword(String password) {
this.password = password;
}
}
package com.model;
/**
* 商品基本信息模型。
* @author csp-pc
*
*/
public class Goods {
private int number;
private String name;
private String kind;
private int amount;
private int wprice;
private int rprice;
public Goods() {
super();
// TODO 自动生成构造函数存根
}
public Goods(int number,String name,String kind,int amount,int wprice,int rprice) {
super();
this.number = number;
this.name = name;
this.kind = kind;
this.amount = amount;
this.wprice = wprice;
this.rprice = rprice;
}
public int getNumber() {
return number;
}
public String getName() {
return name;
}
public String getKind() {
return kind;
}
public int getAmount() {
return amount;
}
public int getWprice() {
return wprice;
}
public int getRprice() {
return rprice;
}
public void setNumber(int number) {
this.number = number;
}
public void setName(String name) {
this.name = name;
}
public void setKind(String kind) {
this.kind = kind;
}
public void setAmount(int amount) {
this.amount = amount;
}
public void setWprice(int wprice) {
this.wprice = wprice;
}
public void setRprice(int rprice) {
this.rprice = rprice;
}
}
package com.model;
/**
* 会员信息模型。
* @author csp-pc
*
*/
public class Member {
private int id;
private String name;
private int consume;
private int integral;
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getConsume() {
return consume;
}
public
展开阅读全文