我们要写一个简易的电商系统,自然是要能用来方便我们管理商品等信息。这个时候我们的功能避免不了增删改查。
有以下功能:
1、管理员登陆。
2、修改管理员密码。
3、商品的添加。
4、商品列表。
5、查询指定的id商品。
6、根据商品id删除商品。
7、根据id修改商品的价格。
8、根据id修改商品的库存。
9、根据商品类别查询所有商品
10、查询指定价格区间的商品信息
其中最重点就是我们写入文件保存这一点,当我们这一点写出来后面的就顺理成章。接下来谢谢我编写代码的时候的一些思路。
当我们写一个系统的时候肯定是要管理一些数据的,这个系统最主要的是保存商品信息。这个时候我们就知道了商品的属性了。我们这里定义了商品有以下几个属性:商品id、商品名、类别名、单价、库存量、产地、计量单位。
这个时候我们先创建一个商品类。
package com;
import java.io.Serializable;
public class Goods implements Serializable{
private int id;
private String name;
private String typeName;
private double price;
private int count;
private String placeOrigin;
private String units;
public Goods() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTypeName() {
return typeName;
}
public void setTypeName(String typeName) {
this.typeName = typeName;
}
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;
}
public String getPlaceOrigin() {
return placeOrigin;
}
public void setPlaceOrigin(String placeOrigin) {
this.placeOrigin = placeOrigin;
}
public String getUnits() {
return units;
}
public void setUnits(String units) {
this.units = units;
}
@Override
public String toString() {
return "Goods [id=" + id + ", name=" + name + ", typeName=" + typeName + ", price=" + price + ", count=" + count
+ ", placeOrigin=" + placeOrigin + ", units=" + units + "]";
}
}
这个类很简单,添加一些get/set方法便于我们获取数据,还有一个tostring方法用来测试。
当我们写完这个类过后就要想我们还有什么对象,java是面向对象的语言,一切皆对象,我们就想了管理员也是一个类,管理员主要的属性就是管理员的用户名和密码了。
package com;
import java.io.Serializable;
public class User implements Serializable{
private String userName;
private String password;
public User() {
}
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;
}
@Override
public String toString() {
return "User [userName=" + userName + ", password=" + password + "]";
}
}
我们进入系统当然第一眼就是登陆界面了,所以我们思路就是先写出登陆功能,而且我们想到我们的登陆的用户名和密码是要保存到本地的,所以我们先写出一个用于保存用户信息和读取用户信息的方法:
//得到账户信息
public void getSystemUser() {
File file = new File(“D:\电商管理\password.txt”);
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream(file);
ois = new ObjectInputStream(fis);
Object obj = ois.readObject();
if (obj instanceof User) {
this.user = (User) obj;
}
}catch (EOFException e) {
// 读取失败,第一次创建,所以需要创建一个默认账户
this.user = new User();
user.setUserName(“admin”);
user.setPassword(“admin”);
//把内容中的用户信息写入本地
writeUserToLocal();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} 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();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//保存用户信息
public void writeUserToLocal() {
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream("D:\\电商管理\\password.txt");
oos = new ObjectOutputStream(fos);
// 把默认账户写入保存用户信息的文件中
oos.writeObject(user);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
if (oos != null) {
try {
oos.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
当我们写出这个过后就是登陆的判断了,这个比较简单,代码就不单独给出了,我们写完这个过后,顺利成章的把修改密码写出来了,修改密码无非是用户先输入原先密码,判定成功后再输入两次新密码。都判定成功则保存到本地,密码不正确就返回菜单。我们菜单功能也非常简单,就是给用户选择功能的一个方法。写完登陆和修改密码,后面就是我们的商品的添加,其中这一点也非常简单,主要是和修改密码登陆一样的保存文件到本地过后就基本完成这个功能。我们肯定对商品信息要有读写。所以和上面一样,我们有一个序列化和反序列化的过程。
//读取商品信息
public void readGoodss() {
File file = new File("D:\\电商管理\\商品信息.txt");
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream(file);
ois = new ObjectInputStream(fis);
// 读取用户信息
Object obj = ois.readObject();
// 读取成功
if (obj instanceof ArrayList) {
this.goodss = (ArrayList) obj;
}
} catch (EOFException e) {
// 读取失败,第一次创建,所以需要创建一个默认账户
this.goodss = new ArrayList();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} 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();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//将商品信息写到文件
public void writeGoodssToLocal() {
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream("D:\\电商管理\\商品信息.txt");
oos = new ObjectOutputStream(fos);
oos.writeObject(goodss);
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();
}
}
if (fos!=null) {
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
其中需要注意的就是我们的异常处理,以及对io流和file类的熟悉程度要高。
后面的功能基本都是运用到这个读写商品信息的这个方法,而且后面功能十分简单,就不一一解释,下面就给出商品系统这个类的代码,我们这个系统只创建了三个类和一个测试类。本人是一个学习java不到一个月的在校萌新,系统可能有很多不足之处,欢迎各位大牛指正。
package com;
import java.io.EOFException;
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.io.Serializable;
import java.util.ArrayList;
import java.util.Scanner;
public class GoodsSystem{
private Scanner scanner;
private User user;
private ArrayList goodss;
private int stratId;
public GoodsSystem() {
getSystemUser();
readGoodss();
this.scanner = new Scanner(System.in);
}
// 登陆
public void login() {
String userName;
String passWord;
System.out.print("欢迎使用sk商品管理系统,请输入用户名:");
userName = scanner.nextLine();
System.out.print("请输入密码:");
passWord = scanner.nextLine();
if (user.getUserName().equals(userName) && user.getPassword().equals(passWord)) {
Menu();
} else {
System.out.println("用户名或密码错误!请重新输入");
login();
}
}
// 登陆过后显示菜单
private void Menu() {
System.out.println("欢迎来到主菜单!");
System.out.println("*********************************");
System.out.println("1、创建商品");
System.out.println("2、显示所有商品信息");
System.out.println("3、查询商品信息");
System.out.println("4、删除商品信息");
System.out.println("5、修改商品价格");
System.out.println("6、修改商品库存");
System.out.println("7、根据商品类别显示类别所有商品");
System.out.println("8、搜索指定价格区间的商品");
System.out.println("9、修改管理员密码");
System.out.println("0、退出");
System.out.println("请输入您要执行的操作选项:");
int result = scanner.nextInt();
scanner.nextLine();
switch (result) {
case 1:
addGoods();
Menu();
break;
case 2:
showAllGoods();
Menu();
break;
case 3:
found();
Menu();
break;
case 4:
delete();
Menu();
break;
case 5:
amendPrice();
Menu();
break;
case 6:
amendInventory();
Menu();
break;
case 7:
classesShow();
Menu();
break;
case 8:
foundPriceInventory();
Menu();
break;
case 9:
rePassWord();
Menu();
break;
case 0:
break;
default:
System.out.println("输入的编号有误,请重新输入!");
Menu();
break;
}
}
//修改密码
public void rePassWord() {
String oldPwd;
String newPwd;
String newPwd1;
System.out.print("请输入原密码:");
oldPwd = scanner.nextLine();
if (!this.user.getPassword().equals(oldPwd)) {
System.out.println("原密码不正确!");
return;
}
System.out.println("请输入新密码:");
newPwd = scanner.nextLine();
System.out.println("请再次输入新密码:");
newPwd1 = scanner.nextLine();
if (newPwd.equals(newPwd1)) {
this.user.setPassword(newPwd);
writeUserToLocal();
System.out.println("修改成功!");
}else {
System.out.println("两次输入密码不一致,修改失败!");
return;
}
}
//得到账户信息
public void getSystemUser() {
File file = new File("D:\\电商管理\\password.txt");
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream(file);
ois = new ObjectInputStream(fis);
Object obj = ois.readObject();
if (obj instanceof User) {
this.user = (User) obj;
}
}catch (EOFException e) {
// 读取失败,第一次创建,所以需要创建一个默认账户
this.user = new User();
user.setUserName("admin");
user.setPassword("admin");
//把内容中的用户信息写入本地
writeUserToLocal();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} 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();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//保存用户信息
public void writeUserToLocal() {
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream("D:\\电商管理\\password.txt");
oos = new ObjectOutputStream(fos);
// 把默认账户写入保存用户信息的文件中
oos.writeObject(user);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
if (oos != null) {
try {
oos.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
//创建商品
public void addGoods() {
Goods goods = new Goods();
System.out.println("请输入商品ID");
int id = 0;
id=scanner.nextInt();
scanner.nextLine();
for (Goods good1 : goodss) {
if (good1.getId()==id) {
System.out.println("id重复,请重新输入");
Menu();
return;
}
}
goods.setId(id);
System.out.println("请输入商品名称:");
goods.setName(scanner.nextLine());
System.out.println("请输入商品分类:");
goods.setTypeName(scanner.nextLine());
System.out.println("请输入商品价格:");
goods.setPrice(scanner.nextDouble());
scanner.nextLine();
System.out.println("请输入商品库存:");
goods.setCount(scanner.nextInt());
scanner.nextLine();
System.out.println("请输入商品产地:");
goods.setPlaceOrigin(scanner.nextLine());
System.out.println("请输入商品计量单位:");
goods.setUnits(scanner.nextLine());
goodss.add(goods);
writeGoodssToLocal();
System.out.println("添加成功!");
}
//读取商品信息
public void readGoodss() {
File file = new File("D:\\电商管理\\商品信息.txt");
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream(file);
ois = new ObjectInputStream(fis);
// 读取用户信息
Object obj = ois.readObject();
// 读取成功
if (obj instanceof ArrayList) {
this.goodss = (ArrayList) obj;
}
} catch (EOFException e) {
// 读取失败,第一次创建,所以需要创建一个默认账户
this.goodss = new ArrayList();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} 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();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//将商品信息写到文件
public void writeGoodssToLocal() {
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream("D:\\电商管理\\商品信息.txt");
oos = new ObjectOutputStream(fos);
oos.writeObject(goodss);
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();
}
}
if (fos!=null) {
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//显示商品
public void showAllGoods() {
if(goodss.size() == 0) {
System.out.println("没有任何商品!");
return;
}
for (Goods goods : goodss) {
System.out.println(goods);
}
}
//删除功能
public void delete() {
System.out.println("请输入您要删除的商品的id:");
int id = scanner.nextInt();
for (Goods goods : goodss) {
if (goods.getId()==id) {
goodss.remove(goods);
writeGoodssToLocal();
System.out.println("删除成功");
return;
}
}
System.out.println("id输入有误,操作失败!");
}
//查询功能
public void found() {
System.out.println("请输入您要查询的商品的id");
int id = scanner.nextInt();
for (Goods goods : goodss) {
if (goods.getId()==id) {
System.out.println(goods);
return;
}
}
System.out.println("没有您要查询的此商品id!");
}
//修改商品价格
public void amendPrice(){
System.out.println("请输入您要查询的商品的id");
int id = scanner.nextInt();
for (Goods goods : goodss) {
if (goods.getId()==id) {
System.out.println("请输入您要修改的价格:");
int newPrice = scanner.nextInt();
scanner.nextLine();
goods.setPrice(newPrice);
writeGoodssToLocal();
System.out.println("修改成功!");
return;
}
}
System.out.println("您输入的商品id错误,没有此商品!");
}
//修改商品库存
public void amendInventory() {
System.out.println("请输入您要查询的商品的id");
int id = scanner.nextInt();
for (Goods goods : goodss) {
if (goods.getId()==id) {
System.out.println("请输入您要修改的库存量:");
int newInventory = scanner.nextInt();
scanner.nextLine();
goods.setCount(newInventory);
writeGoodssToLocal();
System.out.println("修改成功!");
return;
}
}
System.out.println("您输入的商品id错误,没有此商品!");
}
//显示类别所有商品
public void classesShow() {
int i = 0;
System.out.println("请输入您要显示商品的类别名");
String classes = scanner.nextLine();
for (Goods goods : goodss) {
if (goods.getTypeName().equals(classes)) {
System.out.println(goods);
i++;
}
}
System.out.println("展示完毕,该类别一共有"+i+"种商品");
}
//搜索指定价格区间的商品
public void foundPriceInventory() {
int i=0;
System.out.println("请输入您要搜索的价格区间的最小值");
int start = scanner.nextInt();
scanner.nextLine();
System.out.println("请输入您要搜索的价格区间的最大值");
int last = scanner.nextInt();
for (Goods goods : goodss) {
if (goods.getPrice()<=last && goods.getPrice()>=start) {
System.out.println(goods);
i++;
}
}
System.out.println("展示完毕,该区间一共有"+i+"种商品");
}
}