一丶项目简介
这个项目的是一个简单的图书管理系统,可以进行注册,登录,借书,查书,还书的功能。
二丶项目代码
Book.java
package LibaryLend;
public class Book {
int Bookid;//书籍编号
String Bookname;//书籍名称
int stock;//书籍库存
double price;//书籍价格
public Book(int Bookid,String Bookname,int stock,double price) {
this.Bookid = Bookid;
this.Bookname = Bookname;
this.stock = stock;
this.price = price;
}
}
Student.java
。
package LibaryLend;
import java.util.ArrayList;
import java.util.List;
public class Student {
int Sid;//学生学号
String Sname;//学生姓名
int books[] = new int[3];//已借阅书籍的集合
public Student(int sid,String Sname,int[] books) {
this.Sid = sid;
this.Sname = Sname;
this.books = books;
}
}
Load.java
。
package LibaryLend;
import LibaryLend.LendingSystem;
import java.util.List;
import java.util.Scanner;
public class Load {
public int Loading(List<Student> SList){
//判断登录是否成功
boolean m = false;
//学生输入id和name
System.out.println("请输入你的学号:");
Scanner id = new Scanner(System.in);
int sid = id.nextInt();
System.out.println("请输入你的名字:");
Scanner name = new Scanner(System.in);
String sname = name.next();
//对比学生集合查找信息是否相同
for(int i = 0 ; i < SList.size() ; i++){
if(SList.get(i).Sid == sid && SList.get(i).Sname.equals(sname)){
m = true;
}
}
if(m){
System.out.println("登录成功");
return sid;
}else{
System.out.println("学号或姓名输入错误");
return 0;
}
}
public void Register(List<Student> SList){
System.out.println("----欢迎来到注册界面----");
System.out.println("请输入你的学号:");
Scanner id = new Scanner(System.in);
//输入正确格式的学号,集合添加,否则提示注册失败
if(id.hasNextInt()){
int sid = id.nextInt();
System.out.println("请输入你的姓名");
Scanner name = new Scanner(System.in);
String sname = name.next();
SList.add(new Student(sid,sname, new int[]{0,0,0}));
System.out.println("注册成功");
}else{
String sid = id.next();
System.out.println("请输入你的姓名");
Scanner name = new Scanner(System.in);
String sname = name.next();
System.out.println("学号输入有误,注册失败");
}
}
}
LibarySystem.java
package LibaryLend;
import java.util.List;
import java.util.Scanner;
import java.lang.String;
public class LibarySystem {
public void borrowBook(List<Book> bookList, List<Student> SList,int id){
//打印当前学生已借书数量,打印学生剩余可借书数量
int sum = 0;//记录学生可借书数量
int i = 0;//学生id对应学生集合中的位置
for(i = 0 ;i < SList.size(); i++){
if(SList.get(i).Sid == id){
break;
}
}
for(int m = 0; m < SList.get(i).books.length ; m++){
if(SList.get(i).books[m] != 0){
sum++;
}
}
System.out.println("你已借书"+sum+"本,还可借阅"+(SList.get(i).books.length-sum)+"本");
//打印图书列表
System.out.println("书籍编号\t书籍名称\t书籍价格\t书籍库存");
for(int m = 0 ; m < bookList.size() ; m++){
System.out.println(bookList.get(m).Bookid+"\t\t"+bookList.get(m).Bookname+"\t"+bookList.get(m).price+"\t"+bookList.get(m).stock);
}
System.out.println("1.借书");
System.out.println("2.返回");
//借书,借书余额不足提示无法借书,借书成功修改图书图存和学生已借书籍
while(true){
System.out.println("输入数字选择你的操作");
Scanner s = new Scanner(System.in);
if(s.hasNextInt()){
int c = s.nextInt();
switch(c){
case 1:
if((SList.get(i).books.length-sum) != 0){
borrow(bookList,SList,i);
}else{
System.out.println("你已达到借书上限,请先还书");
}
break;
case 2:
return;
default:System.out.println("输入有误");break;
}
}else{
System.out.println("输入有误");
}
}
}
public void returnBook(List<Book> bookList, List<Student> SList,int id){
while(true){
int i = 0;//学生id对应学生集合中的位置
for(i = 0 ;i < SList.size(); i++){
if(SList.get(i).Sid == id){
break;
}
}
//未借书显示主界面
boolean b = true;//记录是否存在
for(int q = 0 ; q < SList.get(i).books.length ; q++){
if(SList.get(i).books[q] != 0){
b = false;
}
}
if(b){
System.out.println("当前还未借书");
return;
}
//打印学生已借书
System.out.println("已借书籍");
System.out.println("书籍编号\t书籍名称");
for(int m = 0; m < SList.get(i).books.length ; m++){
if(SList.get(i).books[m] != 0){
//学生已借书籍存的是书的编号,编号对应书集合中的位置需要减1
System.out.println(bookList.get(SList.get(i).books[m]-1).Bookid+"\t"+bookList.get(SList.get(i).books[m]-1).Bookname);
}
}
//功能 还书 返回
System.out.println("1.还书");
System.out.println("2.返回");
System.out.println("输入数字选择你的操作");
Scanner s = new Scanner(System.in);
if(s.hasNextInt()){
int c = s.nextInt();
switch(c){
case 1:
rbook(bookList,SList,i);
break;
case 2: return;
default:System.out.println("输入错误");
}
}else{
System.out.println("输入有误");
}
//对应书的库存加1,学生所借书减1
}
}
public void seacherBook(List<Book> bookList, List<Student> SList,int Studentid){
while(true){
//提示输入想要查询书籍的id或name
System.out.println("输入你想要查询的书籍ID或名称");
Scanner s = new Scanner(System.in);
int m = 0;//查询结果位置
boolean b = false;//检查输入是否正确
if(s.hasNextInt()){
int c = s.nextInt();
for(m = 0; m < bookList.size() ; m ++){
if(bookList.get(m).Bookid == c){
b = true;
break;
}
}
if(b){
System.out.println(bookList.get(m).Bookid+"\t\t"+bookList.get(m).Bookname+"\t"+bookList.get(m).price+"\t"+bookList.get(m).stock);
break;
}else{
System.out.println("输入错误");
}
}else{
String c = s.next();
for(m = 0; m < bookList.size() ; m ++){
if(bookList.get(m).Bookname.equals(c)){
b = true;
break;
}
}
if(b){
System.out.println(bookList.get(m).Bookid+"\t\t"+bookList.get(m).Bookname+"\t"+bookList.get(m).price+"\t"+bookList.get(m).stock);
break;
}else{
System.out.println("输入错误");
}
}
}
while(true){
System.out.println("请输入数字选择你的操作");
System.out.println("1.借书");
System.out.println("2.返回");
Scanner S = new Scanner(System.in);
if(S.hasNextInt()){
int c = S.nextInt();
switch(c){
//case 1:return; 不想写了,实现思路跟借书一致
case 2:
return;
default: System.out.println("输入错误");break;
}
}
}
}
public static void borrow(List<Book> bookList, List<Student> SList,int i){
boolean b1 = false;//记录书籍编号或名称是否正确
boolean b2 = true;//记录该书学生是否借阅
int m = 0;//记录书籍id对应集合中位置
System.out.println("请输入你想要借阅的图书的编号或名称");
Scanner s = new Scanner((System.in));
if(s.hasNextInt()){
int c = s.nextInt();
//匹配书籍id查看输入是否正确
for(m = 0;m < bookList.size();m++){
if(bookList.get(m).Bookid == c){
b1 = true;
break;
}
}
if(b1 && c != 0){
//匹配书籍id查看该生是否借阅
for(int n = 0;n < SList.get(0).books.length;n++){
if(SList.get(i).books[n] == bookList.get(m).Bookid){
b2 = false;
break;
}
}
}else{
System.out.println("书籍编号输入错误");
}
if(b2){
//书籍库存-1
if(bookList.get(m).stock != 0){
bookList.get(m).stock--;
//学生借书+1
for(int n = 0 ; n < SList.get(i).books.length ; n++){
if(SList.get(i).books[n] == 0){
SList.get(i).books[n] = bookList.get(m).Bookid;
System.out.println("借书成功");
return;
}
}
}else{
System.out.println("该书已被借完");
return;
}
}else{
System.out.println("该书你已借阅");
}
}else{
//匹配书籍名称查看该生是否借阅
String c = s.next();
for(m = 0;m < bookList.size();m++){
if(bookList.get(m).Bookname.equals(c)){
b1 = true;
break;
}
}
if(b1 && c != null){
//匹配书籍id查看该生是否借阅
for(int n = 0;n < SList.get(0).books.length;n++){
if(bookList.get(SList.get(i).books[n]).Bookname.equals(c)){
b2 = true;
}
}
}else{
System.out.println("书名输入错误");
return;
}
if(b2){
//书籍库存-1
if(bookList.get(m).stock != 0){
bookList.get(m).stock--;
//学生借书+1
for(int n = 0 ; n < SList.get(i).books.length ; n++){
if(SList.get(i).books[n] == 0){
SList.get(i).books[n] = bookList.get(m).Bookid;
System.out.println("借书成功");
return;
}
}
}else{
System.out.println("该书已被借完");
return;
}
}else{
System.out.println("该书你已借阅");
}
}
}
public static void rbook(List<Book> bookList, List<Student> SList,int i){
System.out.println("请输入还书的编号或名字");
Scanner s = new Scanner(System.in);
//根据输入的内容检索图书是否已借
//匹配成功书籍库存+1,学生已借图书-1
if(s.hasNextInt()){
int c = s.nextInt();
//记录书籍id对应位置
int book = 0;//书的位置
for(book = 0 ; book < bookList.size() ; book++){
if(bookList.get(book).Bookid == c){
break;
}
}
//匹配书籍id查看该生是否借阅
for(int n = 0;n < SList.get(0).books.length;n++){
if(SList.get(i).books[n] == bookList.get(book).Bookid){
//书籍库存+1
bookList.get(book).stock++;
//学生借书-1
for(int m = 0 ; m < SList.get(i).books.length ; m++){
if(SList.get(i).books[m] == bookList.get(book).Bookid){
SList.get(i).books[m] = 0;
return;
}
}
}
}
System.out.println("书籍编号输入错误");
return;
}else {
String c = s.next();
//记录书籍id对应位置
int book = 0;//书的位置
for (book = 0; book < bookList.size(); book++) {
System.out.println("test");
if (bookList.get(book).Bookname.equals(c)) {
break;
}
}
//匹配书籍id查看该生是否借阅
for (int n = 0; n < SList.get(0).books.length; n++) {
if (SList.get(i).books[n] == bookList.get(book).Bookid) {
//书籍库存+1
bookList.get(book).stock++;
//学生借书-1
for (int m = 0; m < SList.get(i).books.length; m++) {
if (SList.get(i).books[m] == bookList.get(book).Bookid) {
SList.get(i).books[m] = 0;
return;
}
}
}
}
System.out.println("书籍编号输入错误");
return;
}
}
}
LendingSystem
/*
图书借阅系统
1.有学生类和图书类两个类
2.图书类有Bookid,Bookname,stock(库存),price4个属性
3.学生类有Sid,Sname,books(已借阅书籍)3个属性
4.注册功能包含id,name,books3个属性,books属性初始为0
4.学生借书前要输入id和name进行登录并获取books信息,如果借阅数量已满,需要先还书再借阅,借阅数量为满可以直接借阅
5.学生借书需要保存已借阅书籍的信息,借书还书前后需要修改图书类的库存信息,学生类已借阅书籍可以有图书类的集合来存储
6.学生可以通过书籍id或者name来查询书籍,查询成功展示书籍信息,查询未成功提示查询失败并重新输入
7.学生还书先展示已借阅书籍,学生可通过输入id或者name来选择还的书,id或者name输入错误提示重新输入或者取消还书,还书成功展示还书后的借书信息
8.主菜单基本逻辑:登录界面有登录注册和退出三个功能。注册成功需要填写id和name,注册成功后可登录。登录成功后有借书,查书,还书和退出四个功能。借书界面展示学生已借书籍数量和可借书籍数量。无法借书时若选择借书则
提示借书失败,无法借书,需要还书。查书时学生可输入id或者name,有系统判断输入的类型,并展示对应的书籍。查书成功可直接借书。还书界面展示学生已借书籍,学生可以选择
还书或退会主界面。退出功能会退出到登录界面,在登录界面可以选择重新登录或者退出系统。
*/
package LibaryLend;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class LendingSystem {
static List<Book> bookList = new ArrayList<>();
static List<Student> SList = new ArrayList<>();
//记录当前学生
static int Studentid = 0;
public static void main (String[] args){
initBook();
initStudent();
System.out.println("----欢迎进入图书管理系统----");
//判断登录是否成功
boolean m = true;
//登录界面
while(Studentid == 0){
//功能选项
System.out.println("1.登录");
System.out.println("2.注册");
System.out.println("3.退出");
System.out.println("输入数字选择你的操作:");
Scanner s = new Scanner(System.in);
if(s.hasNextInt()){
int num = s.nextInt();
//登录界面:登录,注册,退出
Load load = new Load();
switch (num){
case 1 :
Studentid = load.Loading(SList);
break;
case 2 :
load.Register(SList);
break;
case 3 :
return;
default: System.out.println("输入错误,请重新输入");
}
}else{
System.out.println("输入错误,请重新输入");
}
}
//功能界面
while(true){
//功能选项
System.out.println("1.借书");
System.out.println("2.还书");
System.out.println("3.查书");
System.out.println("4.退出");
System.out.println("输入数字选择你的操作:");
Scanner s = new Scanner(System.in);
if(s.hasNextInt()){
int num = s.nextInt();
LibarySystem LS = new LibarySystem();
switch(num){
case 1:
LS.borrowBook(bookList,SList,Studentid);
break;
case 2:
LS.returnBook(bookList,SList,Studentid);
break;
case 3:
LS.seacherBook(bookList,SList,Studentid);
break;
case 4:
return;
default: System.out.println("输入错误,请重新输入"); break;
}
}else{
System.out.println("输入错误,请重新输入");
}
}
}
// 初始化书籍信息
public static void initBook(){
bookList.add(new Book(1,"红楼梦",10,20.0));
bookList.add(new Book(2,"三国演义",5,15.0));
bookList.add(new Book(3,"西游记",15,22.0));
bookList.add(new Book(4,"水浒传",8,30.0));
}
//初始化学生信息
public static void initStudent(){
SList.add(new Student(2112,"xiaoming", new int[]{1,2,0}));
SList.add(new Student(2113,"xiaohong", new int[]{2,3,0}));
}
}
三丶运行结果
注册
登录
借书
还书
查书
四丶小结
这次项目的时间不多,主要目的是对之前javase一些知识的运用和总结,所以没有注重太多的细节。查书之后借书的功能还未完善,但基本逻辑与直接借书类似。
由于学习进度问题,类的集合的信息存储使用的是代码初始化,代码演示部分是在控制台输出。在之后学习到GUI类和FILE类之后可以将数据存储在文件中,将运行结果在GUI界面展示出来。之后再学习到javaweb之后也可以以这次项目为基础,搭建一个图书管理系统的网站,使得项目更加完整。
在项目过程中还有一些问题没有解决。使用hasNextInt()之后可以使用nextInt赋值,但在使用hasNext()之后无法使用next()赋值,查询后为明白,在之后的学习中会注意Scanner的使用。