滁州建设网站,营销型网站策划 ppt,西安网络安全公司排名,马鞍山网络营销方式简单学生管理系统(Java)_封奚泽优的博客-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/130667107?spm1001.2014.3001.5501
转载请注明出处#xff0c;尊重作者劳动成果。
目录 前期准备#xff1a;
数据库的连接#xff1a;
用户账号类#xff1a;…简单学生管理系统(Java)_封奚泽优的博客-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/130667107?spm1001.2014.3001.5501
转载请注明出处尊重作者劳动成果。
目录 前期准备
数据库的连接
用户账号类
用户登录
用户注册
忘记密码
学生类
增
删
改
查 主界面
类主界面
主程序
程序说明与体会 前期准备
还是决定提供源代码了。我这里用到的数据库是SQLserver插入信息的时候要注意登录时候的用户名是用英文的,但是导入学生数据时候是用的中文.且长度但有要求。原本是设计了S,C,SC这几张表,但是要设计的界面太多了,所以就简化成两张表,users的主键是用户名,Student的主键是学号(这个要注意一下) --User(userName,Sno,PhoneNumber,password)
--Student(sno,name,sex,age,id,phoneNumber,address)create database education
ON
( NAME education_dat,FILENAME d:\SqlTest\data\education_Dat.mdf,SIZE 20,FILEGROWTH 25% )
LOG ON
( NAME education_log,FILENAME d:\SqlTest\log\education_Log.ldf,SIZE 5MB,FILEGROWTH 5MB )
GOuse education
gocreate table S(Sno int not null IDENTITY (200400001,1) primary key,Sname varchar(20),Ssex char(2) default(男) check(Ssex男 or Ssex女),Sage tinyint)
GO
create table C(Cno char(5) not null primary key,Cname varchar(30),Teacher varchar(20))
GO
create table SC(Sno INT not null REFERENCES S(Sno),--外键Cno CHAR(5) not null REFERENCES C(Cno),--外键Grade tinyint,CONSTRAINT pk_key primary key(Sno,Cno))
GO
--用户名为主键
create table users( userName varchar(80) not null primary key,password varchar(80),sno varchar(26) ,phoneNumber varchar(24))
GO
create table Student(Sno varchar(26) not null primary key,name varchar(20),sex char(2) default(男) check(sex男 or sex女),age tinyint,id varchar(80),phoneNumber varchar(80),address varchar(160))
GO--需要默认插入数据需要根据自己的信息来插入
use education
insert into users values(users,123456,自己的学号,自己的电话号码)
insert into Student values(自己的学号,自己的姓名,男,年龄,自己的身份证号码
,自己的电话号码,湖南省耒阳市)
go
select * from usersselect * from Student 接下来就是java程序了直接放代码了。
数据库的连接
这里把127.0.0.1改成自己的ip也没有问题。要注意的就是驱动的安装了。
eclipse连接SQLserver_封奚泽优的博客-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/130469647?spm1001.2014.3001.5501
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class GetConnection {//数据库连接对象private Connection con;//还是要加上encryptfalse,不然程序会报错//连接数据库的urlprivate static final String urljdbc:sqlserver://127.0.0.1:1433;DatabaseNameeducation;encryptfalse;//forTest为你的数据库名//数据库的用户名private static final String usernamesa;//你的数据库用户名//连接数据库的密码private static final String password123456;//你自己设置的密码//数据库驱动private static final String classNamecom.microsoft.sqlserver.jdbc.SQLServerDriver;public GetConnection() {try {//加载驱动Class.forName(className);}catch(ClassNotFoundException e) {System.out.println(加载数据库驱动失败);e.printStackTrace();}}//获取数据库连接public Connection getCon() {try {//获取数据库连接conDriverManager.getConnection(url,username,password);}catch(SQLException e) {System.out.println(创建数据库连接失败!);connull;e.printStackTrace();}//返回数据库连接对象return con;}
}用户账号类
就是一些构造方法以及get和set的一些方法要注意的就是我把所有的成员变量都设置成String类型了主要是和数据库数据插入和查询的时候感觉方便一点。 public class User {private String userName;private String password;private String Sno;private String phoneNumber;public User(String userName, String password, String sno, String phoneNumber) {this.userName userName;this.password password;Sno sno;this.phoneNumber phoneNumber;}public User() {}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password password;}public String getSno() {return Sno;}public void setSno(String sno) {Sno sno;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber phoneNumber;}
}用户登录 import java.awt.Font;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Random;import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;public class Enter extends JFrame implements ActionListener{public static void main(String[] args) {new Enter();}//面板final JPanel panelnew JPanel();//创建教务管理系统标签final JLabel systemnew JLabel();//创建用户名标签final JLabel userNameLabelnew JLabel();//创建用户名文本框final JTextField userNameTextFieldnew JTextField();//创建密码标签final JLabel passwordLabelnew JLabel();//创建密码文本框final JTextField passwordTextFieldnew JTextField();//创建验证码标签final JLabel verificationCodeLabelnew JLabel();//创建验证码文本框final JTextField verificationCodeTextFieldnew JTextField();//创建随机生成验证码标签final JLabel randomCodeLabelnew JLabel();//登录按钮final JButton loginButtonnew JButton();//注册按钮final JButton registerButtonnew JButton();//忘记密码按钮final JButton forgetPasswordButtonnew JButton();//警告标签放在弹窗里面final JLabel warningLabelnew JLabel();//用来存储随机生成的验证码String code;//用户登录名String name;//用户密码String password;//用户输入的验证码String inputCode;//输入密码的次数int count3;//用来在运行时存储用户的账号User usernew User();//账号存在这个集合里面,所以我把他设置成静态的了,这样在其他类里面也可以用static ArrayListUserlistnew ArrayList();//准备连接的对象GetConnection connectionnew GetConnection();Connection connnull;public Enter() {//初始化窗体initFrame();//初始化面板initPanel();//绑定监听事件buttonAction();//窗体可见放最后吧不然里面的东西不会显示呢this.setVisible(true);}public void initFrame() {//设置窗体的标题this.setTitle(用户登录);//设置窗体大小不可改变this.setResizable(false);//设置界面置顶(就是页面不会别其他页面覆盖界面始终在最上面)this.setAlwaysOnTop(true);//那还是改成setSize吧,设置窗体的大小就行了this.setSize(500,400);//居中this.setLocationRelativeTo(null);//设置窗体关闭按钮的动作作为退出this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}//初始化面板public void initPanel() {initModule();//设置为不采用任何布局管理器,在Frame中设置没有效果结果还是会被panel替代了panel.setLayout(null);//添加相关的组件panel.add(system);panel.add(userNameLabel);panel.add(userNameTextField);panel.add(passwordLabel);panel.add(passwordTextField);panel.add(verificationCodeLabel);panel.add(verificationCodeTextField);panel.add(randomCodeLabel);panel.add(loginButton);panel.add(registerButton);panel.add(forgetPasswordButton);this.setContentPane(panel);}//初始化组件public void initModule() {//最开始有一个用户已经登录//list.add(user);//把数据库中存在的用户取出到程序中select();//初始化管理系统相关组件system.setText(学生管理系统);//设置字体的类型加粗和大小system.setFont(new Font(Microsoft YaHei,Font.BOLD,35));//标签的位置和大小system.setBounds(150,0,250,50);//初始化用户名相关的组件userNameLabel.setText(用户名:);//设置字体的类型加粗和大小userNameLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,30));//标签的位置和大小userNameLabel.setBounds(30,75,100,50);//文本框位置userNameTextField.setBounds(130,80,150,50);userNameTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//初始化密码相关的组件passwordLabel.setText(密码:);//设置字体的类型加粗和大小passwordLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,30));//标签的位置和大小passwordLabel.setBounds(40,145,100,50);//文本框位置passwordTextField.setBounds(130,150,150,50);//文本框字体的大小passwordTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//初始化验证码相关的组件verificationCodeLabel.setText(验证码:);//设置字体的类型加粗和大小verificationCodeLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,30));//标签的位置和大小verificationCodeLabel.setBounds(30,215,100,50);//文本框位置verificationCodeTextField.setBounds(130,220,150,50);verificationCodeTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//初始化随机生成的验证码相关的组件//随机生成验证码securityCode();//每次生成都要打印,我干脆就放一起了//randomCodeLabel.setText(code);//设置字体的类型不加粗和大小randomCodeLabel.setFont(new Font(Microsoft YaHei,Font.PLAIN,20));//标签的位置和大小randomCodeLabel.setBounds(290,215,100,50);//登录按钮loginButton.setBounds(20,290,450,60);loginButton.setText(登录/注册);loginButton.setFont(new Font(宋体,Font.BOLD,30));//注册按钮registerButton.setBounds(380,215,100,50);registerButton.setText(注册账号);registerButton.setFont(new Font(宋体,Font.BOLD,15));//按钮透明registerButton.setContentAreaFilled(false);//忘记密码按钮forgetPasswordButton.setBounds(290,150,180,50);forgetPasswordButton.setText(忘记密码);forgetPasswordButton.setFont(new Font(宋体,Font.BOLD,25));//按钮透明forgetPasswordButton.setContentAreaFilled(false);}public void buttonAction() {loginButton.addActionListener(this);registerButton.addActionListener(this);forgetPasswordButton.addActionListener(this);}Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubJButton button (JButton)e.getSource();//获得触发此次动作事件的按钮对象String buttonName e.getActionCommand();//获得触发此次动作事件的按钮的标签文本if(buttonName.equals(登录/注册)) {//System.out.println(我登录了);verify();}else if(buttonName.equals(注册账号)) {//System.out.println(我注册了);this.setVisible(false);new Register();}else if(buttonName.equals(忘记密码)) {//System.out.println(我忘记密码了);this.setVisible(false);new ForgetPassword();}}//随机生成验证码public void securityCode() {//每次都重新随机一个验证码code ;Random r new Random();char[] arr new char[52];char[] number new char[5];int count 0;for (int i 0; i 26; i) {arr[i] (char) (A i);}for (int i 26; i 52; i) {arr[i] (char) (a i - 26);}//随机生成四位字母for (int i 0; i 4; i) {int index r.nextInt(arr.length);number[count] arr[index];}//随机生成一位数字number[count] (char) (r.nextInt(10) 48);//打乱顺序for (int i 0; i number.length; i) {int index r.nextInt(number.length);char tmp number[i];number[i] number[index];number[index] tmp;}//需要先将code添加进去在此基础上添加新的字符for (int i 0; i number.length; i) {code new StringBuilder().append(code).append(number[i]).toString();}randomCodeLabel.setText(code);}//用户登录验证public void verify() {//等一下要判断是否规范,所以需要用trim去除字符串前面的空白字符nameuserNameTextField.getText().trim().toString();passwordpasswordTextField.getText().trim().toString();inputCodeverificationCodeTextField.getText().trim().toString();//System.out.println(namepassword);//exisit是用户定义的方法哈if(exisit(list,name)) {//判断验证码是否正确if(!code.equals(inputCode)){warning( 验证码输入错误请重新输入);//更新验证码securityCode();}else {//用户名的密码int indexgetIndex(list,name);User userlist.get(index);count--;if(user.getPassword().equals(password)){//进入主界面new MainFrame();System.out.println(登录成功);}else{warning( 密码错误你还有count次机会);if(count0){warning( 三次错误账号锁定);//直接关闭虚拟机System.exit(0);}//更新验证码securityCode();}}}else {//System.out.println(用户名为注册,请先注册);//warning也是用户定义的//前面空白是占位用的warning( 用户名未注册,请先注册);}}//判断用户名是否已经存在public boolean exisit(ArrayListUser list, String name) {/* for (int i 0; i list.size(); i) {if (list.get(i).getUserName().equals(name)) {return true;}}return false;*/return getIndex(list,name)0;}//返回用户账号的索引public int getIndex(ArrayListUserlist,String name){for (int i 0; i list.size(); i) {if(list.get(i).getUserName().equals(name)){return i;}}return -1;}//输出警告弹窗public void warning(String str) {//添加一个弹窗的警告JDialog jDialognew JDialog();//创建弹窗对象jDialog.setTitle(警告);//设置弹窗标题和Frame差不多可能还要通过标签来提示jDialog.setSize(500,400);//设置弹窗的大小jDialog.setAlwaysOnTop(true);//让弹窗置顶jDialog.setLocationRelativeTo(null);//让弹窗居中jDialog.setModal(true);//弹窗不关闭则无法操作下面的界面//设置字体的类型加粗和大小warningLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,30));//输出警告提示符warningLabel.setText(str);//标签的位置和大小warningLabel.setBounds(0,100,500,100);//这个也要取消布局管理器才行jDialog.getContentPane().setLayout(null);//往弹窗中添加标签jDialog.getContentPane().add(warningLabel);jDialog.setVisible(true);//让弹窗显示出来}//查询已经存在的用户避免重复插入,在程序初始化的时候调用public void select() {//获取数据库连接不然会报空指针异常connconnection.getCon();try{//sname,password,sno,phoneNumber//定义静态select语句String sqlselect * from users;//实例化Statement对象(静态),这里不知道为什么需要//java.sql这个东西不然就没有executeQuery这个方法java.sql.Statement sconn.createStatement();//执行静态select语句ResultSet rss.executeQuery(sql);//添加到集合中while(rs.next()) {//获取数据String namers.getString(1);String passwordrs.getString(2);String snors.getString(3);String phoners.getString(4);//System.out.println(name password sno phone );//插入到集合中list.add(new User(name, password, sno, phone));}}catch(SQLException e) {e.printStackTrace();}}
}用户注册 import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.Statement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.sql.*;import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;public class Register extends JFrame implements ActionListener {public static void main(String[] args) {new Register();}//面板final JPanel panelnew JPanel();//创建教务管理系统标签final JLabel systemnew JLabel();//创建用户名标签final JLabel userNameLabelnew JLabel();//创建用户名文本框final JTextField userNameTextFieldnew JTextField();//创建学号标签final JLabel snoLabelnew JLabel();//创建学号文本框final JTextField snoTextFieldnew JTextField();//创建手机号码标签final JLabel phoneNumberLabelnew JLabel();//创建手机号码文本框final JTextField phoneNumberTextFieldnew JTextField();//创建密码标签final JLabel passwordLabelnew JLabel();//创建密码文本框final JTextField passwordTextFieldnew JTextField();//创建再次输入密码标签final JLabel againPasswordLabelnew JLabel();//创建再次输入密码文本框final JTextField againPasswordTextFieldnew JTextField();//注册按钮final JButton registerButtonnew JButton();//警告标签放在弹窗里面final JLabel warningLabelnew JLabel();//用户登录名String name;//用户学号String sno;//用户手机号码String phoneNumber;//用户密码String password;//用户再次确定密码String againPassword;//准备连接的对象GetConnection connectionnew GetConnection();Connection connnull;public Register() {//初始化窗体initFrame();//初始化面板initPanel();//绑定监听事件buttonAction();//窗体可见放最后吧不然里面的东西不会显示呢this.setVisible(true);}public void initFrame() {//设置窗体的标题this.setTitle(用户注册);//设置窗体大小不可改变this.setResizable(false);//设置界面置顶(就是页面不会别其他页面覆盖界面始终在最上面)this.setAlwaysOnTop(true);//那还是改成setSize吧,设置窗体的大小就行了this.setSize(500,400);//居中this.setLocationRelativeTo(null);//设置窗体关闭按钮的动作作为退出this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}//初始化面板public void initPanel() {initModule();//设置为不采用任何布局管理器,在Frame中设置没有效果结果还是会被panel替代了panel.setLayout(null);//添加相关的组件panel.add(system);panel.add(userNameLabel);panel.add(userNameTextField);panel.add(snoLabel);panel.add(snoTextField);panel.add(phoneNumberLabel);panel.add(phoneNumberTextField);panel.add(passwordLabel);panel.add(passwordTextField);panel.add(againPasswordLabel);panel.add(againPasswordTextField);panel.add(registerButton);this.setContentPane(panel);}//初始化组件public void initModule() {//初始化管理系统相关组件system.setText(学生管理系统);//设置字体的类型加粗和大小system.setFont(new Font(Microsoft YaHei,Font.BOLD,35));//标签的位置和大小system.setBounds(150,0,250,50);//初始化用户名相关的组件userNameLabel.setText(用户名:);//设置字体的类型加粗和大小userNameLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小userNameLabel.setBounds(30,55,100,50);//文本框位置userNameTextField.setBounds(130,60,150,40);//文本框字体的大小userNameTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//初始化学号相关的组件snoLabel.setText(学号:);//设置字体的类型加粗和大小snoLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小snoLabel.setBounds(30,100,100,50);//文本框位置snoTextField.setBounds(130,105,150,40);//文本框字体的大小snoTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,15));//初始化手机号码相关的组件phoneNumberLabel.setText(手机号码:);//设置字体的类型加粗和大小phoneNumberLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小phoneNumberLabel.setBounds(30,140,100,50);//文本框位置phoneNumberTextField.setBounds(130,150,150,40);//文本框字体的大小phoneNumberTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//初始化密码相关的组件passwordLabel.setText(密码:);//设置字体的类型加粗和大小passwordLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小passwordLabel.setBounds(30,187,100,50);//文本框位置passwordTextField.setBounds(130,195,150,40);//文本框字体的大小passwordTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//初始化密码相关的组件againPasswordLabel.setText(再次确认:);//设置字体的类型加粗和大小againPasswordLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小againPasswordLabel.setBounds(30,233,100,50);//文本框位置againPasswordTextField.setBounds(130,240,150,40);//文本框字体的大小againPasswordTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//登录按钮registerButton.setBounds(20,290,450,60);registerButton.setText(注册);registerButton.setFont(new Font(宋体,Font.BOLD,30)); }//绑定按钮public void buttonAction() {registerButton.addActionListener(this); }Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubJButton button (JButton)e.getSource();//获得触发此次动作事件的按钮对象String buttonName e.getActionCommand();//获得触发此次动作事件的按钮的标签文本if(buttonName.equals(注册)) {//System.out.println(我注册了);reginster();}}//注册用户public void reginster() {//获取文本框里面的数据nameuserNameTextField.getText().trim().toString();snosnoTextField.getText().trim().toString();phoneNumberphoneNumberTextField.getText().trim().toString();passwordpasswordTextField.getText().trim().toString();againPasswordagainPasswordTextField.getText().trim().toString();//其实判断都用正则表达式还是方便一点//判断用户名称是否规范/** if(judgeName(name)) {* * }*//** //判断用户学号是否规范 if(judgeSno(sno)) {* * }*///判断用户电话号码是否规范/** if(judgePhoneNumber(phoneNumber)) {* * }*/// 判断用户密码是否一致
// if(password.equals(againPassword)) {
//
// }else {
// warning( 两次用户密码输入不一致);
// }if(judgeName(name)){if(judgeSno(sno)) {if(judgePhoneNumber(phoneNumber)) {if(password.equals(againPassword)) {//虽然是插入到数据库里面,但是在程序里面也可以写一下Enter.list.add(new User(name,password,sno,phoneNumber));//准备好数据之后执行插入操作insert();this.setVisible(false);new Enter();}else {warning( 两次用户密码输入不一致);}}}}}//判断用户名是否已经存在public boolean exisit(ArrayListUser list, String name) {/* for (int i 0; i list.size(); i) {if (list.get(i).getUserName().equals(name)) {return true;}}return false;*/return getIndex(list,name)0;}//返回用户账号的索引public int getIndex(ArrayListUserlist,String name){for (int i 0; i list.size(); i) {if(list.get(i).getUserName().equals(name)){return i;}}return -1;}//判定用户名是否符合规则,我把这个分成一个方法了,调用了judgeNameStandard//也是用来判断用户名规范的public boolean judgeName(String name) {//判定用户名if (name.length() 3 name.length() 15) {if (judgeNameStandard(name)) //对用户名规范的判定if (exisit(Enter.list, name)) {//判定用户名是否已经存在warning( 用户名已存在请重新输入);return false;} else {return true;}} else {warning( 待注册的用户名长度不合法);return false;}return true;}//判定用户名是否符合规范public boolean judgeNameStandard(String name) {int count 0;for (int i 0; i name.length(); i) {//判断当前字符是字母if ((name.charAt(i) a name.charAt(i) z) || (name.charAt(i) A name.charAt(i) Z)) {continue;} else {//判断当前字符是否是数字if (name.charAt(i) 0 name.charAt(i) 9) {count;} else {warning( 用户名存在字母和数字以外的字符);return false;}}}//用户名不能是纯数字if (count name.length()) {warning( 用户名不能是纯数字);return false;}return true;}public boolean judgeSno(String sno){if(sno.matches(2[0-9]{11})) {return true;}else {warning( 学号不符合规范);return false;}}//判断手机号码是否符合规范public boolean judgePhoneNumber(String number) {if (number.length() 11) {if (number.charAt(0) ! 0) {if (judgeDigit(number) number.charAt(10) 0 number.charAt(10) 9) {return true;} else {warning( 手机号码不是由纯数字构成);return false;}} else {warning( 手机号码不能以0为开头);return false;}} else {warning( 手机号码长度不为11);return false;}}//判定前length-1的字符是否都是数字public boolean judgeDigit(String id) {//前length-1位必须都是数字for (int i 0; i id.length() - 1; i) {if (id.charAt(i) 0 id.charAt(i) 9) {continue;} else {return false;}}return true;}//输出警告弹窗public void warning(String str) {//添加一个弹窗的警告JDialog jDialognew JDialog();//创建弹窗对象jDialog.setTitle(警告);//设置弹窗标题和Frame差不多可能还要通过标签来提示jDialog.setSize(500,400);//设置弹窗的大小jDialog.setAlwaysOnTop(true);//让弹窗置顶jDialog.setLocationRelativeTo(null);//让弹窗居中jDialog.setModal(true);//弹窗不关闭则无法操作下面的界面//设置字体的类型加粗和大小warningLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,30));//输出警告提示符warningLabel.setText(str);//标签的位置和大小warningLabel.setBounds(0,100,500,100);//这个也要取消布局管理器才行jDialog.getContentPane().setLayout(null);//往弹窗中添加标签jDialog.getContentPane().add(warningLabel);jDialog.setVisible(true);//让弹窗显示出来}//准备好数据之后执行插入操作public void insert() {//获取数据库连接不然会报空指针异常connconnection.getCon();try{//sname,password,sno,phoneNumber//定义插入数据预处理的SQL语句String sqlinsert into users values(?,?,?,?);//实例化PreparedStatement对象PreparedStatement psconn.prepareStatement(sql);//设置预处理语句参数ps.setString(1, name);ps.setString(2, password);ps.setString(3, sno);ps.setString(4, phoneNumber);//执行插入操作ps.executeUpdate();}catch(SQLException e) {//warning(该用户已经注册请勿重复注册);e.printStackTrace();}}
}忘记密码 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 java.util.ArrayList;import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;public class ForgetPassword extends JFrame implements ActionListener {public static void main(String[] args) {new ForgetPassword();}//面板final JPanel panelnew JPanel();//创建教务管理系统标签final JLabel systemnew JLabel();//创建用户名标签final JLabel userNameLabelnew JLabel();//创建用户名文本框final JTextField userNameTextFieldnew JTextField();//创建学号标签final JLabel snoLabelnew JLabel();//创建学号文本框final JTextField snoTextFieldnew JTextField();//创建手机号码标签final JLabel phoneNumberLabelnew JLabel();//创建手机号码文本框final JTextField phoneNumberTextFieldnew JTextField();//修改密码标签final JLabel passwordLabelnew JLabel();//修改密码文本框final JTextField passwordTextFieldnew JTextField();//创建再次输入密码标签final JLabel againPasswordLabelnew JLabel();//创建再次输入密码文本框final JTextField againPasswordTextFieldnew JTextField();//注册按钮final JButton registerButtonnew JButton();//用户登录名String name;//用户学号String sno;//用户手机号码String phoneNumber;//用户密码String password;//用户再次确定密码String againPassword;//警告标签放在弹窗里面final JLabel warningLabelnew JLabel();//准备连接的对象GetConnection connectionnew GetConnection();Connection connnull;public ForgetPassword() {//初始化窗体initFrame();//初始化面板initPanel();//绑定监听事件buttonAction();//窗体可见放最后吧不然里面的东西不会显示呢this.setVisible(true);}public void initFrame() {//设置窗体的标题this.setTitle(忘记密码);//设置窗体大小不可改变this.setResizable(false);//设置界面置顶(就是页面不会别其他页面覆盖界面始终在最上面)this.setAlwaysOnTop(true);//那还是改成setSize吧,设置窗体的大小就行了this.setSize(500,400);//居中this.setLocationRelativeTo(null);//设置窗体关闭按钮的动作作为退出this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}//初始化面板public void initPanel() {initModule();//设置为不采用任何布局管理器,在Frame中设置没有效果结果还是会被panel替代了panel.setLayout(null);//添加相关的组件panel.add(system);panel.add(userNameLabel);panel.add(userNameTextField);panel.add(snoLabel);panel.add(snoTextField);panel.add(phoneNumberLabel);panel.add(phoneNumberTextField);panel.add(passwordLabel);panel.add(passwordTextField);panel.add(againPasswordLabel);panel.add(againPasswordTextField);panel.add(registerButton);this.setContentPane(panel);}//初始化组件public void initModule() {//初始化管理系统相关组件system.setText(学生管理系统);//设置字体的类型加粗和大小system.setFont(new Font(Microsoft YaHei,Font.BOLD,35));//标签的位置和大小system.setBounds(150,0,250,50);//初始化用户名相关的组件userNameLabel.setText(用户名:);//设置字体的类型加粗和大小userNameLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小userNameLabel.setBounds(30,55,100,50);//文本框位置userNameTextField.setBounds(130,60,150,40);//初始化学号相关的组件snoLabel.setText(学号:);//设置字体的类型加粗和大小snoLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小snoLabel.setBounds(30,100,100,50);//文本框位置snoTextField.setBounds(130,105,150,40);//初始化手机号码相关的组件phoneNumberLabel.setText(手机号码:);//设置字体的类型加粗和大小phoneNumberLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小phoneNumberLabel.setBounds(30,140,100,50);//文本框位置phoneNumberTextField.setBounds(130,150,150,40);//修改密码相关的组件passwordLabel.setText(新密码:);//设置字体的类型加粗和大小passwordLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小passwordLabel.setBounds(30,187,100,50);//文本框位置passwordTextField.setBounds(130,195,150,40);//初始化密码相关的组件againPasswordLabel.setText(再次确认:);//设置字体的类型加粗和大小againPasswordLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小againPasswordLabel.setBounds(30,233,100,50);//文本框位置againPasswordTextField.setBounds(130,240,150,40);//登录按钮registerButton.setBounds(20,290,450,60);registerButton.setText(修改密码);registerButton.setFont(new Font(宋体,Font.BOLD,30)); }//绑定按钮public void buttonAction() {registerButton.addActionListener(this); }Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubJButton button (JButton)e.getSource();//获得触发此次动作事件的按钮对象String buttonName e.getActionCommand();//获得触发此次动作事件的按钮的标签文本if(buttonName.equals(修改密码)) {forgetPassword();}}public void forgetPassword() {//获取文本框里面的数据nameuserNameTextField.getText().trim().toString();snosnoTextField.getText().trim().toString();phoneNumberphoneNumberTextField.getText().trim().toString();passwordpasswordTextField.getText().trim().toString();againPasswordagainPasswordTextField.getText().trim().toString();if(exisit(Enter.list,name)) {int indexgetIndex(Enter.list,name);User userEnter.list.get(index);String sno1user.getSno();String numberuser.getPhoneNumber();//验证用户的身份信息if(sno1.equals(sno)number.equals(phoneNumber)) {if(password.equals(againPassword)) {//更新密码update();//更新数据库里面的密码user.setPassword(password);Enter.list.set(index, user);this.setVisible(false);new Enter();}else {warning( 两次用户密码输入不一致);}}else {warning( 账号信息不匹配修改失败);}}else {warning( 账号未注册);}}//判断用户名是否已经存在public boolean exisit(ArrayListUser list, String name) {/* for (int i 0; i list.size(); i) {if (list.get(i).getUserName().equals(name)) {return true;}}return false;*/return getIndex(list,name)0;}//返回用户账号的索引public int getIndex(ArrayListUserlist,String name){for (int i 0; i list.size(); i) {if(list.get(i).getUserName().equals(name)){return i;}}return -1;}//输出警告弹窗public void warning(String str) {//添加一个弹窗的警告JDialog jDialognew JDialog();//创建弹窗对象jDialog.setTitle(警告);//设置弹窗标题和Frame差不多可能还要通过标签来提示jDialog.setSize(500,400);//设置弹窗的大小jDialog.setAlwaysOnTop(true);//让弹窗置顶jDialog.setLocationRelativeTo(null);//让弹窗居中jDialog.setModal(true);//弹窗不关闭则无法操作下面的界面//设置字体的类型加粗和大小warningLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,30));//输出警告提示符warningLabel.setText(str);//标签的位置和大小warningLabel.setBounds(0,100,500,100);//这个也要取消布局管理器才行jDialog.getContentPane().setLayout(null);//往弹窗中添加标签jDialog.getContentPane().add(warningLabel);jDialog.setVisible(true);//让弹窗显示出来}public void update() {//获取数据库连接不然会报空指针异常connconnection.getCon();try{//sname,password,sno,phoneNumber//定义插入数据预处理的SQL语句String sqlupdate users set password? where userName?;//实例化PreparedStatement对象PreparedStatement psconn.prepareStatement(sql);//设置预处理语句参数ps.setString(1, password);ps.setString(2, name);//执行修改操作ps.executeUpdate();}catch(SQLException e) {e.printStackTrace();}}
}学生类
这个就和前面那个用户账号类一样了。
import java.net.InetAddress;
//student(sno,name,sex,age,id,phone,address)
//表格需要是二维数组这个我不知道怎么弄就把类型全部设置成string类型了
public class Student {private String sno;//学号private String name;//姓名private String sex;//性别private String age;//年龄private String id;//身份证号码private String phoneNumber;//手机号码private String address;//家庭住址public Student(String sno, String name, String sex, String age, String id, String phoneNumber, String address) {this.sno sno;this.name name;this.sex sex;this.age age;this.id id;this.phoneNumber phoneNumber;this.address address;}public Student() {}public String getSno() {return sno;}public void setSno(String sno) {this.sno sno;}public String getName() {return name;}public void setName(String name) {this.name name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex sex;}public String getAge() {return age;}public void setAge(String age) {this.age age;}public String getId() {return id;}public void setId(String id) {this.id id;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber phoneNumber;}public String getAddress() {return address;}public void setAddress(String address) {this.address address;}
}增
Java GUI编程11---单选按钮JRadioButton_蓝蓝223的博客-CSDN博客https://blog.csdn.net/qq_21808961/article/details/80765423 import com.sun.tools.javac.Main;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;public class AddFrame extends JFrame implements ActionListener, ItemListener {//主方法public static void main(String[] args) {new AddFrame();}//面板final JPanel panelnew JPanel();//创建学生管理系统标签final JLabel systemnew JLabel();//创建学号标签final JLabel snoLabelnew JLabel();//创建学号文本框final JTextField snoTextFieldnew JTextField();//创建学生姓名标签final JLabel nameLabelnew JLabel();//创建学生姓名文本框final JTextField nameTextFieldnew JTextField();//创建性别标签final JLabel sexLabelnew JLabel();//创建性别文本框//final JTextField sexTextFieldnew JTextField();//性别文本框改成单选按钮//创建按钮组对象final ButtonGroup buttonGroupnew ButtonGroup();//创建单选按钮对象final JRadioButton manRadioButtonnew JRadioButton();final JRadioButton womanRadioButtonnew JRadioButton();//创建年龄标签final JLabel ageLabelnew JLabel();//创建年龄文本框final JTextField ageTextFieldnew JTextField();//创建身份证号码标签final JLabel idLabelnew JLabel();//创建身份证号码文本框final JTextField idTextFieldnew JTextField();//创建手机号码标签final JLabel phoneNumberLabelnew JLabel();//创建手机号码文本框final JTextField phoneNumbeTextFieldnew JTextField();//创建家庭住址标签final JLabel addressLabelnew JLabel();//创建家庭住址文本框final JTextField addressTextFieldnew JTextField();//添加按钮final JButton addButtonnew JButton();//保存文本框中的相关数据String name;String age;//真的麻烦了不是一点要按下单选按钮才会有值所以就先给他赋一个初值吧String sex男;String sno;String id;String number;String address;//准备连接的对象GetConnection connectionnew GetConnection();Connection connnull;public AddFrame(){//初始化窗体initFrame();//初始化面板initPanel();//绑定监听事件buttonAction();//窗体可见放最后吧不然里面的东西不会显示呢this.setVisible(true);}public void initFrame() {//设置窗体的标题this.setTitle(添加学生信息);//设置窗体大小不可改变this.setResizable(false);//设置界面置顶(就是页面不会别其他页面覆盖界面始终在最上面)this.setAlwaysOnTop(true);//那还是改成setSize吧,设置窗体的大小就行了this.setSize(500,400);//居中this.setLocationRelativeTo(null);//设置窗体关闭按钮的动作作为退出this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}//初始化面板public void initPanel() {initModule();//设置为不采用任何布局管理器,在Frame中设置没有效果结果还是会被panel替代了panel.setLayout(null);//添加相关的组件panel.add(system);panel.add(snoLabel);panel.add(snoTextField);panel.add(nameLabel);panel.add(nameTextField);panel.add(sexLabel);panel.add(manRadioButton);panel.add(womanRadioButton);panel.add(ageLabel);panel.add(ageTextField);panel.add(idLabel);panel.add(idTextField);panel.add(phoneNumberLabel);panel.add(phoneNumbeTextField);panel.add(addressLabel);panel.add(addressTextField);panel.add(addButton);this.setContentPane(panel);}//初始化组件public void initModule() {//初始化管理系统相关组件system.setText(学生管理系统);//设置字体的类型加粗和大小system.setFont(new Font(Microsoft YaHei,Font.BOLD,35));//标签的位置和大小system.setBounds(150,0,250,50);//初始化学号相关的组件snoLabel.setText(学号:);//设置字体的类型加粗和大小snoLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小snoLabel.setBounds(30,150,100,50);//文本框位置snoTextField.setBounds(120,155,150,40);//文本框字体大小snoTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,15));//初始化姓名相关的组件nameLabel.setText(姓名:);//设置字体的类型加粗和大小nameLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小nameLabel.setBounds(30,50,100,50);//文本框位置nameTextField.setBounds(120,55,150,40);//文本框字体大小nameTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,15));//初始化性别相关的组件sexLabel.setText(性别:);//设置字体的类型加粗和大小sexLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小sexLabel.setBounds(280,50,100,50);//性别按钮组buttonGroup.add(manRadioButton);//将单选按钮添加到按钮组中buttonGroup.add(womanRadioButton);//将单选按钮添加到按钮组中manRadioButton.setText(男);//设置单选按钮的文本womanRadioButton.setText(女);//设置单选按钮的文本manRadioButton.setSelected(true);//将单选按钮默认认为被选中manRadioButton.setBounds(340,50,50,50);//设置单选按钮的位置womanRadioButton.setBounds(390,50,50,50);//设置单选按钮的位置//初始化年龄相关的组件ageLabel.setText(年龄:);//设置字体的类型加粗和大小ageLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小ageLabel.setBounds(30,100,100,50);//文本框位置ageTextField.setBounds(120,105,150,40);//文本框字体大小ageTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,15));//初始化身份证号码相关的组件idLabel.setText(身份证号码:);//设置字体的类型加粗和大小idLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小idLabel.setBounds(5,200,110,50);//文本框位置idTextField.setBounds(120,205,150,40);//初始化手机号码相关的组件phoneNumberLabel.setText(手机号码:);//设置字体的类型加粗和大小phoneNumberLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小phoneNumberLabel.setBounds(15,250,110,50);//文本框位置phoneNumbeTextField.setBounds(120,255,150,40);//文本框字体大小phoneNumbeTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,15));//初始化家庭住址相关的组件addressLabel.setText(家庭住址:);//设置字体的类型加粗和大小addressLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小addressLabel.setBounds(15,295,110,50);//文本框位置addressTextField.setBounds(120,300,150,40);//添加按钮addButton.setBounds(300,280,170,60);addButton.setText(添加数据);addButton.setFont(new Font(宋体,Font.BOLD,30));}//绑定按钮(还要单选框的)public void buttonAction() {addButton.addActionListener(this);manRadioButton.addItemListener(this);womanRadioButton.addItemListener(this);}Overridepublic void actionPerformed(ActionEvent e) {JButton button (JButton)e.getSource();//获得触发此次动作事件的按钮对象String buttonName e.getActionCommand();//获得触发此次动作事件的按钮的标签文本if(buttonName.equals(添加数据)){//System.out.println(我添加了数据);verify();}}/*//输出警告弹窗public void warning(String str) {//添加一个弹窗的警告JDialog jDialognew JDialog();//创建弹窗对象jDialog.setTitle(警告);//设置弹窗标题和Frame差不多可能还要通过标签来提示jDialog.setSize(500,400);//设置弹窗的大小jDialog.setAlwaysOnTop(true);//让弹窗置顶jDialog.setLocationRelativeTo(null);//让弹窗居中jDialog.setModal(true);//弹窗不关闭则无法操作下面的界面//警告标签放在弹窗里面final JLabel warningLabelnew JLabel(str,JLabel.CENTER);//设置字体的类型加粗和大小warningLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,30));//标签的位置和大小warningLabel.setBounds(0,100,500,100);//这个也要取消布局管理器才行//jDialog.getContentPane().setLayout(null);//往弹窗中添加标签(垂直加居中放置标签)jDialog.getContentPane().add(warningLabel,BorderLayout.CENTER);jDialog.setVisible(true);//让弹窗显示出来}*///添加学生信息验证public void verify(){//等一下要判断是否规范,所以需要用trim去除字符串前面的空白字符namenameTextField.getText().trim().toString();ageageTextField.getText().trim().toString();snosnoTextField.getText().trim().toString();ididTextField.getText().trim().toString();numberphoneNumbeTextField.getText().trim().toString();addressaddressTextField.getText().trim().toString();try {//System.out.println(name age sex sno id number address);//if(judegeSno(sno)){}//if(judgeName(name)){}//性别用到是单选框也不需要判断//if(judgeSex(sex)){}//if(judgeAge(age)){}//if(judgeId(id)){}//if(judgeNumber(number)){}//依次判断选项是否合法规范if(judegeSno(sno)){if(judgeName(name)){if (judgeAge(age)){if (judgeId(id)){if (judgeNumber(number)){if (judgeAddress(address)){//插入数据insert();//数据库的数据插入MainFrame.list.add(new Student(sno,name,sex,age,id,number,address));System.out.println(添加成功);this.setVisible(false);//窗口不显示new MainFrame();//回到主窗口}}}}}}}catch (Exception e){MainFrame.warning(您没有输入数据,或者输入违法);e.printStackTrace();}}//获取单选按钮中对应的值Overridepublic void itemStateChanged(ItemEvent e) {//虽然只有男女两个选项但是我还是加上了else if的判断if(e.getSource()manRadioButton){sex男;}else if(e.getSource()womanRadioButton) {sex女;}}//判断学号是否符合规范以及是否存在public boolean judegeSno(String sno){if(!MainFrame.exisit(sno)){if(sno.matches(2[0-9]{11})){return true;}else{MainFrame.warning(学号不符合规范);return false;}}else{MainFrame.warning(学号已经存在);return false;}}//判断姓名是否符合规范public boolean judgeName(String name){if (name.matches(^(?:[\u4e00-\u9fa5·]{2,16})$)){return true;}else{MainFrame.warning(姓名不符合规范);return false;}}//判断年龄是否符合规范public boolean judgeAge(String age){if(age.matches([0-9]*)){int digitInteger.valueOf(age);if(digit0){return true;}else{MainFrame.warning(年龄不能为负);return false;}}else{MainFrame.warning(年龄不符合规范);return false;}}//判断身份证号码是否规范public boolean judgeId(String id){if(id.matches(^[1-9]\\d{5}(?:18|19|20)\\d{2}(?:0\\d|10|11|12)(?:0[1-9]|[1-2]\\d|30|31)\\d{3}[\\dXx]$)){return true;}else{MainFrame.warning(身份证号码不符合规范);return false;}}//判断手机号码是否符合规范public boolean judgeNumber(String number){if(number.matches(^(?:(?:\\|00)86)?1[3-9]\\d{9}$)){return true;}else {MainFrame.warning(手机号码不符合规范);return false;}}//判断是否有住址,这个不太好判断,我这里是有就行public boolean judgeAddress(String address){if(address.length()!0){return true;}return false;}//这里判断是否存在在自己这里不知道为什么判断不成功/*//返回学生账号的索引(学号是主键)public int getIndex(String sno){//查找是否存在学号相同的人for (int i 0; i MainFrame.list.size(); i) {if(MainFrame.list.get(i).getSno().equals(sno)){return i;}}//查看集合有没有数据System.out.println(MainFrame.list.size());return -1;}//判断学生账号是否已经存在public boolean exisit(String sno){//存在的话返回的索引为大于0的数return getIndex(sno)0;}*///准备好数据之后执行插入操作public void insert() {//获取数据库连接不然会报空指针异常connconnection.getCon();try{//sno,name,sex,age,id,number,address//定义插入数据预处理的SQL语句String sqlinsert into Student values(?,?,?,?,?,?,?);//实例化PreparedStatement对象PreparedStatement psconn.prepareStatement(sql);//设置预处理语句参数ps.setString(1, sno);ps.setString(2, name);ps.setString(3, sex);ps.setString(4, age);ps.setString(5, id);ps.setString(6, number);ps.setString(7, address);//执行插入操作ps.executeUpdate();}catch(SQLException e) {MainFrame.warning(该用户已经已经添加);e.printStackTrace();}}
}删 import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class DeleteFrame extends JFrame implements ActionListener {//主方法public static void main(String[] args) {new DeleteFrame();}//面板final JPanel panelnew JPanel();//创建学生管理系统标签final JLabel systemnew JLabel();//创建学号标签final JLabel snoLabelnew JLabel();//创建学号文本框final JTextField snoTextFieldnew JTextField();//添加删除按钮final JButton deleteButtonnew JButton();//保存文本框中的数据String sno;//准备连接的对象GetConnection connectionnew GetConnection();Connection connnull;public DeleteFrame(){//初始化窗体initFrame();//初始化面板initPanel();//绑定监听事件buttonAction();//窗体可见放最后吧不然里面的东西不会显示呢this.setVisible(true);}public void initFrame() {//设置窗体的标题this.setTitle(删除学生信息);//设置窗体大小不可改变this.setResizable(false);//设置界面置顶(就是页面不会别其他页面覆盖界面始终在最上面)this.setAlwaysOnTop(true);//那还是改成setSize吧,设置窗体的大小就行了this.setSize(500,400);//居中this.setLocationRelativeTo(null);//设置窗体关闭按钮的动作作为退出this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}//初始化面板public void initPanel() {initModule();//设置为不采用任何布局管理器,在Frame中设置没有效果结果还是会被panel替代了panel.setLayout(null);//添加相关的组件panel.add(system);panel.add(snoLabel);panel.add(snoTextField);panel.add(deleteButton);this.setContentPane(panel);}//初始化组件public void initModule() {//初始化管理系统相关组件system.setText(学生管理系统);//设置字体的类型加粗和大小system.setFont(new Font(Microsoft YaHei,Font.BOLD,35));//标签的位置和大小system.setBounds(150,0,250,50);//初始化学号相关的组件snoLabel.setText(学号:);//设置字体的类型加粗和大小snoLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,50));//标签的位置和大小snoLabel.setBounds(30,135,130,60);//文本框位置snoTextField.setBounds(170,135,240,70);snoTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,30));//删除按钮deleteButton.setBounds(300,280,170,60);deleteButton.setText(删除数据);deleteButton.setFont(new Font(宋体,Font.BOLD,30));}//绑定按钮public void buttonAction() {deleteButton.addActionListener(this);}Overridepublic void actionPerformed(ActionEvent e) {JButton button (JButton)e.getSource();//获得触发此次动作事件的按钮对象String buttonName e.getActionCommand();//获得触发此次动作事件的按钮的标签文本if(buttonName.equals(删除数据)){//System.out.println(我删除了数据);verify();}}//删除学生信息验证public void verify() {snosnoTextField.getText().trim().toString();try {if(judegeSno(sno)){//1.获取到已经存在的学号学生的信息int indexMainFrame.getIndex(sno);//2.删除指定索引的对象//删除数据库中的数据delete();MainFrame.list.remove(index);System.out.println(删除成功);this.setVisible(false);//窗口不显示new MainFrame();//回到主窗口}}catch (Exception e){e.printStackTrace();}}//判断学号是否符合规范以及是否存在public boolean judegeSno(String sno){if(sno.matches(2[0-9]{11})){//存在才能删除if(MainFrame.exisit(sno)){return true;}else {MainFrame.warning(该学号未录入系统);return false;}}else{MainFrame.warning(学号不符合规范);return false;}}//删除已经存在的用户public void delete() {//获取数据库连接不然会报空指针异常connconnection.getCon();try{//sno,name,sex,age,id,number,address//定义插入数据预处理的SQL语句String sqldelete from Student where sno?;//实例化PreparedStatement对象PreparedStatement psconn.prepareStatement(sql);//设置预处理语句参数ps.setString(1, sno);//执行删除操作ps.executeUpdate();}catch(SQLException e) {//warning(该用户已经删除请勿重复注册);e.printStackTrace();}}
}改 import com.sun.tools.javac.Main;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class AlterFrame extends JFrame implements ActionListener, ItemListener {//主方法public static void main(String[] args) {new AlterFrame();}//面板final JPanel panelnew JPanel();//创建学生管理系统标签final JLabel systemnew JLabel();//创建学号标签final JLabel snoLabelnew JLabel();//创建学号文本框final JTextField snoTextFieldnew JTextField();//创建学生姓名标签final JLabel nameLabelnew JLabel();//创建学生姓名文本框final JTextField nameTextFieldnew JTextField();//创建性别标签final JLabel sexLabelnew JLabel();//创建性别文本框//final JTextField sexTextFieldnew JTextField();//性别文本框改成单选按钮//创建按钮组对象final ButtonGroup buttonGroupnew ButtonGroup();//创建单选按钮对象final JRadioButton manRadioButtonnew JRadioButton();final JRadioButton womanRadioButtonnew JRadioButton();//创建年龄标签final JLabel ageLabelnew JLabel();//创建年龄文本框final JTextField ageTextFieldnew JTextField();//创建身份证号码标签final JLabel idLabelnew JLabel();//创建身份证号码文本框final JTextField idTextFieldnew JTextField();//创建手机号码标签final JLabel phoneNumberLabelnew JLabel();//创建手机号码文本框final JTextField phoneNumbeTextFieldnew JTextField();//创建家庭住址标签final JLabel addressLabelnew JLabel();//创建家庭住址文本框final JTextField addressTextFieldnew JTextField();//修改按钮final JButton alterButtonnew JButton();//保存文本框中的相关数据String name;String age;//真的麻烦了不是一点要按下单选按钮才会有值所以就先给他赋一个初值吧String sex男;String sno;String id;String number;String address;//准备连接的对象GetConnection connectionnew GetConnection();Connection connnull;public AlterFrame(){//初始化窗体initFrame();//初始化面板initPanel();//绑定监听事件buttonAction();//窗体可见放最后吧不然里面的东西不会显示呢this.setVisible(true);}public void initFrame() {//设置窗体的标题this.setTitle(修改学生信息);//设置窗体大小不可改变this.setResizable(false);//设置界面置顶(就是页面不会别其他页面覆盖界面始终在最上面)this.setAlwaysOnTop(true);//那还是改成setSize吧,设置窗体的大小就行了this.setSize(500,400);//居中this.setLocationRelativeTo(null);//设置窗体关闭按钮的动作作为退出this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}//初始化面板public void initPanel() {initModule();//设置为不采用任何布局管理器,在Frame中设置没有效果结果还是会被panel替代了panel.setLayout(null);//添加相关的组件panel.add(system);panel.add(snoLabel);panel.add(snoTextField);panel.add(nameLabel);panel.add(nameTextField);panel.add(sexLabel);panel.add(manRadioButton);panel.add(womanRadioButton);panel.add(ageLabel);panel.add(ageTextField);panel.add(idLabel);panel.add(idTextField);panel.add(phoneNumberLabel);panel.add(phoneNumbeTextField);panel.add(addressLabel);panel.add(addressTextField);panel.add(alterButton);this.setContentPane(panel);}//初始化组件public void initModule() {//初始化管理系统相关组件system.setText(学生管理系统);//设置字体的类型加粗和大小system.setFont(new Font(Microsoft YaHei,Font.BOLD,35));//标签的位置和大小system.setBounds(150,0,250,50);//初始化学号相关的组件snoLabel.setText(学号:);//设置字体的类型加粗和大小snoLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小snoLabel.setBounds(30,150,100,50);//文本框位置snoTextField.setBounds(120,155,150,40);//文本框字体大小snoTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,15));//初始化姓名相关的组件nameLabel.setText(姓名:);//设置字体的类型加粗和大小nameLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小nameLabel.setBounds(30,50,100,50);//文本框位置nameTextField.setBounds(120,55,150,40);//文本框字体大小nameTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,15));//初始化性别相关的组件sexLabel.setText(性别:);//设置字体的类型加粗和大小sexLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小sexLabel.setBounds(280,50,100,50);//性别按钮组buttonGroup.add(manRadioButton);//将单选按钮添加到按钮组中buttonGroup.add(womanRadioButton);//将单选按钮添加到按钮组中manRadioButton.setText(男);//设置单选按钮的文本womanRadioButton.setText(女);//设置单选按钮的文本manRadioButton.setSelected(true);//将单选按钮默认认为被选中manRadioButton.setBounds(340,50,50,50);//设置单选按钮的位置womanRadioButton.setBounds(390,50,50,50);//设置单选按钮的位置//初始化年龄相关的组件ageLabel.setText(年龄:);//设置字体的类型加粗和大小ageLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小ageLabel.setBounds(30,100,100,50);//文本框位置ageTextField.setBounds(120,105,150,40);//文本框字体大小ageTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,15));//初始化身份证号码相关的组件idLabel.setText(身份证号码:);//设置字体的类型加粗和大小idLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小idLabel.setBounds(5,200,110,50);//文本框位置idTextField.setBounds(120,205,150,40);//初始化手机号码相关的组件phoneNumberLabel.setText(手机号码:);//设置字体的类型加粗和大小phoneNumberLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小phoneNumberLabel.setBounds(15,250,110,50);//文本框位置phoneNumbeTextField.setBounds(120,255,150,40);//文本框字体大小phoneNumbeTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,15));//初始化家庭住址相关的组件addressLabel.setText(家庭住址:);//设置字体的类型加粗和大小addressLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,20));//标签的位置和大小addressLabel.setBounds(15,295,110,50);//文本框位置addressTextField.setBounds(120,300,150,40);//添加按钮alterButton.setBounds(300,280,170,60);alterButton.setText(修改数据);alterButton.setFont(new Font(宋体,Font.BOLD,30));}//绑定按钮public void buttonAction() {alterButton.addActionListener(this); //没绑定的话性别就修改不了了manRadioButton.addItemListener(this);womanRadioButton.addItemListener(this);}Overridepublic void actionPerformed(ActionEvent e) {JButton button (JButton)e.getSource();//获得触发此次动作事件的按钮对象String buttonName e.getActionCommand();//获得触发此次动作事件的按钮的标签文本if(buttonName.equals(修改数据)){//System.out.println(我添加了数据);verify();}}//修改学生信息判断public void verify(){//等一下要判断是否规范,所以需要用trim去除字符串前面的空白字符namenameTextField.getText().trim().toString();ageageTextField.getText().trim().toString();snosnoTextField.getText().trim().toString();ididTextField.getText().trim().toString();numberphoneNumbeTextField.getText().trim().toString();addressaddressTextField.getText().trim().toString();try {if(judegeSno(sno)){if(judgeName(name)){if (judgeAge(age)){if (judgeId(id)){if (judgeNumber(number)){if (judgeAddress(address)){//修改数据//修改数据库update();//1.获取到已经存在的学号学生的信息int indexMainFrame.getIndex(sno);Student studentMainFrame.list.get(index);//2.修改信息student.setName(name);//更新姓名student.setAge(age);//更新年龄student.setSex(sex);//更新性别student.setId(id);//更新身份证号码student.setId(number);//更新手机号码student.setAddress(address);//更新家庭住址//3.填入集合中MainFrame.list.set(index,student);System.out.println(修改成功);this.setVisible(false);//窗口不显示new MainFrame();//回到主窗口}}}}}}}catch (Exception e){MainFrame.warning(您没有输入数据,或者输入违法);e.printStackTrace();}}//获取单选按钮中对应的值Overridepublic void itemStateChanged(ItemEvent e) {//虽然只有男女两个选项但是我还是加上了else if的判断if(e.getSource()manRadioButton){sex男;}else if(e.getSource()womanRadioButton) {sex女;}}//判断学号是否符合规范以及是否存在public boolean judegeSno(String sno){if(sno.matches(2[0-9]{11})){//存在才能修改if(MainFrame.exisit(sno)){return true;}else {MainFrame.warning(该学号未录入系统);return false;}}else{MainFrame.warning(学号不符合规范);return false;}}//判断姓名是否符合规范public boolean judgeName(String name){if (name.matches(^(?:[\u4e00-\u9fa5·]{2,16})$)){return true;}else{MainFrame.warning(姓名不符合规范);return false;}}//判断年龄是否符合规范public boolean judgeAge(String age){if(age.matches([0-9]*)){int digitInteger.valueOf(age);if(digit0){return true;}else{MainFrame.warning(年龄不能为负);return false;}}else{MainFrame.warning(年龄不符合规范);return false;}}//判断身份证号码是否规范public boolean judgeId(String id){if(id.matches(^[1-9]\\d{5}(?:18|19|20)\\d{2}(?:0\\d|10|11|12)(?:0[1-9]|[1-2]\\d|30|31)\\d{3}[\\dXx]$)){return true;}else{MainFrame.warning(身份证号码不符合规范);return false;}}//判断手机号码是否符合规范public boolean judgeNumber(String number){if(number.matches(^(?:(?:\\|00)86)?1[3-9]\\d{9}$)){return true;}else {MainFrame.warning(手机号码不符合规范);return false;}}//判断是否有住址,这个不太好判断,我这里是有就行public boolean judgeAddress(String address){if(address.length()!0){return true;}return false;}//准备好数据之后执行修改操作public void update() {//获取数据库连接不然会报空指针异常connconnection.getCon();try{//sno,name,sex,age,id,number,address//定义修改数据预处理的SQL语句String sqlupdate Student set name?,sex?,age?,id?,phoneNumber?,address? where sno?;//实例化PreparedStatement对象PreparedStatement psconn.prepareStatement(sql);//设置预处理语句参数ps.setString(1, name);ps.setString(2, sex);ps.setString(3, age);ps.setString(4, id);ps.setString(5, number);ps.setString(6, address);ps.setString(7, sno);//执行修改操作ps.executeUpdate();}catch(SQLException e) {MainFrame.warning(该用户已经已经添加);e.printStackTrace();}}
}
查 import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class SelectFrame extends JFrame implements ActionListener {//主方法public static void main(String[] args) {new SelectFrame();}//面板final JPanel panelnew JPanel();//创建学生管理系统标签final JLabel systemnew JLabel();//创建学号标签final JLabel snoLabelnew JLabel();//创建学号文本框final JTextField snoTextFieldnew JTextField();//添加查询按钮final JButton selectButtonnew JButton();//添加查询所有按钮final JButton selectAllButtonnew JButton();//保存文本框中的数据String sno;//准备连接的对象GetConnection connectionnew GetConnection();Connection connnull;//定义表格列名数组(表头)final String[] columnNames{学号,姓名,性别,年龄,身份证号码,电话号码,家庭住址};//创建显示表格的滚动面板//单项查询的结果static String [][]tableValuenew String[1][7];public SelectFrame(){//初始化窗体initFrame();//初始化面板initPanel();//绑定监听事件buttonAction();//窗体可见放最后吧不然里面的东西不会显示呢this.setVisible(true);}public void initFrame() {//设置窗体的标题this.setTitle(查询学生信息);//设置窗体大小不可改变this.setResizable(false);//设置界面置顶(就是页面不会别其他页面覆盖界面始终在最上面)this.setAlwaysOnTop(true);//那还是改成setSize吧,设置窗体的大小就行了this.setSize(500,400);//居中this.setLocationRelativeTo(null);//设置窗体关闭按钮的动作作为退出this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}//初始化面板public void initPanel() {initModule();//设置为不采用任何布局管理器,在Frame中设置没有效果结果还是会被panel替代了panel.setLayout(null);//添加相关的组件panel.add(system);panel.add(snoLabel);panel.add(snoTextField);panel.add(selectButton);panel.add(selectAllButton);this.setContentPane(panel);}//初始化组件public void initModule() {//初始化管理系统相关组件system.setText(学生管理系统);//设置字体的类型加粗和大小system.setFont(new Font(Microsoft YaHei,Font.BOLD,35));//标签的位置和大小system.setBounds(150,0,250,50);//初始化学号相关的组件snoLabel.setText(学号:);//设置字体的类型加粗和大小snoLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,50));//标签的位置和大小snoLabel.setBounds(30,135,130,60);//文本框位置snoTextField.setBounds(170,135,240,70);snoTextField.setFont(new Font(Microsoft YaHei,Font.BOLD,30));//查询按钮selectButton.setBounds(30,280,170,60);selectButton.setText(查询数据);selectButton.setFont(new Font(宋体,Font.BOLD,30));selectAllButton.setBounds(300,280,170,60);selectAllButton.setText(查询所有);selectAllButton.setFont(new Font(宋体,Font.BOLD,30));}//绑定按钮public void buttonAction() {selectButton.addActionListener(this);selectAllButton.addActionListener(this);}Overridepublic void actionPerformed(ActionEvent e) {JButton button (JButton)e.getSource();//获得触发此次动作事件的按钮对象String buttonName e.getActionCommand();//获得触发此次动作事件的按钮的标签文本if(buttonName.equals(查询数据)){//System.out.println(我查询了数据);verify();}else if(buttonName.equals(查询所有)){//重新打印即可this.setVisible(false);//窗口不显示new MainFrame();//回到主窗口}}//查询学生信息验证public void verify() {snosnoTextField.getText().trim().toString();try {if(judegeSno(sno)){//1.获取到已经存在的学号学生的信息int indexMainFrame.getIndex(sno);//执行查询数据库的语句select();System.out.println(查询成功);this.setVisible(false);//窗口不显示//new MainFrame();//回到主窗口new TmpFrame();//回到一个类似主窗口的东西}}catch (Exception e){e.printStackTrace();}}public boolean judegeSno(String sno){if(sno.matches(2[0-9]{11})){//存在才能查询if(MainFrame.exisit(sno)){return true;}else {MainFrame.warning(该学号未录入系统);return false;}}else{MainFrame.warning(学号不符合规范);return false;}}//查询已经存在的用户避免重复插入,在程序初始化的时候调用public void select() {//获取数据库连接不然会报空指针异常connconnection.getCon();try{//sno,name,sex,age,id,number,address//定义查询数据预处理的SQL语句String sqlselect * from student where sno?;//实例化PreparedStatement对象PreparedStatement psconn.prepareStatement(sql);//设置预处理语句参数ps.setString(1, sno);//执行查询操作ResultSet rsps.executeQuery();//获取数据while(rs.next()) {tableValue[0][0]rs.getString(1);tableValue[0][1]rs.getString(2);tableValue[0][2]rs.getString(3);tableValue[0][3]rs.getString(4);tableValue[0][4]rs.getString(5);tableValue[0][5]rs.getString(6);tableValue[0][6]rs.getString(7);//System.out.println(name password sno phone );} }catch(SQLException e) {e.printStackTrace();}}
} 主界面
Java创建表格_无名氏*的博客-CSDN博客https://blog.csdn.net/qq_44848423/article/details/103539286 import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;public class MainFrame extends JFrame implements ActionListener {//主方法public static void main(String[] args) {new MainFrame();}//面板final JPanel panelnew JPanel();//创建学生管理系统标签final JLabel systemnew JLabel();//定义表格列名数组final String[] columnNames{学号,姓名,性别,年龄,身份证号码,电话号码,家庭住址};//创建显示表格的滚动面板JScrollPane scrollPanenew JScrollPane();//创建表格类型JTable tablenew JTable();//添加按钮final JButton addButtonnew JButton();//添加删除按钮final JButton deleteButtonnew JButton();//修改按钮final JButton alterButtonnew JButton();//添加删除按钮final JButton selectButtonnew JButton();//创建学生对象Student snew Student();//储存学生的信息,所以我把他设置成静态的了,这样在其他类里面也可以用static ArrayListStudentlistnew ArrayList();//准备连接的对象GetConnection connectionnew GetConnection();Connection connnull;public MainFrame(){//初始化窗体initFrame();//初始化面板initPanel();//绑定监听事件buttonAction();//窗体可见放最后吧不然里面的东西不会显示呢this.setVisible(true);}public void initFrame() {//设置窗体的标题this.setTitle(主界面);//设置窗体大小不可改变this.setResizable(false);//设置界面置顶(就是页面不会别其他页面覆盖界面始终在最上面)this.setAlwaysOnTop(true);//那还是改成setSize吧,设置窗体的大小就行了this.setSize(1000,800);//居中this.setLocationRelativeTo(null);//设置窗体关闭按钮的动作作为退出this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//显示滚动条}//初始化面板public void initPanel() {initModule();//设置为不采用任何布局管理器,在Frame中设置没有效果结果还是会被panel替代了panel.setLayout(null);//添加相关的组件panel.add(system);//添加增删改查按钮panel.add(addButton);panel.add(deleteButton);panel.add(alterButton);panel.add(selectButton);//将滚动面板添加到布局的中间panel.add(scrollPane);this.setContentPane(panel);}//初始化组件public void initModule() {//每一次打印都需要清除之前的信息list.clear();//获取数据库中的数据select();//1.创建表格this.tablenew JTable();//2.获取表格的数据模型DefaultTableModel model(DefaultTableModel)this.table.getModel();//3.对表格的数据模型操作model.setColumnIdentifiers(columnNames);//设置表头//表格信息String [][]tableValuesnew String[list.size()][columnNames.length];//表表格里面的数据存到数组里面for (int i 0; i list.size(); i) {tableValues[i][0]list.get(i).getSno();tableValues[i][1]list.get(i).getName();tableValues[i][2]list.get(i).getSex();tableValues[i][3]list.get(i).getAge();tableValues[i][4]list.get(i).getId();tableValues[i][5]list.get(i).getPhoneNumber();tableValues[i][6]list.get(i).getAddress();model.addRow(tableValues[i]);//增加行,不要写成addColumn我就说怎么不一样}//按照比例调整表格所以列的宽度(书本245页)完全没效果//this.table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);//用这个可以调节每一列this.table.getColumnModel().getColumn(0).setPreferredWidth(50);//学号this.table.getColumnModel().getColumn(1).setPreferredWidth(10);//姓名this.table.getColumnModel().getColumn(2).setPreferredWidth(5);//性别this.table.getColumnModel().getColumn(3).setPreferredWidth(5);//年龄this.table.getColumnModel().getColumn(4).setPreferredWidth(80);//身份证号码this.table.getColumnModel().getColumn(5).setPreferredWidth(50);//电话号码this.table.getColumnModel().getColumn(6).setPreferredWidth(100);//家庭住址//4.更新表格模型this.table.setModel(model);//5.为JScrollPane面板设置一个可视化图表scrollPane.setViewportView(this.table);//6.将表格组件添加到JScrollPane面板上//设置滚动条的大小(不然太大了滚动条不会显示)scrollPane.setBounds(100,100,800,400);//初始化管理系统相关组件system.setText(学生管理系统);//设置字体的类型加粗和大小system.setFont(new Font(Microsoft YaHei,Font.BOLD,35));//标签的大小和高度system.setBounds(400,0,400,100);//添加按钮addButton.setBounds(50,600,150,60);addButton.setText(添加);addButton.setFont(new Font(宋体,Font.BOLD,30));//删除按钮deleteButton.setText(删除);deleteButton.setBounds(285,600,150,60);deleteButton.setFont(new Font(宋体,Font.BOLD,30));//修改按钮alterButton.setText(修改);alterButton.setBounds(550,600,150,60);alterButton.setFont(new Font(宋体,Font.BOLD,30));//查找按钮selectButton.setText(查找);selectButton.setBounds(800,600,150,60);selectButton.setFont(new Font(宋体,Font.BOLD,30));}//绑定按钮public void buttonAction() {addButton.addActionListener(this);deleteButton.addActionListener(this);alterButton.addActionListener(this);selectButton.addActionListener(this);}Overridepublic void actionPerformed(ActionEvent e) {JButton button (JButton)e.getSource();//获得触发此次动作事件的按钮对象String buttonName e.getActionCommand();//获得触发此次动作事件的按钮的标签文本if(buttonName.equals(添加)){this.setVisible(false);new AddFrame();System.out.println(我被添加了);}else if(buttonName.equals(删除)){this.setVisible(false);new DeleteFrame();System.out.println(我被删除了);}else if(buttonName.equals(修改)){this.setVisible(false);new AlterFrame();System.out.println(我被修改了);}else if (buttonName.equals(查找)){this.setVisible(false);new SelectFrame();System.out.println(我被查找了);}}//输出警告弹窗static public void warning(String str) {//添加一个弹窗的警告JDialog jDialognew JDialog();//创建弹窗对象jDialog.setTitle(警告);//设置弹窗标题和Frame差不多可能还要通过标签来提示jDialog.setSize(500,400);//设置弹窗的大小jDialog.setAlwaysOnTop(true);//让弹窗置顶jDialog.setLocationRelativeTo(null);//让弹窗居中jDialog.setModal(true);//弹窗不关闭则无法操作下面的界面//警告标签放在弹窗里面final JLabel warningLabelnew JLabel(str,JLabel.CENTER);//设置字体的类型加粗和大小warningLabel.setFont(new Font(Microsoft YaHei,Font.BOLD,30));//标签的位置和大小warningLabel.setBounds(0,100,500,100);//这个也要取消布局管理器才行//jDialog.getContentPane().setLayout(null);//往弹窗中添加标签(垂直加居中放置标签)jDialog.getContentPane().add(warningLabel,BorderLayout.CENTER);jDialog.setVisible(true);//让弹窗显示出来}//返回学生账号集合的索引(学号是主键)static public int getIndex(String sno){//查找是否存在学号相同的人for (int i 0; i list.size(); i) {if(list.get(i).getSno().equals(sno)){return i;}}//查看集合有没有数据//System.out.println(list.size());return -1;}//判断学生账号是否已经存在static public boolean exisit(String sno){//存在的话返回的索引为大于0的数return getIndex(sno)0;}//查询已经存在的用户避免重复插入,在程序初始化的时候调用public void select() {//获取数据库连接不然会报空指针异常connconnection.getCon();try{//sno,name,sex,age,id,number,address//定义静态select语句String sqlselect * from student;//实例化Statement对象(静态),这里不知道为什么需要//java.sql这个东西不然就没有executeQuery这个方法java.sql.Statement sconn.createStatement();//执行静态select语句ResultSet rss.executeQuery(sql);//添加到集合中while(rs.next()) {//获取数据String snors.getString(1);String namers.getString(2);String sexrs.getString(3);String agers.getString(4);String idrs.getString(5);String numberrs.getString(6);String addressrs.getString(7);//System.out.println(name password sno phone );//插入到集合中MainFrame.list.add(new Student(sno, name, sex, age,id,number,address));}}catch(SQLException e) {e.printStackTrace();}}
}类主界面
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.sql.ResultSet;
import java.sql.SQLException;import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;//类似主窗口,用于单个的查询public class TmpFrame extends JFrame {//主方法public static void main(String[] args) {new TmpFrame();}//面板final JPanel panelnew JPanel();//创建学生管理系统标签final JLabel systemnew JLabel();//定义表格列名数组final String[] columnNames{学号,姓名,性别,年龄,身份证号码,电话号码,家庭住址};//创建显示表格的滚动面板JScrollPane scrollPanenew JScrollPane();//创建表格类型JTable tablenew JTable();public TmpFrame(){//初始化窗体initFrame();//初始化面板initPanel();//窗体可见放最后吧不然里面的东西不会显示呢this.setVisible(true);}public void initFrame() {//设置窗体的标题this.setTitle(主界面);//设置窗体大小不可改变this.setResizable(false);//设置界面置顶(就是页面不会别其他页面覆盖界面始终在最上面)this.setAlwaysOnTop(true);//那还是改成setSize吧,设置窗体的大小就行了this.setSize(1000,800);//居中this.setLocationRelativeTo(null);//设置窗体关闭按钮的动作作为退出this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//显示滚动条}//初始化面板public void initPanel() {initModule();//设置为不采用任何布局管理器,在Frame中设置没有效果结果还是会被panel替代了panel.setLayout(null);//添加相关的组件panel.add(system);//将滚动面板添加到布局的中间panel.add(scrollPane);this.setContentPane(panel);}//初始化组件public void initModule() {//1.创建表格this.tablenew JTable();//2.获取表格的数据模型DefaultTableModel model(DefaultTableModel)this.table.getModel();//3.对表格的数据模型操作//第用第一行,不是整个数组model.setColumnIdentifiers(SelectFrame.tableValue[0]);//设置表头//按照比例调整表格所以列的宽度(书本245页)完全没效果//this.table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);//用这个可以调节每一列this.table.getColumnModel().getColumn(0).setPreferredWidth(50);//学号this.table.getColumnModel().getColumn(1).setPreferredWidth(10);//姓名this.table.getColumnModel().getColumn(2).setPreferredWidth(5);//性别this.table.getColumnModel().getColumn(3).setPreferredWidth(5);//年龄this.table.getColumnModel().getColumn(4).setPreferredWidth(80);//身份证号码this.table.getColumnModel().getColumn(5).setPreferredWidth(50);//电话号码this.table.getColumnModel().getColumn(6).setPreferredWidth(100);//家庭住址//4.更新表格模型this.table.setModel(model);//5.为JScrollPane面板设置一个可视化图表scrollPane.setViewportView(this.table);//6.将表格组件添加到JScrollPane面板上//设置滚动条的大小(不然太大了滚动条不会显示)scrollPane.setBounds(100,100,800,400);//初始化管理系统相关组件system.setText(学生管理系统);//设置字体的类型加粗和大小system.setFont(new Font(Microsoft YaHei,Font.BOLD,35));//标签的大小和高度system.setBounds(400,0,400,100);}
}主程序 //程序的入口
public class App {public static void main(String[] args) {new Enter();}
}程序说明与体会
这个代码放这里也不知道会有多少人看我自己也快忘记写了什么但是记得是写了很久整个可以分成两个阶段用户登录注册那里就是看来视频是没有图形界面的程序就没有重新运行之后数据就还原了这个用数据库保存数据就挺好的因为上学期是学了SQLserver就用这个来装数据了。
原本打算是写了三个表就常见的S,C,SC,但是感觉把这设置界面要实现增删改查的界面实现那不考虑他们的连接就要设计4*312个界面虽然有些界面大体相同但是也太难弄了吧就和老师商量能不能简化一下登录注册那个是之前就写了有不想删掉而且那个随机生成验证码那个还挺好玩的就保留了整个就是不同界面之间到处穿来穿去因为是先写的代码就一点冗余了虽然后面学生管理那个代码同样也有点冗余但是太难删了我尽量把有个人信息的地方删除。
--S(Sno,Sname,Ssex,Sage)
--C(Cno,Cname,Teacher)
--SC(Sno,Cno,Grade)
因为要输入数据难免会有很多错误的输入我就用报错来处理因为报错比较多就干脆把warning那个方法修改成传递参数的方法登录那些的程序先写警告是用空格占格让整个字体能够居中输出后面发现可以通调用方法实现居中放置。后面又发现有必要每个程序的写一个警告的方法吗只要写一个其他的直接调用不就行了C语言他们使用extern来声明Java的话通过设置成静态的方法通过类名就可以调用了。
java 中JLabel中的内容垂直居中和水平居中问题_jlabel剧中_独孤战天斗神的博客-CSDN博客https://blog.csdn.net/ygl19920119/article/details/79707547
jDialog.getContentPane().add(warningLabel,BorderLayout.CENTER);
很多代码都冗余了但是我也确定哪些可以删除看着有点难修改不过是能够跑的为了调试方便我给有界面的类里面都有main方法。主要就是繁琐的感觉取消布局之后要自己通过坐标来调整花费了很长的时间。原本为了简单可以统一用文本框的我改用了单选按钮对于事件的响应花费了很长时间以及列表的布局。这比之前的计算器就还要写的久了-_-
我这里的实现过程就是把每次的数据从数据库中提取到集合中运行的时候是对集合进行操作增删改查需要同步到数据库中。有疑问的再更新暂时想不到有什么其他要注意的地方。
总之经历难忘希望未来越来越好。