java基础实现水果超市系统(数组+集合+对象持久化(io流存储到txt文件))
Fruit类
package com.zr.fruitSupermarket;
/**
* 水果
* @author ZR
*
*/
public class Fruit {
private String fname;
private double price;
private int count;
public Fruit() {
super();
// TODO Auto-generated constructor stub
}
public Fruit(String fname, double price, int count) {
super();
this.fname = fname;
this.price = price;
this.count = count;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
@Override
public String toString() {
return fname +"\t"+ price + "\t\t"+count;
}
}
User类
package com.zr.fruitSupermarket;
import java.io.Serializable;
public class User implements Serializable{
/**
* 序列化ID
*/
private static final long serialVersionUID = 1L;
private String username;
private String password;
private Order[] orders=new Order[200];
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Order[] getOrders() {
return orders;
}
@Override
public String toString() {
return username + "\t\t" + password;
}
}
Order类
package com.zr.fruitSupermarket;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 订单
* @author ZR
*
*/
public class Order {
private int orderId;
private String fname;
private double fprice;
private int count;
private double totalPrice;
private String orderTime;
public Order() {
super();
// TODO Auto-generated constructor stub
}
public Order(String fname, double fprice, int count) {
super();
this.fname = fname;
this.fprice = fprice;
this.count = count;
this.totalPrice=this.fprice*this.count;
this.orderTime=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(new Date());
}
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public double getFprice() {
return fprice;
}
public void setFprice(double fprice) {
this.fprice = fprice;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public double getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(double totalPrice) {
this.totalPrice = totalPrice;
}
public String getOrderTime() {
return orderTime;
}
public void setOrderTime(String orderTime) {
this.orderTime = orderTime;
}
@Override
public String toString() {
return orderId + "\t\t" + fname + "\t\t" + fprice + "\t\t" + count
+ "\t\t" + totalPrice + "\t\t" + orderTime;
}
}
Supermarket类
package com.zr.fruitSupermarket;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
/**
* 超市
* @author ZR
*
*/
public class Supermarket {
ArrayList<Fruit> fList=new ArrayList<Fruit>();
ArrayList<User> users=new ArrayList<User>();
/**
* 超市初始化
*/
public Supermarket() {
Fruit f1=new Fruit("apple",5.8,100);
Fruit f2=new Fruit("oranger",3.9,100);
Fruit f3=new Fruit("banana",5.5,100);
Fruit f4=new Fruit("watermelon",1.0,100);
Fruit f5=new Fruit("pear",6.5,100);
fList.add(f1);
fList.add(f2);
fList.add(f3);
fList.add(f4);
fList.add(f5);
init();
}
public void init() {
ObjectInputStream objectInputStream=null;
try {
objectInputStream=new ObjectInputStream(new FileInputStream(new File("src/com/zr/fruitSupermarket/user.txt")));
users = (ArrayList<User>) objectInputStream.readObject();
} catch (FileNotFoundException e) {
File file=new File("src/com/zr/fruitSupermarket/user.txt");
users=new ArrayList<User>();
try {
file.createNewFile();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} catch (IOException e) {
//当user.txt为空时,处理该异常
System.out.println("尚无用户注册");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if (objectInputStream!=null) {
try {
objectInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 水果菜单
*/
public void fruitMenu() {
System.out.println("水果名称\t\t价格\t\t数量");
for (Fruit fruit : fList) {
System.out.println(fruit);
}
}
/**
* 用户列表
*/
public void userList() {
System.out.println("用户名\t\t密码");
for (User user : users) {
System.out.println(user);
}
}
/**
* 订单列表
*/
public void orderMenu(User user) {
Order[] orders = user.getOrders();
System.out.println("订单号\t\t水果名称\t\t水果单价\t\t购买数量\t\t总价\t\t订单日期");
for (int i = 0; i < orders.length; i++) {
if (orders[i]==null) {
return;
}
System.out.println(orders[i]);
}
}
/**
* 添加水果
*/
public void appendFruit() {
Scanner sc = new Scanner(System.in);
System.out.println("添加水果商品:");
System.out.println("请输入水果名称:");
String fname = sc.nextLine();
System.out.println("请输入商品价格:");
double price = sc.nextDouble();
System.out.println("请输入商品数量:");
int count = sc.nextInt();
Fruit fruit=new Fruit(fname,price,count);
for (Fruit f : fList) {
if (f.getFname().equals(fname)) {
System.out.println("该水果已存在,您可以修改该水果价格或者添加该水果数量");
return;
}
fList.add(fruit);
System.out.println("添加水果成功");
}
System.out.println("水果添加失败,原因:超市货满放不下");
}
/**
* 购买水果
*/
public void buyFruit(User user) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入购买水果的名称:");
String fname = sc.nextLine();
System.out.println("请输入购买水果的数量:");
int count = sc.nextInt();
for (Fruit fruit : fList) {
if (fruit.getFname().equals(fname)) {
if (fruit.getCount()==0) {
System.out.println("购买失败,库存为0,请购买其他水果");
return;
}
if (count<=0||count>fruit.getCount()) {
System.out.println("购买失败,请输入正确的购买数量");
return;
}
fruit.setCount(fruit.getCount()-count);
System.out.println("购买成功");
Order order=new Order(fname,fruit.getPrice(),count);
Order[] orders = user.getOrders();
for (int j = 0; j < orders.length; j++) {
if (orders[j]==null) {
order.setOrderId(new Random().nextInt(100000));
orders[j]=order;
return;
}
}
}
System.out.println("超市未售卖这种水果,请购买其他水果");
return;
}
}
/**
* 修改水果价格
*/
public void changePrice() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入水果的名称:");
String fname = sc.nextLine();
System.out.println("请输入需要修改的水果价格:");
double price = sc.nextDouble();
if (price<=0) {
System.out.println("输入的价格不合法");
return;
}
for (Fruit fruit : fList) {
if (fruit.getFname().equals(fname)) {
fruit.setPrice(price);
System.out.println("修改价格成功");
return;
}
}
System.out.println("输入的水果名称不合法");
return;
}
/**
* 添加水果数量
*/
public void changeCount() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入水果的名称:");
String fname = sc.nextLine();
System.out.println("请输入需要添加的水果数量:");
int count = sc.nextInt();
if (count<=0) {
System.out.println("输入的数量不合法");
return;
}
for (Fruit fruit : fList) {
if (fruit.getFname().equals(fname)) {
fruit.setCount(count);
System.out.println("添加水果数量成功");
return;
}
}
System.out.println("输入的水果名称不合法");
return;
}
/**
* 用户注册
*/
public void userRegister() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.nextLine();
System.out.println("请输入密码:");
String password = sc.nextLine();
int num=(int)((Math.random()*9+1)*100000);
System.out.println("验证码:"+num);
System.out.println("请输入验证码:");
int code = sc.nextInt();
if (code==num) {
User user=new User(username,password);
for (User u : users) {
if (u.getUsername().equals(username)) {
System.out.println("该用户名已注册,请更改用户名");
return;
}
}
users.add(user);
System.out.println("注册成功");
ObjectOutputStream objectOutputStream=null;
try {
objectOutputStream = new ObjectOutputStream(new FileOutputStream("src/com/zr/fruitSupermarket/user.txt"));
objectOutputStream.writeObject(users);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if (objectOutputStream!=null) {
try {
objectOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}else {
System.out.println("验证码错误");
}
}
/**
* 用户登录
*/
public User userLogin() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.nextLine();
System.out.println("请输如密码:");
String password = sc.nextLine();
for (User u : users) {
if (u.getUsername().equals(username)&&u.getPassword().equals(password)) {
System.out.println("登录成功,进入水果商店");
return u;
}
}
System.out.println("用户名或密码错误");
return null;
}
/**
* 管理员登录
*/
public int adminLogin() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入管理员用户名:");
String username = sc.nextLine();
System.out.println("请输入管理员密码:");
String password = sc.nextLine();
if ("admin".equals(username)&&"admin".equals(password)) {
System.out.println("登录成功");
return 1;
}
System.out.println("用户名或密码错误");
return 0;
}
}
客户端运行
package com.zr.fruitSupermarket;
import java.util.Scanner;
/**
* 客户
* @author ZR
*
*/
public class Client {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("********************欢迎进入水果超市系统***********************************");
Supermarket supermarket=new Supermarket();
while(true) {
menu();
System.out.println("请输入要执行的功能序号:");
int num = sc.nextInt();
switch (num) {
case 1:
int flag = supermarket.adminLogin();
if (flag==1) {
while(true) {
adminMenu();
System.out.println("请输入要执行的功能序号:");
int num2 = sc.nextInt();
switch (num2) {
case 1:
supermarket.fruitMenu();
break;
case 2:
supermarket.appendFruit();;
break;
case 3:
supermarket.userList();
break;
case 4:
supermarket.changePrice();;;
break;
case 5:
supermarket.changeCount();;
break;
case 6:
System.out.println("退出系统成功,欢迎下次光临.");
System.exit(0);
break;
default:
System.out.println("请输入正确的操作指令序号");
break;
}
}
}
break;
case 2:
User userLogin = supermarket.userLogin();
if(userLogin!=null) {
while(true) {
userMenu();
System.out.println("请输入要执行的功能序号:");
int num3 = sc.nextInt();
switch (num3) {
case 1:
supermarket.fruitMenu();
break;
case 2:
supermarket.buyFruit(userLogin);
break;
case 3:
supermarket.orderMenu(userLogin);
break;
case 4:
System.out.println("退出系统成功,欢迎下次光临.");
System.exit(0);
break;
default:
System.out.println("请输入正确的操作指令序号");
break;
}
}
}
break;
case 3:
supermarket.userRegister();
break;
case 4:
System.out.println("退出系统成功,欢迎下次光临.");
System.exit(0);
break;
default:
System.out.println("请输入正确的操作指令序号");
break;
}
}
}
/**
* 初始执行功能
*/
public static void menu() {
System.out.println("1.管理员登录");
System.out.println("2.用户登录");
System.out.println("3.用户注册");
System.out.println("4.退出系统");
}
/**
* 管理员执行功能
*/
public static void adminMenu() {
System.out.println("1.查询水果菜单");
System.out.println("2.添加水果");
System.out.println("3.查询用户列表");
System.out.println("4.修改水果价格");
System.out.println("5.添加水果数量");
System.out.println("6.退出系统");
}
/**
* 用户执行功能
*/
public static void userMenu() {
System.out.println("1.查询水果菜单");
System.out.println("2.购买水果,并添加到订单");
System.out.println("3.查看订单");
System.out.println("4.退出系统");
}
}