精华内容
下载资源
问答
  • java的小项目,简单的图书管理系统,增删改查都可以。3种身份,用户、图书管理员和超级管理员。实现了借书还书、添加删除用户管理员、注册账号、修改密码、修改公告等功能。
  • 2012年6月 目录 TOC \o "1-3" \h \z \u 课题说明 3 程序设计思路 4 程序状态转换图 4 数据库设计 5 程序部分源代码 6 Login.java登录类 6 QueryBook.java查找修改书籍类 10 BookIn.java图书入库类 17 RemoveBook....
  • java的小项目,简单的图书管理系统,增删改查都可以。3种身份,用户、图书管理员和超级管理员。实现了借书还书、添加删除用户管理员、注册账号、修改密码、修改公告等功能。
  • java实现数据库图书管理系统 包括图书增加,删除,修改,读者增加,删除,修改,借书,还书,预约,超期罚款
  • Java图书管理系统

    万次阅读 多人点赞 2016-10-16 16:01:52
    项目参考自:http://www.java1234.com/a/yuanchuang/swing2/ 项目视频及代码下载地址:http://pan.baidu.com/s/1gdtVQtt 项目开发环境的搭建:...(2),图书类别管理 (3),图书管理 (4),退出二,工具(1)

    项目参考自:http://www.java1234.com/a/yuanchuang/swing2/
    项目视频及代码下载地址:链接:http://pan.baidu.com/s/1pLpQw2J 密码:cncv
    项目开发环境的搭建:http://pan.baidu.com/s/1ntzhAmH#list/path=%2F

    一,功能

    (1),用户登录
    (2),图书类别管理
    (3),图书管理
    (4),退出

    二,工具

    (1),JAVA编程:eclipes(1.8 soon版本)
    (2),SQL:mysql
    (3),Jdbc: jar(mysql-connector-java-5.1.40-bin.jar)

    三,效果展示

    (1),登录

    这里写图片描述

    (2),主界面

    这里写图片描述

    (3),图书类别添加

    这里写图片描述

    (4),图书类别管理

    这里写图片描述

    (5),图书添加

    这里写图片描述

    (6),图书管理

    这里写图片描述

    (7),关于作者

    这里写图片描述

    四,数据库设计

    这里写图片描述

    (1),t_user表

    这里写图片描述

    (2),t_bookType表

    这里写图片描述

    (3),t_book表

    这里写图片描述

    (四),Java层次分析:

    (1),逻辑图

    这里写图片描述

    (2),包结构

    这里写图片描述

    (五),数据库层级分析:

    1, ER分析

    这里写图片描述

    2, 数据

    用户: 用户编号,用户名,密码
    图书类别:图书类别编号,图书类别名称
    图书:图书编号,图书名称,图书作者,图书价格,图书描述,图书类别(外键)

    图书类别与图书之间根据图书类别相互关联

    3,数据库表的建立
    (1),t_use 用户信息表
    (2),t_bookType 图书类别管理表
    (3),t_book 图书信息管理表

    4,数据库表的关联(外键的关联)

    这里写图片描述

    (六),主要Java代码分析:

    (1),Dao 类(以BookDao为例)

    package com.java1234.dao;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import com.java1234.model.Book;
    import com.java1234.model.BookType;
    import com.java1234.util.StringUtil;
    import com.mysql.jdbc.Connection;
    import com.mysql.jdbc.PreparedStatement;
    
    /**
     * 图书Dao类
     * @author H_Pioneer
     *
     */
    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=(PreparedStatement) 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.getBookDesc());
    		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=(PreparedStatement) con.prepareStatement(sb.toString());
    		return pstmt.executeQuery();
    	}
    	
    	/**
    	 * 图书信息删除
    	 * @param con
    	 * @param id
    	 * @return
    	 * @throws SQLException
    	 */
    	public int delete(Connection con,String id)throws Exception{
    		String sql="delete from t_book where id=?";
    		PreparedStatement pstmt=(PreparedStatement) con.prepareStatement(sql);
    		pstmt.setString(1, id);
    		return pstmt.executeUpdate();
    	}
    	
    	/**
    	 * 图书信息修改
    	 * @param con
    	 * @param book
    	 * @return
    	 * @throws Exception
    	 */
    	public int update(Connection con,Book book)throws Exception{
    		String sql="update t_book set bookName=?,author=?,sex=?,price=?,bookDesc=?,bookTypeId=? where id=?";
    		PreparedStatement pstmt=(PreparedStatement) con.prepareStatement(sql);
    		
    		
    		pstmt.setString(1, book.getBookName());
    		pstmt.setString(2, book.getAuthor());
    		pstmt.setString(3, book.getSex());
    		pstmt.setFloat(4, book.getPrice());
    		pstmt.setString(5, book.getBookDesc());
    		pstmt.setInt(6, book.getBookTypeId());
    		pstmt.setInt(7, book.getId());
    		return pstmt.executeUpdate();
    	}
    	
    	/**
    	 * 
    	 * @param con
    	 * @param bookTypeId
    	 * @return
    	 * @throws Exception
    	 */
    	public boolean existBookByBookTypeId(Connection con,String bookTypeId)throws Exception{
    		String sql="select * from t_book where bookTypeId=?";
    		PreparedStatement pstmt=(PreparedStatement) con.prepareStatement(sql);
    		pstmt.setString(1, bookTypeId);
    		ResultSet rs = pstmt.executeQuery();
    		String string = new String();
    		return rs.next();
    	}
    }
    
    

    *重点内容::

    JDBC进行简单的数据库增删改查

    详细参考:http://www.cnblogs.com/wuyuegb2312/p/3872607.html

    (2),Model类(以BookModel为例)

    package com.java1234.model;
    
    
    /**
     * 图书实体类
     * @author H_Pioneer
     *
     */
    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 bookDesc;  //备注
    	
    	
    	
    	public Book(int id2, String bookName, String author, String sex, float price, Integer bookTypeId, String bookDesc) {
    		super();
    		this.id = id2;
    		this.bookName = bookName;
    		this.author = author;
    		this.sex = sex;
    		this.price = price;
    		this.bookTypeId = bookTypeId;
    		this.bookDesc = bookDesc;
    	}
    
    	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 bookDesc) {
    		super();
    		this.bookName = bookName;
    		this.author = author;
    		this.sex = sex;
    		this.price = price;
    		this.bookTypeId = bookTypeId;
    		this.bookDesc = bookDesc;
    	}
    	
    	public Book() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    	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 getBookDesc() {
    		return bookDesc;
    	}
    	public void setBookDesc(String bookDesc) {
    		this.bookDesc = bookDesc;
    	}
    	
    	
    }
    
    

    **重点内容::

    (1),接口类的构造方法

    (2),get,set方法

    快捷键:
    Shift+Alt+S --> Generate Getters and Setters -->选择你需要的get,set参数

    (3),构造函数的使用
    快捷键:
    (1),Shift+Alt+S -->generate constructor using fields–>使用字段生成
    (2),Shift+Alt+S -->generate constructors from…–>不使用字段从父类获取

    (三),Util类

    package com.java1234.util;
    
    import java.sql.DriverManager;
    
    import com.mysql.jdbc.Connection;
    
    /**
     * 数据库工具类
     * @author H_Pioneer
     *
     */
    
    public class DbUtil {
    	private String dbUrl = "jdbc:mysql://localhost:3306/db_book";
    	//也可以写成private String dbUrl = "jdbc:mysql:///db_book";
    	private String dbUserName = "root";
    	private String dbPassword = "123456";
    	private String jdbcName = "com.mysql.jdbc.Driver";
    	
    	/**
    	 * 获取数据库连接
    	 * @return
    	 * @throws Exception
    	 */
    	public Connection getCon()throws Exception{
    	    Class.forName(jdbcName);
    		Connection con = (Connection) DriverManager.getConnection(dbUrl,dbUserName,dbPassword);//链接数据库
    		return con;
    		
    	}
    	
    	/**
    	 * 关闭数据库连接
    	 * @param con
    	 * @throws Exception
    	 */
    	public void closeCon (java.sql.Connection con)throws Exception {
    		if(con!=null){
    			con.close();
    		}
    	}
    	
    	/**
    	 * 
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		DbUtil dbUtil = new DbUtil();
    		try {
    			dbUtil.getCon();
    			System.out.println("数据库连接成功");
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();    //在命令行打印异常信息在程序中出错的位置及原因。
    			System.out.println("数据库连接");
    		}
    				
    	}
    
    	
    }
    
    

    数据库工具类

    package com.java1234.util;
    
    import org.junit.Test;
    
    import com.mysql.jdbc.StringUtils;
    
    /**
     * 字符串工具类
     * @author H_Pioneer
     *
     */
    public class StringUtil {
    	/**
    	 * 判断是否为空
    	 * @param str
    	 * @return
    	 */
    	
    	public static boolean isEmpty(String str){
    		if(str==null||"".equals(str.trim())){
    			return true;
    	}else{
    		return false;
    	}
    	}
    	
    	/**
    	 * 判断不为空
    	 * @param str
    	 * @return
    	 */
    	public static boolean isNotEmpty(String str){
    		if(str!=null&&!"".equals(str.trim())){
    			return true;
    	    }else{
    		return false;
    	    }
    	}
    }
    

    **重点::
    工具类的使用
    (1)
    字符串工具类的总结:
    http://www.cnblogs.com/DreamDrive/p/5760588.html
    (2)
    数据库工具类的总结:
    http://kettas.iteye.com/blog/1222519

    (四),Frm类(以登录和图书类别添加为例)

    package com.java1234.view;
    
    import java.awt.EventQueue;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.GroupLayout;
    import javax.swing.GroupLayout.Alignment;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JPasswordField;
    import javax.swing.JTextField;
    import javax.swing.LayoutStyle.ComponentPlacement;
    import javax.swing.border.EmptyBorder;
    
    import com.java1234.dao.UserDao;
    import com.java1234.model.User;
    import com.java1234.util.DbUtil;
    import com.java1234.util.StringUtil;
    import com.mysql.jdbc.Connection;
    
    
    public class LogOnFrm extends JFrame {
    
    	private JPanel contentPane;
    	private final JTextField textField = new JTextField();
    	private JPasswordField passwordTxt;
    	
    	private DbUtil dbUtil = new DbUtil();
    	private UserDao userDao = new UserDao();
    	private JTextField userNameTxt;
    	
    
    	/**
    	 * Launch the application.
    	 */
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					LogOnFrm frame = new LogOnFrm();
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    
    	/**
    	 * Create the frame.
    	 */
    	public LogOnFrm() {
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setAlwaysOnTop(true);
    		setTitle("管理员登录");
    		setBounds(100, 100, 450, 300);
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
    		
    		JLabel label = new JLabel("图书管理系统");
    		label.setFont(new Font("黑体", Font.BOLD, 25));
    		label.setIcon(new ImageIcon(LogOnFrm.class.getResource("/images/logo.png")));
    		
    		JLabel lblNewLabel = new JLabel("用户名:");
    		lblNewLabel.setFont(new Font("宋体", Font.PLAIN, 13));
    		lblNewLabel.setIcon(new ImageIcon(LogOnFrm.class.getResource("/images/userName.png")));
    		
    		JLabel lblNewLabel_1 = new JLabel("密  码:");
    		lblNewLabel_1.setFont(new Font("宋体", Font.PLAIN, 13));
    		lblNewLabel_1.setIcon(new ImageIcon(LogOnFrm.class.getResource("/images/password.png")));
    		textField.setColumns(10);
    		
    		passwordTxt = new JPasswordField();
    		
    		JButton btnNewButton = new JButton("登录");
    		btnNewButton.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    			    loginActionPerformed(e);	
    			}
    		});
    		btnNewButton.setFont(new Font("宋体", Font.PLAIN, 13));
    		
    		btnNewButton.setIcon(new ImageIcon(LogOnFrm.class.getResource("/images/login.png")));
    		
    		JButton btnNewButton_1 = new JButton("重置");
    		btnNewButton_1.setFont(new Font("宋体", Font.PLAIN, 13));
    		btnNewButton_1.setIcon(new ImageIcon(LogOnFrm.class.getResource("/images/reset.png")));
    		btnNewButton_1.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				resetValueActionPerformed(e);
    			}
    		});
    		
    		userNameTxt = new JTextField();
    		userNameTxt.setColumns(10);
    		GroupLayout gl_contentPane = new GroupLayout(contentPane);
    		gl_contentPane.setHorizontalGroup(
    			gl_contentPane.createParallelGroup(Alignment.LEADING)
    				.addGroup(gl_contentPane.createSequentialGroup()
    					.addContainerGap()
    					.addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
    						.addGroup(gl_contentPane.createSequentialGroup()
    							.addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
    								.addGroup(gl_contentPane.createSequentialGroup()
    									.addComponent(textField, GroupLayout.PREFERRED_SIZE, 0, GroupLayout.PREFERRED_SIZE)
    									.addGap(223))
    								.addGroup(gl_contentPane.createSequentialGroup()
    									.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING, false)
    										.addComponent(lblNewLabel_1, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    										.addComponent(btnNewButton, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    									.addGap(50))
    								.addGroup(gl_contentPane.createSequentialGroup()
    									.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 93, GroupLayout.PREFERRED_SIZE)
    									.addGap(36)))
    							.addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
    								.addComponent(btnNewButton_1)
    								.addGroup(Alignment.LEADING, gl_contentPane.createParallelGroup(Alignment.TRAILING, false)
    									.addComponent(passwordTxt, Alignment.LEADING)
    									.addComponent(userNameTxt, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 114, Short.MAX_VALUE)))
    							.addGap(63))
    						.addGroup(gl_contentPane.createSequentialGroup()
    							.addComponent(label, GroupLayout.PREFERRED_SIZE, 320, GroupLayout.PREFERRED_SIZE)
    							.addContainerGap())))
    		);
    		gl_contentPane.setVerticalGroup(
    			gl_contentPane.createParallelGroup(Alignment.LEADING)
    				.addGroup(gl_contentPane.createSequentialGroup()
    					.addGap(18)
    					.addComponent(label)
    					.addPreferredGap(ComponentPlacement.UNRELATED)
    					.addComponent(textField, GroupLayout.PREFERRED_SIZE, 0, GroupLayout.PREFERRED_SIZE)
    					.addGap(14)
    					.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
    						.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 24, GroupLayout.PREFERRED_SIZE)
    						.addComponent(userNameTxt, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
    					.addGap(45)
    					.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
    						.addComponent(passwordTxt, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
    						.addComponent(lblNewLabel_1, GroupLayout.PREFERRED_SIZE, 21, GroupLayout.PREFERRED_SIZE))
    					.addGap(27)
    					.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
    						.addComponent(btnNewButton_1, GroupLayout.PREFERRED_SIZE, 25, GroupLayout.PREFERRED_SIZE)
    						.addComponent(btnNewButton))
    					.addContainerGap(13, Short.MAX_VALUE))
    		);
    		contentPane.setLayout(gl_contentPane);
    		
    		//设置居中显示
    		this.setLocationRelativeTo(null);
    	}
    	
        /**
         * 登录事件处理
         * @param e
         */
    	protected void loginActionPerformed(ActionEvent e) {
    		// TODO Auto-generated method stub
    		String userName = this.userNameTxt.getText();
    		String password = new String(this.passwordTxt.getPassword());
    		if(StringUtil.isEmpty(userName)){
    			JOptionPane.showMessageDialog(null,"用户名不能为空");
    			return;
    		}
    		if(StringUtil.isEmpty(password)){
    			JOptionPane.showMessageDialog(null,"密码不能为空");
    			return;
    		}
    		User user = new User(userName,password);
    		Connection con = null;
    		try{
    			con = dbUtil.getCon();
    			User currentUser=userDao.login(con, user);
    			if(currentUser!=null){
    				//JOptionPane.showMessageDialog(null,"登录成功");	
    			    dispose();
    			    new MainFrm().setVisible(true);
    			}else{
    				JOptionPane.showMessageDialog(null,"用户名密码错误");
    			}
    			
    		}catch(Exception e1){
    			e1.printStackTrace();
    			
    		}
    		
    	}
    
    	/**
         * 重置事件处理
         * @param evt
         */
        
    	private void resetValueActionPerformed(ActionEvent evt) {
    		// TODO Auto-generated method stub
    		this.userNameTxt.setText("");
    		this.passwordTxt.setText("");
    	}
    }
    
    

    **重点::

    (1),Java可视化编程

    1. windowbuilder插件的安装
    2. Window Builder→SWT Designer→SWT→Application Window→Next→窗口名→默认→Finish→s自动生成代码→Design

    这里写图片描述

    (2),对于按钮等添加事件如何与数据接口联系

    对于JFrame,JLable,JTable等,右击可以选择重命名或者添加事件即可返回代码之中,一般我们会把操作进行封装,对事件进行相应的处理

    (七),整个项目的分析与不足

    1.MVC3层架构有问题(这个只有dao层)

    正常的应该是dao层就接口不是实现类,现在的dao是正常的daoImpl,dao的实现类
    

    2.实体类(com.java1234.model包下的)可以是entity,domain

    应该尽量用entity或model,少用domain
    

    3 DbUtil和StringUtil的实现方法不好而且很多并没有实际用处

    展开全文
  • 图书管理系统+数据库操作 1.架包的导入 这些是我基础时常用的架包,网上也容易找到 有需要的话也可以,评论留言 2、代码块` Book.java package cn.kgc.tangcco.book.entity; import java.util.Date; import ...

    图书管理系统+数据库操作

    在这里插入图片描述
    1.架包的导入
    在这里插入图片描述
    这些是我基础时常用的架包,网上也容易找到
    有需要的话也可以,评论留言
    2、代码块`
    Book.java
    package cn.kgc.tangcco.book.entity;

    import java.util.Date;

    import cn.kgc.tangcco.book.common.Utils;
    /**

    • 实体类
      */
      import lombok.AllArgsConstructor;
      import lombok.Data;
      import lombok.NoArgsConstructor;
      @Data
      @NoArgsConstructor
      @AllArgsConstructor
      public class Book implements Comparable{
      private String bookid;
      private String bookname ;
      private String author;
      private double money;
      private String factory;
      private Date booktime;

      public String toString() {
      return “图书编号=” + bookid + “,书名=”+bookname +",作者="+author
      +",价格="+money+",出版社="+factory+",出版时间="+booktime;
      }
      @Override
      public int compareTo(Book o) {
      int n = this.getBooktime().compareTo(o.getBooktime());
      return n;
      }
      }`

    ObjectFactory.java

    package cn.kgc.tangcco.book.common;
    
    import java.util.Map;
    import java.util.concurrent.ConcurrentHashMap;
    /**
     * 创建对象的工厂类
     * @author dell
     *
     */
    public class ObjectFactory {
    
    	 private static Map<String ,Object> map=new ConcurrentHashMap<String, Object>();
    	 //实列一个对象的方法  key别名
    	 public static <T>T getInstance(String key) {
    		  T obj=null;
    		if (map.containsKey(key)) {
    			obj = (T) map.get(key);
    		} else {
    			try {
    				// 反射技术
    				Class clazz = Class.forName(Constant.getURL(key));
    				obj = (T) clazz.newInstance();
    				map.put(key, obj);
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    		  return obj;
    	  }
    }
    
    

    Constant.java

    package cn.kgc.tangcco.book.common;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    import java.util.concurrent.ConcurrentHashMap;
    
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    public class Constant {
    public final static String FDAO="dao";
    public final static String FSER="ser";
      //用xml技术存储类的路径
      private static Map<String,String> map=new HashMap<String, String>();
      //properties  存放数据库的基本信息
      static {
    	  try {
    	  SAXReader sax=new SAXReader();
    	  Document doc=sax.read(new File("src/files/applicationContext.xml"));
    	  Element root=doc.getRootElement();
    	  List<Element> bs=root.elements();
    	  for (Element element : bs) {
    		String key=element.attributeValue("id");
    		String value=element.attributeValue("class");
    		map.put(key, value);
    	  }
    	  }catch(Exception e) {
    		  e.printStackTrace();
    	  }
      }
      //根据别名返回类的路径地址
      public static String getURL(String key) {
    	  return map.get(key);
      }
    }
    
    

    DataSourceUtil.java

    package cn.kgc.tangcco.book.common;
    import java.sql.Connection;
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    //数据源的配置
    public class DateSourceUtil {
    	private static ComboPooledDataSource ds = new ComboPooledDataSource("book");
    	ThreadLocal< Connection> t = new ThreadLocal<Connection>();
    	private Connection con;
    	public static ComboPooledDataSource getDs() {
    		return ds ;
    	}
    	public Connection getCon() {
    		con = t.get();
    		try {
    			if(con==null) {
    				con = ds.getConnection();
    				t.set(con);
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return con;
    	}
    }
    
    

    Utils.java

    package cn.kgc.tangcco.book.common;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    /**
     * 字符串和日期的转换
     * @author 10570
     *
     */
    
    public class Utils {
         private static SimpleDateFormat fm=new SimpleDateFormat("yyyy-MM-dd");
         public static String DatetoString(Date date) {
        	 String value="";
        	 value=fm.format(date);
        	 return value;
         }
         
         public static Date StringtoDate(String value) {
        	 Date date=null;
        	 try {
    			date=fm.parse(value);
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
        	 return date;
         }
    }
    
    

    BookDaoImp.java

    package cn.kgc.tangcco.book.dao.imp;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.BeanHandler;
    import org.apache.commons.dbutils.handlers.BeanListHandler;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    import cn.kgc.tangcco.book.common.DateSourceUtil;
    import cn.kgc.tangcco.book.dao.BookDao;
    import cn.kgc.tangcco.book.entity.Book;
    /**
     * 数据操作层
     * @author 10570
     *map集合中要添加元素,删除元素,修改元素
     *查询是返回集合map或list
     */
    public class BookDaoImp implements BookDao  {
    	
    	private QueryRunner qr;
    	public BookDaoImp() {
    		qr = new QueryRunner(DateSourceUtil.getDs());
    	}
    	@Override
    	public List<Book> query(String sql, Object...objects){ 
    		List<Book> list=new ArrayList<Book>();
    		try {
    			list = qr.query(sql, new BeanListHandler<Book>(Book.class), objects);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	    return list;
    	}
    	//查询,返回一个集合
    	@Override
    	public Book select(String sql,Object...objects){
    		Book Book=null;
    		try {
    			Book = qr.query(sql, new BeanHandler<Book>(Book.class), objects);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	    return Book;
    	}
    	//更新
    	@Override
    	public int modify(String sql,Object...objects) {
    		int i=0;
    		try {
    			i=qr.update(sql,objects);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return i;
    	}
    }
    
    

    BookDao.java

    package cn.kgc.tangcco.book.dao;
    import java.util.List;
    import cn.kgc.tangcco.book.entity.Book;
    public interface BookDao {
    	//查询所有图书
    	public List<Book> query(String sql, Object...objects);
    	
    	//查询,返回一个集合
    	public Book select(String sql,Object...objects);
    	
    	//更新数据库
    	public int modify(String sql,Object...objects);
    }
    
    

    BookServiceImp.java

    package cn.kgc.tangcco.book.service.imp;
    
    import java.util.ArrayList;
    import java.util.List;
    import cn.kgc.tangcco.book.common.Constant;
    import cn.kgc.tangcco.book.common.ObjectFactory;
    import cn.kgc.tangcco.book.common.Utils;
    import cn.kgc.tangcco.book.dao.BookDao;
    import cn.kgc.tangcco.book.entity.Book;
    import cn.kgc.tangcco.book.service.BookService;
    /**|
     * 业务实现类
     *  * @author 10570
     *
     */
    public class BookServiceImp implements BookService {
    	BookDao bookdao = ObjectFactory.getInstance(Constant.FDAO);
    	   /**
    	    * 查询业务
    	    */
    		@Override
    		public List<Book> query(){
    			String sql="select * from book order by booktime";
    			return bookdao.query(sql);
    		}
    		
    		/**
    		 * 有条件查询
    		 */
    		@Override
    		public List<Book> select(String bookname,String author){
    			String sql="select * from book where bookname=? or author=? ";
    			return bookdao.query(sql,bookname,author);
    		}
    		
    		
    		/**
    		 * 添加业务
    		 */
    		@Override
    		public String add(Book book) {
    			String sql="insert into book values(?,?,?,?,?,?)";
    			int i=bookdao.modify(sql,book.getBookid(),book.getBookname(),book.getAuthor(),book.getMoney(),book.getFactory(),Utils.DatetoString(book.getBooktime()) );
    		    String message=i>0?"添加成功":"添加失败";
    		    return message;
    		}
    
    }
    
    

    BookService.java

    package cn.kgc.tangcco.book.service;
    import java.util.List;
    import cn.kgc.tangcco.book.entity.Book;
    public interface BookService {
    
    	/**
    	* 查询业务
    	*/
    	List<Book> query();
    
    	/**
    	 * 有条件查询
    	 */
    	List<Book> select(String bookname, String author);
    
    	/**
    	 * 添加业务
    	 */
    	String add(Book book);
    
    }
    

    BookManager.java

    package cn.kgc.tangcco.book.service;
    import java.util.List;
    import cn.kgc.tangcco.book.entity.Book;
    public interface BookService {
    
    	/**
    	* 查询业务
    	*/
    	List<Book> query();
    
    	/**
    	 * 有条件查询
    	 */
    	List<Book> select(String bookname, String author);
    
    	/**
    	 * 添加业务
    	 */
    	String add(Book book);
    
    }
    

    TestDemo.java

    package cn.kgc.tangcco.book.test;
    
    import cn.kgc.tangcco.book.manager.BookManager;
    
    public class TestDemo {
    	public static void main(String[] args) {
    		BookManager bm = new BookManager();
    		bm.menu();
    	}
    }
    
    

    applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans>
      <bean id="dao" class="cn.kgc.tangcco.book.dao.imp.BookDaoImp">
      </bean>
      <bean id="ser" class="cn.kgc.tangcco.book.service.imp.BookServiceImp">
      </bean>
    </beans>
    

    c3p0的配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>	
    <!-- 默认配置,当使用ComboPooledDataSource无参构造器时,使用的就是这个配置 -->
    	<default-config>		
    	<!-- 基本配置 -->		
    	        <property name="jdbcUrl">jdbc:mysql://localhost:3306/book</property>
    			<property name="driverClass">com.mysql.jdbc.Driver</property>		
    			<property name="user">用户名</property>		
    			<property name="password">密码</property>		
    			<!-- 每次增量,当需要创建Connection对象时,一次创建几个 -->		
    			<property name="acquireIncrement">5</property>		
    			<!-- 当创建池对象后,池中应该有几个Connection对象 -->		
    			<property name="initialPoolSize">10</property>		
    			<!-- 池中最少Connection个数,如果少于这个值,就会创建Connection -->		
    			<property name="minPoolSize">2</property>		
    			<!-- 池中最大连接个数 -->		
    			<property name="maxPoolSize">50</property>	
    	</default-config>	
    <!-- 命名配置,new ComboPooledDataSource("tangcco")时,使用的就是这个配置 -->	
    	<named-config name="book">		
    			<property name="jdbcUrl">jdbc:mysql://localhost:3306/book</property>		
    			<property name="driverClass">com.mysql.jdbc.Driver</property>		
    			<property name="user">用户名</property>		
    			<property name="password">密码</property>		
    			<property name="acquireIncrement">3</property>		
    			<property name="initialPoolSize">10</property>		
    			<property name="minPoolSize">2</property>		
    			<property name="maxPoolSize">10</property>	
    	</named-config>
    </c3p0-config>
    

    操作的时候,数据库中要创建好数据库,并在数据库的表中添加一些书目的数据;不然会连接数据库失败。

    如有其他问题,欢迎留言

    展开全文
  • java - 图书管理系统数据库(sql server 2008)篇

    万次阅读 多人点赞 2018-01-21 08:06:36
    这里的数据库就使用 SQL server 2008。 需求分析中有介绍到,数据库的物理结构。。在使用中要用到六张表(reader,readertype,users,book,booktype,borrowbook),首先创建一个数据库(db_bookborrow),然后...

    这里的数据库就使用 SQL server 2008。

    需求分析中有介绍到,数据库的物理结构。。在使用中要用到六张表(reader,readertype,users,book,booktype,borrowbook),首先创建一个数据库(db_bookborrow),然后再在数据库中 将这六张表建出来(具体怎么建表‘自己用的图形界面委屈’这里不做介绍,下面有语句创建方法)。每一张表的详细内容见需求分析,这里要注意的是 readetype和booktype 的主键设置为自增长型。

    建完表好需要熟悉一下 查询增添修改 SQL 语句,程序中将会用到。下面是程序中可能用到的一些 SQL 语句。

    1.创建和删除数据库的方法(使用图形化界面创建数据库、使用语句创建数据库)[使用语句创建数据库可以避免数据库版本不同带来的麻烦,另外添加数据更为方便。]

    --创建数据库

    create database db_bookborrow;

    --删除数据库

    drop database db_bookborrow;

    2.创建和删除数据表的方法(使用图形化界面创建、使用语句创建)

    创建数据表的格式(红色表示关键字,不能改动;蓝色表示可根据不同情况改为不同内容;中括号里的内容表示可选。)


    create table 表名 (

    字段名字段类型 [ primary key],

    字段名字段类型,

    .......

    );

    --创建数据表

    create table reader
    
    (
    
           readeridchar(8) primary key,
    
           type int,
    
           namechar(20),
    
           age int,
    
           sexchar(4) ,
    
           phonechar(11),
    
           deptvarchar(20),
    
           regdate date             
    
    );
    
    create table readertype
    
    (
    
           id int,
    
           typenamevarchar(20),
    
           maxborrownumint,
    
           limit int
    
    );

    --删除数据表

    drop table reader;

    【注意当前所操作的数据库!】

    3.主键和自增长的概念及作用,两者的写法。

    主键是某一条(行)记录的唯一索引,根据主键可以唯一地确定某条记录。

    自增长可以自动为主键提供不重复的值。需要两个参数:初始值和步长。【注意:只能对int类型的主键设置为自增长!】

    --主键(primary key)和自增长(identity)

    create table users
    
    (
    
           id int  primary key identity(1,1),
    
           namevarchar(20),
    
           passwordvarchar(20)
    
    );

    4.增删改查操作(CRUD)

    增加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)。

    --增加操作(insert)

    insert into readertype values(1,'学生',3,10)   --char或varchar类型的内容要用单引号括起来
    
    insert into readertype values(2,'教师',6,30)
    
    
    insert into reader values('12345678',1,'张三',23,'男','13612345678','软件','2018-1-15')
    
    insert into reader values('11111111',2,'李四',33,'女','13611111111','软件','2016-1-10')
    
    
    insert into users values('admin',111)  --自增长字段不需赋值

    --更新操作(update)

    update reader set age=18 where readerid='12345678'
    
    update reader set age=19,phone=’13722222222’ wherereaderid='12345678'

    --查询操作(select)

    select * from readertype  --查询所有读者类型
    
    select readerid,name from reader --查询所有读者的编号和姓名
    
    select * from reader where readerid=’12345678’ --查询编号为12345678的读者的所有信息

    --删除操作(delete)

    delete from reader where readerid=’12345678’

    5.部分复杂查询

    6.1 判空

    select *from borrowbook where returndatetime is NULL
    
     
    
    select * fromborrowbook where returndatetime is not NULL

    6.2 组合where条件(and、or、not)

    select * from users where name='admin' and password=111

    6.3 模糊查询(like关键字)

    select * from reader where name like '张%'   --%代表零到多个字符
    
    select * from reader where name not like '张%'
    
    select * from reader where name like '张_'  --一个下划线代表一个字符
    
     
    
    select * from reader where name like '%张%'  --名字中包含张

    6.关联查询(多表查询)

    --查询读者编号、读者姓名和读者类型名(信息来自两张表)

    select readerid,name,typename
    
    from reader join readertype onreader.type=readertype.id
    
    [可继续加where子句]

    7.联合主键(借阅信息表)

    某人和某书联合到一起才能唯一确定一条信息,这时可以使用联合主键。

    create table borrow(
    
    readerid char(8),
    
    isbn char(10),
    
    borrowdate datatime,
    
    primary key(readerid,isbn)
    
    );



    展开全文
  • 1 此系统web端接口采用java语言和ssm框架实现 2 客户端和服务器通信数据,采用封装好的json数据格式 3 实现了图书的添加,修改,删除以及更加关键词查询图书的功能 基于微信小程序图书管理app实体对象: 图书类型:...
  • java图书管理系统

    2017-04-15 21:18:29
    1。 SSH(Struts2+Spring+Hibernate) 2。实现图书管理系统,后台数据库请选择:Oracle11g或mysql,该系统包括用户登录,图书信息列表、图书的新增、修改、删除,并实现翻页功能。
  • 图书管理系统数据库设计

    万次阅读 多人点赞 2018-05-26 23:44:35
    图书管理系统数据库设计 博主在github上找的这个项目链接,大家想参考的可以看看! JAVA GUI 图书馆管理系统:https://github.com/uboger/LibraryManager 图书馆流通管理系统:...

       图书管理系统数据库设计

    博主在github上找的这个项目链接,大家想参考的可以看看!

     

    1、摘要:

    一个简单的图书管理系统包括图书馆内书籍的信息、学校在校学生的信息以及学生的借阅信息。此系统功能分为面向学生和面向管理员两部分,其中学生可以进行借阅、续借、归还和查询书籍等操作,管理员可以完成书籍和学生的增加,删除和修改以及对学生,借阅、续借、归还的确认。

    2、需求分析

    针对一般图书管理信息系统的需求,通过对图书管理工作过程的内容和数据流程分析,设计如下面所示的数据项:

    Ø       读者信息

    属性:读者学号,读者姓名,读者性别,联系电话,所在系,生效日期,失效日期,违章状况,累计借书,备注

    主键:读者学号

    Ø       书籍信息

    属性:ISBN,书名,作者,出版社,出版日期,简介,备注

    主键:ISBN

    Ø       管理员信息

    属性:工作号,姓名,性别,电话,家庭住址,备注

    主键:工作号

    2.1 数据流程

    通过对系统的调查和可行性分析,画出系统的数据流程图:

    2.1.1 读者

    学生对图书管理系统的要求有:

    Ø       能按各种方式(比如书名、编号、作者)查询图书馆的藏书情况。

    Ø       能够方便地借阅图书、续借图书、归还图书

    Ø       能够查询自己的基本资料、图书情况

    Ø       能够熟悉图书管理系统的使用。

    读者进入系统工作的流程图为:

     

     

     

    注册

    查询

    修改信息

    借阅续借

    图书

    归还

    注销

     

    2.1.2 图书管理员

    他们对图书管理系统的要求有:

    1. 能方便的对图书进行录入登记,注销陈旧的书籍。

    2. 能够方便地对新生进行登记,或注销已经毕业的学生信息(基本信息,借阅信息)。

    3. 能够随时发布一些诸如各学院学生借阅图书超期情况、馆内藏书情况、借情况等信息,以便各学院能够随时获知本院学生的一些借书信息。

    图书管理员工作的流程图为:

     

     

    注册

    录入图书

    录入新生

    注销图书

    注销学生

    注销

    修改个人信息

    超期处理

     

     

    3、概念模型设计

     数据库需要表述的信息有以下几种:

     (1)读者信息

     (2)书籍信息

    (3)管理员信息

    (4)读者与书籍之间的关系(借阅关系E-R图)

    (5)管理员与书籍之间的关系(管理员_书籍E-R图)

    (6)管理员与学生之间的关系(管理员_学生 E-R图)

    3.1管理员与读者之间的关系

    3.3管理员与书刊之间的关系

    3.3读者与书籍之间的关系(借阅三元关系)

     

    4、逻辑设计

    从理论‘E/R模型’到理论‘关系模型’的整理转换,通过E/R模型到关系模型的转化,可以得到如下关系模式:

    借阅关系

    属性:工作号读者学号,ISBN是否续借,借书日期,还书日期,备注。

    主键:工作号,读者学号,ISBN

    管理员_书籍关系

    属性:工作号,ISBN添加时间,是否在馆

    主键:工作号,ISBN

    管理员_学生关系

    属性:工作号,读者学号,确认借还

    主键:工作号,读者学号

    5、数据库逻辑结构

    5.1图书信息表   

    字段名称

    数据类型

    是否可为空

    ISBN(key)

    varchar(20)

    书名

    varchar(50)

    作者

    varchar(12)

    出版社

    varchar(50)

    出版日期

    datetime

    简介

    varchar(200)

     备注

    varchar(200)

    5.2 读者信息表

    字段名称

    数据类型

    是否可为空

    读者学号(key)

    varchar(12)

    读者姓名

    varchar(10)

    读者性别

    varchar(2)

    联系电话

    varchar(10)

    所在系

    varchar(12)

    生效时间

    datatime

    失效时间

    datatime

    违章状况

    varchar(2)

    累计借书

    int

    备注

    varchar(100)

    5.3 管理员信息表

    字段名称

    数据类型

    是否可为空

    工作号(key)

    varchar(12)

    姓名

    varchar(12)

    性别

    varchar(2)

    电话

    varchar(12)

    住址

    varchar(12)

    备注

    varchar(100)

    5.4 借阅表

             

    字段名称

    数据类型

    是否可为空

    工作号

     char(10)

    ISBN

     char(10)

    读者学号

     char(10)

    借书日期

    datetime

    还书日期

    datetime

    是否续借

    char(4)

    备注

    varchar(100)

     

    5.5 管理员_书籍

    字段名称

    数据类型

    是否可为空

    工作号

    char(10)

    ISBN

    char(10)

    添加时间

    data time

    是否在馆

    char(14)

     

    5.6 管理员_学生

             

    字段名称

    数据类型

    是否可为空

    工作号

    char(10)

    读者学号

    char(10)

    借还确认

    char(4)

     

    6、物理设计   

    从理论‘关系模型’到实现/实施‘数据库建立’,物理文件的安排和建立索引

    6.1 建立索引

    为了提高在表中搜索元组的速度,在实际实现的时候应该基于键码建立索引是各表中建立索引的表项:

    (1) 读者信息(读者学号)

    (2) 书籍信息(ISBN)

    (3)管理员信息(工作号)

    (4)借阅(工作号,读者学号,ISBN)

    (5)管理员_书籍(工作号,ISBN)

    (6)管理员_学生(工作号,读者学号)

    6.2 用SQL实现设计

    实现该设计的环境为Windows 2000 Perfessinal+MSSQLServer 2000.0

    6.2.1建立图书信息表

     create table 图书

     (ISBN varchar(20) not null primary key,

      书名 varchar(50) not null,

      作者 varchar(12) not null,

      出版社 varchar(50),

      出版日期 datetime,

      简介 varchar(200),

      备注 varchar(200),)

    6.2.2建立读者信息表

    create table 读者

     (读者学号 varchar(12) not null primary key,

      读者姓名 varchar(10) not null,

      读者性别 varchar(2) not null,

      联系电话 varchar(12),

      所在系   varchar(20) not null,

      生效日期 datetime,

      失效日期 datetime,

      违章状态 char(2),

      累计借书 int,

      备注    varchar(100),)

    6.2.3建立管理员信息表

           create table 管理员

            (工作号 varchar(12) not null primary key,

    姓名   varchar(12) not null,

    性别   varchar(2) not null,

    电话   varchar(12),

    家庭住址 varchar(50),

    备注 varchar(100))

    6.2.4建立借阅表

         create table 借阅

    (工作号 char(10) not null,

    ISBN char(10) not null,

    读者学号 char(10) not null,

    借书日期 datetime not null,

    还书日期 datetime not null,

    是否续借 char(4) not null,

           备注 varchar(100) )

    6.2.5建立管理员_书籍表

            create table 管理员_书籍

    (工作号 char(10) not null,

    ISBN char(10) not null,

    添加时间 datetime,

    是否在馆 char(4))

    6.2.6建立管理员_学生表

           create table 管理员_学生

    (工作号 char(10) not null,

    读者学号 char(10) not null,

    ISBN char(10) not null,

    借还确认 char(4) not null)

    6.2.7建立索引

         CREATE UNIQUE INDEX 图书索引 ON 图书(ISBN)

        CREATE UNIQUE INDEX 读者索引 ON 读者(读者学号)

    CREATE UNIQUE INDEX 管理员索引 ON 读者(工作号)

    CREATE UNIQUE INDEX借阅索引 ON 借阅(工作号,读者学号,ISBN)

    CREATE UNIQUE INDEX管理员_书籍索引 ON 管理员_书籍 (工作号,ISBN读者学号)

    CREATE UNIQUE INDEX管理员_学生ON管理员_学生 (工作号,读者学号)

    6.2.8定义视图

    (1)读者表视图

       CREATE VIEW 读者视图

       AS

          SELECT *

          FROM 读者

    (2)图书表视图

       CREATE VIEW 图书视图

       AS

          SELECT *

          FROM 图书

    (3)管理员表视图

       CREATE VIEW 管理员视图

       AS

          SELECT *

          FROM 管理员者

     

     

    6.2.9管理员操作

    (1)注册(register)

    INSERT INTO 管理员 (工作号,姓名,性别,电话,家庭住址,备注)

    VALUES(#工作号,#姓名,#性别,#电话,#家庭住址,#备注)

    说明:在登记操作后,管理员得到一个唯一的工作号,可以根据这个工作号采查询和修改数据。

    (2)注销(unregister)

    DELETE

    FROM Provider

    WHERE(工作号=#工作号);

    (3)修改个人信息(update)

    UPdate 管理员

    Set (工作号=#工作号,姓名=#姓名,性别=#性别,电话=#电话,家庭住址=#家庭住址,备注=#备注)

    WHERE(工作号=#工作号)

    (4)增加书籍(addbooks)

    INSERT INTO 图书 (ISBN,书名,作者,出版社,出版日期,简介,备注)

    VALUES(#ISBN,#书名,#作者,#出版社,#出版日期,#简介,#备注) INSERT INTO 管理员_书籍表(工作号,ISBN,添加时间,是否在馆)

    VALUES(#工作号,#ISBN,#添加时间,#是否在馆)

    (5)删除书籍(deletebooks)

    DELETE 图书

    WHERE(ISBN =# ISBN)

    (6)修改书籍(updatebooks)

    UPDATE 图书(书名=#书名, 作者=#作者, 出版社=#出版社, 出版日期=

    #出版日期, 简介=#简介, 备注=#备注)

    WHERE(ISBN =# ISBN)

    6.2.10读者操作

    (1)注册(register)

    INSERT INTO 读者(读者学号,读者姓名,读者性别,联系电话,所在系,

    生效日期,失效日期,违章状况,累计借书,备注)

    VALUES(#读者学号,#读者姓名,#读者性别,#联系电话,#所在系,

    #生效日期,#失效日期,#违章状况,#累计借书,#备注)

    说明:在登记操作后,读者得到一个唯一的ID,可以根据这个ID来查询和修改自己的信息。

    (2)注销(unregister)

    DELETE 读者

    WHERE(读者学号=#读者学号)

    (3)修改个人信息(update)

    UPDATE 读者 Set(读者姓名=#读者姓名,联系电话=#联系电话,

    所在系=#所在系,生效日期=#生效日期,失效日期=#失效日期,

    违章状况=#违章状况,累计借书=#累计借书,备注=#备注)

    WHERE(读者学号=#读者学号)

    (4)查询(select)

       SELECT ISBN,书名,作者,出版社

    FROM图书

    WHERE ISBN=#ISBN OR书名=#书名

    6.2.11管理员对借阅关系的操作 

     (1) 插入读者的信息(insert)

        INSERT INTO 借阅(工作号,读者学号,ISBN,是否续借,借书日期,还书日期,备注)

     VALUES(#工作号,#读者学号,#ISBN,#是否续借,#借书日期,

    #还书日期,#备注)

    (2) 更新信息(update)

    ①更新借出信息

    UPDATE借阅

    SET(借书日期=#借书日期,还书日期=借书日期+30,是否续借=0)

    WHERE(工作号=#工作号 AND 读者学号=#读者学号 AND ISBN =#ISBN)

    UPDATE管理员_图书

    SET(是否在馆=0)

    WHERE(ISBN=#ISBN)

    UPDATA 学生

    SET (累积借书=累积借书+1)

    WHERE(读者学号=#读者学号)

    INSERT INTO管理员_学生(工作号,读者学号,确认借还,ISBN)

    VALUES(#工作号,#读者学号,”0”, #ISBN))

          ②更新续借信息

    UPDATE 借阅

    SET(是否续借=#是否续借)

    WHERE(工作号=#工作号 AND 读者学号=#读者学号 AND ISBN =#ISBN)

           ③更新还书信息

    UPDATE管理员_图书

    SET(是否在馆=1)

    WHERE(ISBN=#ISBN)

    UPDATE管理员_学生

    SET(确认借还=”1”)

    WHERE(工作号=#工作号 AND 读者学号=#读者学号 AND ISBN=#ISBN)

    6.2.12触发器的建立

     (1)时间触发器:

     Create Trigger 时间

     On 借阅

     For update,insert,delete

     As

     while (select datename(weekday,getdate()))='星期天'

    begin

    print '时间错误'

    end

    (2)update触发器:

         Create Trigger 续借

        On 借阅

    for Update

    As

        If  Update(是否续借)

        begin

        Update 借阅

          Set 还书日期=还书日期+30

          Where 工作号=#工作号

        end   

    7、实验数据示例:测试阶段(代码调试)

    7.1 输入数据设计

    (1)插入管理员

     INSERT INTO 管理员(工作号,姓名,性别,电话,家庭住址,备注)

    VALUES(1001,'张三','男',02885965555,'成都市','呵呵')

    (2)插入读者

    INSERT INTO 读者(读者学号,读者姓名,读者性别,联系电话,所在系,

    生效日期,失效日期,违章状态,累计借书,备注)

    VALUES(20050222,'李瑞','男',02888994456,'环境','2007-05-06','2010-05-06','1',10,'哈')

     (3)插入图书

     INSERT INTO 图书 (ISBN,书名,作者,出版社,出版日期,简介,备注)

    VALUES('730203009x','数据库原理教程','王珊','清华大学出版社','2006-05-05','数据库教程','哈')

    INSERT INTO 图书 (ISBN,书名,作者,出版社,出版日期,简介,备注)

    VALUES('7302030091','数据库教程','王书','清华大学出版社','2006-05-05','数据库教程','哈')

     (4)插入管理员_书籍表 

    INSERT INTO 管理员_书籍 (工作号,ISBN,添加时间,是否在馆)

    VALUES(1001,'730203009x','2007-7-7','0')

    INSERT INTO 管理员_书籍 (工作号,ISBN,添加时间,是否在馆)

    VALUES(1001,'7302030091','2007-7-8','1')

    (5) 插入借阅信息

    INSERT INTO 借阅(工作号,读者学号,ISBN,是否续借,借书日期,还书日期,备注)

    VALUES(1001,20050222,'730203009x','0','2007-7-6','2007-8-6','哈')

    INSERT INTO 管理员_学生(工作号,读者学号,借还确认,ISBN)

    VALUES(1001,'20050222','0', '730203009x')

    7.2 完成借阅、续借、归还的操作设计

    假设读者想借书籍名为《数据库教程》且不知道ISBN

    (1)借阅操作如下:

    if((select 书名 from 图书 where ISBN='7302030091')= '数据库教程')

    begin

    INSERT INTO 借阅(工作号,读者学号,ISBN,是否续借,借书日期,还书日期,备注)

    VALUES(1001,20050222,'7302030091','0','2007-7-7','2007-8-7','哈')

    UPDATE 管理员_书籍

    SET 是否在馆='0'

    WHERE ISBN='7302030091'

    UPDATE 读者

    SET 累计借书=累计借书+1

    WHERE 读者学号=20050222

    INSERT INTO 管理员_学生(工作号,读者学号,借还确认,ISBN)

    VALUES(1001,20050222,'0','7302030091')

           print '借阅成功!'

       end

    else

       print '借阅失败!'

    (2)续借操作如下:

    if((SELECT 是否续借

       FROM 借阅

       WHERE 工作号=1001 AND 读者学号=20050222 AND ISBN ='7302030091')='0')

    begin

    UPDATE 借阅

    SET 是否续借='1'

    WHERE 工作号=1001 AND 读者学号=20050222 AND ISBN ='7302030091'

    print '续借成功!'

       end

    else

       print '续借失败!'

     (3)还书操作如下:

    If((SELECT 借还确认

     FROM 管理员_学生

     WHERE 工作号=1001 AND 读者学号=20050222 AND ISBN='7302030091')='0')

    BEGIN

    UPDATE 管理员_书籍

    SET 是否在馆='1'

    WHERE ISBN='7302030091'

    print '还书成功!'

        end

     else

     print '还书失败!'

    8、安全性设计

    后台数据库应安装在指定服务器上,用户只能通过登录软件访问数据库表中的数据。

    除上述方法外,不应提供用户其他访问数据库数据的直接或间接途径。

    9、数据库管理与维护说明

          对于本数据的管理与维护,例如数据库的备份与恢复,可以使用T-SQL的BACKUP DATABASE命令和RESTORE DATABASE命令[具体实用说明请参照SQL Server 2000联机丛书]或使用企业管理器中的“所有任务”→“备份数据库(B)”菜单项和或“还原数据库(R)”菜单项操作。

     

    展开全文
  • 系统是基于MyEclipse 8.5环境开发的,后台数据库为Microsoft SQLserver2005,正确能运行程序,实现图书信息添加,修改,删除图书借阅 归还,归还超过限期,有罚款功能,可以添加不同权限的用户,并对用户进行...
  • 图书管理系统,SQL Server实现数据库的连接,管理员可对书籍和读者进行多种方式查询,添加,修改和删除操作,借阅管理中,每借出一本书,相应的书籍借出状态会变化,每还一本书,也会变化。另外,还有读者借书册数...
  • 精美Java 图书管理系统

    万次阅读 多人点赞 2018-10-23 20:24:24
    刚开始接触Java,写一个图书管理系统熟悉熟悉界面和数据库的操作。刚开始写界面的时候感觉界面这块比较杂,好多都不会。比如给容器添加背景图片,添加到容器中,再将容器加入面板后老是变成很小的一个图片,在网上找...
  • 系统主要实现对图书图书借阅信息的管理,主要管理读者信息、图书信息、借阅与归还信息、系统用户的信息。 (1)读者信息管理:能够对读者的基本信息进行管理,包括新增读者,如学校新来一名教师,想要借书,就...
  • 图书管理系统数据库访问层设计

    千次阅读 2017-01-31 16:05:56
    根据需求分析系统功能分为读者信息管理模块、图书信息管理模块、图书借阅管理模块、基础信息维护模块和用户管理模块。 4.1 实体层 在实现功能的过程中,需要对数据表进行操作,可以在程序中直接访问数据库,但这样...
  • 实用简单 适合初学者 希望有用 本站基本功能如下: ...商店图书管理:添加,修改,删除,查看。 用户信息管理:查看,修改,删除。 订单信息管理:查看订单清单,更新订单付款,出货状态。删除订单。
  • 基于Java和MySQL的图书管理系统

    万次阅读 多人点赞 2018-06-20 21:41:17
    Java图书管理系统 设计人:wangyunpeng_bio 项目需求 随着计算机的普及和应用水平的提高,经过考察比较,决定利用自己的Java知识开发小型的图书管理系统,方便图书的管理。 图书管理系统是典型的信息管理系统。...
  • 图书馆图书管理系统 oracle数据库

    热门讨论 2009-11-27 17:22:24
    图书馆图书管理系统 主窗口: import java.awt.*; import java.awt.event.*; import javax.swing.*; import myClass.swing.*; public class MainWindow extends JFrame implements ActionListener { JPanel panel1;...
  • Java连接数据库在控制台上操作图书管理系统

    千次阅读 多人点赞 2018-06-28 19:55:01
    本人是一名大二学生,自学Java做了一个图书管理系统数据库课程设计,能力有限,欢迎大佬指点!连接数据库操作/** * 建立数据库连接!! */ package util; import java.sql.*; public class DBConnection { ...
  • 梳理了概念设计,对于实体,实体对应的属性,各实体间的关联,E图书管理系统1 需求分析1.1问题提出1.2 系统分析1.3 功能需求1.4 非功能性需求1.5 开发与运行环境2 数据库设计与实现(负责模块)2.1 概念设计2.2 逻辑...
  • 简易的GUI图书管理系统数据库Mysql) 基本的思路就是一个Mysql的连接工具类,然后就是GUI图形界面显示。我这里主要是使用了DefaultTableModel来添加行数据 图片资源:在setbag中图片可自行寻找。随时替换 一个...
  • 这是一个集选择性登录,查询,删除,修改,添加为一体的管理系统,不光可以是图书管理系统,自己还可以改成其它系统。 1,开始是选择登录,不同的选择进入不同的登陆界面 2, 两个登陆界面的账号和密码是不...
  • 基本满足了用户的注册账号,登陆,借阅图书,归还图书,浏览图书信息等功能,还实现了管理员账号的登陆,以及添加...实现了数据库的增删改查,所以在使用时需要先建立数据库,建表,具体建表信息请参考数据库建立文件
  • 摘要:JAVA源码,综合应用,图书管理系统 图书馆管理系统(Java编写,MySQl数据库),含SQL数据库脚本文件,程序分客户端和服务端。程序可对用户名、用户学号、用户性别、用户班号、用户所在学院、用户密码、用户邮箱...
  • 图书管理系统 java

    2020-12-20 15:30:14
    图书管理系统以方便、快捷、费用低的优点正慢慢地进入人们的生活,将传统的图书管理方式彻底地解脱出来,提高效率,减轻工作人员以往繁忙的工作,减小出错的概率,使读者可以花更多的时间在选择书和看书上,从而使...
  • import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql....图书管理系统 (1)实现图书的增删改查功能,并保存信息到数据库。 (2)退出系统,下次...
  • java图书管理系统源码

    千次阅读 2020-09-07 17:42:12
    java图书管理系统源码 系统主要功能 读者:登录注册,借阅还书,查询书籍,查看当前借阅信息以及历史借阅信息,查看、查询读者借阅榜以及借阅书籍借阅榜,问题反馈以及查询反馈结果等功能。 管理员:对图书、图书分类...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,194
精华内容 3,277
关键字:

java图书管理系统删除数据库

java 订阅