实训总结(图书管理系统java)
1设计任务
完成用户登录验证,图书品类的增、删、查、改并保存到数据库中,打印购买图书订单,并将购买图书订单信息数据保存到数据库中。
2总体设计
序号 类名 说明
1 SX1 主类:主程序入口
2 UserView 完成用户登录验证,以及获取用户名和密码
3 BSView 用户进行1.Book表的增删查改 2.图书购买 功能选择
4 Book 图书品类的增、删、查、改
5 BuyBook 查看所有图书信息,购买图书,打印图书订单信息,将订单信息保存到orders和order_tial表中
6 connFZ 数据库链接的封装
7 Dq 使得书名对齐
上图中Class Book中还有一个方法boolean IFnull(int Bid,String Bname)方法//判断是否有这本图书
3项目实现
① 首先将5本图书种类输入,这也是增加图书的功能
② 删除功能
③ 删除测试输入一个数据库不存在的数据
④ 查找测试,查找一本存在的图书和一本不存在的图书
⑤ 修改一本有的图书和一本没有的图书
⑥ 之后到了购买图书功能,首先先查看所有图书信息
⑦ 购买图书,并打印订单信息,以及保存订单信息进入Orders表和Order_tail表中,因为之前测试购买图书所以订单号没有从1开始
存入俩张表中的数据
Oid三个8的为测试数据
最后连续俩次退出关闭连接
4项目总结
首先学会了很多数据库的知识,例如新建数据库,表,插入数据等基本知识。
其次困难以及发现的困难碰上不少:
1.无法删除和修改数据库book表中有外键连接的数据。
解决办法:通过网上查询得知需将外键关闭,在eclipse中执行数据库语句SET foreign_key_checks = 0;然后在进行删除操作,删除完之后将外键开启SET foreign_key_checks =1 ;
2.输出图书信息书名列对不齐,如图:
解决办法:新建一个Dq类,将书名列强制定义为30个字符输出
3.如何生成订单编号和订单号00001格式及保存订单时间;
订单格式输出语句:DecimalFormat(“00000”).format(mark))其中mark通过查找数据库最后一行的订单编号进行+1操作,如果为空mark为1.
查询数据表中最后一行数据语句:select *from Orders order by Oid desc limit 1
保存订单时间: SimpleDateFormat hmFromat = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);//设置时间格式
pstmt.setString(4, hmFromat.format(date));
然后讲讲自己做的比较好的地方:
1.验证登录时将Uid登录用户名设置为静态变量,并且新建getUid方法获取用户名,这样保存是什么用户进行操作的数据将很好提取。
2.订单号的设计:采用查询数据库表单中最后一行的数据,若有数据+1输出,若无数据订单号为1。
3.将数据库连接进行封装,这样做就可无需将数据的连接一步一步传参过来,减少了代码量。
在然后讲讲自己的项目的不足点
1.用户界面不够美观,希望以后可以做成web形式
2.在book的增删查改还可进行封装达到代码的美化,但考虑到此次项目将这个进行封装也不是必要的(代码量减少不多),因此没去做。
代码块
主程序代码:
//程序入口
public class SX1 {
public static void main(String[] args) {
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundException e){
System.out.println("无法找到驱动");
}
UserView test1=new UserView();
test1.UserLogin();//进入登录界面
BSView test2=new BSView();//进入用户功能选择
}
}
登录界面
//登录界面
import java.sql.*;
import java.util.Scanner;
public class UserView {
connFZ sx=new connFZ("books");
Connection conn=sx.getConn();
Statement stmt=sx.getStmt();
ResultSet rs=null;
static int Uid;//静态变量,记住第一次输入的用户名
static String password;
Scanner sc=new Scanner(System.in);
public void UserLogin(){
System.out.println("\t用户登录");
System.out.println("请输入用户名");
Uid=sc.nextInt();
System.out.println("请输入用户密码");
password=sc.next();
try{
String sql="select *from user where Uid="+Uid+" and Password='"+password+"'";
rs=sx.stmt_EQ(sql);
if(rs.next()){
System.out.println(Uid+"用户登录成功,欢迎您!");
}else{
System.out.println(Uid+"用户登录失败!");
try{
rs.close();
stmt.close();
conn.close();
System.exit(0);
}catch(SQLException e){
System.out.println("无法关闭");
}
}
}catch(SQLException e){
System.out.println("连接失败");
}
}
public int getUid() {
//获取用户名
return Uid;
}
public String getPassword() {
//获取密码
return password;
}
}
用户界面
//用户界面
import java.sql.*;
import java.util.Scanner;
public class BSView {
int Uid;
int i;
Scanner sc=new Scanner(System.in);
connFZ sx=new connFZ("books");
Connection conn=sx.getConn();
Statement stmt=sx.getStmt();
ResultSet rs=null;
public BSView(){
UserView test3=new UserView();
Uid=test3.getUid();
while(true){
System.out.println("\t图书系统");
System.out.println("1.Book表的增删查改 2.图书购买 3.退出");
i=sc.nextInt();
switch(i){
case 1:
Book test1=new Book();
break;
case 2:
BuyBook test2=new BuyBook();
break;
case 3:
try{
rs.close();
stmt.close();
conn.close();
System.exit(0);
}catch(SQLException e){
System.out.println("无法关闭");
}
break;
default:
break;
}
}
}
}
book表的增删查改
import java.sql.*;
import java.util.Scanner;
public class Book {
public int Bid;
public String Bname;
public float Price;
public int Quantity;
connFZ sx=new connFZ("books");
Connection conn=sx.getConn();
Statement stmt=sx.getStmt();
ResultSet rs=null;
Scanner sc=new Scanner(System.in);
public Book(){
//功能界面
int i;
while(true) {
System.out.println("1.增加 2.删除 3.查找 4.修改 5.退出");
i=sc.nextInt();
switch(i){
case 1:
Create();
break;
case 2:
Delete();
break;
case 3:
Look();
break;
case 4:
Alter();
break;
case 5:
return;
default:
break;
}
}
}
void Create(){
//增加图书
boolean a=true;
int b;
while(a){
System.out.println("请输入图书编号");
Bid=sc.nextInt();
System.out.println("请输入图书名称");
Bname=sc.next();
System.out.println("请输入图书价格");
Price=sc.nextFloat();
System.out.println("请输入图书库存量");
Quantity=sc.nextInt();
String sql="insert into Book(Bid,Bname,Price,Quantity)values("+Bid+",'"+Bname+"',"+Price+","+Quantity+")";
try{
stmt.execute(sql);
System.out.println("图书输入成功");
}catch(SQLException e){
System.out.println("图书输入失败");
}
System.out.println("是否需要继续输入1.是 其他任意键不需要");
b=sc.nextInt();
if(b!=1)
a=false;
}
}
void Delete() {
//删除图书
boolean a=true;
int b;
while(a){
System.out.println("请输入需要删除图书编号");
Bid=sc.nextInt();
System.out.println("请输入需要删除图书名称");
Bname=sc.next();
boolean d=IFnull(Bid,Bname);
if(d==false){
System.out.println("没有这本图书");
return;
}
try{
String sql="SET foreign_key_checks = 0;";
stmt.execute(sql);
sql="delete from Book where Bid="+Bid+" and Bname='"+Bname+"'";
stmt.execute(sql);
System.out.println("图书删除成功");
}catch(SQLException e){
System.out.println("图书删除失败");
}finally{
try{
String sql="SET foreign_key_checks = 1;";
stmt.execute(sql);
}catch(SQLException e){
System.out.println("图书删除失败");
}
}
System.out.println("是否需要继续删除1.是 其他任意键不需要");
b=sc.nextInt();
if(b!=1)
a=false;
}
}
void Look(){
//查找图书
boolean a=true;
int b;
ResultSet rs=null;
while(a){
System.out.println("请输入需要查找图书编号");
Bid=sc.nextInt();
System.out.println("请输入需要查找图书名称");
Bname=sc.next();
boolean d=IFnull(Bid,Bname);
if(d==false){
System.out.println("没有这本图书");
return;
}
String sql="select* from Book where Bid="+Bid+" and Bname='"+Bname+"'";
try{
rs=stmt.executeQuery(sql);
System.out.println("编号\t书名\t价格\t库存量\t");
while(rs.next()){
System.out.print(rs.getInt(1)+"\t");
System.out.print(rs.getString(2)+"\t");
System.out.print(rs.getFloat(3)+"\t");
System.out.println(rs.getInt(4)+"\t");
}
}catch(SQLException e){
System.out.println("没有这种图书");
}
System.out.println("是否需要继续查找1.是 其他任意键不需要");
b=sc.nextInt();
if(b!=1)
a=false;
}
}
void Alter(){
//修改图书
boolean a=true;
int b;
while(a){
System.out.println("请输入需要修改的图书编号");
Bid=sc.nextInt();
System.out.println("请输入需要修改的图书名称");
Bname=sc.next();
boolean d=IFnull(Bid,Bname);
if(d==false){
System.out.println("没有这本图书");
return;
}
try{
String sql="SET foreign_key_checks = 0;";
stmt.execute(sql);
sql="update Book set Bid=?,Bname=?,Price=?,Quantity=? where Bid="+Bid+" and Bname='"+Bname+"'";
PreparedStatement pstmt=conn.prepareStatement(sql);
System.out.println("请输入需要修改后的图书编号");
Bid=sc.nextInt();
System.out.println("请输入需要修改后的图书名称");
Bname=sc.next();
System.out.println("请输入需要修改后的图书价格");
Price=sc.nextFloat();
System.out.println("请输入需要修改后的图书库存量");
Quantity=sc.nextInt();
pstmt.setInt(1, Bid);
pstmt.setString(2, Bname);
pstmt.setFloat(3,Price);
pstmt.setInt(4,Quantity);
pstmt.executeUpdate();
System.out.println("图书修改成功");
}catch(SQLException e){
System.out.println("图书修改失败");
}finally{
try{
String sql="SET foreign_key_checks = 1;";
stmt.execute(sql);
}catch(SQLException e){
System.out.println("图书删除失败");
}
}
System.out.println("是否需要继续修改1.是 其他任意键不需要");
b=sc.nextInt();
if(b!=1)
a=false;
}
}
boolean IFnull(int Bid,String Bname){
//判断是否有这本图书
String sql="select* from Book where Bid="+Bid+" and Bname='"+Bname+"'";
try{
rs=stmt.executeQuery(sql);
if(rs.next())
return true;
}catch(SQLException e){
System.out.println("图书删除失败");
}
return false;
}
}
购买图书
import java.sql.*;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class BuyBook {
connFZ sx=new connFZ("books");
UserView test =new UserView();
Connection conn=sx.getConn();
Statement stmt=sx.getStmt();
Dq test1;
int Uid=test.getUid();
Scanner sc=new Scanner(System.in);
public BuyBook(){
int i;
while(true){
System.out.println("1.查看所有图书信息 2.购买图书 3.退出");
i=sc.nextInt();
switch(i){
case 1:
LookAll();
break;
case 2:
Buy();
break;
case 3:
return;
default:
break;
}
}
}
//查看所有图书内容
void LookAll(){
try{
ResultSet rs=stmt.executeQuery("select *from Book");
System.out.println("编号\t书名\t\t\t价格\t库存量\t");
while(rs.next()){
System.out.print(rs.getInt(1)+"\t");
test1=new Dq(30, rs.getString(2));
System.out.print(rs.getFloat(3)+"\t");
System.out.println(rs.getInt(4)+"\t");
}
}catch(SQLException e){
e.printStackTrace();
}
}
//购买图书
void Buy(){
int a[]=new int[3];//编号
int b[]=new int[3];//数量
float d[]=new float[3];//单价
String c[]=new String[3];//书名
int Quantity;
int i=0;
int mark;
float sum=0;//总价
Date date =new Date();//时间
try{
while(i<3){
System.out.println("请输入图书编号选择图书");
a[i]=sc.nextInt();
c[i]=look(a[i]);
d[i]=look2(a[i]);
if(c[i]=="0"||d[i]==0){
throw new SQLException();
}
System.out.println("请输入购买图书数量");
b[i]=sc.nextInt();
if(i<2)
System.out.println("请继续购买图书");
sum=sum+d[i]*b[i];
i++;
}
}catch(SQLException e){
e.printStackTrace();
}
String sql="select *from Orders order by Oid desc limit 1";
try{
//获得订单编号
PreparedStatement pstmt = null;
pstmt = conn.prepareStatement(sql);
ResultSet rs=pstmt.executeQuery();
if(rs.next()){
mark=rs.getInt(1)+1;
}else{
mark=1;
}
System.out.println("\t图书订单");//订单详细
System.out.println("图书订单号:"+new DecimalFormat("00000").format(mark));
System.out.println("图书名称\t\t\t\t购买数量\t图书单价");
System.out.println("----------------------------------------------------------");
for(i=0;i<3;i++){
test1=new Dq(30,c[i]);
System.out.println("\t"+b[i]+"\t"+d[i]);
}
System.out.println("----------------------------------------------------------");
System.out.println("订单总额:\t\t"+sum);
System.out.println("日期:\t\t"+date.toString());
insertOrders( mark,sum,date);//将订单数据存入orders表中
insertOrder_detail(mark,a,b);//将订单数据存入order_tail表中
for(int t=0;t<3;t++){//更新book表中库存量
sql="select *from book where Bid="+a[t];
rs=stmt.executeQuery(sql);
if(rs.next()){
Quantity=rs.getInt(4);
sql="set foreign_key_checks=0";
stmt.execute(sql);
sql="update book set Quantity="+(Quantity-b[t])+" where Bid="+a[t];
stmt.execute(sql);
sql="set foreign_key_checks=1";
stmt.execute(sql);
}else{
System.out.println("更新库存量失败");
break;
}
}
}catch(SQLException e){
e.printStackTrace();
}
}
String look(int i){//获得书名
String str;
String sql;
ResultSet rs=null;
try{
sql="select *from Book where Bid="+i;
PreparedStatement pstmt = null;
pstmt = conn.prepareStatement(sql);
rs=pstmt.executeQuery();
if(rs.next()){
str=rs.getString(2);
return str;
}
}catch(SQLException e){
System.out.println("没有这个图书编号");
}
return "0";
}
float look2(int i){//获得单价
float a;
String sql;
ResultSet rs=null;
try{
sql="select *from Book where Bid="+i;
PreparedStatement pstmt = null;
pstmt = conn.prepareStatement(sql);
rs=pstmt.executeQuery();
if(rs.next()){
a=rs.getFloat(3);
return a;
}
}catch(SQLException e){
System.out.println("没有这个图书编号");
}
return 0;
}
void insertOrders(int mark,float sum,Date date){
//插入订单信息
PreparedStatement pstmt=null;
try{
SimpleDateFormat hmFromat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String sql="insert into Orders values(?,?,?,?)";
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1, mark);
pstmt.setInt(2, Uid);
pstmt.setFloat(3, sum);
pstmt.setString(4, hmFromat.format(date));
pstmt.executeUpdate();
System.out.println("订单保存成功");
}catch(SQLException e){
System.out.println("order表保存失败");
}
}
void insertOrder_detail(int mark,int a[],int b[]) throws SQLException{
//将订单数据存入order_tail表中
int i=0;
PreparedStatement pstmt=null;
while(i<3){
String sql="insert into Order_tail values(?,?,?)";
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1,mark);
pstmt.setInt(2,a[i]);
pstmt.setInt(3, b[i]);
pstmt.executeUpdate();
i++;
}
System.out.println("order_tail表保存成功");
}
}
数据库连接封装
import java.sql.*;
public class connFZ {
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
public connFZ(String database){
try{
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/"+database+"?user=root&password=1234");
stmt=conn.createStatement();
}catch(SQLException e){
System.out.println("连接失败");
}
}
ResultSet stmt_EQ(String sql)throws SQLException{
return stmt.executeQuery(sql);
}
Connection getConn(){
return conn;
}
Statement getStmt(){
return stmt;
}
}
书名对齐封装
//使书名对齐
public class Dq{
public Dq(int len,String str1){
String str2=" ";
int i=str1.length();
StringBuffer str3=new StringBuffer(str1);
while(i<len){
str3.append(str2);
i++;
}
System.out.print(str3+"\t");
}
}