- /**
- *当前为了测试方便,将超期时间设计为20秒;
- * 2013年7月14日下午6:26:50
- * BookManager.java
- * Administrator
- * 1、假设书库只有一本书,书名Java,其他信息自设
- 2、这个系统具有借书和还书的功能
- 3、当借书时,要记录住借书人的姓名,借书时间,借书次数(每人只能借3次,且有书没还之前不能借书)
- 4、设定一个还书期限,当还书时,显示借了多久,如果超过期限,提示要借书人交一定的超限金额。
- 5、借书人先输入自己的名字,如果不存在,提示他是否需要注册,如果不注册就不能借书。
- 注册时,删除输入的用户名中的空格,并存储相关信息(如有没有借书,借书时间,借书次数)。
- 6、根据用户从键盘输入的进行相应操作
- (可能用到知识点:面向对象,IO流操作,集合、配置文件,时间类,接口等)
- */
- package com.itheima.test;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.OutputStream;
- import java.io.RandomAccessFile;
- import java.io.Serializable;
- import java.text.DateFormat;
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import java.util.Date;
- /**
- * @author Administrator
- * @time 2013年7月14日下午6:26:50
- */
- public class BookManager {
- //定义存储读者信息和书籍信息的位置
- private File readersDir=new File("D:/temp/BookManager/Readers");
- private File booksDir=new File("D:/temp/BookManager/Books");
- private void init() throws Exception{
- //初始化,若没有文件夹,就创建,若得不到Java的书籍信息,就创建一个份java的书籍信息
- if(!readersDir.exists())
- readersDir.mkdirs();
- if(!booksDir.exists())
- booksDir.mkdirs();
- Book book=(Book)getResource("Java", booksDir);
- if(book==null){
- book=new Book("Java", "JavaWriter");
- writeResource("Java",booksDir,book);
- }
- }
- public BookManager()throws Exception{
- //初始化
- init();
- //程序开始了
- begin();
-
- }
- public void begin()throws Exception{
- System.out.println("用户名中的空格将会自动清除!");
- System.out.println("请出入用户名: ");
- String name=ask();
- String order="";
- //读取用户信息,若用户为空,就提示注册用户
- Reader reader=(Reader) getResource(name, readersDir);
- if(reader==null)
- {
- System.out.println("该用户名不存在,是否注册?不注册将无法使用本系统功能,输入1注册,输入其他退出系统");
- order=ask();
- if(order.equals("1"))
- {
- reader=new Reader(name);
- writeResource(name, readersDir, reader);
- }
- else{
- System.exit(0);
- }
- }
-
- while(true){
- System.out.println("您好,"+reader.getName());
- Book book=reader.getBook();
- //先判断是否有未还的书籍,若有,则提示要还书
- if(book!=null){
- System.out.println("当前已经借一本书,书名为"+book.getName()+",输入1还书,输入over退出,不还书将无法借书,输入其他无效");
- order=ask();
- if(order.equals("1"))
- {
- //还书完成后,存储信息
- reader.returnbook(book);
- writeResource(name, readersDir, reader);
- writeResource(book.getName(), booksDir, book);
- }
- }//如果读者已经接了三本书了,就不让他使用系统了
- else if(reader.getTimes()>2)
- {
- System.out.println("你已经借过三次书了,且没有书未还,业务功能已经全部完成,系统退出");
- System.exit(0);
- }
- else{
- System.out.println("当前未借书,已经借书"+reader.getTimes()+"次,还可以借书"+(3-reader.getTimes())+"次,输入1借书,输入over退出,输入其他无效");
- order=ask();
- if(order.equals("1"))
- {
- System.out.println("请输入书名,书名中空格将被清除");
- order=ask();
- book=(Book) getResource(order, booksDir);
- //判断是存在书籍
- if(book==null)
- {
- System.out.println("书库中没有名为"+order+"的书");
- }else{
- //书籍已经被借走了
- if(book.getReader()!=null)
- {
- System.out.println("该书已经被借走,您可以选择其他书籍借阅");
- }
- else{
- //书籍未被借走
- System.out.println(book.toString());
- System.out.println("是否借书?输入1确认,输入over退出,输入其他无效");
- order=ask();
- if(order.equals("1")){
- //存储信息
- reader.borrow(book);
- writeResource(name, readersDir, reader);
- writeResource(book.getName(), booksDir, book);
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒");
-
- System.out.println("借书成功,借书时间为"+sdf.format(new Date(reader.getBorrowTime())));
- }
- }
- }
- }
- }
- }
- }
- public Object getResource(String name ,File file) throws Exception{
- //读取一个资源的信息,比如读者的信息,比如书籍的信息
- File objectFile=new File(file, name+".dat");
- if(objectFile.exists())
- {
- InputStream is=new FileInputStream(objectFile);
- ObjectInputStream ois=new ObjectInputStream(is);
- Object object =(Object)ois.readObject();
- ois.close();
- is.close();
- return object;
- }
- return null;
- }
- public void writeResource(String name,File file,Object obj) throws Exception{
- //存储读者书籍信息
- File objectFile=new File(file, name+".dat");
- OutputStream ops=new FileOutputStream(objectFile);
- ObjectOutputStream oos=new ObjectOutputStream(ops);
- oos.writeObject(obj);
- oos.close();
- ops.close();
- }
- BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
- public String ask() throws Exception{
- //从键盘获取用户输入,并且去除空格,判断是否为over
- String message=br.readLine();
- message=message.replaceAll(" ", "");
- if(message.equals("over"))
- {
- System.out.println("退出系统,再见");
- System.exit(0);
- }
- return message;
- }
- public static void main(String[] args) throws Exception {
- new BookManager();
- }
- }
- class Book implements Serializable{
- private String name;
- private String writer;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getWriter() {
- return writer;
- }
- public void setWriter(String writer) {
- this.writer = writer;
- }
- public Reader getReader() {
- return reader;
- }
- public void setReader(Reader reader) {
- this.reader = reader;
- }
- public Book(String name,String writer){
- this.name=name;
- this.writer=writer;
- }
- private Reader reader;
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- @Override
- public String toString() {
- //输出书籍信息
- return "书名 :"+name+" 作者:"+writer;
- }
- }
- class Reader implements Serializable{
- private String name;
- private long borrowTime;
- private int times=0;
- private Book book;
- public String getName() {
- return name;
- }
- /**
- @function:
- * @data:2013-7-16下午2:57:06
- * @author Administrator
- * @param book
- */
- public void returnbook(Book book) {
- //还书操作,并且计算是否超期,这里为了便于演示,超期时间设置为20秒;
- this.book=null;
- book.setReader(null);
- long time=(System.currentTimeMillis()-this.borrowTime)/1000;
- long extendstime=(time-20)>0?time-20:0;
- Date date=new Date(borrowTime);
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒");
- System.out.println("借书时间"+sdf.format(date)+",本次借书"+time+"秒,超期"+extendstime+"秒,应付"+extendstime*0.01+"元");
- }
- public void setName(String name) {
- this.name = name;
- }
- public long getBorrowTime() {
- return borrowTime;
- }
- public void setBorrowTime(long borrowTime) {
- this.borrowTime = borrowTime;
- }
- public int getTimes() {
- return times;
- }
- public void setTimes(int times) {
- this.times = times;
- }
- public Book getBook() {
- return book;
- }
- public void setBook(Book book) {
- this.book = book;
- }
- public Reader(String name){
- this.name=name;
- }
- public void borrow(Book book){
- //借书操作
- this.book=book;
- book.setReader(this);
- times++;
- this.borrowTime=System.currentTimeMillis();
- }
- }
复制代码 啥时候能加分呢? |