图书馆管理系统

1、需求分析
针对图书进行管理
**角色:**用户(NormalUser) 管理员(Admin)
用户可以实现: 管理员可以实现
1、查找书籍 1、查找书籍
2、借阅书籍 2、增加书籍
3、归还书籍 3、删除书籍
4、打印所有书籍信息

2.概要设计
想清楚程程序应该分为几个模块,每个模块干啥,模块之间如何交互。
3、详细设计
每个模块具体的一些细节在考虑清楚
4、开始编码
先创建类,把核心的类设计好
设计类的过程很简单,先找关键字

设计这个系统需要三个包
**1、Book包:**Book.java (书籍属性) BookList.java(实现顺序表管理若干本书)
**2、Operation包:**AddOperation(增加书籍),BorrowOperation(借阅书籍),DelOperation(删除书籍),DisplayOperation(打印书籍),FindOperation(查找书籍),Exitoperation(t退出程序),ReturnOperation(归还书籍),IOperation(共同的接口)。
**3、User包:**Admin(管理员),NormalUser(普通用户包),User(用来被Admin和Normal继承的抽象类)。
4、main.java(执行方法)。

把操作提取成类;这样其实也进一步的把操作和用户之间进行了“'解耦合”
耦合指的是代码之间的关联关系,越低越好

具体代码实现
1、Book包
1)、Book.java

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 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==true? "已经被借出":"没有被借出")+'}'+'\n';}
}

2)、BookLIst.java

package Book;public class BookList {private Book[] books=new Book[100];private int size;public BookList(){books[0]=new Book("java编程","代",19,"学习");books[1]=new Book("C++编程","召",12,"学习");books[2]=new Book("python编程","勇",16,"学习");size =3;}//Book的get和set方法不能自动生成,因为这里要加一个pos下标public Book getBook(int pos) {return this.books[pos];}public void setBook(int pos,Book book) {this.books[pos] = book;}public int getSize() {return size;}public void setSize(int size) {this.size = size;}
}

2、Operation包
1)、IOperation

package Operation;import Book.BookList;import java.util.Scanner;public interface IOperation {Scanner scanner=new Scanner(System.in);void work(BookList bookList);
}

2)、AddOperation

package Operation;import Book.Book;import Book.BookList;import java.util.Scanner;//新增图书
public class AddOperation implements IOperation{@Overridepublic void work(BookList bookList){System.out.println("新增书籍");Scanner scanner=new Scanner(System.in);System.out.println("请输入名称:");String name =scanner.next();System.out.println("请输入作者:");String author =scanner.next();System.out.println("请输入价格:");int price=scanner.nextInt();System.out.println("请输入类型:");String type=scanner.next();//根据输入的书籍信息,构成一本书的对象Book book=new Book(name,author,price,type);//插入到bookList当中 尾插法int size= bookList.getSize();//尾插法bookList.setBook(size,book);bookList.setSize(size+1);}
}

3)、BorrowOperation

package Operation;
import Book.Book;
import Book.BookList;import java.util.Scanner;//借出的类
public class BorrowOperation  implements  IOperation{@Overridepublic void work(BookList bookList){System.out.println("借阅书籍!");//1.输入需要借阅书籍的名称Scanner scanner=new Scanner(System.in);System.out.println("请输入要借阅的书名:");String name=scanner.next();//2.根据书籍名称查找书籍是否存在int i;for ( i = 0; i <bookList.getSize(); i++) {Book book=bookList.getBook(i);if(book.getName().equals(name)){//如果为真,则说明找到了相同的name,则要找的书就存在continue;}}//3.拿到书籍的对象,将书籍对象的isBorrowed=trueif(i<bookList.getSize()){//此时i为借阅的书籍下标System.out.println("没找到此书");return;}//找到指定图书的位置 没找到直接返回Book book = bookList.getBook(i);if(book.isBorrowed()){System.out.println("此书已经被借出!");}else{book.setBorrowed(true);System.out.println("借阅成功");}}
}

4)、DelOperation

package Operation;import Book.Book;
import Book.BookList;public class DelOperation implements IOperation{@Overridepublic void work(BookList bookList){System.out.println("删除图书!");//1、输入删除图书的名字System.out.println("请输入要删除图书的名字:");String name =scanner.next();//2、根据书籍的名字查找书籍是否存在int i=0;for (i = 0; i <bookList.getSize(); i++) {if(bookList.getBook(i).getName().equals(name) ){//找到了break;}}if(i>=bookList.getSize()){System.out.println("没有要删除的书籍");return;}//3、处理找到了的情况 进行尾部删除 删除的逻辑 i=i+1;  对象//1、拿到i+1下标的对象//2、把i+1下标的对象赋值给ifor(int j = i; j<bookList.getSize()-1; j++){Book book =bookList.getBook(j+1);bookList.setBook(j,book);}bookList.setSize(bookList.getSize()-1);System.out.println("删除成功");}
}

5)、DisplayOperation

package Operation;import Book.BookList;public class DisplayOperation implements IOperation{@Override
public void work(BookList bookList){int size=bookList.getSize();for (int i = 0; i <size; i++) {System.out.print(bookList.getBook(i));}System.out.println("共计"+bookList.getSize()+"本书");}
}

6)、Exitoperation

package Operation;import Book.BookList;public class Exitoperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("程序退出 goodbye!");System.exit(0);// System.exit(0);类似于return 0,0表示成功,非0表示失败}
}

7)、FindOperation
package Operation;

import Book.BookList;
import Book.Book;
public class FindOperation implements IOperation{@Overridepublic void work(BookList bookList){//1、输入删除图书的名字System.out.println("查找书籍");System.out.println("请输入要查找图书的名字");String name =scanner.next();//2、根据书籍的名字查找书籍是否存在int count=0;int i=0;for (i = 0; i <bookList.getSize(); i++) {Book book=bookList.getBook(i);if(bookList.getBook(i).getName().equals(name) ){//如果相同就打印这本书的信息System.out.println(book);count++;}}if(i>bookList.getSize()){System.out.println("没有这本书");// return;}System.out.println("共计找到"+count+"本书");}
}

8)、ReturnOperation

package Operation;
import Book.Book;
import Book.BookList;public class ReturnOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("请输入你要归还的书籍");Book book=null;String name = scanner.next();int i = 0;for (i = 0; i <bookList.getSize(); i++) {if (bookList.getBook(i).getName().equals(name)) {book = bookList.getBook(i);break;}}if(i< bookList.getSize()){System.out.println("没有此书籍");return;}if(book!=null&& !book.isBorrowed()){System.out.println("此书没有被您借阅");return;}if(book!=null&& !book.isBorrowed()){book.setBorrowed(false);}System.out.println("归还完成");}
}

3、Usear包
1)、User.java

package Usear;import Book.BookList;import Operation.IOperation;import java.util.Scanner;public abstract class  User {protected String name;//持有当前用户支持的操作对象protected IOperation [] operations;public User(String name) {this.name = name;}Scanner scanner=new Scanner(System.in);//打印一个操作菜单,不同的用户,支持的操作不同,对应的菜单也就不同abstract public int menu();//根据用户输入的选项(menu返回结果)//调用对应的操作对象//此处注意多态在这个代码中的体现public void doOperation(int choice,BookList bookList){operations[choice].work(bookList);}
}

2)、Admin.java

package Usear;import Operation.*;import java.util.Scanner;
public class Admin extends User{public Admin(String name){super(name);operations=new IOperation[]{new Exitoperation(),new FindOperation(),new AddOperation(),new DelOperation(),new DisplayOperation()};}@Overridepublic int menu(){System.out.println("=============================");System.out.println("Hello " + this.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)、NormalUser.java

package Usear;
import Operation.*;public class NormalUser extends User{public NormalUser(String name){super(name);//在这里构造operation数组//让数组中operation对象的顺序和菜单中的序号相对应this.name=name;this.operations=new IOperation[]{new Exitoperation(),new FindOperation(),new BorrowOperation(),new ReturnOperation()};}@Overridepublic int menu() {System.out.println("=============================");System.out.println("Hello " + this.name + ", 欢迎使用图书管理系统!");System.out.println("1.查找图书");System.out.println("2.借阅图书");System.out.println("3.归还图书");System.out.println("0.退出程序");System.out.println("================================");System.out.println("请输入你的选择");int choice = scanner.nextInt();//close 本质上是在关闭 System.in//由于后面还需要用到System.in,此处不能关闭//scanner.close();return choice;}
}

4、主函数main.java

import Book.BookList;import java.util.Scanner;
import Usear.User;
import Usear.Admin;
import Usear.NormalUser;
public class Main {public static void main(String [] args){//程序入口//1、先准备好书籍信息数据BookList bookList=new BookList();//2、创建用户(注意体会这里的多态)User user=login();//3.进入主循环while(true){int choice = user.menu();user.doOperation(choice,bookList);}}public static User login(){System.out.println("请输入你的姓名:");Scanner scanner=new Scanner(System.in);String name=scanner.next();System.out.println("请输入您的身份(1 表示管理员,0表示普通用户):");int choice =scanner.nextInt();//判断用户身份if(choice==1){return new Admin(name);}else{return new NormalUser(name);}}
}

练习-图书馆管理系统相关推荐

  1. 基于SSM实现的图书馆管理系统

    项目类别: BS-XX-075 运行环境: 开发工具:IDEA / ECLIPSE 数据库:MYSQL5.7 应用服务器:TOMCAT8.5.31 JDK: 1.8 开发技术:Spring+Sprin ...

  2. 20190318-使用类做一个简单的图书馆管理系统

    要求:使用类的形式做一个图书馆管理系统,实现借书,入库,还书,查书等功能. 设计思路: 第一步:先写一个书的类,来存储图书馆中最重要的组成部分书的信息管理,包括书名,书作者,书的所属类别,书的价格等 ...

  3. 大一java图书馆管理系统课程设计

    大一java图书馆管理系统课程设计 代码仅供参考!!!仅供参考!!! 效果图如下 管理员用户名:123  密码123 密码错误的话进入项目resources文件夹有个LMS数据库,使用数据库客户端打开 ...

  4. 基于javaweb mvc模式的图书馆管理系统(不含框架)

    最近没更博客,趁今晚有时间把近期的学习记录以及遇到的一些问题贴出来吧,也算是对最近工作的总结. 因为最近的笔记都整理在了Typora上,所以贴出来还是比较简单的. 上干货之前先简单说一下最近的学习过程 ...

  5. php语言设计图书管理系统,图书馆管理系统PHP版_7tmu7b

    图书馆管理系统PHP版_7tmu7b 所属分类:其他 开发工具:PHP 文件大小:15765KB 下载次数:0 上传日期:2020-11-22 11:12:53 上 传 者:ygrdmbji 说明:  ...

  6. 通过jsp向mysql批量导入数据_JSP+Servlet+C3P0+Mysql实现的图书馆管理系统

    项目简介 项目来源于:https://gitee.com/GaoHuaiYu/library_management_system 这次分享的也是毕设或课程设计选择一样很多的图书管理系统,适合新手入门. ...

  7. 图书馆管理系统项目思路

    在开始做这个项目之前,我们先不要急着去写它的代码,而是先把他的一个逻辑关系和思路理清楚 图表 1 从图表1可以看到整个图书馆管理系统分为四个模板,每个模板里面又有几个小部分(如果看不清可以把图片放大) ...

  8. 商品管理系统c语言功能模板,C语言课程报告图书馆管理系统可做模板套用.doc

    课 程 报 告 课 程 名 称: 程序设计实践 专 业 班 级 : 学 生 姓 名 : 学 号 : 任 课 教 师 : 学 期 :2010-2011学年第二学期 课程报告任务书 题 目 图书信息管理系 ...

  9. ASP.NET Core MVC 打造一个简单的图书馆管理系统 (修正版)(三)密码修改以及密码重置...

     前言: 本系列文章主要为我之前所学知识的一次微小的实践,以我学校图书馆管理系统为雏形所作. 本系列文章主要参考资料: 微软文档:https://docs.microsoft.com/zh-cn/as ...

  10. 图书馆管理系统(C语言实现)

    源代码在这里 1   图书馆管理系统(C语言实现). 2  功能相对简单, 增删改查而已. 3  详细的介绍都在链接里了. 转载于:https://www.cnblogs.com/zzusunjs/p ...

最新文章

  1. django教程目录
  2. SQL与NoSQL区别-查询方式
  3. hdu 2842 Chinese Rings 矩阵快速幂
  4. MySQL 命令和内置函数
  5. django03_表单(forms.ModelForm)(login前后台)
  6. 【Java程序设计】类的重用
  7. Page Cache与Page回写
  8. jsecharts如何改变占比_什么是基础代谢?如何提高基础代谢?基础代谢对减肥很重要...
  9. 2021外卖CPS分销微信小程序源码 外卖侠CPS全套源码
  10. 博科光纤交换机配置及管理 CLI篇
  11. 高频交揭密美五大高交商访谈录
  12. RAID技术及应用总结
  13. 手机游戏满江红里的诗句
  14. 全球与中国pH控制剂市场现状及未来发展趋势(2022)
  15. SCAU【1020】正负奇偶判断
  16. Tomcat JDBC Pool使用说明
  17. 【Jmeter】分布式测试--单机均衡负载压测
  18. 大数据工程师学习路线
  19. flash as3使用,播放声音和加载外部声音文件
  20. 什么是RPA? Robotic Process Automation

热门文章

  1. 画图相关 ppt visio 画图高清转移到word中
  2. 康末otdr测试软件丢失,利用OTDR快速定位光缆线路故障-测试测量-与非网
  3. java代码规范插件_阿里java代码规范IDEA插件之傻瓜教程
  4. ECharts 实现地图功能
  5. js通过身份证计算年龄
  6. 微信获取unionid
  7. 关于FTP的两种连接模式
  8. Linux自学之旅-软件包管理(软件包类型)
  9. SAS9.4 字体安装失败或无法找到
  10. Jenkins插件安装