這個簡易收銀臺附有上架,查詢,更新貨物的功能,以及客戶下單的等一些簡單功能。
首先,一個簡易收銀臺程序代碼分爲五個版塊。
第一個版塊的功能就是顯示開始和結束頁面以及設置主頁面按鈕的功能。
具體代碼如下:
public class BlankGame {
static void menu() {
System.out.println("*******************歡迎使用簡易收銀臺******************");
System.out.println(" [U] 使用 [S] 設置 [A]關於 [Q] 退出 ");
System.out.println(" 輸入: U S A Q 進入操作 ");
System.out.println("*******************************************************");
}
private static void end() {
System.out.println("*******************************************************");
System.out.println(" 歡迎使用,下次再見 ");
System.out.println("*******************************************************");
}
private static void about() {
System.out.println("**************************關於*************************");
System.out.println(" 名稱:簡易收銀臺 ");
System.out.println(" 功能:基於字符界面的收銀臺操作系統 ");
System.out.println(" 作者:rookie ");
System.out.println(" 版本:v0.0.1 ");
System.out.println(" 意見反饋:[email protected] ");
System.out.println("*******************************************************");
}
static void start(String input) {
switch (input) {
case "U": {
CheckStand checkStand = new CheckStand();
checkStand.menu();
break;
}
case "S": {
CheckStand checkStand = new CheckStand();
checkStand.menus();
break;
}
case "A": {
about();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
start(str);
break;
}
case "Q":
end();
break;
default: {
System.out.println("非法輸入,請重新輸入!");
menu();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
start(str);
break;
}
}
}
public static void main(String[] args) {
menu();
Scanner scanner = new Scanner(System.in);
String input = scanner.next();
start(input);
}
}
第二板塊爲貨物板塊,裏面包有貨物的名字以及價格。
具體代碼如下:
class Goods {
private String name;
private double price;
public Goods(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return
" name='" + name + '\'' +
", price=" + price;
}
}
第三個板塊是一個客戶與貨物的一個交互板塊,裏面包含各種功能的設置代碼。
具體代碼如下:
class CheckStand {
private GoodsCenter goodsCenter = GoodsCenter.getInstance();
private Order order = new Order();
void menu() {
System.out.println("***********************買單功能************************");
System.out.println(" [S]查看 [A]下單 [D]取消 [L]遊覽 [R]返回 ");
System.out.println(" 輸入: S A D L R進入操作 ");
System.out.println("*******************************************************");
Scanner scanner = new Scanner(System.in);
String input = scanner.next();
use(input);
}
void menus() {
System.out.println("***********************設置功能************************");
System.out.println(" [S]查看 [A]上架 [D]下架 [U]修改 [R]返回 ");
System.out.println(" 輸入: S A D U R進入操作 ");
System.out.println("*******************************************************");
Scanner scanner = new Scanner(System.in);
String input = scanner.next();
set(input);
}
private void set(String input) {
switch (input) {
case "S": {
goodsCenter.show();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
set(str);
break;
}
case "A": {
goodsCenter.add();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
set(str);
break;
}
case "D": {
goodsCenter.delete();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
set(str);
break;
}
case "U": {
goodsCenter.amend();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
set(str);
break;
}
case "R": {
BlankGame.menu();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
BlankGame.start(str);
break;
}
default:
System.out.println("非法輸入,請重新輸入!");
menus();
break;
}
}
private void use(String input) {
switch (input) {
case "S": {
order.show();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
use(str);
break;
}
case "A": {
order.add();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
use(str);
break;
}
case "D": {
order.delete();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
use(str);
break;
}
case "L": {
goodsCenter.show();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
use(str);
break;
}
case "R": {
BlankGame.menu();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
BlankGame.start(str);
break;
}
default:
System.out.println("非法輸入,請重新輸入!");
menu();
break;
}
}
}
第四個板塊主要實現貨物上架等具體功能。
注意:由於上架的貨物與下單的貨物爲同一貨物,所以在這裏我使用了單例模式來確保此效果。
具體代碼如下:
class GoodsCenter {
Map<Integer, Goods> goodsMap = new HashMap<>();
private final static GoodsCenter instance = new GoodsCenter();
private GoodsCenter() {
}
public static GoodsCenter getInstance() {
return instance;
}
void add() {
System.out.println("請輸入上架商品信息(如下格式:1 餐巾紙 1.4):");
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
String name = scanner.next();
double price = scanner.nextDouble();
goodsMap.put(number, new Goods(name, price));
show();
}
void amend() {
System.out.println("請輸入修改商品信息(如下格式:1 餐巾紙 1.4 ):");
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
String name = scanner.next();
double price = scanner.nextDouble();
if (!goodsMap.containsKey(number)) {
System.out.println("請選擇上架的商品編號,當前修改商品未設置");
} else {
goodsMap.put(number, new Goods(name, price));
show();
}
}
void delete() {
System.out.println("請輸入下架商品信息編號(如下格式:1 ):");
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
if (!goodsMap.containsKey(number)) {
System.out.println("請選擇上架的商品編號,當前下架商品未設置");
} else {
goodsMap.remove(number);
}
show();
}
void show() {
System.out.println("***********************貨品清單************************");
System.out.println(" 編號 產品名稱 單價 ");
Set<Integer> set = goodsMap.keySet();
for (Integer number : set) {
String str = goodsMap.get(number).getName();
double price = goodsMap.get(number).getPrice();
System.out.println(" " + number + " " + str + " " + price + " ");
}
System.out.println("*******************************************************");
}
}
第五個板塊主要實現客戶下單等功能。
具體代碼如下:
class Order {
private GoodsCenter goodsCenter = GoodsCenter.getInstance();
private Map<Integer, Integer> orderMap = new HashMap<>();
private Set<Integer> orderSet = orderMap.keySet();
void add() {
System.out.println("請輸入下單信息[編號 數量](如下格式:1 2 ):");
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
int mount = scanner.nextInt();
if (!goodsCenter.goodsMap.containsKey(number)) {
System.out.println("輸入編號有誤,請選擇已上架的商品編號");
} else {
orderMap.put(number, mount);
show();
}
}
void delete() {
System.out.println("請輸入下單信息[編號 數量](如下格式:1 2 ):");
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
int mount = scanner.nextInt();
if (!orderMap.containsKey(number)) {
System.out.println("輸入編號有誤,請選擇已上架的商品編號");
} else {
if (mount >= orderMap.get(number)) {
orderMap.remove(number);
} else {
orderMap.put(number, orderMap.get(number) - mount);
}
show();
}
}
private double compute() {
double amount = 0;
for (Integer tmp : orderSet) {
amount += orderMap.get(tmp) * goodsCenter.goodsMap.get(tmp).getPrice();
}
return amount;
}
void show() {
System.out.println("******************* 訂單發票 ********************");
System.out.println("打印時間:" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
System.out.println("=================================================");
System.out.println("編號 名稱 數量 單價");
Set<Integer> set = orderMap.keySet();
for (Integer number : set) {
int mount = orderMap.get(number);
String name = goodsCenter.goodsMap.get(number).getName();
double price = goodsCenter.goodsMap.get(number).getPrice();
System.out.println(number + " " + name + " " + mount + " " + price);
}
System.out.println("=================================================");
System.out.println("總價:" + compute());
System.out.println("*************************************************");
}
}
到此,一個簡易的收銀臺程序就實現了,如讀者有興趣可以自行添加一些新的功能使其功能變得更加強大。