题目要求:
设计一个图书馆管理系统
用户可以注册、登录、
注册时检测用户名是否重复
登录后可以查看可借图书(图书馆的书)、已借图书
借书操作、还书操作、销户操作
还有一个管理员类
可以查看添加删除书和用户
这程序有个缺点就是因为书库和用户库是以集合的形式整体存储的
所以当数据量大了以后读写速度将变的很慢...
这个还没优化
代码展示如下
java文件可以打包下载文件附件
====================================
图书馆类:
package LibrarySystem;
import java.io.IOException;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Library implements Serializable {
/**
*
*/
private static final long serialVersionUID = 5592434503037466042L;
// 起始方法
public void begin() throws ClassNotFoundException, IOException {
System.out.println("====XXX图书馆欢迎您====");
while (true) {
System.out.println("|-----------------------------|");
System.out.println("|请选择您要执行的操作(输入数字): |");
System.out.println("|1.登录 |");
System.out.println("|2.注册 |");
System.out.println("|0.退出 |");
// System.out.println("|-----------------------------|");
int operation = Library_Tool.getInt("|-----------------------------|");
if (operation == 1) {
System.out.println("======请登录======");
this.login();
} else if (operation == 2) {
this.register();
} else if (operation == 0) {
Library_Tool.saveFile();
break;
} else {
System.out.println("请输入指定的数字");
}
}
System.out.println("---------------");
System.out.println("已退出");
}
// 登录方法
public void login() throws ClassNotFoundException, IOException {
// 登录循环
System.out.println("====登录====");
while (true) {
// String id = DiyToolsaaa.DiyOperation.getString(i);
String id = Library_Tool.getString("请输入用户名:");
String passWord = Library_Tool.getString("请输入密码:");
// 登录成功标记
boolean access = false;
for (User user : Library_Tool.getUserList()) {
if (id.equals(user.getName()) && passWord.equals(user.getPassWord())) {
access = true;
loginyes(user);
break;
}
}
if (!access) {
// 登录密码错误执行
int loginerrorreturn = this.loginError();
if (loginerrorreturn == 1) {
break;
}
} else {
break;
}
}
}
// 注册方法
public void register() throws ClassNotFoundException, IOException {
System.out.println("====注册====");
// 设置用户名
String registerName;
while (true) {
registerName = Library_Tool.getString("请设置用户名");
// 检查用户名是否存在
boolean userExist = false;//假设不重复
for (User user : Library_Tool.getUserList()) {
if (user.getName().equals(registerName)) {
userExist = true;//标记该位真 表示有重复的用户名
break;
}
}
// 判断标记如果为真 则表示用户名已存在并给出提示。
if (userExist) {
System.out.println("用户名已存在,请重试");
} else {
break;
}
}
// 设置密码
String registerPassword = Library_Tool.getString("请设置密码");
// 添加用户对象
Library_Tool.getUserList().add(new User(registerName, registerPassword));
Library_Tool.saveFile();
System.out.println("注册成功");
}
// 登录成功执行
public void loginyes(User c) throws IOException, ClassNotFoundException {
System.out.println("======登录成功======");
while (true) {
System.out.println("|-----------------------------|");
System.out.println("|请选择您要执行的操作(输入数字): |");
System.out.println("|1.查看图书目录 |");
System.out.println("|2.查看已借图书 |");
System.out.println("|3.借书 |");
System.out.println("|4.还书 |");
System.out.println("|5.销户 |");
System.out.println("|0.退出 |");
// System.out.println("|-----------------------------|");
// 让用户输入要操作的数字
int operationnum = Library_Tool.getInt("|-----------------------------|");
// 判断是否退出
if (operationnum == 0) {
break;
}else if (operationnum == 5) {
accountCancellation(c);
break;
}
// 执行操作数
this.operationnum(c, operationnum);
}
}
// 登录密码错误执行
public int loginError() {
System.out.println("====用户名或密码错误====");
int x = 0;
System.out.println("|---------------------------|");
System.out.println("|请选择您要执行的操作(输入数字):|");
System.out
.println("|1.重试 |");
System.out
.println("|2.退出 |");
// System.out.println("|------------------------------------------|");
int operationerror = Library_Tool.getInt("|---------------------------|");
switch (operationerror) {
case 1:
break;
case 2:
x = 1;
break;
default:
System.out.println("请输入指定的数字");
break;
}
return x;
}
// 具体操作方法
public void operationnum(User c, int operationnum) throws IOException, ClassNotFoundException {
// 具体操作执行
switch (operationnum) {
case 1:
// 查看图书
Set<Map.Entry<Integer, String>> bookListSet = Library_Tool.getBookList().entrySet();
if (bookListSet.size() != 0) {
System.out.println("==========");
for (Entry<Integer, String> entry : bookListSet) {
System.out.println(entry.getKey() + "-" + entry.getValue());
}
System.out.println("==========");
} else {
System.out.println("书库暂时没有书");
}
break;
case 2:
// 看已借图书
Set<Map.Entry<Integer, String>> borrowBookSet = c.getBorrowBook().entrySet();
if (borrowBookSet.size() != 0) {
System.out.println("==========");
for (Entry<Integer, String> entry : borrowBookSet) {
System.out.println(entry.getKey() + "-" + entry.getValue());
}
System.out.println("==========");
} else {
System.out.println("您还没有借过书喔");
}
break;
case 3:
// 借书
borrowBook(c);
break;
case 4:
// 还书
giveBack(c);
break;
default:
System.out.println("请输入指定的数字");
break;
}
}
// 借书
public void borrowBook(User c) throws IOException, ClassNotFoundException {
int booki = Library_Tool.getInt("请输入要借的图书编号");
// 向用户对象添加借的书名
HashMap<Integer, String> bookList = Library_Tool.getBookList();
if (bookList.get(booki) != null) {
c.getBorrowBook().put(booki, bookList.get(booki));
// 从图书馆目录删除书名
bookList.remove(booki);
Library_Tool.saveFile();
System.out.println("操作完成");
} else {
System.out.println("请输入正确的编号");
}
}
// 还书
public void giveBack(User c) throws IOException, ClassNotFoundException {
int booki = Library_Tool.getInt("请输入要还的图书编号");
if (c.getBorrowBook().get(booki) != null) {
// 从图书馆目录添加书名
Library_Tool.getBookList().put(booki, c.getBorrowBook().get(booki));
// 从用户对象删除还的书名
c.getBorrowBook().remove(booki);
Library_Tool.saveFile();
System.out.println("操作完成");
} else {
System.out.println("请输入正确的编号");
}
}
// 销户方法
public void accountCancellation(User c) throws ClassNotFoundException, IOException {
System.out.println("====销户====");
// 登录循环
System.out.println("销户后将无法再次登录本银行系统,账户余额清零,确认执行销户操作吗?");
System.out.println("1、确认");
System.out.println("0、返回");
String operation = Library_Tool.getString("请选择:");
if (operation.equals("1")) {
for (User user : Library_Tool.getUserList()) {
if (c.getName().equals(user.getName())) {
Library_Tool.getUserList().remove(user);
Library_Tool.saveFile();
System.out.println("销户成功");
break;
}
}
}
}
}
====================================
图书馆工具类:
package LibrarySystem;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
public class Library_Tool {
//定义数据文件保存路径
private static File fileAddress = new File("D:\\test\\library");
//获取地址
public static File getFileAddress() {
if (!fileAddress.isDirectory()) {
fileAddress.mkdirs();
}
return fileAddress;
}
// 定义用户库
private static ArrayList<User> userList = null;
// 定义书库
private static HashMap<Integer, String> bookList = null;
// 获取用户库
@SuppressWarnings("unchecked")
public static ArrayList<User> getUserList() throws IOException, IOException, ClassNotFoundException {
if (userList == null) {
// 创建反序列化流
try {
ObjectInputStream oi = new ObjectInputStream(new FileInputStream(new File(getFileAddress(), "User.library")));
Object o = oi.readObject();
userList = (ArrayList<User>) o;
oi.close();
} catch (Exception e) {
userList = new ArrayList<User>();
//创建测试用户
userList.add(new User("mm", "mm"));
}
}
return userList;
}
// 获取书库
@SuppressWarnings("unchecked")
public static HashMap<Integer, String> getBookList() throws IOException, IOException, ClassNotFoundException {
if (bookList == null) {
try {
// 创建反序列化流
ObjectInputStream oi = new ObjectInputStream(new FileInputStream(new File(getFileAddress(), "Book.library")));
Object o = oi.readObject();
bookList = (HashMap<Integer, String>) o;
oi.close();
} catch (Exception e) {
bookList = new HashMap<Integer, String>();
//创建测试图书
bookList.put(1, "图书1号");
bookList.put(2, "十万个为什么");
bookList.put(3, "嫚嫚为啥那么美");
}
}
return bookList;
}
// 保存文件
public static void saveFile() throws IOException, IOException, ClassNotFoundException {
// 创建序列化流
ObjectOutputStream ooUser = new ObjectOutputStream(new FileOutputStream(new File(fileAddress, "User.library")));
ObjectOutputStream ooBook = new ObjectOutputStream(new FileOutputStream(new File(fileAddress, "Book.library")));
ooUser.writeObject(getUserList());// 写
ooBook.writeObject(getBookList());// 写
ooUser.flush();// 刷新
ooBook.flush();// 刷新
ooUser.close();// 关闭
ooBook.close();// 关闭
}
// 获取文本数据
public static String getString(String i) {
// 创建键盘对象
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
// 输入提示
System.out.println(i);
// 赋值数据
String x = sc.nextLine();
return x;
}
// 获取整数数据
public static int getInt(String i) {
// 创建键盘对象
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
// 输入提示
System.out.println(i);
while (true) {
if (sc.hasNextInt()) {
boolean intFlag = true;
while (intFlag) {
int x = sc.nextInt();
if (x < 0) {
intFlag = false;
System.out.println("请输入正数");
} else {
return x;
}
}
} else {
System.out.println("请输入整数数字");
sc = new Scanner(System.in);
}
}
}
}
====================================
用户类:
package LibrarySystem;
import java.io.Serializable;
import java.util.HashMap;
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = 7753744496916409672L;
private String name;
private String passWord;
// 定义已经借了的书的集合
private HashMap<Integer, String> borrowBook = null;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String name, String passWord) {
super();
= name;
this.passWord = passWord;
}
public String getName() {
return name;
}
public void setName(String name) {
= name;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public HashMap<Integer, String> getBorrowBook() {
if (borrowBook == null) {
borrowBook = new HashMap<Integer, String>();
}
return borrowBook;
}
@Override
public String toString() {
return "User [name=" + name + ", password=" + passWord + "]";
}
}
====================================
测试类:
package LibrarySystem;
import java.io.IOException;
public class LibraryMain {
public static void main(String[] args) throws ClassNotFoundException, IOException {
Library l = new Library();
l.begin();
}
}
====================================
管理员类:
package LibrarySystem;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
public class Admin {
@SuppressWarnings({ "resource" })
public static void main(String[] args) throws IOException, IOException, ClassNotFoundException {
// 获取文件目录
File f = Library_Tool.getFileAddress();
// 获取图书集合
HashMap<Integer, String> hm = Library_Tool.getBookList();
// 获取用户集合
ArrayList<User> al = Library_Tool.getUserList();
while (true) {
System.out.println("请输入要执行的操作");
System.out.println("1.输出图书目录");
System.out.println("2.输出所有用户");
System.out.println("3.增加图书");
System.out.println("4.删除图书");
System.out.println("5.增加用户");
System.out.println("6.删除用户");
System.out.println("7.保存退出");
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
if (i == 1) {
getBookList(f, hm);
} else if (i == 2) {
getUserList(f, al);
} else if (i == 3) {
addBook(f, hm);
} else if (i == 4) {
delBook(f, hm);
} else if (i == 5) {
adduser(f);
} else if (i == 6) {
deluser(f, al);
} else if (i == 7) {
Library_Tool.saveFile();
System.out.println("保存完成");
if (Library_Tool.getInt("输入0退出 输入其他继续管理") == 0) {
break;
}
}
}
}
// 输出图书
private static void getBookList(File f, HashMap<Integer, String> hm) {
Set<Map.Entry<Integer, String>> bookListSet = hm.entrySet();
System.out.println("输出图书:");
for (Entry<Integer, String> entry : bookListSet) {
System.out.println(entry.getKey() + "-" + entry.getValue());
}
}
// 输出用户
private static void getUserList(File f, ArrayList<User> al) throws ClassNotFoundException, IOException {
System.out.println("输出用户:");
for (int i = 0; i < al.size(); i++) {
System.out.println(i + "--" + al.get(i).getName() + "--" + al.get(i).getPassWord());
}
}
// 添加图书
private static void addBook(File f, HashMap<Integer, String> hm) {
int i = Library_Tool.getInt("输入图书编号");
String s = Library_Tool.getString("请输入书名");
hm.put(i, s);
}
// 删除图书
private static void delBook(File f, HashMap<Integer, String> hm) {
getBookList(f, hm);
int i = Library_Tool.getInt("输入图书编号");
hm.remove(i);
}
// 添加用户
private static void adduser(File f) throws ClassNotFoundException, IOException {
Library l = new Library();
l.register();
}
// 删除用户
private static void deluser(File f, ArrayList<User> al) throws ClassNotFoundException, IOException {
getUserList(f, al);
int i = Library_Tool.getInt("输入要删除的用户编号");
try {
al.remove(i);
} catch (IndexOutOfBoundsException e) {
System.out.println("请输入正确的编号");
}
}
}
package LibrarySystem;
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.ArrayList;import java.util.HashMap;import java.util.Scanner;
public class Library_Tool {
//定义数据文件保存路径private static File fileAddress = new File("D:\\test\\library");
//获取地址public static File getFileAddress() {if (!fileAddress.isDirectory()) {fileAddress.mkdirs();}return fileAddress;}
// 定义用户库private static ArrayList<User> userList = null;// 定义书库private static HashMap<Integer, String> bookList = null;
// 获取用户库@SuppressWarnings("unchecked")public static ArrayList<User> getUserList() throws IOException, IOException, ClassNotFoundException {if (userList == null) {// 创建反序列化流try {ObjectInputStream oi = new ObjectInputStream(new FileInputStream(new File(fileAddress, "User.library")));Object o = oi.readObject();userList = (ArrayList<User>) o;oi.close();} catch (Exception e) {userList = new ArrayList<User>();//创建测试用户userList.add(new User("mm", "mm"));}}return userList;}
// 获取书库@SuppressWarnings("unchecked")public static HashMap<Integer, String> getBookList() throws IOException, IOException, ClassNotFoundException {if (bookList == null) {try {// 创建反序列化流ObjectInputStream oi = new ObjectInputStream(new FileInputStream(new File(fileAddress, "Book.library")));Object o = oi.readObject();bookList = (HashMap<Integer, String>) o;oi.close();} catch (Exception e) {bookList = new HashMap<Integer, String>();//创建测试图书bookList.put(1, "图书1号");bookList.put(2, "十万个为什么");bookList.put(3, "嫚嫚为啥那么美");}}return bookList;}// 保存文件public static void saveFile() throws IOException, IOException, ClassNotFoundException {// 创建序列化流ObjectOutputStream ooUser = new ObjectOutputStream(new FileOutputStream(new File(fileAddress, "User.library")));ObjectOutputStream ooBook = new ObjectOutputStream(new FileOutputStream(new File(fileAddress, "Book.library")));ooUser.writeObject(getUserList());// 写ooBook.writeObject(getBookList());// 写
ooUser.flush();// 刷新ooBook.flush();// 刷新
ooUser.close();// 关闭ooBook.close();// 关闭}// 获取文本数据public static String getString(String i) {// 创建键盘对象@SuppressWarnings("resource")Scanner sc = new Scanner(System.in);
// 输入提示System.out.println(i);// 赋值数据String x = sc.nextLine();return x;}
// 获取整数数据public static int getInt(String i) {// 创建键盘对象@SuppressWarnings("resource")Scanner sc = new Scanner(System.in);
// 输入提示System.out.println(i);while (true) {if (sc.hasNextInt()) {boolean intFlag = true;while (intFlag) {int x = sc.nextInt();if (x < 0) {intFlag = false;System.out.println("请输入正数");} else {return x;}}} else {System.out.println("请输入整数数字");sc = new Scanner(System.in);}}}}——忧莉馨
















