在前面做IO流的图书管理系统面前,总有人说我的图书管理系统不上档次呀,连个数据打开txt文档都看不懂,那今天我们就看看看得懂的图书管理系统。
编号长度都是8位
名称都用10位
设计人名都是10位图书出版日期、读者注册日期不能更改
图书名称和读者名称不能更改
图书类型和读者类型类中的类型不能修改,每个编号对应一个类型存在的图书的类型不能删除 √
存在的读者的类型不能删除 √
借了书的读者不能删除 ——>删除时去借阅表里查询
借了的书不能删除 ——>删除时去借阅表里查询
借了书之后书的库存减1 ——>图书类重新创建一个库存减1 的修改方法
读者的可借图书数量不能超过最大值
借阅之前要先判断库存是否大于0
借阅之前要判断最大可借阅数量是否大于0,用count方法修改读者类型要去类型表判断
大家也知道这个代码很长所以这里就给大家提示一些不好写的地方。
CSDN下载链接:https://download.csdn.net/download/qq_43325476/59513006
百度网盘下载链接:https://pan.baidu.com/s/1bgma8mouchbKSRThV_i3Vg
提取码:du31
在你每次去尝试一个新的项目时,总会有一些无措,这个时候,你先别慌,看看它的需求,实在不知道怎么办了,先将他的实体类创建出来,因为万事开头难,当你开始之后,你就一个问题一个问题去解决。当然,90%的时间应该花在思考上面,比如,上面的约定,以及定义各个类之间的关系,接口与实现类之间的关系之类的思考。
其实当我们着手写一个项目时,只要开始写的那一刻开始下定决心,花不了多少时间,更多的时候我们则是在代码优化上面,纳郁闷吧。——下面pier给你说一些小细节,能够更好的优化你的代码;
这个问题看似简单,但在这个项目做的时候,我就发现了一部分难点,因为当我直接用Date时,特输入2099-13-1
他也可以自动转化成2100-1-1,当时我就懵了,这里超过了我当前时间呀,并且输入格式也不对,于是有了下面这一串代码。
代码一:
/**输入生日*/
public static String readDate(){
for(;;) {
//获得当前时间,声明时间变量
Calendar calendar = Calendar.getInstance();
int nowYear = calendar.get(Calendar.YEAR);
System.out.println("NowYear=" + nowYear);
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的出生年份:");
int year = TSUtility.readInt8();
while ( year > nowYear || year < nowYear - 130 ) {
System.out.println("您的年份输入有误,请重新输入您的出生年份:");
year = TSUtility.readInt8();
System.out.println("year=" + year);
}
int nowMonth = calendar.get(Calendar.MONTH);
//得到月,但是,月份要加上1
System.out.println("请输入您的出生月份:");
int month = TSUtility.readInt4();
nowMonth = nowMonth + 1;
while ( true ) {
if (month <= 12 && month >= 1) {
break;
} else {
System.out.println("您的月份输入有误!\n请重新输入您的出生月份:");
month = TSUtility.readInt4();
}
}
int day = 0;
switch ( month ) {
case 2: {
System.out.println("请输入你的日期:");
day = TSUtility.readInt4();
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
while ( day > 29 || day < 1 ) {
System.out.println("请重新输入,你的日期输入有误:");
day = TSUtility.readInt4();
}
} else {
while ( day > 28 || day < 1 ) {
System.out.println("请重新输入,你的日期输入有误:");
day = TSUtility.readInt4();
}
}
}
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: {
System.out.println("请输入你的日期:");
while ( day > 31 || day < 1 ) {
day = TSUtility.readInt4();
}
}
break;
default: {
System.out.println("请输入你的日期:");
while ( day > 30 || day < 1 ) {
day = TSUtility.readInt4();
}
break;
}
}
String s = "你的生日为" + year + "年" + month + "月" + day + "日";
boolean pastDate = isPastDate(s);
if (pastDate) {
System.out.println(s);
return s;
} else {
System.out.println("日期输入错误");
}
}
}
/**判断日期是否超过当前时间*/
public static boolean isPastDate(String str) {
boolean flag = false;
Date nowDate = new Date();
Date pastDate = null;
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd" ,Locale.CHINA);
//在日期字符串非空时执行
if (str != null && !"".equals(str)) {
try {
//将字符串转为日期格式,如果此处字符串为非合法日期就会抛出异常。
pastDate = sdf.parse(str);
//调用Date里面的before方法来做判断
flag = pastDate.before(nowDate);
if (flag) {
} else {
System.out.println("该日期晚于今日");
}
} catch ( ParseException e ) {
System.out.println("日期输入错误:异常信息:"+e.getMessage());
}
} else {
System.out.println("日期参数不可为空");
}
return flag;
}
这一个代码输入不太符合Date所以——改:
代码二:
//获取Date类的数据
public static Date readRevertTime() {
Date n;
for (; ; ) {
String str = readKeyBoard(20, false);
boolean checkDate = check(str);
boolean pastDate=false;
if(checkDate) {
pastDate = isPastDate(str);
if (pastDate && checkDate) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
n = sdf.parse(str);
break;
} catch ( NumberFormatException | ParseException e ) {
System.out.print("日期输入错误,请重新输入:");
}
} else {
System.out.print("日期输入错误,请重新输入:");
}
}
else {
System.out.println("日期格式输入错误,请重新输入!");
}
}
return n;
}
static boolean check (String str) {
//括号内为日期格式,y代表年份,M代表年份中的月份(为避免与小时中的分钟数m冲突,此处用M),d代表月份中的天数
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
try {
//此处指定日期/时间解析是否不严格,在true是不严格,false时为严格
sd.setLenient(false);
//从给定字符串的开始解析文本,以生成一个日期
sd.parse(str);
} catch ( Exception e ) {
return false;
}
return true;
}
/**判断日期是否合法*/
public static boolean isPastDate(String str) {
boolean flag = false;
Date nowDate = new Date();
Date pastDate = null;
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd" ,Locale.CHINA);
//在日期字符串非空时执行
if (str != null && !"".equals(str)) {
try {
//将字符串转为日期格式,如果此处字符串为非合法日期就会抛出异常。
pastDate = sdf.parse(str);
//调用Date里面的before方法来做判断
flag = pastDate.before(nowDate);
if (flag) {
} else {
System.out.println("该日期晚于今日");
}
} catch ( ParseException e ) {
System.out.println("日期输入错误:异常信息:"+e.getMessage());
}
} else {
System.out.println("日期参数不可为空");
}
return flag;
}
这个就是你配置文件的问题,可以直接将你的除了url,username,password和driverClass以外的配置文件删除就好了。
原因:在你上次使用连接时,连接池关闭,你的连接断开,解决方法,在你每次使用连接时开启,使用完毕后关闭就好了。