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;
? ? ? ? }
? ? }
?? ?
?? ?// 檢查有無重復驗證碼,有則將position改成相應位置,無則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;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
?? ?
?? ?// 檢查有無重復快遞單號
? ? 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導入Java的jar包的方法JDBC(圖文說明)
這篇文章主要介紹了在eclipse導入Java 的jar包的方法 JDBC 圖文說明 ,需要的朋友可以參考下2015-09-09

