利用XML文件以及集合方法设计简单超市管理系统的Java程序

超市管理系统项目:

本说明书是根据超市收银系统需求分析说明书的要求编写的,是为了实现系统的功能而设计一个体系架构,以满足设计中规定的各种要求,本说明书作为软件设计进一步详细设计的基础,也是编写代码的重要同是它也是需求设计人员,测试人员和管理人员的参考材料。

一、总体设计

(一)系统说明

超市收银系统主要划分为两块,一是商品库存管理,二是收银管理。

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();
	}
}

 

猜你喜欢

转载自blog.csdn.net/baidu_29343517/article/details/81612635
今日推荐