【javaweb期末项目】从零开始制作网上学生成绩管理系统(报告格式+附demo)

本文详细介绍了使用JSP和SQL开发的学生成绩管理系统,涵盖了系统分析、设计、实现与测试全过程。系统功能包括教师、学生信息管理和成绩管理,实现了成绩的增删查改、统计等功能。通过数据库设计、业务流程和类的编写,确保了系统的有效运行。在开发过程中遇到了数据库语句错误等问题,并提出了相应的解决方案。
摘要由CSDN通过智能技术生成

目录:
一、 前提与摘要
二、 课程设计的目的和要求
三、 系统分析与设计
四、 实现与测试
五、 主要源代码
六、 遇到的问题和解决方法
七、 存在的不足和改进的思路

『18.12.28更新』
文末更新下载方式,供参考学习交流
『18.12.19更新』
优化界面;
优化平均成绩和总成绩获取方式;
优化主页跳转方式;
新增回到顶部小火箭;

登录.png

管理员登录.png

管理员界面.png

全部成绩

学生登录.png

学生登录成功.png

学生信息录入界面.png

查找列表界面.png
——————————————————————————————————————————————

###一、前提与摘要
学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的教师、学生和管理者来说都至关重要。本论文叙述到的学生成绩管理系统是用JSP网页编程+SQL查询语言实现的。重点介绍了学生成绩管理系统的实现过程:包括系统分析与设计、数据库设计、系统功能设计、系统实现、系统测试等。本系统主要功能有教师信息管理、学生信息管理、成绩管理,包括功能需求设计、数据库设计等内容。
现在的社会日新月异,发展的非常快。学校的发展也在加快,老师和学生做为学校的最主要的管理对象,老师和学生的信息管理系统就成了学校信息化管理系统中不可缺少的部分,它的内容对于学校的组织管理至关重要。但一直以来人们使用传统人工的方式进行学生的档案管理,这种管理方式存在着许多缺点,如:效率低,容易出错,格式不规范。另外时间一长,不容易进行统计和分析。
随着科学技术的不断提高,计算机科学日渐成熟,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生档案进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、寿命长、成本低等。这些优点能够极大地提高学校学生档案管理的效率。因此,开发这样一套管理软件成为很有必要的事情。而且只要软件的设计合理,可以为学校提供合理的管理模式。
摘要:学生成绩管理系统、JSP网页编程、SQL
###二、课程设计的目的和要求
2.1 目的:

该系统的具体任务就是设计一个学生成绩的数据库管理系统,由计算机来代替人工执
行一系列诸如对教师、学生信息以及学生成绩的增加、删除、查询和修改的处理操作,以
方便对以上信息的管理组织工作。
建立学生成绩管理系统,采用计算机对学生成绩进行管理,进一步提高办学效益和现
代化水平。帮助广大教师提高工作效率,实现学生成绩信息管理工作流程的系统化、规范
化和自动化

2.2 要求:

网上学生成绩管理系统
实现学生信息的输入
实现课程的输入
实现成绩的输入
实现成绩的查询(按照姓名、学号等信息查询)
实现成绩的统计(平均分的统计、总成绩的统计)

###三、 系统分析与设计
#####3.1 数据库设计
学生表的设计:(学号,姓名,密码,性别,家庭住址,成绩,备注)
学生数据

管理员表的设计:(id,名字,密码)
管理员数据

#####3.2 业务流程设计
业务流程设计.jpg

#####3.3 用例图设计
用例.jpg

#####3.4 类与页面逻辑对应关系图设计

mulu

#####3.5 项目截图
项目截图.png

###四、 实现与测试

###4.1 实现步骤:
#####4.1.1 配置数据库
1️⃣首先在mysql内建立连接并记住端口号和数据库用户名和账号
屏幕快照 2018-12-15 下午8.59.12.png

2️⃣创建数据库test(注:本项目只用到了stu和mgr两个表,user是测试用)
数据库建立.png

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');

管理员数据库.png

学生数据库.png

4.1.2 在webroot下的WEB-INF下的lib中导入mysql的驱动jar包

jar包.png

导入jar.png

#####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
  • 10
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值