java实现简单快递系统
短信预约 -IT技能 免费直播动态提醒
本文实例为大家分享了java实现简单快递系统的具体代码,供大家参考,具体内容如下
创建四个类Express,Locker, User, Administrator分别模拟快递,快递柜,用户和管理员。
import java.util.Random;
import java.util.Scanner;
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;
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(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 {
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 {
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 {
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 {
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.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();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341