资源描述
课 程 设 计
课程名称:
软件工程
试验项目:
学生信息管理系统
姓 名:
XXX
专 业:
软件工程
班 级:
XXX班
学 号:
XXXX
目 录
一、需求分析 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 1
二、可行性分析 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 1
1.问题 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 1
2.项目目标 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 2
3.运行环境 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 2
4.开发风险 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 2
5. 经济可行性 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 2
6.技术可行性 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 2
7.法律可行性 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 2
8.总体分析 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 3
三、系统功效分析 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 3
1.系统功效划分 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 3
2.系统模块 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 3
四、 数据描述 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 3
1.系统步骤图 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 3
2.数据步骤图 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 4
3.数据字典 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 5
4.E-R图 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 8
5.用例图 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 11
五、总体设计 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ ┄ 11
1、基础设计概念和处理步骤 ┄┄┄┄┄┄┄┄┄ 11
2、软件结构 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 11
3、数据结构 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 13
六、具体设计 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ ┄┄ 14
1.模块设计 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ ┄┄ 14
2.改密码 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ ┄┄ 16
3.浏览 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ ┄ 17
七、功效介绍 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 17
八、关键代码展示 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 20
九、心得体会 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 25
一、需求分析
现在大学中,老师和学生全部重视理论和实际相结合,开设了很多和课程相配课程设计。而在实际人工管理中,因为提交文档作业数量众多,处理复杂,造成管理混乱。
伴随科学技术不停提升,计算机科学日渐成熟,其强大功效已为大家深刻认识,它已进入大家生活各个领域,并发挥了越来越关键作用,针对人工管理缺点,最好处理措施就是借助计算机技术提供一个电子化课程设计管理平台。为了愈加好地管理设计过程中所产生资料文档,我们开发一个软件工程课程设计管理系统。老师和学生能够应用该系统实现以下功效:
1、学生使用自己姓名和学号(密码)登陆后,能够从题库中选择一个题目,而且填写同组其它同学姓名,学号,班级,小组长等。且选题一旦保留就不能再更改。
2、学生能够修改自己密码。能够查询自己选题情况。学生能够查询自己课程设计成绩。
3、学生在课程设计各个阶段工作汇报上传至该系统。
4、老师使用姓名和工资号(密码)登陆后,能够查看学生选题情况;能够查看学生设计汇报,填写学生项目进度情况,而且给出最终分数。
5、老师能够修改自己密码。老师把课程设计题目,学习资料等上传到该系统。
6、其它使用该系统人,能够以用户身份登陆浏览。
7 本例使用面向对象需求分析方法分析
性能需求
操作系统: Windows98 以上/ME//XP 等
数据库: MySQL
二、可行性分析
1. 问题:
(1)现在课程设计管理系统由人工统计处理。
(2)站用一个办公室和2-3个职员专门用来管理课程设计选课,天天有固定工作时间8小时。
(3)每人工资在每个月-3000元。
(4)需要选题同学按班级方法报上来,经查对分配后方才生效,在通知老师选题情况。双方如有问题还需在工作时间来此处理。
(5)因为是人工处理且工作量大,所以效率低,犯错率高,修改麻烦。
2.项目目标:
学生和老师能够方便选课,同时能够查询和修改各自信息,方便学校管理。
3.运行环境:
(1)以Windows98 以上/ME//XP作为学生选课管理系统后台操作系统。
(2)前台开发程序为JAVA,Mysql
(3)后台数据库为 MySQL
(4)关键硬件设备:PC机一台。
4. 开发风险:
浪费资金人力,会影响原有管理方法,总体风险不大。
5. 经济可行性:
成本估量:一台计算机天天电费(工作18小时以上),需要4-5名管理远和数据库维护人员天天工资(天天工作在8小时以上),人员培训费用,定时软硬件更新费用,每十二个月总运行费用,杂项费用。
资源分析:现有计算机比较充足,相关人才在学校内就能找到,工资要求低。
6.技术可行性:
我校计算机系和其它系全部有软硬件知识丰富,含有较高文化水平和计算机操作水平,能够设计管理该系统学生和老师,且课余时间丰富,能够学习和了解在设计和应用当中会碰到或可能碰到技术问题。我校很多专业全部以开设类似课程设计题目,学生和老师在技术方面已经有经验,正缺乏这么实践机会。
7.法律可行性:
即使其它学校也有类似管理系统,但全部关键在本校使用,没有包含到盈利方面,我校设计该系统也本着让学生和老师把握一次学习实践机会目标,锻炼她们开发技术和能力,不会去剽窃已经设计好管理系统,如有借鉴地方公布时也会说明,而且该系统是本着方便学生学习目标,而非盈利目标,所以不会和法律相冲突。
8.总体分析:
比原有方法工作效率高,成本低,犯错率低,使学校实现现代化网络教学管理。
三、系统功效分析
1.系统功效划分:
使用该系统有三个角色老师,学生,用户。老师能够查看学生选课情况,能够查看学生设计汇报,填写学生项目进度情况,给出最高分,修改密码,上传课程设计题目,学习资料。学生能够查看选课情况和成绩,选课。用户只能够浏览选课信息。
2.系统可分为5个模块:
(1)基础信息:
老师和学生信息包含老师号,学生号,老师开设课程设计题目, 学生选课程设计题目,项目进度和分数。
(2)选课:
显示老师开设课程设计题目,实现学生选课。
(3)查询:
学生查询可选题,自己选题情况,自己课程设计成绩。老师查询学生选题情况,学生设计汇报。
(4)修改:
老师填写项目进度情况和给出分数,学生填写同组其它同学姓名,学号,班级,小组长,修改结果存入对应数据库等。
(5)密码:
老师和学生能够修改自己登陆密码,结果存入用户信息数据库。
四、 数据描述
1.系统步骤图:
2.数据步骤图
简易数据流图:
完整数据流图:
3.数据字典:
数据流描述:
数据流名:用户名密码
数据起源:用户登陆处理
数据去向:验证信息处理。
说明:用户输入用户名和密码
数据组成:用户名+密码
数据流量:小
数据流名:直接登陆
数据起源:用户登陆处理
数据去向:用户界面
说明:一般用户不输入用户名和密码直接以用户身份登陆
数据流名:登陆
数据起源:验证信息处理正确
数据去向:依据验证信息返回条件决定是老师界面还是学生界面
说明:系统登陆到老师界面。
数据流名:选题,资料
数据起源:老师界面输入选题和资料窗口
数据去向:上传处理
说明:老师输入要上传课题和资料
数据流名:小组组员信息
数据起源:选课信息界面
数据去向:验证填写信息处理
说明:学生填写同组其它同学姓名,学号,班级,小组长名。
数据流名:工作汇报。
数据起源:课题信息界面
数据去向:上传处理
说明:学生将各阶段工作汇报上传。
数据流名:设计汇报
数据起源:选题信息界面
数据去向:上传处理
说明:学生填写所选课题设计汇报上传。
数据元素词条描述:
元素名:用户
描述:使用该管理系统人
定义:用户=老师+学生+用户
元素名:用户名
描述:用来区分老师和学生
定义:用户名=老师名+学生名
元素名:密码
描述:用来确保老师和学生帐户安全
定义:密码=老师密码+学生密码
元素名:工作汇报
描述:叙述课题进展情况
定义:组长名+课题号+进展情况
位置:数据库
元素名:设计汇报
描述:对所选课题设计需求规格说明书
定义:课题号+需求规格说明书+组长名
位置:数据库
元素名:资料
描述:学习资料
定义:课题号+相关资料
位置:数据库
元素名:验证
描述:用来区分登陆用户是老师还是学生和输入信息是否正确
定义:用户名+密码
位置:数据库
元素名:小组信息
描述:小组同学姓名,学号,班级,组长
定义:同学名+学号+班级+组长名
位置:数据库
元素名:课题
描述:老师公布可选课题
定义:课题名+课题号+课题内容说明
位置:数据库
4.E-R图:
学生实体E-R图:
班级实体E-R图:
课程实体E-R图:
年级实体E-R图:
成绩实体E-R图:
实体和实体之间E-R图:
5.用例图:
五、总体设计
1、基础设计概念和处理步骤
针对以上系统要完成功效,本系统总体设计采取自顶向下,逐步细化方法将功效层次结构各个部分组合起来,以完成整个系统实现细节说明本系统基础设计概念和处理步骤,尽可能使用图表形式。
2、软件结构
(1)顶层结构:
(2)学生事务处理分结构:
(3)老师事务处理分结构:
(4)过客事务处理结构:
3、数据结构
说有数据全部以数据库形式存放,数据库模式以下所表示:
表1
表名
student
列名
数据类型(精度范围)
主/外码
空/非空
约束条件
id
Char(8)
主码
非空
name
Char(40)
非空
Password
Char(40)
非空
Sex
Char(2)
非空
‘男’OR‘女’
Email
Char(40)
非空
Isleader
Char(2)
非空
‘是’OR’否’
Leader
Char(8)
非空
表2
表名
teacher
列名
数据类型(精度范围)
主/外码
空/非空
约束条件
id
Char(8)
主码
非空
name
Char(40)
非空
Password
Char(40)
非空
Email
Char(40)
非空
表3
表名
course
列名
数据类型(精度范围)
主/外码
空/非空
约束条件
id
Char(8)
主码
非空
title
nvarchar(10)
非空
number
nvarchar(10)
content
ntext
operateSystem
nvarchar(40)
dataBaseType
nvarchar(40)
表4
表名
choose
列名
数据类型(精度范围)
主/外码
空/非空
约束条件
masterId
Char(8)
主码
非空
courseId
Char(8)
主码
非空
mark
real
content
ntext
表5
表名
files
列名
数据类型(精度范围)
主/外码
空/非空
约束条件
Id
Char(8)
主码
非空
leaderId
Char(8)
外码
非空
Filename
Char(50)
date
datetime
六、具体设计
1.模块设计
本系统模块设计将对总体设计中模块结构进行。
(1)用户登陆模块
①用户依据自己不一样身份使用对应信息登录
②系统检验所填信息
③错误则转(一)重新输入
④进入对应页面
⑤系统更新登录统计
⑥结束
(2)选题、填写小组信息功效模块
①进入对应界面
②依据本小组信息填写对应内容
③系统更新文件
④小组浏览题目
⑤系统统计选题信息
⑥系统增加对应统计
(3) 上传文件功效模块
①进入对应界面
②输入文件内容
③系统添加文件
④结束
(4) 查看功效模块:
① 用户依据需要查询
② 系统检验要查询内容
③ 输入错误转(一)
④ 系统给出相关信息
⑤ 写主数据文件
⑥ 写交易流水文件
⑦ 结束
(5) 总体打分模块:
① 进入对应页面
② 老师打分
③ 更新数据库
④ 学生在界面看到成绩
⑤ 退出
(6)填写进度模块:
① 进入对应页面
② 小组填写进度
③ 系统更新文件
④ 结束
2.改密码:
(1)使用原密码登陆系统
(2)系统验证密码,假如密码正确则继续下列操作,不然返回(一)
(3)用户输入新密码
(4)再输入一次新密码进行验证,假如密码正确则继续下列操作,不然返回(三)
(5)系统接收新密码并修改数据库中密码
(6)假如成功修改数据库转到(八),不然转入(七)
(7)维持原来密码,并提醒修改密码失败,返回(三)
(8)提醒密码修改成功
(9)结束
3.浏览
(1)用户以游客身份登录系统
(2)浏览系统中公开信息
(3)推出系统
(4)结束
七、功效介绍
1.开启服务器,在浏览器里输入对应地址( 在本机上输入::8080/StudentScoreManage/),进入系统主界面,也就是登录界面,图4-1所表示:
此界面使用了表格进行排版,使用了一组单选按钮来区分不一样角色,部分代码以下:
<table>
<tr><td class=tb02-tdtitle>角 色:
<html:radio property="type" value="student" >学生</html:radio>
<html:radio property="type" value="teacher" >老师</html:radio>
<html:radio property="type" value="manage">管理员</html:radio><br/>
<tr><td>用户名:<html:text property="name"></html:text><br><br>
<tr><td >密码: <html:password property="password"></html:password><br><br>
<tr><td align="center" class=tb02-tdtitle>
<html:submit>登 录</html:submit>
<html:reset>重 置</html:reset>
</table>
该登录模块,使用到了Struts+Hibernate技术,使用StrutsActionform进行判定,看输入各项是否为空,是否符合要求。Action进行登录验证处理,验证成功则跳转到对应登录成功界面,不然给出对应错误信息。
2. 老师功效
老师有六种功效可选择分别是:查询学生成绩,录入学生成绩,修改更新成绩,统计成绩,修改密码和注销。在此界面上,使用了六个超链接,分别链接到不一样功效页面。
(1)查询学生成绩功效,在该功效页面上老师能够查询以班级为单位学生成绩还能够查询出全部学生成绩,也能够查询学生个人成绩。并能够打印或是下载所查询到成绩,比如查询全部学生成绩,显示结果图
(2) 录入学生成绩功效,此功效受教务管理员控制,通常只有在考试或补考以后,教务管理员才会把该权限给予给老师,在通常情况下该功效是被锁定。考试过后老师不用在把成绩写在纸上报送教务处,只需要在有上网条件下,直接就能够把成绩写到数据库中,学生能够在第一时间内查询到自己成绩。这么老师不用在向教务处跑了,教务管理员也不用老是呆在办公室。
(3)修改更新成绩功效,该功效和成绩录入一样也是受教务管理员控制。老师没有删除成绩功效,当成绩输入后,若出现错误,只能经过修改更新成绩功效来修改,此功效也是很有用。因为老师不能经过反复录入覆盖已经存在错误成绩,也不能删除已经存在错误成绩,若想修改错误成绩,只能经过该功效来完成。
(4)统计成绩功效,此功效对老师很实用,因为在考试过后,老师需要统计很多信息,若只靠手工来统计,不仅速度较慢,而且还麻烦,而且还轻易犯错。本系统就带有统计功效,老师能够统计自己所教授科目标平均成绩,不及格人数,及格人数,不及格率,及格率,优异人数,优异率,还能够统计某一分数段人数,而且操作简单,只需要勾选您需要统计项目即可。
(5)修改密码功效和注销功效比较简单,这里就不在述说了。
八、关键代码展示
1. student.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="errorpage.jsp" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<p>
<%
String id = (String)session.getAttribute("id");
//if(stu_id==null){response.sendRedirect("login.jsp");}
%>
<font size="+2" >目前模块—学生用户模块</font> </p>
<p> </p>
<p> </p>
<table width="58%" border="0" align="center">
<tr>
<td><a href="DisplayCourse.jsp">选修课程</a></td>
<td><a href="StudentLoginSvlt?id=<%=id%>&action=checkmark">察看学分</a></td>
<td><a href="updateinformation.jsp">更改信息</a></td>
</tr>
</table>
<p> </p><p> </p><p><a href="login_confirm?action=logout"><<注销 </a></p>
</body>
</html>
2. teacher.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="errorpage" %>
<html>
<body >
<%
String tea_id=(String)session.getAttribute("id");
%>
<p><font size="+3" >目前模块—老师用户模块</font></p>
<p align="center"><a href="MarkSvlt?id=<%=tea_id%>&action=choosestu">挑选选课学生>></a>
<a href="MarkSvlt?id=<%=tea_id%>&action=public">公布成绩>></a>
</p>
<p align="center"> </p>
<p align="center"> </p>
<p><a href="login_confirm?action=logout"><<注销 </a></p>
</body>
</html>
3.student.java
import java.sql.*;
public class student {
private String name;
private String password;
private String id;
private String jiguan;
private String sex;
private String dep;
public void setDep(String s){dep=s;}
public String getDep(){return dep;}
public void setSex(String s){sex=s;}
public String getSex(){return sex;}
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getJiguan() {
return jiguan;
}
public void setJiguan(String jiguan) {
this.jiguan = jiguan;
}
public boolean hasLogin(String id){ //检验该学生是否已经注册
boolean f=true;
String sql="select id from student where id ='"+id+"'";
sqlBean db =new sqlBean();
try{
ResultSet rs=db.executeQuery(sql);
if(rs.next()){ f=false;}
else{ f=true;}
}catch(Exception e){ e.getMessage();}
return f;
}
public ResultSet getStudent(){
String sql="select * from student ";
sqlBean db= new sqlBean();
ResultSet rs = db.executeQuery(sql);
return rs;
}
public void updateStudent(){
String sql="update student "+
" set name='"+name+"',sex='"+sex+"',department='"+dep+"', "+
"password='"+password+"',jiguan='"+jiguan+"' "+
" where id='"+id+"' ";
sqlBean db= new sqlBean();
db.executeInsert(sql);
}
public void deleteStudent(){
String sql="delete from student where id ='"+id+"' ";
sqlBean db= new sqlBean();
db.executeDelete(sql);
}
public int deleteStudent(String id){
int num=0;
String sql="delete from student where id ='"+id+"' ";
sqlBean db= new sqlBean();
num=db.executeDelete(sql);
return num;
}
public void addStudent() {
String sql="insert into student(name,password,id,sex,department,jiguan) "+
"VALUES('"+name+"','"+password+"','"+id+"','"+sex+"','"+dep+"','"+jiguan+"')";
sqlBean db =new sqlBean();
db.executeInsert(sql);
}
}
4.teacher.java
import java.sql.*;
public class teacher {
String id;
String name;
String password;
String title;
public void setPassword(String s){password = s;}
public String getPassword(){return password;}
public void setName(String s){name=s;}
public String getName(){return name;}
public void setTitle(String s){title=s;}
public String getTitle(){return title;}
public String getId(){return id;}
public void setId(String id){this.id=id;}
public ResultSet getCourse( ){
String sql="select course.name "+
"from classes,course "+
"where classes.tea_id='"+id+"' "+
"and course.id=classes.cour_id";
sqlBean sqlbean = new sqlBean();
ResultSet rs = sqlbean.executeQuery(sql);
return rs;
}
public boolean hasLogin(String id){ //检验该老师是否已经注册
boolean f=true;
String sql="select id from teacher where id ='"+id+"'";
sqlBean db =new sqlBean();
try{
ResultSet rs=db.executeQuery(sql);
if(rs.next()){ f=false;}
else{ f=true;}
}catch(Exception e){ e.getMessage();}
return f;
}
public void addTeacher(){
String sql="insert into teacher(id,name,title,password) "+
"values('"+id+"','"+name+"','"+title+"','"+password+"') ";
sqlBean db =new sqlBean();
db.executeInsert(sql);
}
public ResultSet getAll(){
String sql="select * from teacher";
sqlBean db =new sqlBean();
ResultSet rs = db.executeQuery(sql);
return rs;
}
public void update() {
String sql= "update teacher set name='"+name+"', "+
"title='"+title+"' ,password='"+password+"' "+
"where id='"+id+"' ";
sqlBean db =new sqlBean();
db.executeInsert(sql);
}
public int delete(String id){
int num=0;
String sql="delete from teacher where id ='"+id+"' ";
sqlBean db= new sqlBean();
num=db.executeDelete(sql);
return num;
}
}
九、心得体会
这次年设计使我体会深刻,使我在系统设计、软件开发、系统测试和维护上受益匪浅、更使我知道了对系统操作设计要简练方便,更具人性化,要在jsp和MySQL上我也了解了很多知识,我即使碰到了很多困难,但在和同学探讨和研究中,困难迎刃而解。同时我也知道了在具体设计之前进行总体设计必需性:能够站在全局高度上,花较少成本,在抽象层次上分析对比多个系统实现方案和软件结构,从中选出最好方案和最合理软件结构,从而用较低成本开放出较高质量软件系统。
展开阅读全文