史上最详细的JAVA学生信息管理系统(MySQL实现)

一、项目介绍

为了巩固Java的学习写了一个基于MVC设计模式的学生管理系统。

简单介绍一下MVC设计模式:

1、M也就是Model 模型层(也叫数据层)主要是通过这个类来进行数据的操作。

2、V是Views 视图层,主要就是来显示页面信息。

3、C是Controller控制器,主要是用来做流程调度。

开发工具:IDEA、MySQL-5.5、Navicat、mysql-connector-java-5.0.8

二、项目分析

1.目录结构

这些就是这个项目的结构。

2.需求分析

首先进行登录,如果没有账户可以进行注册。

学生处理:

实现对于学生信息的增删改查。

每个用户都有自己的权限比如超级管理员可以进行学生信息的增删改查。

用户处理:

超级管理员可以进行用户信息的增删改(这里的改是只可以修改用户的权限)。

而普通用户是不可以对用户信息进行操作的。

以上介绍下面的图很清晰的写了出来。

三、数据库建表

1.创建学生表

字段分别为学号、姓名、性别、年龄、成绩、电话、班级。

这是一些测试数据以便进行系统的测试。

2.用户表

建表的方式跟学生表的一样我这里就不展示了。

用户表的字段为用户序号、用户名、密码、权限(0 - 超级管理员、1 - 普通管理员、2 - 普通用户)。

四、项目介绍及效果图

这是项目所用到的全部类。

1、controller这个包里存放了两个类分别是学生调度器和用户调度器,主要就是进行流程调度。

2、global这个包里存放的分别是JDBC工具类用来连接数据库从库里获取到数据,剩下的两个就是自定义的学生类和用户类。

3、model这个包里也就是模型层这两个模型层的作用是分别来处理学生数据和用户数据。

4、views这个包是视图层主要是在这里面进行数据的展示还有一些提示信息。

5、StuManagerMain是启动项,从这里开始运行程序。

6、最重要的一点就是最下面的那个.jar包,首先要将这个包导入才可以进行连接数据库的操作,具体步骤这里我就不过多赘述,可以自行查找。

1.登录界面(效果图)

(1) 注册

从这里可以选择要操作的序号,没有账号可以选择注册

这里选择注册,在输入用户名的时候程序会判断是否跟已存在的用户重名,如果重名则需重新输入

这里输入密码,接下来确认密码,提示注册成功将会自动登录,这里默认权限为普通用户

(2) 登录

这里就是登录成功之后展示的页面,在这里要进行管理用户或是学生的选择。

2.权限说明(效果图)

我在之前说到了权限的问题,这个账号的权限是超级管理员,我来登录一个普通用户看看还能否选择管理用户。

很明显在这里给出了提示说不能操作。

选择管理学生信息这里也是提示普通用户只能进行查看学生信息。

普通管理员可以进行进入管理用户信息,但是只可以进行查找

普通管理员在管理学生信息时候只可以进行查找和增加的操作

3.管理用户信息(效果图)

我登录超级管理员的账号来进行接下来的操作,在用户管理我没有弄增加用户信息,增加的操作是让用户在注册那里进行

(1) 查询用户信息

选择查找用户信息,显示出了查询的二级菜单,这里可以根据id、姓名、权限进行查找

选择根据姓名查找,输入用户名之后显示出来了该用户的信息

如果输入的用户名查询不到也会给出提示说用户信息不存在

(2) 修改用户信息

选择修改用户信息,这里修改的信息只能是权限,其他的用户信息是无法修改的

在选择修改后会给出该用户当前是什么权限,这里将root用户的权限修改为普通用户

可以看到成功将权限修改为普通用户

(3) 删除用户信息

选择删除用户信息弹出了删除的二级菜单,可以选择删除全部或是指定用户

这里选择删除指定用户,输入要删除的用户名之后会弹出该用户的信息来确认是否删除

4.管理学生信息(效果图)

接下来进行学生信息的管理介绍

(1) 查找学生信息

选择查找学生信息展示出来的是查找的二级菜单这里可以根据学号、姓名、性别等等来查找信息。

这里选择按照年龄查询,这里弹出了一个二级菜单可以按照精确年龄或是区间的方式来查找

选择区间来查询,查询结果如下

(2) 增加学生信息

接下来进行添加学生信息,这里显示添加成功

可以找到该学生信息

(3) 修改学生信息

修改时会将修改前的信息进行一个展示,显示修改成功

可以看出信息修改成功

(4) 删除学生信息

将要删除的信息展示出来确认是否要删除,提示删除成功

确认删除成功

五、项目思路及部分代码

1.MVC设计模式介绍

最开始我提到的MVC设计模式,分为模型层、视图层、调度器,这个程序的调用流程很简单

拿登录界面来说一上来从主方法来调用视图层的展示页面,并获取用户的操作数

package com.kxs.stu_manager;import com.kxs.stu_manager.controller.UserController;
import com.kxs.stu_manager.global.User;
import com.kxs.stu_manager.model.UserModel;
import com.kxs.stu_manager.views.StuPage;
import com.kxs.stu_manager.views.UserPage;import java.sql.SQLException;
import java.util.ArrayList;/*** @ClassName StuManagerMain* @Description: TODO 主方法类* @Author: 2119475835@qq.com* @Date: 2023/1/9*/
public class StuManagerMain {public static void main(String[] args) throws SQLException {// 用户调度器UserController uc = new UserController();// 用户模型层UserModel um = new UserModel();// 通过用户页面获取用户操作数// 将操作数传入总调度器并且返回一个用户User user = uc.loginAction(UserPage.welcome());if(null != user){UserPage.welcomeToBack(user.getUserName());}else{UserPage.failed("注册或登录失败!~");System.exit(-1);}while (true){// 进行数据的刷新try{ArrayList<User> userList = um.getUserInfoByName(user.getUserName());uc.userOrStuAction(UserPage.superManagerPage(userList.get(0).getCompetence()),userList.get(0).getCompetence());}catch (Exception e){StuPage.failed("用户不存在,退出系统!~");System.exit(-1);}}}
}
/*** 用户操作界面 (登录或注册)* 视图层* @return 用户选择的操作数*/public static int welcome() {System.out.println("* *********************************** *");System.out.println("* ************** 登录页面 ************ *");System.out.println("* ************* 1 - 登录 ************* *");System.out.println("* ************* 2 - 注册 ************* *");System.out.println("* ************* 0 - 退出系统  ******** *");System.out.println("* *********************************** *");int num;Scanner sc = new Scanner(System.in);do {System.out.print("请输入正确的选项:");num = sc.nextInt();} while (num < 0 || num > 2);return num;}

将返回的这个操作数作为参数传到登录或注册的调度器中,在这里用switch来进行程序调度

/*** 用户登录或注册的调度器* 调度器* @param num 用户选择的操作数* @return 返回注册或登录的用户*/public User loginAction(int num) throws SQLException {User user = null;switch (num) {case 1: // 登录user = um.doLogin(UserPage.getLoginUser());if (null == user) {UserPage.failed("登陆失败!~");}break;case 2: // 注册user = um.doReg(UserPage.getRegUser());if (null == user) {UserPage.failed("注册失败!~");}break;case 0: // 退出UserPage.bye();System.exit(-1);break;}return user;}

这里我选择了注册,这个分支里调用了视图层来获取一个要注册的用户对象

/*** 填写注册信息* 视图层* @return 返回一个User对象*/public static User getRegUser() throws SQLException {String username;String password;// 模拟 Ajax 做页面无刷新的情况下的数据同步do {System.out.print("请输入可用的用户名:");username = new Scanner(System.in).nextLine();} while (um.getUserByName(username) != null);do {System.out.print("请输入密码:");password = new Scanner(System.in).nextLine();System.out.print("请确认密码:");} while (!password.equals(new Scanner(System.in).nextLine()));return new User(username, password);}

将这个用户对象作为参数通过调度器传到模型层来进行添加用户信息的操作

/*** 将用户输入的信息对象添加到数据库中* @param regUser 用户注册的信息* @return 成功 - 返回一个全部信息的对象 失败 - 返回null*/public User doReg(User regUser) throws SQLException {User user = null;conn = JdbcUtils.getConnection();String sql = "insert into `user`(`userName`, `password`) value (?,?)";pst = conn.prepareStatement(sql);pst.setString(1, regUser.getUserName());pst.setString(2, regUser.getPassword());int rows = pst.executeUpdate();if(rows > 0){UserPage.success("注册成功!~");user = getUserByName(regUser.getUserName());}JdbcUtils.free(rs, pst, conn);return user;}

这样一个完整的调度关系就完成了,是不是很简单!可以按照这种调度关系去实现其他的一些操作

2.部分源代码

(1) 学生类

package com.kxs.stu_manager.global;/*** @ClassName Student* @Description: TODO 学生类* @Author: 2119475835@qq.com* @Date: 2023/1/9*/
public class Student {private int id;private String name;private String sex;private int age;private float score;private String tel;private String classid;public Student() {}public Student(int id, String name, String sex, int age, float score, String tel, String classid) {this.id = id;this.name = name;this.sex = sex;this.age = age;this.score = score;this.tel = tel;this.classid = classid;}public Student(String name, String sex, int age, float score, String tel, String classid) {this.name = name;this.sex = sex;this.age = age;this.score = score;this.tel = tel;this.classid = classid;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {if(sex.equals("0") || sex.equals("1") || sex.equals("2")){this.sex = sex;}else{System.out.println("性别非法!~");}}public int getAge() {return age;}public void setAge(int age) {if(age > 0 && age < 100){this.age = age;}else {System.out.println("年龄非法!~");}}public float getScore() {return score;}public void setScore(float score) {if(score >= 0 && score <= 100){this.score = score;System.out.println("成绩非法!~");}}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}public String getClassid() {return classid;}public void setClassid(String classid) {this.classid = classid;}@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", sex='" + sex + '\'' +", age=" + age +", score=" + score +", tel='" + tel + '\'' +", classid='" + classid + '\'' +'}';}
}

(2) 用户类

package com.kxs.stu_manager.global;/*** @ClassName User* @Description: TODO 用户类* @Author: 2119475835@qq.com* @Date: 2023/1/9*/
public class User {private int id; // idprivate String userName; // 用户名private String password; // 密码private String competence; // 权限 0:超级管理员 1:普通管理员 2:普通用户/*** 0:超级管理员   增删改查* 1:普通管理员   增查* 2:普通用户     查*/public User() {}public User(int id, String userName, String competence) {this.id = id;this.userName = userName;this.competence = competence;}public User(String userName, String password) {this.userName = userName;this.password = password;}public User(int id, String userName, String password, String competence) {this.id = id;this.userName = userName;this.password = password;this.competence = competence;}public User(String userName, String password, String competence) {this.userName = userName;this.password = password;this.competence = competence;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getCompetence() {return competence;}public void setCompetence(String competence) {this.competence = competence;}@Overridepublic String toString() {return "User{" +"id=" + id +", userName='" + userName + '\'' +", password='" + password + '\'' +", competence='" + competence + '\'' +'}';}
}

(3) JDBC工具类

package com.kxs.stu_manager.global;import java.sql.*;/*** @ClassName JdbcUtils* @Description: TODO JDBC的工具类* @Author: 2119475835@qq.com* @Date: 2023/1/9*/
public class JdbcUtils {private static String URL = "jdbc:mysql://localhost:3306/kxs_data"; // 库名自行修改private static String USER = "root"; // 数据库用户名自行修改private static String PASSWORD = "toor"; // 密码自行修改// 构造方法私有化private JdbcUtils(){}// 注册驱动static {try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {throw new RuntimeException(e);}}// 建立连接public static Connection getConnection() throws SQLException {return DriverManager.getConnection(URL, USER, PASSWORD);}// 释放资源public static void free(ResultSet rs, Statement st, Connection conn){try {if(null != rs){rs.close();}} catch (SQLException e) {throw new RuntimeException(e);}finally{try {if(null != st){st.close();}} catch (SQLException e) {throw new RuntimeException(e);}finally {try {if(null != conn){conn.close();}} catch (SQLException e) {throw new RuntimeException(e);}}}}}

六、总结

以上就是我对这个学生信息管理系统的介绍,本文仅介绍了项目的效果展示及程序的一些设计思路,如果有错误欢迎大家指出,交流学习。

tips:如果大家觉得还不错,麻烦小伙伴们来一波免费的三连哦!!!👍👍👍

原文件我放在下方啦,有需要的小伙伴来个三连,拿去随便用👇👇👇(不许白嫖哦!!!😉

链接: https://pan.baidu.com/s/1loGI45PmkAkBNsYypHN3Uw
提取码:0624

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

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

相关文章

开发辅助一(网关gateway+ThreadLocal封装用户信息+远程调用+读取配置文件+统一异常处理)

网关gateway模块 ①、配置文件&#xff0c;添加各个服务模块的路由路径 gateway:routes:-id: server-cart #微服务名称uri: lb://service-cart #负责均衡predicates:- Path/api/order/cart/**ThreadLocal ①、定义一个工具类 public class AuthContextUtil{private static…

Facebook自动回复脚本编写教程

在数字时代&#xff0c;社交媒体已经成为人们交流和建立联系的重要渠道&#xff0c;Facebook作为全球最大的社交媒体平台之一&#xff0c;拥有数十亿的用户&#xff0c;为企业和个人提供了无限的社交可能性。 然而&#xff0c;对于企业和个人来说&#xff0c;在Facebook上保持…

脱壳后多dex文件合并进apk反编译

我们遇到加固后的apk&#xff0c;在脱壳后有很多dex文件&#xff0c;有时候我们只反编译有关键代码的dex会存在一些上下文代码找不到的情况&#xff0c;这时候我们需要多dex一起反编译&#xff0c;并且需要同步看看资源文件怎么办&#xff1f;&#xff1a; 我们可以把多dex塞回…

华为eNSP入门实验,Vlan配置,路由配置,用户模式,链路聚合

文章目录 一、同一交换机下的PC通信二、不交换机下的PC通信三、配置静态路由通信四、路由器rip协议配置五、路由器ospf协议配置六、单臂路由七、通过三层交换机使不同的Vlan能连通八、设备consolo密码模式九、设备consolo用户密码模式&#xff08;AAA模式&#xff09;十、Telne…

虚拟机服务器中了lockbit2.0/3.0勒索病毒怎么处理,数据恢复应对步骤

网络技术的不断发展也为网络威胁带来了安全隐患&#xff0c;近期&#xff0c;对于许多大型企业来说&#xff0c;许多企业的虚拟机服务器系统遭到了lockbit2.0/3.0勒索病毒攻击&#xff0c;导致企业所有计算机系统瘫痪&#xff0c;无法正常工作&#xff0c;严重影响了企业的正常…

Python能做大项目(6)Poetry -- 项目管理的诗和远方之一

[Poetry] 是一个依赖管理和打包工具。Poetry 的作者解释开发 Poetry 的初衷时说&#xff1a; 通过前面的案例&#xff0c;我们已经提出了一些问题。但不止于此。 当您将依赖加入到 requirements.txt 时&#xff0c;没有人帮你确定它是否与既存的依赖能够和平共处&#xff0c;这…

电脑监控软件排行榜(电脑监控软件隐藏安装)

在当今数字化时代&#xff0c;电脑已经成为我们工作、学习和生活中不可或缺的工具。然而&#xff0c;随着电脑使用的普及&#xff0c;电脑监控软件也逐渐浮出水面。这类软件可以对电脑进行全方位的监控和管理&#xff0c;保护电脑安全、提高工作效率。 本文将为您介绍电脑监控…

Unity is running with Administrator privileges, which is not supported

Unity is running with Administrator privileges, which is not supported 如果还是弹出CMD窗口提示输入密码&#xff0c;但无法怎样都无法输入&#xff0c;请关闭窗口&#xff0c;然后右键快捷方式管理员运行一次。 ----------分割线---------- 为什么这样做&#xff1f; 很…

【译文】IEEE白皮书 6G 太赫兹技术的基本原理 2023版

第一章 简介 太赫兹波是介于微波和光波之间的光谱区域&#xff0c;频率从 0.1THz ~ 10THz 之间&#xff0c;波长在 3mm ~ 30μm 之间。提供大块连续的频带范围以满足对 Tbit/s 内极高数据传输速率的需求&#xff0c;使该区域成为下一代无线通信&#xff08;6G&#xff09;的重…

数字化时代的探索:学生为何对数据可视化趋之若鹜?

随着信息时代的迅猛发展&#xff0c;数据已经成为我们生活中不可或缺的一部分。而在这个数字化浪潮中&#xff0c;越来越多的学生开始关注数据可视化&#xff0c;这并非偶然。下面&#xff0c;我就从可视化从业者的角度出发&#xff0c;简单聊聊为什么越来越多的学生开始关注数…

在离线环境下也能展示地理空间数据?快来收下这份操作文档

《四维轻云-离线版》是一款操作简单、支持离线展示及编辑的地理空间数据离线管理平台。在《四维轻云-离线版》中&#xff0c;用户可以展示及编辑倾斜模型(.osgb)、激光点云(.las)、正射影像(dom)、数字高程模型(dem)、矢量数据(shp)、人工模型&#xff08;.obj、.dae、.fbx&…

Midjourney V6 引爆社交媒体,AI图像与照片的差别消失;LangChain的2023AI发展状况总结

&#x1f989; AI新闻 &#x1f680; Midjourney V6 引爆社交媒体&#xff0c;AI图像与照片的差别消失 摘要&#xff1a;Midjourney V6 第二次社区评价震惊网友&#xff0c;神图细节逼真&#xff0c;光影效果逆天&#xff0c;皮肤质感细腻&#xff0c;已超越昨日版本。V6即将…

轻松祛除烦人水印:三款简单易用的图片去水印工具介绍

在图像编辑中&#xff0c;去除水印是一项常见但又相对复杂的任务。图片水印往往成为图像处理和美化过程中的障碍。为了帮助你应对这个问题&#xff0c;下面介绍四款简单易用、效果显著的图片去水印工具。 图片去水印工具一&#xff1a;水印云 工具简介&#xff1a;水印云是一款…

高性能内存队列Disruptor入门和实战

目录 Disruptor简介 Disruptor的设计方案 RingBuffer数据结构 一个生产者单线程写数据的流程 多个生产者写数据的流程 消费者读数据 多个生产者写数据 Disruptor核心概念 Disruptor的使用 单生产者单消费者模式 单生产者多消费者模式 多生产者多消费者模式 消费者…

5+双硫死亡+分型+实验,双硫死亡又上大分。干湿结合拿下5+

今天给同学们分享一篇生信文章“The role of molecular subtypes and immune infiltration characteristics based on disulfidptosis-associated genes in lung adenocarcinoma”&#xff0c;这篇文章发表在Aging (Albany NY)期刊上&#xff0c;影响因子为5.2。 结果解读&…

.Net7.0 或更高版本 System.Drawing.Common 上传图片跨平台方案

项目升级.Net7.0以后&#xff0c;System.Drawing.Common开关已经被删除&#xff0c;且System.Drawing.Common仅在 Windows 上支持 &#xff0c;于是想办法将原来上传图片验证文件名和获取图片扩展名方法替换一下&#xff0c;便开始搜索相关解决方案。 .Net6.0文档&#xff1a;…

Nature | Baker团队用AI设计出史上最高互作强度的蛋白质

蛋白质是生命的基础&#xff0c;是生命功能的主要执行者&#xff0c;其结构与功能由氨基酸序列所决定。蛋白质设计是指对新蛋白质分子进行人为的合理设计&#xff0c;旨在设计新的活性&#xff0c;行为或目的&#xff0c;并增进对蛋白质功能的基本了解。可以从头开始设计蛋白质…

有没有好用的视频提取文案工具推荐?

在如今这个快节奏的时代中&#xff0c;视频已成为人们记录和分享生活的重要媒介。当然有很多优秀的人&#xff0c;它们创作的视频文案或是演讲的台词、字幕等都非常精彩&#xff1b;难免有时候我们也会借鉴他人的优质内容供自己参考、修改等。那么怎么把这些内容自动提取出来呢…

高手写的CAN总线入门总结

关注菲益科公众号—>对话窗口发送 “CANoe ”或“INCA”&#xff0c;即可获得canoe入门到精通电子书和INCA软件安装包&#xff08;不带授权码&#xff09;下载地址。 1. 简介 CAN总线由德国BOSCH公司开发&#xff0c;最高速率可达到1Mbps。CAN的容错能力特别强&#xff0c;…

亚马逊鲲鹏AI智能养号系统助您快速养成买家号

在如今竞争激烈的电商市场&#xff0c;拥有一个优质的亚马逊买家号显得尤为重要。然而&#xff0c;要想提高账号的质量&#xff0c;不仅需要精心呵护&#xff0c;还需要借助先进的技术手段。亚马逊鲲鹏系统引入了AI智能养号功能&#xff0c;为买家们提供了更便捷、更智能的账号…