基于JavaSE的淘宝卖鞋后端管理系统的设计与实现

2023-11-09 14:10

本文主要是介绍基于JavaSE的淘宝卖鞋后端管理系统的设计与实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、创建数据库
  • 二、创建JavaSE项目
    • 新建实体类
    • 新建Dao类
    • 新建View类
  • 三、模拟页面功能


一、创建数据库

数据库就像盖房子用的地基,所以数据库一定要建好

查看创建数据库及建表语句请点我

DROP TABLE IF EXISTS admin;CREATE TABLE admin -- 管理员表
(id int PRIMARY KEY auto_increment,  -- 管理员IDname VARCHAR(20) NOT NULL UNIQUE,   -- 管理员姓名password VARCHAR(20)	NOT NULL    -- 管理员密码
);DROP TABLE IF EXISTS shop;CREATE TABLE shop -- 商家表
(shopId INT PRIMARY KEY auto_increment,  -- 商家IDshopName    VARCHAR(40) NOT NULL,       -- 商家名shopAddress VARCHAR(50),   -- 商家地址shopExplain VARCHAR(40),   -- 商品鞋子介绍salePrice     DECIMAL(7,2) DEFAULT 0.00,     -- 所售价格deliveryPrice DECIMAL(7,2) DEFAULT 0.00		 -- 快递费
);DROP TABLE IF EXISTS goods;CREATE TABLE goods -- 商品鞋子表
(goodsId INT PRIMARY KEY auto_increment,  -- 鞋子IDgoodsName    VARCHAR(30) NOT NULL,   -- 鞋子名称goodsExplain VARCHAR(30),            -- 鞋子介绍goodsPrice DECIMAL(7,2) NOT NULL,    -- 鞋子价格shopId INT NOT NULL, 	-- 所属商家编号FOREIGN KEY(shopId) REFERENCES shop(shopId)   -- 外键      
);

数据初始化,添加数据,给数据一个初值

-- 管理员数据初始化
INSERT INTO admin (name,PASSWORD)
VALUES('张三','123456'),('admin','123456');  -- 商家数据初始化
INSERT INTO shop(shopName,shopAddress,shopExplain)
VALUES('鞋子专卖店','津海市邮局对过','二哈鞋店');-- 商品鞋子数据初始化
INSERT INTO goods(goodsName,goodsExplain,goodsPrice,shopId)
VALUES('篮球鞋','一对一定制',2500.00,1),('运动鞋','飞一般的感觉',2300.00,1),('雪地靴','鞋子就是最好的代言人',2000.00,1);

二、创建JavaSE项目

打开Java编程工具创建新项目,然后右键创建Model包、Dao包、View包和 util包(用到了JDBC连接,其中代码可以去其专栏查看),所以需要新建lib文件夹存放jar包并将jar包添加至构建路径。

此时应该看到项目的结构:
在这里插入图片描述
项目中各类之间的关系说明


新建实体类

这里实体类取名model

有几个表就新建几个实体类,右键Model包新建类,类名与表名一致,需要大写

实体类是简单的 java对象,用于封装数据
实体类类和数据库中的表对应

下面的四个方法要先写私有属性,其他的没有具体的先后顺序,都是系统自动生成,可以点击此链接查看实体类中快速生成各个方法

①、新建管理员类Admin

建类没有顺序,只要全建完即可,我这里是先新建的Admin类

  1. 先写私有属性,与表中列对应
	private Integer id; //写包装类private String name;private String password;
  1. 两个构造方法(有参、无参)
	public Admin(Integer id, String name, String password) {super();this.id = id;this.name = name;this.password = password;}public Admin() {super();}
  1. getter/setter方法
	public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
  1. 重写toString

下面代码是系统自动生成的,我们给它改成中文格式方便后续查看数据

	@Overridepublic String toString() {return "Admin [id=" + id + ", name=" + name + ", password=" + password + "]";}

开始的类名删掉,中括号删掉,冒号代替等号,Tab键【\t】代替逗号,字符串中的英文改对应的意思,最后的中括号也删掉

更改格式后:

	@Overridepublic String toString() {return "管理员id:" + id + "\t 管理员名字:" + name + "\t 管理员密码:" + password ;}

②、新建商家类Shop

public class Shop {private Integer shopId;private String shopName;private String shopAddress;private String shopExplain;private Double salePrice;private Double deliveryPrice;public Shop(Integer shopId, String shopName, String shopAddress, String shopExplain, Double salePrice,Double deliveryPrice) {super();this.shopId = shopId;this.shopName = shopName;this.shopAddress = shopAddress;this.shopExplain = shopExplain;this.salePrice = salePrice;this.deliveryPrice = deliveryPrice;}public Shop() {super();// TODO 自动生成的构造函数存根}public Integer getShopId() {return shopId;}public void setShopId(Integer shopId) {this.shopId = shopId;}public String getShopName() {return shopName;}public void setShopName(String shopName) {this.shopName = shopName;}public String getShopAddress() {return shopAddress;}public void setShopAddress(String shopAddress) {this.shopAddress = shopAddress;}public String getShopExplain() {return shopExplain;}public void setShopExplain(String shopExplain) {this.shopExplain = shopExplain;}public Double getSalePrice() {return salePrice;}public void setSalePrice(Double salePrice) {this.salePrice = salePrice;}public Double getDeliveryPrice() {return deliveryPrice;}public void setDeliveryPrice(Double deliveryPrice) {this.deliveryPrice = deliveryPrice;}@Overridepublic String toString() {return "商家编号:" + shopId + "\t 商家名称:" + shopName + "\t 商家地址:" + shopAddress + "\t 商家介绍:"+ shopExplain + "\t 所售价格:" + salePrice + "\t 快递费:" + deliveryPrice ;}}

③、新建商品鞋子类Goods

public class Goods {private Integer goodsId;private String goodsName;private String goodsExplain;private double goodsPrice;private Integer shopId;public Goods(Integer goodsId, String goodsName, String goodsExplain, double goodsPrice, Integer shopId) {super();this.goodsId = goodsId;this.goodsName = goodsName;this.goodsExplain = goodsExplain;this.goodsPrice = goodsPrice;this.shopId = shopId;}public Goods() {super();// TODO 自动生成的构造函数存根}public Integer getGoodsId() {return goodsId;}public void setGoodsId(Integer goodsId) {this.goodsId = goodsId;}public String getGoodsName() {return goodsName;}public void setGoodsName(String goodsName) {this.goodsName = goodsName;}public String getGoodsExplain() {return goodsExplain;}public void setGoodsExplain(String goodsExplain) {this.goodsExplain = goodsExplain;}public double getGoodsPrice() {return goodsPrice;}public void setGoodsPrice(double goodsPrice) {this.goodsPrice = goodsPrice;}public Integer getShopId() {return shopId;}public void setShopId(Integer shopId) {this.shopId = shopId;}@Overridepublic String toString() {return "鞋子编号:" + goodsId + "\t 鞋子名称:" + goodsName + "\t 鞋子介绍:" + goodsExplain+ "\t 鞋子价格:" + goodsPrice + "\t 所属鞋子编号:" + shopId ;}}

新建Dao类

写完model层后写它的调用者dao
一个表对应一个dao类,一个dao类负责一个表的基本的增删改查操作

右键dao包新建dao类,采用驼峰式命名:表名+Dao

同样这里建类也没有顺序,只要全建完即可,我这里是先新建的AdminDao类

AdminDao类只考虑对admin管理员操作,这个项目中只考虑查询,用查询模拟登录

①、新建管理员dao类AdminDao

  1. 定义方法三要素
public boolean login (Admin admin) {   //对应的model类封装//登录就是个查询,结果只有成功或失败,查询用户名和密码是否正确boolean result = false;  //定义返回值,初始值false
}		
  1. 定义JDBC所需变量
	Connection connection = null;  //连接语句PreparedStatement preparedStatement = null;  //预编译语句ResultSet resultSet = null;  //查询语句//1、通过工具类拿到连接connection = JdbcUtil.createConnection();try {//2、创建语句                                      //3、写SQL查询语句,预编译语句中数据全换成?preparedStatement = connection.prepareStatement("select * from admin where name = ? and password = ?");  //try...catch处理异常//4、给?赋值  从1开始,从左到右        varchar类型preparedStatement.setString(1, admin.getName());  //取出用getpreparedStatement.setString(2, admin.getPassword());//5、把结果赋值给结果集           执行resultSet=preparedStatement.executeQuery();//不关注查到的数据,关注的是查没查到//6、if语句判断查没查到resultSet.next()if(resultSet.next()) {result = true;  //查到返回true} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();} finally {       //7、最终块关闭结果集、预编译语句、连接JdbcUtil.close(resultSet, preparedStatement, connection);}
  1. 把结果返回
return result;

下面是AdminDao类完整代码:

public class AdminDao {//dao类一般不需要定义属性//dao类一般只定义封装增删改查的数据的方法public boolean login (Admin admin) {//登录就是个查询,结果只有成功或失败,查询用户名和密码是否正确boolean result = false;Connection connection = null;  //连接语句PreparedStatement preparedStatement = null;  //预编译语句ResultSet resultSet = null;  //查询语句//通过工具类拿到连接connection = JdbcUtil.createConnection();try {//创建语句preparedStatement = connection.prepareStatement("select * from admin where name = ? and password = ?");//给?赋值                                 varchar类型preparedStatement.setString(1, admin.getName());preparedStatement.setString(2, admin.getPassword());//把结果赋值给结果集            执行resultSet=preparedStatement.executeQuery();//不关注查到的数据,关注的是查没查到if(resultSet.next()) {result = true;}} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}finally {JdbcUtil.close(resultSet, preparedStatement, connection);}return result;}
}

最后:AdminDao类单元测试

就是看看刚才的代码是否有误

右键项目名新建【源文件夹】,命名test,然后右键test建包建类TestAdminDao

public class TestAdminDao {public static void main(String[] args) {//定义类时如果没定义构造方法,默认提供一个无参空的方法AdminDao dao = new AdminDao();  //测试login()方法,login()方法调用需要传一个Admin admin类型参数调用【AdminDao类第一行】Admin admin = new Admin();//用set方法放数据库中存在的用户名、密码admin.setName("admin");admin.setPassword("123456");//调用login()方法测试,admin是前三行代码中封装好的对象System.out.println(dao.login(admin));}
}  //返回true即为测试成功

②、新建商品鞋子dao类GoodsDao

商品鞋子类要有增删改查

public class GoodsDao {//增加public boolean addGoods(Goods goods) {boolean result = false;Connection connection = null;PreparedStatement preparedStatement = null;connection = JdbcUtil.createConnection();try {preparedStatement = connection.prepareStatement("insert into goods(goodsName,goodsExplain,goodsPrice,shopId) value (?,?,?,?)");preparedStatement.setString(1, goods.getGoodsName());preparedStatement.setString(2, goods.getGoodsExplain());preparedStatement.setDouble(3, goods.getGoodsPrice());preparedStatement.setInt(4, goods.getShopId());int rows = preparedStatement.executeUpdate();result = rows>0?true:false;  //三元运算符} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}finally {JdbcUtil.close(preparedStatement, connection);}return result;}//删除  根据商品鞋子ID删除public boolean deleteGoods(int id) {boolean result = false;Connection connection = null;PreparedStatement preparedStatement = null;connection = JdbcUtil.createConnection();try {preparedStatement = connection.prepareStatement("delete from goods where goodsId=?");preparedStatement.setInt(1, id);int rows = preparedStatement.executeUpdate();if (rows>0) {//result=true;return true;}} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();} finally {JdbcUtil.close(preparedStatement, connection);}return result;}//修改   根据商家ID修改public boolean updateGoods(Goods goods) {boolean result =false;Connection connection = null;PreparedStatement preparedStatement = null;connection = JdbcUtil.createConnection();try {//鞋子的商家不能随便换preparedStatement = connection.prepareStatement("update goods set goodsName=?,goodsExplain=?,goodsPrice=? where goodsId=?");preparedStatement.setString(1, goods.getGoodsName());preparedStatement.setString(2, goods.getGoodsExplain());preparedStatement.setDouble(3, goods.getGoodsPrice());preparedStatement.setInt(4, goods.getGoodsId());int rows = preparedStatement.executeUpdate();if (rows>0){result = true;}} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();} finally {JdbcUtil.close(preparedStatement, connection);}return result;}}

增删改结构都差不多,代码步骤基本一致,下面是查询用到了集合,麻烦些
这里要把查询到的数据返回到view,用户

//查找       按照鞋子名字进行模糊查询
//集合类在使用时要使用泛型是model类型
//ArrayList适合查询遍历操作,查到一个显示一个public ArrayList<Goods> queryGoods(String goodsName){//创建集合ArrayList<Goods> list = new ArrayList<>();  Connection connection = null;PreparedStatement preparedStatement = null;ResultSet resultSet = null;connection = JdbcUtil.createConnection();try {preparedStatement = connection.prepareStatement("select * from goods where goodsName like ?");preparedStatement.setString(1, "%"+goodsName+"%");resultSet = preparedStatement.executeQuery();while (resultSet.next()) {//查出数据→进行封装Goods goods = new Goods();//调用set方法封装——封装的是取出(get)查询到的真的goods数据goods.setGoodsId(resultSet.getInt("goodsId"));goods.setGoodsName(resultSet.getString("goodsName"));goods.setGoodsExplain(resultSet.getString("goodsExplain"));goods.setGoodsPrice(resultSet.getDouble("goodsPrice"));goods.setShopId(resultSet.getInt("shopId"));//再把它放到集合里list.add(goods);}} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}finally {JdbcUtil.close(resultSet, preparedStatement, connection);}return list;   //返回集合}

最后:GoodsDao类单元测试

单元测试在一个类中进行即可,这里取名是TestGoodsDao

添加测试

	public static void main(String[] args) {//创建Dao类对象GoodsDao dao = new GoodsDao();//创建model实体类对象Goods goods = new Goods();//把测试的数据封装到对象里goods.setGoodsName("足球鞋");goods.setGoodsExplain("尽享极致体验");goods.setGoodsPrice(2800);goods.setShopId(1);  //ID必须是存在的//调用方法测试并输出System.out.println(dao.addGoods(goods));  }

返回true,刷新数据库显示多了行数据
在这里插入图片描述
修改数据

修改数据中不修改商家ID

	public static void main(String[] args) {GoodsDao dao = new GoodsDao();Goods goods = new Goods();goods.setGoodsName("职业足球鞋");goods.setGoodsExplain("一代人的青春,尽心去跑");goods.setGoodsPrice(5000);//这里修改的是新添加的4号数据goods.setGoodsId(4);System.out.println(dao.updateGoods(goods));}

运行后输出true,刷新数据库显示改了4号数据
在这里插入图片描述
查询数据

	public static void main(String[] args) {GoodsDao dao = new GoodsDao();ArrayList<Goods> list = dao.queryGoods("");  //查询所有for(Goods goods2:list) {   //foreach遍历循环 输出System.out.println(goods2);}}

输出结果:
在这里插入图片描述

删除数据

	public static void main(String[] args) {GoodsDao dao = new GoodsDao();//删完后再删除显示falseSystem.out.println(dao.deleteGoods(4));  //删除4号数据}

输出结果:
在这里插入图片描述
②、新建商家dao类ShopDao

public class ShopDao {public boolean addShop(Shop shop) {boolean result = false;Connection connection = null;PreparedStatement preparedStatement = null;connection = JdbcUtil.createConnection();   try {												preparedStatement = connection.prepareStatement("insert into shop(shopName,shopAddress,shopExplain,salePrice,deliveryPrice) "+ "values(?,?,?,?,?)");preparedStatement.setString(1, shop.getShopName());preparedStatement.setString(2, shop.getShopAddress());preparedStatement.setString(3, shop.getShopExplain());preparedStatement.setDouble(4, shop.getSalePrice());preparedStatement.setDouble(5, shop.getDeliveryPrice());int rows = preparedStatement.executeUpdate();if (rows > 0 ) {result=true;}} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}finally {JdbcUtil.close(preparedStatement, connection);}return result;}public boolean deleteShop(int id) {boolean result = false;Connection connection=null;PreparedStatement preparedStatement = null;connection = JdbcUtil.createConnection();try {preparedStatement = connection.prepareStatement("delete from shop where shopId = ?");preparedStatement.setInt(1, id);int rows = preparedStatement.executeUpdate();result = rows>0?true:false;} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}finally {JdbcUtil.close(preparedStatement, connection);}return result;}public boolean updateShop(Shop shop) {boolean result = false;Connection connection = null;PreparedStatement preparedStatement = null;connection = JdbcUtil.createConnection();try {preparedStatement = connection.prepareStatement("update shop set shopName=?, shopAddress=?,shopExplain=?,salePrice=?,deliveryPrice=? where shopId=?");//如果表的列比较多的时候,赋值时序号就比较多,如果想之前的写法那数字部分容易写混//单独定义一个整数变量在前面  index下标索引的意思 int index=1;preparedStatement.setString(index++, shop.getShopName());preparedStatement.setString(index++, shop.getShopAddress());preparedStatement.setString(index++, shop.getShopExplain());preparedStatement.setDouble(index++, shop.getSalePrice());preparedStatement.setDouble(index++, shop.getDeliveryPrice());preparedStatement.setInt(index++, shop.getShopId());int rows = preparedStatement.executeUpdate();result = rows>0?true:false;} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}finally {JdbcUtil.close(preparedStatement, connection);}return result;}//查询public ArrayList<Shop> queryShop (String name){ArrayList<Shop> list = new ArrayList<>();Connection connection = null;PreparedStatement preparedStatement = null;ResultSet resultSet = null;connection=JdbcUtil.createConnection();try {preparedStatement = connection.prepareStatement("select * from shop where shopName like ?");preparedStatement.setString(1, "%"+name+"%");resultSet = preparedStatement.executeQuery();while (resultSet.next()) {		Shop shop = new Shop();shop.setShopId(resultSet.getInt("shopId"));shop.setShopName(resultSet.getString("shopName"));shop.setShopAddress(resultSet.getString("shopAddress"));shop.setShopExplain(resultSet.getString("shopExplain"));shop.setSalePrice(resultSet.getDouble("salePrice"));shop.setDeliveryPrice(resultSet.getDouble("deliveryPrice"));list.add(shop);}		} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}finally {JdbcUtil.close(resultSet, preparedStatement, connection);}return list;}}

最后:ShopDao类单元测试

单元测试在一个类中进行即可,这里取名是TestShopDao

添加测试

	public static void main(String[] args) {ShopDao dao = new ShopDao();Shop shop = new Shop();shop.setShopName("球星签名足球鞋");shop.setShopAddress("粤江市津海区");shop.setShopExplain("当红球星签名,收藏意义重大");shop.setSalePrice(8888.0);shop.setDeliveryPrice(198.0);//增加System.out.println(dao.addShop(shop));}

返回true,刷新数据库显示多了行数据
在这里插入图片描述
修改测试

	public static void main(String[] args) {ShopDao dao = new ShopDao();Shop shop = new Shop();shop.setShopName("签名鞋专卖");shop.setShopAddress("粤江市津海西区");shop.setShopExplain("收藏意义重大");shop.setSalePrice(8888.0);shop.setDeliveryPrice(198.0);//修改shop.setShopId(2);System.out.println(dao.updateShop(shop));}

返回true,刷新数据库显示改了第二条数据
在这里插入图片描述

查询测试

	public static void main(String[] args) {ShopDao dao = new ShopDao();//查询ArrayList<Shop> list = dao.queryShop("");for (Shop shop2 : list) {System.out.println(shop2);}}

输出结果:
在这里插入图片描述

删除测试

	public static void main(String[] args) {ShopDao dao = new ShopDao();		//删除   删完后显示falseSystem.out.println(dao.deleteShop(2));}

输出结果:
在这里插入图片描述

新建View类

视图类的方法和作用:
1、显示信息 输出语句
2、获得用户输入

暂时用输出语句显示内容,用scanner获得输入

①、新建商品鞋子视图GoodsView

public class GoodsView {private GoodsDao dao=new GoodsDao();//方便Dao类使用//视图类的方法和作用://1.显示信息  输出语句//2.获得用户输入public void showAddGoods() {System.out.println("增加鞋子信息");Scanner scanner = new Scanner(System.in);String name,explain;double price;int shopId;System.out.println("请输入鞋子名称");name = scanner.next();System.out.println("请输入鞋子介绍");explain = scanner.next();System.out.println("请输入鞋子价格");price = scanner.nextDouble();System.out.println("请输入鞋子所属商家ID");shopId = scanner.nextInt();//将输入的数据封装到po对象中Goods goods = new Goods();goods.setGoodsName(name);goods.setGoodsExplain(explain);goods.setGoodsPrice(price);goods.setShopId(shopId);//调用Dao类方法,完成数据操作boolean result = dao.addGoods(goods);//将最终的处理结果显示给用户if (result) {System.out.println("增加鞋子信息成功");} else {System.out.println("增加鞋子信息失败");}}public void showDeleteGoods () {System.out.println("删除鞋子信息");Scanner scanner = new Scanner(System.in);int id;System.out.println("请输入要删除的鞋子ID");id = scanner.nextInt();boolean result = dao.deleteGoods(id);if (result) {System.out.println("删除鞋子信息成功");} else {System.out.println("删除鞋子信息失败");}}public void showUpdateGoods() {System.out.println("修改鞋子信息");Scanner scanner = new Scanner(System.in);String name,explian;double price;int id;System.out.println("请输入要修改的鞋子ID");id = scanner.nextInt();System.out.println("请输入修改后的鞋子名称");name = scanner.next();System.out.println("请输入要修改的鞋子信息说明");explian = scanner.next();System.out.println("请输入要修改的鞋子价格");price = scanner.nextDouble();Goods foods = new Goods();foods.setGoodsId(id);foods.setGoodsName(name);foods.setGoodsExplain(explian);foods.setGoodsPrice(price);boolean result = dao.updateGoods(foods);if (result) {System.out.println("修改鞋子信息成功");} else {System.out.println("修改鞋子信息失败");}}public void showQueryGoods() {System.out.println("查询鞋子信息");Scanner scanner = new Scanner(System.in);String name;System.out.println("请输入查询的鞋子名字(支持模糊查询)");//name = scanner.next();  //next()方法输入的数据不允许空和空格name = scanner.nextLine();ArrayList<Goods> list = dao.queryGoods(name);if (list.size()>0) {System.out.println("查询到的鞋子信息如下");for (Goods foods : list) {System.out.println(foods);}} else {System.out.println("未查到满足条件的数据");}}}

最后:对GoodsView类进行单元测试

单元测试在还是在test包中进行即可,这里取名是TestGoodsView

添加商品鞋子视图测试

public static void main(String[] args) {GoodsView view = new GoodsView();//增加view.showAddGoods();
}

输出结果并刷新数据库:
在这里插入图片描述
修改商品鞋子视图测试

public static void main(String[] args) {GoodsView view = new GoodsView();//修改view.showUpdateGoods();
}

输出结果并刷新数据库:
在这里插入图片描述
查询商品鞋子视图测试

public static void main(String[] args) {GoodsView view = new GoodsView();//查询view.showQueryGoods();
}

输出结果:
在这里插入图片描述
删除商品鞋子视图测试

public static void main(String[] args) {GoodsView view = new GoodsView();//删除view.showDeleteGoods();
}

输出结果并刷新数据库:
在这里插入图片描述

②、新建商家视图GoodsView

public class ShopView {
private ShopDao dao = new ShopDao();public void showAddShop() {System.out.println("添加商家信息");Scanner scanner = new Scanner(System.in);String name,address,explain;double sprice,dprice;System.out.println("请输入商家名称");name=scanner.next();System.out.println("请输入商家地址");address=scanner.next();System.out.println("请输入商家介绍");explain=scanner.next();System.out.println("请输入商家所售价格");sprice=scanner.nextDouble();System.out.println("请输入商家快递费");dprice=scanner.nextDouble();Shop shop = new Shop();shop.setShopName(name);shop.setShopAddress(address);shop.setShopExplain(explain);shop.setSalePrice(sprice);shop.setDeliveryPrice(dprice);boolean result = dao.addShop(shop);if (result) {System.out.println("添加商家信息成功");} else {System.out.println("添加商家信息失败");}}public void showDeleteShop () {System.out.println("删除商家信息");Scanner scanner = new Scanner(System.in);int id;System.out.println("请输入要删除的商家ID");id = scanner.nextInt();boolean result = dao.deleteShop(id);if (result) {System.out.println("删除商家信息成功");} else {System.out.println("删除商家信息失败");}}public void showUpdateShop() {System.out.println("修改商家信息");Scanner scanner = new Scanner(System.in);String name,address,explain;double sprice,dprice;int id;System.out.println("请输入要修改的商家ID");id = scanner.nextInt();System.out.println("请输入修改后的商家名字");name=scanner.next();System.out.println("请输入修改后的商家地址");address=scanner.next();System.out.println("请输入修改后的商家介绍");explain=scanner.next();System.out.println("请输入修改后的商家所售价格");sprice=scanner.nextDouble();System.out.println("请输入修改后的商家快递费");dprice=scanner.nextDouble();Shop shop = new Shop();shop.setShopId(id);shop.setShopName(name);shop.setShopAddress(address);shop.setShopExplain(explain);shop.setSalePrice(sprice);shop.setDeliveryPrice(dprice);boolean result = dao.updateShop(shop);if (result) {System.out.println("修改商家信息成功");} else {System.out.println("修改商家信息失败");}}public void showQueryShop() {System.out.println("查询商品鞋子信息");Scanner scanner = new Scanner(System.in);String name;System.out.println("请输入查询的名字(支持模糊查询)");name = scanner.nextLine();ArrayList<Shop> list = dao.queryShop(name);if (list.size()>0) {System.out.println("查询到的商品鞋子信息如下");for (Shop shop : list) {System.out.println(shop);}} else {System.out.println("未查到满足条件的数据");}}}

最后:对ShopView类进行单元测试

单元测试在还是在test包中进行即可,这里取名是TestShopView

添加商家视图测试

public static void main(String[] args) {ShopView view = new ShopView();//增加view.showAddShop();
}

输出结果并刷新数据库:
在这里插入图片描述

修改商家视图测试

public static void main(String[] args) {ShopView view = new ShopView();		//修改view.showUpdateShop();
}

输出结果并刷新数据库:
在这里插入图片描述

查询商家视图测试

public static void main(String[] args) {ShopView view = new ShopView();	//查询view.showQueryShop();
}

输出结果:
在这里插入图片描述
删除商家视图测试

public static void main(String[] args) {ShopView view = new ShopView();	//删除view.showDeleteShop();
}

输出结果并刷新数据库:
在这里插入图片描述
但是这里注意:
商家编号为1的那条数据不能被删除

解释:

因为那个商品表里的各个商品鞋子都有个所属商家编号,他是外键链接,得先把所有的1号商家编号的商品鞋子删掉或改掉,才能再删那个商家编号为1的那条数据

外键约束:FOREIGN KEY

  1. 外键是别的表中的主键

  2. 依赖别人的表称为子表,在这个项目中是商品表依赖的商家表,所以商品表是子表

  3. 被别的表依赖的表称为父表,对比下商家表是父表

  4. 子表数据增加或修改时,数据必须在父表中存在

  5. 父表数据删除或修改时,数据没有被子表使用

所以当删除商家编号为1的那条数据时(shopId=1),商品表(goods表、子表)的外键中不能存在所属商家编号为1的数据
所以当shopId(所属商家编号、商品表外键)=1时,商家编号为1的那条数据不能被删除

三、模拟页面功能

在src内的taobao包下新建一个类,与dao、model、view类同级

大致思路:
首先定义一个主方法,输出欢迎信息并且接收用户输入的用户名和密码。
然后通过AdminDao类调用login方法来验证用户是否存在并且密码是否正确。
如果验证通过,则输出欢迎信息和管理系统的菜单选项,管理员可以根据自己的需要选择对应的菜单选项进行商品鞋子或者商家管理。
如果输入的菜单选项不合法,则提示输入有误,没有此功能菜单,并且让管理员重新选择。
如果验证失败,则提示用户名或密码错误。

public class TaoBaoEntry {public static void main(String[] args) {System.out.println("欢迎使用淘宝卖鞋后端管理系统");//接下来要输入用户名和密码Scanner scanner = new Scanner(System.in);String name,pwd;  //定义两个变量接受System.out.println("请输入用户名");name = scanner.next();  //将输入数据赋给nameSystem.out.println("请输入密码");pwd = scanner.next();//通过AdminDao类调用login方法来验证用户是否存在、密码是否正确AdminDao dao = new AdminDao();//创建admin对象,因为public boolean login(Admin admin) model类adminAdmin admin = new Admin();//调用两个set方法,把刚才输入的名字和密码封装到这对象里admin.setName(name);admin.setPassword(pwd);//调用方法拿到结果,用这个方法验证是否登录成功boolean result = dao.login(admin);//根据结果作出不同的选择进行if else判断if (result ) {//登录成功System.out.println("欢迎"+name+"使用淘宝卖鞋后端管理系统");} else {               //登录失败System.out.println("用户名或密码错误"); //防止恶意登录}					}}

这时候可以先测试下,输入已有的用户名和密码查看是否登录成功

接下来为系统提供一个菜单选择,提示功能操作,这里在登陆成功的地方写输出语句

    //1、写输出语句,提示选择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");//2、让用户获得操作int menu = scanner.nextInt();//3、创建对象视图GoodsView goodsView = new GoodsView();ShopView shopView = new ShopView();//4、做输入的判断switch (menu) {case 1:        //功能对应goodsView.showAddGoods();break;case 2:goodsView.showDeleteGoods();break;case 3:goodsView.showUpdateGoods();break;case 4:goodsView.showQueryGoods();break;case 5:shopView.showAddShop();break;case 6:shopView.showDeleteShop();break;case 7:shopView.showUpdateShop();break;case 8:shopView.showQueryShop();break;default:        //输入意外的提示System.out.println("输入有误,没有此功能菜单");}

但是到这项目还有个问题
在这里插入图片描述
就是项目执行完后自动退出,要想进行下一个功能的实现需要重新登录比较麻烦

那就把上面在登录成功内写的代码选中右键→包围方式→while循环
在这里插入图片描述
然后登录成功内的代码变成:

	while (true) {    //里面加true变成死循环可以一直运行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");int menu = scanner.nextInt();GoodsView goodsView = new GoodsView();ShopView shopView = new ShopView();switch (menu) {case 1:goodsView.showAddGoods();break;case 2:goodsView.showDeleteGoods();break;case 3:goodsView.showUpdateGoods();break;case 4:goodsView.showQueryGoods();break;case 5:shopView.showAddShop();break;case 6:shopView.showDeleteShop();break;case 7:shopView.showUpdateShop();break;case 8:shopView.showQueryShop();break;default:System.out.println("输入有误,没有此功能菜单");}}

现在运行程序后无论使用哪个功能程序都能继续运行下去,而且不会停止,陷入死循环

接下来手动停止该程序,加一个退出功能:

System.out.println("退出系统请输入9");
//在对应的位置加一个静态块
case 9:System.exit(0);  //0代表正常退出break;

运行输出:
在这里插入图片描述

至此整个淘宝卖鞋后端管理系统结束,系统已有功能运行完整

这篇关于基于JavaSE的淘宝卖鞋后端管理系统的设计与实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/376571

相关文章

Java Jackson核心注解使用详解

《JavaJackson核心注解使用详解》:本文主要介绍JavaJackson核心注解的使用,​​Jackson核心注解​​用于控制Java对象与JSON之间的序列化、反序列化行为,简化字段映射... 目录前言一、@jsonProperty-指定JSON字段名二、@JsonIgnore-忽略字段三、@Jso

使用Python和SQLAlchemy实现高效的邮件发送系统

《使用Python和SQLAlchemy实现高效的邮件发送系统》在现代Web应用中,邮件通知是不可或缺的功能之一,无论是订单确认、文件处理结果通知,还是系统告警,邮件都是最常用的通信方式之一,本文将详... 目录引言1. 需求分析2. 数据库设计2.1 User 表(存储用户信息)2.2 CustomerO

Spring Validation中9个数据校验工具使用指南

《SpringValidation中9个数据校验工具使用指南》SpringValidation作为Spring生态系统的重要组成部分,提供了一套强大而灵活的数据校验机制,本文给大家介绍了Spring... 目录1. Bean Validation基础注解常用注解示例在控制器中应用2. 自定义约束验证器定义自

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel

在React聊天应用中实现图片上传功能

《在React聊天应用中实现图片上传功能》在现代聊天应用中,除了文字和表情,图片分享也是一个重要的功能,本文将详细介绍如何在基于React的聊天应用中实现图片上传和预览功能,感兴趣的小伙伴跟着小编一起... 目录技术栈实现步骤1. 消息组件改造2. 图片预览组件3. 聊天输入组件改造功能特点使用说明注意事项

VSCode中配置node.js的实现示例

《VSCode中配置node.js的实现示例》本文主要介绍了VSCode中配置node.js的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一.node.js下载安装教程二.配置npm三.配置环境变量四.VSCode配置五.心得一.no

debian12安装docker的实现步骤

《debian12安装docker的实现步骤》本文主要介绍了debian12安装docker的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录步骤 1:更新你的系统步骤 2:安装依赖项步骤 3:添加 docker 的官方 GPG 密钥步骤

9个SpringBoot中的自带实用过滤器使用详解

《9个SpringBoot中的自带实用过滤器使用详解》在SpringBoot应用中,过滤器(Filter)是处理HTTP请求和响应的重要组件,SpringBoot自带了许多实用的过滤器,如字符编码,跨... 目录1. CharacterEncodingFilter - 字符编码过滤器功能和配置手动配置示例2

基于Redis实现附近商铺查询功能

《基于Redis实现附近商铺查询功能》:本文主要介绍基于Redis实现-附近商铺查询功能,这个功能将使用到Redis中的GEO这种数据结构来实现,需要的朋友可以参考下... 目录基于Redis实现-附近查询1.GEO相关命令2.使用GEO来实现以下功能3.使用Java实现简China编程单的附近商铺查询4.Red