JavaCore-OOP-4-图书管理系统(完善版V2)
来源:互联网 发布:淘宝申请代付在哪里看 编辑:程序博客网 时间:2024/06/05 02:05
话说
上一篇博客的图书管理系统目前来看,勉强满意,但是还缺乏用户验证。这篇主要在原来基础上增加权限验证,增加后,单纯就功能而言,差强人意啦。
目标:
1、用户对图书进行增、删、改的时候,需要管理员权限;
2、购买图书会提示登录,没有账号提示注册;
3、只有管理员有权限对用户进行查、删、改操作。
这个管理员,当然就是小美我啦。
开发环境:Eclipse( Oxygen Release Milestone 7)
目录
一、整体效果图
二、Book类
三、User类
四、接口
五、测试类(核心)
六、总结
一、整体效果图
对图书及用户CUD操作做了权限验证。
管理员方可以操作;管理员忘记密码?哈哈,直接后台改代码咯~
用户购买图书,必须存在账号,未存在提示注册。
注册成功后,即可购买。当然用管理员账号什么都可以做啦。
修改、删除用户都类似,不在赘述。
二、Book类
这个跟之前一样。
package com.hmc.bookmanagement;/****2017年11月26日*User:Meice*下午7:48:14*/public class Book { private int book_id; private String book_name; private double book_price; private String book_author; public Book() {} public Book(int book_id,String book_name,double book_price,String book_author) { this.book_id = book_id; this.book_name = book_name; this.book_price = book_price; this.book_author = book_author; } public void setBook_id(int book_id) { this.book_id = book_id; } public int getBook_id() { return book_id; } public void setBook_name(String book_name) { this.book_name = book_name; } public String getBook_name() { return book_name; } public void setBook_price(double book_price) { this.book_price = book_price; } public double getBook_price() { return book_price; } public void setBook_author(String book_author) { this.book_author = book_author; } public String getBook_author() { return book_author; } public String toString() { return "Book{"+book_id+"\t"+book_name+"\t"+book_price+"\t"+book_author+"}"; }}
三、User类
User类是新增的
package com.hmc.bookmanagement;/****2017年11月27日*User:Meice*下午9:11:11*/public class User { private int user_id; private String username; private String password; public User() {} public User(int user_id,String username,String password) { this.user_id = user_id; this.username = username; this.password = password; } public int getUser_id() { return user_id; } public void setUser_id(int user_id) { this.user_id = user_id; } 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 [user_id=" + user_id + ", username=" + username + ", password=" + password + "]"; }}
四、接口
接口跟之前一样:
package com.hmc.bookmanagement;/****2017年11月26日*User:Meice*下午7:46:47*/public interface BookManagementI { public void showAllBook(); public void addBook(Book book); public void delBook(String book_name); public void editBook(String book_name); public void buyBook();}
五、测试类(核心)
BookManagementSystemImpl
这个变化很大,原来400来行代码,现在800来行,增加了权限验证及各种异常处理。当然CURD代码思路都是一样,如果用泛型还可以简化。不过这次就完善到这里。
package com.hmc.bookmanagement;import java.text.DecimalFormat;import java.util.Arrays;import java.util.InputMismatchException;import java.util.Scanner;import org.junit.Test;/****2017年11月26日*User:Meice*下午7:54:26*/public class BookManagementSystemImpl implements BookManagementI { static BookManagementSystemImpl bms = new BookManagementSystemImpl(); //用数组作为容器,存放书籍 Book[] BookList = new Book[100]; //定义购书车,存放购买清单 Book[] buiedBooks = new Book[20]; //定义数组,存放待删除信息 User[] waitDelUserList = new User[20]; //定义购买总金额totalPrice double totalPrice = 0; //定义数组,用于存放用户信息 User[] UserList = new User[20]; public BookManagementSystemImpl() { Book book1 = new Book(1, "《笑傲江湖》", 23.33, "金庸"); Book book2 = new Book(2, "《红楼梦续集》", 33.455, "曹雪芹"); Book book3 = new Book(3, "《悲惨世界》", 45.456, "雨果"); Book book4 = new Book(4, "《战争与和平》", 67.899, "托尔斯泰"); Book book5 = new Book(5, "《宝贝,宝贝》", 45.782, "周国平"); BookList[0] = book1; BookList[1] = book2; BookList[2] = book3; BookList[3] = book4; BookList[4] = book5; //初始化管理员用户 User user = new User(0, "Meice", "123"); UserList[0] = user; } public static void main(String[] args) { do { bms.welcomeEnter(); switch(bms.getChooseNumber()) { case 1: //TODO showAllBook() bms.showAllBook(); break; case 2: //TODO addBook() //根据用户选择,是否使用管理员权限 if(bms.isContinue("【用户管理员】方有权限执行【新增】操作,使用管理员权限(y/n)?", "请输入用户名:", "")) { //权限验证 if(bms.isAdmin(bms.getOneUser(""))) { bms.addBook(bms.getOneBook()); } } break; case 3: //TODO delBook() if(bms.isContinue("【用户管理员】方有权限执行【删除】操作,使用管理员权限(y/n)?", "请输入用户名:", "")) { if(bms.isAdmin(bms.getOneUser(""))) { bms.showAllBook(); bms.delBook(bms.getOneBookName("请输入【待删除】图书的【图书名称】:")); } } break; case 4: //TODO editBook() if(bms.isContinue("【用户管理员】方有权限执行【编辑】操作,使用管理员权限(y/n)?", "请输入用户名:", "")) { if(bms.isAdmin(bms.getOneUser(""))) { bms.showAllBook(); bms.editBook(bms.getOneBookName("请输入【待修改】图书的【图书名称】:")); } } break; case 5: //TODO buyBook() //购买之前,提示用户登陆,如果是非老用户,提示注册: if(bms.isContinue("购买操作需要登录奥~已注册(y/n)?", "请输入【已存在】用户名:","")) { //用户存在方可执行购买操作 if(bms.isOneUserExist(bms.getOneUser(""))) { bms.showAllBook(); bms.buyBook(); }else { System.out.println("此用户不存在,请重新选择其他操作:"); } }else { //执行注册用户功能 bms.addUser(bms.getOneUser("请输入【注册】用户名:")); } break; case 6: //查看用户列表 if(bms.isContinue("【用户管理员】方有权限执行【查看用户列表】操作,使用管理员权限(y/n)?", "请输入用户名:", "")) { if(bms.isAdmin(bms.getOneUser(""))) { bms.showUsers(); } } break; case 7: //修改用户 if(bms.isContinue("【用户管理员】方有权限执行【修改】操作,使用管理员权限(y/n)?", "请输入用户名:", "")) { //判断用户权限 if(bms.isAdmin(bms.getOneUser(""))) { bms.showUsers(); bms.updateUser(bms.getUserIds("请输入【待修改用户】编号:")); } } break; case 8: //删除用户 if(bms.isContinue("【用户管理员】方有权限执行【删除】操作,使用管理员权限(y/n)?", "请输入用户名:", "")) { //判断用户权限 if(bms.isAdmin(bms.getOneUser(""))) { bms.showUsers(); bms.delUser(bms.getUserIds("请输入【待删除用户】编号【多个请以英文逗号间隔】:")); } } break; case 9: //TODO Exit System.out.println("谢谢惠顾!期待下次光临! *.* "); break; default: //TODO others System.out.println("此序号不存在,请重新选择:"); break; } }while(bms.isContinue("是否继续(y/n)?","","谢谢惠顾!期待下次相逢 *.* ")); } /** * 方法1:欢迎界面 * welcomeEnter() */ public void welcomeEnter() { System.out.println("****************************欢迎进入图书管理系统********************************"); System.out.println("1.查看图书列表\n2.新增图书\n3.删除图书\n4.编辑图书\n5.购买图书"); System.out.println("==后台用户管理=="); System.out.println("6.查看用户列表\n7.修改用户\n8.删除用户\n9.退出"); System.out.println("*************************************************************************"); } /** * 方法2:返回选择序号 * getChooseNumber() */ public int getChooseNumber() { System.out.println("请输入选择的序号:"); try { return new Scanner(System.in).nextInt(); }catch(InputMismatchException e) { System.out.println("输入有误,请重新输入:"); try { return new Scanner(System.in).nextInt(); }catch(InputMismatchException e2) { System.out.println("多次输入有误,求助于管理员【小美】吧!"); return 6; } } } /** * 方法3:显示图书列表 */ @Override @Test public void showAllBook() { System.out.println("****************************图书列表*************************************"); if(bms.getBooksCount()==0) { System.out.println("图书已售罄,期待下次光临 *.* "); }else { System.out.println("图书编号\t图书名称\t\t\t价格\t\t作者"); } for(int i=0;i<BookList.length;i++) { if(BookList[i]!=null) { System.out.println(BookList[i].getBook_id()+"\t"+BookList[i].getBook_name()+"\t\t"+BookList[i].getBook_price()+"\t\t"+BookList[i].getBook_author()); } } System.out.println("**********************************************************************"); } /** * 方法4:是否继续 * isContinue() */ public boolean isContinue(String startInfo,String continueInfo,String notContinueInfo) { System.out.println(startInfo); String choice = new Scanner(System.in).next(); if("y".equals(choice)|| "Y".equals(choice)) { System.out.println(continueInfo); return true; }else if("n".equals(choice)|| "N".equals(choice)) { System.out.println(notContinueInfo); return false; }else { System.out.println("输入有误,请重新输入:y/Y表示继续,n/N表示终止操作:"); String choice2 = new Scanner(System.in).next(); if("y".equals(choice2)|| "Y".equals(choice2)) { System.out.println(continueInfo); return true; }else if("n".equals(choice)|| "N".equals(choice)) { System.out.println(notContinueInfo); return false; }else { System.out.println("连续多次输入有误,求助于管理员【小美】吧!"); return false; } } } /** * 方法5:新增图书 */ @Override public void addBook(Book book) { //输出新增图书 System.out.println("****************************待新增图书信息**********************************"); System.out.println("图书编号\t图书名称\t\t\t价格\t\t作者"); System.out.println(book.getBook_id()+"\t"+book.getBook_name()+"\t\t"+book.getBook_price()+"\t\t"+book.getBook_author()); System.out.println("************************************************************************"); //判断是否新增 if(bms.isContinue("请核实新增图书信息,确认新增(y/n)?","恭喜您!新增成功! *.* ","未执行新增操作,请选择其他操作:")) { for(int i=0;i<BookList.length;i++) { if(BookList[i]!=null) { if(i==bms.getBooksCount()-1) { BookList[i+1] = book; //System.out.println("恭喜您!新增成功! *.* "); //没有break;就会数组越界101 或者所有null值全部添加同一本书 break; } } } }else { //已经做了处理notContinueInfo } } /** * 方法6:获取书籍数量 * getBooksCount() */ public int getBooksCount() { int count =0; for(int i=0;i<BookList.length;i++) { if(BookList[i]!=null) { count ++; } } return count; } /** * 方法7:获得一本书 * getOneBook() */ public Book getOneBook() { System.out.println("请输入新增图书名称:"); String book_name = new Scanner(System.in).next(); System.out.println("请输入新增图书价格:"); double book_price = new Scanner(System.in).nextDouble(); System.out.println("请输入图书作者:"); String book_author = new Scanner(System.in).next(); Book book = new Book(bms.getBooksCount()+1, book_name, book_price, book_author); return book; } //测试书籍数量 @Test public void test01() { System.out.println(getBooksCount()); } /** * 方法8:删除图书 * */ @Override public void delBook(String book_name) { //判断该书名是否存在 if(bms.isBookNameExist(book_name)) { //输出待删除图书信息 Book book = bms.returnOneBookByBookName(book_name); System.out.println("****************************待删除图书信息**********************************"); System.out.println("图书编号\t图书名称\t\t\t价格\t\t作者"); System.out.println(book.getBook_id()+"\t"+book.getBook_name()+"\t\t"+book.getBook_price()+"\t\t"+book.getBook_author()); System.out.println("***********************************************************************"); //确认是否执行删除操作 if(bms.isContinue("请核实删除信息,确认删除(y/n)?","恭喜!删除成功! *.* ", "未执行删除操作,请选择其他操作")) { //直接执行删除操作,判断是否存在交给另外的方法 for(int i=0;i<BookList.length;i++) { if(BookList[i]!=null) { if(book_name.equals(BookList[i].getBook_name())) { BookList[i] = null; //System.out.println("恭喜您!删除成功!*.* "); break; } } } }else { //已经处理 } }else { System.out.println("此本书不存在,请重新输入..."); } } /** * 方法9:判断book_name是否存在 * isBookNameExist() */ public boolean isBookNameExist(String book_name) { boolean flag = false; for(int i=0;i<BookList.length;i++) { if(BookList[i]!=null) { if(book_name.equals(BookList[i].getBook_name())) { flag = true; //避免flag在发生变化,已经证明存在了,就可以了 break; } else { //System.out.println("此书不存在,请重新选择操作:"); 这里输出信息就不合适,会多次输出 目的只是判断是否存在 flag = false; } } } return flag; } /** * 方法10:根据书名返回一本书 * returnOneBookByBookName() */ public Book returnOneBookByBookName(String book_name) { for(int i=0;i<BookList.length;i++) { if(BookList[i]!=null) { if(book_name.equals(BookList[i].getBook_name())) { return BookList[i]; } } } //因为这个方法是建立在一定有这本书的基础上,所以其他情况可以返回null return null; } /** * 方法11:获取一本书名 * getOneBookName() */ public String getOneBookName(String info) { //这里不要写死,灵活变化,删除提示输入要删除的图书名称;修改类似 //System.out.println("请输入图书名称:"); System.out.println(info); return new Scanner(System.in).next(); } /** * 方法12:编辑图书 */ @Override public void editBook(String book_name) { //在书本存在的前提下执行操作 if(bms.isBookNameExist(book_name)) { System.out.println("请输入修改后的价格:"); double book_price = new Scanner(System.in).nextDouble(); System.out.println("请输入修改后的作者:"); String book_author = new Scanner(System.in).next(); //输出图书信息 System.out.println("****************************待修改图书信息**********************************"); System.out.println("图书名称\t\t\t价格\t\t作者"); System.out.println(book_name+"\t\t"+book_price+"\t\t"+book_author); System.out.println("***********************************************************************"); //确认是否修改 if(bms.isContinue("请核对修改信息,确认修改(y/n)?", "恭喜!修改成功!","未执行修改操作,请选择其他操作:")) { //执行修改操作 for(int i=0;i<BookList.length;i++) { if(BookList[i]!=null) { if(book_name.equals(BookList[i].getBook_name())) { BookList[i].setBook_price(book_price); BookList[i].setBook_author(book_author); //System.out.println("恭喜您!修改成功! *.* "); } } } }else { //已处理 } }else { System.out.println("书本不存在,请选择其他操作:"); } } /** * 方法13:购买图书 */ @Override public void buyBook() { //处理NumberFormatException try { System.out.println("请输入购买图书序号【购买多本请以英文逗号分隔】:"); String strId = new Scanner(System.in).next(); String[] strIds = strId.split(","); //在图书存在的前提下在把图书清空并且在输出购买清单 if(isBookExitByBookIds(strId)) { //遍历判断id是否相等,如果相等,就设置为空 for(int i=0;i<BookList.length;i++) { if(BookList[i]!=null) { for(int j=0;j<strIds.length;j++) { if(BookList[i].getBook_id()==Integer.parseInt(strIds[j])) { buiedBooks[i] = BookList[i]; totalPrice +=BookList[i].getBook_price(); BookList[i] = null; //确保只输出一次 if(j==(strIds.length-1)) { System.out.println("恭喜您!购买成功! *.* "); } //这里一定要跳出内存循环,否则空指针 break; } } } } //输出购买信息 System.out.println("****************************购买图书清单**********************************"); System.out.println("图书编号\t图书名称\t\t\t价格\t\t作者\t总金额"); for(int i=0;i<buiedBooks.length;i++) { if(buiedBooks[i]!=null) { System.out.println(buiedBooks[i].getBook_id()+"\t"+buiedBooks[i].getBook_name()+"\t\t"+buiedBooks[i].getBook_price()+"\t\t"+buiedBooks[i].getBook_author()); } } //格式化总金额 DecimalFormat df = new DecimalFormat("#.00"); System.out.println("\t\t\t\t\t\t\t"+df.format(totalPrice)+"元"); System.out.println("***********************************************************************"); }else { System.out.println("该图书不存在,请重新选择操作:"); } }catch(NumberFormatException e) { System.out.println("输入有误,请重新操作:"); } } /** * 方法14:根据图书Id判断图书是否存在 * IsBookExistByBookIds() * 单本、多本都可以搞定! */ public boolean isBookExitByBookIds(String strId) { boolean flag = false; String[] strIds = strId.split(","); for(int i=0;i<BookList.length;i++) { if(BookList[i]!=null) { for(int j=0;j<strIds.length;j++) { if(BookList[i].getBook_id()==Integer.parseInt(strIds[j])) { flag = true; //中断循环 break; }else { //这里不要在做任何判断,这个很重要;否则又判断回去了,感谢Debug模式,不要太自信自己的判断 //flag = false; } } } } //如果2id存在,1本不存在,也视为不存在处理;但是后台已经清空 return flag; } //============================================================================== //以下新增用户权限验证功能 /** * 方法15:验证管理员权限 * isAdmin() */ public boolean isAdmin(User user) { if("Meice".equals(user.getUsername())&&"123".equals(user.getPassword())) { System.out.println("欢迎管理员【"+user.getUsername()+"】:"); return true; }else { System.out.println("遗憾,您权限不足,请求助管理员【小美】童鞋吧!"); return false; } } /** * 方法16:得到一个用户 * getOneUser() * info类似:此操作需要管理员权限,请输入用户名: * 还可以类似:空串 */ public User getOneUser(String info) { System.out.println(info); String username = new Scanner(System.in).next(); System.out.println("请输入用户密码:"); String password = new Scanner(System.in).next(); User user = new User(getUsersCount(), username, password); return user; } /** * 方法17:获取用户数量 * getUsersCount() * 便于user_id自增 */ @Test public int getUsersCount() { int usersCount = 0; for(int i=0;i<UserList.length;i++) { if(UserList[i]!=null) { usersCount ++; } } return usersCount; } /** * 方法18:添加注册用户 * */ public void addUser(User user) { //遍历数组,把数组添加进去 for(int i=0;i<UserList.length;i++) { //第一个null值处理下 if(getUsersCount()==0) { //输出注册用户信息 System.out.println("********************待注册用户**************************"); System.out.println("用户编号\t\t用户名\t\t用户密码"); System.out.println(user.getUser_id()+"\t\t"+user.getUsername()+"\t\t"+user.getPassword()); System.out.println("******************************************************"); //让用户确认是否注册 if(isContinue("请核对以上待注册信息,确认注册(y/n)?","恭喜您!热烈您成为图书管理系统【第一个用户】!!! *.*", "未执行新增操作,请选择其他操作:")) { UserList[0]=user; //System.out.println("恭喜您!热烈您成为图书管理系统【第一个用户】!!! *.* "); }else { break; } }else { if(UserList[i]!=null) { //输出注册用户信息 System.out.println("********************待注册用户**************************"); System.out.println("用户编号\t\t用户名\t\t用户密码"); System.out.println(user.getUser_id()+"\t\t"+user.getUsername()+"\t\t"+user.getPassword()); System.out.println("******************************************************"); //让用户确认是否注册 if(isContinue("请核对以上待注册信息,确认注册(y/n)?","恭喜您!注册成功! *.* ", "未执行注册操作,请选择其他操作:")) { UserList[getUsersCount()] = user; // System.out.println("恭喜您!注册成功! *.* "); //添加以后,马上终止,否则要么最后越界,要么Null值全部添加为了同一个用户 break; }else { break; } } } } } /** * 方法19:判断用户是否存在 * 单个用户 * isOneUserExist() */ public boolean isOneUserExist(User user) { for(int i=0;i<UserList.length;i++) { if(UserList[i]!=null) { if(user.getUsername().equals(UserList[i].getUsername()) &&user.getPassword().equals(UserList[i].getPassword()) ) { return true; } } } return false; } /** * 方法20:查看用户列表 * showUsers *后台查看,也需要权限验证 */ public void showUsers() { //如果有用户在显示,否则提示暂无用户” System.out.println("********************用户列表*****************************"); if(getUsersCount()>0) { //遍历显示用户 System.out.println("用户编号\t\t用户名\t\t用户密码"); for(int i=0;i<UserList.length;i++) { if(UserList[i]!=null) { System.out.println(UserList[i].getUser_id()+"\t\t"+UserList[i].getUsername()+"\t\t"+ UserList[i].getPassword()); } } }else { System.out.println("暂无用户\n请先【增加】几个\"用户\"吧!"); } System.out.println("******************************************************"); } /** * 方法21:修改用户 */ public void updateUser(String user_id) { //逻辑类似删除用户 不过编辑是一次编辑一个 //有用户的前提下执行操作 if(getUsersCount()>=1) { //确保用户存在前提下执行 if(isOneUserIdExist(user_id)) { //输出修改后的信息 System.out.println("请输出修改后的用户名:"); String username= new Scanner(System.in).next(); System.out.println("请输入修改后的密码:"); String password = new Scanner(System.in).next(); System.out.println("********************待修改用户***************************"); System.out.println("用户编号\t\t用户名\t\t用户密码"); System.out.println(user_id+"\t\t"+username+"\t\t"+password); System.out.println("******************************************************"); //根据用户选择,是否执行修改操作 if(isContinue("请核对以上待修改信息,确认修改(y/n)?", "","未执行修改操作,请选择其他操作:")) { for(int i=0;i<UserList.length;i++) { if(UserList[i]!=null) { if(UserList[i].getUser_id() == Integer.parseInt(user_id)) { UserList[i].setUsername(username); UserList[i].setPassword(password); System.out.println("恭喜您!修改成功! *.* "); } } } }else { } }else { System.out.println("用户不存在,请选择其他操作:"); } } } /** * 方法22:判断单个用户是否存在 * IsOneUserExist() */ public boolean isOneUserIdExist(String user_id) { //处理NumberFormatException try { int user_id2 = Integer.parseInt(user_id); for(int i=0;i<UserList.length;i++) { if(UserList[i]!=null) { if(UserList[i].getUser_id()==user_id2) { return true; } } } }catch(NumberFormatException e) { //System.out.println("输入格式有误,请重新选择操作:"); } return false; } /** * 方法23:删除用户 */ public void delUser(String user_id) { String[] user_ids = user_id.split(","); //输出用户待删除信息 //首先要有用户 if(getUsersCount()>=1) { //其次user_id存在在输出待删除信息 if(isOneUserIdExist(user_id)) { System.out.println("********************待删除用户**************************"); System.out.println("用户编号\t\t用户名\t\t用户密码"); for(int i=0;i<UserList.length;i++) { if(UserList[i]!=null) { for(int j=0;j<user_ids.length;j++) { if(UserList[i].getUser_id()==Integer.parseInt(user_ids[j])) { System.out.println(UserList[i].getUser_id()+"\t\t"+UserList[i].getUsername()+"\t\t"+UserList[i].getPassword()); } } } } System.out.println("******************************************************"); //用户确认是否执行删除操作 if(isContinue("请核对删除信息,确认删除(y/n)?","", "未执行删除操作,请选择其他操作:")) { //执行删除操作 for(int i=0;i<UserList.length;i++) { if(UserList[i]!=null) { for(int j=0;j<user_ids.length;j++) { if(UserList[i].getUser_id()==Integer.parseInt(user_ids[j])) { //存进待删除列表 waitDelUserList[i] = UserList[i]; UserList[i] = null; //确保只输出一次 if(j==user_ids.length-1) { System.out.println("恭喜您!删除成功! *.* "); } //跳出内存循环 break; } } } } }else { //不做处理 } }else { System.out.println("用户不存在奥!请选择其他操作:"); } } } /** * 方法24:获取用户输入user_id * getUserIds() * 用户输入单个字符或者连续输入多个(在删除的时候)都可以 */ public String getUserIds(String info) { //必须在有用户的前提下再执行: if(getUsersCount()>=1) { System.out.println(info); //处理NumberFormatException try { return new Scanner(System.in).next(); }catch(NumberFormatException e) { System.out.println("输入格式有误:请重新输入用户编号:"); try { return new Scanner(System.in).next(); }catch(NumberFormatException e2) { System.out.println("连续多次输入有误,请重新选择:"); return ""; } } }else { return ""; } } /** * 问题: * 1.Exception in thread "main" java.util.InputMismatchException——try catch 多个; * 2.Exception in thread "main" java.lang.NumberFormatException:购买图书,出现中文逗号或者其他 ——try catch * 3.图书售罄提示 * 4.根据多个Id,判断图书是否存在,还有bug,不准确 * 5.如果管理员忘记密码,可以初始化一下(当然直接改代码就可以了) */}
六、总结
1、在下不能只顾着自己发表博客,记录是好习惯,更重要的是应该多看看同类型的文章,快速借鉴学习主题差不多的文章的优点,这样成长才更快;
2、博客还是时断时续的,我希望博客不要停,这是我的一项有着战略意义的习惯;
3、我应该有更快、更高、更强的意志和决心,这个冬天真冷。上海的冬天真冷。
阅读全文
0 0
- JavaCore-OOP-4-图书管理系统(完善版V2)
- JavaCore-OOP-3-图书管理系统(完善版)
- JavaCore-OOP-2-图书管理系统(商品管理升级版)
- 里诺图书管理系统 v2.34官方版
- ASP.NET 图书管理系统(4)
- JavaCore-OOP-1-最最基础的商品管理
- JavaCore-OOP-5-简易的【学生信息管理系统】
- 图书管理系统数据库版
- 图书管理系统(java)
- 图书管理系统(Java)
- 求助(图书管理系统)
- 图书管理系统(ssh2)
- 图书管理系统(数组)
- 图书管理系统(链表)
- (linux系统)图书管理系统
- 微信小程序之图书管理系统(wepy版)
- Java swing实现图书管理系统(高级版)
- 实习生管理系统(寒假完善)
- OCR开源库(文本区域定位和文本识别):github
- 1373 n阶幻方矩阵验证(数组)
- Ubuntu下嵌入式Linux基础开发环境搭建
- 计算机视觉-高斯滤波(二)
- 用fgetc和fputc把一个文件拷贝到另外一个文件
- JavaCore-OOP-4-图书管理系统(完善版V2)
- 输出100内所含5或5的倍数的值
- angular ng-repeat 命令 数组 重复值 出错
- 自定义类型部分知识
- git for windows
- Linux 使用rpm方式安装最新mysql(5.7.16)步骤以及常见问题解决
- Read-Write Lock Pattern
- Linux 系统目录结构
- Iis7.0 cgi解析漏洞复现