首页 > 编程语言 > 详细

JAVA 技术方向支线任务-快递管理训练任务

时间:2021-02-17 13:39:33      阅读:49      评论:0      收藏:0      [点我收藏+]

本节任务用于熟悉快递管理业务,完成快递管理控制台项目,具体需求如 图。

技术分享图片

 

 1、view视图部分

package kuidi.view;

import kuidi.bean.Express;

import java.util.Scanner;

public class Views {
private Scanner input = new Scanner(System.in);

/**
* 欢迎
*/
public void welcome(){
System.out.println("欢迎使用虫子快递管理系统");
}

/**
* 再见
*/
public void bye(){
System.out.println("欢迎下次使用");
}
/**
* 选择身份的菜单
* @return
*/
public int menu(){
System.out.println("请根据提示,输入功能序号:");
System.out.println("1.快递员");
System.out.println("2.普通用户");
System.out.println("0.退出");
//这里的代码逻辑相较于.nextInt的优点在哪?
//单思考这个方法内的逻辑,没有优点;
//但是思考全局代码是有优点.所有方法均使用nextLine,不会因为输入产生冲突,还可以更好地接收各种类型的数据.
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.返回菜单");
//这里的代码逻辑相较于.nextInt的优点在哪?
//单思考这个方法内的逻辑,没有优点;
//但是思考全局代码是有优点.所有方法均使用nextLine,不会因为输入产生冲突,还可以更好地接收各种类型的数据.
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("请输入快递单号:");
String number = input.nextLine();
System.out.println("请输入快递公司:");
String company = input.nextLine();
Express e = new Express();
e.setCompany(company);
e.setNumber(number);
return e;
}

/**
* 提示用户输入快递单号
* @return
*/
public String findByNumber(){
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("快递不存在,请检查您的输入!");
}

/**
* 询问是否删除快递,1.表示删除. 2.表示取消.
* @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;
}
/**
* 修改快递信息
* @param e
*/
public void update(Express e){
System.out.println("请输入新的快递单号:");
String number = input.nextLine();
System.out.println("请输入新的快递公司:");
String company = input.nextLine();
e.setNumber(number);
e.setCompany(company);
}

/**
* 查看所有快递
* @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 code = input.nextLine();
int num = -1;
try {
num = Integer.parseInt(code);
}catch(NumberFormatException e){
}
if(num<100000||num>999999){
System.out.println("输入有误,请重新输入");
return uMenu();
}
return num;

}
public void espressExist(){
System.out.println("此单号在快递柜中已经存在,请勿重复存储。");
}
//public void printCode(Express e){
// System.out.println("快件的取件码为"+e.getCode());
// }
public void success(){
System.out.println("操作成功");
}
}

2、bean部分
package kuidi.bean;

import java.util.Objects;

/**
* 快递
*/
public class Express {
//快递单号
private String number;
//快递公司
private String company;
//取件码
private int code;


public Express(String number, String company, int code) {
this.number = number;
this.company = company;
this.code = code;
}

@Override
public String toString() {
return "Express{" +
"number=‘" + number + ‘\‘‘ +
", company=‘" + company + ‘\‘‘ +
", 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 code == express.code;
}

@Override
public int hashCode() {
return Objects.hash(code);
}

public Express() {
}

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;
}
}

3、dao部分
package kuidi.dao;

import kuidi.bean.Express;

import java.util.Random;

public class ExpressDao {
private Express[][] data = new Express[10][];
//当前存储的快递数
private int size;
{
for(int i=0;i<10;i++){
data[i] = new Express[10];
}
}
private Random random = new Random();

/**
* 用于存储快递
* @param e
* @return
*/
public boolean add(Express e){
if (size == 100){
return false;
}
//随机生成二个0-9的下标
int x = -1;
int y = -1;
while(true){
x = random.nextInt(10);
y = random.nextInt(10);
if(data[x][y] == null){
//此位置无快递
break;
}
}
//生成取件码
int code = randomCode();
e.setCode(code);
data[x][y] = e;
return true;
}


private int randomCode(){
//0-99999
//100000-999999
//0-899999-100000
while(true) {
int code = random.nextInt(900000)+100000;
Express e = findByCode(code);
if (e == null) {
return code;
}
}
}


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(e.equals(data[i][j])){
return data[i][j];
}
}
}
return null;
}

/**
* 根据取件码查询快递
* @param code
* @return
*/
public Express findByCode(int code) {
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
if(data[i][j]!=null)
if(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);
}

/**
* 删除快递
* @param e
*/
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;

}
}

4、main部分
package kuidi.main;

import kuidi.bean.Express;
import kuidi.dao.ExpressDao;
import kuidi.view.Views;

public class Main {
//初始化视图对象
private static Views v = new Views();
//初始化dao对象
private static ExpressDao dao = new ExpressDao();

public static void main(String[] args) {
//1. 欢迎
v.welcome();
m:
while (true) {
//2. 弹出身份选择菜单
int menu = v.menu();
switch (menu) {
case 0:
break m;
case 1:
cClient();
break;
case 2:
uClient();
break;
}
}
v.bye();

}

private static void uClient() {
//1.取件码获取
int code = v.uMenu();
//2. 根据取件码取出快递
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.espressExist();

}

}
break;
case 2:{//删除
//1. 输入快递单号
String number = v.findByNumber();
//2. 查找快递对象
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 3:{//快递修改
//1. 提示输入快递信息
String number = v.findByNumber();
//查找数据
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(e2);
}


}
break;
case 4:{//查看所有
Express[][] data = dao.findAll();
v.printAll(data);

}
break;
}

}

}

}
以上就是全部代码。但是查询时显示有快递,执行时删除和修改都显示无快递。有修改的友友可以在评论添加代码。

JAVA 技术方向支线任务-快递管理训练任务

原文:https://www.cnblogs.com/xczxfc/p/14408673.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!