电子商城数据库设计及开发

  • 一、数据库设计
  • 二、功能描述
  • 三、实现(版本1)
  • 3.1项目结构
  • 3.2file.properties
  • 3.3Util工具类
  • 3.4TaoBaoSystem淘宝后台数据处理系统


一、数据库设计

数据库名:taobaoDB

会员类型表UserTypeInfo [系统管理员-管理会员 店主-卖家 普通会员-买家]
类型编号 typeId int 主键 自动增长列
类型名 typeName varchar(20) 不能为空

会员信息表UserInfo
会员编号 userId int 主键 自动增长列列
会员名 userName varchar(20) 不能为空
密码 userPwd varchar(20)
类型编号 typeId int 外键(引用UserTypeInfo的typeId)
会员状态 userStatus varchar(20) 默认值为”正常”

店铺信息表ShopInfo
店铺编号 shopId int 主键 自动增长列列
店铺名 shopName varchar(50) 不能为空
店主编号 userId int 外键(引用UserInfo的userId)
店铺积分 userPoint int 默认值为0

商品类型表 proType
类型编号 typeId int 主键 自动增长列列
类型名 typeName varchar(50) 唯一约束 不能为空
类型说明 typeDesc varchar(50)

商品信息表 proInfo
商品编号 proId int 主键 自动增长列
商品名称 proName varchar(50) 不能为空
商品单价 proPrice float
商品数量 proCount int
商品状态 proStates varchar(50) 默认值为”上架”
所属店铺编号 shopId int 外键(引用shopInfo的shopId)
所属类型编号 typeId int 外键(引用proType的typeId)

订单信息表 orderInfo
订单编号 orderId int 主键 自动增长列
订购的商品编号 proId int 外键
订购的数量 orderCount int
订单日期 orderDate dateTime 默认为系统的当前时间
订单状态 orderStatus varchar(6) 值只能为"未处理" 和 “已发货”,默认为"未处理"
会员编号 userId int 外键

二、功能描述

具体功能如下:
程序运行循环出现以下菜单:1.登录 2.注册 3.退出
1.选择3时,退出

2.选择2时,提示用户输入用户名、密码以及选择会员类型(卖家或买家)进行注册,并提示注册成功或失败

3.选择1时,提示用户输入用户名和密码进行登录,如果登录失败,提示用户名或密码错误,如果登录成功,则根据会员的类型提示不同的菜单:

3.1 如果是普通会员,则循环提示菜单:1.修改会员密码 2.浏览所有商品信息 3.购买商品 4.浏览自己的订单信息 5.退出
3.1.1 如果选择1时,提示用户输入旧密码、新密码、确认密码,如果旧密码正确,新密码和确认密码一样,则进行修改密码,并提示修改结果
3.2.2 如果选择2时,则显示所有的商品信息,需要显示店铺的名称、类型名称
3.2.3 如果选择3时,则提示用户输入要购买的商品编号,以及购买的数量,如果该商品的状态为”已下架”,则提示用户”该商品已下架,不能购买!”;如果商品的库存不够则提示对应错误信息;如果商品的库存够则可以进行购买,购买需要添加一条订单信息并且修改对应的商品的数量,订单的状态为"未处理"
3.2.4 如果选择4时,则查看当前登录用户所有订单信息,要求显示订购商品名称
3.2.5 如果选择5时,则返回一级菜单

3.2如果是店主登录成功,则循环提示菜单:1.浏览所有订单信息 2.浏览未处理的订单 3. 处理订单 4.添加商品 5.修改商品状态 6.修改会员密码 7.浏览所有商品信息 8.购买商品 9. 浏览自己的订单信息 10.退出
3.2.1如果选择1,则可以查看该店主的店铺下的所有的订单信息,需要显示订购的商品的名称
3.2.2如果选择2,则可以查看该店主的店铺下的所有状态为”未处理”的订单信息,即客户下了订单但是还没有发货的订单信息
3.2.3如果选择3,则提示用户输入需要处理的订单的编号,然后将该订单的状态修改为”已发货”
3.2.4如果选择4,则店主可以为该店铺添加商品,商品的信息由用户输入,注意输入商品类型不是编号而是名称
3.2.5如果选择5,则可以修改商品的状态为”热销”或”已下架”
3.2.6功能6-10同普通会员

三、实现(版本1)

版本1主要是基于JDBC和properties文件操作,工具类。

3.1项目结构

java数据库设计用户表商品表_System

3.2file.properties

DRIVER = com.mysql.jdbc.Driver
URL = jdbc:mysql://127.0.0.1:3306/abc?useUnicode=true&characterEncoding=UTF-8
USER = root
PWD = root

3.3Util工具类

package taobao;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;

import java.io.File;
import java.io.FileInputStream;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Scanner;

public class Util {
    private static String DRIVER = null;
    private static String URL = null;
    private static String USER = null;
    private static String PWD = null;

    private static QueryRunner qr;
    public static Scanner sc = new Scanner(System.in);
    public static int typeId = 0;//会员类型编号
    public static int userId = 0;//会员编号
    public static   String name;
    public static String pwd;
    public static    int proCount = 0;
    public static String proStates = "";


    static {
        //建立连接器
        File f = new File("day07/src/taobao/file.properties");
        Properties p = new Properties();
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(f);
            p.load(fis);
            DRIVER = p.getProperty("DRIVER");
            URL = p.getProperty("URL");
            USER = p.getProperty("USER");
            PWD = p.getProperty("PWD");
            fis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        //连接数据库
        DruidDataSource ds = new DruidDataSource();
        ds.setUrl(URL);
        ds.setUsername(USER);
        ds.setPassword(PWD);
        ds.setDriverClassName(DRIVER);
        qr = new QueryRunner(ds);
    }

    /**
     * 查询有多行结果的操作,结果封装成List中,元素为map类型
     *
     * @param sql   进行操作的SQL语句
     * @param param 操作对应的参数,替代SQL中的占位符
     * @return SQL操作后的多行内容封装到List中,如果异常则返回null
     */
    public static List<Map<String, Object>> queryAllMap(String sql, Object... param) {
        try {
            return qr.query(sql, new MapListHandler(), param);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    //2. 根据单一条件查找表中的一行信息
    public static Map<String, Object> queryOneMap(String sql, Object... param) {
        try {
            return qr.query(sql, new MapHandler(), param);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    //3.增加、删除、修改

    /**
     * 进行新增、修改、删除操作
     *
     * @param sql   进行操作的SQL语句
     * @param param 操作对应的参数,替代SQL中的占位符
     * @return SQL执行后受影响的行
     */
    public static int udpate(String sql, Object... param) {
        try {
            return qr.update(sql, param);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    //注册账号功能
    public static void signIn() {
        System.out.println("您选择的是注册功能");
        System.out.println("请输入您要注册的用户名(不超过20个字符):");
        String name = sc.next();
        if (name.length() > 20) {
            System.out.println("输入错误,注册失败!");
            return;
        }
        String nameSql = "select * from UserInfo where userName=?";
        Map<String, Object> nameResult = Util.queryOneMap(nameSql, name);
        //if (nameResult!=null && nameResult.isEmpty()) {
           if (nameResult==null) {
            System.out.println("可以注册");
        } else {
            System.out.println("您要注册的用户名已经存在。");
            return;
        }
        System.out.println("请输入您要注册的密码(不超过20个字符):");
        String pwd = sc.next();
        if (pwd.length() > 20) {
            System.out.println("输入错误,注册失败!");
            return;
        }
        System.out.println("请输入您的会员类型:(卖家输入2,买家输入3)");
        int i = sc.nextInt();
        if (i != 2 & i != 3) {
            System.out.println("输入错误,注册失败!");
            return;
        }
        String sql = "insert into UserInfo(userName,userPwd,typeId) VALUES (?,?,?)";
        int signInNum = Util.udpate(sql, name, pwd, i);
        if (signInNum > 0) {
            System.out.println("注册成功!");
        } else {
            System.out.println("注册失败!");
        }
    }

    //登录功能
    public static void login(){
        Map<String, Object> maps=null;
        System.out.println("您选择的是登录功能");
        System.out.println("请输入您的用户名:");
        name = sc.next();
        System.out.println("请输入您的密码:");
        pwd = sc.next();
        String sql="SELECT userId,typeId from UserInfo WHERE userName=? and userPwd =?";
         maps = Util.queryOneMap(sql, name, pwd);

        try {
            if (maps==null){
                System.out.println("用户名或密码错误!");
            }else {
                System.out.println("登录成功!");
                //取用户的会员类型(1或2或者3)
                userId=(int)maps.get("userId");
                typeId = (int)maps.get("typeId");
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    //1.浏览所有订单信息
    public static void browseAllOrders(){
        System.out.println("您选择的是浏览所有订单信息功能");
        String orderInfoSql= "SELECT * from orderInfo,proInfo,ShopInfo,UserInfo WHERE orderInfo.proId =  proInfo.proId  and proInfo.shopId  =ShopInfo.shopId  and ShopInfo.userId  = UserInfo.userId and ShopInfo.userId  =?";
        List<Map<String, Object>> proInfoSqlMaps = Util.queryAllMap(orderInfoSql,userId);
        proInfoSqlMaps.forEach(System.out::println);
    }

    //2.浏览未处理的订单
    public static void foundUnprocessedOrder(){
        System.out.println("您选择的是浏览未处理的订单功能");
        String orderInfoSql= "SELECT * from orderInfo,proInfo,ShopInfo,UserInfo WHERE orderInfo.proId =  proInfo.proId  and proInfo.shopId  =ShopInfo.shopId  and ShopInfo.userId  = UserInfo.userId and ShopInfo.userId  =? and orderInfo.orderStatus   =\"未处理\"";
        List<Map<String, Object>> proInfoSqlMaps = Util.queryAllMap(orderInfoSql,userId);
        proInfoSqlMaps.forEach(System.out::println);
    }

    //3.处理订单
    public static void processOrder(){
        System.out.println("您选择的是处理订单功能");
        String  orderStatusSql="UPDATE orderInfo,proInfo,ShopInfo,UserInfo set orderInfo.orderStatus   =\"已发货\" WHERE orderInfo.proId =  proInfo.proId  and proInfo.shopId  =ShopInfo.shopId  and ShopInfo.userId  = UserInfo.userId and ShopInfo.userId  = 2 and orderInfo.orderStatus   =\"未处理\"";
        int orderStatusudpate = Util.udpate(orderStatusSql);
        if (orderStatusudpate>0){
            System.out.println("未处理的订单已经发货了!");
        }else{
            System.out.println("没有订单需要发货");
        }
    }

    //4.添加商品
    public static void insertProInfo(){
       System.out.println("您选择的是添加商品功能");
        System.out.println("请输入商品的名字:");
        String proName = sc.next();
        System.out.println("请输入商品价格:");
        double proPrice = sc.nextDouble();
        System.out.println("请输入商品库存:");
        String proCount = sc.next();
        System.out.println("请输入商品是否上架:");
        String proStates = sc.next();
        System.out.println("请输入商品所属店铺编号:");
        int shopId = sc.nextInt();
        System.out.println("请输入商品所属类型名称:");
        String shopTypeName = sc.next();
        String shopTypeIdSql ="SELECT typeId from protype WHERE typeName= ?";
        Map<String, Object> stringObjectMap = Util.queryOneMap(shopTypeIdSql, shopTypeName);
        int shopTypeId =(int)stringObjectMap.get("typeId");
        String insertProInfoSql ="INSERT into   proInfo set proName =?,proPrice  =?, proCount=? , proStates =?,shopId = ?, typeId  = ?";
        int insertProInfoudpate = Util.udpate(insertProInfoSql, proName, proPrice, proCount, proStates, shopId, shopTypeId);
        if (insertProInfoudpate>0){
            System.out.println("添加商品成功!店铺的商品信息如下");
            String queryProInfoSql="SELECT * from proType,proInfo,ShopInfo,UserInfo   WHERE proInfo.typeId  = proType.typeId      and proInfo.shopId  =ShopInfo.shopId  and ShopInfo.userId  = UserInfo.userId and ShopInfo.userId  = ?";
            List<Map<String, Object>> queryProInfomaps = Util.queryAllMap(queryProInfoSql, userId);
            queryProInfomaps.forEach(System.out::println);
        }
    }
    
    //5.修改商品状态
    public static void updateProInfo(){
        System.out.println("您选择的是修改商品状态功能");
        System.out.println("请输入您要修改的商品名称");
        String proName   = sc.next();
        System.out.println("请输入您要修改的商品状态");
        String proStates   = sc.next();
        String proStatesSql ="UPDATE proInfo set proStates=?WHERE proName  =?";
        int proStatesUdpate = Util.udpate(proStatesSql, proStates, proName);
        if (proStatesUdpate>0){
            System.out.println("修改成功!");
        }else{
            System.out.println("修改失败!");
        }
    }
    
    //6.修改会员密码功能
    public static void updatePWD(String name) {
        System.out.println("您选择的是修改会员密码功能");
        System.out.println("请输入旧密码:");
        String oldPwd = sc.next();
        System.out.println("请输入新密码:");
        String firstPwd = sc.next();
        System.out.println("请再输入一遍,确认密码:");
        String secondPwd = sc.next();
        if (firstPwd.equals(secondPwd)) {
            String pwdSql1 = "SELECT  typeId from UserInfo WHERE userName=? and userPwd =?";
            List<Map<String, Object>> maps1 = Util.queryAllMap(pwdSql1, name, oldPwd);
            if (maps1 == null) {
                System.out.println("密码输入错误!");
                return;
            } else {
                String pwdSql2 = "UPDATE  UserInfo set userPwd=? where  userName=? and userPwd =?";
                int pwdNum = Util.udpate(pwdSql2, secondPwd, name, oldPwd);
                if (pwdNum > 0) {
                    System.out.println("密码修改成功!您的新密码是:" + secondPwd);
                }
            }
        } else {
            System.out.println("密码输入错误,请重新输入。");
        }
    }

    //7.浏览所有商品信息
    public static void AllProInfo() {
        System.out.println("您选择的是浏览所有商品信息功能");
        String proInfoSql = "select proId,proName,proPrice,proCount,proStates,typeName,shopName,userName from proInfo,proType,ShopInfo,UserInfo where proInfo.shopId = ShopInfo.Shopid and proInfo.typeId = proType.Typeid and ShopInfo.Userid = UserInfo.Userid;";
        List<Map<String, Object>> proInfoSqlMaps = Util.queryAllMap(proInfoSql);
        proInfoSqlMaps.forEach(System.out::println);
    }

    //8.购买商品
    public static void shoppingProInfo() {

        System.out.println("您选择的是购买商品功能");
        System.out.println("请输入您要购买的商品编号:");
        String proId = sc.next();
        System.out.println("请输入您要购买的数量:");
        int orderCount = sc.nextInt();
        String proSql = "select proCount,proStates from proInfo  where proId=?";
        Map<String, Object> som = Util.queryOneMap(proSql, proId);
        proCount = (int)som.get("proCount");
        proStates = (String)som.get("proStates");
        if (proStates.equals("上架")||proStates.equals("热销") {
            if (proCount > orderCount) {
                System.out.println("正在下单中...");
                String orderInfoSql1 = "insert into orderInfo set proId= ?,orderCount =?,userId=?";
                Util.udpate(orderInfoSql1, proId, orderCount, userId);
                //该商品库存需要减
                String orderInfoSql2 = "update proInfo set proCount=proCount-? WHERE proId = ?";
                Util.udpate(orderInfoSql2, orderCount, proId);
                System.out.println("恭喜您,下单成功!");
            } else {
                System.out.println("该商品的库存不够,不能购买!");
                return;
            }
        }
    }
    
    //9.浏览自己的订单信息功能
    public static void orderInfo(){
     	System.out.println("您选择的是浏览自己的订单信息功能");
      	String userIdSQL= "select userId from UserInfo where userName=?";
        Map<String, Object> stringObjectMap = Util.queryOneMap(userIdSQL, name);
        int userId = (int)stringObjectMap.get("userId");
        String orderInfoQuerySql= "SELECT orderId,orderInfo.proId,proName,orderCount,orderDate,orderStatus,userId from orderInfo,proInfo WHERE userId= ? and orderInfo.proId  =proInfo.proId  ;";
        List<Map<String, Object>> orderInfoQueryMaps = Util.queryAllMap(orderInfoQuerySql,userId);
        orderInfoQueryMaps.forEach(System.out::println);
    }
    
    //退出
    public static void  quit(){
        System.out.println("您选择的是退出功能");
        System.out.println("即将退出....");
    }
}

3.4TaoBaoSystem淘宝后台数据处理系统

package taobao;
import java.util.Scanner;

public class TaoBaoSystem {
    public static void main(String[] args)  {
        boolean isWork=true;//管理系统退出控制器
        Scanner sc = new Scanner(System.in);
                while (isWork){
                    System.out.println("*************************************");
                    System.out.println("******欢迎使用淘宝后台信息管理系统******");
                    System.out.println("**************************************");
                    System.out.println("***************1.登录*****************");
                    System.out.println("***************2.注册*****************");
                    System.out.println("***************3.退出*****************");
                    System.out.println("**************************************");
                    System.out.println();
                    System.out.print("请选择您要使用的功能:");
                    int choseNum = sc.nextInt();
                    //1.登录
                    if (choseNum==1){
                     Util.login();
                    String name =Util.name;
                        //会员类型编号
                    int typeId=Util.typeId;
                        //会员编号
                    int userId=Util.userId;
                if (typeId==3){ //普通会员(3)
                    boolean isregular= true;
                    while (isregular){
                        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();
                        System.out.print("尊敬的会员,请选择您要使用的功能:");
                        int choseRegular = sc.nextInt();

                        //1.修改会员密码
                        if (choseRegular==1){
                        Util.updatePWD(name);

                        //2.浏览所有商品信息
                        }else if (choseRegular==2){
                         Util.AllProInfo();

                         //3.购买商品
                        }else if (choseRegular==3){
                            Util.shoppingProInfo();

                        //4.浏览自己的订单信息
                        }else if (choseRegular==4){
                            Util.orderInfo();
                            //5.退出
                        }else if (choseRegular==5){
                         Util.quit();
                            isregular = false;
                        }
                    }
                }else if (typeId==2){//店主
                    boolean isShop= true;
                    while (isShop) {
                        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("10.退出");
                        System.out.println();
                        System.out.print("尊敬的店主,请选择您要使用的功能:");
                        int choseShop = sc.nextInt();
                        //1.浏览所有订单信息
                        if (choseShop==1){
                          Util.browseAllOrders();

                        //2.浏览未处理的订单
                        }else if (choseShop==2){
                          Util.foundUnprocessedOrder();

                        //3.处理订单
                        }else if (choseShop==3){
                           Util.processOrder();

                        //4.添加商品
                        }else if (choseShop==4){
                            Util.insertProInfo();

                        //5.修改商品状态
                        }else if (choseShop==5){
                            Util.updateProInfo();

                        //6.修改会员密码功能
                        }else if (choseShop==6){
                            Util.updatePWD(name);

                        //7.浏览所有商品信息功能
                        }else if (choseShop==7){
                          Util.AllProInfo();

                        //8.购买商品功能
                        }else if (choseShop==8){
                            Util.shoppingProInfo();

                        //9.浏览自己的订单信息
                        }else if (choseShop==9){
                            Util.orderInfo();

                        //10.退出
                        }else if (choseShop==10){
                            Util.quit();
                            isShop = false;
                        }
                    }

                }else if(typeId==1){
                    System.out.println("待开发...");
                }

            //2.注册
            }else  if (choseNum==2){
               Util.signIn();
            //3.退出
            }else  if (choseNum==3){
                        Util.quit();
                isWork = false;
            }
        }
    }
}