Java课程设计—— 图书管理系统

article/2025/10/11 0:58:12

1系统需求分析

1.1功能需求分析

本课题根据图书信息管理综合分析,便出于方便管理考虑,将图书信息管理系统的功能总结起来,共需要实现以下几个方面功能:

1.1.1管理图书信息

管理所有图书的基本信息,对图书信息的操作包括添加、修改、删除等;可以根据各种条件查询出需要的信息,比如修改,可以通过图书书本号查询出该书的基本信息,然后通过对需要修改项进行修改并保存修改后的结果存入数据库的图书表中。

1.1.2图书管理员信息

管理员所有的基本信息,包括对书本信息的添加、修改、删除等操作;可以根据各种条件查询出需要的信息,并对相应的信息进行操作。比如修改和删除,可以通过管理员的工号查询出管理员的相应信息,对相应的信息进行修改、删除操作。

1.1.3注册模块

首先用户需先注册,然后将注册的信息存储在数据库中,完成注册功能模块,后可以访问本系统.

1.1.4登录模块

       用户根据数据库中注册的信息进行登录,首先输入的信息会和数据库中的信息进行匹配,若用户名密码相同,则登录成功,否则登录失败,需重新输入信息.

1.1.5模块总结

通过以上功能的设计与实现,并实现图书信息管理系统的基本功能。当然在实际的图书信息管理系统中,其功能要比本课题的多的多,也复杂的多,本课题仅以比较简单易懂的方式介绍给读者—一个图书管理系统的设计与实现的流程。从而让读者明白一个项目开发中需要做的工作,并在今后的工作中能遇到相关问题能知道如何解决。

1.2用到的技术

该系统的开发运用了JAVA语言,后端技术主要运用了JAVA中的JSP技术,Servlet技术,JDBC技术,以及tomcat服务器,前端技术主要运用了HTML,CSS,JavaScript技术,以及运用了当下最火的前端框架BOOTSTARP3框架,完成了整个系统的开发.

2 图书信息管理系统设计

2.1数据模型分析与设计

数据库模型描述了在数据库中结构化和操纵数据的方法,模型的结构部分规定了数据如何被描述(例如树、表等);模型的操纵部分规定了数据的添加、删除、显示、维护、打印、查找、选择、排序和更新等操作。数据库模型的分类:分层模型、关系模型、网络模型和对象模型。

本课题选择的关系模型,关系模型是目前最重要的一种数据模型。关系数据库系统采用关系模型作为数据的组织方式。关系数据模型具有下列优点:

◆关系模型与非关系模型不同,它是建立在严格的数学概念的基础上的。

◆关系模型的概念单一。无论实体还是实体之间的联系都用关系表示。对数据的检索结构也是关系(即表)。所以其数据结构简单、清晰,拥护易懂易用。

◆关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。

所以,关系数据模型诞生以后发展迅速,深受拥护的喜爱,这也是本课题选取关系数据模型的原因。

当然,关系数据模型也有缺点,其中最主要的缺点是,由于存取路径对用户透明,查询效率往往不如非关系数据模型。因此为了提高性能,必须对用户的查询请求进行优化,增加了开发数据库管理系统的难度。

本课题的关系数据模型的数据结构可分为一个表来表示:图书信息表

图书信息表用于记录书本的基本信息,如表 3-1;图书信息表用于记录书本的基本信息,图3.1图书信息E-R图;如下图。

 

表2-1图书信息表

 

图2.1图书信息E-R图

2.2结构设计与结构功能图

2.2.1 结构设计

根据对系统进行需求分析,本系统将分为4个模块:

◆书本管理

管理书本基本信息,包括每本书信息的添加、修改、删除以及整套书信息的添加。

◆图书管理员

图书管理员的基本信息,包括管理员的添加、修改和删除。

◆登录

管理用户信息,包括用户的登录存储,以及从数据库中获取内容来进行匹配登录.

◆注册

将用户的注册信息存储到数据库中

2.2.2功能结构图

 

3系统实现

该系统由6个模块构成,包括图书管理系统主界面模块、图书信息管理模块、管理员信息管理模块、登录注册管理模块、信息查询模块和数据操作模块。下面分别加以叙述:

3.4图书管理系统主界面模块

图书管理系统主界面模块运用shouye.jsp文件来实现。Shouye.jsp文件是图书管理系统的主页面,其中包含了各个功能模块的URL,以及主页面运用的各个前端样式,从而生成了图书管理系统的界面,如图4.1所示。shouye.jsp页面将所有功能集中到竖向导航栏中,并通过调用其他模块来实现图书管理系统的各个功能。

 

图3.1图书管理系统主界面

3.2图书信息管理模块

图书信息管理模块主要由HotRoutes_Info 、 Login 、MainJframe 、Registered、UpdateStudentServlet.java ,Registration_Management共计6个文件组成,如图4.2所示。

 

图3.2图书信息管理模块功能结构图

图书信息管理模块的6个文件组成了主界面中的“图书信息管理”菜单的内容,其中包括增加、修改、删除等功能,如图4.3所示。

 

图3.3图书信息管理模块的运行界面

3.3图书管理员模块

图书管理员模块主要由RegistrationInfo_Change 、TouristGroup 、HotRoutes_Info、

3个文件组成,如图3.4所示。

 

图3.4图书管理管理员模块功能结构图

课程信息管理模块中的5个类文件组成了主界面中“教师信息管理”菜单的内容,其中包括增加、修改和删除功能,如图3.5所示。

 

图3.5图书管理员模块运行界面

3.4登录管理模块

登录管理模块主要由Login这个文件组成,如图3.6所示。

 

图3.6登录管理模块功能结构图

登录管理模块中的2个文件组成了主界面中的“登录”菜单的内容,其中包括登录注册功能,如图3.7所示。

 

图3.7 登录模块的运行界面

3.5注册模块

注册管理模块主要由Login这1个文件组成,如图3.8所示。

 

注册模块主要包括管理员注册和返回登录功能。注册的运行主截面如图4.9所示。

 

package com.orange.View;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;import com.orange.Controller.Select;
import com.orange.Controller.Updata;
import com.orange.Utils.ValidateUtils;import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.awt.event.ActionEvent;
import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;//添加图书界面public class Registration_Info extends JFrame {private static final long serialVersionUID = 1L;private JTextField nameField;private JTextField ageField;private JTextField IDcardField;private JTextField addressField;private JTextField phoneField;private JTextField touristNumberField;private JTextField accompanyField;private JTextField foodsField;Select select = new Select();Updata updata = new Updata();String name,sex,age,IDcard,address,phone,touristNumber,accompany,foods;public Registration_Info() {super("填写图书信息");this.setBounds(0, 0, 800, 600);this.setLocationRelativeTo(null);//让窗口在屏幕中间显示this.setResizable(false);//让窗口大小不可改变getContentPane().setLayout(null);//设置窗口图标Toolkit tk = Toolkit.getDefaultToolkit();Image frameImage=tk.createImage("img/logo.png"); this.setIconImage(frameImage);//图片添加JLabel jl = new JLabel();jl.setIcon(new ImageIcon("img/brand.png"));//文件路径jl.setBounds(453, 10, 800, 300);this.add(jl);//书名JLabel nameLabel= new JLabel("书   名:");nameLabel.setFont(new Font("微软雅黑", Font.BOLD, 15));nameLabel.setBounds(130, 39, 72, 18);getContentPane().add(nameLabel);nameField = new JTextField();nameField.setBounds(191, 36, 240, 28);getContentPane().add(nameField);nameField.setColumns(10);//编码JLabel ageLabel= new JLabel("编   码:");ageLabel.setFont(new Font("微软雅黑", Font.BOLD, 15));ageLabel.setBounds(130, 138, 72, 18);getContentPane().add(ageLabel);ageField = new JTextField();ageField.setBounds(191, 135, 240, 28);getContentPane().add(ageField);ageField.setColumns(10);//图书代码JLabel IDcardLabel= new JLabel("图书代码:");IDcardLabel.setFont(new Font("微软雅黑", Font.BOLD, 15));IDcardLabel.setBounds(98, 188, 117, 18);getContentPane().add(IDcardLabel);IDcardField = new JTextField();IDcardField.setBounds(191, 185, 240, 28);getContentPane().add(IDcardField);IDcardField.setColumns(10);//作者信息JLabel addressLabel= new JLabel("作者信息:");addressLabel.setFont(new Font("微软雅黑", Font.BOLD, 15));addressLabel.setBounds(113, 234, 100, 18);getContentPane().add(addressLabel);addressField = new JTextField();addressField.setBounds(191, 231, 240, 28);getContentPane().add(addressField);addressField.setColumns(10);//出版方JLabel phoneLabel= new JLabel("出版方:");phoneLabel.setFont(new Font("微软雅黑", Font.BOLD, 15));phoneLabel.setBounds(113, 280, 100, 18);getContentPane().add(phoneLabel);phoneField = new JTextField();phoneField.setBounds(191, 277, 240, 28);getContentPane().add(phoneField);phoneField.setColumns(10);//立即报名JButton submitButton = new JButton("立即添加");submitButton.setFont(new Font("微软雅黑", Font.PLAIN, 18));submitButton.setBounds(320, 495, 150, 33);submitButton.setFocusPainted(false);//去掉按钮周围的焦点框submitButton.setBackground(new Color(78, 110, 242));submitButton.setForeground(Color.WHITE);getContentPane().add(submitButton);submitButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//判断输入的信息是否为空,是否完整if (name.equals("")||sex.equals("")||age.equals("")||IDcard.equals("")||address.equals("")||phone.equals("")||touristNumber.equals("")||accompany.equals("")||foods.equals("")) {JOptionPane.showMessageDialog(null, "请输入完整信息!");} else {//判断身份证号码if (!ValidateUtils.IDcard(IDcard)) {JOptionPane.showMessageDialog(null, "身份证号码错误!请检查!");} else {String i = select.getString("SELECT user_id FROM `user` WHERE user_state='已登录'");String sql = "INSERT INTO `tourist` VALUES (null, '"+i+"', '"+name+"', '"+sex+"', '"+age+"', '"+IDcard+"', '"+address+"', '"+phone+"', '"+touristNumber+"', '"+accompany+"', '"+foods+"');";int result = updata.addData(sql);//判断手机号是否符合格式String regex = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))\\d{8}$";if(phone.length() != 11){JOptionPane.showMessageDialog(null, "手机号应为11位数!");}else{Pattern p = Pattern.compile(regex);Matcher m = p.matcher(phone);boolean isMatch = m.matches();if(!isMatch){JOptionPane.showMessageDialog(null, "您的手机号" + phone + "是错误格式!!!");}else {//判断插入结果if (result>0) {JOptionPane.showMessageDialog(null, "报名成功!");dispose();//关闭窗口} else {JOptionPane.showMessageDialog(null, "报名失败,请与管理员联系!");}}}}}}});}
}

package com.orange.View;import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;import com.orange.Controller.Updata;//注册界面public class Registered extends JFrame {private static final long serialVersionUID = 1L;Updata updata = new Updata();private JTextField userField;//账号private JPasswordField passwordField;//密码private JPasswordField passwordAgainField;//确认密码public Registered() {super.setTitle("西亚斯图书管理系统");this.setBounds(0, 0, 700, 450);//设置大小this.setLocationRelativeTo(null);//让窗口在屏幕中间显示this.setResizable(false);//让窗口大小不可改变getContentPane().setLayout(null);//设置窗口图标Toolkit tk = Toolkit.getDefaultToolkit();Image frameImage=tk.createImage("img/logo.png"); this.setIconImage(frameImage);//logo添加JLabel jl_logo = new JLabel();jl_logo.setIcon(new ImageIcon("img/logo2.png"));//文件路径jl_logo.setBounds(280, 15, 200, 50);this.add(jl_logo);//文本信息显示JLabel font = new JLabel();font.setFont(new Font("微软雅黑", Font.PLAIN, 25));font.setText("欢迎来到西亚斯,请注册使用!");font.setBounds(140, 58, 600, 50);add(font);//账户名JLabel usernameLabel = new JLabel("账 号 名:");usernameLabel.setFont(new Font("微软雅黑", Font.BOLD, 15));usernameLabel.setBounds(165, 138, 72, 18);getContentPane().add(usernameLabel);userField = new JTextField();userField.setBounds(248, 130, 255, 34);getContentPane().add(userField);userField.setColumns(10);//密码JLabel passwordLabel = new JLabel("输入密码:");passwordLabel.setFont(new Font("微软雅黑", Font.BOLD, 15));passwordLabel.setBounds(165, 208, 83, 18);getContentPane().add(passwordLabel);passwordField = new JPasswordField();passwordField.setBounds(248, 267, 255, 34);getContentPane().add(passwordField);passwordField.setColumns(10);JLabel passwordAgainLabel = new JLabel("确认密码:");passwordAgainLabel.setFont(new Font("微软雅黑", Font.BOLD, 15));passwordAgainLabel.setBounds(165, 275, 92, 18);getContentPane().add(passwordAgainLabel);passwordAgainField = new JPasswordField();passwordAgainField.setBounds(248, 200, 255, 34);getContentPane().add(passwordAgainField);passwordAgainField.setColumns(10);//确认注册按钮JButton button = new JButton("确定注册");button.setFont(new Font("微软雅黑", Font.BOLD, 15));button.setBounds(250, 330, 250, 34);button.setFocusPainted(false);//去掉按钮周围的焦点框button.setBackground(new Color(78, 110, 242));button.setForeground(Color.WHITE);getContentPane().add(button);button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {String username = userField.getText();@SuppressWarnings("deprecation")String password = passwordField.getText();@SuppressWarnings("deprecation")String passwordAgain = passwordAgainField.getText();//确认输入的信息是否为空if (username.equals("")&&password.equals("")&&passwordAgain.equals("")) {JOptionPane.showMessageDialog(null, "请完整输入信息!");}else {//判断两次密码是否一致if (password.equals(passwordAgain)) {String sql = "INSERT INTO `user` VALUES (null, '" + username + "', '"+password + "', '游客', '未登录');";int reselt = updata.addData(sql);if (reselt>0) {JOptionPane.showMessageDialog(null, "注册成功,即将跳转到登录页面!");//打开登录界面Login l = new Login();l.setVisible(true);dispose();}else {JOptionPane.showMessageDialog(null, "注册失败,请联系管理员!");}}else {JOptionPane.showMessageDialog(null, "两次输入的密码不一致,请重新输入!");}}}});}}

 

package com.orange.View;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.Timer;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;import com.orange.Controller.Select;
import com.orange.Controller.Updata;import javax.swing.ImageIcon;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;//主界面public class MainJframe extends JFrame {private static final long serialVersionUID = 1L;Select select = new Select();Updata updata = new Updata();Object[] header = {"图书编号","图书名称","图书名称","图书代码","图书简介"};//表头Object[][] data = select.getLineInfo();public MainJframe() {this.setTitle("西亚斯图书管理系统");this.setBounds(0, 0, 1130, 700);this.setLocationRelativeTo(null);//让窗口在屏幕中间显示this.setResizable(false);//让窗口大小不可改变getContentPane().setLayout(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//用户单击窗口的关闭按钮时程序执行的操作//设置窗口图标Toolkit tk = Toolkit.getDefaultToolkit();Image frameImage=tk.createImage("img/logo.png"); this.setIconImage(frameImage);//logo添加JLabel jl_logo = new JLabel();jl_logo.setIcon(new ImageIcon("img/logo2.png"));//文件路径jl_logo.setBounds(950, 6, 200, 50);this.add(jl_logo);//热门图书推荐ImageIcon icon1 = new ImageIcon("img/Icon1.png");JButton searchButton = new JButton("热门图书推荐",icon1);searchButton.setBounds(20, 11, 145, 35);searchButton.setFocusPainted(false);//去掉按钮周围的焦点框searchButton.setContentAreaFilled(false);//设置按钮透明背景searchButton.setFont(new Font("微软雅黑", Font.BOLD, 14));
//		searchButton.setBackground(new Color(255, 153, 41));searchButton.setForeground(Color.black);getContentPane().add(searchButton);searchButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {//显示热门图书界面HotRoutes_Info hr = new HotRoutes_Info();hr.setVisible(true);
//				dispose();关闭旧窗口}});//添加图书ImageIcon icon2 = new ImageIcon("img/Icon2.png");JButton signButton = new JButton("添加图书",icon2);signButton.setBounds(173, 11, 120, 35);signButton.setFocusPainted(false);//去掉按钮周围的焦点框signButton.setContentAreaFilled(false);//设置按钮透明背景signButton.setFont(new Font("微软雅黑", Font.BOLD, 14));
//		signButton.setBackground(new Color(255, 153, 41));signButton.setForeground(Color.black);getContentPane().add(signButton);signButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {//判断当前是否有用户登录String sql = "SELECT COUNT(*) FROM `user` WHERE user_state='已登录'";int reselt = select.getCount(sql);if (reselt>0) {//打开报名界面Registration_Info r = new Registration_Info();r.setVisible(true);} else {JOptionPane.showMessageDialog(null, "请先登录!");//打开登录界面Login l = new Login();l.setVisible(true);
//					dispose();}}});//图书管理按钮ImageIcon icon3 = new ImageIcon("img/Icon3.png");JButton orderButton = new JButton("图书管理",icon3);orderButton.setBounds(300, 11, 125, 35);orderButton.setFocusPainted(false);//去掉按钮周围的焦点框orderButton.setContentAreaFilled(false);//设置按钮透明背景orderButton.setFont(new Font("微软雅黑", Font.BOLD, 14));
//		yhdl.setBackground(new Color(255, 153, 41));orderButton.setForeground(Color.black);getContentPane().add(orderButton);orderButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {//判断当前是否有用户登录String sql = "SELECT COUNT(*) FROM `user` WHERE user_state='已登录'";int reselt = select.getCount(sql);if (reselt>0) {//判断当前登录的用户身份String user_type = select.getString("SELECT user_type FROM `user` WHERE user_state='已登录'");if (user_type.equals("管理员")) {//打开订单管理界面Registration_Management r = new Registration_Management();r.setVisible(true);dispose();}else{JOptionPane.showMessageDialog(null, "当前用户无权限!请登录管理员账号!");}} else {JOptionPane.showMessageDialog(null, "请先登录!");//打开登录界面Login l = new Login();l.setVisible(true);
//					dispose();//关闭旧窗口}}});//用户切换按钮ImageIcon icon4 = new ImageIcon("img/Icon4.png");JButton switchButton = new JButton("用户切换",icon4);switchButton.setBounds(433, 11, 120, 35);switchButton.setFocusPainted(false);//去掉按钮周围的焦点框switchButton.setContentAreaFilled(false);//设置按钮透明背景switchButton.setFont(new Font("微软雅黑", Font.BOLD, 14));
//		switchButton.setBackground(new Color(255, 153, 41));switchButton.setForeground(Color.black);getContentPane().add(switchButton);switchButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {//判断当前是否有用户登录String sql = "SELECT COUNT(*) FROM `user` WHERE user_state='已登录'";int reselt = select.getCount(sql);if (reselt>0) {String i = select.getString("SELECT user_account FROM `user` WHERE user_state='已登录'");int a = JOptionPane.showConfirmDialog(null,"当前已有用户" + "   ”"+ i +"”   " + "登录!是否注销?","注销提示",0,1);if(a == JOptionPane.OK_OPTION){JOptionPane.showMessageDialog(null, "已注销前账户!");updata.addData("UPDATE user SET user_state='未登录' WHERE user_account='"+ i +"';");//打开登录界面Login l = new Login();l.setVisible(true);dispose();//关闭旧窗口}}else {//打开登录界面Login l = new Login();l.setVisible(true);dispose();//关闭旧窗口}}});//添加用户按钮ImageIcon icon5 = new ImageIcon("img/Icon5.png");JButton appendButton = new JButton("添加用户",icon5);appendButton.setBounds(560, 11, 120, 35);appendButton.setFocusPainted(false);//去掉按钮周围的焦点框appendButton.setContentAreaFilled(false);//设置按钮透明背景appendButton.setFont(new Font("微软雅黑", Font.BOLD, 14));
//		appendButton.setBackground(new Color(255, 153, 41));appendButton.setForeground(Color.black);getContentPane().add(appendButton);appendButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {//判断当前是否有用户登录String sql = "SELECT COUNT(*) FROM `user` WHERE user_state='已登录'";int reselt = select.getCount(sql);if (reselt>0) {String i = select.getString("SELECT user_account FROM `user` WHERE user_state='已登录'");
//					JOptionPane.showMessageDialog(null, "当前已有用户"+"   ”"+i+"”   "+"登录!是否注销?");int a = JOptionPane.showConfirmDialog(null,"当前已有用户" + "   ”" + i + "”   " + "登录!是否注销?","注销提示",0,1);if(a == JOptionPane.OK_OPTION){JOptionPane.showMessageDialog(null, "已注销前账户!");updata.addData("UPDATE user SET user_state='未登录' WHERE user_account='" + i + "';");//打开注册界面Registered r = new Registered();r.setVisible(true);//dispose();//打开新窗口的时候关闭旧窗口}}else {//打开注册界面Registered r = new Registered();r.setVisible(true);//dispose();}}});//退出系统按钮ImageIcon icon6 = new ImageIcon("img/Icon6.png");JButton exitButton = new JButton("退出系统",icon6);exitButton.setBounds(687, 11, 120, 35);exitButton.setFocusPainted(false);//去掉按钮周围的焦点框exitButton.setContentAreaFilled(false);//设置按钮透明背景exitButton.setFont(new Font("微软雅黑", Font.BOLD, 14));
//		exitButton.setBackground(new Color(255, 153, 41));exitButton.setForeground(Color.black);getContentPane().add(exitButton);exitButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {int result = JOptionPane.showConfirmDialog(null,"您现在要关闭系统吗?关闭后同时注销账号!","退出提示",0,1);if(result == JOptionPane.OK_OPTION){JOptionPane.showMessageDialog(null, "已退出系统,欢迎下次使用!");updata.addData("UPDATE user SET user_state='未登录';");System.exit(0);}}});//系统帮助按钮ImageIcon icon7 = new ImageIcon("img/Icon7.png");JButton helpButton = new JButton("图书馆帮助",icon7);helpButton.setBounds(815, 11, 140, 35);helpButton.setFocusPainted(false);//去掉按钮周围的焦点框helpButton.setContentAreaFilled(false);//设置按钮透明背景helpButton.setFont(new Font("微软雅黑", Font.BOLD, 14));
//		helpButton.setBackground(new Color(101, 113, 175));helpButton.setForeground(Color.black);getContentPane().add(helpButton);helpButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//打开系统帮助界面About a = new About();a.setVisible(true);}});//当前时间JLabel dqsj = new JLabel("当前时间 :");dqsj.setBounds(825, 70, 85, 35);dqsj.setFont(new Font("微软雅黑", Font.BOLD, 15));dqsj.setForeground(Color.white);getContentPane().add(dqsj);JLabel time1 = new JLabel();time1.setBounds(910, 71, 236, 35);time1.setFont(new Font("微软雅黑", Font.CENTER_BASELINE, 16));time1.setForeground(Color.white);getContentPane().add(time1);this.setTimer(time1);//背景图片添加JLabel jl = new JLabel();jl.setIcon(new ImageIcon("img/timebg.png"));//文件路径jl.setBounds(810, 62, 750, 40);this.add(jl);     //文本信息JLabel massageLabel = new JLabel("西亚斯热门图书借阅推荐");massageLabel.setBounds(20, 65, 252, 35);massageLabel.setFont(new Font("微软雅黑", Font.BOLD, 20));getContentPane().add(massageLabel);//创建表模型DefaultTableModel dt = new DefaultTableModel(data,header){private static final long serialVersionUID = 1L;//设置表格内容不可被编辑public boolean isCellEditable(int row, int column) {return false;//返回true表示能编辑,false表示不能编辑}};JTable jTable=new JTable(dt);//创建表格jTable.getTableHeader().setFont(new Font("微软雅黑", Font.CENTER_BASELINE, 15));// 设置表头名称字体样式jTable.getTableHeader().setForeground(Color.white);// 设置表头名称字体颜色jTable.getTableHeader().setResizingAllowed(false);// 设置不允许手动改变列宽jTable.getTableHeader().setReorderingAllowed(false);//设置表头不允许拖动jTable.getTableHeader().setBackground(new Color(68, 114, 196));//设置表头背景色//设置表头高度Dimension size = jTable.getTableHeader().getPreferredSize();size.height = 40;//设置新的表头高度40jTable.getTableHeader().setPreferredSize(size);//设置行高jTable.setRowHeight(30);//指定每一行的行高50jTable.setFont(new Font("微软雅黑", Font.PLAIN, 14));//设置表格字体//设置表格列宽int[] length = {100 , 200 , 200 , 100 , 400 };//表格的列宽TableColumnModel model0 = jTable.getColumnModel();for (int i = 0 ; i<model0.getColumnCount() ; i++){TableColumn column = model0.getColumn(i);//获取列对象column.setPreferredWidth(length[i]);//设置列宽}int v=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;//水平滚动条int h=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;//垂直滚动条JScrollPane jsp=new JScrollPane(jTable,v,h);//创建滚动容器jsp.setBounds(20, 110, 1070, 530);getContentPane().add(jsp);//设置单元格内容居中显示DefaultTableCellRenderer r = new DefaultTableCellRenderer();   r.setHorizontalAlignment(JLabel.CENTER); jTable.setDefaultRenderer(Object.class, r);}// 设置Timer1000ms实现一次动作 实际是一个线程private void setTimer(JLabel time) {final JLabel varTime = time;Timer timeAction = new Timer(100, new ActionListener() {public void actionPerformed(ActionEvent e) {long timemillis = System.currentTimeMillis();// 转换日期显示格式SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");varTime.setText(df.format(new Date(timemillis)));}});timeAction.start();}
}


http://chatgpt.dhexx.cn/article/kRfyKqNy.shtml

相关文章

用Java实现简易的图书管理系统(超详细)

目录 1.设计背景 2.设计思路 3.模块展示及代码演示 3.1 Book类的实现 3.2 BookList类的实现(书架) 3.3 异常类的实现(OperationException) 3.4 用户类的实现 3.5 操作接口的实现(定义规范) 3.6 操作类的具体实现 3.6.1 增加操作 3.6.2 查找操作 3.6.3 删除操作 3.6…

mysql 数组函数_mysql数组函数知识讲解

MySQL的数组函数有很多种&#xff0c;今天给大家介绍的就是mysql数组中的mysql_fetch_array()函数&#xff0c;mysql_fetch_array()函数的代码编写有什么特点呢&#xff1f; MySQL中有很多功能强大的函数&#xff0c;下面为您介绍的函数mysql_fetch_array()属于MySQL数组函数&a…

MySQL聚合函数

一、聚合函数介绍 1、聚合函数作用于一组数据&#xff0c;并对一组数据返回一个值。 2、聚合函数类型 AVG() SUM() MAX() MIN() COUNT() 3、聚合函数不能嵌套调用。比如不能出现类似“AVG(SUM(字段名称))”形式的调用。 二、AVG和SUM函数 # AVG函数用于求一组数据的平均值&a…

MySql常用函数大全讲解

MySQL数据库中提供了很丰富的函数。MySQL函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数&#xff0c;可以简化用户的操作。例如&#xff0c;字符串连接函数可以很方便的将多个字符串连接在一起。在这一讲中…

MySql统计函数COUNT详解

MySql统计函数COUNT详解 1. COUNT()函数概述2. COUNT()参数说明3. COUNT()判断存在4. COUNT()阿里开发规范 1. COUNT()函数概述 COUNT() 是一个聚合函数&#xff0c;返回指定匹配条件的行数。开发中常用来统计表中数据&#xff0c;全部数据&#xff0c;不为NULL数据&#xff0…

MYSQL窗口函数

文章目录 一、为何使用窗口函数二、什么是窗口函数三、窗口函数如何使用3.1 序号函数3.2 分布函数3.3 前后函数3.4 头尾函数3.5 其他函数3.6 聚类窗口函数 一、为何使用窗口函数 在日常工作中经常会遇到类似这样的需求&#xff1a; 怎么样得到各部门工资排名前N名的员工列表?…

MySQL常见函数

一、单行函数 1.1 字符函数 length(str)&#xff1a;统计字符串的字节数&#xff08;取决于编码方式&#xff0c;utf8汉字3字节&#xff0c;gbk汉字2字节&#xff09;concat(str1, str2)&#xff1a;拼接字符substr/substring(str, n1 [,n2])&#xff1a;切割字符&#xff0c…

MySQL常用函数大全(总结篇)

本篇文章讲解是是MySQL的函数方法&#xff0c;涵盖所有的MySQL常见的方法。下面是本篇文章的目录结构&#xff0c;可以根据自己需求点击右方目录查找&#xff1a; 一、数字函数二、字符串函数三、日期函数四、MySQL高级函数 &#xff08;一&#xff09;数字函数 1、ABS(x) 返…

MySQL常用函数大全(实例演示)

此博客主要包括如下类型函数&#xff1a; 一、数字函数 二、字符串函数 三、日期函数 四、MySQL高级函数 一、数字函数 1、ABS(x) 返回x的绝对值 SELECT ABS(-1); 结果&#xff1a; 2、AVG(expression) 返回一个表达式的平均值&#xff0c;expression 是一个字段 SELE…

MySql常用函数大全

MySql常用函数大全 MySQL数据库中提供了很丰富的函数。MySQL函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数&#xff0c;可以简化用户的操作。例如&#xff0c;字符串连接函数可以很方便的将多个字符串连接…

MySQL函数大全

目录 &#xff08;一&#xff09;字符函数 ①length(str)函数 ②concat(str1,str2,...)函数 ③upper(str)、lower(str)函数 ④substr(str,start,len)函数 ⑤instr(str,要查找的子串)函数 ⑥trim(str)函数 ⑦lpad(str,len,填充字符)、rpad(str,len,填充字符)函数 ⑧rep…

MySQL函数(经典收藏)

MySQL函数&#xff08;经典收藏&#xff09; MySQL函数 MySQL数据库提供了很多函数包括&#xff1a; 数学函数&#xff1b;字符串函数&#xff1b;日期和时间函数&#xff1b;条件判断函数&#xff1b;系统信息函数&#xff1b;加密函数&#xff1b;格式化函数&#xff1b; …

MySql常用函数大全(详细)

一、数学函数 &#xff08;1&#xff09;ABS&#xff08;x&#xff09;返回绝对值&#xff1b;例&#xff1a; &#xff08;2&#xff09;PI&#xff08;&#xff09;返回圆周率的函数&#xff0c;默认值为小数后六位&#xff1b;例&#xff1a; &#xff08;3&#xff09;求函…

齐全且实用的MySQL函数使用大全

目录 一、MySQL函数介绍 二、MySQL函数分类 &#xff08;一&#xff09;单行函数 ①字符串函数 ②数学函数 ③日期函数 ④流程控制函数 ⑤系统信息函数 ⑥其他函数 &#xff08;二&#xff09;聚合函数 三、函数使用示例 &#xff08;一&#xff09;字符函数 ①le…

sql注入的小工具介绍

sql注入的小工具介绍 啊D注入工具&#xff1a; pangolin&#xff08;穿山甲&#xff09; 穿山甲&#xff1b;Pangolin&#xff08;中文译名为穿山甲&#xff09;一款帮助渗透测试人员进行Sql注入测试的安全工具&#xff0c;是深圳宇造诺赛科技有限公司(Nosec)旗下的网站安全测…

sql注入检测工具 mysql_SQL注入测试

简介 SQL 注入是一种专门针对SQL语句的攻击方式。通过把SQL命令插入到web表单提交、输入域名或者页面请求的查询字符串中&#xff0c;利用现有的程序&#xff0c;来非法获取后台的数据库中的信息。在web的测试中涉及到的会比较多些。 注入原理 存在注入的原因是后台在编写程序时…

mysql注入扫描网站漏洞工具_网站安全检测,高手必备几款SQL注入工具

按照百度说法&#xff0c;SQL注入是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串&#xff0c;最终达到欺骗服务器执行恶意的SQL命令。 利用SQL注入&#xff0c;攻击者可远程利用SQL注入漏洞&#xff0c;窃取用户数据库数据&#xff0c;包括用户名、密码、登…

3-5SQL注入漏洞工具的使用

如果我们要去找出&#xff0c;一个网站中可能存在的所有漏洞&#xff0c;那对于我们而言是相当累的&#xff0c;有时候&#xff0c;我们只能借助于sql注入漏洞的工具&#xff0c;进行检测&#xff0c;检测的工具对我们相当重要&#xff0c;因为他能替代人工和提高效率 我们本篇…

sql注入检测工具 mysql_Java自动化SQL注入测试工具—jSQL Injection v0.5

jSQL是一款轻量级安全测试工具&#xff0c;可以检测SQL注入漏洞。它跨平台(Windows, Linux, Mac OS X, Solaris)、开源且免费。 更新记录 0.5SQL shell Uploader 0.4 Admin page checker and preview Brute forcer (md5 mysql...) Coder (encode decode base64 hex md5...) 0.3…

sql注入工具、检测及手工注入集合

0x01 sqlmap sqlmap是一个开源渗透测试工具&#xff0c;它可以自动检测和利用SQL注入缺陷&#xff0c;并接管数据库服务器。它配备了强大的检测引擎&#xff0c;为最终渗透测试提供了许多细分功能&#xff0c;以及广泛的交换机&#xff0c;从数据库指纹、从数据库获取数据&…