java實現(xiàn)簡單快遞系統(tǒng)
更新時間:2022年03月24日 17:37:07 作者:helloworld370629
這篇文章主要為大家詳細介紹了java實現(xiàn)簡單快遞系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了java實現(xiàn)簡單快遞系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
創(chuàng)建四個類Express,Locker, User, Administrator分別模擬快遞,快遞柜,用戶和管理員。
import java.util.Random; import java.util.Scanner; /** ?* @author hxf ?* * @date 2020/12/12 ?*/ public class Test { ? ? static Scanner in = new Scanner(System.in); ? ? public static void main(String[] args) { ? ? ?? ?// 生成快遞柜, 但在后續(xù)修改快遞位置時沒考慮越界問題 ? ? ? ? Locker locker = new Locker(10, 10); ? ? ? ? // 創(chuàng)建管理員 ? ? ? ? Administrator administrator = new Administrator(locker); ? ? ? ? //程序主邏輯 ? ? ? ? outer: while (true){ ? ? ? ? ? ? switch (login("請選擇身份:(-1退出 0管理員身份 1用戶身份)", 1)){ ? ? ? ? ? ? ? ? case -1: ? ? ? ? ? ? ? ? ? ? break outer; ? ? ? ? ? ? ? ? case 0: ? ? ? ? ? ? ? ? ? ? switch (login("請選擇操作:(-1退出 0快遞錄入 1刪除快遞 2修改快遞 3查看快遞)", 3)){ ? ? ? ? ? ? ? ? ? ? ? ? case -1: ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? case 0: ? ? ? ? ? ? ? ? ? ? ? ? ? ? in.nextLine(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("請輸入公司名稱:"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("取件碼:"+administrator.store(in.nextLine())); ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? ? ? ? ? ? ? administrator.remove(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? case 2: ? ? ? ? ? ? ? ? ? ? ? ? ? ? administrator.change(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? ? ? ? ? ? ? administrator.show(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? ? ? switch (login("請選擇操作:(-1退出 0取快遞)", 0)){ ? ? ? ? ? ? ? ? ? ? ? ? case -1: ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? case 0: ? ? ? ? ? ? ? ? ? ? ? ? ? ? in.nextLine(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? fetch(locker); ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } ? ? } ?? ? ?? ?// 生成有效選擇,處理無效選擇產(chǎn)生的異常 ? ? public static int login(String string, int n){ ? ? ? ? try{ ? ? ? ? ? ? System.out.println(string); ? ? ? ? ? ? int select = in.nextInt(); ? ? ? ? ? ? if (select > n || select < -1){ ? ? ? ? ? ? ? ? System.out.println("請輸入有效選擇!"); ? ? ? ? ? ? ? ? in.nextLine(); ? ? ? ? ? ? ? ? return login(string, n); ? ? ? ? ? ? } ? ? ? ? ? ? return select; ? ? ? ? }catch (Exception e){ ? ? ? ? ? ? System.out.println("請輸入有效選擇!"); ? ? ? ? ? ? in.nextLine(); ? ? ? ? ? ? return login(string, n); ? ? ? ? } ? ? } ?? ? ?? ?// 用戶取快遞,確保輸入有效驗證碼 ? ? public static void fetch(Locker locker){ ? ? ? ? System.out.println("請輸入六位驗證碼:"); ? ? ? ? String code = in.nextLine(); ? ? ? ? User user = new User(code, locker); ? ? ? ? if (user.fetch()){ ? ? ? ? ? ? System.out.println("取件成功"); ? ? ? ? }else { ? ? ? ? ? ? System.out.println("驗證碼有誤,請重新輸入!"); ? ? ? ? ? ? fetch(locker); ? ? ? ? } ? ? } } class Express { ? ? /** ? ? ?* @param code: ? ? 6位驗證碼,數(shù)字字符串 ? ? ?* @param company: ?公司名稱 ? ? ?* @param number: ? 14位快遞單號, 數(shù)字字符串 ? ? ?* @param position: 快遞存放位置 ? ? ?* @author hxf ? ? ?* @describe: 快遞 ? ? ?* @date 2020/12/11 1:17 ? ? ?*/ ? ? private final String code; ? ? private String company; ? ? private final String number; ? ? private int[] position; ? ? public Express(String code, String company, String number, int[] position) { ? ? ? ? this.code = code; ? ? ? ? this.company = company; ? ? ? ? this.number = number; ? ? ? ? this.position = position; ? ? } ? ? public String getCode() { ? ? ? ? return code; ? ? } ? ? public String getCompany() { ? ? ? ? return company; ? ? } ? ? public String getNumber() { ? ? ? ? return number; ? ? } ? ? public int[] getPosition() { ? ? ? ? return position; ? ? } ? ? public void setCompany(String company) { ? ? ? ? this.company = company; ? ? } ? ? public void setPosition(int row, int column) { ? ? ? ? this.position[0] = row; ? ? ? ? this.position[1] = column; ? ? } ? ? @Override ? ? public String toString() { ? ? ? ? StringBuilder stringBuilder = new StringBuilder(); ? ? ? ? stringBuilder.append("快遞信息簡介{"); ? ? ? ? stringBuilder.append("快遞公司:"); ? ? ? ? stringBuilder.append(company); ? ? ? ? stringBuilder.append(", 快遞單號:"); ? ? ? ? stringBuilder.append(number); ? ? ? ? stringBuilder.append(", 存放位置:"); ? ? ? ? stringBuilder.append("第"); ? ? ? ? stringBuilder.append(position[0]); ? ? ? ? stringBuilder.append("排,第"); ? ? ? ? stringBuilder.append(position[1]); ? ? ? ? stringBuilder.append("列"); ? ? ? ? return stringBuilder.toString(); ? ? } } class Locker { ? ? /** ? ? ?* @param ? code: ? ? ? ? ? 存儲Express ? ? ?* @param ? random: ? ? ? ? 隨機數(shù)生成器 ? ? ?* @param ? position: ? ? ? 存放臨時快遞位置 ? ? ?* @param ? LENGTH_OF_CODE: 驗證碼長度 ? ? ?* @author hxf ? ? ?* @describe: 快遞柜 ? ? ?* @date 2020/12/11 1:25 ? ? ?*/ ? ? Express[][] code; ? ? Random random; ? ? int[] position; ? ? private final int LENGTH_OF_CODE = 6; ? ? private final int LENGTH_OF_NUMBER = 14; ? ? public Locker(int row, int column){ ? ? ? ? code = new Express[row][column]; ? ? ? ? random = new Random(); ? ? ? ? position = new int[2]; ? ? } ?? ? ?? ?// 生成驗證碼 ? ? public String generateCode(){ ? ? ? ? StringBuilder stringBuilder = new StringBuilder(); ? ? ? ? for (int i = 0; i < LENGTH_OF_CODE; i++){ ? ? ? ? ? ? stringBuilder.append(random.nextInt(10)); ? ? ? ? } ? ? ? ? String string = stringBuilder.toString(); ? ? ? ? checkCode(string); ? ? ? ? return position[0] == -1 ? string : generateCode(); ? ? } ? ?? ?? ?// 生成快遞單號 ? ? public String generateNumber(){ ? ? ? ? StringBuilder stringBuilder = new StringBuilder(); ? ? ? ? for (int i = 0; i < LENGTH_OF_NUMBER; i++){ ? ? ? ? ? ? stringBuilder.append(random.nextInt(10)); ? ? ? ? } ? ? ? ? String string = stringBuilder.toString(); ? ? ? ? checkNumber(string); ? ? ? ? return position[0] == -1 ? string : generateNumber(); ? ? } ?? ? ?? ?//生成存放位置 ? ? public int[] generatePosition(){ ? ? ? ? int row = random.nextInt(code.length); ? ? ? ? int column = random.nextInt(code[0].length); ? ? ? ? if (code[row][column] != null){ ? ? ? ? ? ? return generatePosition(); ? ? ? ? }else{ ? ? ? ? ? ? position[0] = row; ? ? ? ? ? ? position[1] = column; ? ? ? ? ? ? return position; ? ? ? ? } ? ? } ?? ? ?? ?// 檢查有無重復(fù)驗證碼,有則將position改成相應(yīng)位置,無則position第一個元素為-1 ? ? public void checkCode(String string){ ? ? ? ? position[0] = -1; ? ? ? ? outer: for (int i = 0; i < code.length; i++){ ? ? ? ? ? ? for (int j = 0; j < code[0].length; j++) { ? ? ? ? ? ? ? ? if (code[i][j] != null && code[i][j].getCode().equals(string)) { ? ? ? ? ? ? ? ? ? ? position[0] = i; ? ? ? ? ? ? ? ? ? ? position[1] = j; ? ? ? ? ? ? ? ? ? ? break outer; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } ? ? } ?? ? ?? ?// 檢查有無重復(fù)快遞單號 ? ? public void checkNumber(String string){ ? ? ? ? position[0] = -1; ? ? ? ? outer: for (int i = 0; i < code.length; i++){ ? ? ? ? ? ? for (int j = 0; j < code[0].length; j++) { ? ? ? ? ? ? ? ? if (code[i][j] != null && code[i][j].getNumber().equals(string)) { ? ? ? ? ? ? ? ? ? ? position[0] = i; ? ? ? ? ? ? ? ? ? ? position[1] = j; ? ? ? ? ? ? ? ? ? ? break outer; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } ? ? } ?? ?// 將快遞存入快遞柜 ? ? public String store(Express express){ ? ? ? ? code[position[0]][position[1]] = express; ? ? ? ? return express.getCode(); ? ? } ? ? public void store(Express express, int row, int column){ ? ? ? ? code[row][column] = express; ? ? } ?? ? ?? ?// 取出快遞 ? ? public Express fetch(){ ? ? ? ? Express express = code[position[0]][position[1]]; ? ? ? ? code[position[0]][position[1]] = null; ? ? ? ? return express; ? ? } ? ? public int[] getPosition() { ? ? ? ? return position; ? ? } ?? ? ?? ?// 打印所有快遞信息 ? ? public void check(){ ? ? ? ? int count = 0; ? ? ? ? for (Express[] expresses: code){ ? ? ? ? ? ? for (Express express : expresses){ ? ? ? ? ? ? ? ? if (express != null){ ? ? ? ? ? ? ? ? ? ? System.out.println(express.toString()); ? ? ? ? ? ? ? ? ? ? count++; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? if (count == 0){ ? ? ? ? ? ? System.out.println("無快遞"); ? ? ? ? } ? ? } } class User { ?? ?/** ? ? *@Param: code: ? ? ?驗證碼? ? ? *@Param: locker: ? ?快遞柜 ? ? *@Author: hxf ? ? *@date: 2020/12/12 ? ? */ ? ? private final String code; ? ? private Locker locker; ? ? public User(String code, Locker locker) { ? ? ? ? this.code = code; ? ? ? ? this.locker = locker; ? ? } ?? ? ?? ?// 取快遞 ? ? public boolean fetch(){ ? ? ? ? locker.checkCode(code); ? ? ? ? if (locker.getPosition()[0] == -1){ ? ? ? ? ? ? return false; ? ? ? ? }else { ? ? ? ? ? ? System.out.println(locker.fetch().toString()); ? ? ? ? ? ? return true; ? ? ? ? } ? ? } } class Administrator { ?? ? ?? ?/** ? ? *@Param: locker: ? ?快遞柜 ? ? *@Author: hxf ? ? *@date: 2020/12/12 ? ? */ ?? ? ? ? Locker locker; ? ? Scanner in = new Scanner(System.in); ? ? public Administrator(Locker locker) { ? ? ? ? this.locker = locker; ? ? } ?? ? ?? ?// 錄入快遞 ? ? public String store(String company){ ? ? ? ? String number = locker.generateNumber(); ? ? ? ? String code = locker.generateCode(); ? ? ? ? int[] position = locker.generatePosition(); ? ? ? ? return locker.store(new Express(code, company, number, position)); ? ? } ?? ? ?? ?// 刪除快遞 ? ? public void remove(){ ? ? ? ? System.out.println("請輸入14位快遞單號:"); ? ? ? ? String number = in.nextLine(); ? ? ? ? locker.checkNumber(number); ? ? ? ? if (locker.getPosition()[0] != -1){ ? ? ? ? ? ? System.out.println("單號為"+locker.fetch().getNumber()+"的快遞已經(jīng)刪除"); ? ? ? ? }else{ ? ? ? ? ? ? System.out.println("快遞單號不存在,請重試"); ? ? ? ? ? ? remove(); ? ? ? ? } ? ? } ?? ? ?? ?// 修改快遞 ? ? public void change(){ ? ? ? ? System.out.println("請輸入14位快遞單號:"); ? ? ? ? String number = in.nextLine(); ? ? ? ? locker.checkNumber(number); ? ? ? ? if (locker.getPosition()[0] != -1){ ? ? ? ? ? ? Express express = locker.fetch(); ? ? ? ? ? ? System.out.println("請輸入新的快遞公司:"); ? ? ? ? ? ? express.setCompany(in.nextLine()); ? ? ? ? ? ? System.out.println("請輸入新的位置:(先行后列,空格隔開)"); ? ? ? ? ? ? int row = in.nextInt(); ? ? ? ? ? ? int column = in.nextInt(); ? ? ? ? ? ? express.setPosition(row, column); ? ? ? ? ? ? locker.store(express, row, column); ? ? ? ? ? ? System.out.println("修改成功!"); ? ? ? ? }else{ ? ? ? ? ? ? System.out.println("快遞單號不存在,請重試"); ? ? ? ? ? ? change(); ? ? ? ? } ? ? } ?? ? ?? ?// 顯示所有快遞信息 ? ? public void show(){ ? ? ? ? locker.check(); ? ? } }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java多線程正確使用倒計時協(xié)調(diào)器CountDownLatch方法詳解
這篇文章主要為大家介紹了Java多線程倒計時協(xié)調(diào)器CountDownLatch的正確使用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09在eclipse導(dǎo)入Java的jar包的方法JDBC(圖文說明)
這篇文章主要介紹了在eclipse導(dǎo)入Java 的jar包的方法 JDBC 圖文說明 ,需要的朋友可以參考下2015-09-09