图书管理系统
前言
长期以来,人们使用传统的人工方式管理图书馆的日常业务,其操作流程比较烦琐。在借书时,读者首先将要借的书和借阅证交给工作人员,然后工作人员将每本书的信息卡片和读者的借阅证放在一个小格栏里,最后在借阅证和每本书贴的借阅条上填写借阅信息。在还书时,读者首先将要还的书交给工作人员,工作人员根据图书信息找到相应的书卡和借阅证,并填好相应的还书信息。太过于繁琐了!所以,我们需求设计一个图书管理系统来方便学生的借书和图书馆管理书籍。
一个成功的图书管理系统能提供快速的图书信息检索功能、快捷的图书借阅、归还流程,为管理者与读者提供充足的信息和快捷的数据处理手段,本系统应具有以下特点:
1.具有良好的系统性能,友好的用户界面。
2.系统应该有很好的可扩展性和较高的处理效率,便于使用和维护。
3.采用成熟技术开发,使系统具有较高的技术水平和较长的生命周期。
4.系统尽量简化图书馆管理员的重复工作,提高工作效率。
5.简化数据查询,统计难度。
项目前提
完成本项目需要有最基本的Java编程能力,完成本项目需要用到的Java编程知识有:
掌握java基本语法
熟悉使用流程控制
理解面向对象思想
熟练封装,继承,多态
熟悉使用接口,异常
熟悉使用集合
熟悉掌握I/o流相关操作
项目介绍
本系统功能分为读者信息管理模块、图书信息管理模块、图书借阅管理模块、基础信息维护模块和用户管理模块,和登录模块,一共六个模块。
接下来从易到难为大家介绍,也是我当时做这个项目时的思路。
登录模块
登录模块运行图
登录模块功能介绍
用户(这里的用户指的是管理员而不是读者)系统第一次运行,登陆时,首先会对文件是否有用户信息进行判断是否有用户信息如果没有用户信息就会提示用户注册,注册过后再来登录。登录时也会对用户名和密码进行判断,然后进入图书管理系统的主页面。
注册模块代码
//由于是登录模块的注册文件为空,不需要考虑用户名是否在文件中唯一的问题。
File file=new File(登录信息文件地址);
Properties users=new Properties();//创建集合对象
//键盘输入的用户名和密码以键值对的方法存入集合,然后通过输出流保存文件
Prop.setProperty(name,password);
Prop.store(new FileWriter(file)
由于代码的篇幅比较大,不会给出全部代码,只会对功能实现的大致逻辑进行讲解。
登录模块代码
public boolean login()
//这里的方法是带返回值的方法,如果用户名和密码都正确表示登录成功返回值为true,反之为false,可以通过这里的返回值,在方法调用的时候来判断是否跳转到界面
File file = new File(),
prop.load(new FileReader(file));
//获取文件中输入流的键值对
Set<String> set = prop.stringPropertyNames();//获取所有键(用户名)的集合,用一个集合来接收
//通过对这个集合的遍历,依次与输入的用户名比对(字符串相等的比较)
propUsers.getProperty(键(用户名))//通过此方法获取与键对应的值(密码)与键盘输入的密码进行比较(字符串的比较)
//最后登录成功 返回true
return true;
用户管理
用户管理运行图
用户管理代码实现
用户添加实际就是上面登录模块中的注册功能,只不过加了一个用户名相同的判断。
修改密码,删除用户需要判断不能修改或删除当前登录用户的密码
基本信息维护模块
基本信息维护运行图
基本信息维护模块的主要工能有读者类型管理(读者类型的添加,删除,查询,修改),图书类型管理(图书类型的添加,删除,查询,修改),罚金设置先不做,等后面做图书借阅功能的时候再做(为什么不做,是应为我设计读者类型实体类的时候没有把罚金考虑进去)。
读者类型和图书类型管理代码实现
因为这两个模块的设计思路和功能实现基本一致,所以我一并讲解。
首先要设计两个模块的实体类(每个类的成员变量如下图)
读者类型实体类的成员变量:
图书类型实体类的成员变量:
然后对这两个实体类进行制作标准类的操作(给出无参,带参构造方法,给出每个成员变量的get/set方法,和toString方法)
由于后面的都是用的是序列化的方式来做的,所以每个实体类都会实现一个接口。
class (类名) implements Serializable
为了简化代码,读者类别,图书类别,读者,图书以及后面的借阅都需要一个序列化和反序列化的操作,所以可以写一个通用的方法
//从文件读数据
public static Object readFile(File file) throws IOException, ClassNotFoundException {
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file));
Object o=ois.readObject();
ois.close();
return o;
}
//向文件写数据
public static void returnFile(Object obj,File file) throws IOException {
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(obj);
oos.close();
}
接下来就是实现增删改查,这个没有没有什么好说的。我只讲一下需要注意的一些细节问题。
添加:
1.需要注意的是编号的唯一性,需要到对应的文件里面读取信息,如果没有相同的编号才可以添加。
2.对添加的每一个属性的数据类型要做出合理的限制。
删除:
1.通常是通过编号进行删除。
2.为了增加用户体验,在进入删除模块时会对所有的信息进行打印。
3.如果是文件里面没有的就会删除失败
4.如果读者或者图书使用了相应的读者类型或者图书类型,就不能对该类型进行删除和修改操作。
还有就是在执行完成相应的操作过后,给出相应的提示语句
图书信息管理和读者信息管理
图书信息管理和读者信息管理运行图
代码讲解
同样,上面两张图片展示的是读者实体类和图书实体类的成员变量,都需要标准类制作和实现接口(参考图书类型和读者类型)为什么要先写两个类型的实体类再写读者和图书的实体类,可以看一下上面两张图的最后一个成员变量。
读者和图书的信息管理也都是增删改查操作,同上。
图书借阅模块
图书借阅模块主要包括借书,还书。因为涉及还书逾期的一个罚金处理还要加上之前基本信息维护的罚金设置功能。
图书借阅模块运行图
借书
借阅查询
罚金设置
还书
图书借阅模块代码实现
借书的实体类
总结
所有类和文件的设置
由于源码的量比较大,不好展示,有需要的可以私wo!!