对于我们的谭院长,我真是佩服的五体投地,一上课就是代码上万行的说,什么基础的都不讲,直接叫我们看代码,改系统,最后就就是叫我们做一个独立的系统。
没办法,只好按照他的要求码代码,我修改的是他已经留了几年的学生管理系统,现在修改了一点,现在看来效果还不错,我也在修改之中学会了许多JAVA语句,如何连接数据库等。
一开始,学生管理系统摆在我的面前,我什么也看不懂,还是踏踏实实地看了两个星期的JAVA课本,逐渐懂了一点,也开始慢慢改了一点。
首先我把登录界面优化了一下,优化前的代码(关于登录界面的)
void login_actionPerformed(ActionEvent e) {
username = JOptionPane.showInputDialog(this, "请输入用户名");
String pwd = JOptionPane.showInputDialog(this, "请输入密码");
if (! (username == null && pwd == null)) {
try {//连接数据库,验证用户
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(
"jdbc:odbc:lee",
"sa", "123");
ps = con.createStatement(ResultSet.
TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
try {
rs = ps.executeQuery("select * from users where username='" +
username + "' "); //读取数据库
if (!rs.next())
{
Log log = new Log();
log.addLog("\r\r", username + "用户试图登录系统,失败!");
log.closeStream();
JOptionPane.showMessageDialog(null, "不存在此用户!");
}
else if (! (rs.getString("pwd").trim().equals(pwd))) {
JOptionPane.showMessageDialog(null, "密码错误!");
Log log = new Log();
log.addLog("\r\r", username + "用户试图登录系统,失败!");
log.closeStream();
}
else {
if (rs.getString("power").trim().equals("系统管理员")) {
xjgl.setEnabled(true);
bjgl.setEnabled(true);
kcsz.setEnabled(true);
cjgl.setEnabled(true);
jMenuFile.setEnabled(true);
llyh.setEnabled(true);
adduser.setEnabled(true);
Log log = new Log();
log.addLog("\r\r", username + "(系统管理员)登录系统");
log.closeStream();
}
else {
cjgl.setEnabled(true);
xjgl.setEnabled(true);
xgcj.setEnabled(false);
tjcj.setEnabled(false);
xgxj.setEnabled(false);
tjxj.setEnabled(false);
Log log = new Log();
log.addLog("\r\r", username + "(普通用户)登录系统");
log.closeStream();
}
}
}
catch (SQLException sqle) {
String error = sqle.getMessage();
JOptionPane.showMessageDialog(null, error);
sqle.printStackTrace();
}
}
catch (Exception err) {
// err.getMessage();
Log log = new Log();
log.addLog("\r\r", "数据库连接错误!");
log.closeStream();
String error = err.getMessage();
JOptionPane.showMessageDialog(null, error);
}
}
}
登录界面图片如图
优化后修改登陆界面的代码
void login_actionPerformed(ActionEvent e) {
f=new JFrame("用户登录");
Container cp=f.getContentPane();
JPanel pa=new JPanel();
pa.setLayout(new FlowLayout());
lb1=new JLabel("请输入用户名:");
lb1.setFont(f1);
pa.add(lb1);
tf1=new JTextField(10);
tf1.setFont(f1);
pa.add(tf1);
lb2=new JLabel(" 请输入密码:");
lb2.setFont(f1);
pa.add(lb2);
userpwd=new JPasswordField(10);
userpwd.setFont(f1);
//userpwd.setBounds(new Rectangle(114, 68, 120, 32));
pa.add(userpwd);
JButton bt=new JButton("确定");
bt.setFont(f1);
bt.addActionListener(this);
pa.add(bt);
bt=new JButton("取消");
bt.setFont(f1);
bt.addActionListener(this);
pa.add(bt);
cp.add(pa,BorderLayout.CENTER);
f.pack();
f.setBounds(320, 260,309,156);
f.setVisible(true);
f.setResizable(false);
}
public void logIn(){
if (! (username == null && pwd == null)) {
try {//连接数据库,验证用户
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(
"jdbc:odbc:lee",
"sa", "123");
ps = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
try {
rs = ps.executeQuery("select * from users where username='" +
username + "' "); //读取数据库
if (!rs.next()){
Log log = new Log();
log.addLog("\r\r", username + "用户试图登录系统,失败!");
log.closeStream();
JOptionPane.showMessageDialog(null, "不存在此用户!");
}
else if (! (rs.getString("pwd").trim().equals(pwd))) {
JOptionPane.showMessageDialog(null, "密码错误!");
Log log = new Log();
log.addLog("\r\r", username + "用户试图登录系统,失败!");
log.closeStream();
}
else {
if (rs.getString("power").trim().equals("系统管理员")) {
xjgl.setEnabled(true);
bjgl.setEnabled(true);
kcsz.setEnabled(true);
cjgl.setEnabled(true);
jMenuFile.setEnabled(true);
llyh.setEnabled(true);
adduser.setEnabled(true);
logOut.setEnabled(true);
login.setEnabled(false);
deleteuser.setEnabled(true);
Log log = new Log();
log.addLog("\r\r", username + "(系统管理员)登录系统");
log.closeStream();
}
else {
cjgl.setEnabled(true);
xjgl.setEnabled(true);
xgcj.setEnabled(false);
tjcj.setEnabled(false);
xgxj.setEnabled(false);
tjxj.setEnabled(false);
logOut.setEnabled(true);
deleteuser.setEnabled(false);
login.setEnabled(false);
Log log = new Log();
log.addLog("\r\r", username + "(普通用户)登录系统");
log.closeStream();
}
}
}
catch (SQLException sqle) {
String error = sqle.getMessage();
JOptionPane.showMessageDialog(null, error);
sqle.printStackTrace();
}
}
catch (Exception err) {
// err.getMessage();
Log log = new Log();
log.addLog("\r\r", "数据库连接错误!");
log.closeStream();
String error = err.getMessage();
JOptionPane.showMessageDialog(null, error);
}
}
else{
JOptionPane.showMessageDialog(null, "输入错误,请重新输入");
return;
}
}
public void actionPerformed(ActionEvent e){
String cmd=e.getActionCommand();
if(cmd.equals("确定")){
username=tf1.getText();
pwd=String.valueOf(userpwd.getPassword()).trim();
logIn();
f.setVisible(false);
}
else if(cmd.equals("取消"))
f.setVisible(false);
}
登陆界面变为
此外,我添加了注销用户模块,使用户登录,注销更为合理化
添加的代码为
void logOut_actionPerformed(ActionEvent e) {
xjgl.setEnabled(false);
bjgl.setEnabled(false);
kcsz.setEnabled(false);
cjgl.setEnabled(false);
jMenuFile.setEnabled(true);
llyh.setEnabled(false);
adduser.setEnabled(false);
jMenuItem7.setEnabled(false);
login.setEnabled(true);
logOut.setEnabled(false);
Log log = new Log();
log.addLog("\r\r", username+"注销了用户");
log.closeStream();
}
另外,我发现最多只能存在10个账号,这是程序本身设置的,但不好在添加更多的账号,我就添加了一个删除用户的子模块,代码如下:
Deleteuser.java
package studentsystem;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
import java.util.Arrays;
public class deleteuser extends JDialog {
Statement ps;
ResultSet rs;
Connection con;
String url;
JPanel panel1 = new JPanel();
JButton sure = new JButton();//确定删除
JButton cancel = new JButton();//取消删除
JComboBox power = new JComboBox();//创建下拉列表
JLabel jLabel4 = new JLabel();//选择要删除的用户
public deleteuser(Frame frame, String title, boolean modal) {
super(frame, title, modal);
try {
jbInit();
pack();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public deleteuser() {
this(null, "", true);
}
private void jbInit() throws Exception {
panel1.setLayout(null);
this.getContentPane().setLayout(null);
panel1.setBounds(new Rectangle(10, 10, 452, 369));
sure.setBounds(new Rectangle(12, 90, 90, 35));
sure.setFont(new java.awt.Font("Dialog", 0, 15));
sure.setText("确 定");
sure.addActionListener(new deleteuser_sure_actionAdapter(this));
cancel.setBounds(new Rectangle(150, 90, 90, 38));
cancel.setFont(new java.awt.Font("Dialog", 0, 15));
cancel.setText("取 消");
cancel.addActionListener(new deleteuser_cancel_actionAdapter(this));
this.setTitle("删除用户");
power.setBounds(new Rectangle(150, 20, 125, 29));
jLabel4.setFont(new java.awt.Font("Dialog", 0, 15));
jLabel4.setText("请选择要删除的用户");
jLabel4.setBounds(new Rectangle(5, 21, 150, 34));
getContentPane().add(panel1, null);
panel1.add(sure, null);
panel1.add(cancel, null);
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:lee","sa", "123");
ps = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
}
catch (Exception err) {
Log log=new Log();
log.addLog("\r\r","数据库连接出错");
log.closeStream();
JOptionPane.showMessageDialog(null, "连接数据库错误!");
}
try{
rs = ps.executeQuery("select * from users ");
while (rs.next())
power.addItem(rs.getString("username"));
}
catch (SQLException sqle) {
String error = sqle.getMessage();
JOptionPane.showMessageDialog(null, error);
sqle.printStackTrace();
}
panel1.add(power, null);
panel1.add(jLabel4, null);
this.setBounds(310, 200, 310, 200);
this.setVisible(true);
}
void cancel_actionPerformed(ActionEvent e) {
this.dispose();
}
void sure_actionPerformed(ActionEvent e){
int temp=JOptionPane.showConfirmDialog(null, "确定删除用户"+power.getSelectedItem()+"?", "删除用户", JOptionPane.YES_NO_OPTION);
if(temp==JOptionPane.YES_OPTION){
try{
ps.executeUpdate("delete from users where username='" +power.getSelectedItem() + "'");
JOptionPane.showMessageDialog(null, "删除成功!");
this.setVisible(false);
Log log = new Log();
log.addLog("\r\r", "删除了用户"+power.getSelectedItem() );
log.closeStream();
}
catch (SQLException ex) {
String err = ex.getMessage();
JOptionPane.showMessageDialog(null, err);
}
}
else
return;
}
}
class deleteuser_cancel_actionAdapter
implements java.awt.event.ActionListener {
deleteuser adaptee;
deleteuser_cancel_actionAdapter(deleteuser adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.cancel_actionPerformed(e);
}
}
class deleteuser_sure_actionAdapter
implements java.awt.event.ActionListener {
deleteuser adaptee;
deleteuser_sure_actionAdapter(deleteuser adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.sure_actionPerformed(e);
}
}
运行图如下:
其他的若干也进行了优化处理,这里不用多说。
总之,修改这个程序的确让我学到了许多东西,也增加了我的经验吧。