- 简单介绍
- 测试类Test:
- 实体
- Express
- ExpressMessage
- 视图界面ExpressView
- 操作类ExpressDao
- 自定义异常类
- CantFindExpressException
- ExpressIsExistException
- InputErrorException
- OutOfBoundException
- OutOfSpaceException
写了一段时间的java基础教程了,今天给小伙伴们分享一个仅用javase的基础知识做的一个小项目——快递驿站,功能如下:
简单介绍快递驿站分两种用户:(由于还没有更新到数据库,所以此处是免登陆的哈) 快递小哥(管理员) 添加快递 删除快递 修改快递 查看所有快递 普通用户 user 取出快递 实体类entity: 快递: 快递单号 承运公司 快递存放信息 快递存放信息: 存储在快递柜子的第几排 存储在快递柜子的第几列 视图view: 初始界面: 管理员界面: 用户界面 操作dao: 一个实体类对应一个dao,但是由于项目比较简单,且两个实体类关联度较高,就采用了一个dao 快递操作
文末附上下载链接用于小白们进行测试!!!
测试类Test:package com.jinhuan.chapter04.no4_4.task_010302_003.test;
import com.jinhuan.chapter04.no4_4.task_010302_003.view.ExpressView;
public class Test {
public static void main(String[] args) {
//启动类,初始化窗口
ExpressView myView = new ExpressView();
myView.inintMenu();
}
}
实体
Express
package com.jinhuan.chapter04.no4_4.task_010302_003.entity;
public class Express {
private String transportNum;
private String company;
private Boolean status;
private ExpressMessage message;
public Express() {
}
public Express(String transportNum, String company, Boolean status, ExpressMessage message) {
this.transportNum = transportNum;
this.company = company;
this.status = status;
this.message = message;
}
public Express(String transportNum, String company, Boolean status) {
this.transportNum = transportNum;
this.company = company;
this.status = status;
}
@Override
public String toString() {
return "运单号:'" + transportNum + ''' +
", 承运公司:'" + company + ''' +
", 取件码:'" + message.getPicCode()+ ''' +
"存储在第" +(message.getX()+1)+ "排"+ ''' +
"存第" +(message.getY()+1)+ "列";
}
public String getTransportNum() {
return transportNum;
}
public void setTransportNum(String transportNum) {
this.transportNum = transportNum;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public Boolean getStatus() {
return status;
}
public void setStatus(Boolean status) {
this.status = status;
}
public ExpressMessage getMessage() {
return message;
}
public void setMessage(ExpressMessage message) {
this.message = message;
}
}
ExpressMessage
package com.jinhuan.chapter04.no4_4.task_010302_003.entity;
public class ExpressMessage {
private Integer x;
private Integer y;
private String picCode;
public ExpressMessage() {
}
public ExpressMessage(Integer x, Integer y, String picCode) {
this.x = x;
this.y = y;
this.picCode = picCode;
}
public ExpressMessage(Integer x, Integer y) {
this.x = x;
this.y = y;
}
public Integer getX() {
return x;
}
public Integer getY() {
return y;
}
public String getPicCode() {
return picCode;
}
public void setX(Integer x) {
this.x = x;
}
public void setY(Integer y) {
this.y = y;
}
public void setPicCode(String picCode) {
this.picCode = picCode;
}
}
视图界面ExpressView
package com.jinhuan.chapter04.no4_4.task_010302_003.view;
import com.jinhuan.chapter04.no4_2.exception.CantFindExpressException;
import com.jinhuan.chapter04.no4_4.task_010302_003.dao.ExpressDao;
import com.jinhuan.chapter04.no4_4.task_010302_003.entity.Express;
import com.jinhuan.chapter04.no4_4.task_010302_003.entity.ExpressMessage;
import com.jinhuan.chapter04.no4_4.task_010302_003.exception.ExpressIsExistException;
import com.jinhuan.chapter04.no4_4.task_010302_003.exception.InputErrorException;
import com.jinhuan.chapter04.no4_4.task_010302_003.exception.OutOfBoundException;
import com.jinhuan.chapter04.no4_4.task_010302_003.exception.OutOfSpaceException;
import java.util.Scanner;
public class ExpressView {
private static Scanner input = new Scanner(System.in);
private static ExpressDao expressDao = new ExpressDao();
private static final int TRANSPORTNUM_LENGTH = 6;
public void inintMenu() {
System.out.println("===========欢迎使用Quiet快递驿站服务系统===========");
do {
System.out.println("请输入您的身份: 1-管理员 2-用户 0-退出");
String receive = input.nextLine();
try {
//调用指令检查方法
if(orderCheck(receive, 0, 2)){
//说明数据输入合法
if("1".equals(receive)){
//进入管理员界面
System.out.println("欢迎进入管理员界面!");
adminstor();
}else if("2".equals(receive)){
System.out.println("欢迎进入用户界面!");
userMenu();
}else {
System.out.println("谢谢使用!已安全退出!");
}
break;
}
} catch ( NumberFormatException e) {
System.out.println(e.getMessage());
}
} while (true);
}
public void adminstor(){
do{
System.out.println("请输入指令:1-快递录入 2-删除快递 3-修改快递 4-查看所有快递 0-返回上一级");
String receive = input.nextLine();
if(orderCheck(receive,0,4)){
//说明数据输入合法
switch (receive) {
case "1":
System.out.println("进入快递录入界面:");
addExpressMenu();
break;
case "2":
System.out.println("进入快递删除界面:");
deleteExpressMenu();
break;
case "3":
System.out.println("进入快递修改界面:");
alterExpressMenu();
break;
case "4":
System.out.println("进入快递查看界面:");
showExpressMenu();
break;
default:
System.out.println("已返回上一级!");
inintMenu();
break;
}
break;
}
}while (true);
}
private void userMenu() {
do{
System.out.println("请输入指令:1-取快递 0-返回上一级");
String receive = input.nextLine();
if(orderCheck(receive, 0, 1)){
if ("1".equals(receive)){
do {
System.out.println("请输入取件码:");
String code = input.nextLine();
Express findExpress = expressDao.getExpressByPicCode(code);
if (findExpress != null){
expressDao.deleteExpressByTransportCode(findExpress.getTransportNum());
System.out.println("快递已取出!");
System.out.println("是否继续取件? 1-是 0-否");
String num = input.nextLine();
if(orderCheck(num,0,1)){
if("0".equals(num)){
userMenu();
return;
}
}
}else{
System.out.println("查询不到对应的快递信息!请检查取件码后重试!");
}
}while (true);
}else{
inintMenu();
}
}
}while (true);
}
private void addExpressMenu() {
while (true){
System.out.println("请输入要录入的快递单号及承运公司:");
try {
System.out.println("请输入运单号:");
String transPortNum = input.nextLine();
if (checkTransPortNum(transPortNum)){
System.out.println("请输入承运公司:");
String company = input.nextLine();
if (checkInput(company)){
if (expressDao.findExpressByTransportNum(transPortNum) == null) {
Express express = new Express(transPortNum, company, true);
//获取存储位置
ExpressMessage expressMessage = expressDao.add(express);
System.out.println("快递存入成功!取件码为:"+expressMessage.getPicCode()+";在第" + (expressMessage.getX() + 1) + "排第" + (expressMessage.getY() + 1) + "列储物柜中!");
while (true){
try{
System.out.println("是否继续存快递? 1-是 0-否");
String receiveNum = input.nextLine();
if (checkInput(receiveNum)){
if (orderCheck(receiveNum, 0, 1)) {
if ("0".equals(receiveNum)) {
adminstor();
return;
}
}
break;
}
}catch (InputErrorException e){
System.out.println(e.getMessage());
}
}
}else {
throw new ExpressIsExistException("快递单号已存在,请重新录入");
}
}
}
} catch ( ExpressIsExistException | InputErrorException | OutOfSpaceException e) {
System.out.println(e.getMessage());
}
}
}
private void deleteExpressMenu() {
if (expressDao.getSize() == 0){
System.out.println("当前快递柜为空!");
adminstor();
return;
}
do{
System.out.println("请输入要删除的快递单号:");
try{
String transportCode = input.nextLine();
if(checkTransPortNum(transportCode)){
if(expressDao.deleteExpressByTransportCode(transportCode)){
while (true){
try{
System.out.println("是否继续删除快递? 1-是 0-否");
String receiveNum = input.nextLine();
if (checkInput(receiveNum)){
if (orderCheck(receiveNum, 0, 1)) {
if ("0".equals(receiveNum)) {
adminstor();
return;
}
}
break;
}
}catch (InputErrorException e){
System.out.println(e.getMessage());
}
}
}else{
throw new CantFindExpressException("查询不到该快递,请检查单号后重新输入!");
}
}
}catch (CantFindExpressException e){
System.out.println(e.getMessage());
}
}while (true);
}
private void alterExpressMenu() {
if (expressDao.getSize() == 0){
System.out.println("当前快递柜为空!");
adminstor();
return;
}
while (true) {
System.out.println("请输入要修改的快递单号:");
String transportCode = input.nextLine();
if(checkTransPortNum(transportCode)){
try {
if(expressDao.alterExpress(transportCode)){
while (true){
try{
System.out.println("是否继续修改快递? 1-是 0-否");
String receiveNum = input.nextLine();
if (checkInput(receiveNum)){
if (orderCheck(receiveNum, 0, 1)) {
if ("0".equals(receiveNum)) {
adminstor();
return;
}
}
break;
}
}catch (InputErrorException e){
System.out.println(e.getMessage());
}
}
}
} catch (CantFindExpressException e) {
System.out.println(e.getMessage());
}
}
}
}
private void showExpressMenu() {
expressDao.printExpress(expressDao.getExpressList());
adminstor();
}
public static boolean checkTransPortNum(String transPortNum) {
try {
if(checkInput(transPortNum)){
if (transPortNum.length() != TRANSPORTNUM_LENGTH){
System.out.println("请输入6位合法字符!");
return false;
}else {
return true;
}
}
} catch (InputErrorException e) {
System.out.println(e.getMessage());
}
return false;
}
public static boolean checkInput(String transPortNum) throws InputErrorException {
if (transPortNum.length() < 1){
throw new InputErrorException("输入不能为空!");
}
return true;
}
private static boolean orderCheck(String receive, int leftBound, int rightBound){
try {
if(receive.length() < 1){
throw new InputErrorException("指令输入格式有误!不能为空!");
}else {
int num = Integer.parseInt(receive);
if (num >= leftBound && num <= rightBound){
return true;
}else {
throw new OutOfBoundException("指令输入有误,请检查后重新输入"+leftBound+"到"+rightBound+"范围之间的数字指令!");
}
}
} catch (InputErrorException | OutOfBoundException e) {
System.out.println(e.getMessage());
}catch (NumberFormatException e) {
System.out.println("指令输入有误,请检查后重新输入"+leftBound+"到"+rightBound+"范围之间的数字指令!");
}
return false;
}
}
操作类ExpressDao
package com.jinhuan.chapter04.no4_4.task_010302_003.entity;
public class ExpressMessage {
private Integer x;
private Integer y;
private String picCode;
public ExpressMessage() {
}
public ExpressMessage(Integer x, Integer y, String picCode) {
this.x = x;
this.y = y;
this.picCode = picCode;
}
public ExpressMessage(Integer x, Integer y) {
this.x = x;
this.y = y;
}
public Integer getX() {
return x;
}
public Integer getY() {
return y;
}
public String getPicCode() {
return picCode;
}
public void setX(Integer x) {
this.x = x;
}
public void setY(Integer y) {
this.y = y;
}
public void setPicCode(String picCode) {
this.picCode = picCode;
}
}
自定义异常类
CantFindExpressException
package com.jinhuan.chapter04.no4_4.task_010302_003.exception;
public class CantFindExpressException extends Throwable{
public CantFindExpressException(String message) {
super(message);
}
}
ExpressIsExistException
package com.jinhuan.chapter04.no4_4.task_010302_003.exception;
public class ExpressIsExistException extends Throwable{
public ExpressIsExistException(String message) {
super(message);
}
}
InputErrorException
package com.jinhuan.chapter04.no4_4.task_010302_003.exception;
public class InputErrorException extends Throwable{
public InputErrorException(String message) {
super(message);
}
}
OutOfBoundException
package com.jinhuan.chapter04.no4_4.task_010302_003.exception;
public class OutOfBoundException extends Throwable {
public OutOfBoundException(String message) {
super(message);
}
}
OutOfSpaceException
package com.jinhuan.chapter04.no4_4.task_010302_003.exception;
public class OutOfSpaceException extends Throwable{
public OutOfSpaceException(String message) {
super(message);
}
}
以上均为本人个人观点,借此分享,希望能和大家一起进步。如有不慎之处,劳请各位批评指正!鄙人将不胜感激并在第一时间进行修改!
下载链接如下,如果觉得有用的话,给博主个三连支持一下吧:
传送门



