-
2020-07-04 21:36:07
基于SSM搭建的学生信息管理系统
目录
1.为什么要编写学生信息管理系统
1.1编写项目的起因:
疫情在家,每天足不出户,想着说捣鼓些玩意,因为这个学期学校开设了Java课程,在学习Java的过程中,觉得学习Java是很好玩的一件事,所以自学了SSM、servlet和springboot等一些企业生产环境中的常用框架,学习了这些之后我就想着在六月份找一份实习,但是苦于没有作品,所以就想着说做一份作品出来,让自己在面试中有更多的筹码,本人今年大二,热爱编程,认定编程是终身都必须要做的事。
2.编写学生信息管理系统的过程
2.1项目成果的展示:
SSM学生信息管理系统导图:
登录界面:
功能描述:在数据库中查找字段,判断帐号密码,通过验证进入系统,添加了验证码功能,有学生系统和管理员系统两个页面。管理员系统欢迎页面:
功能描述:管理员有四个管理权限分别是:用户管理、年级信息管理、班级信息管理、学生信息管理,各个功能均可实现根据数据库表实现增删查改功能。用户(管理员)管理:
年级管理:
班级管理:
学生管理:
功能描述:上述四个管理功能有以下几个小功能:1.模糊查询;2.批量删除;3.分页显示;4.添加;5.事务控制。学生系统:
功能描述:在学生系统中,班级和年级列表这两项只能查询,不能修改和删除,学生登陆进入系统后只能查看自己的信息,只能进行修改自己的信息,无法将自己删除。3.从项目实战中获取到的经验
3.1项目实战的经验总结:
项目共编写了5个Controller类,手动编写了1300余行后端代码,项目实现花费了十天时间。使用搭建SSM框架,深入了解三层架构,对项目开发流程有了一定的认识,熟悉掌握SSM配置的过程,对编写sql语句进行数据库操作更加的熟练,对前后端数据的交互有更深的理解,对service层事务的逻辑有了更清晰的认识,梳理了SSM框架使用的重点,遇到了困难能够及时解决,培养了自己能吃苦抗压能力强的优点。
4.项目开源地址
百度网盘:
1、项目源码+导入视频:
链接:https://pan.baidu.com/s/1ZmlcLtxHfG4f0lw7n8SQKQ 提取码:t13y 复制这段内容后打开百度网盘手机App,操作更方便哦
2、项目25集学习视频
链接:https://pan.baidu.com/s/1Q_wI2hG8lC98h3qqPiIESw 提取码:e3aj 复制这段内容后打开百度网盘手机App,操作更方便哦
学习视频我是从B站下载下来的,所以音视频是分开的,下载下来后用B站试着导入一下看能不能整合在一起。总结
本篇文章介绍了学生信息管理系统的系统功能,相关源码和资料放在评论区里了,欢迎下载下来运行、学习。感谢你阅读到这里,希望本篇文章能对你有小小的帮助,你的鼓励是我不断努力的动力!我是黑马Jack,希望你能在编程这条路上披荆斩棘步步高升!
更多相关内容 -
C语言学生信息管理系统小项目
2020-12-31 12:40:22本文为大家分享了C语言学生信息管理系统小项目,供大家参考,具体内容如下 /* 运行环境:我是在linux里面用gcc编译的,在windows里应该也能运行,用的一些文件库函数都是c标准库,没有用linux的系统调用(纠正一下... -
基于java web的简单学生信息管理系统(jsp+servlet)
2019-12-31 17:06:05java web简单学生信息管理系统 项目描述 利用Java以及jsp等技术实现学生信息管理,学生可以自己注册登记,教师进行学生管理,快捷方便合理利用资源。 运行环境 jdk7+tomcat8+mysql+IntelliJ IDEA 项目技术(必填... -
基于php+MySql实现学生信息管理系统实例
2020-10-14 23:52:08主要介绍了基于php+MySql实现学生信息管理系统实例,文中通过图片功能介绍的非常详细,文章末尾附带项目源码,需要的朋友可以参考下 -
学生信息管理系统ER图,数据流图 用例图以及用例说明(部分)软件工程作业
2020-12-08 21:25:51学生信息管理系统,包含有全部的详细的ER图,数据流图的简单visio文件,以及部分的staruml用例图和不完全的用例说明的ml文件。 我们的软件工程作业(很水),我随手上传的,大家可以救个急。 ps:初到CSDN,用了一些... -
基于springboot+mybatis开发的学生信息管理系统
2022-04-07 21:42:58学生成绩管理系统,有三个用户,学生,管理员,教师。管理员可以对学生、教师信息增删改查。教师可以批改学生作业,并且通过echartjs对学生成绩汇总统计,横向比较可以查看某个班级某门课及格、优秀等成绩段占比。... -
学生信息管理系统简介
2011-06-29 21:09:19完善的用户信息管理 完善的班级信息管理 完善的学籍信息管理 完善的课程信息管理 完善的成绩信息管理 完善的奖惩信息管理 个人信息查询 完善的帮助 数据实时性与准确性 -
基于SpringBoot 学生成绩管理系统的设计与实现.docx
2021-05-27 20:26:054.1.2学生信息维护 14 4.1.3教师信息维护 15 4.1.4基础信息维护 15 4.2教师端实现 16 4.2.1考试信息维护 16 4.2.2成绩登记 16 4.2.3教师通讯录 17 4.2.4个人信息维护 17 4.3学生端实现 18 4.3.1成绩查看 18 4.3.2... -
学生管理系统
2018-07-04 10:52:46项目描述: 基于jsp+servlet的java学生信息管理系统 运行环境: jdk8+tomcat8+mysql+eclipse/myeclipse/idea 项目技术: jsp+servlet+css+jsp+jdbc 数据库文件: 压缩包自带 -
基于ssm的学生宿舍管理系统
2020-01-02 09:51:16ssm学生宿舍管理系统,maven多模块搭建,实现用户分角色登录+分页等技术 项目描述 maven分模块项目+SSM宿舍管理系统+spring mvc+jquery+bootstrap+多模块+svn+分角色登录+分页+拦截器+收邮件。发邮件等。。。。。。 ... -
学生信息管理系统项目设计概述.docx
2020-03-20 02:35:32山东建筑大学 课 程 设 计 成 果 报 告 题 目 学生信息管理系统概述 课 程 管理信息系统 院 部 管理工程学院 专 班 业 级 信息管理与信息系统 信管 122 学生姓名 杨哲 学 号 20120216061 指导教师 完成日期 邓晓红 ... -
基于ssm开发的简单的学生信息管理系统
2020-01-02 10:11:59ssm开发简单的学生信息管理系统,基于maven搭建 项目描述 maven项目+学生管理+SSM+spring mvc+jquery+bootstrap+分页 运行环境 jdk7+tomcat7+mysql+IntelliJ IDEA+maven 项目技术(必填) spring+spring mvc+... -
一个基于SpringBoot+vue的学生信息管理系统详细设计
2021-11-30 23:23:29主要功能:用户登录、用户管理、角色、菜单、灵活控制、sql监控、日志、老师、学生、班级、课程、选课、打分、成绩、新闻、通知公告、附件查看下载等功能🍅 作者主页:Java李杨勇
🍅 简介:Java领域优质创作者🏆、【java李杨勇】公号作者✌ 简历模板、学习资料、面试题库【关注我,都给你】
🍅文末获取源码联系🍅
前言介绍:
在当今信息社会发展中中,计算机科学的飞速发展,大多数学校开始注意办公效率的发展是很关键,对学校的管理起到举足轻重的作用。基于 Internet 网络的信息服务,快速成长为现代学校中一项不可或缺的内容措施。很多校园都已经不满意商务办公管理的缓慢成长方式。学院的需求是一个功能强大的,能提供完善管理,管理信息系统的速度。社会持续向前发展,尤其是大多地方普及计算机,计算机应用已经开始向大容量的数据存储与处理持续发展,产生了以计算机为核心,用数据库作为环境的管理信息现代化系统,事务管理方面用大容量和对各种信息动态管理等方面的综合应用。建立学校学生管理系统能够对学校职员对学生信息的管理更为规范化和合理化。能有效快速记录大量的学生得信息, 能对学生用户能够运用简便的方法快速的查到他们所需要的课程信息,并且能够发布通知等一系列功能,实现了由传统人工转向办公向信息自动化。因此用 Java相关开发工具,精心构建了一个学生信息管理平台,实现了一个简单的管理系统。该系统能实现学生的管理、课程的管理、成绩管理、课程选报情况管理、系统用户的管理;能够实现学生报课程的查询、已选报课程成绩的查询、个人信息查询修改等功能、学生信息管理系统的完成给学校管理人员们和学生提供了很多的便利, 能够更好的提高教学质量,其科学性以及合理性对学校的发展有着举足轻重的作用。
视频演示 :java毕业设计-学生信息管理系统(springboot+vue前后端分离实现).mp4https://www.bilibili.com/video/BV1LQ4y1i7aW
https://www.bilibili.com/video/BV1LQ4y1i7aW
主要功能截图:
用户登录、输入账号密码进行验证和用户角色判断、不同角色不同菜单权限
首页介绍:可以定义成自己喜欢的样子
数据展示:echarts模拟树状图和折线图以及分布图等、可以从后台动态获取数据。
学习组织架构:列表可折叠、添加、修改、删除、查询功能齐全。
用户管理:查看、添加、修改等
用户角色管理:用户绑定角色、角色绑定菜单权限显示、灵活控制
菜单管理:权限控制到按钮级别。
选择菜单类型是目录、菜单或者按钮。
sql监控:阿里的SQL监控API
日志查询:AOP切面日志、绑定到controller层添加注解就行。
学生教师管理:录入数据、添加、修改、删除、查询等
添加老师信息:
学生管理:录入数据、添加、修改、删除、查询等
添加学生信息:
班级管理:添加、修改、删除、查询等
课程管理:添加、修改、删除、查询等
添加修改课程信息:
学生课程选择:学生用户可以选课
课程成绩打分:老师对选课的同学成绩进行打分。
查看我的课程成绩信息:
学校通知公告信息:添加、修改、删除、查询等、利用富文本进行数据上传和显示
学校新闻管理:
图书资料上传下载:
附件查看预览下载:
修改密码:
主要代码展示:
用户登录验证
/** * 登录相关 * * @author lyy */ @RestController public class SysLoginController extends AbstractController { @Autowired private SysUserService sysUserService; @Autowired private SysUserTokenService sysUserTokenService; @Autowired private SysCaptchaService sysCaptchaService; /** * 验证码 */ @GetMapping("captcha.jpg") public void captcha(HttpServletResponse response, String uuid)throws IOException { response.setHeader("Cache-Control", "no-store, no-cache"); response.setContentType("image/jpeg"); //获取图片验证码 BufferedImage image = sysCaptchaService.getCaptcha(uuid); ServletOutputStream out = response.getOutputStream(); ImageIO.write(image, "jpg", out); IOUtils.closeQuietly(out); } /** * 登录 */ @PostMapping("/sys/login") public Map<String, Object> login(@RequestBody SysLoginForm form)throws IOException { boolean captcha = sysCaptchaService.validate(form.getUuid(), form.getCaptcha()); // if(!captcha){ // return R.error("验证码不正确"); // } //用户信息 SysUserEntity user = sysUserService.queryByUserName(form.getUsername()); //账号不存在、密码错误 if(user == null || !user.getPassword().equals(new Sha256Hash(form.getPassword(), user.getSalt()).toHex())) { return R.error("账号或密码不正确"); } //账号锁定 if(user.getStatus() == 0){ return R.error("账号已被锁定,请联系管理员"); } //生成token,并保存到数据库 R r = sysUserTokenService.createToken(user.getUserId()); return r; } /** * 退出 */ @PostMapping("/sys/logout") public R logout() { sysUserTokenService.logout(getUserId()); return R.ok(); }
前端VUE+element表单:
<h3 class="login-title">学生信息管理登录</h3> <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" status-icon> <el-form-item prop="userName"> <el-input v-model="dataForm.userName" placeholder="帐号"></el-input> </el-form-item> <el-form-item prop="password"> <el-input v-model="dataForm.password" type="password" placeholder="密码"></el-input> </el-form-item> <el-form-item prop="captcha"> <el-row :gutter="20"> <el-col :span="14"> <el-input v-model="dataForm.captcha" placeholder="验证码"> </el-input> </el-col> <el-col :span="10" class="login-captcha"> <img :src="captchaPath" @click="getCaptcha()" alt=""> </el-col> </el-row> </el-form-item> <el-form-item> <el-button class="login-btn-submit" type="danger" @click="dataFormSubmit()">登录</el-button> </el-form-item> </el-form>
dataFormSubmit () { this.$refs['dataForm'].validate((valid) => { if (valid) { this.$http({ url: this.$http.adornUrl('/sys/login'), method: 'post', data: this.$http.adornData({ 'username': this.dataForm.userName, 'password': this.dataForm.password, 'uuid': this.dataForm.uuid, 'captcha': this.dataForm.captcha }) }).then(({data}) => { if (data && data.code === 0) { this.$cookie.set('token', data.token) this.$router.replace({ name: 'home' }) } else { this.getCaptcha() this.$message.error(data.msg) } }) } }) },
权限控制:
@Bean("shiroFilter") public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean(); shiroFilter.setSecurityManager(securityManager); //oauth过滤 Map<String, Filter> filters = new HashMap<>(); filters.put("oauth2", new OAuth2Filter()); shiroFilter.setFilters(filters); Map<String, String> filterMap = new LinkedHashMap<>(); filterMap.put("/webjars/**", "anon"); filterMap.put("/druid/**", "anon"); filterMap.put("/app/**", "anon"); filterMap.put("/sys/login", "anon"); filterMap.put("/swagger/**", "anon"); filterMap.put("/v2/api-docs", "anon"); filterMap.put("/swagger-ui.html", "anon"); filterMap.put("/swagger-resources/**", "anon"); filterMap.put("/captcha.jpg", "anon"); filterMap.put("/aaa.txt", "anon"); filterMap.put("/virtuel/**", "anon"); filterMap.put("/**", "oauth2"); shiroFilter.setFilterChainDefinitionMap(filterMap); return shiroFilter; }
数据库连接配置:
spring: datasource: type: com.alibaba.druid.pool.DruidDataSource druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/renren_students?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: root password: 123456 initial-size: 10 max-active: 100 min-idle: 10 max-wait: 60000 pool-prepared-statements: true max-pool-prepared-statement-per-connection-size: 20 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 300000 #Oracle需要打开注释 #validation-query: SELECT 1 FROM DUAL test-while-idle: true test-on-borrow: false test-on-return: false stat-view-servlet: enabled: true url-pattern: /druid/* #login-username: admin #login-password: admin filter: stat: log-slow-sql: true slow-sql-millis: 1000 merge-sql: false wall: config: multi-statement-allow: true
数据库表结构文档:
数据库名:renren_students
文档版本:V1.0.0
文档描述:数据库表设计描述
表cla
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
id
int
10
0
N
Y
2
name
varchar
255
0
Y
N
3
class_num
varchar
255
0
Y
N
4
user_nums
varchar
255
0
Y
N
表course
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
id
int
10
0
N
Y
2
name
varchar
255
0
Y
N
3
teacher_num
varchar
255
0
Y
N
4
sk_time
datetime
19
0
Y
N
5
sk_place
varchar
255
0
Y
N
6
weeks_number
varchar
255
0
Y
N
7
kc_type
varchar
255
0
Y
N
8
faculty
varchar
255
0
Y
N
9
score
varchar
255
0
Y
N
10
bz
varchar
255
0
Y
N
表dj_news
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
id
int
10
0
N
Y
2
title
varchar
255
0
Y
N
标题
3
ty
varchar
255
0
Y
N
类型
4
create_time
datetime
19
0
Y
N
发布时间
5
unit
varchar
255
0
Y
N
发布单位
6
num
varchar
255
0
Y
N
发布编号
7
content
mediumtext
16777215
0
Y
N
主要内容
8
create_by
varchar
255
0
Y
N
发布人
9
bz
varchar
255
0
Y
N
备注信息
10
kind
varchar
255
0
Y
N
种类(党建要闻 组织风采 )
表file
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
id
int
10
0
N
Y
2
path
varchar
255
0
Y
N
3
file_name
varchar
255
0
Y
N
4
file_type
varchar
255
0
Y
N
5
classify
varchar
255
0
Y
N
6
create_time
datetime
19
0
Y
N
7
create_by
varchar
255
0
Y
N
表inform
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
id
int
10
0
N
Y
2
title
varchar
255
0
Y
N
3
content
text
65535
0
Y
N
4
create_time
timestamp
19
0
Y
N
CURRENT_TIMESTAMP
5
create_by
varchar
255
0
Y
N
6
bz
varchar
255
0
Y
N
表my_course
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
id
int
10
0
N
Y
2
name
varchar
255
0
Y
N
3
teacher_num
varchar
255
0
Y
N
4
sk_time
datetime
19
0
Y
N
5
sk_place
varchar
255
0
Y
N
6
weeks_number
varchar
255
0
Y
N
7
kc_type
varchar
255
0
Y
N
8
faculty
varchar
255
0
Y
N
9
score
varchar
255
0
Y
N
10
bz
varchar
255
0
Y
N
11
user_id
int
10
0
Y
N
12
user_name
varchar
255
0
Y
N
13
user_score
varchar
255
0
Y
N
表student
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
id
int
10
0
N
Y
2
name
varchar
255
0
Y
N
3
sex
varchar
255
0
Y
N
4
birth_date
datetime
19
0
Y
N
5
ruxue_date
datetime
19
0
Y
N
6
college
varchar
255
0
Y
N
7
bz
varchar
255
0
Y
N
8
cla_name
varchar
255
0
Y
N
表sys_captcha (系统验证码)
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
uuid
char
36
0
N
Y
uuid
2
code
varchar
6
0
N
N
验证码
3
expire_time
datetime
19
0
Y
N
过期时间
表sys_config (系统配置信息表)
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
id
bigint
20
0
N
Y
2
param_key
varchar
50
0
Y
N
key
3
param_value
varchar
2000
0
Y
N
value
4
status
tinyint
4
0
Y
N
1
状态 0:隐藏 1:显示
5
remark
varchar
500
0
Y
N
备注
表sys_dept (部门管理)
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
dept_id
bigint
20
0
N
Y
2
parent_id
bigint
20
0
Y
N
上级部门ID,一级部门为0
3
name
varchar
50
0
Y
N
部门名称
4
order_num
int
10
0
Y
N
排序
5
del_flag
tinyint
4
0
Y
N
0
是否删除 -1:已删除 0:正常
6
remark
varchar
255
0
Y
N
表sys_log (系统日志)
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
id
bigint
20
0
N
Y
2
username
varchar
50
0
Y
N
用户名
3
operation
varchar
50
0
Y
N
用户操作
4
method
varchar
200
0
Y
N
请求方法
5
params
varchar
5000
0
Y
N
请求参数
6
time
bigint
20
0
N
N
执行时长(毫秒)
7
ip
varchar
64
0
Y
N
IP地址
8
create_date
datetime
19
0
Y
N
创建时间
表sys_menu (菜单管理)
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
menu_id
bigint
20
0
N
Y
2
parent_id
bigint
20
0
Y
N
父菜单ID,一级菜单为0
3
name
varchar
50
0
Y
N
菜单名称
4
url
varchar
200
0
Y
N
菜单URL
5
perms
varchar
500
0
Y
N
授权(多个用逗号分隔,如:user:list,user:create)
6
type
int
10
0
Y
N
类型 0:目录 1:菜单 2:按钮
7
icon
varchar
50
0
Y
N
菜单图标
8
order_num
int
10
0
Y
N
排序
表sys_oss (文件上传)
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
id
bigint
20
0
N
Y
2
url
varchar
200
0
Y
N
URL地址
3
create_date
datetime
19
0
Y
N
创建时间
表sys_role (角色)
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
role_id
bigint
20
0
N
Y
2
role_name
varchar
100
0
Y
N
角色名称
3
remark
varchar
100
0
Y
N
备注
4
create_user_id
bigint
20
0
Y
N
创建者ID
5
create_time
datetime
19
0
Y
N
创建时间
6
dept_id
int
10
0
Y
N
表sys_role_dept (角色与部门对应关系)
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
id
bigint
20
0
N
Y
2
role_id
bigint
20
0
Y
N
角色ID
3
dept_id
bigint
20
0
Y
N
部门ID
表sys_role_menu (角色与菜单对应关系)
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
id
bigint
20
0
N
Y
2
role_id
bigint
20
0
Y
N
角色ID
3
menu_id
bigint
20
0
Y
N
菜单ID
表sys_user (系统用户)
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
user_id
bigint
20
0
N
Y
2
username
varchar
50
0
N
N
用户名
3
password
varchar
100
0
Y
N
密码
4
salt
varchar
20
0
Y
N
盐
5
email
varchar
100
0
Y
N
邮箱
6
mobile
varchar
100
0
Y
N
手机号
7
status
tinyint
4
0
Y
N
状态 0:禁用 1:正常
8
create_user_id
bigint
20
0
Y
N
创建者ID
9
create_time
datetime
19
0
Y
N
创建时间
10
dept_id
int
10
0
Y
N
11
stage
varchar
255
0
Y
N
12
parent_name
varchar
255
0
Y
N
部门名称
表sys_user_role (用户与角色对应关系)
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
id
bigint
20
0
N
Y
2
user_id
bigint
20
0
Y
N
用户ID
3
role_id
bigint
20
0
Y
N
角色ID
表sys_user_token (系统用户Token)
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
user_id
bigint
20
0
N
Y
2
token
varchar
100
0
N
N
token
3
expire_time
datetime
19
0
Y
N
过期时间
4
update_time
datetime
19
0
Y
N
更新时间
表tb_user (用户)
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
user_id
bigint
20
0
N
Y
2
username
varchar
50
0
N
N
用户名
3
mobile
varchar
20
0
N
N
手机号
4
password
varchar
64
0
Y
N
密码
5
create_time
datetime
19
0
Y
N
创建时间
表teacher
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
id
int
10
0
N
Y
2
name
varchar
255
0
Y
N
3
sex
varchar
255
0
Y
N
4
birthdate
datetime
19
0
Y
N
出生日期
5
education
varchar
255
0
Y
N
学历
6
position
varchar
255
0
Y
N
7
ruzhi_date
datetime
19
0
Y
N
8
college
varchar
255
0
Y
N
9
bz
varchar
255
0
Y
N
课程设计总结:
经过近期对Java 面向对象程序设计、前端知识以及Java框架的掌握和学习,以及这段时间本教育教学系统的开发,让我更加了解到 Java 学习的重要性。在开发这个系统时,我不仅进行了多次的试验,而且也对系统的功能进行了测试。在论文的实现过程当中,我从Java的认识到熟练运用注入了非常多的努力,到后面可以进行相关技术的运用也感到非常的开心。在这过程当中,我发现Java其实有非常之多的功能可以进行探索。Java同时具有封装性、抽象性、多态性以及继承性。可以对代码进行重复使用以及扩充使用,大幅度提高开发软件时的整体速度和效率。我作为教育技术学的学生,学好Java语言不管对我以后的就业还是现在的知识面的扩增都有着很重要的意义。我学习程序设计的主要目的就是提高自己实际问题的程序解决方案的关键技能和技术, Java 面向对象程序设计是一科实践性相对来说非常比较强的语言了、Springboot、SpringMVC框架的MVC三层架构模式、和框架中遇到的设计模式将数据访问和逻辑操作都集中到组件里面去了 , 增强了系统的复用性和扩展性。使系统的扩展性大大增强。以及前端VUE 、element、jQuery样式的掌握让我对网页的布局、样式调整、字体等让网页效果实现的更加精准。
在实现系统的过程中,我意识到现在个人隐私安全越发重视,学生管理系统应该拥有验证码安全机制以及打印功能。虽然在本次系统的实现中,我没来得及对这些功能进行探索,但本管理系统后期会将添加安全验证机制。
获取源码联系:
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系方式👇🏻👇🏻👇🏻
打卡 文章 更新 110/ 365天
精彩专栏推荐订阅:在下方专栏👇🏻👇🏻👇🏻👇🏻
-
基于JavaSpringMvc+mybatis实现学生信息管理系统
2021-10-13 21:40:17Java经典基础毕设项目--学生信息管理系统详细设计【附源码】 主要模块设计如下: 使用Shiro权限管理框架,实现登录验证和登录信息的储存,根据不同的登录账户,分发权限角色,对不同页面url进行角色设置。 管理员...🍅 作者主页:Java李杨勇
🍅 简介:Java领域优质创作者🏆、【java李杨勇】公号作者✌ 简历模板、学习资料、面试题库【关注我,都给你】
🍅文末获取源码联系🍅
临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里,你想解决的问题,在下方专栏👇🏻👇🏻👇🏻👇🏻
❤️Java项目精品实战案例❤️
❤️web前端期末大作业网页实战❤️
都能满足你的需求。原始Jsp、SSM、SpringBoot、以及HTML+CSS+JS页面设计, web大学生网页设计作业源码等等都可以参考得到解决。话不多说直接拿一个学生信息管理系统来举例
摘要设计:
本次系统设计以方便快捷和安全为出发点,放弃传统的人工记录对学生信息管理的缺陷和不足, 采用全新的方式使学校对学生信息进行存储和维护,增加管理效率。本系统大体分为管理员登录管理后台、学生登录选课及对老师授课等三大模块、并且赋予了管理员很多功能来操作这个系统,包括:学生管理,老师管理,选课管理,密码修改等功能;为学生用户提供了选修改课程查询 、选择、密码修改等功能。通过这些功能模块的设计,满足了老师对学生的信息进行管控所需的功能。系统采用 B/S 三层结构,对动态页面的制作采用了 JSP技术,为了实现管理系统的安全可靠以及对有些代码可以进行重复使用考虑, 对程序的重要代码进行封装时采用 Java Bean。本系统贯彻以人为本的思想,实用性高。
系统功能概述:
主要模块设计如下:
使用Shiro权限管理框架,实现登录验证和登录信息的储存,根据不同的登录账户,分发权限角色,对不同页面url进行角色设置。
管理员可对 教师信息、学生信息、课程信息 进行 增删改查 操作,管理员账户,可以重置非管理员账户的密码。
课程管理:当课程已经有学生选课成功时,将不能删除学生管理:添加学生信息时,其信息也会添加到登录表中教师管理:同上
账户密码重置:
教师登陆后,可以获取其,教授的课程列表,并可以给已经选择该课程的同学打分无法对已经给完分的同学进行二次操作
学生登录后,根据学生信息,获取其已经选择的课程,和已经修完的课程
所有课程: 在这里选修课程,选好后,将会自动跳转到已选课程选项
已选课程: 这里显示的是,还没修完的课程,也就是老师还没给成绩,由于还没有给成绩,所以这里可以进行退课操作
已修课程: 显示已经修完,老师已经给成绩的课程修改密码:
B站视频演示:java毕业设计-SSM学生信息管理系统_bilibili (2).mp4
主要功能截图:
用户登录:用户登录是选择角色进行登录:管理员、教师、学生
系统主页:管理员登录后具体功能模块可对 教师信息、学生信息、课程信息 进行 增删改查 操作,管理员账户,可以重置非管理员账户的密码。
课程管理:课程列表管理和添加课程等具体操作
添加录入课程信息
学生管理:学生列表管理和添加学生等具体操作
添加学生信息
教师管理:
文件上传下载:
文件列表和下载文件
文件上传
账号相关:
教师登录后主要页面展示:
查看授课列表
查看该课程学生信息
给学生成绩打分
学生用户登录:
根据学生信息,获取其已经选择的课程,和已经修完的课程
主要代码展示:
登录相关
package com.system.controller; import com.system.exception.CustomException; import com.system.po.Userlogin; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.subject.Subject; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * Created by 李杨勇. */ @Controller public class LoginController { //登录跳转 @RequestMapping(value = "/login", method = {RequestMethod.GET}) public String loginUI() throws Exception { return "../../login"; } //登录表单处理 @RequestMapping(value = "/login", method = {RequestMethod.POST}) public String login(Userlogin userlogin) throws Exception { //Shiro实现登录 UsernamePasswordToken token = new UsernamePasswordToken(userlogin.getUsername(), userlogin.getPassword()); Subject subject = SecurityUtils.getSubject(); //如果获取不到用户名就是登录失败,但登录失败的话,会直接抛出异常 subject.login(token); if (subject.hasRole("admin")&userlogin.getRole()==0) { return "redirect:/admin/showStudent"; } else if (subject.hasRole("teacher")&userlogin.getRole()==1) { return "redirect:/teacher/showCourse"; } else if (subject.hasRole("student")&userlogin.getRole()==2) { return "redirect:/student/showCourse"; }else throw new CustomException("请选择正确的身份登陆"); } }
文件上传
package com.system.controller; import com.system.po.FileVO; import com.system.service.FileService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.commons.CommonsMultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; import java.util.UUID; /** * 文件上传下载 */ @Controller @RequestMapping("/file") public class FileController { @Resource(name = "fileServiceImpl") private FileService fileService; @RequestMapping("/upload") public String fileUpload(@RequestParam MultipartFile file, FileVO filevo, HttpServletRequest request) throws IOException { //上传路径保存设置 // 把文件写到磁盘 String fileName = file.getOriginalFilename(); String[] str = fileName.split("\\."); String uuid = UUID.randomUUID().toString().replaceAll("-",""); String headPath = "E://upload/" + uuid+ "."+str[str.length-1]; File dest = new File(headPath); file.transferTo(dest); filevo.setFileID(uuid); filevo.setFilePath(headPath); filevo.setUserID(null); try { fileService.save(filevo); } catch (Exception e) { e.printStackTrace(); } return "redirect:/admin/showFile"; } @RequestMapping("/downFile") public void down(HttpServletRequest request, HttpServletResponse response,String fileID) throws Exception{ FileVO fileVO = fileService.findById(fileID); String fileName = fileVO.getFilePath(); String[] str = fileName.split("\\."); InputStream bis = new BufferedInputStream(new FileInputStream(new File(fileName))); String filename = fileVO.getFileName()+"\\."+str[str.length-1]; filename = URLEncoder.encode(filename,"UTF-8"); response.addHeader("Content-Disposition", "attachment;filename=" + filename); response.setContentType("multipart/form-data"); BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); int len = 0; while((len = bis.read()) != -1){ out.write(len); out.flush(); } out.close(); } }
异常处理
package com.system.exception; /** * 系统自定义异常类,针对预期异常,需要在程序中抛出此类的异常 */ public class CustomException extends Exception { //异常信息 public String message; public CustomException(String message) { super(message); this.message=message; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
主要数据库设计:
主要数据表有:专业表、课程表、文件信息表、角色表、学生选课表、老师表、学生表等
CREATE TABLE `college` ( `collegeID` int(11) NOT NULL, `collegeName` varchar(200) NOT NULL COMMENT '课程名', PRIMARY KEY (`collegeID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Data for the table `college` */ insert into `college`(`collegeID`,`collegeName`) values (1,'计算机系'), (2,'设计系'), (3,'财经系'); /*Table structure for table `course` */ DROP TABLE IF EXISTS `course`; CREATE TABLE `course` ( `courseID` int(11) NOT NULL, `courseName` varchar(200) NOT NULL COMMENT '课程名称', `teacherID` int(11) NOT NULL, `courseTime` varchar(200) DEFAULT NULL COMMENT '开课时间', `classRoom` varchar(200) DEFAULT NULL COMMENT '开课地点', `courseWeek` int(200) DEFAULT NULL COMMENT '学时', `courseType` varchar(20) DEFAULT NULL COMMENT '课程类型', `collegeID` int(11) NOT NULL COMMENT '所属院系', `score` int(11) NOT NULL COMMENT '学分', PRIMARY KEY (`courseID`), KEY `collegeID` (`collegeID`), KEY `teacherID` (`teacherID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Data for the table `course` */ insert into `course`(`courseID`,`courseName`,`teacherID`,`courseTime`,`classRoom`,`courseWeek`,`courseType`,`collegeID`,`score`) values (1,'C语言程序设计',1001,'周二','科401',18,'必修课',1,3), (2,'Python爬虫技巧',1001,'周四','X402',18,'必修课',1,3), (3,'数据结构',1001,'周四','科401',18,'必修课',1,2), (4,'Java程序设计',1002,'周五','科401',18,'必修课',1,2), (5,'英语',1002,'周四','X302',18,'必修课',2,2), (6,'服装设计',1003,'周一','科401',18,'选修课',2,2); /*Table structure for table `role` */ DROP TABLE IF EXISTS `role`; CREATE TABLE `role` ( `roleID` int(11) NOT NULL, `roleName` varchar(20) NOT NULL, `permissions` varchar(255) DEFAULT NULL COMMENT '权限', PRIMARY KEY (`roleID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Data for the table `role` */ insert into `role`(`roleID`,`roleName`,`permissions`) values (0,'admin',NULL), (1,'teacher',NULL), (2,'student',NULL); /*Table structure for table `selectedcourse` */ DROP TABLE IF EXISTS `selectedcourse`; CREATE TABLE `selectedcourse` ( `courseID` int(11) NOT NULL, `studentID` int(11) NOT NULL, `mark` int(11) DEFAULT NULL COMMENT '成绩', KEY `courseID` (`courseID`), KEY `studentID` (`studentID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Data for the table `selectedcourse` */ insert into `selectedcourse`(`courseID`,`studentID`,`mark`) values (2,10001,12), (1,10001,95), (1,10002,66), (2,10003,99), (5,10001,NULL), (3,10001,NULL), (1,10003,NULL), (4,10003,NULL); /*Table structure for table `student` */ DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `userID` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(200) NOT NULL, `sex` varchar(20) DEFAULT NULL, `birthYear` date DEFAULT NULL COMMENT '出生日期', `grade` date DEFAULT NULL COMMENT '入学时间', `collegeID` int(11) NOT NULL COMMENT '院系id', PRIMARY KEY (`userID`), KEY `collegeID` (`collegeID`) ) ENGINE=InnoDB AUTO_INCREMENT=10008 DEFAULT CHARSET=utf8; /*Data for the table `student` */ insert into `student`(`userID`,`userName`,`sex`,`birthYear`,`grade`,`collegeID`) values (9999,'mike1','男','1996-09-03','2019-11-13',3), (10001,'小红','男','2020-03-02','2020-03-02',1), (10002,'小绿','男','2020-03-10','2020-03-10',1), (10003,'小陈','女','1996-09-02','2015-09-02',2), (10005,'小左','女','1996-09-02','2015-09-02',2), (10007,'MIke','男','1996-09-02','2015-09-02',2); /*Table structure for table `teacher` */ DROP TABLE IF EXISTS `teacher`; CREATE TABLE `teacher` ( `userID` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(200) NOT NULL, `sex` varchar(20) DEFAULT NULL, `birthYear` date NOT NULL, `degree` varchar(20) DEFAULT NULL COMMENT '学历', `title` varchar(255) DEFAULT NULL COMMENT '职称', `grade` date DEFAULT NULL COMMENT '入职时间', `collegeID` int(11) NOT NULL COMMENT '院系', PRIMARY KEY (`userID`), KEY `collegeID` (`collegeID`) ) ENGINE=InnoDB AUTO_INCREMENT=1004 DEFAULT CHARSET=utf8; /*Data for the table `teacher` */ insert into `teacher`(`userID`,`userName`,`sex`,`birthYear`,`degree`,`title`,`grade`,`collegeID`) values (1001,'刘老师','女','1990-03-08','硕士','副教授','2015-09-02',2), (1002,'张老师','女','1996-09-02','博士','讲师','2015-09-02',1), (1003,'软老师','女','1996-09-02','硕士','助教','2017-07-07',1); /*Table structure for table `userlogin` */ DROP TABLE IF EXISTS `userlogin`; CREATE TABLE `userlogin` ( `userID` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(200) NOT NULL, `password` varchar(200) NOT NULL, `role` int(11) NOT NULL DEFAULT '2' COMMENT '角色权限', PRIMARY KEY (`userID`), KEY `role` (`role`) ) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8; /*Data for the table `userlogin` */ insert into `userlogin`(`userID`,`userName`,`password`,`role`) values (1,'admin','123',0), (10,'10003','123',2), (11,'10005','123',2), (14,'1001','123',1), (15,'1002','123',1), (16,'1003','123',1), (20,'9999','123',2), (21,'10001','123',2), (22,'10002','123',2);
论文结构目录设计 :
相关系统设计实现推荐:
基于java springboot+mybatis电影售票网站管理系统前台+后台设计和实现
基于java ssm springboot+mybatis酒庄内部管理系统设计和实现
基于JAVA springboot+mybatis智慧生活分享平台设计和实现
基于Java springboot+vue+redis前后端分离家具商城平台系统设计和实现
基于JAVA SSM springboot实现的抗疫物质信息管理系统设计和实现
查看更多博主首页更多实战项目 >>>
好了,今天就到这儿吧,小伙伴们点赞、收藏、评论走起呀,下期见~~
获取完整源码:
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系👇🏻👇🏻👇🏻
打卡 文章 更新 79/ 100天
精彩专栏推荐:
-
Java课程设计【学生信息管理系统】
2020-06-01 13:48:20课程设计目录一、问题描述二、基本要求三、需求分析四、概要设计1、类...如何实现一个功能简单的学生信息管理系统,能够对学生信息(包括照片)进行添加、删除、修改和查询等操作。 二、基本要求 实现一个功能简单的学课程设计目录
一、问题描述
如何实现一个功能简单的学生信息管理系统,能够对学生信息(包括照片)进行添加、删除、修改和查询等操作。
二、基本要求
实现一个功能简单的学生信息管理系统,该系统具有按照账户名密码登录功能,登录后,可以添加,删除,修改、查询(显示学生相片)学生信息,添加学生信息时,要求能添加学生的相片信息(实现相片文件的上传和下载功能)。
三、需求分析
程序设计的任务是实现对学生信息的管理。用户名和密码都默认设置为0,用户名或密码输入错误会弹出“用户名或密码输入不正确”的对话框。在用户名和密码输入正确后进入学生信息管理系统,然后进行添加、修改、删除等操作。在添加操作里面可以上传和下载照片,这是File类型的。输入的其他学号、姓名、性别、电话、QQ和专业都是String类型,输出的也是String类型。点击确认后会弹出“添加成功”。
四、概要设计
1、类之间的调用关系
2、学生信息模块
3、系统管理模块
4、详细设计
①主程序LoginGUI的代码
主要实现了系统的登录窗口和登录之后进入的信息管理窗口,还有增删改查功能。
package 学生信息管理系统; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Box; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; public class LoginGUI{ private JFrame jf; //水平box private Box center=Box.createVerticalBox(); //学号的JPanel private JPanel idPanel=new JPanel(); //密码的JPanel private JPanel passwordPanel=new JPanel(); private JLabel lUserId=new JLabel("用户名"); private JTextField tUserId=new JTextField(15); private JLabel lPassword=new JLabel("密 码"); private JPasswordField tPassword=new JPasswordField(15); //按钮的JPanel private JPanel buttonPanel=new JPanel(); private JButton bLogin=new JButton("登录"); private JButton bCancel=new JButton("取消"); //设置运行时窗口的大小 Dimension faceSize=new Dimension(350,150); //获得屏幕的大小 Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize(); public void init(){ jf=new JFrame("学生信息管理系统"); //设置JFrame的名称 jf.setTitle("登录"); //将lUserId,tUserId放在idPanel中,idPanel默认水平放置 idPanel.add(lUserId); idPanel.add(tUserId); passwordPanel.add(lPassword); passwordPanel.add(tPassword); center.add(idPanel); center.add(passwordPanel); buttonPanel.add(bLogin); buttonPanel.add(bCancel); //登录按钮的监听器 bLogin.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ String userId=tUserId.getText(); String password=String.valueOf(tPassword.getPassword()); //开启接受数据的线程 if(userId.trim().equals("")||userId==null||password.trim().equals("")||password==null){ JOptionPane.showMessageDialog(jf,"用户名或密码不能为空!","提示",JOptionPane.WARNING_MESSAGE); }else{ if(userId.equals("0")&&password.equals("0")){ new StudentManageView().init(); }else{ loginFailure(); } } } }); //取消按钮的监听器 bCancel.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0); } }); center.add(buttonPanel); jf.add(center); jf.pack(); //设置JFame运行时的大小 jf.setSize(faceSize); //设置JFame运行时的位置 jf.setLocation((int)(screenSize.width-faceSize.getWidth())/2,(int)(screenSize.height-faceSize.getHeight())/2); //设置JFrame不可最大化 jf.setResizable(false); //设置JFrame单机X时结束程序 jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置JFrame可见 jf.setVisible(true); } public void loginFailure(){ JOptionPane.showMessageDialog(jf, "用户名或密码输入不正确!","提示",JOptionPane.WARNING_MESSAGE); } public static void main(String args[])throws Exception{ new LoginGUI().init(); } } class MyJTable extends JTable{ /** * */ private static final long serialVersionUID = -3083638370004874364L; public MyJTable(TableModel dm){ super(dm); } //设置表格不可编辑 public boolean isCellEditable(int rowIndex,int columnIndex){ return false; } } class StudentService{ private Student[] students=new Student[50]; //添加学生信息 public void insert(Student s){ for(int i=0;i<students.length;i++){ if(students[i]==null){ students[i]=s; System.out.println("添加成功!"); break; } } } //删除学生信息 public int delete(String userId){ int flag=0; for(int i=0;i<students.length;i++){ if(students[i]!=null){ if(students[i].getUserId().equals(userId)){ students[i]=null; System.out.print("删除成功!"); flag=1; break; } } } return flag; } //修改学生信息 public void update(Student s){ String userId=s.getUserId(); for(int i=0;i<students.length;i++){ if(students[i]!=null){ if(students[i].getUserId().equals(userId)){ students[i].setId(s.getId()); students[i].setName(s.getName()); students[i].setSex(s.getSex()); students[i].setAge(s.getAge()); students[i].setPhone(s.getPhone()); students[i].setQq(s.getQq()); students[i].setMajor(s.getMajor()); } } } } //按学号查询 public Student selectById(String userId){ for(Student s:students){ if(s!=null){ if(s.getUserId().equals(userId)){ return s; } } } return null; } //查询所有学生信息 public Student[] selectAll(){ return students; } } class StudentManageView { //设置上传照片的按钮 private JButton upload=new JButton("上传照片"); private JFrame jf=new JFrame("学生信息管理系统"); Dimension faceSize=new Dimension(800,600); private Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize(); //按学号查询 private JPanel pSelect=new JPanel(); private JLabel lSelect=new JLabel("学号"); private JTextField tSelect=new JTextField(15); private JButton bSelect=new JButton("查询"); //查询结果放在一个JTable private MyJTable table; private DefaultTableModel tableModel; private JScrollPane tableScrollPane; private Object[] tableTitle={"学号","姓名","性别","年龄","手机号","QQ","专业"}; private Object[][]tableData={new Object[]{""}}; //对学生信息进行管理的添加、删除、修改按钮 private JPanel buttonPanel=new JPanel(); private JButton insert=new JButton("添加"); private JButton delete=new JButton("删除"); private JButton update=new JButton("修改"); //单机添加、修改时弹出的对话框 private JDialog dialog=new JDialog(jf,"学生管理"); private Box box=Box.createVerticalBox(); private JPanel pPhoto=new JPanel(new FlowLayout(FlowLayout.LEFT)); private JPanel pId=new JPanel(new FlowLayout(FlowLayout.LEFT)); private JPanel pName=new JPanel(new FlowLayout(FlowLayout.LEFT)); private JPanel pSex=new JPanel(new FlowLayout(FlowLayout.LEFT)); private JPanel pAge=new JPanel(new FlowLayout(FlowLayout.LEFT)); private JPanel pPhone=new JPanel(new FlowLayout(FlowLayout.LEFT)); private JPanel pQq=new JPanel(new FlowLayout(FlowLayout.LEFT)); private JPanel pMajor=new JPanel(new FlowLayout(FlowLayout.LEFT)); private JLabel lPhoto=new JLabel("头 像"); private JLabel lId=new JLabel("学 号"); private JLabel lName=new JLabel("姓 名"); private JLabel lSex=new JLabel("性 别"); private JLabel lAge=new JLabel("年 龄"); private JLabel lPhone=new JLabel("手 机"); private JLabel lQq=new JLabel("Q Q"); private JLabel lMajor=new JLabel("专 业"); private ImageIcon icon=new ImageIcon(new ImageIcon("D:/Saved Pictures/520.jpg").getImage().getScaledInstance(30,30,3)); private JLabel tPhoto=new JLabel(icon); private JTextField tId=new JTextField(15); private JTextField tName=new JTextField(15); private ButtonGroup bSex=new ButtonGroup(); private JRadioButton boy=new JRadioButton("男"); private JRadioButton girl=new JRadioButton("女"); private JTextField tAge=new JTextField(15); private JTextField tPhone=new JTextField(15); private JTextField tQq=new JTextField(15); private JTextField tMajor=new JTextField(15); private JPanel pButton=new JPanel(); private JButton confirm=new JButton("确认"); private JButton cancel=new JButton("取消"); private StudentService service=new StudentService(); //用于标记是添加还是修改 private String id; void init(){ pSelect.add(lSelect); pSelect.add(tSelect); pSelect.add(bSelect); //查询按钮的监听器 bSelect.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ String userId=tSelect.getText().trim(); if(userId.equals("")){ Student[] student=service.selectAll(); clearTable(); for(Student s:student){ insertTable(s); } }else{ Student s=service.selectById(userId); if(s!=null){ clearTable(); insertTable(s); }else{ selectFailure(); } } } }); //table tableModel=new DefaultTableModel(tableData,tableTitle); table=new MyJTable(tableModel); tableScrollPane=new JScrollPane(table,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED ); //button buttonPanel.add(insert); buttonPanel.add(delete); buttonPanel.add(update); //添加按钮的监听器 insert.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ //上传照片的监听器 upload.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ new View().use(); ImageIcon icon=new ImageIcon(new ImageIcon("fromFileName").getImage().getScaledInstance(30,30,3)); JLabel tPhoto=new JLabel(icon); pPhoto.add(tPhoto); } }); //如果是添加,则将id=null; id=null; tId.setText(""); tId.setEditable(true); tName.setText(""); bSex.clearSelection(); tAge.setText(""); tPhone.setText(""); tQq.setText(""); tMajor.setText(""); dialog.setVisible(true); } }); //删除按钮的监听器 delete.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ //获得选择删除的行号数组 int[] selected=table.getSelectedRows(); //如果selected的长度为0,说明没有选择要删除的 if(selected.length==0){ JOptionPane.showMessageDialog(jf, "请选择要删除的信息!","提示",JOptionPane.WARNING_MESSAGE ); }else{ //提示是否要进行删除 int flag=JOptionPane.showConfirmDialog(jf, "确认删除吗?","提示",JOptionPane.WARNING_MESSAGE ); //如果选择是,则进行删除 if(flag==JOptionPane.OK_OPTION ){ for(int i=selected.length-1;i>=0;i--){ service.delete((String)tableModel.getValueAt(selected[i], 0)); tableModel.removeRow(selected[i]); } } } } }); //修改按钮的监听器 update.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ int row=table.getSelectedRow(); //如果要进行修改,就将id=要修改的学号 id=String.valueOf(table.getValueAt(row, 0)); //设置tId的内容 tId.setText(id); //设置tId不可修改 tId.setEditable(false); tName.setText(String.valueOf(table.getValueAt(row, 1))); String sex=(String) table.getValueAt(row, 2); //如果性别是"男",则将单选框中的男选中,否则选中女 if(sex.equals("男")){ bSex.setSelected(boy.getModel(),true); }else{ bSex.setSelected(girl.getModel(),true); } tAge.setText(String.valueOf(table.getValueAt(row, 3))); tPhone.setText(String.valueOf(table.getValueAt(row, 4))); tQq.setText(String.valueOf(table.getValueAt(row, 5))); tMajor.setText(String.valueOf(table.getValueAt(row, 6))); //设置dialog可见 dialog.setVisible(true); } }); jf.setLayout(new BorderLayout()); //设置pSelect在jf的北面 jf.add(pSelect,BorderLayout.NORTH); //设置pSelect在jf的中心 jf.add(tableScrollPane,BorderLayout.CENTER ); //设置pSelelct在jf的南面 jf.add(buttonPanel,BorderLayout.SOUTH); jf.pack(); jf.setSize(faceSize); jf.setLocation((int)(screenSize.width-faceSize.getWidth())/2,(int)(screenSize.height-faceSize.getHeight())/2); jf.setResizable(false); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); pPhoto.add(lPhoto); pPhoto.add(tPhoto); pPhoto.add(upload); pId.add(lId); pId.add(tId); pName.add(lName); pName.add(tName); pSex.add(lSex); bSex.add(boy); bSex.add(girl); pSex.add(boy); pSex.add(girl); pAge.add(lAge); pAge.add(tAge); pPhone.add(lPhone); pPhone.add(tPhone); pQq.add(lQq); pQq.add(tQq); pMajor.add(lMajor); pMajor.add(tMajor); pButton.add(confirm); pButton.add(cancel); //确定按钮的监听器 confirm.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ Student student=new Student(); student.setUserId(tId.getText()); student.setPassword(tId.getText()); student.setId(tId.getText()); student.setName(tName.getText()); String sex=null; if(boy.isSelected()){ sex="男"; } if(girl.isSelected()){ sex="女"; } student.setSex(sex); student.setAge(tAge.getText()); student.setPhone(tPhone.getText()); student.setQq(tQq.getText()); student.setMajor(tMajor.getText()); if(id!=null){ service.update(student); }else{ service.insert(student); } dialog.dispose(); } }); //取消按钮的监听器 cancel.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ dialog.dispose(); } }); box.add(pPhoto); box.add(pId); box.add(pName); box.add(pPhone); box.add(pSex); box.add(pAge); box.add(pPhone); box.add(pQq); box.add(pMajor); box.add(pButton); box.add(pButton); dialog.add(box); dialog.setBounds((int)(screenSize.width-280)/2,(int)(screenSize.height-300)/2,280,350); } public void insertTable(Student student){ if(student!=null){ String[]newCell=new String[7]; newCell[0]=student.getId(); newCell[1]=student.getName(); newCell[2]=student.getSex(); newCell[3]=student.getAge(); newCell[4]=student.getPhone(); newCell[5]=student.getQq(); newCell[6]=student.getMajor(); tableModel.addRow(newCell); } } public void clearTable(){ int rows=tableModel.getRowCount(); for(int i=rows-1;i>=0;i++){ tableModel.removeRow(i); } } public void selectFailure(){ JOptionPane.showMessageDialog(jf,"不存在该学号的学生!","提示",JOptionPane.WARNING_MESSAGE ); } }
②程序View的代码
主要实现了上传下载功能的窗口,修改文件路径也是在这里修改,一共三处。
public class View { private JFrame jf=new JFrame(); //页面的总JPanel private JPanel total=new JPanel(new BorderLayout()); //上传 private JPanel pUpload=new JPanel(new FlowLayout(FlowLayout.LEFT)); private JLabel lFileName=new JLabel("请选择上传的照片"); private JTextField tFileName=new JTextField(15); private JButton bBrowse=new JButton("浏 览"); private JFileChooser uploadChooser=new JFileChooser(); private JButton bUpload=new JButton("上 传"); private JPanel pDownload=new JPanel(new FlowLayout(FlowLayout.LEFT)); private JLabel lDownload=new JLabel("下载下面的图片:"); private JFileChooser downloadChooser=new JFileChooser(); private JButton bDownload=new JButton("下 载"); private JPanel pIcon=new JPanel(new FlowLayout(FlowLayout.LEFT)); //使用本地图片文件作为图标 private ImageIcon icon=new ImageIcon(new ImageIcon("D:/Saved Pictures/009.jpg").getImage().getScaledInstance(400,320,0)); private JLabel lIcon=new JLabel(icon); Dimension faceSize=new Dimension(500,450); //设置运行时窗口的位置 Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize(); public void use(){ pUpload.add(lFileName); pUpload.add(tFileName); pUpload.add(bBrowse); pUpload.add(bUpload); //浏览按钮的监听器 bBrowse.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ downloadChooser.setCurrentDirectory(new File(".")); int result=downloadChooser.showOpenDialog(jf); if(result==JFileChooser.APPROVE_OPTION ){ String path=downloadChooser.getSelectedFile().getPath(); tFileName.setText(path); } } }); //上传按钮的监听器 bUpload.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ String fromFileName=tFileName.getText(); String toFileName="D:/Config/"+System.currentTimeMillis()+".jpg"; write(fromFileName,toFileName); JOptionPane.showMessageDialog(jf, "上传成功!","提示",JOptionPane.WARNING_MESSAGE ); } }); pDownload.add(lDownload); pDownload.add(bDownload); //下载按钮的监听器 bDownload.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ downloadChooser.setCurrentDirectory(new File(".")); int result=uploadChooser.showOpenDialog(jf); if(result==JFileChooser.APPROVE_OPTION ){ String path=uploadChooser.getSelectedFile().getPath(); String fromFileName="D:/Saved Pictures/009.jpg"; write(fromFileName,path); JOptionPane.showMessageDialog(jf, "下载成功!","提示",JOptionPane.WARNING_MESSAGE ); } } }); //放置按钮的位置 pIcon.add(lIcon); total.add(pUpload,BorderLayout.NORTH); total.add(pDownload,BorderLayout.CENTER); total.add(pIcon,BorderLayout.SOUTH); jf.add(total); jf.setSize(faceSize); jf.setLocation((int)(screenSize.width-faceSize.getWidth())/2,(int)(screenSize.height-faceSize.getHeight())/2); jf.setResizable(false); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE ); jf.setVisible(true); } //fromFile是源文件,toFile是目的文件 public void write(String fromFile,String toFile){ FileInputStream fis=null; FileOutputStream fos=null; //用try和catch捕获异常 try{ fis=new FileInputStream(fromFile); fos=new FileOutputStream(toFile); byte[] buf=new byte[1024]; int hasRead=0; while((hasRead=fis.read(buf))>0){ fos.write(buf,0,hasRead); } }catch(FileNotFoundException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); }finally{ try{ fis.close(); fos.close(); }catch(IOException e){ e.printStackTrace(); } } } public static void main(String args[]){ //用View的引用调用use方法 new View().use(); } }
③程序Student的代码
创建User表和Student表,先定义各个变量,然后加上set和get方法。
package 学生信息管理系统; class User{ private String userId; private String password; public String getUserId(){ return userId; } public void setUserId(String userId){ this.userId=userId; } public String getPassword(){ return password; } public void setPassword(String password){ this.password=password; } } public class Student extends User{ private String id; private String name; private String sex; private String age; private String phone; private String qq; private String major; private Object photo; public Object getPhoto(){ return photo; } public void setPhoto(Object photo){ this.photo=photo; } public String getId(){ return id; } public void setId(String 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){ this.sex=sex; } public String getAge(){ return age; } public void setAge(String age){ this.age=age; } public String getPhone(){ return phone; } public void setPhone(String phone){ this.phone=phone; } public String getQq(){ return qq; } public void setQq(String qq){ this.qq=qq; } public String getMajor(){ return major; } public void setMajor(String major){ this.major=major; } }
④程序ConnectSQLServer的代码
主要实现数据库的连接,存储学生信息。直接声明数据库的登录名和密码,和连接使用的URL,用try-catch来加载数据库驱动和给出提示信息。
package 学生信息管理系统; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import javax.swing.JOptionPane; class DatebaseConnection { //数据库连接成功 public final String DBDRIVER="net.sourceforge.jtds.jdbc.Driver"; //数据库连接的URL public final String DBURL="jdbc:jtds:sqlserver://127.0.0.1:1433/Competition"; //数据库登录名 public final String DBUSER="sa"; //数据库登录密码 public final String DBPASS="Ambow99999999"; private Connection conn=null; public DatebaseConnection(){ try{ //加载数据库驱动 Class.forName(DBDRIVER); //获取数据库连接 conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS); }catch(SQLException e){ JOptionPane.showMessageDialog(null,"数据库连接失败","异常",JOptionPane.ERROR_MESSAGE ); System.exit(0); }catch(ClassNotFoundException e){ JOptionPane.showMessageDialog(null, "驱动加载失败","异常",JOptionPane.ERROR_MESSAGE ); System.exit(0); } } public Connection getConnection(){ return this.conn; } public void close(){ //关闭数据库连接 if(this.conn!=null){ try{ this.conn.close(); }catch(SQLException e){} } } } public class ConnectSQLServer{ public static void main(String[] args) { try{ Connection con=new DatebaseConnection().getConnection(); if(con!=null){ JOptionPane.showMessageDialog(null,"数据库连接成功","祝贺",JOptionPane.INFORMATION_MESSAGE ); System.exit(0); }else{ JOptionPane.showMessageDialog(null, "数据库连接失败","错误",JOptionPane.ERROR_MESSAGE ); System.exit(0); } con.close(); }catch(SQLException e){ e.printStackTrace(); } } }
五、调试分析
在一开始调试的时候,发现虽然没有错误,但无法运行,找了很久发现是自己在main方法里没有去调用init()方法,然后填上了之后程序可以运行。然后在成功登录后进入学生信息管理系统界面。在里面没有上传照片和下载图片这一选项。我在View这个程序里面首先添加了本地的图片作为图标可供下载,然后选定一个文件夹Config作为上传的路径。这样,我就在LoginGUI类里面的添加按钮监听器里面再增加了调用View类的use()方法的监听器,实现了图片上传和下载的功能。总之,从一开始参考书上例题打出来的程序作为基石,在上面进行雕刻。从设计转化为实现,打基础这一步很困难,因为要花很长时间查资料、看书和看代码来理解程序,然后才能自己灵活进行优化。同学之间也相互讨论帮助,都能给出自己的想法,然后交流之后会得出更好的创意,从第一个星期开始,我已经规划好要怎样做,许多同学也参考了我的规划。我一直按照计划实施并且很顺利地完成了程序设计。
六、用户使用说明
1、登录
(1)程序设计的任务是先设计出一个登录窗口,输入用户名和密码。
如果输入错误,会像如图所示输出“用户名或密码输入不正确”的对话框:
我给出的代码为了方便调试,用户名和密码全是0,记住运行的是LoginGUI这个类
(2)如果正确,则成功登录,进入学生信息管理界面,如图所示:
2、添加
(1)点击“添加”按钮,进入学生信息添加界面:
(2)在以上界面输入要添加的学生信息,首先点击“上传照片”按钮,然后弹出如下窗口:
(3)点击浏览选项,选择本地文件里需要上传的图片,这里我们选择Taylor Swift的图片,然后点击上传,会显示“上传成功”的对话框。
(4)可以看到这张图片上传到了本地D:/Config,实现了图片的上传功能。
(5)也可以点击“下载”这个按钮,会提示下载成功的对话框,如图所示:
(6)它会将你的头像下载到你指定的文件夹中,实现了文件的下载功能,如下图所示是将头像下载到E:/QQ浏览器文件这个文件夹里。
(7)然后添加其他的学生信息,如图所示:
(8)点击“确认”按钮,即可保存学生信息。我们再添加一个女学生的信息,如下图所示:
(9)然后单击“确定”按钮,此时学生信息添加成功。3、查询
(1)在学生管理界面的学生信息列表中点击“查询”按钮,即可显示已经添加的学生信息记录,如图所示:
(2)也可以在“查询”的文本框内输入学号,然后点击“查询”按钮,会跳出所对应的学生记录,如图所示:
4、修改
(1)点击所选的武则天学生记录,再点击“修改”按钮,弹出信息框,修改姓名为“花木兰”,修改手机号为“18816218888”,如图所示:
(2)点击确认按钮,再点击“查询”按钮进行刷新,显示出修改后的信息,如下图所示:
5、删除
(1)在学生信息管理系统界面选中某一学生记录,单击“删除”按钮,弹出删除确认界面。如果确认删除,单击“确定”按钮,否则单击“取消”按钮。
(2)我们选择学生凯的记录,并点击“删除”按钮,再确定删除,会看到这条记录被删除,仅剩学生花木兰的记录,如图:
6、退出
点击右上角的X,将关闭所有程序窗口。
七、测试结果
测试数据和测试结果在用户使用说明选项中已经详细介绍过,这里不再重复介绍。
八、课程设计总结
这次课程设计总体来说是一次非常有意义的任务,因为在这次课程设计中我学会了很多GUI编程和流类的知识,提高了编程的能力,也增加了对编程的兴趣。虽然这是一个小项目,但是能把它做好也是有很大的满足感。虽然一开始遇到很多问题,但自己都咬牙克服、迎难而上,每天都在钻研程序,然后将自己的思想与同学们交流。可以说,没有付出就没有回报,只要你肯付出,就会有收获。一件事,你只要用心去做了,将它做好,无论结果如何,你都不会留有遗憾的。课程设计让我对所学知识有了更深刻的理解,也让我明白如今对程序员的要求是多么严格,需要掌握各种编程知识,才能够在职场上游刃有余。
九、参考文献
《JAVA核心技术》 马志强 张然 李雷孝著
《JAVA API文档》 Oracle官网文件
《JAVA编程思想》 【美】Bruce Eckel著
《JAVA数据库技术详解》 李刚 著十、源码下载
学生信息管理系统的整体代码界面展示如下:
1、Main.java类
2、View.java类
3、Student.java类
4、ConnectSQLServer类
5、LoginGUI类
这个系统也是当时为数不多的优秀课程设计,需要源码的同学可以关注博主的公众号《萌新加油站》,回复:java学生系统,可以获得源码学习。等你有了新的圈子,别忘了谁陪你走过了人烟稀少的时候;等你过得好时,别忘了谁陪你度过了最艰难的时刻。路上人山人海,不一定都对你好,但肯定会有一个愿意等。朋友不要多,但要最真。你可以不好,但不能背叛;可以不是土豪,但会懂得分享。可以没有势力,但知道护友。最后我们都散了,记得常联系。
-
基于 servlet 开发的学生管理系统(mvc+bootstrap+jquery3.0+mysql)
2020-11-28 18:00:09项目描述:基于 servlet 开发的系统 1.学生可以查看自己的信息,管理员可以修改学生信息以及注册自己的信息、 2.前 HTMl+css+javascipt,框架是 Bootstrap4.0,Jquery3.2 表单验证,异步请求、 3.数据库 Mysql 以及 ... -
Jree学生管理系统(idea开发源码)
2019-03-15 12:06:26本系统用于大学的课程设计jree,运用idea编译运行。推荐下载。 -
阶段项目:学生信息管理系统数据库设计
2021-05-01 15:19:48上海某高校拟开发一套高校信息管理系统,该系统包括学生档案管理、学生成绩管理、教员信息管理、教务排课等模块,实现学生档案录入、修改、查询,成绩录入、修改、查询,教务排课管理等功能。 ... -
学生信息管理系统需求规格说明书
2021-11-28 15:54:37该文档给出了“学生信息管理系统”的整体结构及内容说明。同时对功能需求和性能需求进行了概述。且该文档便于用户,开发人员之间进行理解和交流,反映出用户问题的结构,可以作为项目开发工作的基础和依据以及确认... -
学生信息管理系统jsp课程设计.doc
2021-06-11 13:32:49综合训练学生姓名:xxxxx学生学号:xxxxx所在班级:xxxxx所在专业:信息与计算科学指导教师:xxxxxx设计场所:理学院机房设计时间:第七学期课程设计成绩总评第一项第二项目 录第一章 绪论1.1 课程设计目的1.2 系统... -
学生信息管理系统错误总结
2021-03-16 11:42:07调试学生系统的一些错误,现在来总结一下。首先想反思一下,在调试学生系统的时候,拖了很长时间,现在才调试完,这一点是很不好的。并且在以后的学习中,会严格控制自己来改掉这个不好的习惯。多看培养计划。好了... -
·学生信息管理系统(Hibernate+Struts2)
2015-10-18 18:47:26项目描述:用户后台登录,学生表的增删查改。采用了MVC设计模式。 项目技术:Struts2和Hibernate,数据库MySQL。采用MVC设计模式,写后台程序,Model层:包括实体层,数据库层,接口层及接口实现层的编写,... -
学生信息管理系统总体设计规划书
2021-12-12 14:44:05学生信息管理系统是校园网络中一个重要的应用系统,它大大改善了学校教学、科研与管理的基础环境,在一定程度上反映出学校管理现代化的水平。信息管理系统提供了强大的学生档案管理功能,方便管理员对学生信息的添加... -
基于springboot的学生信息管理系统
2019-07-10 10:00:56本系统使用 MySQL作为数据库,MySQL数据库是一款开源的免费的关系型数据库,功能非常强大,拥有图形用户界面,一般应用于大型的公司作为数据存储。由于开源并且是免费的,因此广受大家的青睐[1]。 (2) SpringBoot ... -
学生信息管理系统 —— 前端篇
2020-12-15 11:00:53采用 Vue-CLi创建的项目的结构(有后期项目的更新,可能具体文件与实际不符,但结构基本不变)。 ├── App.vue ├── assets │ └── logo.png ├── components │ ├── BottomBar.vue │ ├── HeadBar.... -
C#实战系列—学生信息管理系统(一)项目展示
2020-05-08 07:52:45最近在整理自己电脑上的学习资料,突然发现大二时小组一起做的C#项目——学生信息管理系统。就想运行起来玩玩。可是现在主机里面都是一些开发Android和Java的软件。visual studio 2010也早就卸载了。不过... -
基于web的学生信息管理系统设计与实现.zip
2021-04-02 23:42:56压缩包里面有:整个项目系统、数据库、成果书(论文) ...学生信息管理 学生信息录入 老师信息管理 老师信息录入 课程信息管理 课程信息录入 成绩信息管理 成绩信息录入 成绩信息统计 修改登陆密码 注销退出系统 -
学生管理系统项目
2019-07-09 19:36:11步骤如下: (1)定义学生类 (2)学生管理系统的主界面的代码...(3)学生管理系统查看所有学生的代码编写 (4)学生管理系统添加学生的代码编写 (5)学生管理系统删除的代码编写 (6)学生管理系统修改的代码编写 -
简易的学生管理系统ASP.NET
2018-07-22 16:58:25本程序为学生信息管理系统。是一个简易的ASP.NET系统,主要实现登录功能和两个模块信息的增删改查。 二、功能介绍 1、管理员信息管理:添加、修改、删除、查找用户信息,分页,添加,修改用户权限; 2、学生信息... -
学生成绩管理系统项目介绍
2020-07-09 12:47:43首先设计了Http请求的基类 设计了统一响应类 ResponseResult 主要实现了考试的成绩管理和用户的登录管理 主要又考试成绩查询 新增考试成绩 修改考试成绩 删除考试成绩 数据库:有用户表、学生表、班级表、课程信息表...