资源描述
课程设计汇报
课程: jsp
学号:
姓名:
班级:
老师:
徐州师范大学
计算机科学和技术学院
课程设计任务书
姓 名
学 号
班 级
课程名称
数据库系统概论
课程性质
课程设计
同组组员
分工
学生选课操作、老师管理操作两部分功效实现
设计时间
设计名称
学生选课管理信息系统设计和实现
设计要求
系统功效基础要求:老师信息,包含老师编号、老师姓名、性别、年纪、学历、职称、毕业院校,健康情况等。学生信息,包含学号、姓名、所属院系、已选课情况等。教室信息,包含,可容纳人数、空闲时间等。选课信息,包含课程编号、课程名称、任课老师、选课学生情况等。成绩信息,包含课程编号、课程名称、学分、成绩。按一定条件能够查询,并将结果打印输出。
设计思绪
和
设计过程
设计思绪:,本系统结合数据库和JSP编程实现了学生选课管理系统。学生选课管理系统分为三个子模块:第一模块是学生选课页面操作,包含个人信息,密码修改,查询成绩,选课,退选五个功效;第二模块是老师操作页面,包含个人信息,密码修改,录入成绩,查询选课情况,查看教室信息;第三模块是管理员,包含学生信息管理(增加、修改、删除、查询),老师信息管理(增加、修改、删除、查询),管理员信息管理(增加、修改、删除、查询)。
计划和进度
构思整个系统框架,在数据库中建表
关键对学生选课部分操作进行jsp编码
关键对老师相关操作进行jsp编码
整合整个试验,并进行修改
写课程设计汇报
任课老师
意 见
说 明
学生选课管理系统
一.系统需求分析
学生选课系统是一个学校不可缺乏部分,它内容对于学校决议者和管理者来说全部至关关键,所以学生选课系统应该能够为用户提供充足信息和快捷查询手段。伴随科学技术不停提升,计算机科学日渐成熟,其强大功效已为大家深刻认识,它已进入人类社会各个领域并发挥着越来越关键作用。
作为计算机应用一部分,使用计算机对选课信息进行管理,有着手工管理所无法比拟优点。这些优点能够极大地提升人事劳资管理效率,也是企业科学化、正规化管理,和世界接轨关键条件。
所以,开发这么一套软件成为很有必需事情,在下面各章中我们将以开发一套学生选课系统为例,谈谈其开发过程和所包含到问题及处理方法。
本试验实现学生选课管理系统关键包含以下功效:
1.完成数据录入和修改,并提交数据库保留。其中数据包含:学生信息、课程设置、学生成绩和操作员信息等;
2.设计实现学生信息查询,选课管理、退选管理、分数查询,课程浏览老师信息查询、教室空闲时间查询等JSP页面 。
3.含有一定安全性管理功效。包含操作员权限设置、修改密码设置、注销和等功效。
二.系统总概括
1.系统总设计
本系统结合数据库和JSP编程实现了学生选课管理系统。学生选课管理系统分为三个子模块:第一模块是学生选课页面操作,包含个人信息,密码修改,查询成绩,选课,退选五个功效;第二模块是老师操作页面,包含个人信息,密码修改,录入成绩,查询选课情况,查看教室信息;第三模块是管理员,包含学生信息管理(增加、修改、删除、查询),老师信息管理(增加、修改、删除、查询),管理员信息管理(增加、修改、删除、查询)。
学生选课
老师管理
管理员
学生选课管理系统
图1 系统功效模块图
2.数据库设计
2.1数据库概念结构设计
本系统关键有三个实体,其中有学生和课程两个实体集,一个学生能够选修若干门课程,一门课程也能够被多个学生选修,这两个实体集之间是多对多联络,还有老师和课程两个实体,一个老师能够教授若干门课程,一门课程却只能有一个老师教授,这两个实体集之间是一对多联络。经过选课成绩将老师和学生联络在一起。为确保系统安全性,设置了操作员这一实体集,用来存放正当用户编号、姓名、密码。本系统E-R图以下:
学生
学号
姓名
密码
院系
性别
电话
地址
选修
成绩
课程
教授
老师
编 编号
毕业
院校
健康
情况
学历
姓名
密码
院系
年纪
性别
职称
M
N
M
1
编 课程号
编 课程名
编 老师号
编 学分
编 课时
编 地点
编 总人数
编 已选数
编 院系
管理员
编号
密码
图2 系统E-R图
2.2数据库逻辑结构设计
依据关系模型转换标准,上面E—R图可转换为以下所表示关系模型:
student(sId,sName,sPass,dId)
含义分别为:学生(学号,姓名,密码,所在系编号)
stuDetail(userID,userSex,userMobil,useraddress)
含义分别为:学生信息(学号,性别,电话,地址)
teacher(tId,tPame,tPass,dId)
含义分别为:老师(学号,姓名,密码,所在系编号)
teaDetail(userID,userSex,userAge,useredu,usertitle,usersch,userhealth)
含义分别为:老师信息(学号,性别,年纪,学历,职称,毕业院校,健康情况)
course(cId,cName,tId,credit,period,cPlace,cNumall,cNum,dId)
含义分别为:课程(课程号,名称,老师号,学分,课时,上课地点,总人数,已选人数,院系号)
choosecourse(cId,sId, Grade)
含义分别为:选修(学号,课程代码,成绩)
room(roomname,roomnum,roomtime)
含义分别为:教室(教室名,容纳人数,空闲时间)
admin(aId,aPass)
含义分别为:管理员(管理员编号,姓名)
department(dId,dName)
含义分别为:院系(院系编号,院系名)
依据上面E-R图设计及关系模型设计,得出数据表设计,在本系统中关键数据表以下:
表1 学生表Student表结构
主码
列 名
数据类型
宽度
小数位
空否
备 注
Pk
sId
Char
10
N
学号
sName
Char
20
Y
姓名
sPass
Char
2
Y
密码
dId
Char
20
Y
所在系号
表2 学生信息表StuDetail表结构
主码
列 名
数据类型
宽度
小数位
空否
备 注
Pk
userID
Char
10
N
学号
userSex
Char
10
Y
性别
userMobil
Char
30
Y
电话
userAddress
Char
50
Y
地址
表3 老师表teacher表结构
主码
列 名
数据类型
宽度
空否
备 注
Pk
tId
Char
10
N
编号
tName
Char
20
Y
姓名
tPass
Char
2
Y
密码
dId
Char
20
Y
所在系号
表4 老师信息表teadetail表结构
主码
列 名
数据类型
宽度
空否
备 注
Pk
userID
Char
10
N
学号
userSex
Char
10
Y
性别
userAge
Char
50
Y
电话
useredu
Char
30
Y
学历
usertitle
Char
30
Y
职称
usersch
Char
30
Y
毕业院校
Userhealth
Char
50
Y
健康情况
表5 课程信息表Course表结构
主码
列 名
数据类型
宽度
空否
备 注
Pk
cId
Char
10
N
课程号
coName
Char
20
Y
课程名称
tId
Char
10
Y
老师号
credit
Char
8
Y
学分
period
Char
8
Y
课时
cPlace
Char
10
Y
上课地点
cNumAll
Char
4
Y
总人数
cNum
Char
4
Y
已选人数
dId
Char
10
Y
院系号
表6 选课成绩表choosecourse表结构
主码
列 名
数据类型
宽度
空否
备 注
Pk
cId
Char
5
N
课程代码
sId
Char
3
N
学号
grade
Decimal
5
Y
成绩
表7 教室信息表room表结构
主码
列 名
数据类型
宽度
空否
备 注
Pk
roomname
Char
10
N
教室名
roomnum
Char
10
N
容纳人数
roomtime
Char
10
Y
空闲时间
表8 管理员表admin表结构
主码
列 名
数据类型
宽度
空否
备 注
Pk
aId
Char
10
N
管理员编号
aPass
Char
10
Y
管理员姓名
表9 院系表department表结构
主码
列 名
数据类型
宽度
空否
备 注
Pk
dId
Char
10
N
院系号
dName
Char
10
Y
院系名
下面在系统实施阶段就能够物理实现数据库了,本系统使用前面试验已经建好服务器端SQL Server数据库—xuanke,具体创建方法见前面试验。
三.系统实现
本试验是用JSP结合数据库实现,其中包含了三个主页面,一是学生登录页面,二是老师登录页面,三是管理员登录页面。其中每个页面中全部会有菜单进行对应操作。
3.1 JSP文件代表操作
(1)主界面操作:
Index.jsp//登录界面(包含学生、老师、管理员三个选项)
Login.jsp//密码验证
(2)学生选课
(a)学生选课界面:student.jps//菜单显示
studentIndex.html//欢迎界面
studentMessage.jsp
(b)个人信息:studMessSel.jsp//个人信息页面显示
(c)密码修改:stuM.jsp//在数据库中修改密码
stuMessMod.jsp//修改密码界面
stuMessModSuc.jsp//修改成功
(d)成绩查询:gradeselect.jsp//对应课程成绩查询
(e)选课:choosecourse.jsp//全部课程显示
choose.jsp//在数据库中插入数据
choosesuccess.jsp//选课成功
(f)选课情况查询及退选:courseselect.jsp//选课情况查询
ccdel.jsp//数据库中删除选课统计
(g)注销: zhuxiao.jsp//注销
(3)老师管理
(a)老师管理界面:teacher.jps//菜单显示
teacherIndex.html//欢迎界面
teacherMessage.jsp
(b)个人信息:teacherMessSel.jsp//个人信息页面显示
(c)密码修改:teacherM.jsp//在数据库中修改密码
teacherMod.jsp//修改密码界面
teaMessModSuc.jsp//修改成功
(d)提交成绩:grade.jsp//选课学生信息显示
gradeIns.jsp//在数据库中插入数据
(e)课程信息:lookcourse.jsp//选课情况查询
(f)教室信息:classroom.jsp//查看可用教室空闲时间
(g)注销: zhuxiao.jsp//注销
3.2 数据库连接
举例:验证用户类型和密码时数据库连接
<body>
<%
String name=(String)request.getParameter("username");
String pass=(String)request.getParameter("userpass");
String s=(String)request.getParameter("userselect");
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
String loginNum="0";
session.setAttribute("lnum",loginNum);
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection("jdbc:odbc:xk","sa","");
if(s.equals("1"))
{
String sql="select * from student where sId='"+name+"' and sPass='"+pass+"'";
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
if(rs.next())
{
loginNum="1";
session.setAttribute("lnum",loginNum);
session.setAttribute("name",name);
out.print(name+"登陆成功,页面跳转........");
response.sendRedirect("student/studentIndex.html");
}
else
{
out.print("用户名或密码有误..");
response.sendRedirect("index.jsp");
}
}
if(s.equals("2"))
{
String sql="select * from teacher where tId='"+name+"' and tPass='"+pass+"'";
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
if(rs.next())
{
loginNum="2";
session.setAttribute("lnum",loginNum);
session.setAttribute("name",name);
out.print(name+"登陆成功,页面跳转........");
response.sendRedirect("teacher/teacherIndex.html");
}
else
{
out.print("用户名或密码有误..");
response.sendRedirect("index.jsp");
}
}
if(s.equals("3"))
{
String sql="select * from admin where aId='"+name+"' and aPass='"+pass+"'";
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
if(rs.next())
{
loginNum="3";
session.setAttribute("lnum",loginNum);
session.setAttribute("name",name);
out.print("管理员"+name+"登陆成功,页面跳转........");
response.sendRedirect("admin/adminIndex.html");
}
else
{
out.print("用户名或密码有误..");
out.print("<a href=index.jsp>登陆页面</a>");
}
}
}
catch(Exception e){out.print(e);
//response.sendRedirect("index.jsp");
}
%>
</body>
3.3 具体操作
(1)学生选课操作
(a)登录页面
图1.1 学生登录页面
关键代码:
<body>
<form name="loginform" method="post" action="login.jsp">
<br>
<br>
<br>
<br>
<table width="500" height="150" border="0" align="center">
<tr>
<td align="center"><font size="5" color="#FFFFFF">欢迎您使用学生选课系统</font></td>
</tr>
<tr>
</table>
<table width="294" border="0" align="center">
<tr>
<td colspan="3"> </td>
</tr>
<tr>
<td width="79">用户名:</td>
<td width="148"><input name="username" type="text" size="20" size="20" maxlength="30"></td>
<td width="53" rowspan="2"><img src="image/logo_img.gif" width="37" height="40" onClick="loginclick()"> </td>
</tr>
<tr>
<td>密码:</td>
<td><input name="userpass" type="password" size="20" size="20" maxlength="30"> </td>
</tr>
<tr>
<td>用户类型:</td>
<td>
<select name="userselect">
<option value="1" selected>学生</option>
<option value="2">老师</option>
<option value="3">管理员</option>
</select> </td>
<td> </td>
</tr>
</table>
</form>
</body>
(b)菜单操作
图1.2 学生选课系统界面
关键代码:
<table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="#000000">
<tr>
<td height="40" align="center" bgcolor="#00509F"><div align="center"><font color="#FFFFFF" size="4">学生选课系统</font></div></td>
</tr>
<tr>
<td height="40" align="center" bgcolor="#FFFFFF"><div align="left"><img src="image/index_01.gif" width="20" height="17"><a href="studMessSel.jsp" target="rightFrame"><font color="#0000FF" size="3">个人信息</font></a></div></td>
</tr>
<tr>
<td height="40" align="center" bgcolor="#FFFFFF"><div align="left"><img src="image/index_01.gif" width="20" height="17"><a href="stuMessMod.jsp" target="rightFrame"><font color="#0000FF" size="3">密码修改</font></a></div></td>
</tr>
<tr>
<td height="40" align="center" bgcolor="#FFFFFF"><div align="left"><img src="image/index_01.gif" width="20" height="17"><a href="gradeSelect.jsp" target="rightFrame"><font color="#0000FF"size="3" >成绩查询</font></a></div></td>
</tr>
<tr>
<td height="40" align="center" bgcolor="#FFFFFF"><div align="left"><img src="image/index_01.gif" width="20" height="17"><a href="courseSelect.jsp" target="rightFrame"><font color="#0000FF"size="3" >选课查询和退选</font></a></div></td>
</tr>
<tr>
<td height="40" align="center" bgcolor="#FFFFFF"><div align="left"><img src="image/index_01.gif" width="20" height="17"><a href="choosecourse.jsp" target="rightFrame"><font color="#0000FF" size="3">选课</font></a></div></td>
</tr>
<tr>
<td height="40" align="center" bgcolor="#FFFFFF"><div align="left"><img src="image/index_01.gif" width="20" height="17"><a href="zhuxiao.jsp" target="_top"><font color="#0000FF" size="3">注销</font></a></div></td>
</tr>
</table>
(c)个人信息显示
学生进入后能够在菜单里进行对应操作,点击个人信息时,就会出现该学生信息.以下图所表示:
图1.2 学生信息显示界面
关键代码:
从数据库中读出对应信息:
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection("jdbc:odbc:xk","sa","");
String sql="select * from student where student.sId='"+name+"'";
System.out.println(sql);
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
if(rs.next())
{
sId=rs.getString("sId");
sName=rs.getString("sName");
dId=rs.getString("dId");
}
String sql1="select * from stuDetail where userID ='"+name+"'";
System.out.println(sql1);
stmt=conn.createStatement();
rs=stmt.executeQuery(sql1);
if(rs.next())
{
Sex=rs.getString("userSex");
Mobil=rs.getString("userMobil");
Addr=rs.getString("userAddress");
}
Connection connd=null;
Statement stmtd=null;
ResultSet rsd=null;
connd=DriverManager.getConnection("jdbc:odbc:xk","sa","");
stmtd=connd.createStatement();
rsd=stmtd.executeQuery("select dName from department where dId='"+dId+"'");
if(rsd.next())
{
dName=rsd.getString("dName");
}
}
catch(Exception e){out.println(e);
}
%>
<form name="form1" method="post">
<table width="350" border="0" align="center" cellpadding="0" cellspacing="2" class="border">
<td height="25" align="center"><strong><font size="5" color="#FFFFFF" >学生个人信息</font></strong></td>
</table>
<table border="10" align="center" width="500" height="150">
<tr>
<Td width="60"> <font size="4" color="#FFFFFF">学号</font></Td><td width="100"> <font size="3" color="#FFFFFF"><%=sId%></font></td>
<td width="60"> <font size="4" color="#FFFFFF">姓名</font></td><td width="100"> <font size="3" color="#FFFFFF"><%=sName%></font></td>
<td width="60"> <font size="4" color="#FFFFFF">性别</font></td><td width="100"> <font size="3" color="#FFFFFF"><%=Sex%></font></td>
</tr>
<tr>
<td> <font size="4" color="#FFFFFF">院系</font></td><td> <font size="3" color="#FFFFFF"><%=dName%></font></td>
<td> <font size="4" color="#FFFFFF">电话</font></td><td> <font size="3" color="#FFFFFF"><%=Mobil%></font></td>
<td> <font size="4" color="#FFFFFF">地址</font></td><td> <font size="3" color="#FFFFFF"><%=Addr%></font></td>
</tr>
</table>
</form>
(d)密码修改
举例:
将0826006学号密码该为:6666
其显示以下:
图1.3 修改密码
修改提交后数据库中结果以下,可见密码已修改
图1.4 数据库中修改后student表
关键代码:
数据库中修改该学生密码代码
String sPass=(String)request.getParameter("sPass");
Connection conn=null;
Statement stmt=null;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection("jdbc:odbc:xk","sa","");
String sql2="update student set sPass='"+sPass+"' where sId='"+name+"'";
stmt=conn.createStatement();
stmt.executeUpdate(sql2);stmt.close();
response.sendRedirect("stuMessModSuc.jsp");
}
function checkBig()
{
if (document.form1.sPass.value=="")
{
alert("密码不能为空!");
document.form1.sPass.focus();
return false;
}
else if (document.form1.sPassagn.value=="")
{
alert("再次输入密码!");
document.form1.sPassagn.focus();
return false;
}
else if (document.form1.sPass.value!=document.form1.sPassagn.value)
{
alert("两次密码不一样!");
document.form1.sPass.focus();
return false;
}
}
out.print("修改成功");
(e)成绩查询
依据教授该门课老师是否提交成绩,学生能够查到自己对应课程成绩,其查询结果以下:
图1.5 查询成绩页面
关键代码:
try
{
Statement stmtc=null;
ResultSet rsc=null;
Connection connc=null;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
connc=DriverManager.getConnection("jdbc:odbc:xk","sa","");
String sqlc="select * from chooseCourse where sId='"+name+"'";
stmtc=connc.createStatement();
rsc=stmtc.executeQuery(sqlc);
while(rsc.next())
{
String coId=rsc.getString("coId");
float grade=rsc.getFloat("grade");
String grademess=null;
Statement stmt=null;
ResultSet rs=null;
Connection conn=null;
conn=DriverManager.getConnection("jdbc:odbc:xk","sa","");
String sql="select coName from course where coId='"+coId+"'";
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
if(rs.next())
{ if(grade>0)out.print(grade);
else out.print("未提交");}
}
(f)课程查询及退选
能够经过对应课程后面退选选项进行课程退选
图1.6 查询选课情况页面
关键代码:
<table width="90%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td align="center" valign="top">
<p class="style8">
<%=name%>选课选择情况</p>
<table width="600" border="0" cellpadding="0" cellspacing="1" bgcolor="#000000">
<tr>
<td width="100" align="center" bgcolor="#FFCCFF"><div align="center"><strong><font color="blue"> 课程名称</font></strong></div></td>
<td width="60" align="center" bgcolor="#FFCCFF"><di
展开阅读全文