实训总结(图书管理系统java)

实训总结(图书管理系统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");
	}
}
  • 19
    点赞
  • 206
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值