数据库期末设计——图书管理系统

 

目录

1.前置软件以及开发环境:  

2.开发过程讲解

代码环节:

数据库代码

 1.BookDao.java

2.BookTypeDao.java

3.UserDao.java

4.Book.java

5.BookType.java

6.User.java

7.DbUtil.java

8.Stringutil.java

9.BookAddInterFrm.java

10.BookManageInterFrm.java

11.BookTypeAddInterFrm.java

12.BookTypeManagerInterFrm.java

13.Java666interframe.java

14.Login.java

15.Mainframe.java

3.结果展示:

4.结尾体会心得:

5.网盘地址分享:


本次设计基于eclipse+Javaswing+windowBuilder+JDBC+mysql实现,我会从头到尾对整个实现过程进行详细的讲解,最后我也会献上我的全部文件希望对大家有所帮助!!

1.前置软件以及开发环境:  

安装流程我就不在这里多说了,网上都有,我这里将一些要点。

eclipse:博主选用的是2022-12的版本比较稳定,其他版本也可以,IDEA也是可以的,不是很建议用vscode,虽然集成但是终归没有专门的软件好使。

Java swing以及window Builder:这些都是插件,具体步骤可以去网上搜,Javaswing是一个库,安装完毕不需要管,这边着重讲一下window Builder。

首先就是安装:很多人安装的时候看软件右下角的进度条读完或者等不及了就直接退出eclipse了,这样子是不对的,一定要等安装成功后会有一个小弹窗出来让你重启eclipse,这样子才会成功,如果你要是安装失败了,要么重装eclipse,要么就打开eclipse等待一会儿,看看能否继续安装,博主就是第二种情况,打开后等待几分钟就安装好了。

然后是使用:

找到你们的项目位置,右键src选择新建,然后最底下有个选项“其他”,找到其中的windowBuilder就可以创建窗口了,具体可以自己操作下。

Mysql:这个应该不用我多说,大家都有安装的肯定,这边讲一下好用的操作端,博主用的是datagrip,但是这个要付费大家可以去搜搜破解版(博主自己就是破解的)。还有就是Navicat也是不错的,实际上都是可以的只要能够建立数据库即可。

注意:有很多小伙伴开始做的时候啥也不会,认为eclipse一定要连接数据库什么的,实际上完全不需要,这些我们会在代码里面进行操作。

2.开发过程讲解

首先我们需要建立至少四个包,如下图:

第一次写这个可能都不是很了解我就简单讲一下我的理解:

1.dao层,就是用于导入导出数据的,简单点来说我们要在里面写一些数据库的sql语句

2.model层,就是模型层,就是在里面写具体的实体类,再明白点就是你可以把你数据库里面的一个表看成一种类,几个表就建几个类。

3.util层,这个是工具层,你可以在里面写一些方法以便里面的使用,我后续也会进行讲解。

4.view层,这个就是视图层,你的窗口都写在这个里面,一般来说你的程序也会从这个里面的主界面开始运行。

5.至于image:这个就是用来存放你的一些图片方便调用

最后一点:一定要下载最后的那个引用的库,这边可以去网上找然后直接拖拽进去就好了,当然最后我也会将文件分享给大家,这个是数据库连接驱动,没下可连接不了哦。

代码环节:

数据库代码

首先先给大家一个数据库生成代码防止大家搞不出数据库:

下面没写创建数据库的语句,额就自己创建一下,数据库名称叫db_book,写错了代码可就跑不动了。

create table t_booktype
(
    id           int auto_increment
        primary key,
    bookTypeName varchar(20)   null,
    bookTpeDesc  varchar(1000) null
);

create table t_book
(
    id         int auto_increment
        primary key,
    bookName   varchar(20)   not null,
    author     varchar(20)   null,
    sex        varchar(10)   null,
    price      float         null,
    bookTypeId int           null,
    bookDesc   varchar(1000) null,
    constraint t_book_t_booktype_id_fk
        foreign key (bookTypeId) references t_booktype (id)
);

create table t_user
(
    id       int auto_increment
        primary key,
    username varchar(20) not null,
    password varchar(20) not null
);

 直接粘贴在你的数据库查询台里就行了,可以自己看看效果,数据不重要可以自己添加。

这个其实也不是很好讲,我就一个一个来了,先给大家看下整个代码的样子(如果大家最后发现字符集什么的不行导致乱码就建议直接粘贴代码跑一下比较好):

如果有需要特别注意的地方我会指出,其他的无脑复制即可。

 1.BookDao.java

package com.java1234.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.swing.text.html.HTMLDocument.HTMLReader.ParagraphAction;

import com.java1234.model.Book;
import com.java1234.util.Stringutil;

/**
 * book添加和删除
 * @author 46476
 *
 */
public class BookDao {
	
	/**
	 * 图书添加
	 * @param con
	 * @param book
	 * @return
	 * @throws Exception
	 */
	public int add(Connection con,Book book)throws Exception{
		String sql="insert into t_book values(null,?,?,?,?,?,?)";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setString(1, book.getBookName());
		pstmt.setString(2, book.getAuthor());
		pstmt.setString(3, book.getSex());
		pstmt.setFloat(4, book.getPrice());
		pstmt.setInt(5, book.getBookTypeId());
		pstmt.setString(6, book.getBookTypeDesc());
		return pstmt.executeUpdate();
	}
	
	/**
	 * 图书信息查询
	 * @param con
	 * @param book
	 * @return
	 * @throws Exception
	 */
	public ResultSet list(Connection con,Book book)throws Exception{
		StringBuffer sb=new StringBuffer("select * from t_book b,t_bookType bt where b.bookTypeId=bt.id");
		if(Stringutil.isNotEmpty(book.getBookName())) {
			sb.append(" and b.bookName like '%"+book.getBookName()+"%'");
		}
		if(Stringutil.isNotEmpty(book.getAuthor())) {
			sb.append(" and b.author like '%"+book.getAuthor()+"%'");
		}
		if(book.getBookTypeId()!=null&&book.getBookTypeId()!=-1) {
			sb.append(" and b.bookTypeId="+book.getBookTypeId());
		}
		PreparedStatement pstmt=con.prepareStatement(sb.toString());
		return pstmt.executeQuery();
	}
	
	
	/**
	 * 删除记录条数
	 * @param con
	 * @param id
	 * @return
	 * @throws Exception
	 */
	public int delete(Connection con,String id)throws Exception{
		String sql="delete from t_book where id=?";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setString(1, id);
		return pstmt.executeUpdate();
	}
	
	public int updata(Connection con,Book book)throws Exception {
		String sql="update t_book set bookName=?,author=?,sex=?,price=?,bookTypeId=?,bookDesc=? where id=?";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setString(1, book.getBookName());
		pstmt.setString(2, book.getAuthor());
		pstmt.setString(3, book.getSex());
		pstmt.setFloat(4, book.getPrice());
		pstmt.setInt(5, book.getBookTypeId());
		pstmt.setString(6, book.getBookTypeDesc());//这边之前写错了应该是bookDesc
		pstmt.setInt(7, book.getId());
		return pstmt.executeUpdate();
	}
	
	
	/**
	 * 指定图书类别下是否存在图书
	 * @param con
	 * @param bookTypeId
	 * @return
	 * @throws Exception
	 */
	public boolean existBook(Connection con,String bookTypeId)throws Exception {
		String sql="select * from t_book where bookTypeId=?";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setString(1, bookTypeId);
		ResultSet rs=pstmt.executeQuery();
		return rs.next();
	}
}

2.BookTypeDao.java

package com.java1234.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.java1234.model.BookType;
import com.java1234.util.Stringutil;

/**
 * 图书类别dao类
 * @author 46476
 *
 */
public class BookTypeDao {
	/**
	 * 图书类别添加
	 * @param con
	 * @param bookType
	 * @return
	 * @throws Exception
	 */
	public int add(Connection con,BookType bookType)throws Exception{
		String sql="insert into t_bookType value(null,?,?)";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setString(1, bookType.getBookTypeName());
		pstmt.setString(2,bookType.getBookTypeDesc() );
		return pstmt.executeUpdate();
	}
	
	/**
	 * 查询图书类别
	 * @param con
	 * @param bookType
	 * @return
	 * @throws Exception
	 */
	public ResultSet list(Connection con,BookType bookType)throws Exception{
		StringBuffer sb=new StringBuffer("select * from t_bookType");
		if(Stringutil.isNotEmpty(bookType.getBookTypeName())) {
			sb.append(" and bookTypeName like '%"+bookType.getBookTypeName()+"%'");
		}
		PreparedStatement pstmt=con.prepareStatement(sb.toString().replaceFirst("and", "where"));
		return pstmt.executeQuery();
	}
	
	
	/**
	 * 删除图书类别
	 * @param con
	 * @param id
	 * @return
	 * @throws Exception
	 */
	public int delete(Connection con,String id)throws Exception{
		String sql="delete from t_bookType where id=?";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setString(1, id);
		return pstmt.executeUpdate();
	}
	
	
	/**
	 * 跟新图书类别
	 * @param con
	 * @param bookType
	 * @return
	 * @throws Exception
	 */
	public int updata(Connection con,BookType bookType)throws Exception{
		String sql="update t_bookType set bookTypeName=?,bookTpeDesc=? where id=?";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setString(1, bookType.getBookTypeName());
		pstmt.setString(2, bookType.getBookTypeDesc());
		pstmt.setInt(3, bookType.getId());
		return pstmt.executeUpdate();
	}
}

3.UserDao.java

package com.java1234.dao;

import java.nio.channels.SelectableChannel;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.java1234.model.User;

/**
 * 用户dao类
 * @author 46476
 *
 */
public class UserDao {
	public User login(Connection con,User user)throws Exception {
		User resultUser=null;
		String sql="select * from t_user where userName=? and password=?";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setString(1, user.getUserNameString());
		pstmt.setString(2, user.getPasswordString());
		ResultSet rs=pstmt.executeQuery();
		if(rs.next()) {
			resultUser=new User();
			resultUser.setId(rs.getInt("id"));
			resultUser.setUserNameString(rs.getString("userName"));
			resultUser.setPasswordString(rs.getString("password"));
		}
		return resultUser;
	}
}

4.Book.java

package com.java1234.model;

import java.sql.Connection;

import com.mysql.cj.protocol.a.NativeConstants.StringLengthDataType;

public class Book {
	private int id;
	private String bookName;
	private String author;
	private String sex;
	private Float price;
	private Integer bookTypeId;
	private String bookTypeName;
	private String bookTypeDesc;
	
	
	public Book() {
		super();
		// TODO 自动生成的构造函数存根
	}
	
	
	
	public Book(int id, String bookName, String author, String sex, Float price, Integer bookTypeId,
			String bookTypeDesc) {
		super();
		this.id = id;
		this.bookName = bookName;
		this.author = author;
		this.sex = sex;
		this.price = price;
		this.bookTypeId = bookTypeId;
		this.bookTypeDesc = bookTypeDesc;
	}



	public Book(String bookName, String author, Integer bookTypeId) {
		super();
		this.bookName = bookName;
		this.author = author;
		this.bookTypeId = bookTypeId;
	}

	public Book(String bookName, String author, String sex, Float price, Integer bookTypeId, String bookTypeDesc) {
		super();
		this.bookName = bookName;
		this.author = author;
		this.sex = sex;
		this.price = price;
		this.bookTypeId = bookTypeId;
		this.bookTypeDesc = bookTypeDesc;
	}



	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Float getPrice() {
		return price;
	}
	public void setPrice(Float price) {
		this.price = price;
	}
	public Integer getBookTypeId() {
		return bookTypeId;
	}
	public void setBookTypeId(Integer bookTypeId) {
		this.bookTypeId = bookTypeId;
	}
	public String getBookTypeName() {
		return bookTypeName;
	}
	public void setBookTypeName(String bookTypeName) {
		this.bookTypeName = bookTypeName;
	}
	public String getBookTypeDesc() {
		return bookTypeDesc;
	}
	public void setBookTypeDesc(String bookTypeDesc) {
		this.bookTypeDesc = bookTypeDesc;
	}
	
}

5.BookType.java

package com.java1234.model;
/**
 * 图书类别实体
 * @author 46476
 *
 */
public class BookType {
	private int id;//编号
	private String bookTypeName;//图书类别名称
	private String bookTypeDesc;//图书备注
	public BookType() {
		super();
	}
	
	public BookType(int id, String bookTypeName, String bookTypeDesc) {
		super();
		this.id = id;
		this.bookTypeName = bookTypeName;
		this.bookTypeDesc = bookTypeDesc;
	}

	public BookType(String bookTypeName,String bookTypeDesc) {
		// TODO 自动生成的构造函数存根
		this.bookTypeName=bookTypeName;
		this.bookTypeDesc=bookTypeDesc;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getBookTypeName() {
		return bookTypeName;
	}
	public void setBookTypeName(String bookTypeName) {
		this.bookTypeName = bookTypeName;
	}
	public String getBookTypeDesc() {
		return bookTypeDesc;
	}
	public void setBookTypeDesc(String bookTypeDesc) {
		this.bookTypeDesc = bookTypeDesc;
	}
	public String toString() {
		return this.bookTypeName;
	}
	
}

6.User.java

package com.java1234.model;
/**
 * 用户实体
 * @author 46476
 *
 */
public class User {
	private int id;//编号
	private String userNameString;//用户名
	private String passwordString;//密码
	
	
	
	public User() {
		super();
	}
	
	
	public User(String userNameString, String passwordString) {
		super();
		this.userNameString = userNameString;
		this.passwordString = passwordString;
	}


	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUserNameString() {
		return userNameString;
	}
	public void setUserNameString(String userNameString) {
		this.userNameString = userNameString;
	}
	public String getPasswordString() {
		return passwordString;
	}
	public void setPasswordString(String passwordString) {
		this.passwordString = passwordString;
	}
	
}

7.DbUtil.java

这里注意啦!!!!!!!!!!!!!!!

这里面的用户名以及密码都是要填写自己的数据库用户名以及密码,也就是我打xxxx的地方。

package com.java1234.util;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 * 数据库工具类
 * @author 46476
 *
 */
public class DbUtil {
	private String dbUrl="jdbc:mysql://localhost:3306/db_book?useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT%2B8";//数据库地址
	private String dbUserName="xxxxxx";//用户名
	private String dbPassword="xxxxxxxx";//密码
	private String jdbcNameString="com.mysql.cj.jdbc.Driver";//驱动名称
	
	public Connection getCon()throws Exception{
		Class.forName(jdbcNameString);
		Connection con=DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
		return con;
	}
	
	public void closeCon(Connection con)throws Exception{
		if(con!=null)
			con.close();
	}
	
	public static void main(String[] args) {
		DbUtil dbUtil=new DbUtil();
		try {
			dbUtil.getCon();
			System.out.println("数据库连接成功");
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			System.out.println("连接失败");
		}
	}
}


8.Stringutil.java

package com.java1234.util;
/**
 * 字符串工具类
 * @author 46476
 *
 */
public class S
我们设计的网上购物系统主要包括用户管理、商品管理、订单管理、支付管理和数据分析五大模块。首先,用户管理模块包括用户注册、登录、个人信息管理等功能,用户可以通过注册登录系统并管理个人信息。其次,商品管理模块包括商品添加、删除、修改、查询等功能,管理员可以对系统中的商品进行管理和维护。再次,订单管理模块包括订单提交、取消、支付、查询等功能,用户可以在系统中进行商品的下单和支付操作。另外,支付管理模块包括支付方式选择、支付金额计算等功能,用户可以在系统中选择合适的支付方式完成订单支付。最后,数据分析模块包括用户行为分析、商品销售分析等功能,管理员可以通过系统收集的数据进行相关的分析和决策。 在数据库设计方面,我们将采用MySQL数据库管理系统,根据系统的需求设计相应的数据库结构,利用表格存储用户信息、商品信息、订单信息等数据,并通过SQL语言进行数据的增删改查操作。我们将通过设计合理的数据库结构和优化的查询语句来提高系统的性能和稳定性,确保系统能够高效地存储和管理大量的数据。 此外,我们还将考虑系统的安全性和可扩展性,通过合理的权限管理和加密技术来保护用户和系统的数据安全,以及利用合适的分布式架构来支持系统的扩展和升级。通过这些措施,我们将确保系统能够稳定可靠地运行,同时满足用户的需求和未来的发展要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值