(netbeans+MySQL)搭建图书管理系统(较详细)

项目要求

要求编写符合下列要求的网站
在这里插入图片描述

注意事项:
1.表格中的数据是显示数据库中的,需要通过JavaWeb以及sql语句调用数据库
2.添加图书信息,修改以及删除都为超链接,分别跳转到add.jsp、edit.jsp以及del.jsp


需要创建的文件:

  • booksql.sql:建立数据库和表
  • index.jsp:该系统的主页面,展示并管理信息
  • add.jsp:添加书籍信息
  • edit.jsp:修改书籍信息
  • del.jsp:删除书籍信息
  • createbook.jsp:进行信息中转
  • Book.Java:存储书籍信息
  • BookDao.Java:对图书数据库信息操作
  • BookSave.Java:判断对数据更新是否成功

搭建步骤

1.建立并连接数据库

注意事项:需要将相关资源导入到库中

建立booksql.sql创建数据库

create database book;
//建立名为book的数据库
use  book;
create table book(title char(20) primary key not null,author char(20) not null,publish char(20) not null,price double not null)charset=utf8
//建立包含书名(主键)、作者、出版社、价格的Book表

连接数据库:
右键点击数据库"新建连接"->驱动程序选择MySQL ->选择所建数据库进行连接

在这里插入图片描述


2.创建Book.Java存储书籍信息

该文件为Javabean文件,右键新建Java文件即可

public class Book {
    private String title;
    private String author;
    private String publish;
    private double price;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getPublish() {
        return publish;
    }

    public void setPublish(String publish) {
        this.publish = publish;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Book{" + "title=" + title + ", author=" + author + ", publish=" + publish + ", price=" + price + '}';
    }   
}

3.创建BookDao.Java对数据库信息进行操作

该文件为Javabean文件

package Book;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class BookDao {
    private String driver;
    private String dburl;
    private Connection con=null;
    private String user="root";
    private String password="lhw12138";
    
    public BookDao() {
        driver="com.mysql.jdbc.Driver";
        dburl="jdbc:mysql://localhost:3306/book";
        
    }

构造函数,用于获得数据库驱动以及数据库信息

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public String getDburl() {
        return dburl;
    }

    public void setDburl(String dburl) {
        this.dburl = dburl;
    }

    public Connection getCon() {
        
        try{
            Class.forName(driver);
        }catch(ClassNotFoundException ex){
            System.out.println("驱动程序加载失败!");
            return con;
        }
        try{
            con=DriverManager.getConnection(dburl,user,password);
        }catch(SQLException ex){
             System.out.println("数据库失败!");
        }
        
        return con;
    }
    public void setCon(Connection con) {
        this.con = con;
    }

获得数据库连接,第一个try catch获得驱动程序,第二个获得数据库连接

    public int saveBook(Book b){
        String sql="insert into book values(?,?,?,?)";
        int k=0;
        try{
            if(con!=null){
                PreparedStatement pst=con.prepareStatement(sql);
                pst.setString(1,b.getTitle());
                pst.setString(2,b.getAuthor());
                pst.setString(3,b.getPublish());
                pst.setDouble(4, b.getPrice());
                k=pst.executeUpdate();
                pst.close();
            }            
        }catch(SQLException ex){
            System.out.println("插入(error from BookDao)");
        }
        return k;
    }

保存书籍数据

    public ResultSet searchBook(String sql){
        ResultSet rs=null;
        try{
            if(con!=null){
                Statement st=con.createStatement();
                rs=st.executeQuery(sql);
            }
                
        }catch(SQLException ex){
            System.out.println("查询失败(error from BookDao)");
        }
        
        return rs;
    }

搜索数据库内图书信息

 public int updatebook(Book b,String oldtitle){
     int k=0;
     try{
         if(con!=null){
             Statement st=con.createStatement();
             k+=st.executeUpdate("update book set title='"+b.getTitle()+"'where title='"+oldtitle+"'");
             String title=b.getTitle();
 			//先修改书名,然后再根据新的书名对其余信息进行修改
             k+=st.executeUpdate("update book set author='"+b.getAuthor()+"'where title='"+title+"'");
             k+=st.executeUpdate("update book set publish='"+b.getPublish()+"'where title='"+title+"'");
             k+=st.executeUpdate("update book set price='"+b.getPrice()+"'where title='"+title+"'");
             st.close();
         }
     }catch(SQLException ex){
         System.out.print("修改失败(error from BookDao)");
     }
     return k;
 }
}

根据主键(书名)对该图书信息进行修改,并更新数据库


4.创建add.jsp对数据库数据进行添加

 <body>
        <form action="createBook.jsp?flag=add" method="post">
            书名:<input type="text" name="title"><br>
            作者:<input type="text" name="author"><br>
            出版社:<input type="text" name="publish"><br>
            价格:<input type="text" name="price"><br>
            <input type="submit" value="提交">
        </form>
    </body>

将文本框内读取的数据发送给createBook.jsp

flag标记:

add.jsp和edit.jsp都会将数据传给createBook.jsp,为了对二者传的数据进行区分,设置不同的flag值,通过if语句进行判断执行哪种操作


5.创建index.jsp管理系统主页面

css:

<style>
            h2,h3{
                color:blue;
                text-align: center;
            }
            table{
                margin: 0px auto
                //表格居中
            }
            .a1{
                color: blue;
                background-color: #999999;
                
            }
            .a2{
                background-color: #cccccc;
            }
        </style>

body:

<body>
        <h2>图书管理系统</h2>
        <h3><a href="add.jsp">添加图书信息</a></h3>
          <%
            BookDao bd=new BookDao();
            bd.getCon();
            ResultSet rs=bd.searchBook("select * from book");
            
            ResultSetMetaData rsm=rs.getMetaData();
            out.print("<table border=1>");
                out.print("<tr class='a1'>");
                    out.print("<td>");
                        out.print("书名");
                    out.print("</td>");
                    out.print("<td>");
                        out.print("作者");
                    out.print("</td>");
                    out.print("<td>");
                        out.print("出版社");
                    out.print("</td>");
                    out.print("<td>");
                        out.print("价格");
                    out.print("</td>");
                    out.print("<td >");
                        out.print("管理");
                    out.print("</td>");
                out.print("</tr>");
            while(rs.next()){
                out.print("<tr class='a2'>");
                for(int i=1;i<=rsm.getColumnCount();i++){
                    out.print("<td>");
                    out.print(rs.getString(rsm.getColumnName(i))+"&nbsp;&nbsp;");
                    //按列输出数据库内的图书信息
                    out.print("</td>");
                }
                out.print("<td><a href=edit.jsp?sm="+rs.getString(1)+">修改</a>");
                out.print("&nbsp;<a href=del.jsp?sm="+rs.getString(1)+">删除</a></td>");
                out.print("</tr>");
                //将该行的图书书名发送,根据该书名执行相关操作
            }
            
            rs.close();
            out.print("</table>");
        %>
    </body>

6.创建edit.jsp对数据库数据进行修改

<body>
         <%
            request.setCharacterEncoding("UTF-8");
            //将utf-8导入,使得数据库可以识别中文字符
            String title=request.getParameter("sm");
            //获得从index.jsp发送的title值
            BookDao bd=new BookDao();
            bd.getCon();
            ResultSet rs=bd.searchBook("select * from book where title='"+title+"'");
            if(rs.next()){
        %>
        <form action="createBook.jsp?flag=edit&title=<%=title%>" method="post">
        //将获取的title值发送给createBook.jsp
            书名:<input type="text" name="title" value="<%=rs.getString(1)%>"/><br>
            作者:<input type="text" name="author" value="<%=rs.getString(2)%>"/><br>
            出版社:<input type="text" name="publish" value="<%=rs.getString(3)%>"/><br>
            价格:<input type="text" name="price" value="<%=rs.getDouble(4)%>"/><br>
            <input type="submit" value="保存">
        </form>
             <%
                 }
                else{
                    out.print("未找到要修改的图书");
                    out.print("<br><a href=index.jsp>返回上一步</a>");
                }
             %>
    </body>

7.创建del.jsp对数据库的信息进行删除

 <body>
        <%
            request.setCharacterEncoding("UTF-8");
            String title=request.getParameter("sm");
            BookDao bd=new BookDao();
            Connection cn=bd.getCon();
            Statement st=cn.createStatement();
            int k=st.executeUpdate("delete from book where title='"+title+"'");
            if(k>0){
                 out.print("删除成功");
                 out.print("<br><a href=index.jsp>继续操作</a>");
            }
            else{
                out.print("删除失败");
                out.print("<br><a href=index.jsp>返回上一步</a>");
                         }
            st.close();
        %>
    </body>

8.创建createBook.jsp进行信息中转

jsp:useBean

  • 表示装载一个将在JSP页面中使用的JavaBean
  • id表示定义的JavaBean的唯一标识,class表示定义的JavaBean的类。定义了一个JavaBean就可以为其属性赋值了

jsp:setProperty

  • 与jsp:useBean搭配使用,为JavaBean的属性进行赋值
  • property = "*"表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。
 <body>
        <%
            request.setCharacterEncoding("utf-8");
        %>
        <jsp:useBean id="book" class="Book.Book"/>
        //将Book包下的Book.java导入该页面
        <jsp:setProperty name="book" property="*"/>
        //使用book类赋值,id和name需相同
       <%
            request.setAttribute("msg", book);
            String flag=request.getParameter("flag");
            String title=request.getParameter("title");
            //获取从add和edit传的值
       %>
       <jsp:forward page="bookSave">
           <jsp:param name="flag" value="<%=flag%>"/>
           <jsp:param name="oldtitle" value="<%=title%>"/>
           //将获取的值发送给bookSave
       </jsp:forward>
        
    </body>

9.创建BookSave.Java对数据库操作是否成功进行判断

由于代码较多,只截取更改后的函数代码

public class BookSave extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");

request.setCharacterEncoding(“UTF-8”)的作用是设置对客户端请求和数据库取值时的编码

response.setCharacterEncoding(“UTF-8”)的作用是指定服务器响应给浏览器的编码

        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
             Book bookmsg=(Book)request.getAttribute("msg");
             //用bookmsg接受createBook发送的Book类型的msg
             String flag=request.getParameter("flag");
             String oldtitle=(String)request.getParameter("oldtitle");
             System.out.println(oldtitle);
             BookDao bd=new BookDao();
             bd.getCon();
             if(flag.equals("add")){
                 int bc=bd.saveBook(bookmsg);
                 if(bc>0){
                     out.print("保存成功");
                     out.print("<br><a href=index.jsp>查看结果</a>");
                 }
                 else{
                     out.print("保存失败");
                     out.print("<br><a href=index.jsp>返回上一步</a>");
                 }
             }
             if(flag.equals("edit")){
                 int xg=bd.updatebook(bookmsg, oldtitle);
                 //调用BookDao里面的更新数据库函数
                 if(xg==4){
                     out.print("修改成功");
                     out.print("<br><a href=index.jsp>查看结果</a>");
                 }
                 else{
                     out.print("修改失败");
                     out.print("<br><a href=index.jsp>返回上一步</a>");
                 }
                             
             }
            
            }catch(Exception ex){
            out.println("所查图书不存在");
        }
         
    }
  • 14
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值