本课题根据图书信息管理综合分析,便出于方便管理考虑,将图书信息管理系统的功能总结起来,共需要实现以下几个方面功能:
管理所有图书的基本信息,对图书信息的操作包括添加、修改、删除等;可以根据各种条件查询出需要的信息,比如修改,可以通过图书书本号查询出该书的基本信息,然后通过对需要修改项进行修改并保存修改后的结果存入数据库的图书表中。
管理员所有的基本信息,包括对书本信息的添加、修改、删除等操作;可以根据各种条件查询出需要的信息,并对相应的信息进行操作。比如修改和删除,可以通过管理员的工号查询出管理员的相应信息,对相应的信息进行修改、删除操作。
首先用户需先注册,然后将注册的信息存储在数据库中,完成注册功能模块,后可以访问本系统.
用户根据数据库中注册的信息进行登录,首先输入的信息会和数据库中的信息进行匹配,若用户名密码相同,则登录成功,否则登录失败,需重新输入信息.
通过以上功能的设计与实现,并实现图书信息管理系统的基本功能。当然在实际的图书信息管理系统中,其功能要比本课题的多的多,也复杂的多,本课题仅以比较简单易懂的方式介绍给读者—一个图书管理系统的设计与实现的流程。从而让读者明白一个项目开发中需要做的工作,并在今后的工作中能遇到相关问题能知道如何解决。
该系统的开发运用了JAVA语言,后端技术主要运用了JAVA中的JSP技术,Servlet技术,JDBC技术,以及tomcat服务器,前端技术主要运用了HTML,CSS,JavaScript技术,以及运用了当下最火的前端框架BOOTSTARP3框架,完成了整个系统的开发.
数据库模型描述了在数据库中结构化和操纵数据的方法,模型的结构部分规定了数据如何被描述(例如树、表等);模型的操纵部分规定了数据的添加、删除、显示、维护、打印、查找、选择、排序和更新等操作。数据库模型的分类:分层模型、关系模型、网络模型和对象模型。
本课题选择的关系模型,关系模型是目前最重要的一种数据模型。关系数据库系统采用关系模型作为数据的组织方式。关系数据模型具有下列优点:
◆关系模型与非关系模型不同,它是建立在严格的数学概念的基础上的。
◆关系模型的概念单一。无论实体还是实体之间的联系都用关系表示。对数据的检索结构也是关系(即表)。所以其数据结构简单、清晰,拥护易懂易用。
◆关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。
所以,关系数据模型诞生以后发展迅速,深受拥护的喜爱,这也是本课题选取关系数据模型的原因。
当然,关系数据模型也有缺点,其中最主要的缺点是,由于存取路径对用户透明,查询效率往往不如非关系数据模型。因此为了提高性能,必须对用户的查询请求进行优化,增加了开发数据库管理系统的难度。
本课题的关系数据模型的数据结构可分为一个表来表示:图书信息表
图书信息表用于记录书本的基本信息,如表 3-1;图书信息表用于记录书本的基本信息,图3.1图书信息E-R图;如下图。
表2-1图书信息表
图2.1图书信息E-R图
根据对系统进行需求分析,本系统将分为4个模块:
◆书本管理
管理书本基本信息,包括每本书信息的添加、修改、删除以及整套书信息的添加。
◆图书管理员
图书管理员的基本信息,包括管理员的添加、修改和删除。
◆登录
管理用户信息,包括用户的登录存储,以及从数据库中获取内容来进行匹配登录.
◆注册
将用户的注册信息存储到数据库中
该系统由6个模块构成,包括图书管理系统主界面模块、图书信息管理模块、管理员信息管理模块、登录注册管理模块、信息查询模块和数据操作模块。下面分别加以叙述:
图书管理系统主界面模块运用shouye.jsp文件来实现。Shouye.jsp文件是图书管理系统的主页面,其中包含了各个功能模块的URL,以及主页面运用的各个前端样式,从而生成了图书管理系统的界面,如图4.1所示。shouye.jsp页面将所有功能集中到竖向导航栏中,并通过调用其他模块来实现图书管理系统的各个功能。
图3.1图书管理系统主界面
图书信息管理模块主要由HotRoutes_Info 、 Login 、MainJframe 、Registered、UpdateStudentServlet.java ,Registration_Management共计6个文件组成,如图4.2所示。
图3.2图书信息管理模块功能结构图
图书信息管理模块的6个文件组成了主界面中的“图书信息管理”菜单的内容,其中包括增加、修改、删除等功能,如图4.3所示。
图3.3图书信息管理模块的运行界面
图书管理员模块主要由RegistrationInfo_Change 、TouristGroup 、HotRoutes_Info、
这3个文件组成,如图3.4所示。
图3.4图书管理管理员模块功能结构图
课程信息管理模块中的5个类文件组成了主界面中“教师信息管理”菜单的内容,其中包括增加、修改和删除功能,如图3.5所示。
图3.5图书管理员模块运行界面
登录管理模块主要由Login这个文件组成,如图3.6所示。
图3.6登录管理模块功能结构图
登录管理模块中的2个文件组成了主界面中的“登录”菜单的内容,其中包括登录注册功能,如图3.7所示。
图3.7 登录模块的运行界面
注册管理模块主要由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() { @Override public 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;//设置新的表头高度40 jTable.getTableHeader().setPreferredSize(size); //设置行高 jTable.setRowHeight(30);//指定每一行的行高50 jTable.setFont(new Font("微软雅黑", Font.PLAIN, 14));//设置表格字体 //设置表格列宽 int[] length = {100 , 200 , 200 , 100 , 400 };//表格的列宽 TableColumnModel model0 = jTable.getColumnModel(); for (int i = 0 ; i