内容目录:
1. 设计要求
2. 功能分析
设计要求
图形化界面(GUI),编写一个文本文件信息统计软件
(1)显示打开文件的基本信息(文件名、路径、文件大小、最后修改日期)
(2)显示文件内容统计信息(行、字/单词数)
(3)显示文件内容
(4)按照文件大小或最后修改时间排序
(5)按照文件名或者文件内容包含关键字模糊查询
功能模块分析
1. 数据库设计
2. gui设计
3. 数据库连接
4. 数据库相关功能实现
数据库设计
1. 有校园建筑表
校园建筑表 schooladd
CREATE TABLE `schooladd` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key',
`sname` varchar(20) DEFAULT NULL,
`x` int(100) DEFAULT NULL,
`y` int(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
2. 有校园建筑信息表
校园建筑信息表
CREATE TABLE `message` (
`id` int(10) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`message` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
数据库连接
利用jdbc,util和资源文件来连接数据库
JdbcUtil.java如下
package com.datasource.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JdbcUtils {
/**
* 1. 定义成员变量DataSourse
*/
private static DataSource ds;
static {
try {
//1. 加载配置文件
Properties pro = new Properties();
pro.load(JdbcUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
//2.获取DataSource
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取资源
* @return ds.getConnection()
*/
public static Connection getConnection() throws SQLException{
return ds.getConnection();
}
/**
* 释放资源
*/
public static void close(ResultSet rs, Statement stmt, Connection conn){
if (rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 获取连接池方法
* @return ds
*/
public static DataSource getDataSource(){
return ds;
}
}
配置文件druid.properties如下:
使用的时mysql8.0数据库,
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///db5
username=root
password=1234
initialSize=5
maxActive=10
maxWait=3000
数据库功能的实现
通过JdbcTemplate和Jdbc来实现数据库相关功能
JdbcTemplate.java
package com.jdbcTemplate;
import com.datasource.utils.JdbcUtils;
import com.domain.SchoolAdd;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
public class JdbcTemplateDemo {
private static JdbcTemplate template = new JdbcTemplate(JdbcUtils.getDataSource());
/**
* 查询schooladd表中的所有的数据
*/
public static void selectDate1() {
//2.定义sql
String sql = "select * from schooladd ";
//3.执行sql
List<SchoolAdd> list = template.query(sql,new BeanPropertyRowMapper<SchoolAdd>(SchoolAdd.class));
for (SchoolAdd emp:list){
System.out.println(emp);
}
}
/**
* 按id差寻所有数据
*/
public static void selectDateId() {
//定义sql语句
String sql = "select * from schooladd where sname=?";
Scanner scanner = new Scanner(System.in);
System.out.println("Enter the sname :");
String sName = scanner.nextLine();
Map<String, Object> map = template.queryForMap(sql,sName);
System.out.println(map);
scanner.close();
}
/**
* 查询建筑物的坐标
*/
public static double selectAdd(String sName1,String sName2) {
String sql1 = "select x from schooladd where sname=?";
String sql2 = "select y from schooladd where sname=?";
int x1 = template.queryForObject(sql1,Integer.class,sName1);
int y1 = template.queryForObject(sql2,Integer.class,sName1);
int x2 = template.queryForObject(sql1,Integer.class,sName2);
int y2 = template.queryForObject(sql2,Integer.class,sName2);
return Math.sqrt((Math.pow((x1 - x2), 2)+Math.pow((y1-y2), 2)));
}
/**
* 查询简介
* @return 建筑简介
*/
public static String selectMessage(String name) {
String sql = "select message from message where name=?";
return template.queryForObject(sql, String.class,name);
}
}
SchoolAdd.java
package com.domain;
public class SchoolAdd {
private Integer id;
private String sName;
private Integer x;
private Integer y;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getsName() {
return sName;
}
public void setsName(String sName) {
this.sName = sName;
}
public Integer getX() {
return x;
}
public void setX(Integer x) {
this.x = x;
}
public Integer getY() {
return y;
}
public void setY(Integer y) {
this.y = y;
}
@Override
public String toString() {
return "SchoolAdd [id=" + id + ", sName=" + sName + ", x=" + x + ", y=" + y + "]";
}
}
gui的实现
Start.java
package com.gui;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class Start extends JMenuBar{
/**
*开始菜单
*/
private static final long serialVersionUID = 1L;
public Start() {
// TODO Auto-generated constructor stub
add(createFileMenu()); //添加“文件”菜单
add(createEditMenu()); //添加“编辑”菜单
setVisible(true);
}
public static void main(String[] args) {
JFrame frame=new JFrame("菜单栏");
JLabel jlimage = new JLabel();
ImageIcon icon = new ImageIcon("./img/school.jpg");
icon.setImage(icon.getImage().getScaledInstance(540, 713, Image.SCALE_DEFAULT));
jlimage.setIcon(icon);
frame.add(jlimage);
frame.setSize(540,713);
frame.setJMenuBar(new Start());
frame.setVisible(true);
}
//定义“简介”菜单
private JMenu createFileMenu()
{
JMenu menu=new JMenu("简介(F)");
menu.setMnemonic(KeyEvent.VK_F); //设置快速访问符
JMenuItem item=new JMenuItem("学校信息");
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
SchoolMessage.runShowMessage("学校信息");
}
});
menu.add(item);
item=new JMenuItem("格致楼");
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
SchoolMessage.runShowMessage("格致楼");
}
});
menu.add(item);
item=new JMenuItem("机电学院");
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
SchoolMessage.runShowMessage("机电学院");
}
});
menu.add(item);
item=new JMenuItem("田径场");
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
SchoolMessage.runShowMessage("田径场");
}
});
menu.add(item);
menu.addSeparator();
item=new JMenuItem("退出");
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
menu.add(item);
return menu;
}
//定义“编辑”菜单
private JMenu createEditMenu()
{
JMenu menu=new JMenu("查询(E)");
menu.setMnemonic(KeyEvent.VK_E);
JMenuItem item=new JMenuItem("查询建筑信息(U)",KeyEvent.VK_U);
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
SelectMessage.runShowMessage();
}
});
menu.add(item);
menu.addSeparator();
item=new JMenuItem("查询建筑之间的距离(U)",KeyEvent.VK_T);
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
SelectLength.runShowMessage();
}
});
menu.add(item);
return menu;
}
}
SchoolMessage.java
package com.gui;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import com.jdbcTemplate.JdbcTemplateDemo;
public class SchoolMessage {
private static void showMessage(String name) {
JFrame frame = new JFrame("学校信息");
String str = JdbcTemplateDemo.selectMessage(name);
JLabel label = new JLabel(str);
label.setFont(new Font("宋体",1,14));
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setVerticalAlignment(SwingConstants.TOP);
frame.add(label);
frame.setSize(540,713);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
}
public static void runShowMessage(String name) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
showMessage(name);
}
});
}
}
SelectLength.java
测量两地的距离
package com.gui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import com.jdbcTemplate.JdbcTemplateDemo;
public class SelectLength {
private static void showLength() {
JFrame frame = new JFrame("查询建筑物之间的距离");
JPanel panel = new JPanel();
JTextField test3 = new JTextField(4);
JTextField text1 = new JTextField(8);
JTextField text2 = new JTextField(8);
panel.add(new JLabel("建筑物A的名字:"));
panel.add(text1);
panel.add(new JLabel("建筑物b的名字:"));
panel.add(text2);
JButton button = new JButton("查询");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String aString = ""+JdbcTemplateDemo.selectAdd(text1.getText(),text2.getText());
test3.setText(aString);
JOptionPane.showMessageDialog(null, test3);
}
});
panel.add(button);
frame.add(panel);
frame.setSize(540,713);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
}
public static void runShowMessage() {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
showLength();
}
});
}
}
SelectMessage.java
按地名查询地点信息
package com.gui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import com.jdbcTemplate.JdbcTemplateDemo;
public class SelectMessage {
public static void showSelectMessage() {
JFrame frame = new JFrame("查询景点信息");
JPanel panel = new JPanel();
panel.add(new JLabel("输入地点名称"));
JTextField text = new JTextField(8);
panel.add(text);
JButton button = new JButton("查询");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String aString = JdbcTemplateDemo.selectMessage(text.getText());
JOptionPane.showMessageDialog(null, aString);
}
});
panel.add(button);
frame.add(panel);
frame.setSize(540,713);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
}
public static void runShowMessage() {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SelectMessage.showSelectMessage();
}
});
}
}