系统是拥有验证码验证功能,账户登录功能,数据的增删改查功能,数据库内容是建立了学生表,院系表,学生账户表,管理员账户表,学生表与院系表之间还存在外键联系。
我把系统做成两个菜单页面,管理员账户与学生账户登录后显示的菜单功能不同,而只有管理员账户才能够实现修改删除添加学籍数据,学生账户只有查询功能。
系统难度不高,但是就是gui页面比较复杂。
要求:
本课程设计综合应用面向对象程序设计所学的知识设计一个考试系统或管理系统,主题自拟,数据库采用MySQL。设计要求如下:
- 管理系统
管理系统如学籍信息管理系统、图书信息管理系统、学生成绩管理系统等。学籍信息管理系统实现对学生学籍的管理,学籍信息包括学号、姓名、性别、籍贯、政治面貌、学院、专业和班级等,系统能够实现对学籍信息的添加、删除、修改、查找、汇总等功能。
大致思路可以总结为:
- 在MYSQL数据库中建user表和studentuser表,用于存放管理员账户密码与学生账户密码,建Depart表,用来存放院系班级信息,建studentinfor表来存放学生信息;
- 用JDBC来连接、操作数据库。
- 管理员账户将展示studentinfor、Depart数据,实现多种增删改查功能。学生账户将只实现简单的查询与Depart数据 类的分析和设计
- main包中有1个类:
Main类(作为主程序,调用构建登录页面类LoginFrame);
- Gui.LoginSwing包中有4个类,分别是:
BackGroundPanel类(用于页面背景图片设置中的声明图片与绘制背景);
LoginFrame类(制作登录页面的gui,初始化登录并且连接账户验证功能);
ScreenUtils类(用于获取电脑屏幕数据,便于页面生成时位于电脑屏幕中央);
LoginTry包下的LoginTry类(系统登录的验证码验证,并且进行账户密码与数据库内user表内容的比对验证,两者都成功都能进入菜单);
- connect包中有2个类,分别是:
JDBCUtils类(jdbc连接的工具类,通过自定义保存有连接jdbc的url、user、password和driver的.properties资源包,定义jdbc的连接与jdbc类的关闭,方便后续的书写);
jdbcConnect类(JDBC类,与功能类分开,可以被多次重复调用,相似功能可以调用相同的JDBC类,起到代码重复性低高效的特点,其中还调用JDBCUtils工具类,简化每次连接和关闭数据库的代码)
各项功能包有:
StuDAO类(是功能库,保存各功能的mysql语句部分,在StuDAO函数中再调用JDBC类与数据库进行连接,完成相应功能。)
Gui.CheckSwing包中有2个类,分别是:
CheckSwing类(管理员账户中的查询功能,根据选中的内容生成查询页面以及查询学生学籍详细内容显示);
CheckSwingStu类(学生账户中的查询功能,根据学生用户输入的学号进行搜索并进行详细展示)
Gui.DepartSwing包中有2个类:
DepartSwing类(院系管理功能,对现有的院系班级进行展示,以及根据选中的班级查询当前选中班级的人数总数。)
DepartSwingStu类(院系管理功能,对现有的院系班级进行展示,以及根据选中的班级查询当前选中班级的人数总数。)
Gui.InsertSwing包中有1个类:
InsertSwing类(插入函数,插入新的数据,插入成功后将刷新菜单,生成插入后的信息总表在菜单)
Gui.MeunSwing包中有2个类:
MenuSwing类(菜单显示页面,设置管理员账户菜单布局以及各功能的按钮);
MenuSwingStu类(菜单显示页面,设置学生账户菜单布局以及各功能的按钮);
Gui,UpdateSwing包中有1个类:
UpdateSwing类(修改功能页面,修改选中的学号,可以修改学生的姓名,性别,籍贯,政治面貌以及班级)
需要自行修改内容
1.数据库的建立:(列名也要相同,否则里面的sql语句都要修改)
user表(存放管理员账户密码)如图:
studentuser(存放学生账户密码),如图:
studentinfor(学生基础信息表),如图:
depart(学生院系信息表,班级名是学生基础信息表的外键),如图:
还可以添加级联关系,也就是在建表语句班级名后加入on update cascade。(当修改学生院系表的班级名时也会自动修改学生基础信息表的班级,而当添加入不存在于depart表中的班级名时,由于外键的约束将会添加失败,保证了表格信息的安全性和合理性)
2.修改jdbc配置(由于每个人的数据库密码用户等不同)
担心修改的麻烦,建立了一个资源,可以直接在资源修改全部jdbc的连接。
在src目录下找到jdbc.properties资源
3.自定义项目背景图路径(也可以不管)
图片内容可以直接复制后粘贴在src目录下的images包中,然后在下面标记出来的这三个类中找到图片右边这句代码。
将代码绿色部分(也就是双引号内)的内容删除,替换成images/你想加入的背景图片名称(记得不要忘记图片格式,比如名称后加“.jpg”)。
数据库结构设计
学生学籍管理系统采用的数据库中有四张表,分别为学生信息表、院系表、管理员账户表、学生账户表。
系统详细设计:
测试结果:
登录页面
验证码验证
管理员菜单
学生菜单
关键功能代码:
LoginFrame类://登录页面的设置
package Gui.LoginSwing;
import Gui.LoginSwing.LoginTry.LoginTry;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
/**
* 登录页面的gui
*/
public class LoginFrame extends JFrame {
//初始化,设置登录页面显示失败弹窗
public LoginFrame(){
try {
init();
} catch (Exception e) {
System.out.println("页面加载失败");
throw new RuntimeException(e);
}
}
//登录页面布局
void init() throws Exception{
//设置窗口的内容
BackGroundPanel bgPanel = new BackGroundPanel(ImageIO.read(new File(ClassLoader.getSystemResource("images/v2-8299d5eae2d7c4ac66450baad1a1496a_r.jpg").toURI())));
bgPanel.setBounds(0,0,400,250);
//组装登录相关元素,使用盒式布局
Box vBox = Box.createVerticalBox();
//组装标题
Box TBox = Box.createHorizontalBox();
TBox.add(Box.createHorizontalStrut(-10));
JLabel null1 = new JLabel(" ");
JLabel Titile = new JLabel("学生信息管理系统");
Titile.setFont(new Font("微软雅黑",Font.BOLD,18));
Titile.setForeground(new Color(120,150,4));
TBox.add(null1);
TBox.add(Titile);
//组装用户名
Box uBox = Box.createHorizontalBox();
JLabel uLabel = new JLabel("用户名:");
JTextField uField = new JTextField(15);
uBox.add(uLabel);
uBox.add(Box.createHorizontalStrut(20));
uBox.add(uField);
//组装密码
Box pBox = Box.createHorizontalBox();
JLabel pLabel = new JLabel(" 密 码:");
JTextField pField = new JTextField(15);
pBox.add(pLabel);
pBox.add(Box.createHorizontalStrut(20));
pBox.add(pField);
//组装按钮
Box btnBox = Box.createHorizontalBox();
JButton loginBtn = new JButton("登录");
JButton registerB = new JButton("退出");
btnBox.add(registerB);
btnBox.add(Box.createHorizontalStrut(50));
btnBox.add(loginBtn);
//组装单选按钮
Box JRBox = Box.createHorizontalBox();
ButtonGroup group = new ButtonGroup();
JRadioButton user = new JRadioButton("管理员");
JRadioButton Stuuser = new JRadioButton("学生");
group.add(user);
group.add(Stuuser);
JRBox.add(user);
JRBox.add(Box.createHorizontalStrut(20));
JRBox.add(Stuuser);
//将所有组件组装起来
vBox.add(Box.createVerticalStrut(30));
vBox.add(TBox);
vBox.add(Box.createVerticalStrut(20));
vBox.add(uBox);
vBox.add(Box.createVerticalStrut(20));
vBox.add(pBox);
vBox.add(Box.createVerticalStrut(10));
vBox.add(JRBox);
vBox.add(Box.createVerticalStrut(20));
vBox.add(btnBox);
bgPanel.add(vBox);
add(bgPanel);
pack();
//定义变量来记录单选按钮的选择内容,当choice数组第一个数是1时表示选择了管理员账号,2表示选择登录学生账号
final int[] choice = {0};
//单选按钮的监听器:登录管理员账号或者是学生账号
user.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
choice[0] = 1;
}
});
Stuuser.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
choice[0] = 2;
}
});
//验证码查验并验证密码
loginBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (choice[0] == 0){//弹出当前单选按钮为选择登录的账户类型的提醒
JOptionPane.showMessageDialog(null, "请选择登录账户类型", "注意",
JOptionPane.WARNING_MESSAGE);
}else {
//获取用户输入的数据
String UserName = uField.getText().trim();
String PassWord = pField.getText().trim();
//验证码验证
//flag为登录验证器,当登录成功时关闭登录页面,否则则不关闭
new LoginTry(choice, UserName, PassWord);
}
}
});
//退出系统
registerB.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,"退出成功,欢迎下次登录");
System.exit(0);
}
});
}
}
版权归原作者 solar_keem 所有, 如有侵权,请联系我们删除。