项目简介:

该项目为图书管理系统,实现用户的区分,包括管理员和普通用户,管理员的行为包括:添加图书,删除图书,查找图书,显示图书和退出程序等,普通用户的用法包括:查找图书,借阅图书,归还图书和退出程序。

思路简介:
利用类,对象,抽象类,接口,继承,封装和多态及组合等知识,将对象提取出来,对象----用户和书,用户可以分为管理员和普通用户,所以设置一个抽象类User,管理员和普通用户继承该抽象类,由于书还要包括书架,所以书和书架分两个类,为了实现对应的操作,并且是操作的方法一致,所以要构造一个操作的接口,其他的操作用类来实现该接口,就完成了对应的操作。具体实现方式见详细代码!

详细代码: 
  1、book包:

1.1Book类:

package book;public class Book {private String name;private String author;private int price;private String type;private boolean isBorrowed;//构造方法public Book(String name, String author, int price, String type) {this.name = name;this.author = author;this.price = price;this.type = type;}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 int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public String getType() {return type;}public void setType(String type) {this.type = type;}public boolean isBorrowed() {return isBorrowed;}public void setBorrowed(boolean borrowed) {isBorrowed = borrowed;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +", isBorrowed=" + isBorrowed +'}';}
}

1.2BookList类:

package book;
public class BookList {public Book[] books = new Book[10];private int usedSize;//通过构造方法初始化三本书public BookList(){books[0] = new Book("三国演义","罗贯中",100,"小说");books[1] = new Book("西游记","吴承恩",200,"小说");books[2] = new Book("红楼梦","曹雪芹",300,"小说");this.usedSize = 3 ;}public int getUsedSize() {return usedSize;}public void setUsedSize(int usedSize) {this.usedSize = usedSize;}//通过下标 获取书public Book getPos(int pos){return books[pos];}//存书的位置public void setBooks(Book book,int pos){books[pos]=book;}
}

2、operations包:

2.1  IOperation接口:

package operations;import book.BookList;public interface IOperation {void work(BookList bookList);
}

2.2AddOperation类:

package operations;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class AddOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("添加图书!");System.out.println("请输入你要添加的图书的名字:");Scanner scanner=new Scanner(System.in);String name=scanner.nextLine();System.out.println("请输入你要添加的图书的作者:");String author=scanner.nextLine();System.out.println("请输入你要添加的图书的价格:");int price=scanner.nextInt();scanner.nextLine();//读取回车System.out.println("请输入你要添加的图书的类型:");String type=scanner.nextLine();//通过构造方法,实例化一本书Book book=new Book(name,author,price,type);//currentSize当前书架上书的数量int currentSize=bookList.getUsedSize();//把书放到下标为currentSize的位置处bookList.setBooks(book,currentSize);//书的数量加1bookList.setUsedSize(currentSize+1);System.out.println("添加成功!");}
}

2.3BorrowedOperation类:

package operations;import book.Book;
import book.BookList;import java.util.Scanner;public class BorrowedOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("借阅图书!");System.out.println("请输入你要借阅的图书的名字:");Scanner scanner=new Scanner(System.in);String name=scanner.nextLine();int currentSize=bookList.getUsedSize();//历遍书架上的每一本书for (int i = 0; i < currentSize; i++) {Book book=bookList.getPos(i);if(name.equals(book.getName())){book.setBorrowed(true);//设置为借出状态System.out.println("借阅成功!");return;}}}
}

2.4DelOperation类:

package operations;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class DelOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("删除图书!");System.out.println("请输入你要删除的图书的名字:");Scanner scanner=new Scanner(System.in);String name=scanner.nextLine();int index=-1;//是否有书的标志//遍历数组,看是否有你要删除的图书的下标int currentSize=bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book=bookList.getPos(i);if(name.equals(book.getName())){index=i;break;}}//没有要删除的书if(index==-1){System.out.println("没有你要删除的这本书!");return;}//有这本书,后一项覆盖前一项for (int i = index; i <currentSize-1 ; i++) {//找到要删除的书的后一本Book book=bookList.getPos(i+1);//把这本书放到前一个位置上bookList.setBooks(book,i);}//把数组最后一项指向nullbookList.setBooks(null,currentSize-1);//书架上书的数量 -1bookList.setUsedSize(currentSize-1);System.out.println("删除成功!");}
}

2.5DisplayOperation类:

package operations;
import book.Book;
import book.BookList;
public class DisplayOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("显示所有图书!");int currentSize=bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book=bookList.getPos(i);System.out.println(book);}}
}

2.6ExitOperation类:

package operations;
import book.BookList;
public class ExitOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("退出程序!");System.exit(0);//退出}
}

2.7ReturnOperation类:

package operations;
import book.Book;
import book.BookList;
import java.util.Scanner;public class ReturnOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("归还图书!");System.out.println("请输入你要归还的图书的名字:");Scanner scanner=new Scanner(System.in);String name=scanner.nextLine();//历遍数组,找书int currentSize=bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book=bookList.getPos(i);if(name.equals(book.getName())){book.setBorrowed(false);//设置为:未被借出状态System.out.println("归还图书成功!");return;}}System.out.println("没有你要归还的书!");}
}

2.8SearchOperation类:

package operations;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class SearchOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("查找图书!");System.out.println("请输入你要查找的图书的名字:");Scanner scanner=new Scanner(System.in);String name=scanner.nextLine();//找书int currentSize=bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book=bookList.getPos(i);if(name.equals(book.getName())){System.out.println("找到"+name+"了");System.out.println(book);return;}}System.out.println("没有这本书!");}
}

3、user包:

3.1User类:

package user;
import book.BookList;
import operations.IOperation;//抽象类
public abstract class User {protected String name;public User(String name){this.name=name;}//使用者都有选择菜单public abstract int menu();protected IOperation[] iOperations;//接口数组public void doOperation(int choice, BookList bookList){iOperations[choice].work(bookList);}
}

3.2AdminUser类:

package user;
import operations.*;
import java.util.Scanner;
public class AdminUser extends User {public AdminUser(String name) {super(name);//接口数组this.iOperations=new IOperation[]{new ExitOperation(),new SearchOperation(),new AddOperation(),new DelOperation(),new DisplayOperation()};}public int menu(){System.out.println("*********************************");System.out.println( "hello !   "+name+"欢迎登入图书管理系统!");System.out.println("1.查找图书");System.out.println("2.新增图书");System.out.println("3.删除图书");System.out.println("4.显示图书");System.out.println("0.退出系统");System.out.println("*********************************");System.out.println("请输入你的操作:");Scanner scanner=new Scanner(System.in);int choice=scanner.nextInt();return choice;}
}

3.3NormalUser类:

package user;
import operations.*;
import java.util.Scanner;
public class NormalUser extends User {public NormalUser(String name) {super(name);this.iOperations=new IOperation[]{new ExitOperation(),new SearchOperation(),new BorrowedOperation(),new ReturnOperation(),new DisplayOperation()};}public int menu(){System.out.println("*********************************");System.out.println( "hello !   "+name+"欢迎登入图书管理系统!");System.out.println("1.查找图书");System.out.println("2.借阅图书");System.out.println("3.归还图书");System.out.println("4.显示图书");System.out.println("0.退出系统");System.out.println("*********************************");Scanner scanner=new Scanner(System.in);int choice=scanner.nextInt();return choice;}
}

4、Main--管理器:

import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;
import java.util.Scanner;public class Main {//登入public static User login(){System.out.println("请输入你的姓名:");Scanner scanner=new Scanner(System.in);String userName=scanner.nextLine();System.out.println("请输入你的身份:1-管理员,0-普通用户");int choice= scanner.nextInt();if(choice==1){return new AdminUser(userName);}else{return new NormalUser(userName);}}public static void main(String[] args) {//1、准备数据BookList bookList=new BookList();//2、登录,User user= login();//向上转型while(true){int choice =  user.menu();//多态,动态绑定user.doOperation(choice,bookList);}}
}

5、测试

【JavaSE】经典项目 图书管理系统相关推荐

  1. Github 精选开源项目-图书管理系统

    Github 精选开源项目-图书管理系统 项目是一款图书管理系统[Book-manager],适用于大学生实训的图书管理系统,这是一个非常精简化的图书管理系统,可拓展性高,集成主流框架. 首先放出Gi ...

  2. JavaSE必修项目——图书馆管理系统

    前言: 朋友们,经过了一段JavaSE知识的历练,终于来到了这个艰难的图书馆管理系统.对于刚学习的小白来说,是一次不错的项目体验,将理论和实践结合起来,会是一次巨大提升.接下来,就说说这个图书馆管理系 ...

  3. Java项目:图书管理系统(java+SSM+jsp+mysql+maven)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 功能包括(管理员和学生角色): 管理员和学生登录,图书管理,图书添加删除修改,图书 借阅,图书归还,图书查看,学生管理,借还管 ...

  4. Java项目:图书管理系统(java+JSP+layui+bootstrap+Servlet+Mysql)

    源码获取:俺的博客首页 "资源" 里下载! 项目介绍 使用jsp+servlet.layui.mysql完成的图书馆系统,包含用户图书借阅.图书管理员.系统管理员界面,功能齐全. ...

  5. 第一个C语言项目——图书管理系统

    [文末获取源码] 该系统是我们C语言课上的一个作业,本来是不打算写的,但是找了好久都没有找到心仪的代码,所以被迫写了该系统,该图书管理系统一共有十个功能,具体如下说明: 01.注册账号 02.登录账号 ...

  6. 开源项目-图书管理系统

    哈喽,大家好,今天给大家带来一个图书管理系统 系统主要分为图书管理,读者管理,借还管理等模块,可以下载源码了解详情 项目简介 本图书管理系统基于spring,spring mvc,数据库为mysql. ...

  7. java初级内容结课项目——图书管理系统

    在前面的十三课中,笔者已经介绍了有关java的各种语法及其细节.若要融会贯通,则还需大量的练习,而非单纯的依赖于笔记中的内容.毕竟"纸上得来终觉浅,绝知此事要躬行".在java语法 ...

  8. C语言经典项目——超市管理系统

    大家学C语言有被各种各样的系统支配过吧,学生管理系统,图书管理系统,超市管理系统,火车购票系统等等,这里放一个自己写的简易版超市管理系统,用来勉励自己继续学习. 首先是一个主函数,超市的毛坯房 voi ...

  9. java小项目图书管理系统_Java小项目迷你图书管理系统

    package迷你图书管理系统;importjava.util.Scanner;public classBookMgr {public static voidmain(String[] args) { ...

最新文章

  1. 利用XSL对XML数据进行加密和大小写转换
  2. Cookie中文存储页面500问题
  3. 合理抽象灵活运用排列组合(洛谷P2181题题解,Java语言描述)
  4. Java实现正整数数组的最小拼接数
  5. ghost还原固态硬盘_最完整用GHOST安装UEFI(GPT)引导的系统请关注收藏
  6. 【雷达通信】基于matlab GPS和INS联合导航【含Matlab源码 1814期】
  7. 2020年全球激光雷达行业竞争格局分析,技术路线正处于快速发展迭代阶段「图」
  8. sigmoid/softmax指数运算溢出问题的解决方法
  9. 微信小程序云开发数据库update函数更新不了数据(已解决)
  10. 张正友标定算法原理详解
  11. 解决 虚拟机安装 centos8 时出现设置基础软件仓库时出错
  12. Mybatis|CURD|配置详解|注解开发|多点查询|动态sql|缓存
  13. 明捧中文暗贬中文编程——看《英文字母已成现代中文一部分,争论汉字编程还是英文编程已无意义》
  14. 初体验微信小程序记事本
  15. IDEA更新至2020版后Version Control窗口的还原问题
  16. 【python入门小知识】实现人名全大写,全小写,首字母大写
  17. c语言里amp;amp;,c语言中amp;amp;是什么意思?
  18. 使用Bert完成实体之间关系抽取
  19. XSS Challenges闯关1-6
  20. 如何对查询好的快递单号物流进行删除的几种方法

热门文章

  1. ONTAP:数据管理软件,打造更好的混合云体验
  2. jdk和cglib动态代理介绍
  3. 生活不止眼前的苟且,还有适合远方的田野01
  4. RESTful(Express)
  5. The key of special UI for the WoW
  6. 3D Game基础——向量的基本知识
  7. jsplumb拖线_jsPlumb系列问题:请问jsPlumb渲染出来之后线条没有连接节点?需要拖动之后才连上...
  8. 01 期货交易所及期货品种
  9. 伪代码是计算机语言,伪代码书写格式
  10. android 勿扰代码,Android7.1勿扰功能简析