精华内容
下载资源
问答
  • 图书管理系统模块,通过模糊查询实现查找图书的功能 在数据库中建库建表 建立相关外键,画出er图。 使用代码实现过程(重点) 配置tomcat,导入相关jar包资源,配置resources环境,配置测试用的log4jproperties ### ...

    图书管理系统模块,通过模糊查询实现查找图书的功能

    在数据库中建库建表

    在这里插入图片描述
    建立相关外键,画出er图。

    使用代码实现过程(重点)

    配置tomcat,导入相关jar包资源,配置resources环境,配置测试用的log4jproperties

    ### 设置###
    log4j.rootLogger = debug,stdout,D,E
    
     输出信息到控制抬
    log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target = System.out
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
    
    输出DEBUG 级别以上的日志到=E://logs/error.log
    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.D.File = E://logs/log.log
    log4j.appender.D.Append = true
    log4j.appender.D.Threshold = DEBUG 
    log4j.appender.D.layout = org.apache.log4j.PatternLayout
    log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
    
     输出ERROR 级别以上的日志到=E://logs/error.log
    log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.E.File =E://logs/error.log 
    log4j.appender.E.Append = true
    log4j.appender.E.Threshold = ERROR 
    log4j.appender.E.layout = org.apache.log4j.PatternLayout
    log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
    

    配置database和mybatis-cfg.xml

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://192.168.56.101:3306/library
    user=kb07
    pwd=ok
    
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration PUBLIC
            "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <properties resource="database.properties"/>
        <typeAliases>
            <typeAlias type="cn.kgc.kb07.entity.User" alias="user"/>
            <typeAlias type="cn.kgc.kb07.entity.Books" alias="books"/>
        </typeAliases>
        <environments default="dev">
            <environment id="dev">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}"/>
                    <property name="url" value="${url}"/>
                    <property name="username" value="${user}"/>
                    <property name="password" value="${pwd}"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper class="cn.kgc.kb07.dao.UserDao"/>
            <mapper class="cn.kgc.kb07.dao.BooksDao"/>
        </mappers>
    </configuration>
    

    在src中分层处理,创建和数据库对应的实体类:

    package cn.kgc.kb07.entity;
    
    /**
     * @Author yanglitian
     * @Date 2020/6/15
     * @Description
     */
    public class Books {
        private int book_id;
        private String book_name;
        private double price;
        private int store;
        private String des;
        private int book_type;
        private String type_name;
    
        public String getType_name() {
            return type_name;
        }
    
        public void setType_name(String type_name) {
            this.type_name = type_name;
        }
    
        public int getBook_id() {
            return book_id;
        }
    
        public void setBook_id(int book_id) {
            this.book_id = book_id;
        }
    
        public String getBook_name() {
            return book_name;
        }
    
        public void setBook_name(String book_name) {
            this.book_name = book_name;
        }
    
        public double getPrice() {
            return price;
        }
    
        public void setPrice(double price) {
            this.price = price;
        }
    
        public int getStore() {
            return store;
        }
    
        public void setStore(int store) {
            this.store = store;
        }
    
        public String getDes() {
            return des;
        }
    
        public void setDes(String des) {
            this.des = des;
        }
    
        public int getBook_type() {
            return book_type;
        }
    
        public void setBook_type(int book_type) {
            this.book_type = book_type;
        }
    
        @Override
        public String toString() {
            return "Books{" +
                    "book_id=" + book_id +
                    ", book_name='" + book_name + '\'' +
                    ", price=" + price +
                    ", store=" + store +
                    ", des='" + des + '\'' +
                    ", book_type=" + book_type +
                    '}';
        }
    
        public Books() {
        }
    
        public Books(int book_id, String book_name, double price, int store, String des, int book_type) {
            this.book_id = book_id;
            this.book_name = book_name;
            this.price = price;
            this.store = store;
            this.des = des;
            this.book_type = book_type;
        }
    }
    
    
    package cn.kgc.kb07.entity;
    
    /**
     * @Author yanglitian
     * @Date 2020/6/15
     * @Description
     */
    public class User {
        private int user_id;
        private String user_name;
        private String user_type;
        private String user_phone;
    
        public int getUser_id() {
            return user_id;
        }
    
        public void setUser_id(int user_id) {
            this.user_id = user_id;
        }
    
        public String getUser_name() {
            return user_name;
        }
    
        public void setUser_name(String user_name) {
            this.user_name = user_name;
        }
    
        public String getUser_type() {
            return user_type;
        }
    
        public void setUser_type(String user_type) {
            this.user_type = user_type;
        }
    
        public String getUser_phone() {
            return user_phone;
        }
    
        public void setUser_phone(String user_phone) {
            this.user_phone = user_phone;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "user_id=" + user_id +
                    ", user_name='" + user_name + '\'' +
                    ", user_type='" + user_type + '\'' +
                    ", user_phone='" + user_phone + '\'' +
                    '}';
        }
    
    }
    
    

    创建BooksDao和他的映射文件

    package cn.kgc.kb07.dao;
    
    import cn.kgc.kb07.entity.Books;
    import org.apache.ibatis.annotations.Param;
    
    import java.util.List;
    
    public interface BooksDao {
        List<Books> quaryBooks(@Param("book_name") String book_name, @Param("type_name")String type_name);
    }
    
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC
            "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="cn.kgc.kb07.dao.BooksDao">
        <select id="quaryBooks" resultType="books">
            select b.*,t.type_name from books b ,books_type t where 1=1
            <if test="book_name!=null and book_name!='' ">
                and book_name like concat("%",#{book_name},"%")
            </if>
            <if test="type_name!=null and type_name!=''">
                and type_name=#{type_name}
            </if>
            ;
        </select>
    </mapper>
    

    创建工具类,将getSQLSession的方法提炼出来,实现代码的可重用性

    package cn.kgc.kb07.util;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    /**
     * @Author yanglitian
     * @Date 2020/6/15
     * @Description
     */
    public class MapperConfg {
        public SqlSession getSession(){
            SqlSession session=null;
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            try {
                InputStream is= Resources.getResourceAsStream("mybatis-cfg.xml");
                SqlSessionFactory factory=builder.build(is);
                 session=factory.openSession();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return session;
        }
    }
    
    

    在service中调用dao层的方法,实现业务逻辑

    package cn.kgc.kb07.service;
    
    import cn.kgc.kb07.dao.BooksDao;
    import cn.kgc.kb07.entity.Books;
    import cn.kgc.kb07.util.MapperConfg;
    import org.apache.ibatis.session.SqlSession;
    
    import java.util.List;
    
    /**
     * @Author yanglitian
     * @Date 2020/6/15
     * @Description
     */
    public class BooksServices {
        public List<Books> queryBooks(String book_name, String type_name) {
            MapperConfg mapperConfg=new MapperConfg();
            SqlSession session=mapperConfg.getSession();
            return session.getMapper(BooksDao.class).quaryBooks(book_name,type_name);
        }
    }
    
    
    package cn.kgc.kb07.service;
    
    import cn.kgc.kb07.dao.UserDao;
    import cn.kgc.kb07.entity.User;
    import cn.kgc.kb07.util.MapperConfg;
    import org.apache.ibatis.session.SqlSession;
    
    /**
     * @Author yanglitian
     * @Date 2020/6/15
     * @Description
     */
    public class UserServices {
        public User getUser(String name){
            MapperConfg m=new MapperConfg();
            SqlSession session=m.getSession();
            User user=session.getMapper(UserDao.class).getUserType(name);
            return user;
    
        }
    }
    
    

    java部分写完之后,因为涉及与页面的交互,所以需要一个中转站servlet,接收页面传递来的请求,然后返回出去

    在web里先设计一个index.jsp 接收请求,这边就是一个简单的表单,实现的逻辑就是,通过表单把数据上传,之后根据对应的业务逻辑,返回相应的结果

    <%--
      Created by IntelliJ IDEA.
      User: 86185
      Date: 2020/6/15
      Time: 11:01
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>登录页面</title>
      </head>
      <body>
      <p><h1>欢迎登录图书馆系统</h1></p>
      <%
        Object o=session.getAttribute("msg");
        if(o!=null){
          out.print(o);
        }
      %>
    
    
      <form action="login.do" method="post">
        <p>姓名 <input type="text" name="name"></p>
        <input type="submit" value="登录">
      </form>
      </body>
    </html>
    
    
    <%--
      Created by IntelliJ IDEA.
      User: 86185
      Date: 2020/6/15
      Time: 11:47
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <p><h1>欢迎学生登录</h1></p>
    <form action="querybooks.do" method="get">
        图书名:<input type="text" name="book_name">图书类型:<input type="text" name="type_name">
        <input type="submit" value="点击查询">
    </form>
    <hr/>
    <table>
        <tr>
            <th>编号</th>
            <th>书名</th>
            <th>价格</th>
            <th>库存</th>
            <th>简介</th>
            <th>类型</th>
        </tr>
    
        <c:if test="${books!=null}">
        <c:forEach items="${books}" var="user">
            <tr>
                <td>${user.book_id}</td>
                <td>${user.book_name}</td>
                <td>${user.price}</td>
                <td>${user.store}</td>
                <td>${user.des}</td>
                <td>${user.type_name}</td>
            </tr>
        </c:forEach>
        </c:if>
    
    </table>
    
    </body>
    </html>
    
    

    在web.xml中配置环境

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>login</servlet-name>
            <servlet-class>cn.kgc.kb07.servlet.UserServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>login</servlet-name>
            <url-pattern>/login.do</url-pattern>
        </servlet-mapping>
        <servlet>
            <servlet-name>purchase</servlet-name>
            <servlet-class>cn.kgc.kb07.servlet.PurchaseServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>purchase</servlet-name>
            <url-pattern>/purchase.do</url-pattern>
        </servlet-mapping>
        <servlet>
            <servlet-name>query</servlet-name>
            <servlet-class>cn.kgc.kb07.servlet.QueryBooksServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>query</servlet-name>
            <url-pattern>/querybooks.do</url-pattern>
        </servlet-mapping>
    </web-app>
    

    用servlet连接前端和后端

    package cn.kgc.kb07.servlet;
    
    import cn.kgc.kb07.entity.Books;
    import cn.kgc.kb07.entity.User;
    import cn.kgc.kb07.service.BooksServices;
    import cn.kgc.kb07.service.UserServices;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.List;
    
    /**
     * @Author yanglitian
     * @Date 2020/6/15
     * @Description
     */
    public class UserServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doGet(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.setCharacterEncoding("utf-8");
            resp.setCharacterEncoding("utf-8");
            String name=req.getParameter("name");
            UserServices services=new UserServices();
            User user=services.getUser(name);
            if(user!=null){
                if(user.getUser_type().equals("管理员")){
                    req.getSession().setAttribute("user",user);
                    resp.sendRedirect("adminlogin.jsp");
                }else if(user.getUser_type().equals("学生")){
                    req.getSession().setAttribute("user",user);
    
                    String book_name=req.getParameter("book_name");
                    String type_name=req.getParameter("type_name");
                    BooksServices service=new BooksServices();
                    List<Books> booksList= service.queryBooks(book_name,type_name);
                        req.getSession().setAttribute("books", booksList);
                        resp.sendRedirect("studentlogin.jsp");
    
    
                }else{
                    req.getSession().setAttribute("msg","没有该用户信息,请重新确认后登录");
                    resp.sendRedirect("index.jsp");
                }
            }else{
                req.getSession().setAttribute("msg","没有该用户信息,请重新确认后登录");
                resp.sendRedirect("index.jsp");
            }
    
    
    
        }
    }
    
    
    package cn.kgc.kb07.servlet;
    
    import cn.kgc.kb07.entity.Books;
    import cn.kgc.kb07.service.BooksServices;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.List;
    
    /**
     * @Author yanglitian
     * @Date 2020/6/15
     * @Description
     */
    public class QueryBooksServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String book_name=req.getParameter("book_name");
            String type_name=req.getParameter("type_name");
            BooksServices services=new BooksServices();
            List<Books> booksList= services.queryBooks(book_name,type_name);
    
                req.getSession().setAttribute("books",booksList);
                resp.sendRedirect("studentlogin.jsp");
    
        }
    }
    
    
    展开全文
  • 图书管理系统的管理员子模块的详细设计! 管理员系统模块是用来对管理员和图书的信息进行修改、删除和添加等业务,还包括退出本系统。下面将进行一一说明。 1.1登录功能描述 用户使用管理员系统需要使用事先...
  • 我这个博文怎么要审核那么久,管理员哥哥 图书管理 读者管理 借阅管理 系统设置 那么系统可以按逐个功能模块的去分析构建。 从图书管理开始。

    首先我要构造一个导航条,上面需要有图书馆后台能够管理的所有功能模块。

    从最基本的开始,导航条需要有读者管理、图书管理,这是两种客观对象。由两种客观对象之间的关系,又产生了图书借阅管理,最后还要有一个都会有的系统设置。

    所以基本的导航应该是如下:

    图书管理 读者管理 借阅管理 系统设置


    那么系统可以按逐个功能模块的去分析构建。

    从图书管理开始。

    图书管理主要是用来统计存了多少本什么类型的书。也就是说,要维护一个由专门保存图书记录的数据表。

    而对这个数据库的增删改查,就分别形成了,添加书目、删除书目、修改书目、查询书目四个功能模块。

    添加书目开始,当然需要一个独立的页面。因为要输入的内容太多了。

    而删除书目,则可以在主页中直接实现。

    修改书目也需要一个独立的页面。

    查询可以在主页中直接实现。

    再具体到添加书目的实现。

    这个独立页面就相当于书目的注册页面了。

    这个时候需要同时确定这个数据表的表结构了。

    那么如何确定哪些关键字需要存储呢?

    当然是需要被使用到的字段。

    那么使用者有两类人。

    第一类是读者,读者不管是借书还是还书都只需要书名、作者、出版时间就可以了。

    第二类是图书馆管理员,管理员会增加和删除书库,可用编号来确定每一本书,即条形码

    当然分下来书的基数太大了,所以我们可以很自然的对图书进行分类管理,也就是加一个图书类型字段。有时候可以视情况而定,看需不需要在分类里再增加子类。

    好的,暂且确定下来的基本表结构为:

    bookname author printtime barcode booktype
    char(100) char(100) date() int(20) char(100)

    (数据类型是瞎定的,有待优化。)

    创建的时候会发现还需要确定一个主键,主键必须要能唯一确定一项表内容,暂时定条形码吧。这个是肯定可以的。

    create table books(
     bookname varchar(100),
     author varchar(100),
     printtime date,
     barcode primary key not null,
     booktype varchar(100));

    OK,表创建好了,下一步是创建一个提交的页面。命名为books_add.php

    <html>
    	<head>
    		<title>添加书目信息</title>
    	</head>
    	<body>
    		<form action = "books_add_ok.php" method = "POST">
    		<label>书名</label>
    		<input type = "text" name = "bookname"></input></br>
    		<label>作者</label>
    		<input type = "text" name = "author"></input></br>
    		<label>出版时间</label>
    		<input type = "text" name = "printtime"></input></br>
    		<label>条形码</label>
    		<input type = "text" name = "barcode"></input></br>
    		<label>书目类型</label>
    		<input type = "text" name = "bookname"></input></br>
    		<button type = "submit" >提交</button>
    	</body>
    </html>

    ok,一个不能再简单的表单好了。

    出现了一个问题,php的插入代码其实我可以在本页内就直接实现。

    那么要不要Post到其他php文件还是直接在本页内实现呢?

    手上的案例是分离的,也许是因为前后代码分离更方便阅读的原则吧。

    那我们也这样咯。需要一个books_insert.php文件。

    这个时候发现一个问题,光看文件名books_insert与books_add完全看不出是什么关系啊。这个命名不好。

    我需要能从文件名上就能看出彼此逻辑关系的命名方式。所以,books_insert.php改名为books_add_ok.php。

    <?php
    	include "conn/conn.php";
    	$bookname = $_POST['bookname'];
    	$author = $_POST['author'];
    	$printtime = $_POST['printtime'];
    	$barcode = $_POST['barcode'];
    	$booktype = $_POST['booktype'];
    	mysql_query("insert into books (bookname,author,printtime,barcode,booktype)values('$bookname','$author','$printtime','$barcode','$booktype')");
    ?>
    ok,还需要一个链接数据库的文件,conn/conn.php;

    <?php
    	$con = mysql_connect("localhost","root","") or die(mysql.error());
    	mysql_select_db("mylibrary",$con);
    	mysql_query("set names gb2312");
    ?>
    Ok,整个后台已经完成了,我们迫不及待的要测试一下了!



    测试成功了!不过以上都是基础,没有做任何程序健壮性方面的改进。不过我们先整体搭建框架,后面再做这些细化工作吧。

    下一步是修改模块。

    修改跟添加非常类似。甚至可以直接采用添加模板稍微修改一个title就行了啊!

    为了偷懒我决定这么做了。

    靠,不行。我不能全部字段都重新写啊,那跟添加没区别了,我至少得确定一个字段,然后修改其他字段,这才叫修改啊。

    选中一个字段提交修改表单-〉查询出该条记录-〉更新修改字段。

    Ok,我们先考虑实现第一步,如何实选中一个字段提交修改表单?

    显然,我们需要把所有书目列出来啊。那么做一个页面,列出所有书目。

    Ok,books.php

    <html>
    	<head>
    		<title>图书管理</title>
    	</head>
    	<body>
    		<table>
    			<tr>
    				<th>书名</th>
    				<th>作者</th>
    				<th>出版时间</th>
    				<th>条形码</th>
    				<th>书目类型</th>
    				<th>操作设置</th>
    			</tr>
    			<?php
    				include "conn/conn.php";
    				$sql = mysql_query("select * from books;");
    				$info = mysql_fetch_array($sql);
    				if($info == false){
    					echo "No books!";
    				}else{
    				do{
    			?>
    			<tr>
    				<td><?php echo $info['bookname'];?></td>
    				<td><?php echo $info['author'];?></td>
    				<td><?php echo $info['printtime'];?></td>
    				<td><?php echo $info['barcode'];?></td>
    				<td><?php echo $info['booktype'];?></td>
    				<td><a href = "books_modify.php?barcode=<?php echo $info['barcode']?>">
    				修改</a></td>
    				<td><a href = "books_delete.php?barcode=<?php echo $info['barcode']?>">删除</a></td>
    				<!--选中某一元素,只需要在本轮遍历的时候输出他的key就可以了,这次没有通过表单提交,而是直接通过url传递参数。获取则需要使用$_GET['传递值']-->
    			</tr>
    			<?php
    				}while($info = mysql_fetch_array($sql));  //误写成了while(mysql_fetch_array($sql));这样不会遍历,只会每次都输出第一组数据.
    				}
    			?>
    		</table>
    	</body>
    </html>

    OK,其中采用了url来传递被选中的值。测试了一下,我们可以点击修改按钮,然后就跳到books_modify.php页面,同时参数barcode也被传过去了

    下面是books_modify.php的代码

    <html>
    	<head>
    		<title>修改书目信息</title>
    	</head>
    	<body>	
    		<?php
    			$barcode = $_GET['barcode'];
    			include "conn/conn.php";
    			$sql = mysql_query("select * from books where barcode = $barcode");
    			$info = mysql_fetch_array($sql)//即便我只查一条,我也用这个方法了。
    		?>
    		<form action = "books_modify_ok.php" method = "POST">
    		<label>书名</label><input type ="text" name ="bookname" value = "<?php echo $info['booktype'];?>"></br>
    		<label>作者</label>
    		<input type = "text" name = "author" value = "<?php echo $info['author'];?>"></input></br>
    		<label>出版时间</label>
    		<input type = "text" name = "printtime" value = "<?php echo $info['printtime'];?>"></input></br>
    		<label>条形码</label>
    		<input type = "text" name = "barcode" value = "<?php echo $info['barcode'];?>"></input></br>
    		<label>书目类型</label>
    		<input type = "text" name = "bookname" value = <?php echo $info['booktype'];?>></input></br>
    		<button type = "submit" >提交</button>
    	</body>
    </html>

    通过$_GET['barcode']获取了传递过来的barcode值,然后我查询这条记录的其他内容,将其作为默认显示(设置为input中的value的值)。

    然后用户修改内容之后,点击提交,我们就调转到了books_modify_ok.php的后台功能实现页面了。

    在这之前,需要明确一个问题。

    修改,是我选中一个记录之后,去修改这个记录的字段。

    那么有两个问题:第一,我通过什么字段来选中这条记录呢?第二,我能修改哪些字段?

    如果我都能修改我选择的字段,那就不叫修改了。那是新建啊!

    所以我必须要用一个字段来锁定他能修改的内容,不能随便篡改。这个字段必须具备唯一性。

    书名可以吗?说明如果唯一的话,是最好的啊。

    那么实际情况的修改图书信息是怎样的呢?

    我手上的这个图书馆的例子,是根据一个隐式的id作为主键来确认的,如果是这样的话,那完全可以可以当作新建功能来用啊。

    因为id属性不可见,你修改一个,跟创建一个。在看起来是一模一样的。

    所以我决定条形码。条形码可见且唯一。

    books_modify_ok.php代码如下:

    <?php
    <span>	</span>include "conn/conn.php";
    <span>	</span>$barcode = $_GET['barcode'];
    <span>	</span>$bookname = $_POST['bookname'];
    <span>	</span>$author = $_POST['author'];
    <span>	</span>$printtime = $_POST['printtime'];
    <span>	</span>$booktype = $_POST['booktype'];
    <span>	</span>$sql = mysql_query("update books set bookname = '$bookname',author = '$author',printtime = '$printtime',booktype = '$booktype' where barcode = '$barcode';");
    <span>	</span>echo "<script language='javascript'>alert('图书信息修改成功!');history.back();</script>";
    ?>

    OK,测试成功。

    下一步是处理删除。books_delete.php。

    <?php
    	$barcode = $_GET['barcode'];
    	include "conn/conn.php";
    	$sql = mysql_query("delete from books where barcode = '$barcode';");
    	echo "<script language='javascript'>alert('图书信息删除成功!');history.back();</script>";
    ?>
    OK。最后一个处理的是查询。

    查询有些特殊:

    第一,因为主页本身就是一个查询结果,也就说我的查询结果,会需要更改主页,也就是在本页做修改。

    第二,因为查询可以根据不同字段进行查询,所以需要在主页做一个选择标签来接受查询字段。

    同时,在主页加一个链接,作为增加书目的入口,一并对主页进行修改。

    修改之后的books.php如下

    <html>
    	<head>
    		<title>图书管理</title>
    	</head>
    	<body>
    		<form method = "POST" action = "">
    		<select name = "searchtype">
    			<option value = "bookname">书名</option>
    			<option value = "author">作者</option>
    			<option value = "printtime">出版时间</option>
    			<option value = "barcode">条形码</option>
    			<option value = "booktype">书目类型</option>
    		</select>
    		<input name = "key" type = "text"></input>
    		<button type = "submit">提交</button>
    		<a href = "books_add.php">增加书目</a>
    		</form>
    		<table>
    			<tr>
    				<th>书名</th>
    				<th>作者</th>
    				<th>出版时间</th>
    				<th>条形码</th>
    				<th>书目类型</th>
    				<th>操作设置</th>
    			</tr>
    			<?php
    				include "conn/conn.php";
    				$f = $_POST['searchtype'];
    				$key = $_POST['key'];
    				$sql = mysql_query("select * from books;");
    				$info = mysql_fetch_array($sql);
    				if($info == false)
    					echo "No books!";
    				else if($info == true){
    					if($key ==""){
    				do{
    			?>
    			<tr>
    				<td><?php echo $info['bookname'];?></td>
    				<td><?php echo $info['author'];?></td>
    				<td><?php echo $info['printtime'];?></td>
    				<td><?php echo $info['barcode'];?></td>
    				<td><?php echo $info['booktype'];?></td>
    				<td><a href = "books_modify.php?barcode=<?php echo $info['barcode']?>">
    				修改</a></td>
    				<td><a href = "books_delete.php?barcode=<?php echo $info['barcode']?>">删除</a></td>
    			</tr>
    			<?php
    				}while($info = mysql_fetch_array($sql)); 
    				}else{
    					$sql = mysql_query("select from books where '$f' like '$key$';");
    					$info = mysql_fetch_array($sql);
    					if($info == false)
    						echo "没有找到相关记录!";
    					else{
    				do{
    			?>
    			<tr>
    				<td><?php echo $info['bookname'];?></td>
    				<td><?php echo $info['author'];?></td>
    				<td><?php echo $info['printtime'];?></td>
    				<td><?php echo $info['barcode'];?></td>
    				<td><?php echo $info['booktype'];?></td>
    				<td><a href = "books_modify.php?barcode=<?php echo $info['barcode']?>">
    				修改</a></td>
    				<td><a href = "books_delete.php?barcode=<?php echo $info['barcode']?>">删除</a></td>
    			</tr>
    			<?php	
    				}while($info = mysql_fetch_array($sql));
    				}
    				}
    				}
    			?>
    		</table>
    	</body>
    </html>
    点进添加页面进行添加书目。这个时候发现,添加可以成功,但是都没有返回主页的选项。总不能一直添加吧,非常不合理。

    所以修改books_add.php页面,加入一个返回书目主页(books.php)的按钮。

    同理可知books_modify.php页面,也需要加入一个返回书目主页的按钮。

    以后所有的主页分出来的功能页面,都要考虑一个返回按钮。

    books_add.php

    <html>
    	<head>
    		<title>添加书目信息</title>
    	</head>
    	<body>
    		<form action = "books_add_ok.php" method = "POST">
    		<label>书名</label>
    		<input type = "text" name = "bookname"></input></br>
    		<label>作者</label>
    		<input type = "text" name = "author"></input></br>
    		<label>出版时间</label>
    		<input type = "text" name = "printtime"></input></br>
    		<label>条形码</label>
    		<input type = "text" name = "barcode"></input></br>
    		<label>书目类型</label>
    		<input type = "text" name = "booktype"></input></br>
    		<button type = "submit" >提交</button>
    		<input name="Submit2" type="button" value="返回" onClick="history.back();">
    	</body>
    </html>

    books_modify.php

    <html>
    	<head>
    		<title>修改书目信息</title>
    	</head>
    	<body>	
    		<?php
    			include "conn/conn.php";
    			$barcode = $_GET['barcode'];
    			$sql = mysql_query("select * from books where barcode = $barcode");
    			$info = mysql_fetch_array($sql)//即便我只查一条,我也用这个方法了。
    		?>
    		<form action = "books_modify_ok.php?barcode=<?php echo $barcode?>" method = "POST">
    		<label>书名</label>
    		<input type ="text" name ="bookname" value = "<?php echo $info['booktype'];?>"></input></br>
    		<label>作者</label>
    		<input type = "text" name = "author" value = "<?php echo $info['author'];?>"></input></br>
    		<label>出版时间</label>
    		<input type = "text" name = "printtime" value = "<?php echo $info['printtime'];?>"></input></br>
    		<label>条形码:<?php echo $info['barcode'];?></input></label></br>
    		<label>书目类型</label>
    		<input type = "text" name = "booktype" value = <?php echo $info['booktype'];?>></input></br>
    		<button type = "submit" >提交</button>
    		<input name="Submit2" type="button" value="返回" onClick="history.back();">
    		</form>
    	</body>
    </html>

    以上,基本实现了所有的关于书目管理的所有基本功能。


    展开全文
  • 图书管理系统是采用VISAUL BASIC6.0开发的一个数据库管理系统。系统开发的步骤:系统分析、系统设计、系统实现、系统维护。在系统分析中,先后用数据流图、数据字典、系统的功能结构图分析了系统所需的各种数据,展现...
  • Python中的图书管理系统

    千次阅读 2019-07-18 00:15:43
    利用Python写一个简易的图书管理系统 功能模块需求: 图书管理系统 1.查询图书 2.增加图书 3.借阅图书 4.归还图书 5.退出系统 书需求: 书名、作者、状态、位置 代码块: class Book(object): def __init__(self,...

    题目要求:
    利用Python写一个简易的图书管理系统

    功能模块需求:
    图书管理系统
    1.查询图书
    2.增加图书
    3.借阅图书
    4.归还图书
    5.退出系统

    书需求: 书名、作者、状态、位置

    代码块:

    class Book(object):
    
        def __init__(self,name,author,status,bookindex):
            self.name = name
            self.author = author
            self.status = status
            self.bookindex = bookindex
    
        def __str__(self):
            if self.status == 1:
                stats = '未借出'
            elif self.status == 0:
                stats = '已借出'
            else:
                stats = '未知状态'
            return '书名:《%s》 作者: %s 状态: <%s> 位置: %s' \
            %(self.name,self.author,stats,self.bookindex)
    
    class BooKManager(object):
        books = []
    
        def Start(self):
            self.books.append(Book('c','谭浩强',1,'ISO9001'))
            self.books.append(Book('python','guido',1,'NFS8102'))
            self.books.append(Book('java','westos',1,'PKI7844'))
    
        def Menu(self):
            self.Start()
            while True:
                print("""
                        图书管理系统
            1.查询图书
            2.增加图书
            3.借阅图书
            4.归还图书
            5.退出系统
                """)
    
                choice = input('输入您的选择: ')
                if choice == '1':
                    self.ShowAllBook()
                elif choice == '2':
                    self.AddBook()
                elif choice == '3':
                    self.BorrowBook()
                elif choice == '4':
                    self.ReturnBook()
                elif choice == '5':
                    print('欢迎下次使用...')
                    exit()
                else:
                    print('请输入正确选择!')
                    continue
    
        def CheckBook(self,name):
            for book in self.books:
                if book.name == name:
                    return book
            else:
                return None
    
        def ShowAllBook(self):
            for book in self.books:
                print(book)
    
        def AddBook(self):
            name = input('图书名称: ')
            self.books.append(Book(name,input('作者:'),1,input('存储位置:')))
            print('图书《%s》增加成功' %name)
    
        def BorrowBook(self):
            name = input('借阅图书名称: ')
            ret = self.CheckBook(name)
            print(ret)
    
            if ret != None:
                if ret.status == 0:
                    print('书籍《%s》已经借出' %name)
                else:
                    ret.status = 0
                    print('书籍《%s》借阅成功' %name)
            else:
                print('书籍《%s》不存在' %name)
    
        def ReturnBook(self):
            name = input('归还图书名称: ')
            ret = self.CheckBook(name)
    
            if ret != None:
                if ret.status == 0:
                    ret.status = 1
                    print('书籍《%s》归还成功' %name)
                    print(ret)
                else:
                    print('书籍《%s》未借出' %name)
            else:
                print('书籍《%s》不存在' %name)
    
    manage = BooKManager()
    manage.Menu()
    

    程序及运行结果:

    程序如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    测试结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 编写“我校图书管理系统“中的一个功能“书名模糊查询”的详细设计文档。 程序功能描述:该程序是按图书名称模糊查询。用户需要在对话框中的图书名称输入框中输入图书名称的全部或者部分。点击【查询】,程序就能...
  • 图书管理系统

    2019-03-15 09:44:54
    图书管理系统 对MS SQL Server2000数据库管理系统、SQL语言原理、.NET应用程序设计进行了较深入的学习和应用,主要完成对图书管理系统的需求分析、功能模块划分、数据库需求分析,并由此设计了数据库结构和应用程序...
  • 图书借阅管理系统——“图书上架”模块》项目研发 关键技术:ADO.NET数据访问技术 项目框架:三层架构设计 完成模块功能图书上架 项目描述:管理员在系统中新增图书完可以正常图书上架总数。 一、功能...

     

    图书借阅管理系统——“图书上架”模块》项目研发

     

    关键技术:ADO.NET数据访问技术

    项目框架:三层架构设计

    完成模块功能:图书上架

    项目描述:管理员在系统中新增图书完可以正常图书上架总数。

     

    一、功能实现

    新增上架模块主要包括新增图书总数。

    图书上架:见图1,是新增图书总数管理模块实现界面。

     

    二、项目效果

     

    1. 图书上架

    二.项目代码

    1.用户输完图书条码并回车键进行新增总数

     

    2.根据图书条码查询图书对象

    展开全文
  • 新增图书模块主要包括新增图书、图书条码录入的功能模块。 新增图书:见图2,是新增图书管理模块实现界面。 二、项目效果 1. 规范的代码编写 2. 新增图书效果 3.添加图书对象 public int AddBook...
  • 用户可以使用的功能有: 登录和注册 借书和还书 查询书籍功能 (图里画错了,用户并没有修改书籍的权限)   由此可以分析,用户类应该有如下几个属性: 用户名,姓名,密码,借的书及借书时间的集合   OK,整个...
  • 系统中包含如下功能模块系统设置读者管理图书管理图书借还续借预约系统查询和更改口令。有web端和android端采用mysql数据库。内附有数据库表。是呕心之作.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调...
  • 图书管理系统,是针对中小书店而开发,操作简单,界面美观,人性化较强,单机版系统适用于使用一台计算机,对出版发行、中小型书店、批发中心、音像零售批发等行业的。主模块主要包括基础数据,采购管理,销售管理,...
  • java做图书管理系统

    2019-01-24 14:59:51
    图书管理系统:调查学校图书馆,设计一个图书管理系统图书管理系统具有管理员登陆,图书维护,图书管理和系统维护四个功能模块组成。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,294
精华内容 517
关键字:

图书管理系统功能模块