Java基于字符界面的简易收银台

网友投稿 254 2022-10-17


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(" 版本: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("请输入下单信息[编号][数量] (格式如: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;RRHBZYrVi

if(goodsArray[i].getName().equals(placeholder)){

return false;

}

}

return true;

}

public static Goods getGoods(int id){

for(int i = 0;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

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("====================RRHBZYrV=====================");

}

}

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

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

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类实现,代码量不多,简单易懂

有弊端存在,就是用数组存放商品,容易出现数组越界异常,而且如果商品多的话用数组存储也是极其不方便的

还有就是未使用到数据库,商品信息,订单信息的保存有很多不方便的地方,如果建立连接了数据库,这个问题就解决了

目前能力只能实现到这了,希望可以再努力一下,将数据库加入到项目中,让它的易用性再提升更多。

if(goodsArray[i].getName().equals(placeholder)){

return false;

}

}

return true;

}

public static Goods getGoods(int id){

for(int i = 0;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

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("====================RRHBZYrV=====================");

}

}

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

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

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类实现,代码量不多,简单易懂

有弊端存在,就是用数组存放商品,容易出现数组越界异常,而且如果商品多的话用数组存储也是极其不方便的

还有就是未使用到数据库,商品信息,订单信息的保存有很多不方便的地方,如果建立连接了数据库,这个问题就解决了

目前能力只能实现到这了,希望可以再努力一下,将数据库加入到项目中,让它的易用性再提升更多。

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

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("====================RRHBZYrV=====================");

}

}

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

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

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类实现,代码量不多,简单易懂

有弊端存在,就是用数组存放商品,容易出现数组越界异常,而且如果商品多的话用数组存储也是极其不方便的

还有就是未使用到数据库,商品信息,订单信息的保存有很多不方便的地方,如果建立连接了数据库,这个问题就解决了

目前能力只能实现到这了,希望可以再努力一下,将数据库加入到项目中,让它的易用性再提升更多。

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("====================RRHBZYrV=====================");

}

}

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

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

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类实现,代码量不多,简单易懂

有弊端存在,就是用数组存放商品,容易出现数组越界异常,而且如果商品多的话用数组存储也是极其不方便的

还有就是未使用到数据库,商品信息,订单信息的保存有很多不方便的地方,如果建立连接了数据库,这个问题就解决了

目前能力只能实现到这了,希望可以再努力一下,将数据库加入到项目中,让它的易用性再提升更多。

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

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类实现,代码量不多,简单易懂

有弊端存在,就是用数组存放商品,容易出现数组越界异常,而且如果商品多的话用数组存储也是极其不方便的

还有就是未使用到数据库,商品信息,订单信息的保存有很多不方便的地方,如果建立连接了数据库,这个问题就解决了

目前能力只能实现到这了,希望可以再努力一下,将数据库加入到项目中,让它的易用性再提升更多。

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类实现,代码量不多,简单易懂

有弊端存在,就是用数组存放商品,容易出现数组越界异常,而且如果商品多的话用数组存储也是极其不方便的

还有就是未使用到数据库,商品信息,订单信息的保存有很多不方便的地方,如果建立连接了数据库,这个问题就解决了

目前能力只能实现到这了,希望可以再努力一下,将数据库加入到项目中,让它的易用性再提升更多。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:CISCO CCNA EIGRP
下一篇:如何确保V2X 的安全防护能力
相关文章

 发表评论

暂时没有评论,来抢沙发吧~