快递管理任务
任务内容:
代码层描述:
view:
package com.java.view;
import com.java.bean.Express;
import java.util.Scanner;
public class views {
private Scanner input = new Scanner(System.in);
/**
* 欢迎语
*/
public void welcome(){
System.out.println("欢迎使用XX快递管理系统");
}
/**
* 再见语
*/
public void bye(){
System.out.println("欢迎下次光临");
}
/**
* 选择身份的菜单
* @return
*/
public int menu(){
System.out.println("请输入您的身份 1、快递员 2、用户");
System.out.println("1、快递员");
System.out.println("2、用户");
System.out.println("0、退出");
String text = input.nextLine();
int num = -1;
try{
num = Integer.parseInt(text);
}catch(NumberFormatException e){
}
if(num<0 || num>2){
System.out.println("输入有误,请重新输入");
return menu();
}
return num;
}
/**
* 快递员菜单
* @return
*/
public int cMenu(){
System.out.println("请根据提示输入您的操作");
System.out.println("1、存快递");
System.out.println("2、修改快递");
System.out.println("3、删除快递");
System.out.println("4、查看所有快递");
System.out.println("0、返回上级目录");
String text = input.nextLine();
int num = -1;
try{
num = Integer.parseInt(text);
}catch(NumberFormatException e){
}
if(num<0 || num>4){
System.out.println("输入有误,请重新输入");
return cMenu();
}
return num;
}
/**
* 快递员录入快递
* @return 包含了快递的公司和单号的对象
*/
public Express insert(){
System.out.println("请按提示输入快递信息");
System.out.println("请输入快递单号:");
System.out.println("请输入快递公司:");
String number = input.nextLine();
String company = input.nextLine();
Express e = new Express();
e.setCompany(company);
e.setNumber(number);
return e;
}
/**
* 查找快递信息
* @return
*/
public String findNumber(){
System.out.println("请按提示输入快递信息");
System.out.println("请输入要操作的快递单号:");
String number = input.nextLine();
return number;
}
/**
* 显示快递信息
* @param e
*/
public void printExpress(Express e){
System.out.println("快递信息如下:");
System.out.println("快递公司为"+e.getCompany()+"快递单号为"+e.getNumber()+"取件码为"+e.getCode());
}
/**
* 打印空快递
*/
public void printNull(){
System.out.println("快递不存在,请检查您的输入");
}
/**
* 提示已存在快递
*/
public void expressExist(){
System.out.println("您输入的快递码有误, 请重新存储");
}
/**
* 修改快递信息
* @param e
*/
public void update(Express e){
System.out.println("请输入新的快递信息");
System.out.println("请输入新的快递公司");
System.out.println("请输入新的快递单号");
String number = input.nextLine();
String company = input.nextLine();
e.setNumber(number);
e.setCompany(company);
}
/**
* 询问是否确认删除
* @return
*/
public int delete(){
System.out.println("是否确认删除");
System.out.println("1、确认");
System.out.println("2、取消操作");
String text = input.nextLine();
int num = -1;
try{
num = Integer.parseInt(text);
}catch(NumberFormatException e){
}
if(num<1 || num>2){
System.out.println("您的输入有误,请重新输入");
return delete();
}
return num;
}
/**
* 操作成功
*/
public void success(){
System.out.println("操作成功");
}
/**
* 将给定数组的快递信息 遍历显示
* @param es
*/
public void printAll(Express[][] es){
int count = 0;
for (int i=0;i<10;i++){
for(int j=0;j<10;j++){
if (es[i][j] != null){
count++;
System.out.print("第"+(i+1)+"排"+(j+1)+"列快递");
printExpress(es[i][j]);
}
}
}
if(count == 0){
System.out.println("暂无快递信息");
}
}
/**
* 用户菜单
* @return
*/
public int uMenu(){
System.out.println("请根据提示进行取件");
System.out.println("请输入您的取件码");
String text = input.nextLine();
int num = -1;
try{
num = Integer.parseInt(text);
}catch(NumberFormatException e){
}
if(num<100000 || num>999999){
System.out.println("输入有误,请重新输入");
return uMenu();
}
return num;
}
}
expressdDao:
package com.java.Dao;
import com.java.bean.Express;
import java.util.Random;
public class ExpressDao {
private Express[][] data = new Express[10][10];
private int size;
private Random random = new Random();
/**
* 视频还有一个构造块初始化了这个二维数组,你没写吧
* 在上面改成[10][10]也可以
*
*/
/**
* 用于存储快递
* @param e
* @return
*/
public boolean add(Express e){
{
for(int i=0;i<10;i++){
data[i] = new Express[10];
}
}
if(size == 100){
return false;
}
//1、创建两个从0-9的下标
int x = -1;
int y = -1;
while (true){
x = random.nextInt(10);
y = random.nextInt(10);
if(data[x][y] == null) {
break;
}
}
//2、取件码
int code = randomCode();
e.setCode(code);
data[x][y] = e;
return true;
}
/**
* 保证取件码不重复
* @return
*/
public int randomCode(){
while (true){
//生成六位随机数
int code = random.nextInt(900000)+100000;
Express e = findByCode(code);
if(e == null){
return code;
}else{
}
}
}
/**
* 利用快递单号查找快递
* @param number 传入一个快递单号
* @return 返回快递对象二维数组
*/
public Express findByNumber(String number){
Express e = new Express();
e.setNumber(number);
for (int i=0;i<10;i++){
for (int j=0;j<10;j++){
if(data[i][j] != null)
if(e.equals(data[i][j])){
return data[i][j];
}
}
}
return null;
}
/**
* 利用取件码查找快递
* @param code 要查询的取件码
* @return 查询结果 查询失败返回null
*/
public Express findByCode(int code){
for(int i=0;i<10;i++){
for (int j=0;j<10;j++) {
if(data[i][j]!=null && data[i][j].getCode() == code){
return data[i][j];
}
}
}
return null;
}
/**
* 多余的操作 为了MVC更圆润
* @param oldExpress
* @param newExpress
*/
public void update(Express oldExpress,Express newExpress){
delete(oldExpress);
add(newExpress);
}
public void delete(Express e){
p: for (int i=0;i<10;i++){
for (int j=0;j<10;j++){
if(e.equals(data[i][j])){
data[i][j] = null;
break p;
}
}
}
}
public Express[][] findALL(){
return data;
}
}
Express:
package com.java.bean;
import java.util.Objects;
public class Express {
private String number;
private String company;
private int code;
public Express() {
}
public Express(String number, String company, int code) {
this.number = number;
this.company = company;
this.code = code;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Express express = (Express) o;
return number.equals(express.number);
}
@Override
public int hashCode() {
return Objects.hash(number);
}
@Override
public String toString() {
return "Express{" +
"number='" + number + '\'' +
", company='" + company + '\'' +
", code=" + code +
'}';
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
main:
package com.java.main;
import com.java.Dao.ExpressDao;
import com.java.bean.Express;
import com.java.view.views;
public class Main {
//1 初始化视图对象
private static views v = new views();
//2 初始化Dao对象
private static ExpressDao dao = new ExpressDao();
public static void main(String[] args) {
//欢迎
v.welcome();
//弹出身份选择菜单
m:while (true){
int menu = v.menu();
switch (menu){
case 0:
System.out.println("欢迎下次使用");
break m;
case 1:
cClient();
break;
case 2:
uClient();
break;
}
v.bye();
}
}
private static void uClient() {
int code = v.uMenu();
Express e = dao.findByCode(code);
if (e == null){
v.printNull();
}else{
v.success();
v.printExpress(e);
dao.delete(e);
}
}
private static void cClient() {
while (true){
int menu = v.cMenu();
switch (menu){
case 0:
return;
case 1: {//快递录入
//1、 提示输入用户信息
Express e = v.insert();
//2、 判断能否存入
Express e2 = dao.findByNumber(e.getNumber());
//3、 存储快递
if (e2 == null){
//未存储过 存
dao.add(e);
v.printExpress(e);
}else{
//单号在快递柜中已存在
v.expressExist();
}
}
break;
case 2:{ //快递修改
String number = v.findNumber();
Express e = dao.findByNumber(number);
Express e2 = e;
if (e == null){
v.printNull();
}else{
v.printExpress(e);
v.update(e2);
dao.update(e,e2);
v.printExpress(e);
}
}
break;
case 3:{//快递删除
String number = v.findNumber();
Express e = dao.findByNumber(number);
if (e == null){
v.printNull();
}else{
v.printExpress(e);
int type = v.delete();
if (type == 1){
dao.delete(e);
v.success();
}
}
}
break;
case 4:{//查看所有快递
Express[][] data = dao.findALL();
v.printAll(data);
}
break;
}
}
}
}