有三张表:
账户表 : 账户ID,账户名,密码,账户余额
图书信息表 :图书编号,图书名称,图书单价 ,库存ID
图书库存表: 库存ID,图书编号,图书库存数量
1,编写登录程序,用户输入用户名和密码,和账户表进行匹配,匹配成功进入第2步,失败提示用户登录失败
2,显示所有图书信息,包括图书编号,书名,单价及图书库存,显示当前登录的账户名称和账户余额
3,用户输入所需要购买的图书编号,进行图书购买
(1)查询图书单价
(2)减少账户余额
(3)减少图书库存数量1
如果账户余额小于0或者图书库存小于0则不能够购买
库和表的设计:
CREATE DATABASE buybook;
CREATE TABLE IF NOT EXISTS account (
acc_id INT PRIMARY KEY AUTO_INCREMENT,
acc_name VARCHAR(20) NOT NULL,
acc_pass VARCHAR(20) NOT NULL,
acc_balance DOUBLE(10,2) DEFAULT 0
);
CREATE TABLE book_info(
book_no INT PRIMARY KEY AUTO_INCREMENT,
book_name VARCHAR(20) NOT NULL,
book_price DOUBLE(10,2) DEFAULT 0,
stock_id INT
);
CREATE TABLE book_stock(
stock_id INT PRIMARY KEY AUTO_INCREMENT,
stock_num INT DEFAULT 0,
book_no INT,
CONSTRAINT book_stock_fk FOREIGN KEY(book_no) REFERENCES book_info(book_no)
);
ALTER TABLE book_info ADD CONSTRAINT book_info_fk FOREIGN KEY(stock_id) REFERENCES book_stock(stock_id);
package com.wanbangee.util;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBUtil {
public static final String DRIVERCLASS = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql:///buybook";
public static final String USER = "root";
public static final String PASSWORD = "3306";
public static Connection getConnection(){
Connection conn = null;
try {
Class.forName(DRIVERCLASS);
conn = DriverManager.getConnection(URL,USER,PASSWORD);
}catch(Exception e) {
e.printStackTrace();
}
return conn;
}
}
package com.wanbangee.books;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
import com.wanbangee.util.DBUtil;
public class BooksDemo {
public static void main(String[] args) {
BooksManager bm = new BooksManager();
Scanner sc = new Scanner(System.in);
boolean flag = false;//判断是否登入
int temp = 1;
do {
if(!flag) {//没有登入,则必须先登入
System.out.println("请输入账户名:");
String inputAccName = sc.next();
System.out.println("请输入账户密码:");
String inputAccPass = sc.next();
flag = bm.login(inputAccName, inputAccPass);
if(flag) {
System.out.println("欢迎您:" + inputAccName + ",您的账户余额为:" + bm.getAccBalance());
}else {
System.out.println("登入失败:");
}
}else {
bm.showBppksInfo();
System.out.println("请输入购买图书的编号:");
Integer bookNo = sc.nextInt();
boolean f = bm.buyBook(bm.getAccId(), bookNo);
if(f) {
System.out.println("买书成功");
bm.showBppksInfo();
System.out.println("买书成功,继续购买请输入1,退出请输入0:");
temp = sc.nextInt();
}
}
}while(temp != 0);
}
}
class BooksManager{
private Integer accId;
private String accName;
private Double accBalance;
public Integer getAccId() {
return accId;
}
public void setAccId(Integer accId) {
this.accId = accId;
}
public String getAccName() {
return accName;
}
public void setAccName(String accName) {
this.accName = accName;
}
public Double getAccBalance() {
return accBalance;
}
public void setAccBalance(Double accBalance) {
this.accBalance = accBalance;
}
//登入,通过用户名和密码验证用户是否存在
public boolean login(String accName,String accPass) {
boolean flag = false;
Connection conn =null;
PreparedStatement pstate = null;
ResultSet res = null;
try {
conn = DBUtil.getConnection();//获得数据库连接
String sql = "select acc_id,acc_balance from account where acc_name = ? and acc_pass = ?";
pstate = conn.prepareStatement(sql);
pstate.setString(1, accName);
pstate.setString(2, accPass);
res = pstate.executeQuery();
while(res.next()) {
flag = true;
this.accId = res.getInt(1);
this.accName = accName;
this.accBalance = res.getDouble(2);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
res.close();
pstate.close();
conn.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return flag;
}
//显示图书信息
public void showBppksInfo() {
Connection conn =null;
PreparedStatement pstate = null;
ResultSet res = null;
try {
conn = DBUtil.getConnection();//获得数据库连接
String sql = "select a.book_no,a.book_name,a.book_price, b.stock_num from book_info a inner join book_stock b on a.book_no = b.book_no and a.stock_id = b.stock_id";
pstate = conn.prepareStatement(sql);
res = pstate.executeQuery();
System.out.println("书号\t书名\t单价\t库存数量");
while(res.next()) {
System.out.println(res.getInt(1) + "\t" + res.getString(2) + "\t" +res.getDouble(3) + "\t" +res.getInt(4));
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
res.close();
pstate.close();
conn.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
//购买图书,有3个步骤,要加事务
public boolean buyBook(Integer accId,Integer bookNo) {
boolean flag = false;
Connection conn =null;
PreparedStatement pstate1 = null;
PreparedStatement pstate2 = null;
PreparedStatement pstate3 = null;
ResultSet res = null;
try {
conn = DBUtil.getConnection();//获得数据库连接
conn.setAutoCommit(false);//取消事务自动提交
//1查询图书单价
String sql = "select book_price from book_info where book_no = ?";
pstate1 = conn.prepareStatement(sql);
pstate1.setInt(1, bookNo);
res = pstate1.executeQuery();
double bookPrice = 0;
while(res.next()) {
bookPrice = res.getDouble(1);
}
//2减少账户余额,在原来余额上减掉图书价格
sql = "update account set acc_balance = acc_balance - ? where acc_id = ?";
pstate2 = conn.prepareStatement(sql);
pstate2.setDouble(1, bookPrice);
pstate2.setInt(2, accId);
pstate2.execute();
//3减少图书库存数量1
sql = "update book_stock set stock_num = stock_num - 1 where book_no = ?";
pstate3 = conn.prepareStatement(sql);
pstate3.setInt(1, bookNo);
pstate3.execute();
flag = true;
conn.commit();//没有异常提交事务
} catch (Exception e) {
try {
conn.rollback();//有异常回滚事务
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}finally {
try {
res.close();
pstate3.close();
pstate2.close();
pstate1.close();
conn.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return flag;
}
}
Dao总结:先来三个包名,com.wanbangee.dao com.wanbangee.service com.wanbangee.controller
在dao包中先建entities实体类(一个表或视图就是一个实体类,set和get方法,有参和无参构造器),dao , daoimp, daoproxy(丢弃), daofactory
package com.wanbangee.entities;
public class Account {
private Integer accId;
private String accName;
private String accPass;
private Double accBalance;
public Integer getAccId() {
return accId;
}
public void setAccId(Integer accId) {
this.accId = accId;
}
public String getAccName() {
return accName;
}
public void setAccName(String accName) {
this.accName = accName;
}
public String getAccPass() {
return accPass;
}
public void setAccPass(String accPass) {
this.accPass = accPass;
}
public Double getAccBalance() {
return accBalance;
}
public void setAccBalance(Double accBalance) {
this.accBalance = accBalance;
}
public Account() {
super();
// TODO Auto-generated constructor stub
}
public Account(Integer accId, String accName, String accPass, Double accBalance) {
super();
this.accId = accId;
this.accName = accName;
this.accPass = accPass;
this.accBalance = accBalance;
}
}
package com.wanbangee.entities;
public class BookInfo {
private Integer bookNo;
private String bookName;
private Double bookPrice;
private Integer stockId;
//引用图书库存,每本书都有个库存对象,每本书引用一个库存对象
private BookStock bookStock;
public Integer getBookNo() {
return bookNo;
}
public void setBookNo(Integer bookNo) {
this.bookNo = bookNo;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public Double getBookPrice() {
return bookPrice;
}
public void setBookPrice(Double bookPrice) {
this.bookPrice = bookPrice;
}
public Integer getStockId() {
return stockId;
}
public void setStockId(Integer stockId) {
this.stockId = stockId;
}
public BookStock getBookStock() {
return bookStock;
}
public void setBookStock(BookStock bookStock) {
this.bookStock = bookStock;
}
public BookInfo() {
super();
// TODO Auto-generated constructor stub
}
public BookInfo(Integer bookNo, String bookName, Double bookPrice, Integer stockId) {
super();
this.bookNo = bookNo;
this.bookName = bookName;
this.bookPrice = bookPrice;
this.stockId = stockId;
}
}
package com.wanbangee.entities;
public class BookStock {
private Integer stockId;
private Integer stockNum;
private Integer bookNo;
public Integer getStockId() {
return stockId;
}
public void setStockId(Integer stockId) {
this.stockId = stockId;
}
public Integer getStockNum() {
return stockNum;
}
public void setStockNum(Integer stockNum) {
this.stockNum = stockNum;
}
public Integer getBookNo() {
return bookNo;
}
public void setBookNo(Integer bookNo) {
this.bookNo = bookNo;
}
public BookStock(Integer stockId, Integer stockNum, Integer bookNo) {
super();
this.stockId = stockId;
this.stockNum = stockNum;
this.bookNo = bookNo;
}
public BookStock() {
super();
// TODO Auto-generated constructor stub
}
}
package com.wanbangee.dao;
import com.wanbangee.entities.Account;
public interface AccountDao {
//账户表有2个操作,即有2个方法,一个是登入方法,一个是买书减少账户余额方法
//登入,查询操作,根据用户名和密码查询用户信息并返回用户对象
//实体类的一个对象就是表中的一笔数据(含多个字段信息)
public Account selectAccountByAccNameAndAccPass(String accName,String accPass);
//减少账户余额,减少的余额就是图书的单价
public boolean updateAccBalanceByAccId(Double bookPrice,Integer accId);
//两个参数,一个是减少金额,一个是减少账户ID
}
package com.wanbangee.dao;
import java.util.List;
import com.wanbangee.entities.BookInfo;
public interface BookInfoDao {
//图书表的操作,查询所有图书信息,图书信息有多个,用集合存储
//没有库存信息,只是针对图书表的操作
public List<BookInfo> selectBookInfo();
//查询图书单价(买书过程),根据图书编号查询图书单价
public double selectBookPriceByBookNo(Integer bookNo);
}
package com.wanbangee.dao;
import com.wanbangee.entities.BookStock;
public interface BookStockDao {
//在图书表查不到图书库存信息
//根据图书编号查询库存信息
public BookStock selectBookStockByBookNo(Integer bookNo);
//减少图书库存数量,根据图书编号
public boolean updateStockNumByBookNo(Integer bookNo);
}
package com.wanbangee.dao.imp;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.wanbangee.dao.AccountDao;
import com.wanbangee.entities.Account;
import com.wanbangee.util.DBUtil;
public class AccountDaoImp implements AccountDao {
private Connection conn;
public AccountDaoImp(Connection conn) {
this.conn = conn;
}
@Override
public Account selectAccountByAccNameAndAccPass(String accName, String accPass) {
Account account = null;
PreparedStatement pstate = null;
ResultSet res = null;
try {
String sql = "select acc_id,acc_balance from account where acc_name = ? and acc_pass = ?";
pstate = this.conn.prepareStatement(sql);
pstate.setString(1, accName);
pstate.setString(2, accPass);
res = pstate.executeQuery();
while(res.next()) {
//Integer accId, String accName, String accPass, Double accBalance
account = new Account(res.getInt(1),accName,null,res.getDouble(2));
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
res.close();
pstate.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return account;
}
@Override
public boolean updateAccBalanceByAccId(Double bookPrice, Integer accId) {
boolean flag = false;
PreparedStatement pstate = null;
try {
String sql = "update account set acc_balance = acc_balance - ? where acc_id = ?";
pstate = conn.prepareStatement(sql);
pstate.setDouble(1, bookPrice);
pstate.setInt(2, accId);
pstate.execute();
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
pstate.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return flag;
}
}
package com.wanbangee.dao.imp;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.wanbangee.dao.BookInfoDao;
import com.wanbangee.entities.BookInfo;
public class BookInfoDaoImp implements BookInfoDao {
private Connection conn;
public BookInfoDaoImp(Connection conn) {
this.conn = conn;
}
@Override
public List<BookInfo> selectBookInfo() {
List<BookInfo> bookInfos = new ArrayList<>();//查询的信息以集合形式返回
PreparedStatement pstate = null;
ResultSet res = null;
try {
String sql = "select book_no,book_name,book_price,stock_id from book_info ";
pstate = this.conn.prepareStatement(sql);
res = pstate.executeQuery();
while (res.next()) {
// Integer bookNo, String bookName, Double bookPrice, Integer stockId
BookInfo bookInfo = new BookInfo(res.getInt(1), res.getString(2), res.getDouble(3), res.getInt(4));
bookInfos.add(bookInfo);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
res.close();
pstate.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return bookInfos;
}
@Override
public double selectBookPriceByBookNo(Integer bookNo) {
PreparedStatement pstate = null;
ResultSet res = null;
double bookPrice = 0;
try {
String sql = "select book_price from book_info where book_no = ?";
pstate = conn.prepareStatement(sql);
pstate.setInt(1, bookNo);
res = pstate.executeQuery();
while (res.next()) {
bookPrice = res.getDouble(1);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
res.close();
pstate.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return bookPrice;
}
}
package com.wanbangee.dao.imp;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.wanbangee.dao.BookStockDao;
import com.wanbangee.entities.BookStock;
public class BookStockDaoImp implements BookStockDao {
private Connection conn ;
public BookStockDaoImp(Connection conn) {
this.conn = conn;
}
@Override
public BookStock selectBookStockByBookNo(Integer bookNo) {
PreparedStatement pstate = null;
ResultSet res = null;
BookStock bookStock = null;
try {
String sql = "select stock_id,stock_num from book_stock where book_no = ?";
pstate = conn.prepareStatement(sql);
pstate.setInt(1, bookNo);
res = pstate.executeQuery();
while (res.next()) {
//Integer stockId, Integer bookNo, Integer stockNum
bookStock = new BookStock(res.getInt(1),bookNo,res.getInt(2));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
res.close();
pstate.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return bookStock;
}
@Override
public boolean updateStockNumByBookNo(Integer bookNo) {
PreparedStatement pstate = null;
boolean flag = false;
try {
String sql = "update book_stock set stock_num = stock_num-1 where book_no = ?";
pstate = conn.prepareStatement(sql);
pstate.setInt(1, bookNo);
pstate.execute();
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
pstate.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return flag;
}
}
package com.wanbangee.dao.proxy;
import java.sql.Connection;
import java.sql.SQLException;
import com.wanbangee.dao.AccountDao;
import com.wanbangee.dao.imp.AccountDaoImp;
import com.wanbangee.entities.Account;
import com.wanbangee.util.DBUtil;
public class AccountDaoProxy implements AccountDao {
//代理类要调用真实主题类,取得和关闭数据库连接
//之前数据库的连接和关闭放在代理实现类,
//加了事务后数据库的连接和关闭放在业务实现类层。
//代理实现类阻碍了事务的操作,丢弃代理实现类
@Override
public Account selectAccountByAccNameAndAccPass(String accName, String accPass) {
Connection conn = null;
Account account = null;
try {
conn = DBUtil.getConnection();
AccountDaoImp imp = new AccountDaoImp(conn);
account = imp.selectAccountByAccNameAndAccPass(accName, accPass);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return account;
}
@Override
public boolean updateAccBalanceByAccId(Double bookPrice, Integer accId) {
Connection conn = null;
boolean flag = false;
try {
conn = DBUtil.getConnection();
AccountDaoImp imp = new AccountDaoImp(conn);
flag = imp.updateAccBalanceByAccId(bookPrice, accId);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return flag;
}
}
package com.wanbangee.dao.proxy;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import com.wanbangee.dao.BookInfoDao;
import com.wanbangee.dao.imp.BookInfoDaoImp;
import com.wanbangee.entities.BookInfo;
import com.wanbangee.util.DBUtil;
public class BookInfoDaoProxy implements BookInfoDao {
@Override
public List<BookInfo> selectBookInfo() {
Connection conn = null;
List<BookInfo> bookInfos = null;
try {
conn = DBUtil.getConnection();
BookInfoDaoImp imp = new BookInfoDaoImp(conn);
bookInfos = imp.selectBookInfo();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return bookInfos;
}
@Override
public double selectBookPriceByBookNo(Integer bookNo) {
Connection conn = null;
double bookPrice = 0;
try {
conn = DBUtil.getConnection();
BookInfoDaoImp imp = new BookInfoDaoImp(conn);
bookPrice = imp.selectBookPriceByBookNo(bookNo);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return bookPrice;
}
}
package com.wanbangee.dao.proxy;
import java.sql.Connection;
import java.sql.SQLException;
import com.wanbangee.dao.BookStockDao;
import com.wanbangee.dao.imp.BookStockDaoImp;
import com.wanbangee.entities.BookStock;
import com.wanbangee.util.DBUtil;
public class BookStockDaoProxy implements BookStockDao {
@Override
public BookStock selectBookStockByBookNo(Integer bookNo) {
Connection conn = null;
BookStock bookStock = null;
try {
conn = DBUtil.getConnection();
BookStockDaoImp imp = new BookStockDaoImp(conn);
bookStock = imp.selectBookStockByBookNo(bookNo);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return bookStock;
}
@Override
public boolean updateStockNumByBookNo(Integer bookNo) {
Connection conn = null;
boolean flag = false;
try {
conn = DBUtil.getConnection();
BookStockDaoImp imp = new BookStockDaoImp(conn);
flag = imp.updateStockNumByBookNo(bookNo);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return flag;
}
}
package com.wanbangee.dao.factory;
import java.sql.Connection;
import com.wanbangee.dao.AccountDao;
import com.wanbangee.dao.imp.AccountDaoImp;
public class AccountDaoFactory {
public static AccountDao getAccountDaoInstance(Connection conn) {
return new AccountDaoImp(conn);
}
}
package com.wanbangee.dao.factory;
import java.sql.Connection;
import com.wanbangee.dao.BookInfoDao;
import com.wanbangee.dao.imp.BookInfoDaoImp;
public class BookInfoDaoFactory {
public static BookInfoDao getBookInfoDaoInstance(Connection conn) {
return new BookInfoDaoImp(conn);
}
}
package com.wanbangee.dao.factory;
import java.sql.Connection;
import com.wanbangee.dao.BookStockDao;
import com.wanbangee.dao.imp.BookStockDaoImp;
public class BookStockDaoFactory {
public static BookStockDao getBookStockDaoInstance(Connection conn) {
return new BookStockDaoImp(conn);
}
}
package com.wanbangee.service;
import java.util.List;
import com.wanbangee.entities.Account;
import com.wanbangee.entities.BookInfo;
public interface BuyBookService {
//业务层命名没有Dao那么规范
public Account login(String accName,String accPass);
public List<BookInfo> getBookInfo();//获得图书信息
public boolean buyBook(Integer accId,Integer bookNo);
}
package com.wanbangee.service.imp;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import com.wanbangee.dao.factory.AccountDaoFactory;
import com.wanbangee.dao.factory.BookInfoDaoFactory;
import com.wanbangee.dao.factory.BookStockDaoFactory;
import com.wanbangee.entities.Account;
import com.wanbangee.entities.BookInfo;
import com.wanbangee.service.BuyBookService;
import com.wanbangee.util.DBUtil;
public class BuyBookServiceImp implements BuyBookService {
//登录
@Override
public Account login(String accName, String accPass) {
Connection conn = null;
Account account = null;
try {
conn = DBUtil.getConnection();
account = AccountDaoFactory.getAccountDaoInstance(conn).selectAccountByAccNameAndAccPass(accName, accPass);
}catch(Exception e){
e.printStackTrace();
}finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return account;
}
//获得图书信息
@Override
public List<BookInfo> getBookInfo() {
Connection conn = null;
List<BookInfo> bookInfos = null;
try {
conn = DBUtil.getConnection();
bookInfos = BookInfoDaoFactory.getBookInfoDaoInstance(conn).selectBookInfo();
/*
* 注意点:目前的bookInfos 中没有携带图书库存信息
* */
for (BookInfo bookInfo : bookInfos) {
// 查询图书的库存信息设置到bookInfos中
bookInfo.setBookStock(BookStockDaoFactory.getBookStockDaoInstance(conn).selectBookStockByBookNo(bookInfo.getBookNo()));
}
}catch(Exception e){
e.printStackTrace();
}finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return bookInfos;
}
//买书
@Override
public boolean buyBook(Integer accId, Integer bookNo) {
Connection conn = null;
boolean flag = false;
try {
conn = DBUtil.getConnection();
conn.setAutoCommit(false);
//1 查询图书单价
double bookPrice = BookInfoDaoFactory.getBookInfoDaoInstance(conn).selectBookPriceByBookNo(bookNo);
//2减少账户余额
flag = AccountDaoFactory.getAccountDaoInstance(conn).updateAccBalanceByAccId(bookPrice, accId);
if(flag) {
//3 减少图书库存信息
flag = BookStockDaoFactory.getBookStockDaoInstance(conn).updateStockNumByBookNo(bookNo);
}
if(flag) {
conn.commit();
}
if(!flag){
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}catch(Exception e){
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return flag;
}
}
package com.wanbangee.controller;
import java.util.List;
import com.wanbangee.entities.Account;
import com.wanbangee.entities.BookInfo;
import com.wanbangee.service.BuyBookService;
import com.wanbangee.service.imp.BuyBookServiceImp;
public class BuyBookController {
//控制层:把业务层处理的数据响应给前端
//控制层 :前端通过请求访问到控制层,控制调用业务层,业务层调用数据访问层
public Account login(String accName,String accPass) {
BuyBookService service = new BuyBookServiceImp();
return service.login(accName, accPass);
}
public List<BookInfo> getBookInfo(){
BuyBookService service = new BuyBookServiceImp();
return service.getBookInfo();
}
public boolean buyBook(Integer accId,Integer bookNo) {
BuyBookService service = new BuyBookServiceImp();
return service.buyBook(accId, bookNo);
}
}
package com.wanbangee.controller.test;
import java.util.List;
import java.util.Scanner;
import com.wanbangee.controller.BuyBookController;
import com.wanbangee.entities.Account;
import com.wanbangee.entities.BookInfo;
public class BuyBookControllerTest {
public static void main(String[] args) {
BuyBookController controller = new BuyBookController();
Scanner sc = new Scanner(System.in);
Account account = null;
int temp = 1;
do {
if (account == null) { // 没有登录,则必须先登录
System.out.print("请输入账户名:");
String inputAccName = sc.next();
System.out.print("请输入账户密码:");
String inputAccPass = sc.next();
account = controller.login(inputAccName, inputAccPass);
if (null != account) {
System.out.println("欢迎您:" + inputAccName + ",您的账户余额为:" + account.getAccBalance());
} else {
System.out.println("登录失败");
}
} else {
printBookInfo(controller);
System.out.print("请输入购买图书的编号:");
Integer bookNo = sc.nextInt();
boolean f = controller.buyBook(account.getAccId(), bookNo);
if(f) {
System.out.println("卖书成功");
printBookInfo(controller);
System.out.print("继续购买请输入1,退出请输入0 : ");
temp = sc.nextInt();
}
}
}
while(temp != 0);
}
public static void printBookInfo(BuyBookController controller) {
List<BookInfo> bookInfos = controller.getBookInfo();
System.out.println("图书编号\t\t图书名称\t\t图书单价\t\t图书库存");
for (BookInfo bookInfo : bookInfos) {
System.out.println(bookInfo.getBookNo() + "\t\t" + bookInfo.getBookName()+"\t\t" + bookInfo.getBookPrice() + "\t\t" + bookInfo.getBookStock().getStockNum());
}
}
}
package com.wanbangee.util;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBUtil {
public static final String DRIVERCLASS = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql:///buybook";
public static final String USER = "root";
public static final String PASSWORD = "3306";
public static Connection getConnection(){
Connection conn = null;
try {
Class.forName(DRIVERCLASS);
conn = DriverManager.getConnection(URL,USER,PASSWORD);
}catch(Exception e) {
e.printStackTrace();
}
return conn;
}
}