鑫亿数码

背景说明:
为了方便用户购买网店商品,并且对用户购买的信息进行统一管理,可以把所有商品信息录入系统,通过数据库来保存相关录入的商品数据。
主要功能包括浏览商品信息模块;购买商品模块;查询模块,按编号或者名称查询物品;订单管理模块。
(无数据库、导出订单文件、纯eclipse控制台操作、附带操作结果说明文档)

工具及环境:

  1. eclipse-jee-2018
  2. JDK11
  3. tomcat9

源代码下载地址:鑫亿数码

文件目录:
鑫亿数码
User实体类:
User实体类
代码:

public class User implements Serializable {
	private static final long serialVersionUID = 5666219877199167391L;

	private String username;//用户名
	private long code;//电话号码
	private String address;//地址
	private Date date;//下单时间
	private int ways;//邮寄方式
	private int card=1000;//订单默认后半部分编号

	public User() {
		super();
	}

	public User(String username, long code, String address) {
		super();
		this.username = username;
		this.code = code;
		this.address = address;
		this.date =new Date();
		this.ways=ways;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public long getCode() {
		return code;
	}

	public void setCode(long code) {
		this.code = code;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
	
	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}
	
	public int getWays() {
		return ways;
	}

	public void setWays(int ways) {
		this.ways = ways;
	}
	
	@Override
	public String toString() {
		//"订单编号\t\t创建时间\t\t创建人\t\t联系方式\t\t联系地址\t\t派送方式"
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//获取时间
		SimpleDateFormat sdf1=new SimpleDateFormat("yyyyMMdd");//获取时间字段作为订单前半部分
		
		String way1;
		if (ways==1) {
			way1="自提";
		} else {
			way1="邮寄";
		}
		card++;//编号自增
		StringBuilder builder=new StringBuilder();
		String card1=card+"";//转字符串
		builder.append(sdf1.format(date)).append(card1);//字符拼接
		return builder+"\t"+sdf.format(date)+"\t"+username + "\t\t" + code + "\t"+address+"\t"+way1 ;
	}
}

Order实体类:
Order实体类
代码:

public class Order {
	private String gname;
	private String id;
	private int num;//购买数量
	private double price;//单价
	private double sumPrice;//总价

	public Order() {
		super();
	}
	
	public Order(String id,int num, double price) {
		super();
		this.gname = gname;
		this.id=id;
		this.num = num;
		this.price = price;
		this.sumPrice = price*num;
	}

	public String getGname() {
		return gname;
	}

	public void setGname(String gname) {
		this.gname = gname;
	}
	
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	public double getSumPrice() {
		return sumPrice;
	}

	public void setSumPrice(double sumPrice) {
		this.sumPrice = sumPrice;
	}

	@Override
	public String toString() {
		//商品\t\t价格\t\t购买数量\t\t总价
		return  gname+ "\t" + price + "\t\t" + num + "\t\t" + sumPrice;
	}	
}

Goods实体类:
Goods实体类
代码:

public class Goods {
	private String id;//编号
	private String gname;//商品名
	private double price;//价格
	
	public Goods() {
		super();
	}

	public Goods(String id, String gname, double price) {
		super();
		this.id = id;
		this.gname = gname;
		this.price = price;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getGname() {
		return gname;
	}

	public void setGname(String gname) {
		this.gname = gname;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	@Override
	public String toString() {
		return id + "\t\t" + gname + "\t\t" + price;
	}	
}

Customer实体类:
Customer实体类
代码:

public class Customer {
	private static Scanner scanner=new Scanner(System.in);
	private static List<Goods> goods=new ArrayList<Goods>();
	private static List<User> users=new ArrayList<User>();
	private static List<Order> orders=new ArrayList<Order>();

	//目标存放文件夹位置
	private final String filePath="D:\\digitual.db";
	public Customer() {
		load();
	}
	
	private void load() {
		//创建对象流  反序列化
		ObjectInputStream ois=null;
		File file=new File(filePath);
		try {
			if(!file.exists()||file.isDirectory()) {
				System.out.println("订单文件不存在");
				return;
			}else {
				ois=new ObjectInputStream(new FileInputStream(file));
				//读取文件数据
				users=(List<User>)ois.readObject();
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch(EOFException e) {
			
		}
		catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if(ois!=null) {
				try {
					ois.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	
	//序列化,整个集合对象写到文件中
	//退出时保存修改过后的集合
	public void save() {
		ObjectOutputStream oos=null;
		try {
			oos=new ObjectOutputStream(new FileOutputStream(filePath));
			//写出数据
			oos.writeObject(users);
			oos.flush();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if(oos!=null) {
				try {
					oos.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	
	//商品信息
	public static void putaway() {
		//gname后为格式好看加了空格
		Goods g1=new Goods("1001", "iPhoneX	", 9988);
		Goods g2=new Goods("1002", "MacBook	", 12888);
		Goods g3=new Goods("1003", "iPad-mini", 3688);
		
		//添加数据
		goods.add(g1);
		goods.add(g2);
		goods.add(g3);
	
	}
	
	//主菜单商品展示
	public static void show() {
		System.out.println("今日上架:");
		System.out.println("编号\t\t商品\t\t\t价格");
		for (Goods goods2 : goods) {
			System.out.println(goods2);
		}
	}
	
	//打印菜单
	public static void printMenu() {
		System.out.println("请选择:");
		System.out.println("[1.我要下单]");
		System.out.println("[2.我的订单]");
		System.out.println("[3.查询商品]");
		System.out.println("[4.退出]");
	}
	
	//购买
	public void shopping() {
		System.out.println("********************欢迎订购********************");
		System.out.println("请输入商品编号:");
		String id=scanner.next();
		System.out.println("请输入购买数量:");
		int num=scanner.nextInt();
		
		for (Goods goods2 : goods) {
			if (id.equals(goods2.getId())) {
				Order order=new Order(id,num,goods2.getPrice());
				order.setGname(goods2.getGname());
				System.out.println("您当前购买的是:【"+goods2.getGname().trim()+"】,单价是:【"+goods2.getPrice()+"元】,购买数量:【"+num+"个】,合计:【"+order.getSumPrice()+"元】");
				System.out.println("是否确定下单(Y/N?)");
				String result=scanner.next();
				if("y".equalsIgnoreCase(result)) {
					orders.add(order);
					System.out.println("请输入姓名:") ;
					String username=scanner.next();
					System.out.println("请输入联系方式:");
					long code=scanner.nextLong();
					System.out.println("请选择派送方式:【1、自提   2、邮寄】");
					int way=scanner.nextInt();

					System.out.println("请输入收货地址:");
					String address=scanner.next();
					System.out.println("恭喜下单成功,请耐心等待收货!");
					User user=new User(username, code, address);
					users.add(user);
					user.setWays(way);
					return ;
					
				}else {
					System.out.println("谢谢使用,欢迎下次再来!");
					return;
				}
			} 
		}
		System.out.println("您要购买的商品不存在");
			
	}
	
	//我的订单
	public void history() {
		if (users.size()>0) {
			System.out.println("当前位置>>我的订单");
			System.out.println("订单编号\t\t创建时间\t\t\t创建人\t\t联系方式\t\t联系地址\t\t派送方式");
			for (User user  : users) {
				System.out.println(user);
			}
		} else {
			System.out.println("还没有订单信息!");
		}
	}
	
	//二级菜单
	public void moreMenu() {
		System.out.println("[1、查看订单][2、返回上一级][3、退出]");
		int choice=scanner.nextInt();
		switch (choice) {
		case 1:
			myOrder();
			break;
		case 2:
			break;
		case 3:
			System.out.println("确认退出?Y/N");
			String result=scanner.next();
			//equalsIgnoreCase  忽略大小写 比较值
			if("y".equalsIgnoreCase(result)) {
				System.out.println("谢谢使用");
				//信息保存
				save();
			}
			System.exit(0);
			break;
		default:
			break;
		}
	}
	
	//订单详情
	public static void myOrder() {
		if (orders.size()>0) {
			System.out.println("当前位置>>我的订单>>订单详情");
			System.out.println("商品\t\t价格\t\t购买数量\t\t\t总价");
			for (Order order : orders) {
				System.out.println(order);
				System.out.println("当前订单合计:"+order.getSumPrice()+"元");
			}
		} else {
			System.out.println("还没购买商品!");
		}
	}
	
	//查询商品
	public static void find() {
		System.out.println("请输入商品编号或名称:");
		String gs1=scanner.next();
		for (Goods goods3 : goods) {
			
			//输入名称时有问题????若创建的gname中间有空格,30行出现异常java.util.InputMismatchException
			//.trim() 去掉首位空格
			if (gs1.equals(goods3.getId())||gs1.equals(goods3.getGname().trim())) {
				System.out.println("编号\t\t商品\t\t\t价格");
				System.out.println(goods3);
				//putaway();
				show();
				return;				
			}	
		}
		System.out.println("抱歉无此商品,我们会努力添加的哦!");		
	}	
}

测试实体类:
测试实体类
代码:

public class Test {
	private static Scanner scanner=new Scanner(System.in);
	public static void main(String[] args) {
		Customer customer=new Customer();
		System.out.println("********************新毅数码********************");
		
		customer.putaway();
		customer.show();
		
		//键盘输入选择
		while (true) {
			customer.printMenu();
			int choices=scanner.nextInt();
			//功能选项判断
			switch (choices) {
			case 1:
				customer.shopping();//下单
				break;
			case 2:
				customer.history();//查看订单
				customer.moreMenu();//二级菜单
				break;
			case 3:
				customer.find();//查询订单
				//printMenu();
				break;
			case 4:
				System.out.println("确认退出?Y/N");
				String result=scanner.next();
				//equalsIgnoreCase  忽略大小写 比较值
				if("y".equalsIgnoreCase(result)) {
					System.out.println("谢谢使用");
					//信息保存
					customer.save();
				}
				System.exit(0);
				break;

			default:
				break;
			}	
		}
	}
}

系统运行:

  1. 初次运行界面:
    在这里插入图片描述
    初次运行,由于还未生成订单文件,所以提示订单文件不存在。
  2. 选择【我要下单】:
    在这里插入图片描述
    选择输入【1】后回车,控制台窗口出现提示信息,根据步骤进行下单,可以看到现在我下单成功,系统给与提示。
  3. 查看【我的订单】:
    在这里插入图片描述
    选择输入【2】后回车,系统显示刚才下单的订单列表,由于输入的字符长度不够,导致没有对齐表头,哈哈,你们将就着看吧!
  4. 查看【订单详情】:
    在这里插入图片描述
    选择输入【1】后回车,控制台窗口显示当前位置以及订单的详情列表信息,来来来,66台电脑随便拿哈,不收大家的钱。
  5. 查询商品】:
    在这里插入图片描述
    分别从三种情况去查询系统的商品信息,可以看到控制台窗口显示的信息都是符合的。
  6. 最后【退出】:
    在这里插入图片描述
    还不快去开动你充满智慧的脑袋去写出一个属于自己的系统~

注:能力有限,目前基本无干货,还请谅解,争取早日能够写出有质量的文章!

我是皮蛋布丁,一位爱吃皮蛋的热爱运动的废铁程序猿。

感谢各位大佬光临寒舍~

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐