目录
一、作业要求:
1、制作一个用户身份验证的窗口,身份信息存储在数据库中,采用jdbc技术完成Java版的应用系统登录窗口的设计与制作。
2、每个班级刻录一张光盘,光盘封面写上班级信息、课程信息、指导老师姓名,如:2018计算机1班《Java实训作业》,指导老师:谢祥选。
3、在光盘上建立一个【班级】目录,在班级目录下再以【学号_姓名】方式创建学生目录,班级和学生目录请使用汉字中括符(【】)括起来,学生目录中的学号与姓名之间的连接符为英文的下划线(_),不是减号(-)。
4、把要上交的作品的项目根目录或项目工作空间目录完整的复制到学生自已的文件夹中,上交的作业中的项目目录不能用中括符(【】)括起来,必须保留开发时的原始目录结构与名称。
上交的作品光盘目录结构如下:
光盘F:\
|----【18计算机1班】
|----【20180324_张三丰】
|----LoginFrame
|----.idea
|----out
|----src
|----MyNotepad
|----.idea
|----out
|----src
|----20180325_李四光
|----MyCalculator
|----.idea
|----out
|----src
|----MyNotepad
|----.idea
|----out
|----src
|----20180368_小宇飞刀
|----LoginFrame
|----.idea
|----out
|----src
|----MyNotepad
|----.idea
|----out
|----src
……
二、知识要点分析:
1、创建数据库和表
任选mysql、SQLServer数据库管理系统之一,创建一个名为“test_db”数据库,并在表中创建以下操作员表,操作员表的表名为“czy”,表关系为:czy(userId,userName,userPwd,regDate)
2、录入操作员信息
在“czy”表中至少要录入两个操作员的信息,一位是系统管理--admin,为方便评分验证,请把admin的密码设置为123456;另一位操作员设置为学生本人,userId为本人的学号,userName为学生姓名,密码设置为6个8,比如下图表中的记录:
3、采用jdbc连接数据库,编写一个操作数据库的类,并在其中编写一个验证操作员身份的方法,如:
public static bolean checkUser(String userId,String userPwd){
...
}
4、设计一个用户登录的GUI窗口,
如下图:
5、完成用户登录认证的功能。
如果验证成功,给出如下提示:
如果验证失败,给出如下提示:
三、参考代码:
1、数据库操作通用类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class DbOperator {
private static String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static String url = "jdbc:sqlserver://172.18.4.13:1433;DatabaseName=test_db";
private static String dbUser = "admin";
private static String dbPwd = "123456";
private static Connection conn = null;
static {
try {
Class.forName(driverName);
//System.out.println("数据库驱动加载OK!");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static boolean connDB() {
try {
conn = DriverManager.getConnection(url, dbUser, dbPwd);
//System.out.println("数据库连接OK!");
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public static void queryCzyb() {
try {
Statement statement = conn.createStatement();
String sql = "select * from czy";
ResultSet rs = statement.executeQuery(sql);
while(rs.next()) {
System.out.println(rs.getString(1)+","+rs.getString(2)+","+rs.getString("userPwd"));
}
rs.close();
statement.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void insertCzyb(String userId,String userName,String userPwd) {
try {
Statement statement = conn.createStatement();
String sql = String.format("insert into czy(userId,userName,userPwd) values('%s','%s','%s')",userId,userName,userPwd);
int iRuesult = statement.executeUpdate(sql);
System.out.println("SQL执行完毕!"+iRuesult+"条记录受到影响!");
statement.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void updateCzyb(String sql) {
try {
Statement statement = conn.createStatement();
int iRuesult = statement.executeUpdate(sql);
System.out.println("SQL执行完毕!"+iRuesult+"条记录受到影响!");
statement.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void deleteCzyb(String userId) {
try {
Statement statement = conn.createStatement();
String sql = String.format("delete from czy where userId='%s'",userId);
int iRuesult = statement.executeUpdate(sql);
System.out.println("SQL执行完毕!"+iRuesult+"条记录受到影响!");
statement.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static boolean czyExits(String userId) {
int iResult = 0;
try {
Statement statement = conn.createStatement();
String sql = String.format("select count(*) from czy where userId='%s'",userId);
ResultSet rs = statement.executeQuery(sql);
rs.next();
iResult = rs.getInt(1);
rs.close();
statement.close();
} catch (Exception e) {
e.printStackTrace();
}
return iResult>0;
}
public static boolean checkUser(String userId,String userPwd) {
int iResult = 0;
try {
Statement statement = conn.createStatement();
String sql = String.format("select count(*) from czy where userId='%s' and userPwd='%s'",userId,userPwd);
ResultSet rs = statement.executeQuery(sql);
rs.next();
iResult = rs.getInt(1);
rs.close();
statement.close();
} catch (Exception e) {
e.printStackTrace();
}
return iResult>0;
}
}
2、登录窗口及功能实现参考类
import javax.swing.*;
import javax.swing.plaf.metal.MetalLookAndFeel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class LoginFrame extends JFrame {
private void init() { //初始化窗口和控件
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception e) {
//e.printStackTrace();
JOptionPane.showMessageDialog(null, "窗口风格设置失败!\r\n", "系统提示",JOptionPane.WARNING_MESSAGE);
}
setTitle("系统登录");
setSize(450,300);
setResizable(false);
//this.setUndecorated(true); // 去掉窗口的装饰
//this.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);//采用指定的窗口装饰风格
setLocationRelativeTo(null);
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel labelUser = new JLabel("用户名:");
labelUser.setBounds(50,50,100,25);
JLabel labelPwd = new JLabel("用户密码:");
labelPwd.setBounds(50,90,100,25);
JTextField textUser = new JTextField("",20);
textUser.setBounds(160,50,180,25);
JPasswordField textPwd = new JPasswordField("",20);
textPwd.setBounds(160,90,180,25);
JButton buttonCancel = new JButton("退出");
buttonCancel.setBounds(160,150,75,25);
JButton buttonLogin = new JButton("登录");
buttonLogin.setBounds(260,150,75,25);
buttonLogin.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
String userId = textUser.getText();
String userPwd = textPwd.getText();
if (userId.equals("") || userPwd.equals("")) {
JOptionPane.showMessageDialog(null, "信息输入不全!用户名和密码不能为空!\r\n请检查后重新登录!\r\n", "系统提示",JOptionPane.WARNING_MESSAGE);
textUser.grabFocus();
return;
} else {
if (!DbOperator.connDB()) {
JOptionPane.showMessageDialog(null, "数据库连接失败,请稍候重试!", "系统提示",JOptionPane.ERROR_MESSAGE);
return;
}
if (DbOperator.checkUser(userId,userPwd)) {
JOptionPane.showMessageDialog(null, "用户身份验证通过,登录成功!\r\n", "系统提示",JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "用户名和密码验证失败,登录被拒绝!\r\n", "系统提示",JOptionPane.ERROR_MESSAGE);
}
}
}
});
buttonCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
this.add(labelUser);
this.add(textUser);
this.add(labelPwd);
this.add(textPwd);
this.add(buttonCancel);
this.add(buttonLogin);
this.validate();
}
public LoginFrame() throws HeadlessException {
init();
}
public static void main(String[] args) {
LoginFrame login = new LoginFrame();
login.setVisible(true);
}
}