黑马程序员技术交流社区
标题:
======第四周答题活动======
[打印本页]
作者:
神之梦
时间:
2013-7-14 14:49
标题:
======第四周答题活动======
本帖最后由 神之梦 于 2013-7-31 18:15 编辑
活动说明:
1、加分根据你用到的知识点和考虑是否全面来定!(最高5分)
2、答题尽量考虑全面,注释到位。
3、代码放在代码块中,不接收附件。
4、此次活动截止时间待定。
题目:
写一个简单的图书管理系统
要求:
1、假设书库只有一本书,书名Java,其他信息自设
2、这个系统具有借书和还书的功能
3、当借书时,要记录住借书人的姓名,借书时间,借书次数(每人只能借3次,且有书没还之前不能借书)
4、设定一个还书期限,当还书时,显示借了多久,如果超过期限,提示要借书人交一定的超限金额。
5、借书人先输入自己的名字,如果不存在,提示他是否需要注册,如果不注册就不能借书。
注册时,删除输入的用户名中的空格,并存储相关信息(如有没有借书,借书时间,借书次数)。
6、根据用户从键盘输入的进行相应操作
(可能用到知识点:面向对象,IO流操作,集合、配置文件,时间类,接口等)
示例:
系统显示
:请输入你的名字:
用户输入
:黑马程序员(判断是否存在,不存在则提示注册)
显示
:借书还是还书?
用户输入
:借书
显示:
请输入书名:(因为只有一本书,如果书名不匹配则提示没有)
用户输入
:Java
显示
:Java这本书的书名,作者,出版时间等信息,然后询问是否要借?
用户输入
:是(判断借书次数是否有了3次,如果有了则提示不能借)
显示
:借书成功(并把借书人的名字,借书时间,借书次数存储)
(以上仅作示例不是标准,提示语句方面可以自己发挥,如:借书请输入1,还书请输入2这样的提示)
注意:
1、
期间:如果用户想退出,只要输入over即可退出
2、还书跟上示例类似,但是如果没有借过书,就不能还书。还书时要判断借了多久,并显示。
作者:
chslzj
时间:
2013-7-14 17:12
先顶顶,再做题
作者:
汪平乐
时间:
2013-7-15 12:33
活动的答案在哪里会公布?
作者:
牛海亮
时间:
2013-7-15 22:04
本帖最后由 牛海亮 于 2013-7-15 23:55 编辑
本程序共设计了5个类:
1.BookManagementSystem 程序的入口
2.Login 用于实现用户登录
3.Register 注册
4.Library 实现 用户借书和还书 功能。
该类设计的主要方法如下:
loadUserList() :将userList.txt中的信息封装成User对象后存储到集合userList中
saveToTxt():将userList集合中的对象 按照一定的格式存储到userList.txt中
acceptReturn(): 还书 还书超限一月罚款1元,限期为3个月,超过一年罚款10元。
lend():借书 只需借3次,查过3次就不让借。
5.User类的 三个属性userName :用户名 time:借书时间 count :借书的次数。
软件使用方法:将所有类放到同一工程的同一包中。在workspace对应的工程下面手动创建三个.txt文件分别为user.txt userList.txt book.txt 在book.txt中存入JAVA.剩下的按照系统提示操作即可。
代码如下
1.BookManagementSystem
package ts;
import java.io.BufferedReader;
import java.io.InputStreamReader;
/*
*
*
* */
//系统入口
public class BookManagementSystem
{
public static void main(String[] args)
{
while(true)
{
System.out.println("1.登录 2.注册 3.退出");
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
try
{
String num = bufr.readLine();
int number = new Integer(num);
if( number == 1)
{
System.out.println("输入用户名:");
String userName = bufr.readLine();
Login login = new Login();//定义一个登录类,管理用户登录后的操作
login.receive(userName);//该操作接收到输入的用户名后对其判断
}
else if(number == 2)
{
System.out.println("输入要注册的用户名:");
String registerName = bufr.readLine();
Register register = new Register();//获取用户名并将其写入到user.txt中
register.receive(registerName);//获取用户名并将其写入到user.txt中
}
else if(number == 3)
{
System.out.println("退出成功");
break;
}
else
System.out.println("输入有误,请按需求输入 1 2 3");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
复制代码
由于字数限制,分2次上传。
作者:
牛海亮
时间:
2013-7-15 23:21
本帖最后由 牛海亮 于 2013-7-16 20:08 编辑
2.Login
package ts;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
//登录
public class Login {
public static void receive(String userName)
{
try
{
BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));
boolean flag = false;
String line = null;
//遍历user.txt,看用户是否存在
while((line = bufr.readLine())!=null)
{
if(line.equals(userName))
{
flag = true;
break;
}
}
bufr.close();
if(flag)
{
while(true)
{
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
System.out.println(userName+",已登录");
System.out.println("请选择:1.借书 2.还书 3.退出");
String num = br.readLine();
int number = new Integer(num);
if(number == 1)
{
System.out.println("开始借书");
Library library = new Library();
library.lend(userName);//开始在图书馆借书
continue;
}
else if(number == 2)
{
System.out.println(userName+"开始还书");
Library library = new Library();
library.acceptReturn(userName);//开始在图书馆借书
continue;
}
else if(number == 3)
{
System.out.println("退出成功");
break;
}
else
System.out.println("输入有误,请输入1 或者2 或者3");
break;
}
}
else
{
System.out.println(userName+",用户名不存在,请注册");
return;
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
复制代码
3.Register
package ts;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.*;
public class Register {
public void receive(String registerName) {
try
{
BufferedWriter bufw = new BufferedWriter(new FileWriter("user.txt",true));
bufw.append(registerName);
bufw.newLine();
bufw.flush();
bufw.close();
System.out.println("注册成功");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
复制代码
4.Library
package ts;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.io.*;
public class Library {
public static ArrayList userList = new ArrayList();
public ArrayList getUserList()
{
return userList;
}
//将userList.txt中的信息保存至集合userList中
public static void loadUserList()
{
try
{
BufferedReader bufr = new BufferedReader(new FileReader("userList.txt"));
String line = null;
do
{
User user = new User();
for(int i = 0 ;i<3 ; i++)
{
if( i == 0)
{
line = bufr.readLine();
user.setUserName(line);
}
else if(i == 1)
{
line = bufr.readLine();
user.setTime(line);
}
else if(i == 2)
{
line = bufr.readLine();
//System.out.println(line);
if(line == null)
return;
Integer c = new Integer(line);
user.setCount(c);
}
}
userList.add(user);
}while(line != null);
}
catch (Exception e)
{
e.printStackTrace();
}
}
//将userList中的信息存入userList.txt中
public static void saveToTxt(ArrayList userList) throws Exception
{
FileWriter fw = new FileWriter("userList.txt",false);
fw.write("");
fw.flush();
System.out.println("文件已经清空!");
fw.close();
if(userList.size() == 0)
{
System.out.println("没有要保存的信息");
return;
}
BufferedWriter bufw = new BufferedWriter(new FileWriter("userList.txt",true));
for(int i = 0 ;i<userList.size(); i++)
{
User user = (User) userList.get(i);
String line1 = user.getUserName();
String line2 = user.getTime();
Integer line3 = user.getCount();
String l3 = line3.toString();
bufw.write(line1);
bufw.newLine();
bufw.write(line2);
bufw.newLine();
bufw.write(l3);
bufw.newLine();
bufw.flush();
}
System.out.println("信息保存完毕!!");
bufw.close();
}
//还书
public static void acceptReturn(String userName)
{
try
{
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DATE);
loadUserList();
for(int i = 0 ; i<userList.size(); i++)
{
User user = (User) userList.get(i);
//该用户借过书才能还书
if(user.getUserName().equals(userName))
{
System.out.println("借书时间:"+user.getTime());
System.out.println("还书时间:"+year+"/"+month+"/"+day);
//显示借书的借了多久,将年和月截取出来,只计算月数
String time = user.getTime();
String [] ymd = time.split("/");
//超过3个月罚款5元
if(year == new Integer(ymd[0]))
{
int borrMonth = new Integer(ymd[1]);
int overMonth = month - borrMonth;
System.out.println("已经借书"+overMonth+"月");
if(overMonth > 3)
{
int m = overMonth - 3;
System.out.println("超限"+m+"月"+",罚款"+m*1+"元");
userList.remove(i);
saveToTxt(userList);
System.out.println("还书完毕!!");
}
else
{
System.out.println("按时还书了!!!");
userList.remove(i);
saveToTxt(userList);
System.out.println("还书完毕!!");
}
}
else
{
System.out.println("超过一年,罚款10元");
userList.remove(i);
saveToTxt(userList);
System.out.println("还书完毕!!");
}
}
else
{
System.out.println("您没有借书!!");
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
//登录后借书
public static void lend(String userName)
{
try
{
System.out.println("输入要借 的书名:");
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
String bookName = bufr.readLine();
boolean flag = searchBook(bookName);//看书是否存在
if(flag)
{
Library library = new Library();
library.yesOrNo(userName);//用户是否借书
}
else
System.out.println("该书不存在");
}
catch (Exception e)
{
e.printStackTrace();
}
}
//看该书是否存在
public static boolean searchBook(String bookName) throws Exception
{
BufferedReader br = new BufferedReader(new FileReader("book.txt"));
boolean flag = false;
String line = null;
//从文件中读取并
while((line = br.readLine())!=null)
{
if(line.equals(bookName))
{
flag = true;
break;
}
}
br.close();
return flag;
}
//借书
public static void yesOrNo(String userName)throws Exception
{
System.out.println("该书存在,是否要借?(是Y,不是N)");
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
String yesOrNo = bufr.readLine();
if(yesOrNo.equals("Y"))
{
System.out.println(userName);
userBorrow(userName);
}
else if(yesOrNo.equals("N"))
{
System.out.println("没有借该书");
}
else
System.out.println("输入有误,请按照提示输入");
}
public static void userBorrow(String userName) throws Exception
{
//将用户信息添加进去
Calendar c = Calendar.getInstance();
String time = c.get(Calendar.YEAR)+"/"+c.get(Calendar.MONTH)+"/"+c.get(Calendar.DATE);
System.out.println(time);
//遍历集合,看该用户是否借书了
boolean flag = false;
User userFlag = null;
loadUserList();
for(int i = 0 ; i<userList.size(); i++)
{
User user = (User) userList.get(i);
//该用户曾经借过书
if(user.getUserName().equals(userName))
{
flag = true;
userFlag = user;
}
}
if(flag)
{
if(userFlag.getCount()<3)
{
int count = userFlag.getCount()+1;
userFlag.setCount(count);
userFlag.setTime(time);
saveToTxt(userList);
userList.clear();
System.out.println("借书成功");
}
else
{
System.out.println("已经借3次,不能再借!!!");
}
}
//该用户没有借过书
else
{
System.out.println("没有借书,或者借书都已经归还");
User userNew = new User();
userNew.setTime(time);
userNew.setUserName(userName);
userNew.setCount(1);
userList.add(userNew);
saveToTxt(userList);
userList.clear();
System.out.println("借书成功!!!");
}
}
}
复制代码
5.User
package ts;
public class User {
private String userName;
private String time;
private int count;
User()
{
}
User(String userName, String time, int count)
{
this.userName = userName;
this.time = time;
this.count = count;
}
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public String getTime()
{
return time;
}
public void setTime(String time )
{
this.time = time;
}
public int getCount()
{
return count;
}
public void setCount(int count)
{
this.count = count;
}
}
复制代码
作者:
汪平乐
时间:
2013-7-16 09:08
汪平乐 发表于 2013-7-15 12:33
活动的答案在哪里会公布?
是每周的,第4周答案会在哪里公布?
作者:
chslzj
时间:
2013-7-16 16:14
/**
*当前为了测试方便,将超期时间设计为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();
}
}
复制代码
啥时候能加分呢?
作者:
牛海亮
时间:
2013-7-18 00:20
本帖最后由 牛海亮 于 2013-7-18 00:37 编辑
本次修改实现:1.用户只能借书三次: 通过判断类的count属性来识别借书次数 2.有书未还不能借书: 在类User中又添加了一个属性borrowOrNot,即是否借书未还,0为已还,1为未还,通过判断此属性的值确定是否 有书未还。 除Register类外其他类均有修改。
代码如下:
1.BookManagementSystem
package ts;
import java.io.BufferedReader;
import java.io.InputStreamReader;
//系统入口
public class BookManagementSystem
{
public static void main(String[] args)
{
while(true)
{
System.out.println("1.登录 2.注册 3.退出");
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
try
{
String num = bufr.readLine();
if( num.equals("1"))
{
System.out.println("输入用户名:");
String userName = bufr.readLine();
Login login = new Login();//定义一个登录类,管理用户登录后的操作
login.receive(userName);//该操作接收到输入的用户名后对其判断
}
else if(num.equals("2"))
{
System.out.println("输入要注册的用户名:");
String registerName = bufr.readLine();
Register register = new Register();//获取用户名并将其写入到user.txt中
register.receive(registerName);//获取用户名并将其写入到user.txt中
}
else if(num.equals("3"))
{
System.out.println("退出成功");
break;
}
else
System.out.println("输入有误,请按需求输入 1 2 3");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
复制代码
作者:
牛海亮
时间:
2013-7-18 00:21
2.Login
package ts;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
//登录
public class Login {
public static void receive(String userName)
{
try
{
BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));
boolean flag = false;
String line = null;
//遍历user.txt,看用户是否存在
while((line = bufr.readLine())!=null)
{
if(line.equals(userName))
{
flag = true;
break;
}
}
bufr.close();
if(flag)
{
while(true)
{
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
System.out.println(userName+",已登录");
System.out.println("请选择:1.借书 2.还书 3.退出");
String num = br.readLine();
if(num.equals("1"))
{
System.out.println("开始借书");
Library library = new Library();
library.lend(userName);//开始在图书馆借书
continue;
}
else if(num.equals("2"))
{
System.out.println(userName+"开始还书");
Library library = new Library();
library.acceptReturn(userName);//开始在图书馆借书
continue;
}
else if(num.equals("3"))
{
System.out.println("退出成功");
break;
}
else
{
System.out.println("输入有误,请输入1 或者2 或者3");
break;
}
}
}
else
{
System.out.println(userName+",用户名不存在,请注册");
return;
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
复制代码
作者:
牛海亮
时间:
2013-7-18 00:31
package ts;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.io.*;
public class Library {
public static ArrayList userList = new ArrayList();
public ArrayList getUserList()
{
return userList;
}
public static void loadUserList()
{
try
{
BufferedReader bufr = new BufferedReader(new FileReader("userList.txt"));
String line = null;
do
{
User user = new User();
for(int i = 0 ;i<4 ; i++)
{
if( i == 0)
{
line = bufr.readLine();
user.setUserName(line);
}
else if(i == 1)
{
line = bufr.readLine();
user.setTime(line);
}
else if(i == 2)
{
line = bufr.readLine();
if(line == null)
return;
Integer c = new Integer(line);
user.setCount(c);
}
else if(i == 3)
{
line = bufr.readLine();
if(line.equals("0"))
{
user.setBorrowOrNot(0);
}
else if(line.equals("1"))
{
user.setBorrowOrNot(1);
}
}
}
userList.add(user);
}while(line != null);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void saveToTxt(ArrayList userList) throws Exception
{
FileWriter fw = new FileWriter("userList.txt",false);
fw.write("");
fw.flush();
System.out.println("文件已经清空!");
fw.close();
if(userList.size() == 0)
{
System.out.println("没有要保存的信息");
return;
}
BufferedWriter bufw = new BufferedWriter(new FileWriter("userList.txt",true));
for(int i = 0 ;i<userList.size(); i++)
{
User user = (User) userList.get(i);
String line1 = user.getUserName();
String line2 = user.getTime();
Integer line3 = user.getCount();
String l3 = line3.toString();
Integer line4 = user.getBorrowOrNot();
String l4 = line4.toString();
bufw.write(line1);
bufw.newLine();
bufw.write(line2);
bufw.newLine();
bufw.write(l3);
bufw.newLine();
bufw.write(l4);
bufw.newLine();
bufw.flush();
}
System.out.println("信息保存完毕!!");
bufw.close();
}
public static void acceptReturn(String userName)
{
try
{
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DATE);
userList.clear();
loadUserList();
boolean flag = false;
for(int i = 0 ; i<userList.size(); i++)
{
User user = (User) userList.get(i);
System.out.println(user.getUserName());
if(user.getUserName().equals(userName))
{
flag = true;
if( user.getBorrowOrNot() == 1)//有书未还
{
System.out.println("借书时间:"+user.getTime());
System.out.println("还书时间:"+year+"/"+month+"/"+day);
String time = user.getTime();
String [] ymd = time.split("/");
if(year == new Integer(ymd[0]))
{
int borrMonth = new Integer(ymd[1]);
int overMonth = month - borrMonth;
System.out.println("已经借书"+overMonth+"月");
if(overMonth > 3)
{
int m = overMonth - 3;
System.out.println("超限"+m+"月"+",罚款"+m*1+"元");
User currUser = (User) userList.get(i);
currUser.setBorrowOrNot(0);
saveToTxt(userList);
userList.clear();
System.out.println("还书完毕!!");
break;
}
else
{
System.out.println("按时还书了!!!");
User currUser = (User) userList.get(i);
currUser.setBorrowOrNot(0);
saveToTxt(userList);
userList.clear();
System.out.println("还书完毕!!");
break;
}
}
else
{
System.out.println("超过一年,罚款10元");
User currUser = (User) userList.get(i);
currUser.setBorrowOrNot(0);//将是否借书标记为否
saveToTxt(userList);
userList.clear();
System.out.println("还书完毕!!");
break;
}
}
else if(user.getBorrowOrNot() == 0)
{
System.out.println("借书已还,无需再还!!!");
break;
}
}
}
if(!flag)
{
System.out.println("您从没有借过书!!!");
return;
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
//登录后借书
public static void lend(String userName)
{
try
{
if(judgeUserName(userName) == null)
{
System.out.println("输入要借 的书名:");
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
String bookName = bufr.readLine();
boolean flag = searchBook(bookName);
if(flag)
{
newUseryesOrNo(userName);
}
else
System.out.println("该书不存在");
}
else if(judgeUserName(userName) != null)
{
User user = judgeUserName(userName);
if(user.getBorrowOrNot() == 1)
{
System.out.println("有书未还,不能借书");
return;
}
else if(user.getBorrowOrNot() == 0)
{
if(user.getCount() >= 3)
{
System.out.println("借书次数超过3次,不能再借");
}
else //可以借书了
{
System.out.println("输入要借 的书名:");
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
String bookName = bufr.readLine();
boolean flag = searchBook(bookName);//看书是否存在
if(flag)
{
oldUseryesOrNo(userName);//用户是否借书
}
else
System.out.println("该书不存在");
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void oldUserBorrow(String userName)
{
userList.clear();
loadUserList();
User user = null;
Calendar c = Calendar.getInstance();
String time = c.get(Calendar.YEAR)+"/"+c.get(Calendar.MONTH)+"/"+c.get(Calendar.DATE);
for(int i = 0; i<userList.size(); i++)
{
user = (User) userList.get(i);
if(user.getUserName().equals(userName))
{
user.setTime(time);
user.setBorrowOrNot(1);//改为1表示借书未还
user.setCount(user.getCount()+1);
try
{
saveToTxt(userList);
userList.clear();
System.out.println("借书成功");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
//用户是否曾经借过书
public static User judgeUserName(String userName)
{
User user = null;
userList.clear();
loadUserList();
for(int i = 0; i<userList.size(); i++)
{
user = (User) userList.get(i);
if(user.getUserName().equals(userName))
{
return user;
}
}
return null;
}
//看该书是否存在
public static boolean searchBook(String bookName) throws Exception
{
BufferedReader br = new BufferedReader(new FileReader("book.txt"));
boolean flag = false;
String line = null;
//从文件中读取并
while((line = br.readLine())!=null)
{
if(line.equals(bookName))
{
flag = true;
break;
}
}
br.close();
return flag;
}
//借书
public static void newUseryesOrNo(String userName)throws Exception
{
System.out.println("该书存在,是否要借?(是Y,不是N)");
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
String yesOrNo = bufr.readLine();
if(yesOrNo.equals("Y"))
{
System.out.println(userName);
newUserBorrow(userName);
}
else if(yesOrNo.equals("N"))
{
System.out.println("没有借该书");
}
else
System.out.println("输入有误,请按照提示输入");
}
public static void oldUseryesOrNo(String userName)throws Exception
{
System.out.println("该书存在,是否要借?(是Y,不是N)");
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
String yesOrNo = bufr.readLine();
if(yesOrNo.equals("Y"))
{
System.out.println(userName);
oldUserBorrow(userName);
}
else if(yesOrNo.equals("N"))
{
System.out.println("没有借该书");
}
else
System.out.println("输入有误,请按照提示输入");
}
public static void newUserBorrow(String userName) throws Exception
{
//将用户信息添加进去
Calendar c = Calendar.getInstance();
String time = c.get(Calendar.YEAR)+"/"+c.get(Calendar.MONTH)+"/"+c.get(Calendar.DATE);
System.out.println(time);
System.out.println("第一次借书");
User userNew = new User();
userNew.setTime(time);
userNew.setUserName(userName);
userNew.setCount(1);
userNew.setBorrowOrNot(1);
userList.add(userNew);
saveToTxt(userList);
userList.clear();
System.out.println("借书成功!!!");
}
}
复制代码
作者:
牛海亮
时间:
2013-7-18 00:32
5.User
package ts;
public class User {
private String userName;
private String time;
private int count;
private int borrowOrNot;//借的书是否还了0就是还了,1就是没有还
User()
{
}
User(String userName, String time, int count)
{
this.userName = userName;
this.time = time;
this.count = count;
}
public void setBorrowOrNot( int borrowOrNot )
{
this.borrowOrNot = borrowOrNot;
}
public int getBorrowOrNot()
{
return borrowOrNot;
}
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public String getTime()
{
return time;
}
public void setTime(String time )
{
this.time = time;
}
public int getCount()
{
return count;
}
public void setCount(int count)
{
this.count = count;
}
}
复制代码
作者:
李海鹏
时间:
2013-7-18 09:42
这个貌似给的技术分有点低吧?这道题目测不简单
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2