练习-图书馆管理系统
图书馆管理系统
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);}}
}
练习-图书馆管理系统相关推荐
- 基于SSM实现的图书馆管理系统
项目类别: BS-XX-075 运行环境: 开发工具:IDEA / ECLIPSE 数据库:MYSQL5.7 应用服务器:TOMCAT8.5.31 JDK: 1.8 开发技术:Spring+Sprin ...
- 20190318-使用类做一个简单的图书馆管理系统
要求:使用类的形式做一个图书馆管理系统,实现借书,入库,还书,查书等功能. 设计思路: 第一步:先写一个书的类,来存储图书馆中最重要的组成部分书的信息管理,包括书名,书作者,书的所属类别,书的价格等 ...
- 大一java图书馆管理系统课程设计
大一java图书馆管理系统课程设计 代码仅供参考!!!仅供参考!!! 效果图如下 管理员用户名:123 密码123 密码错误的话进入项目resources文件夹有个LMS数据库,使用数据库客户端打开 ...
- 基于javaweb mvc模式的图书馆管理系统(不含框架)
最近没更博客,趁今晚有时间把近期的学习记录以及遇到的一些问题贴出来吧,也算是对最近工作的总结. 因为最近的笔记都整理在了Typora上,所以贴出来还是比较简单的. 上干货之前先简单说一下最近的学习过程 ...
- php语言设计图书管理系统,图书馆管理系统PHP版_7tmu7b
图书馆管理系统PHP版_7tmu7b 所属分类:其他 开发工具:PHP 文件大小:15765KB 下载次数:0 上传日期:2020-11-22 11:12:53 上 传 者:ygrdmbji 说明: ...
- 通过jsp向mysql批量导入数据_JSP+Servlet+C3P0+Mysql实现的图书馆管理系统
项目简介 项目来源于:https://gitee.com/GaoHuaiYu/library_management_system 这次分享的也是毕设或课程设计选择一样很多的图书管理系统,适合新手入门. ...
- 图书馆管理系统项目思路
在开始做这个项目之前,我们先不要急着去写它的代码,而是先把他的一个逻辑关系和思路理清楚 图表 1 从图表1可以看到整个图书馆管理系统分为四个模板,每个模板里面又有几个小部分(如果看不清可以把图片放大) ...
- 商品管理系统c语言功能模板,C语言课程报告图书馆管理系统可做模板套用.doc
课 程 报 告 课 程 名 称: 程序设计实践 专 业 班 级 : 学 生 姓 名 : 学 号 : 任 课 教 师 : 学 期 :2010-2011学年第二学期 课程报告任务书 题 目 图书信息管理系 ...
- ASP.NET Core MVC 打造一个简单的图书馆管理系统 (修正版)(三)密码修改以及密码重置...
前言: 本系列文章主要为我之前所学知识的一次微小的实践,以我学校图书馆管理系统为雏形所作. 本系列文章主要参考资料: 微软文档:https://docs.microsoft.com/zh-cn/as ...
- 图书馆管理系统(C语言实现)
源代码在这里 1 图书馆管理系统(C语言实现). 2 功能相对简单, 增删改查而已. 3 详细的介绍都在链接里了. 转载于:https://www.cnblogs.com/zzusunjs/p ...
最新文章
- django教程目录
- SQL与NoSQL区别-查询方式
- hdu 2842 Chinese Rings 矩阵快速幂
- MySQL 命令和内置函数
- django03_表单(forms.ModelForm)(login前后台)
- 【Java程序设计】类的重用
- Page Cache与Page回写
- jsecharts如何改变占比_什么是基础代谢?如何提高基础代谢?基础代谢对减肥很重要...
- 2021外卖CPS分销微信小程序源码 外卖侠CPS全套源码
- 博科光纤交换机配置及管理 CLI篇
- 高频交揭密美五大高交商访谈录
- RAID技术及应用总结
- 手机游戏满江红里的诗句
- 全球与中国pH控制剂市场现状及未来发展趋势(2022)
- SCAU【1020】正负奇偶判断
- Tomcat JDBC Pool使用说明
- 【Jmeter】分布式测试--单机均衡负载压测
- 大数据工程师学习路线
- flash as3使用,播放声音和加载外部声音文件
- 什么是RPA? Robotic Process Automation