之前介绍了登录界面的设计,现在介绍一下注册管理员和录入信息的部分。
设计注册管理员的思想是:默认一个拥有创建用户的管理员,这个管理员可以创建数据库登录用户(相当于创建教师),而这些用户只能登录和进行其他操作没有创建用户的功能(类似于教师不能创建教师), 创建用户成功后,会将账号密码和昵称保存到My_Adminstrator表中。
登录界面的作用是验证是否能登录数据库,登录成功后将账号、密码通过参数的形式通过其他类的构造函数传递过去,再在其他类中重新连接数据库。代码中我去掉了import。
public class Register extends JFrame implements ActionListener{
Font font = new Font("楷体_GB2312",Font.BOLD+Font.ITALIC,20);
Font font1 = new Font("楷体_GB2312",Font.BOLD+Font.ITALIC,15);
JTextField register_account;
JTextField register_name;
JTextField register_password;
String account;
String password;
String connectDB = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Databaseproject";
String JDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
Connection conR;
Statement stmtR;
JButton JB_sure = new JButton("确定");
JButton JB_reset = new JButton("重置");
String path = "C:/Users/yangcheng/workspace/DatabaseExperiment/src"
+ "/Graphical_User_Interface/choice.png";
String path1 = "C:/Users/yangcheng/workspace/DatabaseExperiment/src"
+ "/Graphical_User_Interface/成功.png";
JPanel jpl = new JPanel();
JPanel jpl1 = new JPanel();
JPanel jpl2 = new JPanel();
JPanel jpl3 = new JPanel();
public Register(String ac,String pw){
account = ac;
password = pw;
try {
Class.forName(JDriver);
conR = DriverManager.getConnection(connectDB, account, password);
stmtR = conR.createStatement();
} catch (ClassNotFoundException | SQLException e) {
dispose();
}
this.setTitle("管理员注册");
this.setSize(280,230);
this.setLayout(new GridLayout(4,2,15,20));
this.setLocationRelativeTo(null);
ImageIcon bg = new ImageIcon(path); //背景图片
JLabel label = new JLabel(bg);
label.setBounds(0,0,bg.getIconWidth(),bg.getIconHeight());
this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
JPanel imgP = (JPanel)this.getContentPane();
imgP.setOpaque(false);
JLabel lba = new JLabel("账号:"); //账号
register_account = new JTextField(10);
lba.setFont(font);
register_account.setFont(font1);
jpl.add(lba);
jpl.add(register_account);
jpl.setOpaque(false);
this.add(jpl);
JLabel lbn = new JLabel("姓名:"); //用户名
register_name = new JTextField(10);
lbn.setFont(font);
register_name.setFont(font1);
jpl1.add(lbn);
jpl1.add(register_name);
jpl1.setOpaque(false);
this.add(jpl1);
JLabel lbp = new JLabel("密码:"); //密码
register_password = new JTextField(10);
lbp.setFont(font);
register_password.setFont(font1);
jpl2.add(lbp);
jpl2.add(register_password);
jpl2.setOpaque(false);
this.add(jpl2);
JB_sure.setActionCommand("sure");
JB_sure.addActionListener(this);
jpl3.add(JB_sure);
JB_reset.setActionCommand("reset");
JB_reset.addActionListener(this);
jpl3.add(JB_reset);
jpl3.setOpaque(false);
this.add(jpl3);
this.setVisible(true);
this.setResizable(false);
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("sure")){
String user = register_account.getText();
String name = register_name.getText();
String pwd = register_password.getText();
if(!user.equals("") && !name.equals("") && !pwd.equals("")){
try{
ResultSet rs = stmtR.executeQuery("select * from My_Adminstrator");
while (rs.next()) {
if(rs.getString("Account").equals(user)){
JOptionPane.showMessageDialog(null,"该用户已经存在");
stmtR.close();
conR.close();
dispose();
break;
}
}
String str = "create login "+user+" with password = '"+pwd //创建登录用户,并指定数据库
+"', default_database=Databaseproject";
String str1 = "create user "+user+" for login "+ user+" with default_schema=Databaseproject";//创建用户
String str2 = "exec sp_addrolemember 'db_owner', '"+user+"'";//赋予权限
String sql = "insert into My_Adminstrator values('"+user+"','"+name+"','"+pwd+"')";//添加到表中
stmtR.executeUpdate(str);
stmtR.executeUpdate(str1);
stmtR.executeUpdate(str2);
stmtR.executeUpdate(sql);
JOptionPane.showMessageDialog(null,"注册成功");
stmtR.close();
conR.close();
dispose();
}catch(Exception ex){
JOptionPane.showMessageDialog(null,"用户权限不够");
try {
stmtR.close();
conR.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
dispose();
}
}else{
JOptionPane.showMessageDialog(null,"信息不能为空");
}
}
if(e.getActionCommand().equals("reset")){
register_account.setText(null);
register_name.setText(null);
register_password.setText(null);
}
}
}
注册界面: 代码的逻辑很简单,通过文本框的形式获取账号、姓名、密码,判断是否为空,数据库表中是否存在该用户,如果不存在且是超级管理员则成功,反之则失败。
由于录入信息的代码比较繁琐比较多,我就挑一个最少的介绍吧,学籍界面,代码中我去掉了import。
public class School_Manage extends JFrame implements ActionListener{
String account;
String password;
String