11.8图书馆登录系统大体框架

目录

一.构造方法与super()

1.为什么要引入构造方法

2.构造方法的定义格式

3.构造方法的重载

四.构造方法与其他方法的区别

五。this在构造方法之间的调用

六.super关键字在构造方法的应用

七总结

二.构建图书馆管理系统框架

1建立一个书 的包

1.构建书类,存放书的各种信息

2.对于书因为是在图书馆系统中自然就要建立一个书架类

2.建立操作包

1.构建操作接口

3.建立用户包

1.建立一个用户类,管理员和普通用户的共性都放在里面

2.建立用户和管理员类,并都继承与用户

4.建立登录操作框架

1.作为整个程序入口地方,构建一个登录方法

2.打印菜单

3.用户看到的菜单,会进行相应选择.

4.构建操作包数组

5.分别在管理员和用户类进行实例化操作

三.图书馆管理系统的具体实现

1.打印图书

2.新增图书

3.查找图书

4.删除图书

5.退出系统

6.借书和归还

四.总结

五.旋转链表


一.构造方法与super()

1.为什么要引入构造方法

当创建对象的时候需要对属性值初始化,构造方法,即对象创建时候要执行的方法.

要求在实例化的时候,就指定好name和age的值.这就要用到构造方法.又称构造器,Constructor

2.构造方法的定义格式

构造方法在new的时候自动执行.并且只执行一次,new一次执行一次.

注意:每一个类都有自己的构造方法,就算不写也有.编译的时候Javac会自动检查类是否有构造方法,如果有,就执行,如果没有,就会自己添加一个无参的构造方法

但是如果你写了一个带有参数的构造方法,而没有写无参数的构造方法,就会报错.

构造方法是可以重载的

原因: 对象进入堆内存,堆自己的成员变量赋值默认值完成后,对象调用自己的构造方法,构造方法进入栈内存运行.

对象,内存地址传递给this关键字,构造方法运行结束了,整个对象才算建立完成

所以我们一个对象的实例化格式

先执行静态(只执行一次)

再执行实例代码块

最后再执行构造方法

3.构造方法的重载

如果构造方法发生了重载,就要创建无参的构造方法,否则就会从报错

分析:无参构造方法和实例化之间的关系

无参构造方法,可以不写,但是最终都会有,跟是否实例化有关系.但是如果权限是iprivate.那么其他类就无法通过无参构造方法实例化,就会报错.

四.构造方法与其他方法的区别

1.构造方法只执行一次,在实例化的时候,其他方法执行次数没有限制

2.定义格式不同,构造方法没有返回值,必须与类名相同

五。this在构造方法之间的调用

this的用处

1.this区别局部变量和成员变量同名的情况。

2.this在构造方法的时候,由于调用了有参的构造方法.

this(参数类别),此语句必须写在第一行

六.super关键字在构造方法的应用

作用:1.super调用父类的成员方法和成员变量

但是我们要注意

在实例化子类对象的时候,父类的构造方法会先执行,因为子类所有构造方法的第一韩都有默认的隐式super()语句

也就是说,在子类对象中,父类的构造方法会先执行,那么为什么要执行

假设,创建了一个父类,含有一个成员属性a=1;含有一个构造方法,

a=5.因为子类创建对象调用父类的成员变量的时候,在不添加super()的时候,会得到a=1,如果添加super()就会得到a=5,我们都知道,构造方法在创建对象的时候执行,a=5.如果不调用super()就会得到错误的值

作用2:super()在构造方法中是调用父类构造方法的意思

在创建子类对象的时候,父类对象先进内存,这样子类才能自动拥有父类的成员,

作用3:子类的构造器,无论重载多少个,第一行必须是super();

作用4:构造方法无法继承,自然也没有重写这个概念

作用5:super()语句必须是构造方法的第一行代码

七总结

如果父类没有无参的构造方法,那么子类必须用super()显示调用父类的构造方法

这里就是间接调用了父类的构造方法.

super()是父类对象引用,this是本类对象引用,super(),this()必须放在构造方法的第一行,但是不能一起用,super(),this()在没有参数的时候可以省略不写.

二.构建图书馆管理系统框架

1建立一个书 的包

1.构建书类,存放书的各种信息

像这种最好设置权限为private,后期调用就用getset接口

然后重写一下toString函数,来打印书的时候来固定显示他的而信息

2.对于书因为是在图书馆系统中自然就要建立一个书架类

来把书全部放在书架这个列表里来进行增删查改

这里我们对于书架的实现用的是顺序表.构造的时候就默认书架里有这些书.

2.建立操作包

先把空类创建好, 不着急实现细节.

抽象出 Operation 的好处: 让操作和操作之间低耦合, 让操作和用户之间低耦合.

因为后期要对书架里的书进行增删查改,我们就额外建立一个操作的包,把所有操作放在一个包里

1.构建操作接口

把后续所有的操作都通过这个接口来进行,需要哪个操作,就通过接口来实现,整合在一个数组里

把所有的操作都起一个work的方法,接口也起同名的,最后统一操作.

3.建立用户包

1.建立一个用户类,管理员和普通用户的共性都放在里面

2.建立用户和管理员类,并都继承与用户

4.建立登录操作框架

1.作为整个程序入口地方,构建一个登录方法

用User来接收他们的信息.这里就显现了之前构建用户包的好处了,直接通过向下转型,根据用户的选择

选择构建管理员还是普通用户的对象.又因为User的子类都是他们所以可以直接进行接收

2.打印菜单

用户选择后应该有对应的菜单,这里的处理因为不同的用户菜单不同,我们直接把菜单方法放到对应的类

并且在父类建立同名方法.直接动态绑定调用

3.用户看到的菜单,会进行相应选择.

这里我们就需要返回一个选择值,并且在主函数里接收

得到的选择我们就应该对应之前的操作包

4.构建操作包数组

这里,我们在User类构建一个操作类数组,之前的接口的好处就显现出来了,把所有的操作都杂糅到一起了

5.分别在管理员和用户类进行实例化操作

根据数组顺序不同,对应下标对应的就是不同的选择.

0下标就是建立退出系统对象.....

6.重点,我们再User类构建一个dowork操作方法

用接收的选择值,和对应的书架.来进行操作

这个函数实体的意思就是

数组下标对应的元素的work方法

那么也就是建立相应的操作对象,并调用他们的work方法

来真正联系起来

到此图书馆系统的整体框架就搭建完了.

三.图书馆管理系统的具体实现

1.打印图书

建立循环,并在循环内,构建book对象,来接收从书架的得到下标方法返回的书

优化了一下发现其实不需要建立书对象,直接打印就行.

2.新增图书

让用户按照提示输入,然后建立一个Book类的对象来实例化

然后把书放进书架里,并使书的数组元素加一

并且之前重写的booktostring也在这里奇效了

这里我的isBorrowed一直出现问题,排查了半个小时才发现自己把boolean写错了,变成了大写

3.查找图书

思路:根据输入的信息,数组进行遍历,如果书名相同返回

这里注意字符串比较应该用对应的方法.

4.删除图书

原理跟查找差不多,先查找,然后找到对应书名的index.然后跟之前顺序表的删除类似

将i+1下标的元素赋值给i

但是是不同类的不能这么做

这里我们的操作就是

建立一个对象来引用对应对象的信息(记住 始终都是指向同一个对象)

然后把最后一个元素手动置为空,防止出错

最后再让Usersize减一个

5.退出系统

直接引用方法

6.借书和归还

这里比较简单,因为不涉及表的增加删除,只需要将借出的信息更改即可

四.总结

这里只是将具体逻辑和框架搭建起来

后续学会了数据库,可以把书的信息放在其中

再学了框架,可以增加一些好看的界面

11.8 · 孙翊清/Study - 码云 - 开源中国 (gitee.com)

五.旋转链表

解题思路

这道题首先判断是否只有一个节点或者空指针的情况,不能放在后面一起判断,因为如果len为0,除数不能为0会引起程序出错,因为这个题需要分成两个链.就用到我们熟悉的两段链条处理方法,

我们把四个节点都初始化为null,这里我们需要求一下链的长度,因为我们如果k大于len会循环移动,但是不能直接操作,我们需要求模.这里我们要判断一下k是否是len的倍数,因为只要是或者k为0,求模都会等于0,都不会动原有的表,只要返回head就行

如果想要让节点向右移动k,那就是让第一段链条的长度是len-k-1

class Solution {
    public ListNode rotateRight(ListNode head, int k) {
   if(head==null||head.next==null)return head;
           ListNode bs=head;
           int len=0;
           ListNode be=bs;
           ListNode as=head;
           ListNode ae=head;
           while(be!=null){
               be=be.next;
               len++;
           }
          k=(k<len?k:k%len);
           if(k==0)return head;
         be=bs;
         k=len-k-1;
         while(k!=0){
             be=be.next;
             k--;
         }
         as=be.next;
         ae=as;
         while(ae.next!=null){
             ae=ae.next;
         }
         be.next=null;
         ae.next=bs;
         return as;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值