之前的时候用过数组书写快递的存取项目,最近学了集合,开始使用集合来书写快递存取,之后在引入IO流和本地文件联系起来。
首先先写一个Case类,声明快递对象和私有属性
这个类没什么说的,声明之后,生成get,set方法,有参和无参的构造函数,toString方法。
上代码
public class Case2 {
//快递单号
private int expressNum;
//快递公司名称
private String companyName;
//柜子号码
private int boxNum;
//取件码
private int getExpressNum;
//用来判断柜子是否存放了东西
boolean []tag = new boolean[25];
@Override
public String toString() {
return "Case{" +
"expressNum=" + expressNum +
", companyName='" + companyName + '\'' +
", boxNum=" + boxNum +
", getExpressNum=" + getExpressNum +
'}';
}
public Case2() {
}
public Case2(int expressNum, String companyName, int boxNum, int getExpressNum) {
this.expressNum = expressNum;
this.companyName = companyName;
this.boxNum = boxNum;
this.getExpressNum = getExpressNum;
}
public int getExpressNum() {
return expressNum;
}
public void setExpressNum(int expressNum) {
this.expressNum = expressNum;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public int getBoxNum() {
return boxNum;
}
public void setBoxNum(int boxNum) {
this.boxNum = boxNum;
}
public int getGetExpressNum() {
return getExpressNum;
}
public void setGetExpressNum(int getExpressNum) {
this.getExpressNum = getExpressNum;
}
}
既然类和属性生成完了之,个人习惯先写框架,然后根据框架写具体的实现类,不过这样会很多地方爆红,这也是比较头秃的。这里的Text当门口,用于实现具体的门户操作。
这里有个不合适的地方,那么多个if else其实是比较麻烦的,可以用switch case,但是实在不是很习惯这个,就用的if else。读者可以很据这个代码进行具体的优化,本人也是小白一枚,代码很多地方也是不可取的。
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
public class Text2 {
public static void main(String[] args) throws IOException {
ArrayList<Case2> array = new ArrayList<Case2>();
while(true){
System.out.println("请输入你的身份:1.管理员,2.顾客,3.退出");
Scanner input = new Scanner(System.in);
int a = input.nextInt();
if(a==1){
Courier2 co = new Courier2();
System.out.println("请选择管理员功能:1.快递录入,2.删除快递,3.修改快递,4.查看所有快递,5.退出");
while (true) {
int b = input.nextInt();
if (b == 1) {
co.add(array);
break;
} else if (b == 2) {
co.delete(array);
break;
} else if (b == 3) {
co.change(array);
break;
} else if (b == 4) {
co.lookup(array);
break;
}else {
break;
}
}
}else if(a==2){
Customer2 cu = new Customer2();
cu.getexpress(array);
}else if(a==3){
System.out.println("再见!");
break;
}else {
System.out.println("您输入的号码有误,请重新输入!");
}
}
}
}
门口写好了,接下来就写具体的实现类,先是管理员,因为管理员要实现具体的对快递的增删改查,这里的Courier2就是具体的管理员类,里面包含增加快递,删除快递,修改快递,查看所有快递四种方法。用于对接门口Text。
import com.sun.deploy.util.ArrayUtil;
import com.sun.org.apache.regexp.internal.RE;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class Courier2 extends Case2{
public Courier2() {
}
//继承父类的数据
public Courier2(int expressNum, String companyName, int getExpressNum, int boxNum) {
super(expressNum, companyName, getExpressNum, boxNum);
}
//快递的录入
public void add(ArrayList<Case2> array) throws IOException {
int box=0;
int q = 0;
//系统自动生成取件码
Random r = new Random();
StringBuilder result = new StringBuilder();
for (int i=0;i<6;i++){
result.append(r.nextInt(10));
}
setGetExpressNum(Integer.parseInt(result.toString()));
//系统自动生成柜子号码
for(int i=0;i<tag.length;i++){
box = r.nextInt(25);
if(!tag[box]){
setBoxNum(box);
/*System.out.println("快递信息已录入。");
System.out.println("-------感谢使用-------");*/
tag[box] = true;
break;
}
}
String b =String.valueOf(box);
//用户输入快递单号和公司名称,写入集合
System.out.println("请输入快递单号:");
Scanner input = new Scanner(System.in);
int expressNum = input.nextInt();
for (int i=0;i<array.size();i++){
Case2 c = array.get(i);
if(c.getExpressNum()==expressNum){
System.out.println("输入的快递单号有重复,请检查后重新输入!");
q++;
break;
}
}
if(q==0){
System.out.println("请输入快递公司名:");
String companyName = input.next();
Case2 c = new Case2();
c.setExpressNum(expressNum);
c.setBoxNum(box);
c.setCompanyName(companyName);
c.setGetExpressNum(getGetExpressNum());
array.add(c);
System.out.println("快递添加成功!");
System.out.println("取件码为:"+getGetExpressNum());
}
}
//管理员的删除操作
void delete(ArrayList<Case2> array){
Scanner input = new Scanner(System.in);
System.out.println("请输入要删除的快递单号:");
int expressNum = input.nextInt();
for (int i=0;i<array.size();i++){
Case2 c = array.get(i);
if(c.getExpressNum()==expressNum){
array.remove(i);
System.out.println("删除该快递成功!");
break;
}else if(i==array.size()-1){
System.out.println("没有找到该快递,请检查快递单号的输入是否正确!");
break;
}
}
}
//管理员的快递信息修改操作
void change(ArrayList<Case2> array){
Scanner input = new Scanner(System.in);
System.out.println("请输入要修改的快递单号:");
int expressNum = input.nextInt();
for (int i=0;i<array.size();i++){
Case2 c = array.get(i);
if(c.getExpressNum()==expressNum){
System.out.println("请输入要修改的内容");
System.out.println("1.快递单号 2.快递公司名称");
String q = input.next();
System.out.println("请输入修改后的内容:");
String date = input.next();
switch (q){
case "1":c.setExpressNum(Integer.valueOf(date));
System.out.println("修改成功!");
break;
case "2":c.setCompanyName(date);
System.out.println("修改成功!");
break;
}
}else if(i==array.size()-1){
System.out.println("没有找到该快递,请检查快递单号的输入是否正确!");
break;
}
}
}
//管理员的查看所有快递信息操作
void lookup(ArrayList<Case2> array){
if(array.size()==0){
System.out.println("暂时没有快递!");
}else {
System.out.println();
for (int i=0;i<array.size();i++){
Case2 c = array.get(i);
System.out.println("柜子号:"+c.getBoxNum());
System.out.println("快递单号:"+c.getExpressNum());
System.out.println("公司名称:"+c.getCompanyName());
System.out.println("取件码:"+c.getGetExpressNum());
}
}
}
}
最后就是客户的取件操作了,客户通过对集合的读取,根据取件码信息来拿快递。
import java.util.ArrayList;
import java.util.Scanner;
public class Customer2 extends Case2{
public Customer2() {
}
public Customer2(int expressNum, String companyName, int boxNum, int getExpressNum) {
super(expressNum, companyName, boxNum, getExpressNum);
}
//客户取件
public void getexpress(ArrayList<Case2> array){
System.out.println("--------------");
Scanner input = new Scanner(System.in);
System.out.println("欢迎取件,请输入6位取件码");
/*String expressNum = input.next();
int ex = Integer.parseInt(expressNum);*/
int expressNum = input.nextInt();
//flag定义的是一个有25个长度的布尔类型的数组,用来标记存入柜子的类型
boolean flag = true;
for(int i=0;i<array.size();i++){
Case2 c = array.get(i);
if(c.getExpressNum()!=0){
if(c.getExpressNum()==expressNum){
System.out.println("您的快递单号为:"+c.getExpressNum()+",在第:"+c.getBoxNum()+"号柜,快递柜已经成功打开");
tag[i] = false;
flag = false;
System.out.println("------欢迎下次使用------");
}
}
}
if(flag){
System.out.println("未找到指定快递,请尝试重新输入或联系快递公司");
}
}
}
以上就是用集合存储快递的全部代码,一共是四部分,简单的面向对象和集合知识点,欢迎大家在学习的同时给予指正。