图书管理系统java案例,手把手实现Java图书管理系统(附源码)
本文为大家带来了一些java方面的知识,主要梳理了实现简单版图书管理系统的相关问题,包括图书管理系统的功能分析,IDEA中函数类的创建,用户相关的处理等等。下面就一起来看看吧,希望对你有帮助。
如何解决写爬虫IP受阻的问题?立即使用。
1.分析图书管理系统的功能
我们先分析一下一个图书管理系统应该具备的功能,搭建一个简单的框架。
一般情况下,只有两种人可以使用图书管理系统,一种是学生,一种是图书管理员。
这是我学校网上图书馆的登录界面。学生可以通过网络查阅书籍。
这里看不到管理员的登录界面,但是肯定会有后台管理人员登录进行系统维护的窗口。
一个简单的图书管理系统应该具备的功能,
2.在IDEA中进行功能类的创建
2.1 创建一个名为book的包,里面存放书相关的
搜索一本书。一本书应该具备这些属性。
私有字符串名称;//书名
私有字符串作者;//作者
私有int价格;//价格
私有字符串类型;//类型
私有布尔值被借用;//借用情况公共字符串getName() {
返回名称;
}
public void setName(字符串名){
this.name=name
}
公共字符串getAuthor() {
返回作者;
}
public void setAuthor(字符串作者){
this.author=作者;
}
public int getPrice() {
退货价格;
}
公共空定价(中间价格){
this.price=价格;
}
公共字符串getType() {
返回类型;
}
公共void setType(字符串类型){
this.type=type
}
public boolean isBorrowed() {
退货被借走;
}
公共空集合借入(布尔借入){
is borrow=借入;
}公共图书(字符串名称、字符串作者、int价格、字符串类型){
this.name=name
this.author=作者;
this.price=价格;
this.type=type
} @覆盖
公共字符串toString() {
返回“书单”{
name= name \
,author= author \
,价格=价格
,type= type \
,isBorrowed= isBorrowed
};
}因为是一堆书,所以需要存储书,所以设置一个数组来存储书。
//最多存储20本书
私书[books]=新书[20];另一个成员变量用于实时记录当前图书数组中的图书数量。
private int usedSize//实时记录当前Books数组中有多少本书。这里可以提供一个构造方法,先在里面存放几本书。
公共书目(){
Books[0]=新书(《西游记》,《吴承恩》,25,《小说》);
书籍[1]=新书(《红楼梦》,《曹雪芹》,26,《小说》);
书籍[2]=新书(三国演义,罗贯中,27,小说);
书籍[3]=新书(《水浒传》,《施耐庵》,28,《小说》);
usedSize=4;//目前有4本书。
}如果下标合法数组,提供一个查找这本书的方法。
public Book getBook(int pos) {
归还图书[pos];
}提供一个方法,给一个合法的数组下标,和一本书,就可以把书存放在栈里了。
公共void setbook(int pos,Book book) {
books[pos]=书;
}提供一个方法,给一个参数,实时修改当前书架上的图书数量。
public void setUsedSize(int size){
usedSize=size
}
2.2 创建一个名为Operation的包,里面存放对书的所有操作
由于管理员和普通用户都是对BookList类的数组books中的书籍进行操作,
因此,您可以提供一个IOperation接口来操作阵列,
公共接口操作{
/*
*对书籍的所有操作都是通过BookList类中的books数组来执行的。
*你可以把它写成一个接口
**/
void work(书单书单);
}比如普通用户和管理员都要显示书籍。这种显示是一种效果,
所以只要写一个普通用户和管理员都可以调用的类就可以了。
一起创建这些类,
然后你可以引用这些类的接口,并重写它们。
比如增加新书。
公共类AddOperation实现IOperation {
@覆盖
公共无效工作(书单书单){
新书!);
}
}
3.进行用户相关的处理
,即处理普通用户和管理员。
这里只创建一个类,因为对于普通用户和管理员来说,他们都是用户。
所以创建一个成员变量来代表用户。
//写保护将在以后继承。
受保护的字符串名称;//用户名下面提供了一个构造函数来初始化它。
//提供一个构造函数来初始化当前对象的name属性。
公共用户(字符串名称){
this.name=name
}
子类NormalUser继承了父类User,并提供了一个构造方法来显示父类对构造的帮助。
公共类NormalUser扩展User{
public NormalUser(字符串名){
超级(名);
}
}子类AdminUser像以前一样继承父类User。
向下是打印菜单,根据两个用户需要的功能打印。
先看管理员AdminUser的。
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 scanner=新扫描仪(system . in);
int choice=scanner . nextint();
回归选择;
//因为这是一个菜单,所以要先把输入的值传递出去,才能使用。
}看看NormalUser的普通用户的
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 scanner=新扫描仪(system . in);
int choice=scanner . nextint();
回归选择;
//因为这是一个菜单,所以要先把这个输入的值传递出去,才能使用菜单。下面就是把这些都整合起来,
先准备书。
BookList BookList=new BookList();//准备书结的时候登录就行了,
写一个判断你是普通用户还是管理员的方法。
公共静态用户登录(){
System.out.println(请输入您的姓名:);
Scanner scanner=新扫描仪(system . in);
string name=scanner . nextline();
System.out.println(请输入身份:1:-"Administrator.0:-"普通用户);
int choice=scanner . nextint();
if (choice==1) {
返回新的管理员用户(名称);
}否则{
返回新的normal user(name);
}
}注意这段代码,返回类型是User,因为无论if中的返回是AdminUser还是NormalUser,都可以将User作为父类接收,这个过程经历了一个向上的转化。
然后参考main方法中的login()方法,可以选择login。
//log in——“用户”这个引用指的是哪个对象。见前面的if。
user user=log in();选择你是哪个用户后,打印相应的功能菜单。
但是,请注意,菜单刚刚被写入相应的子类中。
如果现在想在父类中访问,是无法访问的,所以也要参考父类中的菜单。
公共抽象类用户{
//写保护将在以后继承。
受保护的字符串名称;//用户名
//提供一个构造函数来初始化当前对象的name属性。
公共用户(字符串名称){
this.name=name
}
公共抽象int menu();
}看代码,就把父类写成抽象类,然后在抽象类里,调出抽象方法的菜单,
可以通过主类中的父类访问菜单,实现动态绑定。
公共静态void main(String[] args) {
//开始合并
BookList BookList=new BookList();//准备书籍
//log in——“用户”这个引用指的是哪个对象。见前面的if。
user user=log in();
user . menu();//动态绑定
//如果你想在子类中访问菜单,你必须把父类写成一个抽象类,
//然后子类重写父类的方法来访问菜单。
}
}然后代码就可以在此时运行了
4.开始实现对书所有具体的操作功能
4.1先实现可以调用具体操作的功能方法
首先在User中写一个方法。这种方法的作用是
通过一个用户,访问用户对应的方法函数的数组下标,然后调用work方法实现函数。
public void do operation(int choice,BookList bookList) {
this . I operations[选择]。作品(书单);
}然后在mian中,通过选择用户来参考这个方法。
公共静态void main(String[] args) {
//开始合并
BookList BookList=new BookList();//准备书籍
//log in——“用户”这个引用指的是哪个对象。见前面的if。
user user=log in();
int choice=user . menu();//动态绑定
user.doOperation(选择,书单);
}详情见此图。
我们来看看详细的分析。
4.2 测试一下
现在已经集成了,只实现了具体的操作功能,所以先试着运行代码。
代码运行成功,但是它只以一个函数结束。
所以我们可以添加一个循环来使用多个函数。
公共静态void main(String[] args) {
//开始合并
BookList BookList=new BookList();//准备书籍
//log in——“用户”这个引用指的是哪个对象。见前面的if。
user user=log in();
while(true){
int choice=user . menu();//动态绑定
user.doOperation(选择,书单);
}
}
4.3 实现单独具体的操作的功能
增加了一本新书。我们需要考虑输入这些
不要认为isBorrowed,因为默认状态不是lent。
输入这些属性。
Scanner scanner=新扫描仪(system . in);
System.out.println(请输入书名:);
string name=scanner . nextline();
System.out.println(请输入书的作者:);
string author=scanner . nextline();
System.out.println(请输入书价:);
int price=scanner . nextint();
System.out.println(请输入图书类型:);
string type=scanner . nextline();然后将这些属性存储在新书中。
Book book=新书(名称、作者、价格、类型);获取当前下标,将其赋给currentSize,并将之前输入的图书放入下标为currentSize的数组中。
然后在currentSize上加1。
int currentSize=booklist . getusedsize();
bookList.setBooks(currentSize,book);
booklist . getusedsize(currentSize 1);跑,试一试。
公共类AddOperation实现IOperation {
@覆盖
公共无效工作(书单书单){
新书!);
Scanner scanner=新扫描仪(system . in);
System.out.println(请输入书名:);
string name=scanner . nextline();
System.out.println(请输入书的作者:);
string author=scanner . nextline();
System.out.println(请输入图书类型:);
string type=scanner . nextline();
System.out.println(请输入书价:);
int price=scanner . nextint();
Book book=新书(名称、作者、价格、类型);
int currentSize=booklist . getusedsize();
bookList.setBooks(currentSize,book);
booklist . getusedsize(currentSize 1);
System.out.println(成功添加图书!);
}
}先输入你想借的书的名字。
Scanner scanner=新扫描仪(system . in);
System.out.println(请输入借阅图书的名字:);
字符串名称=扫描仪。next line();通过为循环遍历一遍,然后将遍历的每一本书赋给变量书,
再通过等于,来判断书和输入的书的名字是否相同,
如果相同就通过设置借款修改此时借阅状态,显示借阅成功
如果不同就显示没有这本书
int currentSize=图书列表。getusedsize();
for(int I=0;I current zei){
书书=书单。获取图书(一);
if(book.getName().等于(姓名)){
书。设置借入(真);
System.out.println(借阅成功!);
返回;
}
}
System.out.println(没有这本书!);运行一下,试试看
公共类借贷操作实现I操作{
@覆盖
公共无效工作(书单书单){
System.out.println(借阅图书!);
扫描仪扫描仪=新扫描仪(系统。在);
System.out.println(请输入借阅图书的名字:);
字符串名称=扫描仪。next line();
int currentSize=图书列表。getusedsize();
for(int I=0;I current zei){
书书=书单。获取图书(一);
if(book.getName().等于(姓名)){
书。设置借入(真);
System.out.println(借阅成功!);
返回;
}
}
System.out.println(没有这本书!);
}
}(3)删除图书解除操作类
输入删除图书的名字
扫描仪扫描仪=新扫描仪(系统。在);
System.out.println(请输入删除图书的名字:);
字符串名称=扫描仪。next line();找到图书,然后删除
int currentSize=图书列表。getusedsize();
for(int I=0;I current zei){
书书=书单。获取图书(一);
if(book.getName().等于(姓名)){
for(int j=I;j currentSizej ) {
书单。get book(j);
}
书单。getusedsize(currentSize-1);//不要忘记更新图书种类
书单。getusedsize(currentSize-1);
System.out.println(删除成功!);
返回;
}
}
System.out.println(没有找到要删除的图书!);运行程序,试试看
公共类解除操作实现I操作{
@覆盖
公共无效工作(书单书单){
System.out.println(删除图书!);
扫描仪扫描仪=新扫描仪(系统。在);
System.out.println(请输入删除图书的名字:);
字符串名称=扫描仪。next line();
int currentSize=图书列表。getusedsize();
for(int I=0;I current zei){
书书=书单。获取图书(一);
if(book.getName().等于(姓名)){
for(int j=I;j currentSizej ) {
书单。get book(j);
}
书单。getusedsize(currentSize-1);//不要忘记更新图书种类
书单。getusedsize(currentSize-1);
System.out.println(删除成功!);
返回;
}
}
System.out.println(没有找到要删除的图书!);
}
}将当前有几本书记录下来
int currentSize=图书列表。getusedsize();然后为循环全部遍历一遍就可以了,直接看代码吧
公共类显示操作实现I操作{
@覆盖
公共无效工作(书单书单){
System.out.println(显示图书!);
int currentSize=图书列表。getusedsize();
for(int I=0;I current zei){
系统。出去。println(书目。get book(I));
}
}
}运行结果就是这样
直接调用状态码出口来退出系统
公共类出口操作实现I操作{
@覆盖
公共无效工作(书单书单){
System.out.println(退出系统!);
系统。退出(0);
}
}
要查找图书,肯定是先要输入你需要查找书的名字
扫描仪扫描仪=新扫描仪(系统。在);
System.out.println(请输入图书的名字:);
字符串名称=扫描仪。next line();通过为循环遍历一遍,然后将遍历的每一本书赋给变量书,
再通过等于,来判断书和输入的书的名字是否相同,
如果相同就打印,并显示找到了,如果不相同,就直接显示没有找到,
但这里有一个问题在前面给每一本书默认都是假的,现在打印还是这样,所以要修改一下
在书类中,修改toString,给借阅状态一个三目运算符,来判断是否借出了
@覆盖
公共字符串toString() {
返回图书{
name= name \
,author= author \
,价格=价格
,type= type \
((isBorrowed==true)? 已经借出: 未借出)
};
}运行一下,试试
查找图书查找操作类的全部代码就是
公共类查找操作实现I操作{
@覆盖
公共无效工作(书单书单){
System.out.println(查找图书!);
扫描仪扫描仪=新扫描仪(系统。在);
System.out.println(请输入图书的名字:);
字符串名称=扫描仪。next line();
int currentSize=图书列表。getusedsize();
for(int I=0;I current zei){
书书=书单。获取图书(一);
if(book.getName().等于(姓名)){
System.out.println(这本书找到了!);
系统。出去。println(书);
返回;
}
}
System.out.println(这本书没有找到!);
}
}先输入要归还图书的名字
扫描仪扫描仪=新扫描仪(系统。在);
System.out.println(请输入归还图书的名字:);
字符串名称=扫描仪。next line();和前面借阅基本一样,修改一下设置借款的状态就可以了
int currentSize=图书列表。getusedsize();
for(int I=0;I current zei){
书书=书单。获取图书(一);
if(book.getName().等于(姓名)){
书。设置借入(假);
System.out.println(归还成功!);
返回;
}
}运行代码,试试看
公共类return操作实现I操作{
@覆盖
公共无效工作(书单书单){
System.out.println(归还图书!);
扫描仪扫描仪=新扫描仪(系统。在);
System.out.println(请输入归还图书的名字:);
字符串名称=扫描仪。next line();
int currentSize=图书列表。getusedsize();
for(int I=0;I current zei){
书书=书单。获取图书(一);
if(book.getName().等于(姓名)){
书。设置借入(假);
System.out.println(归还成功!);
返回;
}
}
}
}推荐学习: 《java视频教程》 以上就是实例详解爪哇实现简易版的图书管理系统的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。