图书馆管理系统 Java

目录

要求:

代码

Operate接口

 Book类

 Reader类

BookList类

ReadList 类 

Infor类

InforList类

main

功能实现

改进

错误

总结


要求:

为图书管理人员编写一个图书管理系统,图书管理系统的设计主要是实现对图书的管理和相关操作,包括3个表:

图书信息表——存储图书的基本信息,包括书号、书名、作者、出版社、出版日期、存馆数量、定价等。

读者信息表——存储读者的基本信息,包括学号、姓名、学院、专业班级等。

图书借阅表——存储读者借书的相关信息,包括学号、姓名、书号、书名、借阅日期、应还日期、归还日期等。

用菜单选择方式完成下列功能:

1.图书信息添加功能:包括书号、书名、作者、出版社、存馆数量、定价等。

2.图书信息查询:分别按书名,按作者名,按出版社等进行查询。

3.图书信息排序:按书号、书名等按升序进行排序。

4.图书信息的修改、删除:按书号或书名进行图书的修改和删除。

5.读者信息添加功能:包括学号、姓名、学院、专业班级等。

6.读者信息查询:分别按学号、姓名、专业班级等进行查询。

7.读者信息排序:按学号、学院等按升序进行排序。

8.读者信息的修改、删除:按学号+姓名进行读者信息的修改和删除。

9.图书借阅:输入学号+书号,如果该书图书信息表中的存馆数量大于0,则可以借出,借出相应数量后修改图书信息表中的存馆数量,在图书借阅表添加该同学的借阅。

10.图书归还:输入学号+书号,修改图书信息表中的存馆数量,在图书借阅表中记录该同学的归还时间。

11.图书借阅查询:分别按学号、书名、学院等进行查询。

思路:

和之前的大致一样,不同点是 在程序运行开始的时候,将数据从文件里导入list中,进行操作,直到关闭程序不再进行操作,才将list中的数据存入列表。

代码

图书馆管理系统 Java_第1张图片

Operate接口

package liberal;

public interface Operate {
	//从文件中读取信息,输入到list中
	public abstract void init();
	//在list 中添加 新元素
	public abstract void add();
	//在list 中搜索
	public abstract void search();
	//排序
	public abstract void sort();
	//在list 中删除
	public abstract void delete();
	//在list 中修改所要修改的内容
	public abstract void revise();
	//将list 中的信息导入 文件中储存 ,并清空list
	public abstract void stor();
}

 Book类

package liberal;
public class Book {
	//书号、书名、作者、出版社、出版日期、存馆数量、定价
	private long bnumber;
	private String bname;
	private String author;
	private String publisher;
	private String date;
	private long snumber;
	private double price;
	
	Book(long bnumber,String bname,String author,String publisher,String date,long snumber,double price){
		this.bnumber=bnumber;
		this.bname=bname;
		this.author=author;
		this.publisher=publisher;
		this.date=date;
		this.snumber=snumber;
		this.price=price;
	}
	
	public void setBnumber(long bnumber) {
		this.bnumber=bnumber;
	}
	
	public long getBnumber() {
		return bnumber;
	}
	
	public void setBname(String bname) {
		this.bname=bname;
	}
	
	public String getBname() {
		return bname;
	}
	
	public void setAuthor(String author) {
		this.author=author;
	}
	
	public String getAuthor() {
		return author;
	}
	
	public void setPublisher(String publisher) {
		this.publisher=publisher;
	}
	
	public String getPublisher() {
		return publisher;
	}
	
	public void setDate(String date) {
		this.date=date;
	}
	
	public String getDate() {
		return date;
	}
	
	public void setSnumber(long snumber) {
		this.snumber=snumber;
	}
	
	public long getSnumber() {
		return snumber;
	}
	
	public void setPrice(double price) {
		this.price=price;
	}
	
	public double getPrice() {
		return price;
	}
	
	public void show() {
		//书号、书名、作者、出版社、出版日期、存馆数量、定价
		System.out.println("书号:\t"+bnumber+"\r\n"
        		+ "书名:\t"+bname+"\r\n"
        		+ "作者:\t"+author+"\r\n"
        		+ "出版社:\t"+publisher+"\r\n"
        		+ "存馆数量:\t"+snumber+"\r\n"
        		+ "定价:\t"+price+"\r\n"
        		+ "");
	}
	
}

 Reader类

package liberal;

public class Reader {
	//学号、姓名、学院、专业班级
	private int sno;
	private String sname;
	private String collage;
	private String major_class;
	
	Reader(int sno,String sname,String collage,String major_class){
		this.sno=sno;
		this.sname=sname;
		this.collage=collage;
		this.major_class=major_class;
	}
	
	public void setSno(int sno) {
		this.sno=sno;
	}
	
	public int getSno() {
		return sno;
	}
	
	public void setSname(String sname) {
		this.sname=sname;
	}
	
	public String getSname() {
		return sname;
	}
	
	public void setCollage(String collage) {
		this.collage=collage;
	}
	
	public String getCollage() {
		return collage;
	}
	
	public void setMajor_class(String major_class) {
		this.major_class=major_class;
	}
	
	public String getMajor_class() {
		return major_class;
	}
	
	public void show() {
		//学号、姓名、学院、专业班级
		System.out.println("学号:\t"+sno+"\r\n"
        		+ "姓名:\t"+sname+"\r\n"
        		+ "学院:\t"+collage+"\r\n"
        		+ "专业班级:\t"+major_class+"\r\n"
        		+ "");
	}
	
}

在写这两个类的时候,感觉有些set,get方法没有用,但还是写了,并不知道要不要写。感觉写了后改程序的时候会更加方便,

BookList类

package liberal;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.text.Collator;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.Locale;
import java.util.Scanner;

public class BookList implements Operate{
	private LinkedList booklist=new LinkedList();
	
	public void init() {
		File file=new File("src\\liberal\\图书信息表.txt");
		//文件是否存在,如果不存在则创建该文件
		if(file.exists()) {
			//文件是否空
			if(file.length()==0) {
				System.out.println("暂无图书信息。\n请先输图书信息。");
			}
			else {
				try {
					FileReader fr=new FileReader(file);
					BufferedReader bufr=new BufferedReader(fr);
					String s=null;
					long bnumber=0;
					String bname=null;
					String author=null;
					String publisher=null;
					String date=null;
					long snumber=0;
					double price=0.0;
					long i=1;
					while((s=bufr.readLine())!=null) {
						//书号、书名、作者、出版社、出版日期、存馆数量、定价
						if(i%7==1)
							//将字符型转成long
							bnumber=Long.parseLong(s);
						if(i%7==2)
							bname=s;
						if(i%7==3)
							author=s;
						if(i%7==4)
							publisher=s;
						if(i%7==5)
							date=s;
						if(i%7==6)
							snumber=Long.parseLong(s);
						if(i%7==0) {
							price=Double.parseDouble(s);
							Book book=new Book(bnumber,bname,author,publisher,date,snumber,price);
							booklist.add(book);
						}
						i++;
					}
					bufr.close();
					fr.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		else {
			try {
				file.createNewFile();
			} catch(Exception e) {
				e.printStackTrace();		
			}
		}
	}
			
	public void add() {
		Scanner in = new Scanner(System.in);		
		System.out.println("请输入要添加的书号:");
		long bnumber=in.nextLong();
		String s=in.nextLine();
		System.out.println("请输入要添加的书名:");
		String bname=in.nextLine();
		System.out.println("请输入要添加的作者:");
		String author=in.nextLine();
		System.out.println("请输入要添加的出版社:");
		String publisher=in.nextLine();
		System.out.println("请输入要添加的出版日期:(格式:1999.12.12)");
		String date=in.nextLine();
		System.out.println("请输入要添加的存馆数量:");
		long snumber=in.nextLong();
		System.out.println("请输入要添加的定价:");
		double price=in.nextDouble();
		Book book =new Book(bnumber,bname,author,publisher,date,snumber,price);
		booklist.add(book);
		System.out.println("添加成功。");
	}
	
	public boolean bnPd(long bnumber) {
		for(int j=0;j=1) {
				booklist.get(j).setSnumber(booklist.get(j).getSnumber()-1);
				return true;
			}
		return false; 
	}
	
	/*
	 * public boolean searsn1(long bnumber) {
		for(int j=0;j7) {
            System.out.println("输入范围错误,请重新输入。");
            System.out.println("请按照下面提示进行操作。\r\n"
    				+ "返回上一界面 0\r\n"
    				+ "按书号查询请按 1\r\n"
    	       		+ "按书名查询请按 2\r\n"
    	       		+ "按作者查询请按 3\r\n"
    	       		+ "按出版社查询请按 4\r\n"
    	       		+ "按出版日期查询请按 5\r\n"
    	       		+ "按馆存数量查询请按 6\r\n"
    	       		+ "按价格查询请按 7\r\n"
    	       		+ "");
            i=in.nextInt();
        }
		boolean f=true;
		switch(i) {
			case 0: break; 
			case 1:		
				System.out.println("请输入要查询的书号:");
				long bnumber=in.nextLong();
				for(int j=0;j7) {
            System.out.println("输入范围错误,请重新输入。");
            System.out.println("请按照下面提示进行操作。\r\n"
    				+ "返回上一界面 0\r\n"
    				+ "按书号排序请按 1\r\n"
    	       		+ "按书名排序请按 2\r\n"
    	       		+ "按作者排序请按 3\r\n"
    	       		+ "按出版社排序请按 4\r\n"
    	       		+ "按出版日期排序请按 5\r\n"
    	       		+ "按馆存数量排序请按 6\r\n"
    	       		+ "按价格排序请按 7\r\n"
    	       		+ "");
            i=in.nextInt();
        }
		switch(i) {
		case 0: break;
		case 1:
			Collections.sort(booklist, new Comparator() {	
				@Override
		        public int compare(Book o1, Book o2) {
					if(o1.getBnumber()-o2.getBnumber()<0)
						return -1;
		            else
		                return 1;
		        }
			});
			break;
		case 2:
			Collections.sort(booklist, new Comparator() {	
				@Override
		        public int compare(Book o1, Book o2) {
					return Collator.getInstance(Locale.CHINA).compare(o1.getBname(), o2.getBname());
		        }
		    });
			break;
		case 3:
			Collections.sort(booklist, new Comparator() {	
				@Override
		        public int compare(Book o1, Book o2) {
					return Collator.getInstance(Locale.CHINA).compare(o1.getAuthor(), o2.getAuthor());
		        }
		    });
			break;
		case 4:
			Collections.sort(booklist, new Comparator() {	
				@Override
		        public int compare(Book o1, Book o2) {
					return Collator.getInstance(Locale.CHINA).compare(o1.getPublisher(), o2.getPublisher());
		        }
		    });
			break;
		case 5:
			Collections.sort(booklist, new Comparator() {	
		        @Override
		        public int compare(Book o1, Book o2) {
		        	return Collator.getInstance(Locale.CHINA).compare(o1.getDate(), o2.getDate());
		        }
		    });
			break;
		case 6:
			Collections.sort(booklist, new Comparator() {	
		        @Override
		        public int compare(Book o1, Book o2) {
		        	if(o1.getSnumber()-o2.getSnumber()<0)
		                return -1;
		            else
		                return 1;
		        }
		    });
			break;
		case 7:
			Collections.sort(booklist, new Comparator() {	
				@Override
		        public int compare(Book o1, Book o2) {
					if(o1.getPrice()-o2.getPrice()<0)
		                return -1;
		            else
		                return 1;
		        }
		    });
			break;
		}
		System.out.println("排序成功。");
	}
	
		
	public void delete() {
		//书号、书名
		Scanner in = new Scanner(System.in);
		System.out.println("请按照下面提示进行操作。\r\n"
				+ "返回上一界面 0\r\n"
				+ "按书号删除请按 1\r\n"
	       		+ "按书名删除请按 2\r\n"
	       		+ "");
		int i=in.nextInt();
		while (i<0 || i>2) {
            System.out.println("输入范围错误,请重新输入。");
            System.out.println("请按照下面提示进行操作。\r\n"
    				+ "返回上一界面 0\r\n"
    				+ "按书号删除请按 1\r\n"
    	       		+ "按书名删除请按 2\r\n"
    	       		+ "");
            i=in.nextInt();
        }
		boolean f=true;
		switch(i) {
			case 0: break;
			case 1:
				System.out.println("请输入要删除的书号:");
				Long bnumber=in.nextLong();
				for(int j=0;j2) {
            System.out.println("输入范围错误,请重新输入。");
            System.out.println("请按照下面提示进行操作。\r\n"
    				+ "返回上一界面 0\r\n"
    				+ "按书号更改请按 1\r\n"
    	       		+ "按书名更改请按 2\r\n"
    	       		+ "");
            i=in.nextInt();
        }
		boolean f=true;
		switch(i) {
		case 0: break;
		case 1:
			System.out.println("请输入要更前的书号:");
			long s=in.nextLong();
			System.out.println("请输入要更改后的书号:");
			long n=in.nextLong();
			for(int j=0;j

没有看完异常处理,所以就只在写了书上的io流的异常处理。

init()        将文件 图书借阅表.txt 里的数据导入booklist 中。

add()       添加图书信息到booklist 中。

boolean bnPd(long bnumber)        根据书号判断booklist中是否有且该书馆存数量是否大于一

如果存在,则该书馆存数量减一。完成借书功能。

Book bReturn(long bnumber)        根据书号在booklist中查询并返回该图书信息

void guiHuan(long bnumber)        根据书号在booklist中查询并使该书的馆存数量加一

完成还书功能。

void search()        根据    书号、书名、作者、出版社、出版日期、存馆数量、定价   查询

void sort()          根据    书号、书名、作者、出版社、出版日期、存馆数量、定价   排序(如果是中文,根据拼音排序,好像不支持鑫这种字(忘了叫啥来)。

void delete()        按书号或书名进行图书的删除。(这里好像写错了,应该是按照书号或者书名查找该书,然后进行删除该书。

void revise()        按书号或书名进行图书的修改。(和上面一样)

void stor()        将booklist里的信息存在图书信息表.txt中

ReadList 类 

package liberal;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.text.Collator;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.Locale;
import java.util.Scanner;

public class ReaderList implements Operate{
	private LinkedList readerlist=new LinkedList();

	public void init() {
		File file=new File("src\\liberal\\读者信息表.txt");
		if(file.exists()) {
			if(file.length()==0) {
				System.out.println("暂无读者信息。\n请先输读者信息。");
			}
			else {
				try {
					FileReader fr=new FileReader(file);
					BufferedReader bufr=new BufferedReader(fr);
					String s=null;
					int sno=0;
					String sname=null;
					String collage=null;
					String major_class=null;
					long i=1;
					while((s=bufr.readLine())!=null) {
						//学号、姓名、学院、专业班级
						if(i%4==1)
							//将字符型转成int
							sno=Integer.parseInt(s);
						if(i%4==2)
							sname=s;
						if(i%4==3)
							collage=s;
						if(i%4==0) {
							major_class=s;
							readerlist.add(new Reader(sno,sname,collage,major_class));
						}
						i++;
					}
					bufr.close();
					fr.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		else {
			try {
				file.createNewFile();
			} catch(Exception e) {
				e.printStackTrace();		
			}
		}
	}
			
	public void add() {
		Scanner in = new Scanner(System.in);		
		System.out.println("请输入要添加的学号:");
		int sno=in.nextInt();
		String s=in.nextLine();
		System.out.println("请输入要添加的姓名:");
		String sname=in.nextLine();
		System.out.println("请输入要添加的学院:");
		String collage=in.nextLine();
		System.out.println("请输入要添加的专业班级:");
		String major_class=in.nextLine();
		Reader reader=new Reader(sno,sname,collage,major_class);
		readerlist.add(reader);
		System.out.println("添加成功。");
	}
	
	public Reader rReturn(int sno) {
		for(int j=0;j4) {
            System.out.println("输入范围错误,请重新输入。");
            System.out.println("请按照下面提示进行操作。\r\n"
    				+ "返回上一界面 0\r\n"
    				+ "按学号查询请按 1\r\n"
    	       		+ "按姓名查询请按 2\r\n"
    	       		+ "按学院查询请按 3\r\n"
    	       		+ "按出专业年级查询请按 4\r\n"
    	       		+ "");
            i=in.nextInt();
        }
		boolean f=true;
		switch(i) {
			case 1:
				System.out.println("请输入要查询的学号:");
				int snumber=in.nextInt();
				for(int j=0;j4) {
            System.out.println("输入范围错误,请重新输入。");
            System.out.println("请按照下面提示进行操作。\r\n"
    				+ "返回上一界面 0\r\n"
    				+ "按学号排序请按 1\r\n"
    	       		+ "按姓名排序请按 2\r\n"
    	       		+ "按学院排序请按 3\r\n"
    	       		+ "按出专业年级排序请按 4\r\n"
    	       		+ "");
            i=in.nextInt();
        }
		switch(i) {
		case 1:
			Collections.sort(readerlist, new Comparator() {	
				@Override
		        public int compare(Reader o1, Reader o2) {
					if(o1.getSno()-o2.getSno()<0)
						return -1;
		            else
		                return 1;
		        }
			});
			break;
		case 2:
			Collections.sort(readerlist, new Comparator() {	
				@Override
		        public int compare(Reader o1, Reader o2) {
					return Collator.getInstance(Locale.CHINA).compare(o1.getSname(), o2.getSname());
		        }
		    });
			break;
		case 3:
			Collections.sort(readerlist, new Comparator() {		
				@Override
		        public int compare(Reader o1, Reader o2) {
					return Collator.getInstance(Locale.CHINA).compare(o1.getCollage(), o2.getCollage());
		        }
		    });
			break;
		case 4:
			Collections.sort(readerlist, new Comparator() {	
				@Override
		        public int compare(Reader o1, Reader o2) {
					return Collator.getInstance(Locale.CHINA).compare(o1.getMajor_class(), o2.getMajor_class());
		        }
		    });
			break;
		}
		System.out.println("排序成功。");
	}
	
	public void delete() {
		Scanner in = new Scanner(System.in);
		System.out.println("请输入要删除读者的学号:\n");
		int s=in.nextInt();
		System.out.println("请输入要删除读者的姓名:\n");
		String s1=in.nextLine();
		String n=in.nextLine();
		boolean f=true;
		for(int j=0;j2) {
            System.out.println("输入范围错误,请重新输入。");
            System.out.println("请按照下面提示进行操作。\r\n"
    				+ "返回上一界面 0\r\n"
    				+ "修改读者学院信息请按 1\r\n"
    	       		+ "修改读者专业班级信息请按 2\r\n"
    	       		+ "");
            i=in.nextInt();
        }
		boolean f=true;
		switch(i) {
		case 1:
			System.out.println("请输入要修改读者的学号:\n");
			int s=in.nextInt();
			System.out.println("请输入要修改读者的姓名:\n");
			String s2=in.nextLine();
			String n=in.nextLine();
			System.out.println("请输入要修改读者的学院:\n");
			String g=in.nextLine();
			for(int j=0;j

和booklit的差不多

Infor类

package liberal;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

public class Infor {
	private Book book;
	private Reader reader;
	private final String bordate;
	private final String stadate;	//默认借阅日期为60天
	private String retdate;
	
	Infor(Infor _infor){
		this.book=_infor.book;
		this.reader=_infor.reader;
		this.bordate=_infor.bordate;
		this.stadate=_infor.stadate;
		this.retdate=_infor.retdate;
	}
	
	Infor(Book book,Reader reader){
		this.book=book;
		this.reader=reader;
		Date date1=new Date();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒",Locale.SIMPLIFIED_CHINESE);
		this.bordate=sdf.format(date1);
		//https://www.csdn.net/tags/Mtjagg3sMzUyMDgtYmxvZwO0O0OO0O0O.html
		Calendar calendar = new GregorianCalendar(); 
		calendar.setTime(date1); 
		calendar.add(Calendar.DATE,60); 
		date1=calendar.getTime(); 
		this.stadate=sdf.format(date1);
		this.retdate="未还";
	}
	
	Infor(Book book,Reader reader,String bordate,String stadate){
		this.book=book;
		this.reader=reader;
		this.bordate=bordate;
		this.stadate=stadate;
		this.retdate="未还";
	}
	
	Infor(long bnumber,String bname,String author,String publisher,
			String date,long snumber,double price,int sno,
			String sname,String collage,String major_class){
		this.book=new Book(bnumber,bname,author,publisher,date,snumber,price);
		this.reader=new Reader(sno,sname,collage,major_class);
		Date date1=new Date();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒",Locale.SIMPLIFIED_CHINESE);
		this.bordate=sdf.format(date1);
		//https://www.csdn.net/tags/Mtjagg3sMzUyMDgtYmxvZwO0O0OO0O0O.html
		Calendar calendar = new GregorianCalendar(); 
		calendar.setTime(date1); 
		calendar.add(Calendar.DATE,60); 
		date1=calendar.getTime(); 
		this.stadate=sdf.format(date1);
		this.retdate="未还";
	}
	
	Infor(long bnumber,String bname,String author,String publisher,
			String date,long snumber,double price,int sno,
			String sname,String collage,String major_class,String bordate,String stadate,String retdate){
		this.book=new Book(bnumber,bname,author,publisher,date,snumber,price);
		this.reader=new Reader(sno,sname,collage,major_class);
		this.bordate=bordate;
		this.stadate=stadate;
		this.retdate=retdate;
	}
	
	public Book getBook() {
		return book;
	}
	
	public Reader getReader() {
		return reader;
	}
	
	public String getBordate() {
		return bordate;
	}
	
	public String getStadate() {
		return stadate;
	}
	
	public String getRetdate() {
		return retdate;
	}
	
	public void setRetdate(String retdate) {
		this.retdate=retdate;
	}
	
	public void show() {
		book.show();
		reader.show();
		System.out.println("借阅日期:\t"+bordate+"\r\n"
        		+ "应还日期:\t"+stadate+"\r\n"
        		+ "归还日期:\t"+retdate+"\r\n"
        		+ "");
	}
}

有几个构造方法是多余的,但没有删。

借阅日期 用的Date SimpleDateFormat        获得当前的时间并设置格式为 年 月 日 分 秒

应还日期 设置为借阅日期后的60天

归还日期 为归还时,为“未还”

InforList类

package liberal;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.LinkedList;
import java.util.Scanner;

public class InforList {
	private LinkedList inforlist=new LinkedList();
	
	public void init() {
		File file=new File("src\\liberal\\图书借阅表.txt");
		//文件是否存在,如果不存在则创建该文件
		if(file.exists()) {
			//文件是否空
			if(file.length()==0) {
				System.out.println("暂无借阅信息。\n请先输借阅信息。");
			}
			else {
				try {
					FileReader fr=new FileReader(file);
					BufferedReader bufr=new BufferedReader(fr);
					String s=null;
					long bnumber=0;
					String bname=null;
					String author=null;
					String publisher=null;
					String date=null;
					long snumber=0;
					double price=0.0;
					int sno=0;
					String sname=null;
					String collage=null;
					String major_class=null;
					String bordate=null;
					String stadate=null;	
					String retdate=null;
					long i=1;
					while((s=bufr.readLine())!=null) {
						//书号、书名、作者、出版社、出版日期、存馆数量、定价
						if(i%14==1)
							bnumber=Long.parseLong(s);
						if(i%14==2)
							bname=s;
						if(i%14==3)
							author=s;
						if(i%14==4)
							publisher=s;
						if(i%14==5)
							date=s;
						if(i%14==6)
							snumber=Long.parseLong(s);
						if(i%14==7)
							price=Double.parseDouble(s);
						if(i%14==8)
							sno=Integer.parseInt(s);
						if(i%14==9)
							sname=s;
						if(i%14==10)
							collage=s;
						if(i%14==11) 
							major_class=s;
						if(i%14==12)
							bordate=s;
						if(i%14==13)
							stadate=s;
						if(i%14==0) {
							retdate=s;
							Infor infor=new Infor(bnumber,bname,author,publisher,date,snumber,
									price,sno,sname,collage,major_class,bordate,stadate,retdate);
							inforlist.add(infor);
						}	
						i++;
					}
					bufr.close();
					fr.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		else {
			try {
				file.createNewFile();
			} catch(Exception e) {
				e.printStackTrace();		
			}
		}
	}	
	
	public void add(Infor infor) {
		inforlist.add(infor);
	}

	public Infor inReturn(long bnumber) {
		for(int j=0;j11) {
            System.out.println("输入范围错误,请重新输入。");
            System.out.println("请按照下面提示进行操作。\r\n"
    				+ "返回上一界面 0\r\n"
    				+ "按书号查询请按 1\r\n"
    	       		+ "按书名查询请按 2\r\n"
    	       		+ "按作者查询请按 3\r\n"
    	       		+ "按出版社查询请按 4\r\n"
    	       		+ "按出版日期查询请按 5\r\n"
    	       		+ "按馆存数量查询请按 6\r\n"
    	       		+ "按价格查询请按 7\r\n"
    	       		+ "按学号查询请按 8\r\n"
    	       		+ "按姓名查询请按 9\r\n"
    	       		+ "按学院查询请按 10\r\n"
    	       		+ "按出专业年级查询请按 11\r\n"
    	       		+ "");
            i=in.nextInt();
        }
		boolean f=true;
		switch(i) {
			case 1:
				System.out.println("请输入要查询的书号:");
				long bnumber=in.nextLong();
				for(int j=0;j

和前面一致

main

package liberal;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Scanner;

public class main {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		BookList booklist=new BookList();
		ReaderList readerlist=new ReaderList();
		InforList inforlist=new InforList();
		/*
	 	9.图书借阅:输入学号+书号,如果该书图书信息表中的存馆数量大于0,则可以借出,借出相应数量后修改图书信息表中的存馆数量,在图书借阅表添加该同学的借阅。
		10.图书归还:输入学号+书号,修改图书信息表中的存馆数量,在图书借阅表中记录该同学的归还时间。
		 */
		System.out.println("-------------------------------图书管理系统-------------------------------");
		System.out.println("欢迎使用,请按照下面提示进行操作。");
		booklist.init();
		readerlist.init();
		inforlist.init();
		Scanner in = new Scanner(System.in);
		boolean pd = true;
		while(pd) {
			System.out.println("退出系统请按 0\r\n"//
					+ "图书信息添加请按 1\r\n"
					+ "图书信息查询请按 2\r\n"
					+ "图书信息排序请按 3\r\n"
					+ "图书信息修改请按 4\r\n"
					+ "图书信息删除请按 5\r\n"
					+ "读者信息添加请按 6\r\n"
					+ "读者信息查询请按 7\r\n"
					+ "读者信息排序请按 8\r\n"
					+ "读者信息修改请按 9\r\n"
					+ "读者信息删除请按 10\r\n"
					+ "图书借阅信息查询请按 11\r\n"
					+ "图书借阅请按 12\r\n"
					+ "图书归还请按 13\r\n"
					+ "");		
			int i = in.nextInt();
			while(i<0 || i>13) {
				System.out.println("输入范围错误,请重新输入。");
				i = in.nextInt();
			}
			switch(i) {
			case 0: pd=false;System.out.println("您已成功退出程序。感谢使用。");	break;
			case 1:booklist.add(); 		break;
			case 2:booklist.search();	break;
			case 3:booklist.sort();		break;
			case 4:booklist.revise();   break;
			case 5:booklist.delete();	break;
			case 6:readerlist.add(); 	break;
        	case 7:readerlist.search();	break;
        	case 8:readerlist.sort();	break;
        	case 9:readerlist.revise(); break;
        	case 10:readerlist.delete();break;
        	case 11:inforlist.search(); break;
        	case 12:
        		System.out.println("请输入借阅人的学号:");
        		int sno=in.nextInt();
        		System.out.println("请输入借阅书籍的书号:");
        		long bnumber=in.nextLong();
        		//根据书号判断书是否存在并馆存大于等于1,如果存在则借出并馆存-1
        		if(booklist.bnPd(bnumber)) {
        			//根据学号判断是否有该读者
        			if(readerlist.snPd(sno)) {
        				//根据书号返回一个 书 的信息,和根据学号返回一个读者的信息,形成一个借阅信息。
        				Infor infor=new Infor(booklist.bReturn(bnumber),readerlist.rReturn(sno));
        				inforlist.add(infor);
        				System.out.println("已成功借出。");
        			}
        			else
        				System.out.println("馆中暂无该读者。");
        		}
        		else
        			System.out.println("馆中暂无该图书。");
        		break;
        	case 13:
        		System.out.println("请输入借阅人的学号:");
        		int sno1=in.nextInt();
        		System.out.println("请输入借阅书籍的书号:");
        		long bnumber1=in.nextLong();
        		//根据书号判断是否有该借阅信息
        		if(inforlist.inPd(bnumber1)) {
        			//根据书号 返回该借阅信息
        			//Infor infor =inforlist.inReturn(bnumber1);
        			booklist.guiHuan(bnumber1);
        			
        			Infor infor=new Infor(inforlist.inReturn(bnumber1)); //直接复制还要该馆存数
        			Infor infor1=new Infor(booklist.bReturn(bnumber1),readerlist.rReturn(sno1),infor.getBordate(),infor.getStadate());
        			Date date1=new Date();
        			SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒",Locale.SIMPLIFIED_CHINESE);
        			String bordate=sdf.format(date1);
        			//将归还时间设为此时此刻
        			infor1.setRetdate(bordate);
        			inforlist.add(infor1);
        		}
        		else
        			System.out.println("暂无该借阅信息。");
        		break;
			}
		}
		booklist.stor();
		readerlist.stor();
		inforlist.stor();
	}
}

功能实现

9.图书借阅:输入学号+书号,如果该书图书信息表中的存馆数量大于0,则可以借出,借出相应数量后修改图书信息表中的存馆数量,在图书借阅表添加该同学的借阅。

输入 学号+书号

判断是否有该书和该读者

馆存数减一

用该书和该读者信息构造该借阅信息

存入list

10.图书归还:输入学号+书号,修改图书信息表中的存馆数量,在图书借阅表中记录该同学的归还时间

输入 学号+书号

查看是否有该借书信息

使该书馆存数加一

用该书和该读者还有该借书的借书时间,应还时间构造 信息类

设置该归还时间为当前时间

存入list

其余功能都可以直接用函数完成。

改进

有了返回上一界面的功能

不必每次操作都频繁的打开和关闭文件

错误

如果在学号等数据输入字符串会程序直接中断报错

虽然有判断,但在返回书本信息中还是用了返回null

图书借阅 和 图书归还 功能不太会写。

总结

方法名尽量见名知义

遇到不会的问题,要耐下心来去解决,多想想老师讲的。想想类之间的关系,慢慢梳理。

遇到不会解决的功能不要盲目添加方法和变量,那样有可能会越添加越乱。

你可能感兴趣的:(青少年编程,java)