快递驿站_入门篇
学习Java一周了,早就想拉出去遛遛了,简简单单的写了个快递驿站项目,来试试水,最后被喷的体无完肤,果然还是年轻啊!
经过了变量,流程控制,数组三部分的学习,让我们通过一个小项目来巩
固这些技能点吧!涉及知识点:
- Java 基础语法
- Java 基础数据类型
- 流程控制语句(if、switch、while、do while、for、break 与 continue)
- 数组
话不多说,上才艺!
import java.util.Random;
import java.util.Scanner;
public class E {
// 定义变量
public static Scanner scanner = new Scanner(System.in);
public static String [] numbers =new String[100];
public static String [] adress =new String[100];
public static int [] code =new int[100];
public static void main(String[] args) {
//初始化用户界面
showView();
}
public static void showView() {
System.out.println("=====欢迎使用哆啦A浪快递E站======");
System.out.println("请输入你的身份:1-快递员,2-用户");
int key = scanner.nextInt();
switch(key) {
case 1:
//Courier
Courier ();
showView() ;
break;
case 2:
//users
users();
showView() ;
break;
}
}
private static void users() {
System.out.println("请输入取件码:");
int userCode =scanner.nextInt();
for (int i = 0; i < adress.length; i++) {
if(userCode==code[i]) {
numbers[i] = null;
adress[i] = null;
code[i] = 0;
System.out.println("取件成功!");
break;
}else {
System.out.println("未找到快递");
break;
}
}
}
private static void Courier() {
showCourierView();
}
private static void showCourierView() {
System.out.println("请选择操作:0-退出 1-存快递 2-删除快递 3-修改快递信息地址 4-查看所有快递");
int courierKey =scanner.nextInt();
switch (courierKey) {
case 1:
//存取
add();
showCourierView();
break;
case 2:
//删除
delate();
showCourierView();
break;
case 3:
//修改
chage();
showCourierView();
break;
case 4:
//查看
look();
showCourierView();
break;
case 0:
//返回初始用户界面
showView();
default:
break;
}
}
private static void look() {
System.out.println("快递单号\t\t快递公司\t\t取件码");
for (int i = 0; i < adress.length; i++) {
if (numbers[i] == null && adress[i] == null && code[i] == 0) {
} else {
System.out.println(numbers[i] + "\t\t" + adress[i] + "\t\t" + code[i]);
}
}
}
private static void chage() {
int count = 0;
System.out.println("请输入要修改的快递单号:");
String trgat =scanner.next();
for (int i = 0; i < adress.length; i++) {
if(trgat.equals(numbers[i])) {
System.out.println("快递存在");
count++;
}
}
if(count!=0){
for (int i = 0; i < adress.length; i++) {
if(trgat.equals(numbers[i])) {
System.out.println("请输入新的公司名称");
String upAdress=scanner.next();
numbers[i] = trgat;
adress[i] = upAdress;
code[i] = code();
}}
}else {
System.out.println("未找到快递");
}
}
private static void delate() {
System.out.println("请输入要删除的快递单号:");
String trgat =scanner.next();
int count =0;
for (int i = 0; i < adress.length; i++) {
if(trgat.equals(numbers[i])) {
numbers[i] = null;
adress[i] = null;
code[i] = 0;
count++;
}
}
if(count==0){
System.out.println("未找到快递");
}else {
System.out.println("删除成功");
}
}
private static void add() {
System.out.println("请输入快递单号");
String number =scanner.next();
int count =0;
for (int i = 0; i < adress.length; i++) {
if(number.equals(numbers[i])) {
count++;
}
}
if(count==0) {
System.out.println("请输入公司名称");
String adress =scanner.next();
//输入一个匹配一个取件码
int code= code();
//添加
install(number, adress, code);
System.out.println("快递已存入,取件码是:"+code);}else {
System.out.println("重复存入");
}
}
private static void install(String numbers2, String adress2, int code2) {
for (int i = 0; i < adress.length; i++) {
if(numbers[i] == null && adress[i] == null && code[i] == 0) {
numbers[i] =numbers2;
adress[i] =adress2;
code[i] =code2;
return;
}
}
}
private static int code() {
Random random =new Random();
int code = random.nextInt(900000) + 100000;
return code;
}
}
结果是这样的:
经过一周的磨练,我又整了一个,再来,奥里给!!!
这次就把该分开的分开,说是啥避免耦合性,还挺好,
import java.util.Scanner;
public class Views {
Scanner scanner = new Scanner(System.in);
/**
* 欢迎菜单
*/
public void weclomeView() {
System.out.println("==========================");
System.out.println("欢迎使用快递E栈管理系统");
System.out.println("==========================");
}
/**
* 结束菜单
*
*/
public void byeView() {
System.out.println("==========================");
System.out.println("欢迎下次使用");
System.out.println("==========================");
}
/**
* 选择身份的主菜单
*
*/
public int menu() {
System.out.println("根据提示,选择对应标号:");
System.out.println("1.快递员");
System.out.println("2.用户");
System.out.println("0.退出程序");
/**
* 所有方法均可以使用nextLine,不会因为输入产生冲突
*可以更好的接受数据
*/
String text =scanner.nextLine();
int menunum = -1;
try {
menunum = Integer.parseInt(text);
}catch(NumberFormatException e){
System.out.println("请按要求输入!");
return menu();
}
if(menunum<0 || menunum>2) {
return menu();
}
return menunum;
}
/**
* 快递员的菜单
* @return
*/
public int courierMenu() {
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 =scanner.nextLine();
int menunum = -1;
try {
menunum = Integer.parseInt(text);
}catch(NumberFormatException e){
System.out.println("请按要求输入!");
return courierMenu();
}
if(menunum<0 || menunum>4) {
return courierMenu();
}
return menunum;
}
/**
* 快递员录入快递
* @return 包含了快递单号和快递公司对象
*/
public Express insert() {
System.out.println("根据提示,输入快递信息:");
System.out.println("输入快递单号:");
String number = scanner.nextLine();
System.out.println("输入快递公司:");
String company= scanner.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 = scanner.nextLine();
return number;
}
/**
* 显示快递信息
* @param e
*/
public void printfExpress(Express e) {
System.out.println("快递信息如下:");
System.out.println("快递公司"+e.getCompany()+",快递单号:"+e.getNumber()+",取件码:"+e.getCode());
}
/**
* 修改信息
* @param e
*/
public void update(Express e) {
System.out.println("请输入新的快递单号:");
String number =scanner.nextLine();
System.out.println("请输入新的快递公司:");
String company =scanner.nextLine();
e.setNumber(number);
e.setCompany(company);
}
/**
* 判断是否删除
* @return 0 取消 ; 1 确认
*/
public int delete() {
System.out.println("是否进行删除?");
System.out.println("1.确认删除");
System.out.println("2.取消操作");
String text =scanner.nextLine();
int num = -1;
try {
num = Integer.parseInt(text);
}catch(NumberFormatException e){
System.out.println("请按要求输入!");
return menu();
}
if(num<0 || num>2) {
return delete();
}
return num;
}
/**
* 将给定数组的快递信息 遍历显示
* @param es
*/
public void printfAll(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.println("第"+(i+1)+"排"+"第"+(j+1)+"列快递,");
printfExpress(es[i][j]);
}
}
}
if(count == 0) {
System.out.println("暂无快递信息");
}
}
/**
* 用户的菜单
* @return
*/
public int userMenu() {
System.out.println("根据提示,进行取件:");
System.out.println("请输入取件码:");
String code =scanner.nextLine();
int menunum = -1;
try {
menunum = Integer.parseInt(code);
}catch(NumberFormatException e){
System.out.println("你的输入有误,重新输入!");
return menu();
}
if(menunum<100000 || menunum>999999) {
System.out.println("你的输入有误,重新输入!");
return menu();
}
return menunum;
}
public void expressExit() {
System.out.println("此单号已经存在,请勿重复存储");
}
public void printNull() {
System.out.println("快递不存在,请检查你的输入");
}
public void printcode(Express e) {
System.out.println("取件码为:"+e.getCode());
}
public void sucess() {
System.out.println("操作成功");
}
}
存储数据:
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;
}
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;
}
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];
}else {
return null;
}
}
}
return null;
}
/**
* 多余操作
* @param oldExpress
* @param newExpress
*/
public void updata(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;
}
}
快递类:
/**
* 快递
*
*/
public class Express {
//单号
private String number;
//快递公司
private String company;
//取件码
private int code;
public Express(String number, String company, int code) {
super();
this.number = number;
this.company = company;
this.code = code;
}
public Express() {
super();
// TODO Auto-generated constructor stub
}
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;
}
@Override
public String toString() {
return "Express [number=" + number + ", company=" + company + ", code=" + code + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((number == null) ? 0 : number.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Express other = (Express) obj;
if (number == null) {
if (other.number != null)
return false;
} else if (!number.equals(other.number))
return false;
return true;
}
}
测试类:
public class Demo01 {
//初始化视图对象
public static Views v= new Views();
//初始化dao对象
public static ExpressDao dao = new ExpressDao();
public static void main(String[] args) {
//1.欢迎
v.weclomeView();
m:while(true) {
int menu = v.menu();
switch(menu) {
case 0:
break m;
case 1:
cClinet();
break;
case 2:
uClinet();
break;
}
}
//2.再见
v.byeView();
}
private static void uClinet() {
//1. 取件码
int code = v.userMenu();
//2. 根据取件码取快递
Express e =dao.findBycode(code);
if(e == null) {
v.printNull();
}else {
v.sucess();
v.printfExpress(e);
dao.delete(e);
}
}
private static void cClinet() {
while(true) {
int menu = v.courierMenu();
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.printfExpress(e);
}else {
//此单号在快递柜中已存在
v.expressExit();
}
}
break;
case 2:{
//快递修改
//1 . 提示查找
String number =v.findByNumber();
//2. 查找
Express e = dao.findByNumber(number);
//3. 打印信息
if(e == null) {
v.printNull();
}else {
v.printfExpress(e);
//4. 提示修改
v.update(e);
dao.updata(e, e);
v.printcode(e);
}
}
break;
case 3:{
//删除
//1. 输入快递单号
String number = v.findByNumber();
//2. 查找快递对象
Express e = dao.findByNumber(number);
if(e == null) {
v.printNull();
}else {
v.printfExpress(e);
int type =v.delete();
if(type == 1) {
dao.delete(e);
v.sucess();
dao.delete(e);
}
}
}
break;
case 4:{
Express[][] data = dao.findAll();
v.printfAll(data);
}
break;
default:
break;
}
}}
}
来个赞吧,球球你了!