Java基于字符界面的簡易收銀臺
用Java實現(xiàn)簡易收銀臺,供大家參考,具體內(nèi)容如下
簡易收銀臺的實現(xiàn)并不難,主要實現(xiàn)這幾個類:
- 商品類 Goods (將商品根據(jù)編號,名稱,價格存放)
- 商品中心類 GoodsCenter (存放商品,可以添加商品,下架商品,修改商品信息,判斷商品是否存在或者貨架已滿,打印商品等功能)
- 訂單類 Order (處理訂單,主要實現(xiàn)買單功能,下單,計算總價)
功能實現(xiàn)
初始化界面

商品上架

修改商品信息

下架商品
返回并進入買單功能

選擇商品及數(shù)量進行買單

取消訂單
查看訂單
返回并退出

功能分析

代碼展示
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(" 意見反饋:liusz0501@163.com ");
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("請輸入下單信息[編號][數(shù)量] (格式如: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("請輸入取消信息[編號 數(shù)量](如下格式: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("!當前商品貨架已經(jīng)滿了,如果要進行添加請下降部分商品");
}
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("!當前商品貨架已經(jīng)滿了,如果要進行添加請下降部分商品");
} else if (GoodsCenter.isExist(goods)) {
System.out.println("!上架商品已經(jīng)存在,注意編號不能重復");
} 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 = "--";
//最大商品數(shù)量
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" +"產(chǎn)品名稱" + "\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("編號 名稱 數(shù)量 單價");
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("=========================");
}
}
項目總結(jié)
- 用常用String類,Scanner類實現(xiàn),代碼量不多,簡單易懂
- 有弊端存在,就是用數(shù)組存放商品,容易出現(xiàn)數(shù)組越界異常,而且如果商品多的話用數(shù)組存儲也是極其不方便的
- 還有就是未使用到數(shù)據(jù)庫,商品信息,訂單信息的保存有很多不方便的地方,如果建立連接了數(shù)據(jù)庫,這個問題就解決了
目前能力只能實現(xiàn)到這了,希望可以再努力一下,將數(shù)據(jù)庫加入到項目中,讓它的易用性再提升更多。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
使用Zxing實現(xiàn)二維碼生成器內(nèi)嵌圖片
二維碼在現(xiàn)實中的應用已經(jīng)很廣泛了,本文介紹了使用Zxing實現(xiàn)二維碼生成器內(nèi)嵌圖片,有需要的可以了解一下。2016-10-10
解決Spring調(diào)用Feign報錯:java.io.IOException:Incomplete output
這篇文章主要介紹了解決Spring調(diào)用Feign報錯:java.io.IOException:Incomplete output stream問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04
Springboot使用RestTemplate調(diào)用第三方接口的操作代碼
這篇文章主要介紹了Springboot使用RestTemplate調(diào)用第三方接口,我只演示了最常使用的請求方式get、post的簡單使用方法,當然RestTemplate的功能還有很多,感興趣的朋友可以參考RestTemplate源碼2022-12-12
SpringMVC攔截器創(chuàng)建配置及執(zhí)行順序
這篇文章主要為大家介紹了SpringMVC攔截器創(chuàng)建配置及執(zhí)行順序,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05

