目录:
一、 前提与摘要
二、 课程设计的目的和要求
三、 系统分析与设计
四、 实现与测试
五、 主要源代码
六、 遇到的问题和解决方法
七、 存在的不足和改进的思路
『18.12.28更新』
文末更新下载方式,供参考学习交流
『18.12.19更新』
优化界面;
优化平均成绩和总成绩获取方式;
优化主页跳转方式;
新增回到顶部小火箭;
——————————————————————————————————————————————
###一、前提与摘要
学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的教师、学生和管理者来说都至关重要。本论文叙述到的学生成绩管理系统是用JSP网页编程+SQL查询语言实现的。重点介绍了学生成绩管理系统的实现过程:包括系统分析与设计、数据库设计、系统功能设计、系统实现、系统测试等。本系统主要功能有教师信息管理、学生信息管理、成绩管理,包括功能需求设计、数据库设计等内容。
现在的社会日新月异,发展的非常快。学校的发展也在加快,老师和学生做为学校的最主要的管理对象,老师和学生的信息管理系统就成了学校信息化管理系统中不可缺少的部分,它的内容对于学校的组织管理至关重要。但一直以来人们使用传统人工的方式进行学生的档案管理,这种管理方式存在着许多缺点,如:效率低,容易出错,格式不规范。另外时间一长,不容易进行统计和分析。
随着科学技术的不断提高,计算机科学日渐成熟,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生档案进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、寿命长、成本低等。这些优点能够极大地提高学校学生档案管理的效率。因此,开发这样一套管理软件成为很有必要的事情。而且只要软件的设计合理,可以为学校提供合理的管理模式。
摘要:学生成绩管理系统、JSP网页编程、SQL
###二、课程设计的目的和要求
2.1 目的:
该系统的具体任务就是设计一个学生成绩的数据库管理系统,由计算机来代替人工执
行一系列诸如对教师、学生信息以及学生成绩的增加、删除、查询和修改的处理操作,以
方便对以上信息的管理组织工作。
建立学生成绩管理系统,采用计算机对学生成绩进行管理,进一步提高办学效益和现
代化水平。帮助广大教师提高工作效率,实现学生成绩信息管理工作流程的系统化、规范
化和自动化
2.2 要求:
网上学生成绩管理系统
实现学生信息的输入
实现课程的输入
实现成绩的输入
实现成绩的查询(按照姓名、学号等信息查询)
实现成绩的统计(平均分的统计、总成绩的统计)
###三、 系统分析与设计
#####3.1 数据库设计
学生表的设计:(学号,姓名,密码,性别,家庭住址,成绩,备注)
管理员表的设计:(id,名字,密码)
#####3.2 业务流程设计
#####3.3 用例图设计
#####3.4 类与页面逻辑对应关系图设计
#####3.5 项目截图
###四、 实现与测试
###4.1 实现步骤:
#####4.1.1 配置数据库
1️⃣首先在mysql内建立连接并记住端口号和数据库用户名和账号
2️⃣创建数据库test(注:本项目只用到了stu和mgr两个表,user是测试用)
3️⃣输入以下代码创建学生表stu:(同理创建管理员表mgr,其中insert values的值自己定义)
use test;
CREATE TABLE `stu` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`pwd` varchar(255) NOT NULL,
`sex` varchar(255) NOT NULL,
`home` varchar(255) NOT NULL,
`grades` varchar(255),
`info` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `stu` VALUES ('1', 'stu1', '123', 'men', 'here', '0','i am the data-manerger');
INSERT INTO `stu` VALUES ('2', 'stu2','123','women','there','100','she is a good girl');
4.1.2 在webroot下的WEB-INF下的lib中导入mysql的驱动jar包
#####4.1.2 类的编写
创建一下五个类包:
五个类包作用:
①dao:数据库操作的对象,用于使相关数据库操作更简单(有关Dao模式的文章https://blog.csdn.net/dragon_dai_2017/article/details/76937553)
②entity:相当于Javabean,用于抽象数据结构
③filter:过滤器,用于过滤字符(当然也可以自己编写过滤IP等操作,详见:https://www.jianshu.com/p/1cf4ab2f7e21)
④servlet:业务逻辑实体类,用于执行对应JSP页面的业务逻辑,完成MVC中C的相关操作
⑤util:用于连接数据库(相关连接数据库的操作详见https://blog.csdn.net/yanglong_blog_/article/details/73733176)
在五个类包中编写相关代码:
1️⃣dao包中:
创建一个接口类 StuDao.java,用于规范化数据库相关操作
//StuDao.java
package com.dao;
import java.util.List;
import com.entity.Stu;
public interface StuDao {
//1.注册
public boolean register(Stu stu);
//2.登录
public boolean stulogin(String name,String pwd);
public boolean mgrlogin(String name,String pwd);
//3.返回学生信息集合
public List<Stu> getStuAll();
//4.根据用户名返回某个用户信息集合
public List<Stu> getStuByName(String namestr);
//5.根据学号返回某个用户信息集合
public List<Stu> getStuById(String IdStr);
//6.根据id删除用户
public boolean delete(int id) ;
//7.更新用户信息
public boolean update(int id,String name, String pwd,String sex, String home, String grades,String info);
//8.求成绩总和
public int sum();
//9.求成绩平均
public int avg();
}
再创建StuDao的实现类StuDaoImpl.java(自动忽略我的相关测试用的输出语句哈哈)
package com.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.entity.Stu;
import com.util.DBconn;
public class StuDaoImpl implements StuDao{
//1.注册
public boolean register(Stu stu) {
boolean flag = false;
DBconn.init();
int i =DBconn.addUpdDel("insert into stu(name,pwd,sex,home,grades,info) " +
"values('"+stu.getName()+"','"+stu.getPwd()+"','"+stu.getSex()+"','"+stu.getHome()+"','"+stu.getGrades()+"','"+stu.getInfo()+"')");
if(i>0){
flag = true;
}
DBconn.closeConn();
return flag;
}
//2.登录(学生与管理员的区别是查找的表不一样)
//(学生)
public boolean stulogin(String name, String pwd) {
boolean flag = false;
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("select * from stu where name='"+name+"' and pwd='"+pwd+"'");
while(rs.next()){
if(rs.getString("name").equals(name) && rs.getString("pwd").equals(pwd)){
flag = true;
}
}
DBconn.closeConn();
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
//(管理员)
public boolean mgrlogin(String name, String pwd) {
boolean flag = false;
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("select * from mgr where name='"+name+"' and pwd='"+pwd+"'");
while(rs.next()){
if(rs.getString("name").equals(name) && rs.getString("pwd").equals(pwd)){
flag = true;
}
}
DBconn.closeConn();
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
//3.返回用户信息集合
public List<Stu> getStuAll() {
List<Stu> list = new ArrayList<Stu>();
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("select * from stu");
while(rs.next()){
Stu stu = new Stu();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
stu.setPwd(rs.getString("pwd"));
stu.setSex(rs.getString("sex"));
stu.setHome(rs.getString("home"));
stu.setGrades(rs.getString("grades"));
stu.setInfo(rs.getString("info"));
list.add(stu);
}
DBconn.closeConn();
return list;
} catch (SQLException e) {
e.printStackTrace();
System.out.print("错误");
}
return null;
}
//4.根据用户名返回某个用户信息集合
public List<Stu> getStuByName(String namestr)
{
List<Stu> list = new ArrayList<Stu>();
try {
DBconn.init();
ResultSet rs = DBconn.selectSql("select * from stu where name='"+namestr+"'");
while(rs.next()){
Stu stu = new Stu();
stu.setId(rs.getInt("id"));
stu.setName(rs.getS