针对于数组的复习所制作的小项目(DVD借阅系统)
针对及基础知识数组。特意花费半天时间制作一个小项目进行了练习与复习
以下为小项目的所有源代码,为方便以后查看(有错误之处还请指出,共同进步)
1.实体类:
package entity; public class DVD{ private int id;//编号 private String name;// DVD名称 private int count; // 借出次数 private int status; // ״̬,DVD此时的状态,默认为只有一个DVD private String date;//借出日期 @Override public String toString() { return "DVD{" + "id=" + id + ", name='" + name + '\'' + ", count=" + count + ", status=" + status + ", date='" + date + '\'' + '}'; } public DVD() { super(); } public DVD(int id, String name, int count, int status,String date) { super(); this.id = id; this.name = name; this.count = count; this.status = status; this.date = date; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } }
package entity; public class User { private String username; private String password; public User() { super(); } public User(String username, String password) { super(); this.username = username; this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
2.工具类:
package util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { private static final SimpleDateFormat SDF_DATE = new SimpleDateFormat("yyyy-MM-dd"); private static final SimpleDateFormat SDF_DATE_TIME = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static String dateTimeToString(Date date) { return SDF_DATE_TIME.format(date); } public static Date stringToDateTime(String dateStr) throws ParseException { return SDF_DATE_TIME.parse(dateStr); } public static String dateToString(Date date) { return SDF_DATE.format(date); } public static Date stringToDate(String dateStr) throws ParseException { return SDF_DATE.parse(dateStr); } }
3.逻辑实现类
package manage; import entity.DVD; import entity.User; import util.DateUtil; import java.text.ParseException; import java.util.Arrays; import java.util.Date; import java.util.Scanner; public class managep { private User[] users = new User[5]; private DVD[] dvds = new DVD[50];// 存放DVD信息的 数组 private Scanner input = new Scanner(System.in); private double price = 2.0; /** * 完成 dvds的 初始化操作 */ public managep() { dvds[0] = new DVD(1001, "三国", 5, 1, "2018-07-29 10:00:00"); dvds[1] = new DVD(1002, "西游", 2, 0, "2018-07-25 10:00:00"); dvds[2] = new DVD(1003, "红楼梦", 3, 1, "2018-07-27 10:00:00"); dvds[3] = new DVD(1004, "水浒传", 10, 1, "2018-07-28 10:00:00"); users[0] = new User("admin", "123"); users[1] = new User("tom", "123"); } /** * 打印显示 主页菜单选项 * * @throws ParseException */ public void showHomeMenu() throws ParseException { boolean flag = true;// 控制循环的执行和停止 while (flag) { System.out.println("********************主菜单**************************"); System.out.println("1.查看DVD信息"); System.out.println("2.新增DVD信息"); System.out.println("3.修改DVD名称"); System.out.println("4.删除DVD信息"); System.out.println("5.借出DVD"); System.out.println("6.归还DVD"); System.out.println("7.查看排行"); System.out.println("8.用户登录"); System.out.println("9.退出"); System.out.println("***************************************************"); System.out.println("请选择 功能:(1-9)"); if (!input.hasNextInt()) { System.out.println("输入有误!!!!!!!!!"); input.next();//将 非数字 内容 读 走 continue; } int option = input.nextInt(); switch (option) { case 1: queryAllDvd(null);// 查看所有DVD break; case 2: addDvd(); // 新增DVD break; case 3: updateDvd();// 修改DVD名称 break; case 4: deleteDvd();// 删除DVD break; case 5: lendDvd();// 借出DVD break; case 6: returnBackDvd();// 归还DVD break; case 7: dvdSort(); // 排行榜 break; case 8: userLogin(); // 登录 break; case 9: flag = false; // 改变循环控制变量的值, 终止循环 System.out.println("系统退出!!!!!"); break; default: System.out.println("选项无效!!!"); break; } printSpace();//输出空行 } } /** * 用户登录验证 */ public void userLogin() throws ParseException { boolean isExist = false;//标记用户 是否存在 String username = ""; String userPwd = ""; while (true) { if (!isExist) { System.out.println("请输入用户名:"); username = input.next(); } System.out.println("请输入密码:"); String pwd = input.next(); //System.out.println("密码:"+pwd); for (int i = 0; i < users.length; i++) { if (users[i] != null && username.equals(users[i].getUsername())) { isExist = true; //System.out.println(pwd+"@@@@@@@@@@@@@@@@@"+users[i].getPassword()); if (pwd.equals(users[i].getPassword())) { System.out.println("登录成功!!!"); showHomeMenu(); } else { System.out.println("密码错误!!!"); continue; } } } if (!isExist) { System.out.println("用户名不存在!!!"); continue; } } } /** * 输出换行符 */ public void printSpace(){ System.out.print("\n\n"); } /** * 查看所有的DVD状态 */ public void queryAllDvd(DVD[] dvds) { if (dvds == null) { dvds = this.dvds; } for (int i = 0; i < dvds.length; i++) { if (dvds[i] != null) { if (dvds[i].getStatus() == 0) { System.out.println(dvds[i].getId() + "\t《" + dvds[i].getName() + "》\t" + dvds[i].getCount() + "\t" + "已借出\t" + dvds[i].getDate()); } else { System.out.println(dvds[i].getId() + "\t《" + dvds[i].getName() + "》\t" + dvds[i].getCount() + "\t" + "未借出\t" + dvds[i].getDate()); } } } } /** * DVD数组 扩容, 空间扩 一倍 */ public void extendDvds() { dvds = Arrays.copyOf(dvds, dvds.length * 2); } /** * 获取 dvd数组中 实际 的 dvd对象 个数 * * @return dvd对象个数(非空元素的个数) */ public int getDvdNum() { for (int i = dvds.length - 1; i >= 0; i--) { if (dvds[i] != null) { return i + 1; } } return 0; } /** * 获取最大 id 值 * * @return 最大ID值 */ public int getMaxId() { int dvdNum = getDvdNum(); if (dvdNum == 0) { return 0; } int max = dvds[0].getId(); for (int i = 1; i < dvdNum; i++) { if (dvds[i].getId() > max) { max = dvds[i].getId(); } } return max; } /** * 添加新的DVD */ public void addDvd() { while (true) { if (dvds[dvds.length - 1] != null) { extendDvds(); // 扩容 } int id = getMaxId(); id++; System.out.println("请输入要添加DVD的名称:"); String name = input.next(); for (int i = 0; i < dvds.length; i++) { if (dvds[i] == null) { dvds[i] = new DVD(id, name, 0, 1, "0000-00-00 00:00:00"); break; } } System.out.println("是否继续新增? y/n"); if (input.next().equalsIgnoreCase("n")) { break; } } } /** * 更新DVD的信息 */ public void updateDvd() { while (true) { boolean isFind = false;// 记录是否找到 要更新的元素 System.out.println("请输入要修改DVD的名称:"); String name = input.next(); for (int i = 0; i < dvds.length; i++) { if (dvds[i] != null && dvds[i].getName().equals(name)) { System.out.println("已找到要修改的DVD,请输入修改后的名字"); String nameNew = input.next(); dvds[i].setName(nameNew); isFind = true; System.out.println("修改成功~~"); break; } } if (!isFind) { System.out.println("该DVD不存在!!"); } queryAllDvd(null); System.out.println("是否继续修改? y/n"); if (input.next().equalsIgnoreCase("n")) { break; } } } public void deleteDvd() { while (true) { int index = -1; // 记录 删除DVD的 元素 下标位置 //int lastNotNull = -1; // 记录最后一个非空元素的下标位置 int dvdNum = getDvdNum(); //获取数组中实际存放的 dvd对象个数, 相当于lastNotNull+1 System.out.println("请输入要删除的DVD的名称:"); String name = input.next(); for (int i = 0; i < dvds.length; i++) { if (dvds[i] != null && dvds[i].getName().equals(name)) { dvds[i] = null; index = i; System.out.println("删除成功~~"); break; } } if (index < 0) { System.out.println("该DVD不存在!!"); } else { for (int i = index; i < dvdNum - 1; i++) { dvds[i] = dvds[i + 1]; } dvds[dvdNum - 1] = null; } queryAllDvd(null); // 遍历 原始数组 System.out.println("是否继续删除? y/n"); if (input.next().equalsIgnoreCase("n")) { break; } } } /** * 借出DVD */ public void lendDvd() { while (true) { boolean isFind = false; System.out.println("请输入要借的DVD的名字"); String name = input.next(); for (int i = 0; i < dvds.length; i++) { if (dvds[i] != null && dvds[i].getName().equals(name)){ if (dvds[i].getStatus() == 0) { // 已被别人借出, 暂未归还 System.out.println("该DVD已被其他人借出,暂未归还,请选择其他DVD~~"); } else {// DVD处于 可借状态 dvds[i].setStatus(0); dvds[i].setDate(DateUtil.dateTimeToString(new Date())); isFind = true; System.out.println("借出成功~~"); } break; } } if (!isFind) { System.out.println("该DVD不存在!!"); } System.out.println("是否继续借DVD? y/n"); if (input.next().equalsIgnoreCase("n")) { break; } } } /** * 归还DVD * * @throws ParseException */ public void returnBackDvd() throws ParseException { while (true) { boolean isFind = false; System.out.println("请输入要归还的DVD的名称:"); String name = input.next(); for (int i = 0; i < dvds.length; i++) { if (dvds[i] != null && dvds[i].getName().equals(name)) { dvds[i].setStatus(1); long end = (new Date()).getTime(); long start = DateUtil.stringToDateTime(dvds[i].getDate()).getTime(); double jinE = 0; int dayNum = 1; String dateStart = dvds[i].getDate(); String dateEnd = DateUtil.dateTimeToString(new Date()); if (dateStart.substring(0, 10).equals(dateEnd.substring(0, 10))) {//同一天 jinE = price * 1; } else if ((end - start) % (1000 * 60 * 60 * 24) != 0) {//大于一天, 且 int hours = (int) (end - start) % (1000 * 60 * 60 * 24); if (hours <= 5) { dayNum = (int) (end - start) / (1000 * 60 * 60 * 24); jinE = price * (dayNum + 0.2); } else {// 大于5小时, 小于24 dayNum = (int) (end - start) / (1000 * 60 * 60 * 24) + 1; jinE = price * dayNum; } } isFind = true; System.out.println("归还成功~~"); System.out.println("须交费:" + jinE + "元."); break; } } if (!isFind) { System.out.println("该DVD不存在!!"); } System.out.println("是否继续归还DVD? y/n"); if (input.next().equalsIgnoreCase("n")) { break; } } } /** * 按照借出次数 降序排序 */ public void dvdSort() { DVD[] dvdsTemp = Arrays.copyOf(dvds, dvds.length); // 拷贝数组, 只对临时数组进行排序 int dvdNum = getDvdNum(); for (int i = 0; i < dvdNum - 1; i++) { for (int j = 0; j < dvdNum - 1 - i; j++) { if (dvdsTemp[j].getCount() < dvdsTemp[j + 1].getCount()) { //降序 // 交换相邻元素 DVD temp = dvdsTemp[j]; dvdsTemp[j] = dvdsTemp[j + 1]; dvdsTemp[j + 1] = temp; } } } queryAllDvd(dvdsTemp); // 遍历 排好序的 临时 数组 } }
4.主函数运行:
package start; import manage.managep; import java.text.ParseException; public class managestart { public static void main(String[] args) throws ParseException{ managep dm=new managep(); dm.userLogin(); dm.showHomeMenu(); } }