简易图书借阅管理系统-总结
mybook7.png一、需求分析
image.pngimage.png
二、项目结构图
13333.PNG三、项目概要
项目主题:图书借阅管理系统
项目时间:2018年10月29日—2018年11月3日
项目功能:①用户模块:登录、注册、查看图书信息、借书、还书、修改密码、切换账号;②管理员模块:登录、图书查询(所有图书信息、指定图书ID、指定书名的模糊查询、刷新)、历史借阅记录查询、管理图书(添加图书、图书下架、更新图书、刷新)、管理用户(添加用户、更新用户、刷新)、切换账号。
项目技术实现:
数据库:Mysql
JDBC工具:DBUtils
层与层之间解耦合:工厂设计模式
数据展示控件:JTable
访问数据库的查询方法封装使用技术:泛型,反射机制
四、项目技术要点总结:
①窗体 架构分析: 继承了JFrame
② 窗体的方法:init()
-
窗体中各控件显示出来的方法
-
1.把各个控件实例化
-
2.控件组装起来,大的套小的,里面先装,再到外面
private void init() { }
③设置字体,字体大小:lab控件.setFont(new Font("幼圆", Font.PLAIN, 48));
④为按钮注册事件侦听器
private void registerActionListener() {
button_login.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
代码块
}
⑥登录功能:
-
1.获取用户输入的用户名和密码
-
2.进行非空判断,如果为空则提示用户输入,并程序返回
-
3.如果都不为空,那么调用底层代码访问数据库查询账户信息是否存在,如存在则登 录;不存在则登录失败,提示用户。
底层代码dao层:view层要先调用service层
UsersDao usersDao=new UsersDaoImpl();//不可以new UsersDao(),要new接口 。
⑦注册功能:
-
1.获取用户输入的用户名和密码
-
2.进行非空判断,如果为空则提示用户输入,并程序返回
-
3.如果都不为空,那么添加到底层代码中去?
-
4.注册成功,返回登录界面
⑧网格布局、方位布局
new BorderLayout()?给大容器添加方位布局---东西南北的
- GridLayout是网格布局
⑨修改密码(暂时缺少与之前代码相比较的判断!!!!)
⑩给table增加事件侦听器
//给table控件加事件监听器
table.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseClicked(MouseEvent e) {
/**
* 鼠标点击:选定的行
* table.getSelectedRow();---得到的是行的索引
*/
int row=table.getSelectedRow();
System.out.println(row);
book_id=(Integer)table.getValueAt(row, 0);
System.out.println("book_id:"+book_id);
}
});
⒒数据显示模型-----------------适配器模式
/**
* 内部类:定义数据模型
*/
private class BookDataModel implements TableModel{
/**
* 我的数据来自于集合,定义一个私有的List集合
* List<Book> list
* list是一个属性
*/
private List<Book> list;
/**
* 给属性list赋值的方法setList()
*
*/
public void setList(List<Book> list) {
this.list=list;
}
/**
* 下面的方法是从BookDataModel实现类中创建出来的
*/
@Override
public int getRowCount() {
//得到行数
return list.size();
}
@Override
public int getColumnCount() {
return 4;//写死,4列
}
@Override
public String getColumnName(int columnIndex) {
//指定表格表头部分每列的名称
if(columnIndex==0) {
return "图书编号";
}else if(columnIndex==1) {
return "图书名称";
}else if(columnIndex==2) {
return "借阅次数";
}else if(columnIndex==3) {
return "是否可借";
}else {
return "出错";
}
}
@Override
public Class<?> getColumnClass(int columnIndex) {
//得到列的数据类型,我们都返回String,字符串
return String.class;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
//对单元格编辑,不可编辑
return false;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
/**
* 非常重要,指定表格中某行某列的值,如果不写,表格中看不到数据
* rowIndex行号
*
*/
Book book=list.get(rowIndex);
if(columnIndex==0) {
return book.getBook_id();
}else if(columnIndex==1) {
return book.getBook_name();
}else if(columnIndex==2) {
return book.getBook_count();
}else if(columnIndex==3) {
//把数字转换成字符串
return (book.getStatus()==1)?"可借":"不可借";
}else {
return "出错";
}
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
}
@Override
public void addTableModelListener(TableModelListener l) {
}
@Override
public void removeTableModelListener(TableModelListener l) {
}
}
12.把数字转换成字符串
return (book.getStatus()==1)?"可借":"不可借";
五、收获
通过一个星期的项目经历,我完成了JavaSe的项目,第一次做项目,态度认真,比较积极。说说开始的想法吧:看了老师发的ppt需求分析,我分别整理了用户、管理员他们对应的功能,再从用户使用一个系统的角度出发,加上老师带着我们完成了用户的一些功能模块,仿照代码,就实现了其他的功能模块,当中肯定遇到很多的小bug的,怎么办呢?有异常,就找异常,处理异常,Debug就好了,不行就问百度,或者问其他的同学。其中有一些功能的实现有参考谭伟亮的“更新”,更改密码的参考了林学亮同学,等。周末做的更新功能,似乎是我比较满意的一个地方了,可以把信息显示出来,用户体验效果较好,其中添加了“刷新”的功能,也就是查询,不用切换屏幕即可看到变化,让用户使用方便。总的来说,就是考虑的比较周到,功能方面比较全面。因为我记住了廖老师的一句话:“你严格要求自己,严格要求自己的代码,以后会有帮助的。”
六、不足之处
1、界面结构不够美观
2、完成时间较长
3、代码能力还需要加强
4、缺乏创新型的想法
七、改进
针对于不足之处,会相对应的去努力,一步一步的敲好代码,争取向高薪工作靠齐。不骄傲,不气馁,继续加油。
网友评论