精华内容
下载资源
问答
  • 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的实现方法不好而且很多并没有实际用处

    展开全文
  • JAVA图书管理系统

    2015-12-31 11:33:59
    java开发的图书管理系统。简单、可用。功能齐全。
  • 图书管理系统功能要求: 1. 图书馆(对书本的管理)  1. 初始化图书馆的书本  2. 图书馆有提供借书给用户的功能  3. 图书馆有提供用户还书到图书馆的功能  4. 图书馆提供 查询图书馆的所有图书的功能 2....
    图书馆管理系统功能要求:
    1. 图书馆(对书本的管理)
       1. 初始化图书馆的书本
       2. 图书馆有提供借书给用户的功能
       3. 图书馆有提供用户还书到图书馆的功能
       4. 图书馆提供 查询图书馆的所有图书的功能
    2. 用户系统(对用户管理)
       1. 初始化用户
       2. 用户管理提供注册用户的功能(用户名:首字母小写,至少6位。密码:必须包含小写字母,大写字母,数字,至少6位)
       3. 用户管理提供用户登录的功能
    3. 用户(用户本身图书的管理)
       1. 用户可以借书到自己的书包
       2. 用户可以把自己借到的书本归还给图书馆
       3. 用户可以查询自己已经借阅到的图书

    功能分析:

    1. 只有用户登录后才能显示与书籍相关信息
    2. 用户借书时,被借阅图书馆图书库存减少,放入我的图书容器
    3. 如果同一种书,我的图书容器对象只有1个,但是数量是可以变化的。例如:《设计模式》这本书借了2本,则数量为2,不是2个对象。且,库存为0的图书无法借阅
    4. 还书:当用户借的书还掉是,相应的书本的数量应该减少,如果该书本的数量还完了,则我的图书容器移除这个对象。而还掉书要存入图书馆容器。
    类的设计:

    1. Book(书)
       1. 属性:
          - 书名
          - 作者
    2. User(用户)
       1. 属性:
          - HashMap<Book,Integer>  books ;
          - String userName;
          - String password;
    3. UserManger(用户管理)
       1. 属性:
          - ArrayList<User>  users;
    4. BookManager(图书馆)
       1. 属性:
          - HashMap<Book,Integer>  books ;
    5. UserView(用户管理流程控制)
    6. BookNamagerView(图书馆管理流程控制,需要登录成功才进入流程控制)

    每个类具体的功能 使用 接口定义。再让具体类去实现应有的功能!!!

    注意:类的设计只是大概,如果在设计过程中自己需要新增功能,则可以自行添加编写。


    部分截图:



    源码下载地址:

    https://github.com/benxiaohai8888/Javase/blob/master/Book.zip

    展开全文
  • 基于微信小程序图书管理app技术要点: 1 此系统web端接口采用java语言和ssm框架实现 2 客户端和服务器通信数据,采用封装好的json数据格式 3 实现了图书的添加,修改,删除以及更加关键词查询图书的功能 基于微信小...
  • java图书管理系统 JSP SSH
  • java图书管理系统
  • 所以进行了尝试,将管理员和用户中的图书查询,登录,图书出库合并在一起写了一个接口,用户类和管理员类实现这个接口图书类写了一个抽象类里面都是一些图书的属性,用户类管理员类对图书类进行操作。 具体实现...

        从零开始学Java,本来利用数组只在一个界面就可以实现增删改查功能,学到接口后觉得实现分离效果会更好一些!所以进行了尝试,将管理员和用户中的图书查询,登录,图书出库合并在一起写了一个接口,用户类和管理员类实现这个接口!图书类写了一个抽象类里面都是一些图书的属性,用户类管理员类对图书类进行操作。

    具体实现如下:

    接口:存在三种方法  用户类和管理员类去实现这个接口,并实现着里面的方法

    public interface Person {
    	
    	public boolean login(String user,String pwd);   //登录方法
    	
    	public void search();  //查询方法
    	
    	public void reduce(String s,int i);  // 图书出库
    
    }
    用户类:  实现接口,里面都是用户的方法,在测试类里调用这些方法实现其功能

    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class User implements Person{
    	private final String user = "user";
    	private final String pwd  = "user";
    	
    	List list = new ArrayList();
    	public void addBook(Book book){     //增加图书
        	list.add(book);
        }
    	public boolean login(String user, String pwd) {    //登录方法
    		
    		if(this.user.equals(user) &&this.pwd.equals(pwd)){
        		return true;
        	}
        	
    		return false;
    	}
    	@Override
    	public void reduce(String s, int i) {            //结账
    		Iterator it = list.iterator();
       	    while(it.hasNext()){
       		Book b = (Book)it.next();
       		if(b.getNum().equals(s)){
       			if(b.getCount() >= i){
       				int m = b.getCount()-i;
       			    b.setCount(m);
       			    System.out.println("你的图书总价为:"+(b.getPrice()*i));
       			}else
       				System.out.println("你输入的书本数目超出了当前库存!");
       			
       		}else{
       			System.out.println("没找到,你要加入的图书!");
       		}
    			
    		}
    		
    	}
    	@Override
    	public void search() {                          //查询图书当前情况
    		Iterator it = list.iterator();
        	while(it.hasNext()){
        		Book b = (Book)it.next();
        		System.out.println(b.getNum()+"\t"+b.getName()+"\t"
        				+b.getAnthor()+"\t"+b.getFromTime()
        				+"\t"+b.getPrice()+"\t"+b.getCount());
        	}
    		
    	}
    	
    	 
    
    }
    </pre><pre name="code" class="java"><span style="font-size:18px;">管理员类:   实现接口,里面都是管理员的方法,在测试类里调用这些方法实现其功能</span><span style="font-size:18px;"></span>
    <span style="font-size:18px;">
    </span>
    package com.pv1;
    
    import java.util.*;
    
    public class Admin implements Person {
    
    	private final String user = "admin";
    	private final String pws = "admin";
    
    	List list = new ArrayList();
    
    	public boolean login(String user, String pwd) { // 登录方法
    
    		if (this.user.equals(user) && this.pws.equals(pwd)) {
    			return true;
    		}
    		return false;
    	}
    
    	public void addBook(Book book) { // 增加图书
    		list.add(book);
    	}
    
    	public void search() { // 查询方法
    		Iterator it = list.iterator();
    		while (it.hasNext()) {
    			Book b = (Book) it.next();
    			System.out.println(b.getNum() + "\t" + b.getName() + "\t"
    					+ b.getAnthor() + "\t" + b.getFromTime() + "\t"
    					+ b.getPrice() + "\t" + b.getCount());
    		}
    	}
    
    	public void reduce(String num, int i) { // 图书出库
    
    		for (int j = 0; j < list.size(); j++) {
    			Book b = (Book) list.get(j);
    			if (b.getNum().equals(num)) {
    				if (b.getCount() >= i) {
    					int m = b.getCount() - i;
    					b.setCount(m);
    					System.out.println("取出成功!现在此书库存为:" + m);
    					j--;
    					break;
    				} else
    					System.out.println("你输入的书本数目超出了当前库存!");
    
    			}
    			if (j == list.size()) {
    
    				System.out.println("没找到,你要加入的图书!");
    			}
    
    		}
    	}
    
    	public void increase(String num, int i) { // 图书入库
    
    		for (int j = 0; j < list.size(); j++) {
    			Book b = (Book) list.get(j);
    			if (b.getNum().equals(num)) {
    				if (i < 0) {
    					System.out.println("你加入的图书数目不合法!");
    				} else {
    					int m = b.getCount() + i;
    					b.setCount(m);
    				}
    
    			}
    			if (j == list.size()) {
    				System.out.println("没找到,你要加入的图书!");
    			}
    		}
    	}
    
    	public void delete(String num) {       //删除提供编号的图书
    		int j = 0;
    		for (j = 0; j < list.size(); j++) {
    			Book b = (Book) list.get(j);
    			if (b.getNum().equals(num)) {
    				list.remove(b);
    				System.out.println("删除成功!");
    				j--;
    				break;
    			}
    		}
    		if (j == list.size()) {
    			System.out.println("未找到你要删除的图书!请确认编号后再删");
    		}
    	}
    	public boolean guanSearch(String num){
    		for (int j = 0; j < list.size(); j++) {
    			Book b = (Book) list.get(j);
    			if (b.getNum().equals(num)) {
    				return true;
    			}
    		}
    		return false;
    	}
    
    	public void guan(String num, String name, String auther, String date,
    			double price, int count) {            // 修改提供编号的图书
    		int j = 0;
    		for ( j = 0; j < list.size(); j++) {
    			Book b = (Book) list.get(j);
    			if (b.getNum().equals(num)) {
    				b.setAnthor(auther);
    				b.setCount(count);
    				b.setFromTime(date);
    				b.setName(name);
    				b.setPrice(price);
    				break;
    			}
    		}
    	}
    }


    图书类:抽象类,里面全部是属性,方便用户管理员对其操作。

    package com.pv1;
    
    import java.util.*;
    
    public class Book {
    	
    	private String num ;
    	private String name;
    	private String anthor;
    	private String fromTime;
    	private double price;
    	private int count;
    	
    	
    	public String getNum() {
    		return num;
    	}
    	public void setNum(String num) {
    		this.num = num;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getAnthor() {
    		return anthor;
    	}
    	public void setAnthor(String anthor) {
    		this.anthor = anthor;
    	}
    	public String getFromTime() {
    		return fromTime;
    	}
    	public void setFromTime(String fromTime) {
    		this.fromTime = fromTime;
    	}
    	public double getPrice() {
    		return price;
    	}
    	public void setPrice(double price) {
    		this.price = price;
    	}
    	public int getCount() {
    		return count;
    	}
    	public void setCount(int count) {
    		this.count = count;
    	}
    	
    	
    	
    	
    
    }
    

    测试类:

    package com.pv1;
    
    import java.util.*;
    
    public class BookTest {
    
    	public static void main(String[] args) {
    
    		Scanner input = new Scanner(System.in);
    		Book bo = new Book();           //在开始时加入一本图书,所用对象
    		Book bo1 = null;       //循环加入图书建立的对象,开始设成空,防止加入图书时被覆盖
    		List list = new ArrayList();   //建立一个集合,存储管理员要添加的图书信息的对象
    		Admin ad = new Admin();      //建立管理员对象,管理员操作时调用管理员类中对象
    		User us = new User();        //建立用户对象,管理员操作时调用用户类中对象
    		boolean ad1 = true;         //接受进入管理员操作界面的返回值
    		boolean us1 = true;         //接受进入用户操作界面的返回值
    		bo.setAnthor("刘冰");        //书籍为空,加入一本图书
    		bo.setCount(20);
    		bo.setNum("1001");
    		bo.setName("一本道");
    		bo.setFromTime("2015-2-50");
    		bo.setPrice(250.0);
    		ad.addBook(bo);                //通过对象传递在管理员类中加入一本图书
    		us.addBook(bo);
    		System.out.print("请输入用户名:");  //用户输入 用户名 密码
    		String user = input.next();
    		System.out.print("请输入密码:");//
    		String pwd = input.next();
    		ad1 = ad.login(user, pwd);  //将 用户名 密码 传入管理员类中进行判断返回Boolean类型接受
    		us1 = us.login(user, pwd);  //将 用户名 密码 传入用户类中进行判断返回Boolean类型接受
    		if (ad1) {          //如果管理员类返回true进入   管理员操作界面
    			System.out.println("图书编号\t" + "书名\t" + "作者\t" + "出版日期\t" + "\t价格\t"
    					+ "库存");
    			ad.search();
    			while (true) {
    				bo1 = new Book();
    				System.out.println("1.查询 2.图书入库 3.图书出库 "
    						+ "4.新增图书 5.修改 6.删除 7.退出\t请输入您的选择:");
    				int xuan = input.nextInt();
    				switch (xuan) {
    				case 1:
    					System.out.println("图书编号\t" + "书名\t" + "作者\t" + "出版日期\t"
    							+ "价格\t" + "库存");
    					ad.search();
    					break;
    				case 2:
    					System.out.print("请输入你想入库的图书编号:");
    					String num = input.next();
    					System.out.print("请输入你想添加本图书的数量:");
    					int cou = input.nextInt();
    					ad.increase(num, cou);
    					break;
    				case 3:
    					System.out.print("请输入你想取出的图书编号:");
    					num = input.next();
    					System.out.print("请输入你想取出图书的数量:");
    					cou = input.nextInt();
    					ad.reduce(num, cou);
    					break;
    				case 4:
    					System.out.print("请输入你想添加的图书编号:");
    					num = input.next();
    					System.out.print("请输入你想添加图书的书名:");
    					String name = input.next();
    					System.out.print("请输入你想添加图书的作者:");
    					String auther = input.next();
    					System.out.print("请输入你想添加图书的出版日期:");
    					String date = input.next();
    					System.out.print("请输入你想添加图书的价格:");
    					double price = input.nextDouble();
    					System.out.print("请输入你想添加图书的库存:");
    					cou = input.nextInt();
    					bo1.setAnthor(auther);
    					bo1.setCount(cou);
    					bo1.setFromTime(date);
    					bo1.setName(name);
    					bo1.setNum(num);
    					bo1.setPrice(price);
    					ad.addBook(bo1);
    
    					break;
    				case 5:
    					System.out.print("请输入你想修改图书的编号:");
    					num = input.next();
    					boolean bool = ad.guanSearch(num);
    					if (bool) {
    						System.out.print("请输入你想修改图书的书名:");
    						name = input.next();
    						System.out.print("请输入你想修改图书的作者:");
    						auther = input.next();
    						System.out.print("请输入你想修改图书的出版日期:");
    						date = input.next();
    						System.out.print("请输入你想修改图书的价格:");
    						price = input.nextDouble();
    						System.out.print("请输入你想修改图书的库存:");
    						cou = input.nextInt();
    						ad.guan(num, name, auther, date, price, cou);
    					} else
    						System.out.println("没找到你要修改的图书,请确认后再删");
    
    					break;
    				case 6:
    					System.out.print("请输入你想删除图书的编号:");
    					num = input.next();
    					ad.delete(num);
    					break;
    				case 7:
    					System.exit(0);
    					break;
    				default:
    					System.out.println("你输入的数字不合法!");
    				}
    			}
    			
    			
    			
    		} else if (us1) {       //如果用户类返回true进入   用户操作界面
    			System.out.println("图书编号\t" + "书名\t" + "作者\t" + "出版日期\t" + "价格\t"
    					+ "库存");
    			us.search();
    			while (true) {
    				System.out.println("1.查询 2.结账 3.退出\t请输入您的选择:");
    				int xuan = input.nextInt();
    				if (xuan == 1) {
    					us.search();
    				} else if (xuan == 2) {
    					System.out.print("请输入您想购买的编号:");
    					String num = input.next();
    					System.out.print("请输入你想购买图书的的数量:");
    					int cou = input.nextInt();
    					us.reduce(num, cou);
    				} else if (xuan == 3) {
    					System.exit(0);
    				} else
    					System.out.println("您输入的数字不合法请重新输入!");
    			}
    
    		} else
    			System.out.println("您输入的用户名,密码错误,请核对后重新输入!");
    
    	}
    
    }
    



    展开全文
  • java实现简单的图书管理系统

    万次阅读 多人点赞 2019-04-13 17:49:44
    一、项目分布 Book类: 定义了书的一些属性(书名,作者,价格,分类,状态)并且写了属性的get、set方法 ...operate接口:操作的接口,操作方法:查询/查阅,删除/借阅,增加/还书,显示书籍列表 Root类:继承...

    一、项目分布

    在这里插入图片描述
    Book类: 定义了书的一些属性(书名,作者,价格,分类,状态)并且写了属性的get、set方法
    Library类: 写了登录函数(1、普通用户,2、管理员,3、退出系统),
    Person类:定义的人的属性(姓名,性别,年龄)并且写了属性的get、set方法,定义了一些书。
    operate接口:操作的接口,操作方法:查询/查阅,删除/借阅,增加/还书,显示书籍列表
    Root类:继承了Person类,实现operate(查阅,删除,增加,显示书籍列表)接口
    User类:继承了Person类,实现operate(查询,借阅,还书,显示书籍列表)接口
    Main类:Main中的主函数开启整个项目。

    模型图:

    在这里插入图片描述
    声明: 本项目只是一个简单的面向对象入门小项目,有一些基础理论需要掌握,比如对象,类,抽象类,接口,继承,实现,数组及数组的操作,for循环,while循环,switch语句,if语句。

    二、代码展示:

    1. Book类
    public class Book {
    	private String name; //书名
    	private String author; //作者
    	public double price; //价格
    	private String category; //分类
    	private boolean state; //状态  true-未借出  false-已借出
    
    	//通过构造函数给定书的属性
    	public Book(String name,String author,double price,String category,boolean state){
    		this.author = author;
    		this.name = name;
    		this.price = price;
    		this.category = category;
    		this.state = state;
    	}
    
    	public Book() {  //默认10本书
    		this(10);
    	}
    	public Book(int i) {
    		Person.books = new Book[i];
    	}
    
    	//属性的获取和设置
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getAuthor() {
    		return author;
    	}
    	public void setAuthor(String author) {
    		this.author = author;
    	}
    	public double getPrice() {
    		return price;
    	}
    	public void setPrice(double price) {
    		this.price = price;
    	}
    	public String getCategory() {
    		return category;
    	}
    	public void setCategory(String category) {
    		this.category = category;
    	}
    	public boolean getState() {
    		return state;
    	}
    	public void setState(boolean state) {
    		this.state = state;
    	}
    }
    
    
    1. Library类
    import java.util.Scanner;
    
    public class Library {
    	Scanner sc = new Scanner(System.in);
    	//登录函数:显示登录界面进行选择登录
    	public void login() {
    		int count = 0;
    		Person p = null;
    		while (count < 2) {
    			System.out.println("===============jewel图书管理系统===============");
    			System.out.println("欢迎讨论指正! qq505791225"+"\n");
    			System.out.println("请登录:1.普通用户  2.管理员登录  3.退出系统");
    
    			int n = sc.nextInt();
    			//通过输入的值进行登录判断
    			if (n == 3) {
    				return;
    			}
    			switch (n) {
    				case 1:
    					System.out.println("请输入姓名:");
    					String Uname = sc.next();
    					System.out.println("请输入性别:");
    					String Usex = sc.next();
    					System.out.println("请输入年龄:");
    					int Uage = sc.nextInt();
    
    					p = new User(Uname,Usex,Uage); //构造普通用户对象
    
    					System.out.println("登录成功!");
    					System.out.println("当前普通用户:"+"姓名:" + p.getName() + " "+"性别:" + p.getSex() + " "+"年龄"+ p.getAge());
    					//普通用户循环操作
    					while (true) {
    						System.out.println("请输入你的操作: 1.查询书籍 2.借阅书籍 3.归还书籍 4.显示书籍列表 5.退出");
    						int i = sc.nextInt();
    						if (i == 5) {
    							System.out.println("您已成功退出!");
    							break;
    						}else {
    							p.operate();  //调用普通用户的操作方法
    						}
    					}
    					break;
    				case 2:
    					System.out.println("请输入管理员姓名:");
    					String Rname = sc.next();
    					System.out.println("请输入性别:");
    					String Rsex = sc.next();
    					System.out.println("请输入年龄:");
    					int Rage = sc.nextInt();
    
    					p = new Root(Rname,Rsex,Rage);//构造管理员对象
    
    					System.out.println("登录成功!");
    					System.out.println("当前管理员:"+"姓名:" + p.getName() + " "+"性别:" + p.getSex() + " "+"年龄" + p.getAge());
    					while (true) {
    						System.out.println("请输入你的操作: 1.整理书籍 2.查阅书籍 3.增加书籍 4.删除书籍 5.显示书籍列表 6.退出");
    						int j = sc.nextInt();
    						if (j == 6) {
    							System.out.println("您已成功退出!");
    							break;
    						}else{
    							p.operate();//调用管理员的操作方法
    						}
    					} break;
    			}
    		}
    	}
    }
    
    1. Person类(抽象类)
    abstract class Person {
    	public String name;
    	public String sex;
    	public int age;
    	/**
    	 * 	默认定义10本书籍。(预留3本新书的buffer,用来添加书籍)
    	 */
    	public static Book[] books = new Book[]{
    			new Book("西游记", "吴承恩", 10, "名著", true),
    			new Book("红楼梦", "曹雪芹", 20, "名著", true),
    			new Book("三国演义", "罗贯中", 15, "名著", true),
    			new Book("小茗同学", "小明", 5, "杂志", true),
    			new Book("C与指针", "马老师", 35, "计算机", true),
    			new Book("Java编程思想", "王老师", 55, "计算机", true),
    			new Book("新世界", "陈宇", 15, "杂志", true),
    			new Book("阿衰与大头妹", "阿衰", 5, "漫画", true),
    			new Book("一个人就一个人", "刘同", 35, "小说", true),
    			new Book("活着", "陈彤", 36, "小说", true),
    			new Book(),
    			new Book(),
    			new Book(),
    	};
    
    	public Person(String name, String sex, int age) {
    		this.age = age;
    		this.name = name;
    		this.sex = sex;
    	}
    
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getSex() {
    		return sex;
    	}
    	public void setSex(String sex) {
    		this.sex = sex;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	/**
    	 * 	抽象类中的抽象方法
    	 */
    	public abstract void operate();
    }
    
    
    1. operate接口
    public interface operate{  //操作的接口
        void select(Book[] books); //查询,查阅
        void delete(Book[] books);//删除,借阅
        void add(Book[] books); //增加,还书
        void list(Book[] books); //显示书列表
    }
    
    1. Root类
    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.Scanner;
    
    public class Root extends Person implements Operate {
    	//继承了人的类,需要重写它的抽象方法operate,实现了operate接口,需要重写接口内的方法
    	
    	public Root(String name, String sex, int age) {
    		//调用人基类的构造函数
    		super(name, sex, age);
    	}
    
    	Scanner sc = new Scanner(System.in);
    
    	/**
    	 * 管理员的操作
    	 */
    	@Override
    	public void operate() {
    		System.out.print("请输入确认操作:");
    		int i = sc.nextInt();
    		switch (i) {
    			case 1:
    				//整理
    				sort(books);
    				break;
    			case 2:
    				//查
    				select(books);
    				break;
    			case 3:
    				//加
    				add(books);
    				break;
    			case 4:
    				//删
    				delete(books);
    				break;
    			case 5:
    				//列表
    				list(books);
    				break;
    			default:
    				System.out.println("输入有误!");
    				break;
    
    		}
    	}
    
    	/**
    	 * 	compareable整理,重写compare to,如果数组中有空的,则会出现空指针异常,把不空的拷到另一个新的数组,然后实现
    	 * @param books
    	 */
    	public void sort(Book[] books) {
    		System.out.println("图书馆中的书按价格整理如下:" + "\n" + "【书名】—— 【作者】——【价格】——【分类】——状态");
    		Arrays.sort(books, new Comparator<Book>() {
    			@Override
    			public int compare(Book o1, Book o2) {
    				return (int) (o1.getPrice() - o2.getPrice());
    			}
    		});
    		//遍历数组打印书的列表
    		for (int i = 0; i < books.length; i++) {
    			if (books[i].price != 0) {
    				System.out.println(
    						"【" + books[i].getName() + "】—— 【" + books[i].getAuthor() + "】——【" + books[i].getPrice()
    								+ "】——【" + books[i].getCategory() + "】——" + books[i].getState());
    			}
    		}
    	}
    
    	@Override
    	public void select(Book[] books) {
    		System.out.println("请输入书名进行查询:");
    		String name = sc.next();
    		if (name != null) {
    			boolean flag = false;
    			int bookNum = 0;
    			for (int i = 0; i < books.length; i++) {
    				if (books[i].getName() != null && name.equals(books[i].getName())) {
    					flag = true;
    					bookNum = i;
    					break;
    				}
    			}
    			if (!flag) {
    				System.out.println("未查询到此书籍!");
    			} else {
    				System.out.println("书籍信息为:" + "\n" + "【书名】—— 【作者】——【价格】——【分类】——状态");
    				System.out.println(
    						"【" + books[bookNum].getName() + "】—— 【" + books[bookNum].getAuthor() + "】——【" + books[bookNum]
    								.getPrice() + "】——【" + books[bookNum].getCategory() + "】——" + books[bookNum]
    								.getState());
    			}
    		}
    	}
    
    	@Override
    	public void delete(Book[] books) {
    		System.out.println("请输入要删除的书名:");
    		String str = sc.next();
    		if (str != null) {
    			for (int i = 0; i < books.length; i++) {
    				if (books[i].getName().equals(str)) {
    					books[i] = null;
    					System.out.println("删除成功!");
    					break;
    				}
    			}
    		}
    
    	}
    
    	@Override
    	public void add(Book[] books) {
    		System.out.println("请输入书名:");
    		String name = sc.next();
    		System.out.println("请输入作者:");
    		String author = sc.next();
    		System.out.println("请输入价格:");
    		double price = sc.nextDouble();
    		System.out.println("请输入分类:");
    		String category = sc.next();
    
    		boolean flag = false;
    		for (int i = 0; i < books.length; i++) {
    			if (books[i].getName() == null) {
    				flag = true;
    				books[i].setName(name);
    				books[i].setAuthor(author);
    				books[i].setPrice(price);
    				books[i].setCategory(category);
    				books[i].setState(true);
    				System.out.println("添加成功");
    				break;
    			}
    		}
    		if (!flag) {
    			System.out.println("【警告】数组预留buffer最多只能添加3本新书,没有位置放置新书了,如需添加多余3本,需要在‘Person’类中添加buffer!" + "\n");
    		}
    
    	}
    
    	@Override
    	public void list(Book[] books) {
    		System.out.println("图书列表如下:" + "\n" + "【书名】—— 【作者】——【价格】——【分类】——状态");  //打印Book数组
    		for (int i = 0; i < books.length; i++) {
    			if (books[i] != null) {
    				if (books[i].price != 0) {
    					System.out.println(
    							"【" + books[i].getName() + "】—— 【" + books[i].getAuthor() + "】——【" + books[i].getPrice()
    									+ "】——【" + books[i].getCategory() + "】——" + books[i].getState());
    
    				}
    			}
    		}
    	}
    }
    
    1. User类
    import java.util.Scanner;
    
    public class User extends Person implements Operate {   //user类继承了人的类,  实现operate接口
    
    	public User(String name, String sex, int age) {
    		//调用人基类的构造函数(派生类不继承基类的构造函数)
    		super(name, sex, age);
    	}
    
    	Scanner sc = new Scanner(System.in);
    
    	@Override
    	public void operate() {  //普通用户的操作
    
    		System.out.print("请输入确认操作:");
    		int i = sc.nextInt();
    		switch (i) {
    			case 1:
    				//查
    				select(books);
    				break;
    			case 2:
    				//借
    				delete(books);
    				break;
    			case 3:
    				//还
    				add(books);
    				break;
    			case 4:
    				//书列表
    				list(books);
    				break;
    			default:
    				System.out.println("输入有误!");
    				break;
    		}
    	}
    
    	@Override
    	public void select(Book[] books) {
    		System.out.println("请输入书名进行查询:");
    		String name = sc.next();
    		if (name != null) {
    			boolean flag = false;
    			int bookNum = 0;
    			for (int i = 0; i < books.length; i++) {
    				if (books[i].getName() != null && name.equals(books[i].getName())) {
    					flag = true;
    					bookNum = i;
    					break;
    				}
    			}
    			if (!flag) {
    				System.out.println("未查询到此书籍!");
    			} else {
    				System.out.println("书籍信息为:" + "\n" + "【书名】—— 【作者】——【价格】——【分类】——状态");
    				System.out.println(
    						"【" + books[bookNum].getName() + "】—— 【" + books[bookNum].getAuthor() + "】——【" + books[bookNum]
    								.getPrice() + "】——【" + books[bookNum].getCategory() + "】——" + books[bookNum]
    								.getState());
    			}
    		}
    	}
    
    	@Override
    	public void delete(Book[] books) {
    		System.out.println("请输入要借阅的书名:");
    		String name = sc.next();
    		if (name != null) {
    			for (int i = 0; i < books.length - 1; i++) {
    				if (books[i].getName().equals(name)) {
    					//借走书时设置状态为false
    					if (!books[i].getState()) {
    						System.out.println("【" + name + "】" + "已经被借出!");
    					} else {
    						books[i].setState(false);
    						System.out.println("借阅成功!");
    					}
    					break;
    				}
    			}
    		}
    	}
    
    	@Override
    	public void add(Book[] books) {
    
    		System.out.println("请输入要还的书名:");
    		String name = sc.next();
    
    		if (name != null) {
    			boolean flag = true;
    			int i = 0;
    			while (flag) {
    				if (books[i].getName().equals(name)) {
    					if (!books[i].getState()) {
    						books[i].setState(true);
    						System.out.println("还书成功!");
    						flag = false;
    					} else {
    						System.out.println("该书籍已经被还回!");
    						break;
    					}
    				}
    				i++;
    			}
    		}
    	}
    
    
    	@Override
    	public void list(Book[] books) {
    		System.out.println("图书列表如下:" + "\n" + "【书名】—— 【作者】——【价格】——【分类】——状态");  //打印Book数组
    		for (int i = 0; i < books.length; i++) {
    			if (books[i] != null) {
    				if (books[i].price != 0) {
    					System.out.println(
    							"【" + books[i].getName() + "】—— 【" + books[i].getAuthor() + "】——【" + books[i].getPrice()
    									+ "】——【" + books[i].getCategory() + "】——" + books[i].getState());
    
    				}
    			}
    		}
    	}
    }
    
    1. Main类
    public class Main {
        public static void main(String[] args) {
            Library library = new Library(); //构造Library对象
            library.login(); //调用对象的登录方法。
        }
    }
    

    三、实现结果

    1. 登录界面
      普通用户登录
      在这里插入图片描述
      2.普通用户:查询、借阅、归还 、显示列表
      在这里插入图片描述
      在这里插入图片描述
      3.管理员登录,按图书价格整理书籍
      在这里插入图片描述
    2. 管理员添加书籍
      在这里插入图片描述
    3. 管理员删除书籍
      在这里插入图片描述

    如有错误欢迎讨论指正 qq 505791225

    展开全文
  • 分为图书,用户和操作(增删改查)三大块,适合新手练习和理解。图书部分用链表存储;图书操作部分用接口实现,包含添加,借出,删除,展示,退出,查找,返回等功能。
  • 关于java实验报告模板 1掌握JavaApplet的程序结构和开发...掌握布局管理器的用法 6理解ActionEvent事件的含义 7掌握事件源监视器处理事件的接口这三个概念 二实验内容 1.编写有三个文本框和一个按钮的JavaApplet程序要
  • 使用java实现简单的图书管理系统,本项目将链表,继承,向上转型,多态,抽象类,接口等重要知识点糅合在一起,以进一步掌握他们的用法及区别。
  • 一,首先,我们需要分析图书管理系统都需要哪些部分组成? 大的方面分为三个部分:图书、用户(管理员和普通用户)、图书系统的功能。 图书: 先是一个关于书籍的类(Book),里边存放当前书籍的书名、作者、...
  • 选择了图书管理系统,会用到的javaSE知识有:变量、包、继承、类、接口、循环结构等。是一个很综合的典例。 二、核心需求 1.用户可以登录到系统上 分为 管理员、普通用户两种角色,这两种不同的角色根据自己的身份...
  • 图书管理系统(了解java web的发展) 写在前面: 这是没有前后端分离前项目的开发(高耦合),用于了解java web开发的发展。 1.本项目用到的java技术栈(这些虽然现在很少使用了,但它们是基础)tomcat,servlet,...
  • 文章目录简介数据访问层图书种类接口TypeDao图书管理数据访问层接口BookDao数据访问层实现类BookDaoImpl表现层测试小结 简介 上一篇做完了出版社管理,现在来做比较复杂的图书管理 数据访问层图书种类接口TypeDao...
  • java图书管理系统(前后端分离后)

    千次阅读 2020-02-20 15:09:00
    图书管理系统(前后端分离)
  • 实验目标 了解CollectionListSetMap等常用数据结构的层次结构 掌握LinkListVectorArrayListHashTableHashMap等类的用法 掌握Enumeration枚举及Iterator迭代器的遍历用法 了解自学HashSetTreeSet这两个Set接口下的...
  • Java集合图书管理系统

    2020-08-10 12:04:00
    图书管理系统 新建一个项目 bookmis 1.创建一个书类com.hr.Book,有属性 id,name,author,price,number,page,info 2.创建一个接口BookDao,有如下方法 public List<Book> findAll(); //查所有 public Book ...
  • Java图书管理系统

    万次阅读 多人点赞 2019-10-23 14:47:22
    思路:所有包都在book_manage包里 利用面向对象的多态特性去除了很多if-else的...另外一个类是BookList,这个类是用来管理每一个书,通过这个类来寻找每一本书。 private Book[] books = new Book[100]; Book数组里...
  • 该系统实现了整个图书商店的进货、销售等管理的一体化,内置了网银的接口
  • 这几日学习了Java集合框架的相关知识,为了巩固对集合框架中一些具体实现接口的学习和使用,特意做了一个针对性的练习题。 下面让我们一起来看一下吧~ 图书管理存储: 在图书管理系统中为了方便管理图书,将图书...
  • Java图书管理系统(初学者必看的小项目)

    万次阅读 多人点赞 2018-01-08 23:41:49
    图书管理系统项目 第一天:准备把整个框架顺一遍,第一次独立写这个算是我人生中第一个java小项目,不清楚多少天能完成,我会坚持把自己的心得写在这里,主要是给自己看(不是学文的,文笔很差见谅,争取把注释写...
  • Java面向对象 -- 图书管理系统

    千次阅读 多人点赞 2018-11-13 21:34:58
    题目:利用抽象类、接口等实现简单的图书管理系统。 整体布局 Test 类 package user.action; import java.util.Scanner; public class Test { public void choose() { while (true) { System.out.println(&...
  • Java实现图书管理系统

    千次阅读 多人点赞 2019-10-20 17:46:42
    简单图书管理系统 1.需求分析 a)角色有两种:普通用户 管理员 针对普通用户,支持的操作是 a)查找书籍 b)借阅书籍 c)归还书籍 针对管理员,支持的操作是: a)查找书籍 b)增加书籍 c)删除书籍 d)打印所有书籍...
  • Java 小型图书管理系统

    千次阅读 2020-11-01 10:06:39
    以下为小型图书管理系统模式图: 模式总体概述: 其中IBorrower接口确定Borrower类标准,Library类为单例设计模式,即图书馆只有一个。Book类为Borrower类的内部类,libraryBook类为Library类的内部类。最后利用...
  • Java实现简单的图书管理系统

    千次阅读 2021-01-23 01:53:04
    图书管理系统简介知识点类封装包接口继承创建书(Book)书架(BookList)主函数(Main)用户(User)管理员(Administrator)接口(IOperation)查(FinOperation)增(AddOperation)删(DelOperation)显示(DisOperation...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,001
精华内容 6,400
关键字:

java图书管理接口

java 订阅