首先定义一个商品的实体类代码如下:
/*
* 定义GoodsItem类(名称、货号、单价、数量、计价单位、金额)
*/
public class GoodsItem {
/*
* 成员变量
*/
// 商品名称
private String name;
// 商品标识
private String id;
// 商品单价
private double price;
// 商品数量
private int number;
// 计价单位
private String unit;
// 金额
private double money;
/*
* 构造方法
*/
public GoodsItem() {
super();
}
public GoodsItem(String name, String id, double price, int number, String unit, double money) {
this.name = name;
this.id = id;
this.price = price;
this.number = number;
this.unit = unit;
this.money = money;
}
/*
* getter/setter·½·¨
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
}
然后创建一个ShoppingReceipt类,用于实现小票的打印,和方法的创建,这里我把主函数和方法都放在这一个类中,方便你们看。
这里我把方法和mian函数给你们分开放,但是写的时候我是写在一起的,分开放有利于你们观看。
我们根据图片将超市购物系统的原始界面打印出来,首先我们要先创建两个集合用于存储商品,一个是存储商品的集合,一个是购物车的集合。 然后再主函数中,我们要循环操作所以用while,当然首先我们要先初始化商品将商品添加到系统中。
public class ShoppingReceipt {
// 定义集合存储商品
static ArrayList items = new ArrayList();
// 定义集合存储用户购买的商品项
static ArrayList shoppingCar = new ArrayList();
public static void main(String[] args) {
// 初始化商
initGoodsItems();
// 打印欢迎语句
System.out.println("\t欢迎使用超市购物系统");
// 创建键盘录入对象
Scanner sc = new Scanner(System.in);
// 循环使用购物系统
while(true){
System.out.println("请输入你要进行的操作:\n1:购买商品\t 2:结算并打印小票\t3:退出系统");
int optNumber = sc.nextInt();
switch (optNumber) {
case 1: // 购买商品
buyGoods();
break;
case 2: // 打印小票
printTicket();
break;
case 3:
System.out.println("感谢您使用超市购物系统,欢迎下次光临,拜拜");
// 退出购物系统
System.exit(0);
break;
default:
System.out.println("你输入的数字有误,请重新输入");
break;
}
}
}
//上面的方法,写在这里,我只不过把它放在下面展示了而已
}
初始化商品创建静态的initGoodsItems方法
public static void initGoodsItems() {
// 创建多个商品项
GoodsItem item1 = new GoodsItem("卫龙", "001", 15.5, 0, "斤", 0);
GoodsItem item2 = new GoodsItem("火爆鸡筋", "002", 14.5, 0, "包", 0);
GoodsItem item3 = new GoodsItem("唐僧肉", "003", 345, 0, "个", 0);
GoodsItem item4 = new GoodsItem("话梅糖", "004", 199, 0, "G", 0);
// 将商品项添加到集合中
items.add(item1);
items.add(item2);
items.add(item3);
items.add(item4);
}
创建buyGoods方法
public static void buyGoods() {
System.out.println("------------------------------");
System.out.println("\t商品列表");
System.out.println("商品id\t名称\t单价\t计价单位");
// 展示所有商品项
for (int index = 0; index < items.size(); index++) {
// 获取每一个商品项
GoodsItem goodsItem = items.get(index);
System.out.println(goodsItem.getId()+"\t"+goodsItem.getName()+"\t"
+goodsItem.getPrice()+"\t"+goodsItem.getUnit());
}
System.out.println("------------------------------");
System.out.println("请输入您要购买的商品项(输入格式:商品id-购买数量),输入end表示购买结束。");
// 创建键盘输入对象
Scanner sc = new Scanner(System.in);
while(true){
// 接收用户输入
String str = sc.nextLine();
if(str.equals("end")){ // 结束购买
System.out.println("购买结束");
break;
} else {
String[] strs = str.split("-");
if(strs.length != 2) {
System.out.println("你输入的购买姿势不对,请换个姿势再来一次(格式:商品id-购买数量)");
continue;
}
// 获得商品id
String id = strs[0];
// 获得商品数量
int number = Integer.parseInt(strs[1]);
// 根据商品id获得商品项
GoodsItem item = findGoodsItemById(id);
if(item != null) {
item.setNumber(number);
item.setMoney(number * item.getPrice());
// 添加商品到购物车
addItemToShoppingCar(item);
} else {
// 用户输入的商品id不存在
System.out.println("您输入的商品id不存在,请重新输入!!");
}
}
}
}
创建根据商品id查找商品方法
/*
* 根据商品项id查找商品
*/
public static GoodsItem findGoodsItemById(String id){
// 遍历所有商品项
for (int index = 0; index < items.size(); index++) {
// 获取每一个商品项
GoodsItem goodsItem = items.get(index);
if(goodsItem.getId().equals(id)){
// 创建购买商品对象
return new GoodsItem(goodsItem.getName(), id, goodsItem.getPrice(), 0, goodsItem.getUnit(), 0);
}
}
return null;
}
创建添加商品到购物车方法
/*
* 添加商品到购物车
*/
public static void addItemToShoppingCar(GoodsItem item){
// 遍历购物车中的所有商品项
for (int index = 0; index < shoppingCar.size(); index++) {
// 获取每一个商品项
GoodsItem goodsItem = shoppingCar.get(index);
if(goodsItem.getId().equals(item.getId())){
goodsItem.setNumber(goodsItem.getNumber() + item.getNumber());
goodsItem.setMoney(goodsItem.getPrice() * goodsItem.getNumber());
return;
}
}
// 将要够购买的商品项添加集合中
shoppingCar.add(item);
}
最后打印小票
/*
* 打印小票
*/
public static void printTicket(){
// 判断是否已经购买了商品
if(shoppingCar.size() == 0) {
System.out.println("您还没购买任何商品,无法结算,请先购买!!");
return;
}
System.out.println("------------------------------");
// 票头
System.out.println("\t欢迎光临");
System.out.println("名称\t售价\t数量\t金额");
System.out.println("------------------------------");
// 记录总数量
int totalNumber = 0;
// 记录总价格
double totalMoney = 0;
// 票体
for (int index = 0; index < shoppingCar.size(); index++) {
// 获得每一个商品项
GoodsItem goodsItem = shoppingCar.get(index);
totalNumber += goodsItem.getNumber();
totalMoney += goodsItem.getMoney();
System.out.println(goodsItem.getName()+"\t"+goodsItem.getPrice()+
"\t"+goodsItem.getNumber()+"\t"+goodsItem.getMoney());
}
System.out.println("------------------------------");
// 票尾
System.out.println(shoppingCar.size()+"项商品");
System.out.println("共计:"+totalNumber+"件");
System.out.println("共:"+totalMoney+"元");
System.out.println("------------------------------");
// 清空集合
shoppingCar.clear();
}