Java基础练习项目 图书管理系统
@TOC
图书管理系统: 该项目基于Java语言所开发的借书,还书,删除,查看,添加,结算的功能 用户可在该系统内进行一系列借书的操作。 开发环境: 开发语言:Java jdk版本:jdk15 编辑工具:eclipse # 需求分析 7个功能实现 1.我要借书 2.查看(订单/书籍) 3.归还书籍 4.添加书籍 5.删除(订单/书籍) 6.结算订单 7.退出系统 我们进入需求分析: 首先看下项目,图书管理系统,那么首先应该有书,有订单,有人来借书。ok,我们分析出了数据的主要,我是进行这样规划的: 2个数据主体,第一个是以书籍为主体,首先书籍有它的一系列信息,有书籍名称借出的价格,原价,借出的次数,书本总数。 第二个是以订单人为主体,订单人主要信息有:订单人姓名,订单借出日期,订单归还日期,所借的书籍的下标(与书籍向匹配),当前订单的状态,是否结算订单,订单总金额。 到这里,我们就完成了一半了,主要的已经分析了出来。 # 搭建框架 下面使用do-while循环搭建整体框架,内嵌switch选择结构。 ```java /*系统工具*/ Scanner sca = new Scanner(System.in);//控制台输入工具 DecimalFormat df = new DecimalFormat("####0.00");//配置Double类型保留前两位小数 /*与书本直接相关的内容 下标以书本名称为标准*/ String[] books_Name = {"语文", "数学", "英语", null, null};//书本名称 double[] books_Day_Price = {1.2, 1.5, 1.3, 0.0, 0.0};//书本每天借出去的价钱 double[] books_Price = {50.0, 52.0, 53.0, 0.0, 0.0};//书本原价 int[] books_Loan_Num = {50, 40, 60, 0, 0};//书本借出的数量 int[] books_Num = {10, 10, 10, 0, 0};//书本原有的数量 /*与订单直接相关的内容,下标以借书人姓名为标准*/ String[] names = {"User1", "User2", "User3", null, null};//借书人姓名 double[] sum_Money = {40.3, 0.0, 459.6, 0.0, 0.0};//总价 int[] out_Year = {2020, 2019, 2021, 0, 0};//借出书本的年份 int[] out_Month = {1, 2, 3, 0, 0};//借出书本的月份 int[] out_Date = {13, 20, 1, 0, 0};//借出书本的日期 int[] back_Year = {2020, 0, 2020, 0, 0};//归还书本的年份 int[] back_Month = {2, 0, 3, 0, 0};//归还书本的月份 int[] back_Date = {23, 0, 10, 0, 0};//归还书本的日期 int[] states = {1, 0, 1, 0, 0};//订单当前状态 0:未归还 1:已归还 int[] is_Buy = {1, 0, 1, 0, 0};//是否结算 0:未结算 1:已结算 //借出的是什么书本? int[] books_Loan_Index = {1, 2, 0, -1, -1};//借的书本的下标 boolean isExit = false;// true:退出系统 System.err.println("欢迎来到图书管理系统"); do { System.out.println("**********************\n" + "1.我要借书\n" + "2.查看(订单/书籍)\n" + "3.归还书籍\n" + "4.添加书籍\n" + "5.删除(订单/书籍)\n" + "6.结算订单\n" + "7.退出系统\n" + "**********************\n" + "请根据序号进行选择:"); switch(sca.next()){ case "1": System.out.println("***我要借书***"); break; case "2": System.out.println(" ***查看***\n" + " 1.查看订单 2.查看书籍\n" + "请选择:"); break; case "3": System.out.println("***归还书籍***"); break; case "4": System.out.println("***添加书籍***"); break; case "5": System.out.println(" ***删除***\n" + " 1.删除订单 2.删除书籍\n" + "请选择:"); break; case "6": System.out.println("***结算订单***"); break; case "7": System.out.println("确定退出吗? 1:退出 0:继续\n请选择:"); if (sca.next().equals("1")) { isExit = true; } break; default: System.out.println("您的输入有误,请您重新输入:"); } } while(!isExit); ``` # 实现功能 具体实现功能: 1.我要借书功能 简要分析:借书功能首先需要查看订单是否存满,如果已存满,给出相应提示,反之收集用户信息,添加到订单中。具体实现如下: ```java case "1": System.out.println("***我要借书***"); int count = 0;//计数器,记录是否找到空位 for (int i = 0; i < names.length; i++) { if (names[i] == null) {//如果找到空位 System.out.println("请输入您的姓名:"); names[i] = sca.next(); System.out.println("本店书籍如下:\n" + "书籍序号\t书籍名称\t借出价格(天)\t借出数量\t剩余数量"); for (int j = 0; j < books_Name.length; j++) { if (books_Name[j] != null) { System.out.println((j + 1) + "\t" + books_Name[j] + "\t" + books_Day_Price[j] + "元/天\t\t" + books_Loan_Num[j] + "次\t" + books_Num[j] + "本"); } } System.out.println("请输入书籍序号:"); books_Loan_Index[i] = sca.nextInt()-1; System.out.println("请输入今天的日期:"); System.out.println("请输入年份:"); out_Year[i] = sca.nextInt(); System.out.println("请输入月份:"); out_Month[i] = sca.nextInt(); System.out.println("请输入日期:"); out_Date[i] = sca.nextInt(); books_Loan_Num[books_Loan_Index[i]] ++;//书籍的借出次数+1 System.out.println("借书成功~"); count = -1;//找到空位 break; } } if (count == 0) {//未找到空位 System.out.println("存储空间已满,无法存储!"); } break; ``` 2.查看(订单/书籍) 简要分析:该功能有二级菜单,当用户使用该功能时,可选择查看订单或书籍,所以说这就是为什么我要分2个数据主体。实现如下: ```java case "2": System.out.println(" ***查看***\n" + " 1.查看订单 2.查看书籍\n" + "请选择:"); int num = 0; do { num = sca.nextInt(); if (!(num == 1 || num == 2)) { System.out.println("输入错误,请您重新输入:"); } } while(!(num == 1 || num == 2)); switch (num) { case 1: System.out.println("订单序号\t订单人姓名\t所借书籍\t借出书本的日期\t当前状态\t是否结算\t归还书本的日期"); for (int i = 0; i < names.length; i++) { if (names[i] != null) {//订单不为空时才可以打印 String state = states[i] == 0 ? "未归还" : "已归还"; String buy = is_Buy[i] == 0 ? "未结算" : "已结算"; System.out.print(" " + (i + 1) + "\t " + names[i] + "\t《" + books_Name[books_Loan_Index[i]] + "》\t" + out_Year[i] + "/" + out_Month[i] + "/" + out_Date[i] + "\t " + state + "\t " + buy); if (states[i] == 1) {//如果已经归还书籍 System.out.println("\t" + back_Year[i] + "/" + back_Month[i] + "/" + back_Date[i]); } else { System.out.println(); } } } break; case 2: System.out.println("书籍序号\t书籍名称\t借出价格(天)\t借出数量\t剩余数量"); for (int j = 0; j < books_Name.length; j++) { if (books_Name[j] != null) { System.out.println((j + 1) + "\t" + books_Name[j] + "\t" + books_Day_Price[j] + "元/天\t\t" + books_Loan_Num[j] + "次\t" + books_Num[j] + "本"); } } break; } break; ``` 3.归还书籍 简要分析:该功能为用户看完书后想要归还,需让用户输入归还的日期为结算功能使用。实现如下: ```java case "3": System.out.println("***归还书籍***"); System.out.println("订单序号\t借书人\t所借书籍\t订单状态"); for (int i = 0; i < names.length; i++) { if (names[i] != null) { String state = states[i] == 0 ? "未归还" : "已归还"; System.out.println((i + 1) + "\t" + names[i] + "\t" + books_Name[books_Loan_Index[i]] + "\t" + state); } } System.out.println("请输入要签收的订单序号:"); int order_No = sca.nextInt(); if (order_No < 0 || order_No >= names.length) { System.out.println("订单不存在,签收失败!"); } else { if (names[order_No -1] == null) { System.out.println("订单不存在!"); } else { if (states[order_No - 1] == 0) {//可以签收 System.out.println("请输入今天的日期:"); System.out.println("请输入年份:"); back_Year[order_No - 1] = sca.nextInt(); System.out.println("请输入月份:"); back_Month[order_No - 1] = sca.nextInt(); System.out.println("请输入日期:"); back_Date[order_No - 1] = sca.nextInt(); states[order_No - 1] = 1;//将订单状态更改为已归还 System.out.println("归还成功~"); //计算开始年份至结束年份的天数 int out_Year_Days = 0; for (int i = out_Year[order_No - 1]; i < back_Year[order_No - 1]; i++) { if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) { out_Year_Days += 366; } else { out_Year_Days += 365; } } //计算开始月份的天数 int out_Month_Days = 0; for (int i = 1; i < out_Month[order_No - 1]; i++) { if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) { out_Month_Days += 31; } else if (i == 4 || i == 6 || i == 9 || i == 11) { out_Month_Days += 30; } else { if ((out_Year[order_No - 1] % 4 == 0 && out_Year[order_No - 1] % 100 != 0) || out_Year[order_No - 1] % 400 == 0) { out_Month_Days += 29; } else { out_Month_Days += 28; } } } //计算结束月份的天数 int back_Month_Days = 0; for (int i = 1; i < back_Month[order_No - 1]; i++) { if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) { back_Month_Days += 31; } else if (i == 4 || i == 6 || i == 9 || i == 11) { back_Month_Days += 30; } else { if ((back_Year[order_No - 1] % 4 == 0 && back_Year[order_No - 1] % 100 != 0) || back_Year[order_No - 1] % 400 == 0) { back_Month_Days += 29; } else { back_Month_Days += 28; } } } //计算结果 开始年份至结束年份的天数 - (开始年份至输入月份的天数 + 开始日期) + (结束年至输入月份的天数 + 结束日期) int result = out_Year_Days - (out_Month_Days + out_Date[order_No - 1]) + (back_Month_Days + back_Date[order_No - 1]); sum_Money[order_No - 1] = result * books_Day_Price[books_Loan_Index[order_No - 1]]; } else if (states[order_No - 1] == 1) { System.out.println("您选择的订单已签收,无需重复签收!"); } } } break; ``` 4.添加书籍 简要分析:添加书籍功能用户使用时输入想要添加的书籍即可,如果要添加的书籍本店存在,那么提示用户要添加多少本,如果添加的是本店没有的书籍,那么提示用户输入新书本的一系列信息,并存储在本店书籍中,添加前需查看本店是否有书籍空位,如果没有,不可添加,如果有,可以添加。具体的实现如下: ```java case "4": int isRepeat = 0;//是否重复添加 System.out.println("***添加书籍***"); System.out.println("请输入您想要添加的书籍名称:"); String add_Book = sca.next(); for (int i = 0; i < books_Name.length; i++) { if (books_Name[i] != null && add_Book.equals(books_Name[i])) { isRepeat = -1; System.out.println("查找到该书籍的记录,请输入添加的数量:"); books_Num[i] += sca.nextInt(); System.out.println("添加成功~"); break; } } if (isRepeat == 0) {//添加的是新的书籍 int isNull = 0; for (int i = 0; i < books_Name.length; i++) { if (books_Name[i] == null) { isNull = -1; System.out.println("请输入《" + add_Book + "》的数量:"); books_Num[i] = sca.nextInt(); System.out.println("请输入《" + add_Book + "》的借出价格(天):"); books_Day_Price[i] = sca.nextDouble(); System.out.println("请输入《" + add_Book + "》的原价:"); books_Price[i] = sca.nextDouble(); books_Name[i] = add_Book; System.out.println("添加成功~"); break; } } if (isNull == 0) { System.out.println("存储空间已满,无法添加!"); } } break; ``` 5.删除(订单/书籍) 简要分析:删除订单或书籍,该功能为二级菜单,用户使用该功能时,可选择删除订单或书籍,删除订单满足的条件如下: 1.书籍已经归还,且已经结算,可以删除 2.书籍已经归还,且未结算,不可删除 3.书籍未归还,且未结算,不可删除 删除书籍的条件为本店有的书籍方可删除,反之不可删除。 具体实现如下: ```java case "5": System.out.println(" ***删除***\n" + " 1.删除订单 2.删除书籍\n" + "请选择:"); int delChoice = 0; do { delChoice = sca.nextInt(); if (!(delChoice == 1 || delChoice == 2)) { System.out.println("您输入的数字有误,请您重新输入:"); } } while(!(delChoice == 1 || delChoice == 2)); switch (delChoice) { case 1: System.out.println("订单序号\t借书人\t所借书籍\t当前状态\t是否结算"); for (int i = 0; i < names.length; i++) { if (names[i] != null) { String state = states[i] == 0 ? "未归还" : "已归还"; String buy = is_Buy[i] == 0 ? "未结算" : "已结算"; System.out.println((i + 1) + "\t" + names[i] + "\t" + books_Name[books_Loan_Index[i]] + "\t" + state + "\t" + buy); } } System.out.println("请输入想要删除的订单序号:(删除规则:未归还书籍的不可删除,已归还但未结算的不可删除)"); int delNo = sca.nextInt(); for (int i = 0; i < names.length; i++) { if (names[i] != null && states[i] == 1 && delNo == i + 1 && is_Buy[i] == 1) {//可以删除 for (int j = delNo - 1; j < names.length-1; j++) { names[j] = names[j + 1]; out_Year[j] = out_Year[j + 1]; out_Month[j] = out_Month[j + 1]; out_Date[j] = out_Date[j + 1]; back_Year[j] = back_Year[j + 1]; back_Month[j] = back_Month[j + 1]; back_Date[j] = back_Date[j + 1]; states[j] = states[j + 1];is_Buy[j] = is_Buy[j + 1]; books_Loan_Index[j] = books_Loan_Index[j + 1]; } names[names.length - 1] = null; out_Year[names.length - 1] = 0; out_Month[names.length - 1] = 0; out_Date[names.length - 1] = 0;is_Buy[names.length - 1] = 0; back_Year[names.length - 1] = 0; back_Month[names.length - 1] = 0; back_Date[names.length - 1] = 0; states[names.length - 1] = 0; books_Loan_Index[names.length - 1] = 0; System.out.println("删除成功~"); break; } else if (names[i] != null && states[i] == 0 && delNo == i + 1) { System.out.println("该订单未归还,请您先归还书籍!"); } else if (names[i] != null && states[i] == 1 && delNo == i + 1 && is_Buy[i] == 0) { System.out.println("该订单未结算,请您先结算订单!"); } } if (delNo > names.length || delNo < 0) { System.out.println("订单不存在!"); } break; case 2: System.out.println("书籍序号\t书籍名称\t书籍原价"); for (int i = 0; i < books_Name.length; i++) { if (books_Name[i] != null) { System.out.println((i + 1) + "\t" + books_Name[i] + "\t" + books_Price[i]); } } System.out.println("请输入想要删除的书籍序号:(删除书籍必须购买所删除的书籍)"); int delBook = sca.nextInt(); if (delBook < 0 || delBook >= books_Name.length) { System.out.println("书籍不存在!"); } else { for (int i = 0; i < books_Name.length; i++) { if (books_Name[i] != null && delBook == i + 1) { System.out.println("《" + books_Name[i] + "原价:" + books_Price[i] + "元,请支付:"); int pay = 0; do { pay = sca.nextInt(); if (pay > books_Price[i]) { System.out.println("支付成功,找您:" + (pay - books_Price[i]) + "元," + "正在删除《" + books_Name[i] + "》..."); } else if (pay < books_Price[i]) { System.out.println("您的支付金额小于书籍原价,请您重新支付:"); } else { System.out.println("支付成功~,正在删除《" + books_Name[i] + "》..."); } } while (pay < books_Price[i]); for (int j = delBook - 1; j < books_Name.length-1; j++) { books_Name[j] = books_Name[j + 1]; books_Day_Price[j] = books_Day_Price[j + 1]; books_Loan_Index[j] = books_Loan_Index[j + 1]; books_Loan_Num[j] = books_Loan_Num[j + 1]; books_Num[j] = books_Num[j + 1]; books_Price[j] = books_Price[j + 1]; } books_Name[books_Name.length - 1] = null; books_Day_Price[books_Name.length - 1] = 0.0; books_Loan_Index[books_Name.length - 1] = 0; books_Loan_Num[books_Name.length - 1] = 0; books_Num[books_Name.length - 1] = 0; books_Price[books_Name.length - 1] = 0.0; System.out.println("删除成功~"); break; } } } break; } break; ``` 6.结算订单 简要分析:该功能为结算订单,用户看完书籍后可以结算所产生的费用,具体费用为,一天多少钱,借了多少天,天数*钱数==总费用。 具体如下: ```java case "6": System.out.println("***结算订单***"); System.out.println("订单序号\t订单人姓名\t所借书籍\t书籍价格(天)\t当前状态\t是否结算\t共计"); for (int i = 0; i < names.length; i++) { if (names[i] != null) { String state = states[i] == 0 ? "未归还" : "已归还"; String buy = is_Buy[i] == 0 ? "未结算" : "已结算"; System.out.println(" " + (i + 1) + "\t" + names[i] + "\t《" + books_Name[books_Loan_Index[i]] + "》\t" + books_Day_Price[books_Loan_Index[i]] + "元/天\t\t " + state + "\t " + buy + "\t¥" + sum_Money[i]); } } System.out.println("请输入想要结算的订单序号:"); int pay = sca.nextInt(); for (int i = 0; i < names.length; i++) { if (names[i] != null && pay == i + 1 && is_Buy[i] == 0 && states[i] == 1) { System.out.println("----------订单详情----------\n" + "订单人:" + names[i] + "\n所借书籍:《" + books_Name[i] + "》\n书籍价格(天):" + books_Day_Price[i] + "\n所借天数:" + (int)(sum_Money[i] / books_Day_Price[i]) + "\n共计:" + sum_Money[i]); System.out.println("请您支付:"); double payMoney = 0.0; do { payMoney = sca.nextInt(); if (payMoney > sum_Money[i]) { is_Buy[i] = 1; System.out.println("支付成功,找您:" + (payMoney - sum_Money[i]) + "元"); } else if (payMoney < sum_Money[i]) { System.out.println("您输入的金额小于总金额,请您重新付款:"); } else { is_Buy[i] = 1; System.out.println("支付成功~"); } } while (payMoney < sum_Money[i]); } else if (names[i] != null && pay == i + 1 && is_Buy[i] == 1) { System.out.println("订单已结算无需重复结算!"); } else if (names[i] != null && pay == i + 1 && states[i] == 0) { System.out.println("订单未归还,请您先归还书籍再结算订单!"); } } if (pay >= names.length || pay < 0) { System.out.println("订单不存在!"); } break; ``` 整体框架: ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303110850174.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 先初始化3个数据主体,我们选择查看功能 **查看订单** ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/2021030311120053.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) **查看书籍** ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303111351215.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) **我要借书功能测试** ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303111015751.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 借书成功后为了检验是否订单已生成,我们查看订单是否有新订单 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303111552580.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 订单生成成功,初始借书订单的状态均为未归还和未结算,正确! 我们再添加一个让订单的空间占满,操作如下 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303111928162.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 借书成功,当前的订单空间已经占满,如果再添加的话应提示空间已满,我们测试下 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303112032577.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) ok,功能无误,非常完美! 再次查看订单 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303112211678.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 当前订单为5个,我所限制的长度就是5个,正确! **归还订单测试** 首先我们测试已经归还的是否存在误差 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303112331154.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 很显然,提示了相关的语句。 我们再测试未归还的是否可以成功归还 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303112530754.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 归还成功,可以可以 我们查看订单中状态是否切换为已归还,并且归还的日期要有 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303113418196.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 正确正确~ **添加书籍测试** 我们先添加书店中有个书籍,看是否有误 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303113700267.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 添加成功,提示的是书店中存在该书,我们直接添加书本的数量就ok ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303114019747.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 我们再添加新的书本 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303114120141.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 添加新的书本提示输入书本的信息,可以。 我们再次查看是否添加成功 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303114201740.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 添加成功,可以。 **删除功能测试** == 删除订单 == 首先删除未归还未结算的,提示未归还即可 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303114634436.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 接下来测试已归还未结算的,应该提示未结算 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303114722361.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) ok,我们再次测试已归还,已结算的订单,这个可以删除 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303114818165.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 删除成功,查看下订单是否还有User1的订单信息 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303114918885.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) ok,第一个删除订单功能测试完毕,功能正常。 == 删除书籍 == 删除书籍的话必须购买当前所删除的书籍![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303115209412.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 再次查看是否删除成功 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/202103031403186.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) ok,删除书籍无误,功能正常 **结算订单功能测试** 首先我们测试已归还但未结算的订单,可以结算 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303141446225.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 结算订单无误,功能正常 **退出系统** 测试能否成功退出系统 ![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20210303141615319.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNjQzNw==,size_16,color_FFFFFF,t_70) 项目功能测试到此结束,非常完美! # 项目总结 图书管理系统,练习完该系统再一次的巩固了基础,让自己对java基础具有很好的运用能力,提高编程思维,巩固了知识点。 如有我未发现的小bug,望各位大佬在评论区留言指出。 望我们共同进步,加油,今天又是学习代码的一天呀! 链接: [https://pan.baidu.com/s/1kn774JxkpyG9bNywz7CJHA](https://pan.baidu.com/s/1kn774JxkpyG9bNywz7CJHA) 提取码: dcek