Java基於字符界面的簡易收銀臺
用Java實現簡易收銀臺,供大傢參考,具體內容如下
簡易收銀臺的實現並不難,主要實現這幾個類:
- 商品類 Goods (將商品根據編號,名稱,價格存放)
- 商品中心類 GoodsCenter (存放商品,可以添加商品,下架商品,修改商品信息,判斷商品是否存在或者貨架已滿,打印商品等功能)
- 訂單類 Order (處理訂單,主要實現買單功能,下單,計算總價)
功能實現
初始化界面
商品上架
修改商品信息
下架商品
返回並進入買單功能
選擇商品及數量進行買單
取消訂單
查看訂單
返回並退出
功能分析
代碼展示
package com.bittech; import java.time.LocalDate; import java.util.Scanner; /** * Author:weiwei * description: * Creat:2019/5/5 **/ public class CheckStand { public static Scanner scanner = new Scanner(System.in); public static void helpInfo() { System.out.println("==============歡迎使用簡易收銀臺============="); System.out.println(" [U]使用 [S]設置 [A]關於 [Q]退出 "); System.out.println(" 輸入 U S A Q 進行操作 "); System.out.println("============================================"); } public static void quit() { System.out.println("==========================================="); System.out.println(" 歡迎下次使用 "); System.out.println("==========================================="); System.exit(0); } public static void usageInfo() { System.out.println("================買單功能===================="); System.out.println(" [S]查看 [A]下單 [D]取消 [L]瀏覽 [R]返回"); System.out.println(" 輸入 S A D L R 進行操作 "); System.out.println("==========================================="); } public static void about() { System.out.println("==================關於====================="); System.out.println(" 名稱:簡易收銀臺 "); System.out.println(" 功能:基於字符界面的收銀臺操作 "); System.out.println(" 作者:weiwei "); System.out.println(" 版本:v0.0.1 "); System.out.println(" 意見反饋:[email protected] "); System.out.println("=========================================="); } public static void settingInfo() { System.out.println("=================設置功能=================="); System.out.println(" [S]查看 [A]上架 [D]下架 [U]修改 [R]返回 "); System.out.println(" 輸入 S A D U R 進行操作 "); System.out.println("==========================================="); } public static void usage() { usageInfo(); GoodsCenter.printGoods(); Order order = new Order(); while(true){ String line = scanner.nextLine(); switch(line.trim()){ case "S":{ order.printOrder(); break; } case "A":{ System.out.println("請輸入下單信息[編號][數量] (格式如:1 2 ):"); String value = scanner.nextLine(); String[] infoArray = value.split(" "); if(infoArray != null && (infoArray.length == 2)){ Goods goods = GoodsCenter.getGoods(Integer.parseInt(infoArray[0])); if(goods != null){ order.add(goods,Integer.parseInt(infoArray[1])); order.printOrder(); break; } } System.out.println("請按照格式要求輸入信息"); break; } case "D":{ System.out.println("請輸入取消信息[編號 數量](如下格式:1 2 ):"); String value = scanner.nextLine(); String[] infoArray = value.split(" "); if (infoArray != null && (infoArray.length == 2)) { Goods goods = GoodsCenter.getGoods(Integer.parseInt(infoArray[0])); if (goods != null) { order.cance(goods, Integer.parseInt(infoArray[1])); order.printOrder(); break; } } System.out.println("請按照格式要求輸入信息"); break; } case "L": { GoodsCenter.printGoods(); break; } case "R": { return; } default: { usageInfo(); } } } } public static void setting() { settingInfo(); if (GoodsCenter.isFull()) { System.out.println("!當前商品貨架已經滿瞭,如果要進行添加請下降部分商品"); } while (true) { String line = scanner.nextLine(); switch (line.toUpperCase()) { case "S": { GoodsCenter.printGoods(); break; } case "A": { System.out.println("請輸入上架商品信息(如下格式:1 餐巾紙 1.4):"); Goods goods = readGoods(); if (goods == null) { System.out.println("!請按照格式要求輸入信息"); break; } if (GoodsCenter.isFull()) { System.out.println("!當前商品貨架已經滿瞭,如果要進行添加請下降部分商品"); } else if (GoodsCenter.isExist(goods)) { System.out.println("!上架商品已經存在,註意編號不能重復"); } else { GoodsCenter.addGoods(goods); GoodsCenter.printGoods(); } break; } case "D": { System.out.println("請輸入下架商品信息編號(如下格式:1 ):"); Goods goods = readGoods(); if (goods == null) { System.out.println("請按照格式要求輸入信息"); break; } if (GoodsCenter.isPutaway(goods)) { GoodsCenter.soldOutGoods(goods); GoodsCenter.printGoods(); } else { System.out.println("請選擇上架的商品編號,當前下架商品未設置"); } break; } case "U": { System.out.println("請輸入修改商品信息(如下格式:1 餐巾紙 1.4 )"); Goods goods = readGoods(); if (goods == null) { System.out.println("請按照格式要求輸入信息"); break; } if (GoodsCenter.isPutaway(goods)) { GoodsCenter.modifyGoods(goods); GoodsCenter.printGoods(); } else { System.out.println("請選擇上架的商品編號,當前修改商品未設置"); } break; } case "R": { return; } default: { settingInfo(); } } } } public static Goods readGoods() { String value = scanner.nextLine(); String[] infoArray = value.split(" "); if (infoArray != null && (infoArray.length == 3 || infoArray.length == 1)) { if (infoArray.length == 3) { Goods goods = new Goods(Integer.parseInt(infoArray[0]), infoArray[1], Double.parseDouble(infoArray[2])); return goods; } if (infoArray.length == 1) { Goods goods = new Goods(Integer.parseInt(infoArray[0]), "", 0.0D); return goods; } } return null; } public static void main(String[] args) { helpInfo(); while (true) { String line = scanner.nextLine(); switch (line.trim().toUpperCase()) { case "U": usage(); helpInfo(); break; case "S": setting(); helpInfo(); break; case "A": about(); break; case "Q": quit(); break; default: helpInfo(); } } } }
GoodsCenter類
class GoodsCenter { //商品占位符 private static String placeholder = "--"; //最大商品數量 private static int maxGoods = 10; //商品容器 private static Goods[] goodsArray; //初始化商品容器 static { goodsArray = new Goods[maxGoods]; for (int i = 0; i < goodsArray.length; i++) { goodsArray[i] = new Goods(i + 1, "--", 0.0D); } } private GoodsCenter() { } public static int getMaxGoods() { return maxGoods; } //添加商品 public static void addGoods(Goods goods) { for (int i = 0; i < goodsArray.length; i++) { Goods temp = goodsArray[i]; if (temp.getId() == goods.getId()) { temp.setName(goods.getName()); temp.setPrice(goods.getPrice()); break; } } } //下架商品 public static void soldOutGoods(Goods goods) { for (int i = 0; i < goodsArray.length; i++) { Goods temp = goodsArray[i]; if (temp.getId() == goods.getId()) { temp.setName(placeholder); temp.setPrice(0.0D); break; } } } //修改商品 public static void modifyGoods(Goods goods) { for (int i = 0; i < goodsArray.length; i++) { Goods temp = goodsArray[i]; if (temp.getId() == goods.getId()) { temp.setName(goods.getName()); temp.setPrice(goods.getPrice()); break; } } } //商品是否存在 public static boolean isExist(Goods goods) { for (int i = 0; i < goodsArray.length; i++) { Goods temp = goodsArray[i]; if (temp.getId() == goods.getId() && temp.getName().equals(goods.getName())) { return true; } } return false; } //商品位是否存在商品 public static boolean isPutaway(Goods goods) { for (int i = 0; i < goodsArray.length; i++) { Goods temp = goodsArray[i]; if (temp.getId() == goods.getId() && !temp.getName().equals(placeholder)) { return true; } } return false; } //商品已滿 public static boolean isFull(){ for(int i =0;i<goodsArray.length;i++){ if(goodsArray[i].getName().equals(placeholder)){ return false; } } return true; } public static Goods getGoods(int id){ for(int i = 0;i<goodsArray.length;i++){ Goods temp = goodsArray[i]; if(temp.getId() == id && !temp.getName().equals(placeholder)){ return goodsArray[i]; } } return null; } //打印商品 public static void printGoods(){ System.out.println("=============商品清單================"); System.out.println("\t" + "編號" + "\t" +"產品名稱" + "\t" + "單價"); for(int i = 0;i<goodsArray.length;i++){ Goods temp = goodsArray[i]; String name = temp.getName(); if(name.equals(placeholder)){ name = name + "[未上架]"; } System.out.println("\t" + temp.getId() + "\t" + temp.getName() + "\t" + temp.getPrice()); } System.out.println("========================================="); } }
Goods類
class Goods{ //商品編號 private int id; //商品名稱 private String name; //商品價格 private double price; public Goods(int id,String name,double price){ this.id = id; this.name = name; this.price = price; } public int getId(){ return this.id; } public int getIndex(){ return this.getId()-1; } public String getName(){ return this.name; } public void setName(String name) { this.name = name; } public double getPrice(){ return this.price; } public void setPrice(double price) { this.price = price; } @Override public String toString(){ return String.format("[%2d] %s %.2f",this.getId(),this.getName(),this.getPrice()); } }
Order類
class Order{ private static int orderId = 0; private int id; private Goods[] items; private int[] itmesNumber; private int currentIndex; public Order(){ this.id = ++orderId; this.items = new Goods[GoodsCenter.getMaxGoods()]; this.itmesNumber = new int[GoodsCenter.getMaxGoods()]; this.currentIndex = -1; } public void add(Goods goods,int count){ int index = goods.getIndex(); this.items[index] = goods; this.itmesNumber[index] += count; } public void cance(Goods goods,int count){ int index = goods.getIndex(); int value = this.itmesNumber[index]-count; if(value > 0){ this.itmesNumber[index] = value; }else{ this.items[index] = null; this.itmesNumber[index] = 0; } } public int getSize(){ return this.currentIndex+1; } public double getTotalPrice(){ double tatalPrivce = 0; for(int i =0;i<this.items.length;i++){ Goods goods = this.items[i]; if(goods != null){ tatalPrivce += (this.itmesNumber[goods.getIndex()] * goods.getPrice()); } } return tatalPrivce; } public int getId(){ return this.id; } public void printOrder(){ System.out.println("========================"); System.out.println("編號" + this.getId() ); System.out.println("打印時間" + LocalDate.now().toString()); System.out.println("========================"); System.out.println("編號 名稱 數量 單價"); for(int i = 0;i<this.items.length;i++){ Goods goods = this.items[i]; if(goods != null){ int count = this.itmesNumber[goods.getIndex()]; if(count <= 0){ continue; } System.out.println(String.format("%2d\t%s\t%d\t%.2f",goods.getId(),goods.getName(),count,goods.getPrice() )); } } System.out.println("========================="); System.out.println(String.format("總價:%2f",this.getTotalPrice())); System.out.println("========================="); } }
項目總結
- 用常用String類,Scanner類實現,代碼量不多,簡單易懂
- 有弊端存在,就是用數組存放商品,容易出現數組越界異常,而且如果商品多的話用數組存儲也是極其不方便的
- 還有就是未使用到數據庫,商品信息,訂單信息的保存有很多不方便的地方,如果建立連接瞭數據庫,這個問題就解決瞭
目前能力隻能實現到這瞭,希望可以再努力一下,將數據庫加入到項目中,讓它的易用性再提升更多。
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。