JAVA+GUI界面+MysSQL的学生信息管理系统

学生信息管理系统

一、背景及目的要求

本文将介绍如何使用Java Swing GUI库和MySQL数据库来编写一个简单的学生信息管理系统,同时也将讲解GUI的基本布局、事件处理和MySQL数据库的连接、数据操作等知识。编写java和sql语句需要安装JDKMySQL数据库。

二、设计思路

首先是系统登录界面,用户选择账号类型(教师账号、学生账号、管理员账号)。如果账号和密码与数据库系统中的账号数据一致,则成功进入系统;如果账户不正确则弹出密码错误窗口,当密码错误三次,登录界面锁死无法再次登录。
学生账号登录成功:进入学生信息管理系统,可选择查看个人信息并修改、查看个人所有科目成绩、选择下学期的课程、退出登录功能。
老师账号登录成功:进入教师管理系统,可以选择查看个人信息并修改、查看各班级各学科所有学生成绩、查询教学工作、录入学生的成绩、退出登录功能。
管理员账户登录成功,进入管理员系统,可选择增加或删除学生、增加或删除教师、增加或者删除课程、退出登录功能。

附:功能流程图

功能流程图

附:E-R图

E-R图

三、设计实现及代码分析

系统所有程序都在一个学生信息管理系统包,共有九个类。代码过于繁多仅展示主要内容的部分组件属性(绝对位置、颜色、字体、加入监听等)设计在此处不再展示。
(一)数据库连接类(Shujuku.java)用来连接关闭数据库。

public class Shujuku {
public Shujuku() {		
		try { 
Class.forName("com.mysql.jdbc.Driver");				DriverManager.getConnection("jdbc:mysql://localhost:3306/stusystem","root","gyq4674");
		} catch (Exception e) {
			e.printStackTrace();
	}   }
public static Connection getConnection() {	//连接
try {			
Return DriverManager.getConnection("jdbc:mysql://localhost:3306/stu
system","root","gyq4674");
		} catch (SQLException e) {
			e.printStackTrace(); }
	}
		return null;		
	}
public static void close(Connection conn, Statement statement, ResultSet result) {//释放资源
	try {  if (result != null) {   result.close(); }			
			if(statement != null) {  	statement.close(); }	
			if(conn!=null) {	  conn.close(); }
} catch (SQLException e) {     e.printStackTrace();
}	}	}

(二)是数据库登录GUI界面代码
系统登录:登陆界面设计的类(LoginGUI.java)和数据库连(Shujukull.java),使用Swing中各类型组件设计登陆界面,单选按钮确定用户类别,监听“确认”按钮并运行查看数据库admin表的用户账户密码是否与输入的一致。密码正确则利用多线程的休眠sleep语句延缓1.5秒执行“提示密码正确面板”语句,而后进入对应的分系统。

public class LoginGUI {
static String account=null;
static String ypass=null;
static int num;
static String role="学生" ;//定义默认登录角色为学生
public void denglu() {
	JFrame jf = new JFrame("登录界面");
		jf.setBounds(500, 300, 600, 450);
		jf.setLayout(null);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JLabel l = new JLabel("欢迎登录学生信息管理系统");//欢迎语
		jf.add(l);
		ButtonGroup bg=new ButtonGroup();//对象选择
		JRadioButton jb1=new JRadioButton("学生",true);
		JRadioButton jb2=new JRadioButton("教师",false);
		JRadioButton jb3=new JRadioButton("管理员",false);
		ActionListener actionListener=new ActionListener() {//对角色按钮监听   @Override
	public void actionPerformed(ActionEvent e) {		
	if(e.getActionCommand().equals("教师")) {   role="教师";	
		}else if(e.getActionCommand().equals("管理员")) {role="管理员";
}else {role="学生";
} } };		
		JLabel l1 = new JLabel("用户名:");	//账户密码
		JLabel l2 = new JLabel("密  码:");
		JTextField txt1 = new JTextField("");
JPasswordField pass = new JPasswordField("");//密码框*号
		pass.setEchoChar('*');
		jf.add(l1);	jf.add(l2);jf.add(txt1);	jf.add(pass);
		jf.setVisible(true);
		JButton btn = new JButton("登录");
		btn.addActionListener(new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			boolean b=false;
			Connection con=学生信息管理系统.Shujuku.getConnection();			Statement st = null;
			ResultSet rs = null;
			try { st=con.createStatement();
			rs = st.executeQuery("SELECT * FROM accpass WHERE uso='"+txt1.getText()+"'AND role='"+role+"'");
			while(rs.next()) {//只有在遍历时才能用geystring			if(rs.getString("pass").equals(String.valueOf(pass.getPassword()))) {			b=true;
}}} catch (SQLException e1) {
 e1.printStackTrace();
}finally{  Shujuku.close(con, st, rs);
}			num++;//密码输入次数
if(b==false) {					
			if (num >=3 ) {
			JOptionPane.showMessageDialog(jf, "您已经输错三次!"+"\n"+" 此账户已冻结!");//弹出消息框
			txt1.setEditable(false);// 锁住文本框
			pass.setEditable(false);					
			}else { 
JOptionPane.showMessageDialog(jf, "密码错误");
				}	}
			if (b) {// 登录成功页面					
				num=0;
				jf.setVisible(false);
				JFrame jf1 = new JFrame();
				JLabel lb1 = new JLabel("用户名&密码正确");
				JLabel lb2 = new JLabel("正在登录中.....");
				f1.setVisible(true);
			new Thread(){//延时页面
				public void run(){
					try {
					 Thread.sleep(1000);
						jf1.setVisible(false);// 进入主页面
					if(role.equals("学生")) {
					new StudentZhuGUI().zhu(txt1.getText(),"学生");						}if(role.equals("教师")) {
						newTeacherZhuGUI().zhu(txt1.getText());							}if(role.equals("管理员")) {
						new AdminZhuGUI().zhu(txt1.getText());
						}		
						} catch (InterruptedException e) { }}
					}.start(); 
				}}});
		JButton btn2 = new JButton("取消");//关闭系统
		btn2.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}});
		jf.add(btn);
		jf.add(btn2);
	}}

(三)学生系统主页面
学生管理系统:学生系统GUI界面设计类(StudentZhuGUI.java)、操作接口类(Student_interf.java)、接口实现类(Student_interf_imp.java)。系统的GUI界面,使用JFrame的BorderLayout布局的北边栏作为导航界面(JPanel使用流式布局添加四个功能以及首页和退出按钮)。在接口实现类里重写三个功能方法,各个方法里编写所需的GUI界面以及功能实现代码和SQL语句,方法的返回值类型为JPanel,在StudentZhuGUI.java界面接收其返回值并根据监听的按钮切换JFrame的中间主面板。

public class StudentZhuGUI {//学生系统
	public void zhu(String stuno,String role) {//学生首页面,		JFrame jf = new JFrame("学生信息管理系统");
		JPanel jpn1=new JPanel();	//页首
		JLabel jb=new JLabel("学生信息系统",0);
		JButton jbt1=new JButton("首    页");
		JButton jbt2=new JButton("个人信息");
		JButton jbt3=new JButton("查询成绩");
		JButton jbt4=new JButton("网上选课");
		JButton jbt5=new JButton("退    出");
		jpn1.add(jbt1);jpn1.add(jbt2);
	jpn1.add(jbt3);jpn1.add(jbt4);
		jpn1.add(jbt5);	jf.add(jpn1,BorderLayout.NORTH);		
		JPanel jpm=new JPanel();	//中间
		jpm.setLayout(new BorderLayout());//使得插入jpm的面板位于居中
		JLabel jl=new JLabel("欢迎进入学生管理系统!",0);
		ActionListener lis=new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			String actioncommend = e.getActionCommand();
			JPanel panel=null;
			switch (actioncommend) {
			case "个人信息":
				jpm.removeAll();jpm.repaint();//清空面板内容//重写		jpm.add(newStudent_interf_imple().personalinformation(jf,stuno));//加入个人信息面板
				jpm.updateUI();break;//刷新
				case "查询成绩":
				jpm.removeAll();jpm.repaint();//清空面板内容//重写
	jpm.add(new Student_interf_imple().lookgrade(jf, stuno));//加入个人信息面板
				jpm.updateUI();//刷新					break;
			case "网上选课":	
				jpm.removeAll();jpm.repaint();//清空面板内容//重写
				jpm.add(new Student_interf_imple().electivecourse(jf, stuno));//加入个人信息面板
					jpm.updateUI();//刷新
				break;					
				case "首    页"://返回操作主页面	
					jf.setVisible(false);	zhu(stuno,role);break;
				case "退    出"://返回操作主页面	
					jf.setVisible(false);new LoginGUI().denglu();break}		}};}}

注:其余界面的代码过多不在暂时,需要JAVA源码的私信发送。

四、程序功能测试及截图

在这里插入图片描述
在这里插入图片描述

五、课程设计总结

本系统拥有三个子系统:学生管理、教师管理、管理员管理,通过可视化GUI界面和数据库连接实现完整学生成绩管理功能。登录注册功能实现不同用户的不同操作权限。系统未关闭也可再次登录。待改进之处包括整理代码包结构,添加教师课程系统以及加强学生选课约束。通过此项目,整合了两个学期的知识并进行了综合应用,通知这个项目提升了GUI和数据库的应用能力,并且锤炼了编程思维和算法实现能力。

注意:页面篇幅有限,仅仅展示部分项目报告+JAVA源码,有需要的私信我!

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不肝代码的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值