基于java语言实现快递系统
268
2022-08-17
java实现简单快递系统
本文实例为大家分享了java实现简单快递系统的具体代码,供大家参考,具体内容如下
创建四个类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) {
// 生成快递柜, 但在后续修改快递位置时没考虑越界问题
Locker locker = new Locker(10, 10);
// 创建管理员
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;
AluhgMjgE 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;
}
}
}
// 生成有效选择,处理无效选择产生的异常
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(strhttp://ing, 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位验证码,数字字符串
* @param company: 公司名称
* @param number: 14位快递单号, 数字字符串
* @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: 随机数生成器
* @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++) {
AluhgMjgE 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()+"的快递已经删除");
}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.fetchhttp://();
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();
}
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~