基于java学生成绩管理系统

news2024/11/18 1:33:50

开发工具eclipse,jdk1.8 

技术:java swing

数据库:mysql5.7

学生选课系统功能:管理员、教师、学生三个角色

一、管理员功能:

1.登录、修改密码、退出系统

2.学生管理:添加、修改、删除、查询

3.班级管理:添加、修改、删除、查询

4.教师管理:添加、修改、删除、查询

5.课程管理:添加、修改、删除、查询

6.选课管理:修改选课、推选课程

7.签到管理和签到统计

签到管理:确认签到、添加缺席

签到统计:列表显示、柱状图显示、饼状图显示

8.签到管理和签到统计

录入成绩

成绩管理:成绩修改、成绩删除

成绩统计:默认显示、柱状图显示、饼状图显示

9.帮助、关于

二、教师功能:

1.登录、修改密码、退出系统

2.学生管理:添加、修改、删除、查询

3.班级管理:添加、修改、删除、查询

4.教师管理:修改个人信息

5.课程管理:添加、修改、删除、查询

6.选课管理:修改选课、推选课程

7.签到管理和签到统计

签到管理:确认签到、添加缺席

签到统计:列表显示、柱状图显示、饼状图显示

8.签到管理和签到统计

录入成绩

成绩管理:成绩修改、成绩删除

成绩统计:默认显示、柱状图显示、饼状图显示

9.帮助、关于

三、学生功能:

1.登录、修改密码、退出系统

2.学生管理:修改个人信息

3.选课管理:修改选课、推选课程

4.确认签到

5.成绩查看

6.帮助、关于

管理员截图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

教师截图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

学生截图:

 

 

 

 

 

 

package com.artisan.view;

import java.awt.EventQueue;

import javax.swing.ButtonGroup;
import javax.swing.JInternalFrame;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

import java.awt.Font;

import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JRadioButton;
import javax.swing.JButton;

import com.artisan.dao.TeacherDao;
import com.artisan.model.Teacher;
import com.artisan.util.StringUtil;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JPasswordField;

public class AddTeacherFrm extends JInternalFrame {
	private JTextField teacherNameTextField;
	private JTextField teacherTitleTextField;
	private JTextField teacherAgeTextField;
	private JRadioButton teacherSexManRadioButton;
	private JRadioButton teacherSexFemalRadioButton;
	private JPasswordField teacherPasswordField;
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					AddTeacherFrm frame = new AddTeacherFrm();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public AddTeacherFrm() {
		setClosable(true);
		setIconifiable(true);
		setTitle("\u6DFB\u52A0\u6559\u5E08");
		setBounds(100, 100, 450, 371);
		
		JLabel label = new JLabel("\u6559\u5E08\u59D3\u540D\uFF1A");
		label.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		label.setIcon(new ImageIcon(AddTeacherFrm.class.getResource("/images/\u8001\u5E08.png")));
		
		teacherNameTextField = new JTextField();
		teacherNameTextField.setColumns(10);
		
		JLabel label_1 = new JLabel("\u6559\u5E08\u6027\u522B\uFF1A");
		label_1.setIcon(new ImageIcon(AddTeacherFrm.class.getResource("/images/\u6027\u522B.png")));
		label_1.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		
		ButtonGroup buttonGroup = new ButtonGroup();
		teacherSexManRadioButton = new JRadioButton("\u7537");
		teacherSexManRadioButton.setSelected(true);
		teacherSexManRadioButton.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		
		teacherSexFemalRadioButton = new JRadioButton("\u5973");
		teacherSexFemalRadioButton.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		buttonGroup.add(teacherSexManRadioButton);
		buttonGroup.add(teacherSexFemalRadioButton);
		
		JLabel label_2 = new JLabel("\u6559\u5E08\u804C\u79F0\uFF1A");
		label_2.setIcon(new ImageIcon(AddTeacherFrm.class.getResource("/images/\u804C\u79F0\u8BC4\u5B9A.png")));
		label_2.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		
		teacherTitleTextField = new JTextField();
		teacherTitleTextField.setColumns(10);
		
		JLabel label_3 = new JLabel("\u6559\u5E08\u5E74\u9F84\uFF1A");
		label_3.setIcon(new ImageIcon(AddTeacherFrm.class.getResource("/images/\u5E74\u9F84.png")));
		label_3.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		
		teacherAgeTextField = new JTextField();
		teacherAgeTextField.setColumns(10);
		
		JButton submitButton = new JButton("\u786E\u8BA4\u6DFB\u52A0");
		submitButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				addTeacherAct(ae);
			}
		});
		submitButton.setIcon(new ImageIcon(AddTeacherFrm.class.getResource("/images/\u786E\u8BA4.png")));
		submitButton.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		
		JButton resetButton = new JButton("\u91CD\u7F6E\u8868\u5355");
		resetButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				resetValue(ae);
			}
		});
		resetButton.setIcon(new ImageIcon(AddTeacherFrm.class.getResource("/images/\u91CD\u7F6E.png")));
		resetButton.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		
		JLabel label_4 = new JLabel("\u767B\u5F55\u5BC6\u7801\uFF1A");
		label_4.setIcon(new ImageIcon(AddTeacherFrm.class.getResource("/images/\u5BC6\u7801.png")));
		label_4.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		
		teacherPasswordField = new JPasswordField();
		GroupLayout groupLayout = new GroupLayout(getContentPane());
		groupLayout.setHorizontalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(104)
					.addComponent(submitButton)
					.addGap(40)
					.addComponent(resetButton)
					.addContainerGap(68, Short.MAX_VALUE))
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(87)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addGroup(groupLayout.createSequentialGroup()
							.addComponent(label_1)
							.addPreferredGap(ComponentPlacement.UNRELATED)
							.addComponent(teacherSexManRadioButton)
							.addPreferredGap(ComponentPlacement.RELATED)
							.addComponent(teacherSexFemalRadioButton))
						.addGroup(groupLayout.createSequentialGroup()
							.addComponent(label)
							.addPreferredGap(ComponentPlacement.UNRELATED)
							.addComponent(teacherNameTextField, GroupLayout.PREFERRED_SIZE, 152, GroupLayout.PREFERRED_SIZE))
						.addGroup(groupLayout.createSequentialGroup()
							.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
								.addComponent(label_2)
								.addComponent(label_3)
								.addComponent(label_4))
							.addPreferredGap(ComponentPlacement.UNRELATED)
							.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
								.addComponent(teacherPasswordField, GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE)
								.addComponent(teacherAgeTextField, GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE)
								.addComponent(teacherTitleTextField, 152, 152, Short.MAX_VALUE))))
					.addGap(95))
		);
		groupLayout.setVerticalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(26)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(label)
						.addComponent(teacherNameTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addGap(18)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(label_1)
						.addComponent(teacherSexManRadioButton)
						.addComponent(teacherSexFemalRadioButton))
					.addGap(18)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(label_2)
						.addComponent(teacherTitleTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addGap(27)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(label_3)
						.addComponent(teacherAgeTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addGap(30)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(label_4)
						.addComponent(teacherPasswordField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addPreferredGap(ComponentPlacement.RELATED, 52, Short.MAX_VALUE)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(submitButton)
						.addComponent(resetButton))
					.addGap(32))
		);
		getContentPane().setLayout(groupLayout);

	}

	protected void resetValue(ActionEvent ae) {
		// TODO Auto-generated method stub
		teacherNameTextField.setText("");
		teacherTitleTextField.setText("");
		teacherAgeTextField.setText("");
		teacherSexManRadioButton.setSelected(true);
		teacherPasswordField.setText("");
	}

	protected void addTeacherAct(ActionEvent ae) {
		// TODO Auto-generated method stub
		String teacherName = teacherNameTextField.getText().toString();
		String teacherSex = teacherSexManRadioButton.isSelected() ? teacherSexManRadioButton.getText().toString() : teacherSexFemalRadioButton.getText().toString();
		String teacherTitle = teacherTitleTextField.getText().toString();
		String teacherPassword = teacherPasswordField.getText().toString();
		int teacherAge = 0;
		try {
			teacherAge = Integer.parseInt(teacherAgeTextField.getText().toString());
		} catch (Exception e) {
			// TODO: handle exception
			JOptionPane.showMessageDialog(this, "年龄只允许输入数字!");
			return;
		}
		if(StringUtil.isEmpty(teacherName)){
			JOptionPane.showMessageDialog(this, "教师姓名必须填写!");
			return;
		}
		if(StringUtil.isEmpty(teacherTitle)){
			JOptionPane.showMessageDialog(this, "教师职称必须填写!");
			return;
		}
		if(teacherAge == 0 || teacherAge < 0){
			JOptionPane.showMessageDialog(this, "教师年龄必须大于0!");
			return;
		}
		if(StringUtil.isEmpty(teacherPassword)){
			JOptionPane.showMessageDialog(this, "教师登录密码必须填写!");
			return;
		}
		Teacher teacher = new Teacher();
		teacher.setName(teacherName);
		teacher.setSex(teacherSex);
		teacher.setTitle(teacherTitle);
		teacher.setAge(teacherAge);
		teacher.setPassword(teacherPassword);
		TeacherDao teacherDao = new TeacherDao();
		if(teacherDao.addTeacher(teacher)){
			JOptionPane.showMessageDialog(this, "教师添加成功!");
		}else{
			JOptionPane.showMessageDialog(this, "教师添加失败!");
		}
		resetValue(ae);
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/113142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python文件夹拷贝思路

最近在做项目中&#xff0c;要使用python&#xff0c;对文件拷贝有了一些了解&#xff0c;这里将自己理解的文件拷贝整理出来。 如下所示&#xff0c;文件拷贝思路&#xff1a; 文件拷贝&#xff0c;从io上来说就是读文件&#xff0c;写文件到另一个指定的地方。 拷贝&#xff…

MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《1》

原论文&#xff1a;Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 开源代码&#xff1a;https://github.com/ijkguo/mx-rcnn Parallel Faster R-CNN implementation with MXNet&#xff0c;使用MXNet实现快速并行的区域提议的卷积神经网络…

[oeasy]python0032_杀死进程_进程后台运行不输出_nohup_ps_显示进程

查看进程 回忆上次内容 上次先ctrl z 挂起进程 然后运行 bg程序继续跑起来而且不断输出到标准输出流甚至连ctrl c 都无法结束进程了这可怎么办呢&#xff1f;只能新开一个终端想办法 查询进程 搜索 debian进程查询找到具体方法 进程 具体方法动手试试 新开一个终端 运行ps…

新冠阳性的第五篇博客,宝塔面板如何快速部署一个SpringBoot项目

宝塔面板如何快速部署一个SpringBoot项目1.删除旧版本的Java2.安装Java3.配置Java环境变量4.宝塔快速部署1.删除旧版本的Java 删除旧版本的Java&#xff0c;防止对我们的服务产生影响&#xff01; 如果你的服务器上没有下载过Java&#xff0c;则跳过此步骤&#xff01; 查找…

【K3s】第1篇 K3s入门级介绍及架构详解

目录 1、什么是 K3s? 2、为什么叫 K3s? 3、适用场景 4、架构详解 单节点架构 高可用架构 K3s高可用架构&#xff1a; 固定 agent 节点的注册地址 注册 Agent 节点 1、什么是 K3s? K3s 是一个轻量级的 Kubernetes 发行版&#xff0c;它针对边缘计算、物联网等场景进…

SpringBoot图文详解 | 系统性学习 | 无知的我费曼笔记

无知的我复盘&#xff0c;顺便上传笔记。 对比Spring&#xff0c;SpringBoot 其实就是简化了固定的开发步骤。如坐标、Web3.0配置类、配置类 文章目录1 SpringBoot简介1.1 SpringBoot快速入门1.1.1 开发步骤1.1.1.1 创建新模块1.1.1.2 创建 Controller1.1.1.3 启动服务器1.1.1.…

【问题记录与解决】OSError: [WinError 127] 找不到指定的程序。

目录 一、报错记录二、尝试解决(已解决)2.1 先 卸载掉 几个与torch相关的模块2.2 重新下载几个模块,并分别安装一、报错记录 首先来看报错的截图: 报错的具体代码,可以看这里,和这里使用的一样的: 【Pytorch_Geometric】(GCN)基本使用:数据集与邻接矩阵格式,图形(…

河道水尺水位监测系统 基于opencv

河道水尺水位监测系统基于pythonopencv对现场画面中水位进行实时监测&#xff0c;当监测到画面中水位异常变化时&#xff0c;立即抓拍存档同步回传图片给后台。Python是一种由Guido van Rossum开发的通用编程语言&#xff0c;它很快就变得非常流行&#xff0c;主要是因为它的简…

用Python写个实用工具 - TheFuck(命令纠正工具)

前言 哈喽啊&#xff0c;我亲爱的铁铁们&#xff0c;I am back &#xff01; 别管&#xff0c;我也是阳过的人了&#xff0c;这么久都没有更新&#xff0c;今天就带来个小玩意吧 我们在学习python的时候&#xff0c;有个小工具&#xff0c;是可以纠正我们写错的命令 The Fu…

React封装一个纯CSS实现的水滴样式的盒子

背景 刷B站刷到一个纯css实现的水滴效果的视频 感觉真不错&#xff0c;决定封装一个具有水滴效果的盒子&#xff08;DIV&#xff09; 涉及知识点 CSS样式&#xff0c;核心是这个和box-shadow阴影&#xff0c;实现水滴boder和阴影效果。JS控制CSS样式16进制的颜色&#xff08;…

SpringBoot项目+注册功能实现

注册功能实现分析 目录 一、AppConfig.java 二、register.html 三、UserDto.java 四、UserController.java 五、UserMapper.xml 六、运行结果 一、AppConfig.java Configuration public class AppConfig implements WebMvcConfigurer {//统一视图跳转Overridepublic void…

(1)Qt的基本数据类型以及基本输出

基础类型 因为Qt是一个C框架, 因此C中所有的语法和数据类型在Qt中都是被支持的, 但是Qt中也定义了一些属于自己的数据类型, 下边给大家介绍一下这些基础的数据类型。 类型名称注释备注qint8signed char有符号8位数据qint16signed short16位数据类型qint32signed short32位有符号…

数据结构与算法java篇--二叉树

内容有点多&#xff0c;建议先收藏 目录 一.树的介绍 二.java代码实现树 1.Node类 2.Tree类 3.查找节点 4.插入节点 5.遍历树 5.1 中序遍历 5.2 前序遍历和后序遍历 6.查找最大值和最小值 7.删除节点 7.1 删除没有子节点的节点 7.2 删除有一个子节点的结点 7.3 删除…

java美食论坛系统发帖子系统美食论坛网站美食分享论坛源码

ssm开发的美食论坛系统&#xff0c;用户注册之后可以发布关于美食的帖子&#xff0c;其他人可以回帖&#xff0c;评论&#xff0c;点赞回复和评论&#xff0c;分为楼主&#xff0c;第一楼&#xff0c;第二楼等。可以再个人中心查看我对别人的回复&#xff0c;以及别人对我的回复…

学习黑客十余年,如何成为一名安全工程师?

1. 前言 说实话&#xff0c;一直到现在&#xff0c;我都认为绝大多数看我这篇文章的读者最后终究会放弃&#xff0c;原因很简单&#xff0c;自学终究是一种适合于极少数人的学习方法&#xff0c;而且非常非常慢&#xff0c;在这个过程中的变数过大&#xff0c;稍有不慎&#x…

主成分分析(PCA)

主成分分析是一种降维&#xff08;去除噪声和不重要信息&#xff09;方法&#xff0c;它能将多个指标转换为少数几个主成分&#xff0c;这些主成分是原始变量的线性组合&#xff0c;且彼此之间互不相关。 适用性&#xff1a;当研究的问题涉及到多变量且变量之间存在很强的相关…

【LeetCode】2099. 找到和最大的长度为 K 的子序列

【LeetCode】2099. 找到和最大的长度为 K 的子序列 给你一个整数数组 nums 和一个整数 k 。你需要找到 nums 中长度为 k 的 子序列 &#xff0c;且这个子序列的 和最大 。 请你返回 任意 一个长度为 k 的整数子序列。 子序列 定义为从一个数组里删除一些元素后&#xff0c;不…

BIT.1_常见指令以及权限理解

目录使用 XShell 远程登录 Linux下载安装 XShell查看 Linux 主机 ip使用 XShell 登陆主机XShell 下的复制粘贴文件 内容数据 属性数据Linux目录结构相对/绝对路径Linux下基本指令01. ls 指令02. pwd命令03. cd 指令04. touch指令05.mkdir指令&#xff08;重要&#xff09;&am…

基于Xlinx的时序分析与约束(4)----主时钟约束

主时钟约束语法 主时钟约束&#xff0c;就是我们对主时钟&#xff08;Primary Clock&#xff09;的时钟周期进行约束&#xff08;告诉综合工具布局布线的标准&#xff09;&#xff0c;这个约束是我们用的最多的约束了&#xff0c;也是最重要的约束。 主时钟必须与一个网表对象相…

seo综合查询,怎么看网站在移动端权重高低

移动权重就是指在手机、IPAD等的流量&#xff0c;数值越大流量越多。 未来百度流量一定会更倾向于移动端&#xff0c;移动端搜索将是百度搜索引擎的主要阵地。这一点和用户上网习惯有关系&#xff0c;因为移动网络无处不在。 那么怎么看网站在移动端权重高低&#xff1f;最…