超市管理系统项目:
本说明书是根据超市收银系统需求分析说明书的要求编写的,是为了实现系统的功能而设计一个体系架构,以满足设计中规定的各种要求,本说明书作为软件设计进一步详细设计的基础,也是编写代码的重要同是它也是需求设计人员,测试人员和管理人员的参考材料。
一、总体设计
(一)系统说明
超市收银系统主要划分为两块,一是商品库存管理,二是收银管理。
1.商品库存管理主要是仓库管理人员对库存进行查询,修改的功能(包括添加,删除,修改操作)。
2.收银管理主要是销售人员扫描商品,结账和打印票据功能。
(二)关键技术
采用Java语言,使用I/O技术和XML技术。
二、系统模块设计
(一)注册
注册成为库存管理员或者是收银员。
选择成为库存管理员或者是收银员,输入需要的注册编码。
1、显示登录界面:1.注册 2.登录 3.退出系统。
2、选择1时,提示成为库存管理员或者是收银员。
3、输入需要的注册编码
4、输入要注册的用户名,密码
5、注册成功判断是否继续注册
(二)登录
接收输入的用户名和密码,并进行验证,根据验证结果显示信息,如库存管理员显示库存管理员界面,如果是收银员,显示收银员界面。
1、显示登录界面:1.注册 2.登录 3.退出系统。
2、选择2时,提示输入用户名和密码。
3、接收输入的用户名和密码,并进行验证,根据验证结果显示信息, 如果登录错误,提示“用户名或密码错误!登录失败!”,重新提示 输入用户名和密码。如库存管理员显示库存管理员界面,如果是收银员,显示收银员界面。
(三)商品库存管理
商品入库,商品出库,新增商品,查询全部商品,按编号查询商品。
(1)商品入库
1、接收输入的商品编号,从数据源中验证是否有此商品。
2、如果有此商品,则提示输入入库数量,接收输入的入库数量,并 修改数据源中此商品的库存数量。并提示入库信息
3、入库成功后,显示全部库存商品的商品编号,商品名称,商品价 格,商品单位,商品数量。
4、如果没有此商品,则在客户端提示“没有此商品,请选择编号3: 新增商品!”。显示所有商品信息。
(2)商品出库
1、接收输入的商品编号,从数据源中验证是否有此商品。
2、如果有此商品,则提示输入出库数量,验证出库数量是否大于 库存数量,如果大于库存数量则返回出库失败的信息,并显示此 商品的商品编号,商品名称,商品价格,商品单位,商品数量; 如果小于库存数量,则减少此商品库存数量,并提示出库成功的 信息。并显示所有商品的商品编号,商品名称,商品价格,商品 单位,商品数量。
3、如果没有此商品,则在提示无此商品,重新提示输入商品编号。
(3)新增商品
1、接收输入的商品编号,从数据源中验证是否有此商品。
2、如果有此商品,则提示重新输入商品编号。
3、如果没有此商品,则提示输入商品名称,价格,单位,数量,然后保存到数据源中,并返回新增商品成功的信息。
4、新增成功后,显示所有商品的信息。
(4)查询全部商品
接收请求,查询全部商品,显示全部商品信息。
(5)按查询号查询商品
1、接收输入的商品编号,从数据源中验证是否有此商品,如果有则显示此商品信息。商品编号,商品名称,商品 价格,商品单位,商品数量。
2、如果没有此商品,则返回无此商品信息。
(四)收银管理
(1)扫描商品
1、接收输入的商品编号,从数据源中验证是否有此商品,如果有此商品,则将此商品信息保存到订单中,保存订单时需要判断订单中是否已有此商品,如果有则只在购买数量上增加1,但是要判断数量是否超过库存数量,如果没有则修改购买数量,有则不能再增加;如果没有则在订单中保存商品的全部信息:商品编号,商品名称,商品价格,商品单位,商品数量.
2、订单保存好后,显示订单中商品的商品名称(编号+名称+单位),单价,数量,金额(金额=数量*单价)。
3、如果没有此商品,则提示“没有此商品,扫描失败"。
(2)修改购买数量
1、接收客户端输入的商品编号,从数据源中验证是否有此商品,如果有,,则继续需要判断订单中是否已有此商品,有则提示输入修改的数量,再修改订单中此商品的数量,但是要判断数量是否超过库存数量,如果没有则修改购买数量,有则不能再修改。
2、修改成功后,显示订单中商品的商品名称(编号+名称+单位),单价,数量,金额(金额=数量*单价).
3、如果没有此商品,则提示没有扫描此商品。
(3)结账
选择结账后,计算订单中商品的总金额并显示,提示有普通结账和会员结账。
1、普通结账
1)计算订单商品的总金额并显示。
2)接收输入的支付金额,进行验证并计算找零,再打印票据。 票据显示收银员号,小票号,购买商品明细(包括商品名称, 商品编号,商品单位,单价,数量,金额(数量*单价),总 数量,应收,实收,找零,当时系统时间和提示。
3)结账后,清空商品明细,并修改库存数量。
4)如果订单中没有商品时,选择结账,则提示没有扫描商品,选择修改数量,则提示没有扫描商品,如图-12
2、会员结账
1)计算订单商品的总金额并显示
2)接收输入的会员卡号,并进行验证,根据返回信息显示,如果正确,则提示输入支付金额,接收输入的支付金额,进行验证并计算找零,再计算本次消费所得积分,并修改此会员的积分。
3)打印票据。票据显示收银员号,小票号,购买商品明细(包括商品名称,商品编号,商品单位,单价,数量,金额(数量*单价),总数量,应收,实收,找零,会员卡号,消费前积分,本次消费积分,消费后积分,当时系统时间和提示。)
4)结账后,清空商品明细,并修改库存数量。
5)如果会员卡号错误,则提示”会员卡号错误“,提示重新输入会员号。
三、数据库相关文件
使用属性的格式存储信息:(详见附件)
User.xml——用户信息表
<?xml version="1.0" encoding="UTF-8"?>
<!-- 用户信息 -->
<Users>
<user username="1001" pwd="1111" role="storeMgr"/>
<!-- 库管 -->
<user username="1002" pwd="2222" role="cashier"/>
<!-- 收银员 -->
<user username="1003" pwd="3333" role="storeMgr"/>
<user username="1004" pwd="4444" role="cashier"/>
<user username="1005" pwd="5555" role="storeMgr"/>
<user username="1006" pwd="6666" role="cashier"/>
<user username="1007" pwd="7777" role="storeMgr"/>
<user username="1008" pwd="8888" role="cashier"/>
<user username="1009" pwd="9999" role="storeMgr"/>
<user username="1010" pwd="0000" role="cashier"/>
<user username="1234" pwd="1111" role="storeMgr"/>
<user username="1213" pwd="1111" role="cashier"/>
</Users>
Commodity.xml-——商品信息表
<?xml version="1.0" encoding="UTF-8"?>
<!-- 商品信息 -->
<!-- 商品编号,商品名称,商品单价,单位,库存 -->
<Commoditys>
<commodity comId="1001" comName="芝麻油" price="9.5" unit="125ml" num="88"/>
<commodity comId="1002" comName="雀巢咖啡" price="1.5" unit="13g" num="158"/>
<commodity comId="1003" comName="脉动柠檬" price="7.0" unit="1.5L" num="45"/>
<commodity comId="1004" comName="旺仔QQ糖" price="2.5" unit="70g" num="70"/>
<commodity comId="1005" comName="熟切片" price="6.5" unit="400g" num="10"/>
<commodity comId="1006" comName="黄豆芽" price="2.4" unit="350g" num="20"/>
<commodity comId="1007" comName="白玉豆腐" price="1.0" unit="400g" num="15"/>
<commodity comId="1008" comName="娃哈哈" price="4.5" unit="136ml" num="15"/>
<commodity comId="1009" comName="冰红茶" price="3.5" unit="500ml" num="50"/>
<commodity comId="1010" comName="伊利纯牛奶" price="3.5" unit="250ml" num="30"/>
<commodity comId="1011" comName="奥利奥" price="16.5" unit="500g" num="100"/>
<commodity comId="1012" comName="可口可乐" price="3.0" unit="500ml" num="10"/>
<commodity comId="1013" comName="怡宝" price="2.0" unit="555ml" num="13"/>
</Commoditys>
customer.xml——会员信息表
<?xml version="1.0" encoding="UTF-8"?>
<!-- 会员信息 -->
<!-- 会员号 ,积分 -->
<Customers>
<customer custId="2001" score="689"/>
<customer custId="2002" score="100"/>
<customer custId="2003" score="200"/>
<customer custId="2004" score="300"/>
<customer custId="2005" score="400"/>
<customer custId="2006" score="500"/>
<customer custId="2007" score="600"/>
</Customers>
四、代码实现
(一)加载Document文档类,写保存代码类
import java.io.FileOutputStream;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/*
* author: 毛欣
* JDK 1.7
* 控制台输出
*/
public class BaseDao {
protected Document document;
//加载整个Document文档
public void parse(String url) throws DocumentException {
SAXReader reader = new SAXReader();
document = reader.read(url);
}
//保存user.xml文档
public void saveEn(){
XMLWriter writer=null;
OutputFormat format=null;
try {
format = OutputFormat.createPrettyPrint();
writer = new XMLWriter(new FileOutputStream("user.xml"),format);
writer.write(document);
writer.flush();
System.out.println("保存注册成功");
} catch (IOException e) {
e.printStackTrace();
}
finally{
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//保存commodity.xml文档
public void saveCom(){
XMLWriter writer=null;
OutputFormat format=null;
try {
format = OutputFormat.createPrettyPrint();
writer = new XMLWriter(new FileOutputStream("commodity.xml"),format);
writer.write(document);
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
finally{
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//保存customer.xml文档
public void saveCus(){
XMLWriter writer=null;
OutputFormat format=null;
try {
format = OutputFormat.createPrettyPrint();
writer = new XMLWriter(new FileOutputStream("customer.xml"),format);
writer.write(document);
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
finally{
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
(二)注册类
import java.util.Iterator;
import java.util.Scanner;
import org.dom4j.DocumentException;
import org.dom4j.Element;
/*
* author: 毛欣
* JDK 1.7
* 控制台输出
*
*/
public class Enroll extends BaseDao{
public void addEn(){
try {
//解析user.xml文件
parse("user.xml");
} catch (DocumentException e) {
System.out.println("文件找不到");
}
System.out.println("*****欢迎进入超市注册系统*****");
Scanner input = new Scanner(System.in);
String username = null;
String pwd = null;
String role = null;
boolean panduan = true;
Element root=document.getRootElement();
Iterator commoditys=null;
do{
System.out.println("请选择要注册的系统(1.库存管理系统/2.收银系统)");
panduan = true;
String choose = input.next();
switch(choose){
case "1":
boolean tag1=false;
System.out.println("请库存管理系统的输入注册编码:");
String num1 = input.next();
if(num1.equals("12345")){
role = "storeMgr";
do{
tag1=false;
System.out.println("请输入用户名");
username = input.next();
commoditys=root.elementIterator();
//查找文件中是否有重复用户名
while(commoditys.hasNext()){
Element commodity=(Element)commoditys.next();
String name=commodity.attributeValue("username");
if(name.equals(username)){
tag1=true;
System.out.println("用户名重复,请重新输入!");
break;
}
}
if(!tag1){
System.out.println("请输入密码");
pwd = input.next();
commoditys=root.elementIterator();
//给users添加子节点user
Element user=root.addElement("user");
//添加属性
user.addAttribute("username", username);
user.addAttribute("pwd", pwd);
user.addAttribute("role", role);
//保存文件
saveEn();
//判断是否继续
System.out.println("是否继续注册(输入y继续注册,输入其他离开)");
String jixu = input.next();
if(jixu.equals("y")){
panduan = false;
break;
}
}
}while(tag1);
}else{
System.out.println("输入错误请重新注册:");
panduan = false;
}
break;
case "2":
boolean tag2=false;
System.out.println("请收银系统的输入注册编码:");
String num2 = input.next();
if(num2.equals("123456")){
role = "cashier";
do{
tag2=false;
System.out.println("请输入用户名");
username = input.next();
commoditys=root.elementIterator();
while(commoditys.hasNext()){
Element commodity=(Element)commoditys.next();
String name=commodity.attributeValue("username");
if(name.equals(username)){
tag2=true;
System.out.println("用户名重复,请重新输入!");
break;
}
}
if(!tag2){
System.out.println("请输入密码");
pwd = input.next();
commoditys=root.elementIterator();
Element user=root.addElement("user");
user.addAttribute("username", username);
user.addAttribute("pwd", pwd);
user.addAttribute("role", role);
saveEn();
System.out.println("是否继续注册(输入y继续注册,输入其他离开)");
String jixu = input.next();
if(jixu.equals("y")){
panduan = false;
break;
}
}
}while(tag2);
}else{
System.out.println("输入错误请重新注册:");
panduan = false;
}
break;
default:
System.out.println("输入错误请重新选择");
panduan = false;
break;
}
}while(!panduan);
}
}
(三)用户登录类
import java.util.Iterator;
import java.util.Scanner;
import org.dom4j.DocumentException;
import org.dom4j.Element;
/*
* author: 毛欣
* JDK 1.7
* 控制台输出
*
*/
public class Users extends BaseDao{
//根据用户名密码查询角色
public void getRole(){
String username = null;
String pwd = null;
boolean panduan = false;
try {
parse("user.xml");
} catch (DocumentException e) {
e.printStackTrace();
}
Scanner input=new Scanner(System.in);
do{
System.out.println("请输入用户名:");
username=input.next();
System.out.println("请输入密码:");
pwd=input.next();
//遍历所有子节点
Element root=document.getRootElement();
Iterator it= root.elementIterator();
while(it.hasNext()){
Element user=(Element)it.next();
String name=user.attributeValue("username");
String password=user.attributeValue("pwd");
if(name.equals(username)&&password.equals(pwd)){
String role=user.attributeValue("role");
if(role.length()>0){
//登录成功
if(role.equals("storeMgr")){//管理员
//调用仓库管理系统
StoreManager sm = new StoreManager();
sm.start();
panduan = true;
break;
}else if(role.equals("cashier")){
//调用收银系统
CashierManager cm = new CashierManager();
cm.start(name);
panduan = true;
break;
}
}
}
}
if(panduan==false){
//用户名密码错误
System.out.println("用户名或者密码输入错误!登录失败!请重新输入!");
getRole();
}
}while(panduan);
}
}
(四)仓库类
import java.util.Iterator;
import java.util.Scanner;
import org.dom4j.Element;
/*
* author: 毛欣
* JDK 1.7
* 控制台输出
*
*/
public class Store extends BaseDao{
Scanner input = new Scanner(System.in);
//商品入库
public void addProduct(){
System.out.print("输入要入库的商品编号:");
String id = input.next();
Element root=document.getRootElement();
Iterator commoditys=root.elementIterator();
boolean tag=false;
while(commoditys.hasNext()){
Element commodity=(Element)commoditys.next();
String comId=commodity.attributeValue("comId");
//找到要修改的编号
if(comId.equals(id)){
tag=true;
//提取出数量,并且转化成int类型
int num1 = Integer.parseInt(commodity.attributeValue("num"));
int num=0;
boolean shuru=true;
do{
shuru=true;
System.out.print("入库数量:");
try{
num = input.nextInt();
}catch(Exception e){
System.out.println("请输入正确数字格式!");
input.next();
shuru=false;
}
}while(!shuru);
num1 = num1+num;
//用add方法改变num属性
commodity.addAttribute("num",num1+"");
saveCom();//将修改的内容保存到xml文档
System.out.println("入库成功!");
query();
}
}
if(!tag){
System.out.println("没有此商品,请选择编号3. 新增商品!");
query();
}
}
//商品出库
public void reduceProduct(){
Element root=document.getRootElement();
Iterator commoditys=root.elementIterator();
boolean tag=false;
System.out.print("输入要出库的商品编号:");
String id = input.next();
while(commoditys.hasNext()){
Element commodity=(Element)commoditys.next();
String comId=commodity.attributeValue("comId");
//找到要修改的编号
if(comId.equals(id)){
tag=true;
//提取出数量,并且转化成int类型
int num2 = Integer.parseInt(commodity.attributeValue("num"));
int num=0;
boolean shuru=true;
do{
shuru=true;
System.out.print("出库数量:");
try{
num = input.nextInt();
}catch(Exception e){
System.out.println("请输入正确数字格式!");
input.next();
shuru=false;
}
}while(!shuru);
if(num2>=num){
num2 = num2-num;
//用add方法改变num属性
commodity.addAttribute("num",num2+"");
saveCom();//将修改的内容保存到xml文档
System.out.println("出库成功!");
query();
break;
}else{
System.out.println("库存不足,请核实,出库失败!");
System.out.println("商品编号\t\t商品名称\t\t商品单价\t\t单位\t\t数量");
String comName=commodity.attributeValue("comName");
String price=commodity.attributeValue("price");
String unit=commodity.attributeValue("unit");
String num3=commodity.attributeValue("num");
System.out.println(comId+"\t\t"+comName+"\t\t"+price+"\t\t"+unit+"\t\t"+num3);
break;
}
}
}
if(!tag){
System.out.println("没有此商品!");
reduceProduct();
}
}
//查询所有内容
public void query(){
//得到根节点
Element root=document.getRootElement();
//得到根节点的所有子节点commoditys
Iterator commoditys=root.elementIterator();
System.out.println("商品编号\t\t商品名称\t\t商品单价\t\t单位\t\t数量");
while(commoditys.hasNext()){
Element commodity=(Element)commoditys.next();
//得到commodity的属性
String comId=commodity.attributeValue("comId");
String comName=commodity.attributeValue("comName");
String price=commodity.attributeValue("price");
String unit=commodity.attributeValue("unit");
String num=commodity.attributeValue("num");
System.out.println(comId+"\t\t"+comName+"\t\t"+price+"\t\t"+unit+"\t\t"+num);
}
}
//增加商品
public void add(){
Element root=document.getRootElement();
Iterator commoditys=root.elementIterator();
boolean tag=true;
int idi=0;
boolean shuru=true;
do{
shuru=true;
System.out.print("输入要增加的商品编号:");
try{
idi = input.nextInt();
}catch(Exception e){
System.out.println("请输入正确的的编号格式!");
input.next();
shuru=false;
}
}while(!shuru);
String id = idi+"";
while(commoditys.hasNext()){
Element commodity=(Element)commoditys.next();
String comId=commodity.attributeValue("comId");
if(comId.equals(id)){
tag=false;
System.out.println("此编号已存在!");
add();
}
}
if(tag){
//给root添加子节点commodity
Element commodity=root.addElement("commodity");
//添加属性
commodity.addAttribute("comId", id);
System.out.print("输入商品名称:");
commodity.addAttribute("comName", input.next());
System.out.print("输入商品单价:");
commodity.addAttribute("price", input.next());
System.out.print("输入商品单位:");
commodity.addAttribute("unit", input.next());
System.out.print("输入商品数量:");
commodity.addAttribute("num", input.next());
saveCom();
System.out.println("新增商品成功!");
query();
}
}
//根据编号查询并输出
public void choose(){
Element root=document.getRootElement();
Iterator commoditys=root.elementIterator();
boolean tag=false;
System.out.print("输入要查询的商品编号:");
String id = input.next();
while(commoditys.hasNext()){
Element commodity=(Element)commoditys.next();
String comId=commodity.attributeValue("comId");
if(comId.equals(id)){
tag=true;
System.out.println("商品编号\t\t商品名称\t\t商品单价\t\t单位\t\t数量");
String comName=commodity.attributeValue("comName");
String price=commodity.attributeValue("price");
String unit=commodity.attributeValue("unit");
String num=commodity.attributeValue("num");
System.out.println(comId+"\t\t"+comName+"\t\t"+price+"\t\t"+unit+"\t\t"+num);
break;
}
}
if(!tag){
System.out.println("对不起,没有此商品!");
choose();
}
}
}
(五)仓库管理类
import java.util.Scanner;
import org.dom4j.DocumentException;
/*
* author: 毛欣
* JDK 1.7
* 控制台输出
*
*/
public class StoreManager {
Store store = new Store();
Scanner input = new Scanner(System.in);
public void start(){
try {
store.parse("commodity.xml");
} catch (DocumentException e) {
System.out.println("文件找不到");
}
//库存管理系统初始化
System.out.println("*****欢迎登陆超市库存管理系统*****");
do{
System.out.println("请选择进行的操作:1.商品入库 2.商品出库 3.新增商品 4.查询全部商品 5.按查询号查询商品 6.返回主菜单 7.退出系统");
String option=input.next();
switch (option) {
case "1":
//调用入库方法
store.addProduct();
break;
case "2":
//调用入库方法
store.reduceProduct();
break;
case "3":
//增加方法
store.add();
break;
case "4":
//调用输出方法
store.query();
break;
case "5":
//调用根据编号查询方法
store.choose();
break;
case "6":
//返回主菜单
StartAll s = new StartAll();
s.startAll();
break;
case "7":
//退出系统
System.out.println("系统已退出,谢谢使用!");
System.exit(0);
break;
default:
System.out.println("输入错误,请重新输入!");
break;
}
}while(true);
}
}
(六)cash类保存扫描列表
/*
* author: 毛欣
* JDK 1.7
* 控制台输出
*
*/
public class Cash {
private String id;
private String name;
private int num;
private double price;
private double sum;
public Cash(){}
public Cash(String id,String name, int num, double price, double sum) {
this.setId(id);
this.name = name;
this.num = num;
this.price = price;
this.sum = sum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public double getSum() {
return sum;
}
public void setSum(double sum) {
this.sum = sum;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
(七)收银类
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.Scanner;
import org.dom4j.DocumentException;
import org.dom4j.Element;
/*
* author: 毛欣
* JDK 1.7
* 控制台输出
*
*/
public class Cashier extends BaseDao{
Scanner input = new Scanner(System.in);
ArrayList<Cash> list = new ArrayList<Cash>();
//扫描商品
public void addProduct(){
System.out.print("输入要扫描的商品编号:");
String id = input.next();
try {
parse("commodity.xml");
} catch (DocumentException e) {
System.out.println("文件找不到");
}
Element root=document.getRootElement();
Iterator commoditys = root.elementIterator();
boolean tag=false;
boolean zengjia = false;
while(commoditys.hasNext()){
Element commodity=(Element)commoditys.next();
String comId=commodity.attributeValue("comId");
//找到要修改的商品编号
if(comId.equals(id)){
tag=true;
String comName=commodity.attributeValue("comName");
int num1 = Integer.parseInt(commodity.attributeValue("num"));//属性num解析成int类型
double price = Double.parseDouble(commodity.attributeValue("price"));//属性price解析成double类型
//判断是否有存货
if(num1>=1){
int num2;
System.out.println("扫描成功!");
//遍历集合,查询是否已经扫描过该商品
for(int i = 0;i<list.size();i++){
Cash title = (Cash)list.get(i);
//已经扫描的直接加1
if(title.getId().equals(comId)){
zengjia=true;
num2=title.getNum()+1;
double sum = num2*price;
title.setNum(num2);
title.setSum(sum);
query();
break;
}
}
//没有扫描过的赋值为1
if(!zengjia){
num2=1;
double sum = num2*price;
Cash c = new Cash(comId,comName,num2,price,sum);
list.add(c);
query();
break;
}
}else{
System.out.println("该商品数量不足,请选择其他商品!");
addProduct();
}
}
}
if(!tag){
System.out.println("对不起,没有此商品,扫描失败,请选择其他商品!");
addProduct();
}
}
//输出购买的商品
public void query(){
System.out.println("商品名称\t\t\t数量\t\t单价\t\t金额");
System.out.println("---------------------------------------------------------------------------------------------------------");
for(int i = 0;i<list.size();i++){
Cash title = (Cash)list.get(i);
System.out.println("("+title.getId()+")"+title.getName()+"\t\t"+title.getNum()+"\t\t"+title.getPrice()+"\t\t"+title.getSum());
}
System.out.println("---------------------------------------------------------------------------------------------------------");
}
//修改数量
public void modify(){
//判断集合是否为空
if(list!=null&&!list.isEmpty()){
System.out.print("输入要修改数量的商品编号:");
String id = input.next();
boolean tag=false;
for(int i = 0;i<list.size();i++){
Cash title = (Cash)list.get(i);
//在集合中找到要修改的商品编号
if(title.getId().equals(id)){
tag=true;
int num2=0;
boolean shuru=true;
do{
shuru=true;
System.out.print("输入修改数量:");
try{
num2 = input.nextInt();
}catch(Exception e){
System.out.println("请输入正确数字格式!");
input.next();
shuru=false;
}
}while(!shuru);
try {
parse("commodity.xml");
} catch (DocumentException e) {
System.out.println("文件找不到");
}
Element root=document.getRootElement();
Iterator commoditys = root.elementIterator();
while(commoditys.hasNext()){
Element commodity=(Element)commoditys.next();
String comId=commodity.attributeValue("comId");
//在XML中找到要修改的商品编号
if(comId.equals(id)){
int num1 = Integer.parseInt(commodity.attributeValue("num"));
double price = Double.parseDouble(commodity.attributeValue("price"));
//判断仓库中的数量是否够
if(num1>=num2){
if(num2==0){
System.out.println("输入错误,请进行删除操作!");
query();
break;
}else{
title.setNum(num2);
System.out.println("数量修改成功!");
double sum = num2*price;
title.setSum(sum);
query();
}
break;
}else{
System.out.println("该商品数量不足,请选择其他商品!");
modify();
}
}
}
}
}
if(tag==false){
System.out.println("没有扫描此商品!");
modify();
}
}else{
System.out.println("您还没有扫描商品!");
}
}
//删除
public void del(){
//判断集合是否为空
if(list!=null&&!list.isEmpty()){
System.out.print("输入要删除的商品编号:");
String id = input.next();
boolean tag=false;
for(int i = 0;i<list.size();i++){
Cash title = (Cash)list.get(i);
//在集合中找到要修改的商品编号
if(title.getId().equals(id)){
tag=true;
list.remove(title);
System.out.println("删除成功!");
query();
}
}
if(tag==false){
System.out.println("没有扫描此商品!");
modify();
}
}else{
System.out.println("您还没有扫描商品!");
}
}
//结账
public void settleBill(String id){
int totle = 0;
double sum=0;
double money=0;
double change=0;
//判断集合是否为空
if(list!=null&&!list.isEmpty()){
for(int i = 0;i<list.size();i++){
Cash title = (Cash)list.get(i);
//计算总金额
sum=sum+title.getSum();
}
System.out.println("总金额是"+sum);
System.out.println("1. 普通结账\t2. 会员结账");
String jiezhang=input.next();
switch(jiezhang){
//普通结账
case "1":
System.out.print("请输入您要支付的金额:");
boolean jine1 = false;
do{
try{
money = input.nextDouble();
if(money>=sum){
jine1 = true;
}else{
System.out.println("请输入正确的金额!");
}
}catch(Exception e){
System.out.println("请输入正确格式的金额!");
input.next();
}
}while(!jine1);
//输出购物小票,减少库存数,清空linkedList
System.out.println("\t\t\t超市小票\t\t\t");
System.out.print("收银员号:"+id+"\t\t");
Date date1 = new Date();
SimpleDateFormat formater1 = new SimpleDateFormat("yyyyMMddHHmmss");
String now1 = formater1.format(date1);
System.out.println("小票号:"+now1+id);
System.out.println("序号\t\t商品名称\t\t\t数量\t\t单价\t\t金额");
System.out.println("---------------------------------------------------------------------------------------------------------");
for(int i = 0;i<list.size();i++){
Cash title = (Cash)list.get(i);
totle = totle+title.getNum();
System.out.println(i+1+"\t\t("+title.getId()+")"+title.getName()+"\t\t"+title.getNum()+"\t\t"+title.getPrice()+"\t\t"+title.getSum());
Element root=document.getRootElement();
Iterator commoditys = root.elementIterator();
while(commoditys.hasNext()){
Element commodity=(Element)commoditys.next();
String comId=commodity.attributeValue("comId");
if(comId.equals(title.getId())){
int num1 = Integer.parseInt(commodity.attributeValue("num"))-title.getNum();
//改变XML文件中的商品数量
commodity.addAttribute("num", num1+"");
saveCom();
}
}
}
System.out.println("---------------------------------------------------------------------------------------------------------");
System.out.print("总数量:"+totle+"\t\t");
System.out.println("应收:"+sum);
System.out.print("实收:"+money+"\t\t");
change = money-sum;
System.out.println("找零:"+change);
Date date2 = new Date();
SimpleDateFormat formater2 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String now2 = formater2.format(date2);
System.out.println(now2);
System.out.println("此小票是您退换货及核对积分的凭证,请妥善保存!");
System.out.println("=========================================================================================================");
//清空集合
list.clear();
break;
//会员结账
case "2":
String custId = null;
int score = 0;
boolean huiyuan = false;
try {
parse("customer.xml");
} catch (DocumentException e) {
System.out.println("文件找不到");
}
do{
System.out.print("请输入您的会员卡号:");
String iD = input.next();
Element root=document.getRootElement();
Iterator customers = root.elementIterator();
while(customers.hasNext()){
Element customer=(Element)customers.next();
custId=customer.attributeValue("custId");
if(custId.equals(iD)){
System.out.print("会员卡号正确,请输入您要支付的金额:");
score= Integer.parseInt(customer.attributeValue("score"));
huiyuan = true;
break;
}
}
if(!huiyuan){
System.out.println("会员卡号错误,请重新输入!");
}
}while(!huiyuan);
boolean jine2 = false;
do{
try{
money = input.nextDouble();
if(money>=sum){
jine2 = true;
}else{
System.out.println("请输入正确的金额!");
}
}catch(Exception e){
System.out.println("请输入正确格式的金额!");
input.next();
}
}while(!jine2);
//输出购物小票
System.out.println("\t\t\t超市小票\t\t\t");
System.out.print("收银员号:"+id+"\t\t");
Date date3 = new Date();
SimpleDateFormat formater3 = new SimpleDateFormat("yyyyMMddHHmmss");
String now3 = formater3.format(date3);
System.out.println("小票号:"+now3+id);
System.out.println("序号\t\t商品名称\t\t\t数量\t\t单价\t\t金额");
System.out.println("---------------------------------------------------------------------------------------------------------");
for(int i = 0;i<list.size();i++){
Cash title = (Cash)list.get(i);
totle = totle+title.getNum();
System.out.println(i+1+"\t\t("+title.getId()+")"+title.getName()+"\t\t"+title.getNum()+"\t\t"+title.getPrice()+"\t\t"+title.getSum());
try {
parse("commodity.xml");
} catch (DocumentException e) {
System.out.println("文件找不到");
}
Element root=document.getRootElement();
Iterator commoditys = root.elementIterator();
while(commoditys.hasNext()){
Element commodity=(Element)commoditys.next();
String comId=commodity.attributeValue("comId");
if(comId.equals(title.getId())){
int num1 = Integer.parseInt(commodity.attributeValue("num"))-title.getNum();
commodity.addAttribute("num", num1+"");
saveCom();
}
}
}
System.out.println("---------------------------------------------------------------------------------------------------------");
System.out.print("总数量:"+totle+"\t\t");
System.out.println("应收:"+sum);
System.out.print("实收:"+money+"\t\t");
change = money-sum;
System.out.println("找零:"+change);
System.out.println("本次累计积分成功\t卡号:"+custId);
System.out.println("消费前积分 + 本次消费积分 = 消费后积分");
System.out.println(score+" + "+(int)sum+" = "+(score + (int)sum));
try {
parse("customer.xml");
} catch (DocumentException e) {
System.out.println("文件找不到");
}
Element root=document.getRootElement();
Iterator customers = root.elementIterator();
while(customers.hasNext()){
Element customer=(Element)customers.next();
String custIdchange=customer.attributeValue("custId");
if(custIdchange.equals(custId)){
customer.attribute("score").setValue((score + (int)sum)+"");
}
}
saveCus();
Date date4 = new Date();
SimpleDateFormat formater4 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String now4 = formater4.format(date4);
System.out.println(now4);
System.out.println("此小票是您退换货及核对积分的凭证,请妥善保存!");
System.out.println("=========================================================================================================");
list.clear();
break;
default:
System.out.println("输入错误,请重新选择!");
settleBill(id);
break;
}
}else{
System.out.println("您还没有扫描商品!");
}
}
}
(八)收银管理类
import java.util.Scanner;
/*
* author: 毛欣
* JDK 1.7
* 控制台输出
*
*/
public class CashierManager {
Cashier cashier = new Cashier();
Scanner input = new Scanner(System.in);
public void start(String id){
String sid = id;
System.out.println("*****欢迎登陆超市收银系统*****");
do{
System.out.println("请选择进行的操作:1.扫描商品 2.修改数量 3.结账 4.删除 5.返回主菜单 6.退出系统");
String option=input.next();
switch (option) {
case "1":
//调用扫描商品方法
cashier.addProduct();
break;
case "2":
//修改商品数量方法
cashier.modify();
break;
case "3":
//调用结账方法
cashier.settleBill(sid);
break;
case "4":
cashier.del();
break;
case "5":
//返回主菜单
//清空集合
cashier.list.clear();
StartAll s = new StartAll();
s.startAll();
break;
case "6":
//退出系统
cashier.list.clear();
System.out.println("系统已退出,谢谢使用!");
System.exit(0);
break;
default:
System.out.println("输入错误,请重新输入!");
break;
}
}while(true);
}
}
(九)启动类
import java.util.Scanner;
/*
* author: 毛欣
* JDK 1.7
* 控制台输出
*
*/
//启动系统
public class StartAll {
public void startAll(){
Scanner input = new Scanner(System.in);
do{
System.out.println("***********欢迎使用超市管理系统***********");
System.out.println("1. 注册");
System.out.println("2. 登录");
System.out.println("3. 退出");
System.out.println("************请选择数字1、2、3************");
String xuanze = input.next();
switch(xuanze){
case "1":
Enroll en = new Enroll();
en.addEn();
break;
case "2":
Users us = new Users();
us.getRole();
break;
case "3":
System.out.println("系统已退出,谢谢使用!");
System.exit(0);
break;
default:
System.out.println("输入错误,请重新输入!");
break;
}
}while(true);
}
}
(九)测试类
/*
* author: 毛欣
* JDK 1.7
* 控制台输出
*
*/
public class Test {
public static void main(String[] args) {
StartAll s = new StartAll();
s.startAll();
}
}