大家好,今天给大家带来本人的自主编写的简易版【图书借阅系统】,权当做个人的实战练习和学习作品!老师说过三分看,七分练!
成果展示:
一、设计需求
请设计一个图书借阅系统,实现图书信息的展示,借阅,还书等功能。
二、设计构思
1、用SchoolBook的借口来实现,定义一个抽象的Led_Books方法。
2、分别用三个借书、还书、查看已借的书的类来implements借口,再使用借口回调。
3 、CountBooks类用于输入输出图书信息。
4、BookList单链表也用作保存图书编号。
5、主菜单类方法Menu,持续调用Choose类方法。
6、插入系统实时时间!
三、设计关键
1、Choose类方法的构建
对于类方法 Choose的构建,其实也是最为关键的一个部分,因为涉及了对于各部分模块的直接调用,以及对于操作指令的处理,遇到很多的bug和慢慢也被我解决了。
并且这部分代码相对来说,比较冗长,可能是我还没有完全适应oop编程。
2、 Menu类方法的实现
菜单Menu类方法的实现,相对简单,主要是每次都要对Choose的调用。
3、单链表的运用
目前对于单链表的运用我只是出于一个比较浅层的运用,就是简单的输入输出链表数据。
package Program_1.JavaList;
public class BookList
{
Node head=null;
public void add_head(int data)//添加头节点
{
Node node =new Node(data);
node.next=head;
head=node;
}
public void Print()//打印链表
{
Node A_Node=head;
while(A_Node!=null)
{
System.out.println("该书编号为:"+A_Node.data);
A_Node=A_Node.next;
}
}
public void addLast(int data)//添加尾节点
{
Node node =new Node(data);
Node temp =head;
while (temp.next!=null)
{
temp=temp.next;
}
temp.next=node;
}
public int length()//链表长度
{
Node node=head;
int length=0;
while(node!=null)
{
length++;
node=node.next;
}
return length;
}
public void Insertdata(int index ,int data)
{
Node node=new Node(data);
if(index==0||index>length())
{
System.out.println("插入失败!");
return;
}
Node temp=head;
int length=0;
while (temp.next!=null)
{
length ++;
temp=temp.next;
if(index==length) {
node.next=temp.next;
temp.next=node;
return;
}
}
}
四、代码附录
1、main方法
package Program_1;
import Program_1.JavaList.*;
import javax.swing.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Week4_New {
public static void main(String[] args) {
Menu();
}
public static void Menu() {
Choose choose=new Choose();
System.out.println("\t\t【<图书借阅系统>】\t\t");
System.out.println("\n");
System.out.println("\t\t||①我要借书||");
System.out.println("\t\t||②我借的书||");
System.out.println("\t\t||③归还借书||");
System.out.println("\t\t||④退 出||\n");
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("\t\tyyyy-MM-dd :hh:mm:ss");
System.out.println((dateFormat.format(date)));
choose.Choose();
}
public static class Choose
{
UseIt use = new UseIt();
static CountBooks count=new CountBooks();
public void Choose() {
System.out.println("输入您要进行的操作:\n");
Scanner usage = new Scanner(System.in);
switch (usage.nextInt()) {
case 1: {
use.UseIt(new Books_info());
int x=use.UseIt(new Led__Books());
count.Input(x);
System.out.println("您借的是:"+count.Booksname[x-1]);
int res;
do {
res = JOptionPane.showConfirmDialog(null, "是否继续借书?",
"提示", JOptionPane.YES_NO_OPTION);
if (res == JOptionPane.YES_OPTION) {
int y=use.UseIt(new Led__Books());
count.Input(y);
System.out.println("您借的是:"+count.Booksname[y-1]);
}
}
while (res == 0);
Menu();
}break;
case 2:
{
if (count.Booksnumbers== 0) {
System.out.println("您还未借任何书!");
Menu();
break;
}
count.Output();
}
Menu();
case 3:
{
if(count.Booksnumbers<=0)
{System.out.println("您还未借任何书!");
Menu();break;}
int i=0;
int x=use.UseIt(new Return__Books());
while(i<10)
{
if(count.BooksId[i]==x)
{
System.out.println(count.BooksId[i] + "成功归还!");
count.Clear(i);
break;
}
else if(i==9&&count.BooksId[i]!=x){System.out.println("输入编号错误!");
break;}
i++;
}
int res;
do {
res = JOptionPane.showConfirmDialog(null, "是否继续还书?",
"提示", JOptionPane.YES_NO_OPTION);
if (res == JOptionPane.YES_OPTION) {
if(count.Booksnumbers==0)
{
System.out.println("书已经全部还清!");
break;
}
int k=0;
int y = use.UseIt(new Return__Books());
while (k <10) {
if (count.BooksId[k] == y) {
System.out.println(count.BooksId[k] + "成功归还!");
count.Clear(k);
break;
}
else if(k==9&&count.BooksId[k]!=y){System.out.println("输入编号错误!");
break;}
k++;
}
}
}while(res==0);
Menu();}
case 4:
{
System.out.println("\t\t正在退出系统——");
System.out.println("\t\t退出成功!");
System.exit(0);
}
}
}
}
}
interface SchoolBook {
int LedBooks();
}
class Led__Books implements SchoolBook {
public int LedBooks() {
System.out.println("\t\t<借书>");
Scanner bookname = new Scanner(System.in);
System.out.println("请输入你要借的书的序号:");
int x = bookname.nextInt();
System.out.println("借书成功!");
return x;
}
}
class Books_info implements SchoolBook {
public int LedBooks() {
System.out.println("图书馆有以下书:");
System.out.println("||1、性代数线||--||5、数据结构||");
System.out.println("||2、高等数学||--||6、大学物理||");
System.out.println("||3、大学物理||--||7、离散数学||");
System.out.println("||4、高等代数||--||8、Java课程设计||");
return 0;
}
}
class Return__Books implements SchoolBook {
public int LedBooks() {
System.out.println("输入你要归还的书的编号:");
Scanner Rebooks = new Scanner(System.in);
int x= Rebooks.nextInt();
return x;
}
}
class UseIt {
public int UseIt(SchoolBook a)
{ return a.LedBooks(); }
}
class CountBooks {
BookList account = new BookList();
int []BooksNumbers=new int [10];
int Booksnumbers=0;
private int i=0;
int []BooksId=new int [10];
String[] Booksname = new String[]{"性代数线", "高等数学",
"大学物理", "高等代数", "数据结构",
"大学物理", "离散数学", "Java课程设计"};
public void Input(int a) {
account.add_head(202100+a);
this.BooksNumbers[i]=a;
this.BooksId[i]=202100+a;
this.Booksnumbers++;
i++;
}
public void Output() {
account.Print();
int i=0;
while(BooksNumbers[i]!=0&&Booksnumbers!=0)
{
System.out.println(Booksname[BooksNumbers[i]-1]);
i++;
}
System.out.println("您共借了"+Booksnumbers+"本书!");
}
public void Clear(int x){
this.BooksNumbers[x]=0;
Booksnumbers--;
}
}
2、BooList单链表类
package Program_1.JavaList;
public class BookList
{
Node head=null;
public void add_head(int data)//添加头节点
{
Node node =new Node(data);
node.next=head;
head=node;
}
public void Print()//打印链表
{
Node A_Node=head;
while(A_Node!=null)
{
System.out.println("该书编号为:"+A_Node.data);
A_Node=A_Node.next;
}
}
public void addLast(int data)//添加尾节点
{
Node node =new Node(data);
Node temp =head;
while (temp.next!=null)
{
temp=temp.next;
}
temp.next=node;
}
public int length()//链表长度
{
Node node=head;
int length=0;
while(node!=null)
{
length++;
node=node.next;
}
return length;
}
public void Insertdata(int index ,int data)
{
Node node=new Node(data);
if(index==0||index>length())
{
System.out.println("插入失败!");
return;
}
Node temp=head;
int length=0;
while (temp.next!=null)
{
length ++;
temp=temp.next;
if(index==length) {
node.next=temp.next;
temp.next=node;
return;
}
}
}
/* public void main(String []args)
{
System.out.println("我运行了!");
BookList List=new BookList();
List.add_head(2);
List.add_head(4);
/* List.addLast(1);
List.addLast(7);
List.Insertdata(3,88);
List.Print();
}*/
}
//另一个public类
package Program_1.JavaList;
public class Node//节点类
{
Node next =null;
public int data;
public Node(int data){
this.data=data;
}
}