在前面做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; }
原因一:数据库编码模式未更改——将编码模式更改就可
原因二:IDAE(指你的Java编辑器)格式不统一,下面三个地方都可以更改一下
这个就是你配置文件的问题,可以直接将你的除了url,username,password和driverClass以外的配置文件删除就好了。
原因:在你上次使用连接时,连接池关闭,你的连接断开,解决方法,在你每次使用连接时开启,使用完毕后关闭就好了。