Java MVC快递管理系统
题目
分析
MVC框架
模块分析:
1.V视图展示(欢迎,菜单,子菜单…)
2.M 数据存储(快递数据)
3.C调度逻辑(根据视图接受到用户输入,调度数据。
bean
package com.fukang.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;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getCompany() {
return company;
}
public int getCode() {
return code;
}
public void setCompany(String company) {
this.company = company;
}
public void setCode(int code) {
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 Objects.equals(number, express.number);
}
@Override
public String toString() {
return "Express{" +
"number='" + number + '\'' +
", company='" + company + '\'' +
", code=" + code +
'}';
}
@Override
public int hashCode() {
return Objects.hash(number, company, code);
}
}
dao
package com.fukang.dao;
import com.fukang.bean.Express;
import java.util.Random;
public class ExpressDao {
private Express[][] data = new Express[10][];
{
for(int i=0; i<10; i++){
data[i] = new Express[10];
}
}
private Random random = new Random();
//当前存储的快递数
private int size;
/**
* 存储快递
* @param e
* @return
*/
public boolean add(Express e){
if(size == 100){
return false;
}
//随机生成2个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;
}
/**
* 随机生成取件码
* @return
*/
private int randomCode(){
while(true){
int code = random.nextInt(900000) + 100000;
Express e = findByCode(code);
if(e == null){
return code;
}
}
}
/**
* 通过单号查找
* @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(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;
}
/**
* 修改快递信息
* @param oldExpress
* @param newExpress
*/
public void update(Express oldExpress, Express newExpress){
delete(oldExpress);
add(newExpress);
}
/**
* 删除快递
* @param e
*/
public void delete(Express e){
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;
}
}
}
}
/**
* 查看所有快递
* @return
*/
public Express[][] findAll(){
return data;
}
}
View
package com.fukang.view;
import com.fukang.bean.Express;
import java.util.Scanner;
public class Views {
private Scanner input = new Scanner(System.in);
/**
* 欢迎界面
*/
public void welcome(){
System.out.println("欢迎使用XXX快递管理系统!");
}
/**
* 再见界面
*/
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. 退出");
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 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;
}
/**
* 快递员目录
* @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 menu();
}
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.setNumber(number);
e.setCompany(company);
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());
}
/**
* 更新快递信息
* @param e
* @return
*/
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);
}
/**
* 询问是否删除
* @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 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("暂无快递信息");
}
}
/**
* 快递已经存在
*/
public void expressExist(){
System.out.println("此快递已经存在,请勿存储");
}
/**
* 打印空
*/
public void printNull(){
System.out.println("快递不存在,请检查您的输入");
}
/**
* 打印取件码
* @param e
*/
public void printCode(Express e){
System.out.println("快递的取件码为:" + e.getCode());
}
/**
* 操作成功
*/
public void success(){
System.out.println("操作成功");
}
}
Main
package com.fukang.main;
import com.fukang.bean.Express;
import com.fukang.dao.ExpressDao;
import com.fukang.view.Views;
public class Main {
private static Views v = new Views(); //初始化视图对象
private static ExpressDao dao = new ExpressDao(); //初始化dao对象
public static void main(String[] args) {
//欢迎界面
v.welcome();
//弹出身份选择菜单
m:while(true){
int menu = v.menu();
switch (menu){
case 0: //退出
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: { //快递录入
//提示输入快递信息
Express e = v.insert();
//此快递是否存储过
Express e2 = dao.findByNumber(e.getNumber());
//存储快递
if(e2 == null){
dao.add(e);
v.printExpress(e);
}else{
v.expressExist();
}
break;
}
case 2: { //快递修改
//用户输入快递信息
String number = v.findByNumber();
//查找信息
Express e = dao.findByNumber(number);
//打印快递信息
if(e == null){
v.printNull();
}else{
v.printExpress(e);
v.update(e);
dao.update(e, e); //无用操作
v.printExpress(e);
}
break;
}
case 3: { //快递删除
//输入快递单号
String number = v.findByNumber();
//查找快递对象
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;
}
}
}
}
}