https://blog.csdn.net/weixin_43206161
**
[欢迎访问JAVA+MySQL做一个图书信息管理系统二次开发文章:点击](https://www.jianshu.com/p/2a9c2d512357)
这里实训报告没有显示全部的代码
**
所属课程名称 JAVA语言程序设计
题 目 图书信息管理系统
分 院 电信分院
专 业 班 级 ********
学 号 ********
学 生 姓 名 ********
指 导 教 师 ********
目录
第三章 引言 3
1.1 系统概述 3
1.2 需求分析 3
1.3 运行环境 3
第四章 概要设计 4
2.1 设计思路 4
2.2 模块功能介绍 4
2.3 模块结构图 4
2.4 程序流程图 5
2.5 功能设计分工 7
第五章 详细设计 8
3.1 book_insert.java 8
3.2 book_change.java 10
第六章 测试与小结 13
4.1程序写好无误,连接mysql,连接成功 13
4.2添加4组数据 14
4.3到数据库看看 17
4.4修改004号的书名庄子为孔子,作者也是庄子为孔子,其它的信息不变 18
4.5再到数据库看看 19
4.6通过图书查询 20
4.7小结 21
第七章 程序清单 23
第八章 参考文献 36
第一章 引言
1.1 系统概述
图书管理系统:调查学校图书馆,设计一个图书管理系统。
图书管理系统具有管理员登陆,图书维护,图书管理和系统维护四个功能模块组成。
1.2 需求分析
图书管理系统对于现代图书馆而言,是能否发挥其教学科研的作用的至关重要技术平台。对于读者和图书管理员来说,是能否方便快速获取信息的关键。所以,图书管理系统应该能够为用户提供充足的信息和快捷方便的操作手段。
1.3 运行环境
在Windows操作系统下运行,基于java开发平台,需要用户安装Jdk运行环境并对class path进行配置操作才能运行。数据库用mysql。
第二章 概要设计
2.1 设计思路
2.1.1管理员打开程序,输入账户和密码,程序对其验证,成功后开启对数据库的连接,并调用主界面类。
2.1.2 主界面类,用户进入此界面,会有三大模块,共计九个子模块供用户选择,在程序中分别对各个模块的按钮添加监听事件,事件下创建对应模块的功能函数/类。
2.1.3 在对应的子模块中,用户对数据进行操作,程序中调用Login.getCon方法获取数据库连接,然后对用户的数据进行操作。
2.2 模块功能介绍
(1) 管理员登陆:验证后台数据库管理员的登陆操作
(2) 图书维护主要是对图书信息(ISBN、书名、作者、价格、出版社、类别、内容简介)进行维护。本模块又分为三个子模块:
◇图书信息录入 ◇图书信息修改 ◇图书信息删除
(3) 图书管理主要是对图书的事件操作。本模块又分为三个子模块:
◇图书借出 ◇图书归还 ◇图书信息查询
(4)系统维护主要对图书系统的用户组进行维护。有以下三个模块:
◇新借记卡登记 ◇图书类别新增 ◇图书作者新增
2.3 模块结构图
2.4 程序流程图
2.5 功能设计分工
第三章 详细设计
3.1 book_insert.java
该模块用于输入图书信息,其中的设计要点主要有:1、为确保图书编号的唯一性,图书编号不能重复;2、输入并保存后,要给出提示信息;3、保存成功后,不得重复保存;4、可以直接让用户继续输入下一个记录
① 设置窗口布局、位置和可见等等,使用了super关键字,调用父类的有参构造方法,还有重要的是this.getContentPane().setLayout(null); 获取窗口的内容窗口,再设置内容窗口的布局是空布局(你自己想怎么放组件就怎么放组件)。然后设置7个文本设置栏,并设置字体、位置等等,使用了JLabel控件,对JFrame添加组件用getContentPane()方法获得JFrame的内容面板,再对其加入组件。
② 关闭窗口和添加成功窗口弹出,都用重写actionPerformed()方法,添加成功窗口还用了JOptionPane.showMessageDialog()方法
③ 这是数据库的连接程序
(—)通过mysql 创建一个数据库,在这里命名为demo,然后建一个Book表
(二)以下是java代码对表Book的操作
1 Book表包括ISBN,Bname,Bprice,Bcomment,Bpublish,Bauthor,Bsort这些信息
2创建Login类,用于数据库的连接
3执行给定 SQL 语句, try {} catch(exception e) ,这是java的异常处理机制,捕捉异常
4、finally语句和close()方法实现关闭连接
catch(Exception e){
e.printStackTrace() ;
}
当try语句中出现异常是时,会执行catch中的语句,java运行时系统会自动将catch括号中的Exception e 初始化,也就是实例化Exception类型的对象。
3.2 book_change.java
①设置窗口布局、位置和可见等等,java的JFrame中使用setTitle()方法设置窗体的标题,还有重要的是this.getContentPane().setLayout(null); 获取窗口的内容窗口,再设置内容窗口的布局是空布局(你自己想怎么放组件就怎么放组件)。然后设置7个文本设置栏,并设置字体、位置等等,使用了JLabel控件,对JFrame添加组件用getContentPane()方法获得JFrame的内容面板,再对其加入组件。还有了setLayout(null)布局函数,add()添加函数
②更改成功窗口和请更改为已有作者或分类窗口弹出,都用重写actionPerformed()方法,添加成功窗口还用了JOptionPane.showMessageDialog()方法
③这是数据库的连接程序
(—)前面book_insert已经在mysql 创建一个数据库demo,和建好了Book表
(二)以下是java代码对表Book的操作
1同样用Login类,用于数据库的连接
2通过String sqlupdate=“UPDATE book SET “;String where=” WHERE ISBN=”+textField.getText();语句以ISBN来找找到那本书进行修改
3执行给定 SQL 语句, try {} catch(exception e) ,这是java的异常处理机制,捕捉异常
4、finally语句和close()方法实现关闭连接
catch(Exception e){
e.printStackTrace() ;
}
当try语句中出现异常是时,会执行catch中的语句,java运行时系统会自动将catch括号中的Exception e 初始化,也就是实例化Exception类型的对象。
5、判断文本框的内容是否为空,不是空就添加更新语句到String,并设置那个标志为1,方便后面的代码执行
if(!textField_1.getText().equals("")) {
if(flag==0)
{ sqlupdate=sqlupdate+“Bname=’”+textField_1.getText()+"’";
flag=1;}
}
第四章 调试分析
1、 调试出现一些语法错误,根据Eclipse本身的改错给纠正的
2、 项目出现!,我点java构建路径,把有错的给移除
3、 mysql连接失败,我重新连接
4、 找不到主类,我百度了,百度给的可能性太多了,我就重新建项目
5、 出现了一堆看不懂的英文,我正好还有另一个版本Eclipse,就换了一个Eclipse
第五章 测试与小结
4.1程序写好无误,连接mysql,连接成功
4.2添加4组数据
提交成功后再次提交,则会:
4.3到数据库看看
数据已添加成功!
4.4修改004号的书名庄子为孔子,作者也是庄子为孔子,其它的信息不变
4.5再到数据库看看
修改成功!
4.6通过图书查询
4.7小结
经过这次课设实训,我们小组做出了java 图书信息管理系统,并且我们为此感到高兴。在此次课设学习过程中,我体会到学习是一个很反复的过程,不断的出现错误,不断的调试,从不断的迷茫到不断的清晰。自己去操作、去调试,这些点点滴滴为我们学习java积累了实践的经验。我在这次的实践中,遇到一些新的问题,用新的解决方法。更为重要的是,我再次体会到了团队合作的重要性,一方面大家有不同的思路,可以交换意见;另一方面,可以提高工作效率。还有,通过这次实训,我学会了eclipse连接到mysql,学到项目文件有!号的处理方法等等。项目实训不是简简单单的你做出了,而是你在这个过程学到了什么。
然后,我觉得把Java学会的关键的点就是坚持练习。有的时候,我感觉有的腰酸背痛,花时间。学习编程语言没有捷径可走,学习Java时每天必须保证一定的打代码量。只有每天反复操作了,经常写代码了,我们在遇到问题时才有一定的思路。欲速则不达,学习编程语言需要一个比较漫长的阶段,不是一下子就可以精通的,它需要积累,需要熟悉。
最后,我学到了一些东西,但觉得自己还远远不够,希望自己在以后学习中继续努力,能够真真正正拥有一门编程语言,对自己今后的发展起到作用。我打算利用寒假的时间,学习java编程思想。总之,在学习java语言的同时,也让我学会了如何来发现问题,如何解决问题,怎样有效的学习等等,相信会对我一生都有帮助。
第六章 程序清单
package windows;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingConstants;
import javax.swing.JTextArea;
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.Font;
@SuppressWarnings("serial")
public class Book_insert extends JFrame {
private JTextArea textArea ;
private JTextArea textArea_1 ;
private JTextArea textArea_2 ;
private JTextArea textArea_3 ;
private JTextArea textArea_4 ;
private JTextArea textArea_5 ;
private JTextArea textArea_6 ;
public Book_insert() {
super("图书添加");
setVisible(true);//设置可见
setBounds(100, 100, 450, 300);//边界
setLocation(330,400);//位置
//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//获取窗口的内容窗口,再设置内容窗口的布局是空布局(你自己想怎么放组件就怎么放组件)。
this.getContentPane().setLayout(null);
//定义一个JLabel类型的变量label,并赋值为"编号:"
JLabel label = new JLabel("\u56FE\u4E66\u540D\u5B57\uFF1A");
label.setFont(new Font("微软雅黑", Font.PLAIN, 12));//字体
label.setHorizontalAlignment(SwingConstants.CENTER);//中心对齐
label.setBounds(35, 78, 71, 15);//设置标签的大小
getContentPane().add(label);//获取内容窗格
textArea = new JTextArea();
textArea.setColumns(10);//文本设置栏
textArea.setBounds(114, 74, 83, 24);
getContentPane().add(textArea);
JLabel label_1 = new JLabel("\u56FE\u4E66\u4F5C\u8005\uFF1A");
label_1.setFont(new Font("微软雅黑", Font.PLAIN, 12));
label_1.setHorizontalAlignment(SwingConstants.CENTER);
label_1.setBounds(35, 122, 71, 15);
getContentPane().add(label_1);
textArea_1 = new JTextArea();
textArea_1.setColumns(10);
textArea_1.setBounds(114, 118, 83, 24);
getContentPane().add(textArea_1);
JLabel label_2 = new JLabel("\u56FE\u4E66\u4EF7\u683C\uFF1A");
label_2.setFont(new Font("微软雅黑", Font.PLAIN, 12));
label_2.setHorizontalAlignment(SwingConstants.CENTER);
label_2.setBounds(35, 163, 71, 15);
getContentPane().add(label_2);
textArea_2 = new JTextArea();
textArea_2.setColumns(10);
textArea_2.setBounds(114, 159, 83, 24);
getContentPane().add(textArea_2);
JLabel lblIsbn = new JLabel("\u4E66\u53F7\uFF08ISBN\uFF09\uFF1A");
lblIsbn.setFont(new Font("微软雅黑", Font.PLAIN, 12));
lblIsbn.setHorizontalAlignment(SwingConstants.CENTER);
lblIsbn.setBounds(10, 36, 96, 15);
getContentPane().add(lblIsbn);
textArea_3 = new JTextArea();
textArea_3.setColumns(10);
textArea_3.setBounds(114, 32, 83, 24);
getContentPane().add(textArea_3);
JLabel label_3 = new JLabel("\u51FA\u7248\u793E\uFF1A");
label_3.setFont(new Font("微软雅黑", Font.PLAIN, 12));
label_3.setHorizontalAlignment(SwingConstants.CENTER);
label_3.setBounds(47, 201, 59, 15);
getContentPane().add(label_3);
textArea_4 = new JTextArea();
textArea_4.setColumns(10);
textArea_4.setBounds(114, 197, 83, 24);
getContentPane().add(textArea_4);
JLabel label_4 = new JLabel("\u5185\u5BB9\u7B80\u4ECB\uFF0850\u5B57\u5185\uFF09\uFF1A");
label_4.setFont(new Font("微软雅黑", Font.PLAIN, 12));
label_4.setHorizontalAlignment(SwingConstants.CENTER);
label_4.setBounds(224, 78, 146, 15);
getContentPane().add(label_4);
JButton button = new JButton("\u63D0\u4EA4");
button.setBounds(231, 197, 84, 23);
getContentPane().add(button);
JButton btnNewButton = new JButton("\u8FD4\u56DE");
btnNewButton.setBounds(332, 197, 77, 23);
getContentPane().add(btnNewButton);
textArea_5 = new JTextArea();
textArea_5.setRows(8);
textArea_5.setBounds(227, 105, 161, 73);
getContentPane().add(textArea_5);
JLabel label_5 = new JLabel(" \u7C7B\u522B\uFF1A");
label_5.setHorizontalAlignment(SwingConstants.LEFT);
label_5.setFont(new Font("微软雅黑", Font.PLAIN, 12));
label_5.setBounds(224, 36, 96, 15);
getContentPane().add(label_5);
textArea_6 = new JTextArea();
textArea_6.setColumns(10);
textArea_6.setBounds(286, 32, 102, 24);
getContentPane().add(textArea_6);
/*关闭窗口*/
btnNewButton.addActionListener(new ActionListener() {//重写actionPerformed()方法
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
setVisible(false);;//不可见
}
});
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(b_insert()){
JOptionPane.showMessageDialog(null,"添加成功啦!!");
}
else {JOptionPane.showMessageDialog(null,"请输入已有作者或分类!!");}
}
});
}
public Boolean b_insert() {
boolean result = false;
Connection conn = null;
try {
conn = Login.getCon(); //建立数据库连接
String sqlInset = "insert into Book(ISBN,Bname,Bprice,Bcomment,Bpublish,Bauthor,Bsort)"
+ "values('"+textArea_3.getText()+"','"+textArea.getText()+"','"+textArea_2.getText()+"','"
+textArea_5.getText()+"','"+textArea_4.getText()+"','"+textArea_1.getText()+"','"
+textArea_6.getText()+"')";
PreparedStatement stmt = conn.prepareStatement(sqlInset); //会抛出异常
int i = stmt.executeUpdate();//执行给定 SQL 语句
if (i == 1) {
result = true;
}
} catch (SQLException e) {
e.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因。
} finally { //finally的用处是不管程序是否出现异常,都要执行finally语句,所以在此处关闭连接
try {
conn.close(); //打开一个Connection连接后,最后一定要调用它的close()方法关闭连接,以释放系统资源及数据库资源
} catch(SQLException e) {
e.printStackTrace();
}
}
return result;
} }
package windows;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.border.LineBorder;
import java.awt.Color;
@SuppressWarnings("serial")
public class Book_change extends JFrame {
private JTextField textField;
private JTextField textField_1;
private JTextField textField_2;
private JTextField textField_3;
private JTextField textField_4;
private JTextField textField_5;
private JTextArea textArea;
/**
* Initialize the contents of the .
*/
public Book_change() {
setTitle("图书修改");
setVisible(true);
setBounds(100, 100, 500, 411);
setLocation(285,400);
setDefaultCloseOperation(JFrame .DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);
JLabel lblNewLabel_2 = new JLabel("\u56FE\u4E66\u4FEE\u6539(\u786E\u8BA4\u4E66\u53F7)\uFF1A");
lblNewLabel_2.setFont(new Font("微软雅黑", Font.BOLD, 16));
lblNewLabel_2.setBounds(23, 10, 156, 29);
getContentPane().add(lblNewLabel_2);
JLabel lblNewLabel = new JLabel("ISBN(\u4E66\u53F7\uFF1A)");
lblNewLabel.setFont(new Font("黑体", Font.PLAIN, 12));
lblNewLabel.setBounds(23, 59, 111, 19);
getContentPane().add(lblNewLabel);
textField = new JTextField();
textField.setBounds(133, 59, 130, 21);
getContentPane().add(textField);
textField.setColumns(10);
JLabel label = new JLabel("\u8BF7\u8F93\u5165\u8981\u4FEE\u6539\u9879\uFF08\u4E0D\u6539\u52A8\u7684\u7559\u767D\uFF09");
label.setFont(new Font("微软雅黑", Font.PLAIN, 14));
label.setBounds(23, 95, 240, 29);
getContentPane().add(label);
JPanel panel = new JPanel();
panel.setBorder(new LineBorder(new Color(0, 0, 0)));
panel.setBounds(23, 122, 451, 210);
getContentPane().add(panel);
panel.setLayout(null);
JLabel label_1 = new JLabel("\u56FE\u4E66\u540D\uFF1A");
label_1.setBounds(22, 24, 63, 19);
label_1.setFont(new Font("微软雅黑", Font.PLAIN, 12));
panel.add(label_1);
textField_1 = new JTextField();
textField_1.setBounds(95, 24, 92, 21);
textField_1.setColumns(10);
panel.add(textField_1);
JLabel label_2 = new JLabel("\u4F5C\u8005\u540D\uFF1A");
label_2.setFont(new Font("微软雅黑", Font.PLAIN, 12));
label_2.setBounds(249, 24, 63, 19);
panel.add(label_2);
textField_2 = new JTextField();
textField_2.setColumns(10);
textField_2.setBounds(322, 24, 92, 21);
panel.add(textField_2);
JLabel label_3 = new JLabel("\u51FA\u7248\u793E\uFF1A");
label_3.setFont(new Font("微软雅黑", Font.PLAIN, 12));
label_3.setBounds(249, 65, 63, 19);
panel.add(label_3);
textField_3 = new JTextField();
textField_3.setColumns(10);
textField_3.setBounds(322, 65, 92, 21);
panel.add(textField_3);
JLabel label_4 = new JLabel("\u56FE\u4E66\u7B80\u4ECB\uFF1A");
label_4.setFont(new Font("微软雅黑", Font.PLAIN, 12));
label_4.setBounds(22, 148, 70, 15);
panel.add(label_4);
JLabel label_5 = new JLabel("\u7C7B\u522B\uFF1A");
label_5.setFont(new Font("微软雅黑", Font.PLAIN, 12));
label_5.setBounds(22, 63, 63, 19);
panel.add(label_5);
textField_4 = new JTextField();
textField_4.setColumns(10);
textField_4.setBounds(95, 63, 92, 21);
panel.add(textField_4);
JLabel label_6 = new JLabel("\u4EF7\u683C\uFF1A");
label_6.setFont(new Font("微软雅黑", Font.PLAIN, 12));
label_6.setBounds(22, 102, 63, 19);
panel.add(label_6);
textField_5 = new JTextField();
textField_5.setColumns(10);
textField_5.setBounds(95, 102, 92, 21);
panel.add(textField_5);
textArea = new JTextArea();
textArea.setRows(3);
textArea.setText("\u8BF7\u8F93\u5165\u7B80\u4ECB\uFF0C50\u5B57\u4EE5\u5185\u3002");
textArea.setBounds(95, 144, 319, 48);
panel.add(textArea);
JButton button = new JButton("\u4FEE\u6539");
button.setIcon(new ImageIcon(Book_change.class.getResource("/images/modify.png")));
button.setBounds(345, 58, 93, 23);
getContentPane().add(button);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(b_change()){
JOptionPane.showMessageDialog(null,"更改成功啦!!");
}
else {JOptionPane.showMessageDialog(null,"请更改为已有作者或分类!!");}
}
});
}
public Boolean b_change() {
boolean result = false;
Connection conn = null;
try {
conn = Login.getCon(); //建立数据库连接
int flag=0;
String sqlupdate="UPDATE book SET ";
String where=" WHERE ISBN="+textField.getText();
if(!textField_1.getText().equals("")) {
if(flag==0)
{ sqlupdate=sqlupdate+"Bname='"+textField_1.getText()+"'";
flag=1;}
}
if(!textField_2.getText().equals("")){
if(flag==0)
{ sqlupdate=sqlupdate+"Bauthor='"+textField_2.getText()+"'";
flag=1;}
else {
sqlupdate=sqlupdate+","+"Bauthor='"+textField_2.getText()+"'";
}
}
if(!textField_3.getText().equals("")){
if(flag==0)
{ sqlupdate=sqlupdate+"Bpublish='"+textField_3.getText()+"'";
flag=1;}
else {
sqlupdate=sqlupdate+","+"Bpublish='"+textField_3.getText()+"'";
}
}
if(!textField_4.getText().equals("")){
if(flag==0)
{ sqlupdate=sqlupdate+"Bsort='"+textField_4.getText()+"'";
flag=1;}
else {
sqlupdate=sqlupdate+","+"Bsort='"+textField_4.getText()+"'";
}
}
if(!textField_5.getText().equals("")){
if(flag==0)
{ sqlupdate=sqlupdate+"Bprice="+textField_5.getText();
flag=1;}
else {
sqlupdate=sqlupdate+","+"Bprice="+textField_5.getText();
}
}
if(!textArea.getText().equals("") && !textArea.getText().equals("请输入简介,50字以内。")){
if(flag==0)
{ sqlupdate=sqlupdate+"Bcomment='"+textArea.getText()+"'";
flag=1;}
else {
sqlupdate=sqlupdate+","+"Bcomment='"+textArea.getText()+"'";
}
}
sqlupdate=sqlupdate+where;
PreparedStatement stmt = conn.prepareStatement(sqlupdate); //会抛出异常
int i = stmt.executeUpdate();
if (i == 1) {
result = true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally { //finally的用处是不管程序是否出现异常,都要执行finally语句,所以在此处关闭连接
try {
conn.close(); //打开一个Connection连接后,最后一定要调用它的close()方法关闭连接,以释放系统资源及数据库资源
} catch(SQLException e) {
e.printStackTrace();
}
}
return result;
} }
第七章 参考文献
[1] 谢希仁. 计算机网络(第五版)[M]. 北京:电子工业出版社,2008年2月
[2] 胡小强 计算机网络[M] 北京:北京邮电大学出版社2005年1月
[3] 苗春义 Java项目开发全程实录 北京:清华大学出版社 2005年7月
[4] 凯S.崔斯特曼 Java核心技术卷1(第10版)北京:机械工业出版社 2017年1月
[5] 齐燕 Java语言图形编程工具的设计及应用[J]. 科技传播,2017年4月
[6] 凯S.崔斯特曼 Java核心技术卷2(第10版)北京:机械工业出版社 2017年5月
[7] 刘志宏《Java程序设计教程》北京: 航空工业出版社, 2010.7
[8] Bruce Eckel《Java编程思想》北京: 机械工业出版社, 2007.6
[9] 任进军《MySQL》北京: 工信和人邮出版社, 2010.7