在我之前的几篇博客中对于Java语法,思想等等进行了总结,但是还是差点那味,就是没有将这些知识串起来那么今天的这篇博客我就将Java中:类 对象 封装 继承 多态 抽象类 接口等等知识共同使用完成一个Java的小项目一起来看

介绍

我们先来看看这个小项目都有什么功能

可以看到通过输入姓名和身份可以有不同的操作选择,增删查改呀之类的看起来挺简单的我们就来实现以下,我们来看一下所用到的类

知道了功能和类我们就来实现这个项目

实现

book包

在这个包中我们定义了两个类:Book和BookList分别来说以下

在Book类中我定义了书的名字,作者,类型,价格等成员变量,并且使用private修饰提供getset方法来体现封装,提供了构造方法,重写了toString方法方便进行打印,代码很简单看看就可以

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==false?" 未借出":" 已借出")+'}';}}

在BookList中定义了书这个类的数组和有几本数的记录,构造方法中初始化了四本书,提供了关于数组操作和记录书的方法

package book;
public class BookList {private Book[] books=new Book[10];private int useSize=0;public BookList() {books[0] = new Book("三国演义", "罗贯中", 34, "小说");books[1]=new Book("西游记","吴承恩",25,"小说");books[2]=new Book("红楼梦","曹雪芹",32,"小说");books[3]=new Book("水浒传","施耐庵",45,"小说");this.useSize=4;}public int getUseSize() {return useSize;}public void setUseSize(int useSize) {this.useSize = useSize;}/*得到pos下标的书* */public Book getBook(int pos) {return books[pos];}/*设置一本书在pos位置* */public void setBook(int pos,Book book) {books[pos]=book;}
}

这里要说一下了为什么不把增删查改方法放到这里,是因为我想把方法单独提取出来易读便于后续的修改

User包

在这个包中定义了三个类父类User,子类AdminUser和子类NormalUser,主要是菜单的展示和实例化对应选择的对象

package user;import book.BookList;
import operation.IOperation;public abstract class User {protected String name;public User(String name){this.name=name;}protected IOperation[] iOperations;public abstract int menu();public void doOperation(int choice, BookList bookList) {iOperations[choice].work(bookList);}
}
package user;import operation.*;import java.util.Scanner;public class AdminUser extends User{public AdminUser(String name) {super(name);iOperations=new IOperation[]{//初始化new ExitOperation(),new FindOperation(),new AddOperation(),new DelOperation(),new DisplayOperation(),};}public int menu() {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("请选择你的操作");Scanner sca=new Scanner(System.in);int choice=sca.nextInt();return choice;}
}
package user;import operation.*;import java.util.Scanner;public class NormalUser extends User{public NormalUser(String name) {super(name);iOperations=new IOperation[]{//初始化new ExitOperation(),new FindOperation(),new BorrowOperation(),new ReturnOperation(),};}public int menu() {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("请选择你的操作");Scanner sca=new Scanner(System.in);int choice=sca.nextInt();return choice;}
}

我们在父类中定义了接口数组,在子类中通过初始化用户对象不同使得数组内对象不同从而管理员和学生操作选择不同

Operation包

在这个包中我实现了增删查改等的类通过接口调用不同类中方法

AddOperation

package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;public class AddOperation implements IOperation{public void work(BookList bookList) {System.out.println("新增图书");System.out.println("图书名字");Scanner sca=new Scanner(System.in);String name=sca.nextLine();System.out.println("图书作者");String author=sca.nextLine();System.out.println("图书类型");String type=sca.nextLine();System.out.println("图书价格");int price=sca.nextInt();Book book=new Book(name,author,price,type);int currentSize= bookList.getUseSize();bookList.setBook(currentSize,book);bookList.setUseSize(currentSize+1);System.out.println("新增成功");}
}

BorrowOperation

package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class BorrowOperation implements IOperation{public void work(BookList bookList) {System.out.println("借阅图书");System.out.println("请输入要借阅的图书");Scanner sca=new Scanner(System.in);String bookName=sca.nextLine();int currentSize= bookList.getUseSize();for (int i = 0; i < currentSize; i++) {Book book=bookList.getBook(i);if(book.getName().equals(bookName)) {book.setBorrowed(true);System.out.println("借阅成功");return;}}System.out.println("没有要借阅的书");}
}

DelOperation

package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class DelOperation implements IOperation{public void work(BookList bookList) {System.out.println("删除图书");System.out.println("请输入要删除图书的名字");Scanner sca=new Scanner(System.in);String name=sca.nextLine();int currentSize= bookList.getUseSize();int index=0;int i = 0;for (; i <currentSize ; i++) {Book book=bookList.getBook(i);if(book.getName().equals(name)) {index=i;break;}}if(i==currentSize) {System.out.println("没有要删除的书");return ;}for (int j = index; j <currentSize ; j++) {Book book=bookList.getBook(j+1);bookList.setBook(j,book);}bookList.setBook(currentSize-1,null);bookList.setUseSize(currentSize-1);System.out.println("删除成功");}
}

DisPlayOperation

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

 ExitOperation

package operation;import book.Book;
import book.BookList;public class ExitOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("退出程序");int currentSize= bookList.getUseSize();for (int i=0;i<currentSize;i++) {bookList.setBook(i,null);}System.exit(0);}
}

 FindOperation

package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class FindOperation implements IOperation{public void work(BookList bookList) {System.out.println("查找图书");System.out.println("请输入要查找的图书");Scanner sca=new Scanner(System.in);String bookName=sca.nextLine();int currentSize= bookList.getUseSize();for (int i = 0; i < currentSize; i++) {Book book=bookList.getBook(i);if(book.getName().equals(bookName)) {System.out.println("找到了信息如下");System.out.println(book);return;}}System.out.println("没有要找的书");}
}

 ReturnOperation

package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class ReturnOperation implements IOperation{public void work(BookList bookList) {System.out.println("归还图书");System.out.println("请输入要归还的图书");Scanner sca=new Scanner(System.in);String bookName=sca.nextLine();int currentSize= bookList.getUseSize();for (int i = 0; i < currentSize; i++) {Book book=bookList.getBook(i);if(book.getName().equals(bookName)) {book.setBorrowed(false);System.out.println("归还成功");return;}}System.out.println("没有要归还的书");}
}

 IOperation

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

Main类

主函数实现了login()方法能够根据方法返回值确定用户身份,在循环中只要不选择退出循环就会一直执行

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 sca=new Scanner(System.in);String name=sca.nextLine();System.out.println("请输入身份:1.管理员 0.学生");int choice=sca.nextInt();if(choice==1) {return new AdminUser(name);} else {return new NormalUser(name);}}public static void main(String[] args) {BookList books=new BookList();User user=login();while(true) {int choice=user.menu();user.doOperation(choice,books);}}
}

难点

个人感觉这个程序最难的点在于这里

我画图分析一下

以上就是实现这个小项目的所有代码了,觉得不理解的可以把代码拷贝下来自己跑一下,对于新手练习我觉得是非常好的项目,还请点赞评论!!!会持续更新Java知识的 蟹蟹

Java小项目谁看谁都会(图书管理)相关推荐

  1. java小项目之:植物大战僵尸,这个僵尸不太冷!内附素材源码

    Java小项目之:植物大战僵尸! <植物大战僵尸>是由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售,这款游戏可谓是无人不知无人不晓. 在我身边,上到40岁 ...

  2. 我是一只小僵尸java,Java小项目之:植物大战僵尸,这个僵尸不太冷!内附素材...

    Java小项目之:植物大战僵尸! <植物大战僵尸>是由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售,这款游戏可谓是无人不知无人不晓. 在我身边,上到40岁 ...

  3. Java小项目中WEB-INF下jsp页面如何访问?

    Java小项目中WEB-INF下jsp页面如何访问? - 今天又是充满希望的一天 - CSDN博客 关闭 今天又是充满希望的一天 目录视图 摘要视图 订阅 var username = "H ...

  4. java小项目家庭记账程序

    文章目录 java小项目家庭记账程序 **1.项目目标:** 2.项目需求: 3.具体思路: 4.具体代码: 1.页面: 2.Option_1类: 3.Option_2类: 4.Option_3类: ...

  5. java小项目影院系统

    java小项目,影院管理系统 http://download.csdn.net/detail/github_32658299/9632276 下面是两个关键的类 1.这是电影院测试类,用来读取用户输入 ...

  6. java小项目租车系统_Java学习笔记三十:Java小项目之租车系统

    Java小项目之租车系统 一:项目背景介绍: 根据所学知识,编写一个控制台版的"呱呱租车系统" 功能: 1.展示所有可租车辆: 2.选择车型.租车量: 3.展示租车清单,包含:总金 ...

  7. Java毕设项目信管专业毕业生就业管理信息系统计算机(附源码+系统+数据库+LW)

    Java毕设项目信管专业毕业生就业管理信息系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm ...

  8. Java毕设项目疫情期间中小学生作业线上管理系统设计与实现(java+VUE+Mybatis+Maven+Mysql)

    Java毕设项目疫情期间中小学生作业线上管理系统设计与实现(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + ...

  9. Java小项目--小型图书管理系统(含完整代码及工具)

    写在前面 对于一个java项目来说,我理解的整个流程是这样的: (1)进行需求分析 (2)设计数据库(重要) (3)编写java代码 注:数据库设计非常重要,特别是数据类型的定义,表与表之间的关系,如 ...

  10. 学生成绩查询系统(Java实现),你第一个Java小项目

    一.学生成绩查询系统(Java实现) 项目要求(我们可以做的更面向对象一点,灵活处理): 具体思路如下: 1.引入程序需要调用的包 2.创建总程序包 "stuScoreInquirySyst ...

最新文章

  1. 打算写的文章,先写个标题
  2. 如何用JS获取页面上的所有标签
  3. Odoo访问权限(一)
  4. Java对象内存图三
  5. matplotlib 散点图_matplotlib画图 绘制散点图案例
  6. 计算点在哪些四边形内
  7. 真牛!打开mysql
  8. android studio 中怎么写aspectj代码,AndroidStudio中 AspectJ 基础使用 简介
  9. C++ STL string字符串内容修改和替换
  10. linux下电子词典里的扩展存储卡不能访问到的问题
  11. 把Matlab的p代码还原为可读的m代码的可能性
  12. 实现通过Xcode安装到虚拟机后安装iPhone模拟器并安装ipa软件到模拟器上
  13. html静态页面图书馆管理,静态页面管理
  14. Java日志框架 - JUL使用详解
  15. mysql数据库报错1062_【1062错误 mysql】
  16. 计算机处理器的hz越大越好,cpu主频越高越好吗,教您CPU处理器主频率越高越好吗...
  17. 2022第十一届PMO大会(线上会议)成功召开
  18. 惠州 菜鸟机器人_马云在惠州建了一个“秘密基地”,超震撼!
  19. XSS-labs靶场通关秘籍(level 17-20)
  20. Commons Email开源项目使用

热门文章

  1. Android摄影App,这20款摄影APP,让你的照片飞上天!
  2. #python 颜色聚类处理
  3. Java失宠,谷歌宣布Kotlin现在是Android开发的首选语言
  4. Java完全参考手册_Java完全参考手册(第8版) ((美)Herbert Schildt) pdf扫描版
  5. java api在jdk哪里,jdk api文档在哪里
  6. JDBC通过Mysql驱动包连接数据库
  7. 我为什么放弃使用MyBatis3的Mapper注解
  8. php 去除中英文空格,php 去除所有空格 包括中文空格圆角空格
  9. 解决Windows路径太长的目录及文件如何删除
  10. Unix 环境高级编程 之 理解 rws 权限