看了小区的快递柜,下定决心自己写一个!

快递驿站_入门篇

学习Java一周了,早就想拉出去遛遛了,简简单单的写了个快递驿站项目,来试试水,最后被喷的体无完肤,果然还是年轻啊!

经过了变量,流程控制,数组三部分的学习,让我们通过一个小项目来巩
固这些技能点吧!涉及知识点:

  1. Java 基础语法
  2. Java 基础数据类型
  3. 流程控制语句(if、switch、while、do while、for、break 与 continue)
  4. 数组

话不多说,上才艺!



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

来个赞吧,球球你了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我想去拉萨。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值