资源描述
计算机
《管理信息系统课程设计》
实验报告
专 业:
班 级:
学 号: _
姓 名:
指导老师: ______ ____
学生成绩管理系统的分析与设计
一、设计目的与意义
现在我国的大中专院校的学生成绩管理水平普遍不高,有的还停留在纸介质基础上,这种管理手段已不能适应时代的发展,因为它浪费了了许多的人力和物力。在当今信息时代这种传统的管理方法必然被计算机为基础的信息管理系统所代替。如果本系统能被学校所采用,将会改变以前靠手工管理学生成绩的状况,可以树立良好的办学形象,提高工作效率。
建立学生成绩管理系统,采用计算机对学生成绩进行管理,进一步提高办学效益和现代化水平。帮助广大教师提高工作效率,实现学生成绩维护工作流程的系统化、规范化和自动化。为了使系统在学院的管理中发挥更大的作用,实现工作过程的计算机化,提高工作效率和工作质量,现提出如下的系统开发目标:
(1)系统应具有实用性、可靠性和适用性,同时注意到先进性。
(2)对各个数据库进行动态管理,防止混乱。
(3)不同用户有不同的查询和修改权限,防止非法查询,非法修改。
(4)能够对查询结果进行分类汇总,实现报表打印和下载。
(5)方便用户的操作,尽量减少用户的操作。
二、系统分析
1. 需求分析
1) 系统需求简介
该学生成绩管理系统提供学生成绩的录入、修改、查询、等各种功能。成绩由各系的任课老师录入,修改。管理员拥有对教师、学生、选课信息记录的操作权限。
2) 用户需求描述
a. 教师
教师可以看到学生信息和成绩信息。学生信息包括学号、姓名、班级、生日、性别、地址、电话等基本信息。当教师要查看某一学生信息时,可以自动显示出该课程的这个学生所有课程的学习成绩,并同时自动计算出这个学生的总分和平均分。在成绩信息中,教师可以对学习成绩进行增加、修改和删除,并能够打印报表。特别是可以对学生成绩进行分析,便于在以后的教学和出卷中改进。
b. 学生
学生用户登录后,学生可以看到自己的学生信息和成绩信息。学生信息包括学号、姓名、班级、生日、性别、地址、电话等信息。成绩信息包括这个学生的所有课程的成绩信息。
c.管理员
与老师的功能相似,另外管理员具有用户管理功能,能够对新上任的老师和新注册的学生行进添加,并能删除已经毕业和退休的学生和老师。
3) 功能需求
a. 密码修改
用户在登录的状态下可以输入自己的旧密码,验证成功后可以设置新的密码
b. 忘记密码
用户在未登录状态下可以输入自己的用户名和相关的验证信息,如果验证成功,则可以直接设置新的密码来作为自己账户的密码。
c. 信息录入
需要输入的记录里包含的外码ID必须存在,用户才能正确录入信息。
d. 查询
用户输入要查询的条件,输入的内容必须在数据库中存在,才能在控件中显示出来
e. 修改
用户输入条件查询,然后在显示的表格框中修改需要修改的信息。
f. 删除
有删除权限的用户输入需要删除记录的主码,若存在,则提示删除成功。
4) 性能需求
a. 时间特性
一般操作的响应时间应在1~2秒内
b. 适应性
满足个人使用的需求(记录量控制在50项内)。
对运行环境要求不应存在困难。
2. 系统逻辑方案
1)系统框架设计
2)业务流程分析(图)
3)数据流图(DFD)
4)数据字典
数据结构:admin
描述:管理员的基本信息表
定义:admin = admin_username + admin_password + admin_name + admin_age + admin_sex + admin_job + admin_information + admin_image
admin_username={限三个字符以内}
admin_password={限10个字符以内}
------------------------------------------------------
数据结构:course
描述:学校课程信息表
定义:course= course_id + course_name + course_point + teacher_username
course_id={限4个字符以内}
teacher_username={限4个字符以内}
----------------—-------------------------------------
数据结构:score
描述:成绩表
定义:score= scoreid + teacher_username + student_username + course_id + scoreyear + score
scoreid={限4个字符以内}
scoreyear={整数型}
score={整数型}
-------------------------------------------------------
数据结构:student
描述:学生基本信息表
定义:
student=student_username+ student_password+ student_name+ student_age+ student_sex+ student_startyear+ student_department+ student_ student_profession+ student_ student_studentclass+ student_ student_information+ student_image
student_username={限9个字符以内}
student_password={限10个字符以内}
--------------------—---------------------------------
数据结构:teacher
描述:教师基本信息表
定义:teacher=teacher_username+ teacher_password+ teacher_name+ teacher_age+ teacher_sex+ teacher_job+ teacher_information+ teacher_image
teacher_username={限4个字符以内}
teacher_password={限10个字符以内}
--------------------—---------------------------------
数据流名:忘记密码
来源:判断核对
去向:用户信息表
组成:{用户名+用户类型+用户信息+新密码}
备注:当用户忘记密码时可以通过验证信息修改掉旧密码。
数据流名:成绩单
来源:教师
去向:学生
组成:{学号+教师号+课程号+分数+学年}
备注:教师录入成绩后生成成绩单,学生可查询。
--------------------—---------------------------------
数据处理名:管理员查询
输入:查询条件
处理逻辑:根据输入的条件判断是否有对应记录,并提示结果
输出:信息显示
备注:用于查询和显示需要的信息
数据处理名:管理员修改
输入:要修改的信息
处理逻辑:判断输入的记录的主码是否存在,给出提示显示结果
输出:提示结果
备注:用于管理员修改需要的对应信息
数据处理名:管理员删除
输入:需要删除的记录的主码
处理逻辑:判断是否存在,给出提示
输出:提示结果
备注:用于管理员删除不需要的对应记录
数据处理名:修改密码
输入:用户名、旧密码、新密码
处理逻辑:判断输入的用户名旧密码是否有对应记录,并给出提示
输出:提示结果
备注:用于修改用户密码
数据处理名:成绩录入
输入:学号、教师号、课程号、成绩、学年
处理逻辑:判断输入的学号、教师号、课程号是否有对应记录,并给出提示
输出:提示结果
备注:用于教师录入学生成绩
--------------------—---------------------------------
数据存储:学生成绩情况
说明:存放的是每个学生的成绩情况
输入数据流:各门功课的成绩情况
流出数据流:学生的成绩单
数据量:由学生的人数决定
存储方式:按学号先后顺序排列。
三、数据库设计
1.数据库概念结构设计(ER图)
2.逻辑结构设计(ER图转换为关系模型)
以下是最终的数据库表:
四、系统设计
1. 模块结构设计
由前面的系统需求分析得到实体主要有5个:教师、学生、管理员、课程、成绩。
学生有属性:学号、姓名、性别、系名、专业、出生日期
教师有属性:教师号、姓名、性别、院系、联系电话
管理员属性:用户名、密码
课程有属性:课程号、课程名、学分、教师
成绩有属性:学号、姓名、课程号、课程名、成绩、授课老师
学生功能模块:
1、修改密码:学生进入页面后可以修改自己的密码,以达到保密性;
2、学籍维护:学生可以查看自己的基本信息(基本信息由管理员录入不能修改);
3、查看成绩:学生可以查看自己的必修课成绩。
教师功能模块
1、学生管理:该模块的主要功能是查询学生基本信息和对学生选课的管理以及成绩的录入修改。
2、 教师进入页面后可以查看自己的基本资料和修改自己的密码,以达到保密性;
管理员功能模块:
1、 进入页面后可以修改自己的密码,以达到保密性
2、 教师管理,对教师和课程进行修改和添加删除信息
3、 学生管理, 查询修改添加学生基本信息
2.代码设计
在我们小组本次承担的课题“学生成绩管理系统”中,我负责的模块是教师部分。下面介绍下教师可实现的操作:
第一部分是:教师个人管理
包括:1)查看个人资料
2)修改密码
第二部分是:学生信息管理
包括:1)学生信息查询
2)添加学生选课信息
3)学生成绩录入
通过以上设计,教师可以实施一些简单的基本操作。
教师个人管理:
1)查看个人资料
运行界面:
主要代码:
<body>
<%
session.setAttribute("username",login.getUsername());
SelectTeacherdao l=new SelectTeacherdao();
%>
<table width="100%" height="395" border="0">
<td height="45" colspan="2" class="HH1">教师个人基本信息</td>
<td width="23%" height="350"><table width="240" height="350" border="0" cellspacing="0">
<td height="30" class="HH2">教师照片</td>
<td height="320"><img name="adminimage" src="E:\HB的天地\成果天地\JAVA\student_manage\WebRoot\photo<%=l.getTeacheruser(login.getUsername()).getTeacherimage() %>" width="240" height="320" alt=""></td>
</td>
<td width="77%"><table width="446" height="350" border="0">
<td height="40" class="HH2">教师工号:<%=l.getTeacheruser(login.getUsername()).getTeacherusername() %></td>
<td height="40" class="HH2">教师姓名:<%=l.getTeacheruser(login.getUsername()).getTeachername() %></td>
<td height="40" class="HH2">教师年龄:<%=l.getTeacheruser(login.getUsername()).getTeacherage() %></td>
<td height="40" class="HH2">教师性别:<%=l.getTeacheruser(login.getUsername()).getTeachersex() %></td>
<td height="40" class="HH2">教师系别:<%=l.getTeacheruser(login.getUsername()).getTeacherjob() %></td>
<td height="150" class="HH2">教师个人信息:
<label for="admininformation"></label>
<textarea name="admininformation" cols="60" rows="8" readonly="readonly" id="admininformation"><%=l.getTeacheruser(login.getUsername()).getTeacherinformation() %></textarea></td>
2)修改密码
运行界面:
主要代码:
<script language="javascript">
function checksubmit(){
if(form1.password.value=="")
{
alert("请输入原密码!");
return false;
}
else if(form1.newpassword.value==""){
alert("新密码不能为空!!");
return false;
}
else if(form1.newpassword1.value==""){
alert("请确认新密码!!");
return false;
}
else if(form1.newpassword.value!=form1.newpassword1.value){
alert("两次输入的新密码不一致,请重新输入!");
return false;
}
form1.submit();
}
function freset(){
form1.reset();
return false;
}
</script>
</head>
<body>
<%
session.setAttribute("username",login.getUsername());
SelectTeacherdao l=new SelectTeacherdao();
%>
学生信息管理:
1)学生信息查询
运行界面:
主要代码:
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%
ArrayList<String> arr=l.getStudent(student.getStudentusername(),student.getStudentdepartment()
,student.getStudentprofession(),student.getStudentclass());
%>
<%
for (int i = start;i <=end;i++) {
%>
<tr style="">
<td height="30" align=center><%=l.getStudentuser(arr.get(i)).getStudentusername() %></td>
<td height="30" align=center><%=l.getStudentuser(arr.get(i)).getStudentname() %></td>
<td height="30" align=center><%=l.getStudentuser(arr.get(i)).getStudentage() %></td>
<td height="30" align=center><%=l.getStudentuser(arr.get(i)).getStudentsex() %></td>
<td height="30" align=center><%=l.getStudentuser(arr.get(i)).getStudentstartyear() %></td>
<td height="30" align=center><%=l.getStudentuser(arr.get(i)).getStudentdepartment() %></td>
<td height="30" align=center><%=l.getStudentuser(arr.get(i)).getStudentprofession() %></td>
<td height="30" align=center><%=l.getStudentuser(arr.get(i)).getStudentclass() %></td>
<td height="30" align=center><%=l.getStudentuser(arr.get(i)).getStudentinformation() %></td>
</tr>
<%
2)添加学生选课信息
运行界面:
主要代码
function check(){
if(form1.scoreid.value==""){
alert("选课号不能为空");
return false;
}
if(form1.teacherusername.value==""){
alert("教师工号不能为空!");
return false;
}
else if(form1.studentusername.value==""){
alert("学生号不能为空!");
return false;
}
else if(form1.courseid.value==""){
alert("课程号不能为空!");
return false;}
else if(form1.scoreyear.value==""){
alert("课程学期不能为空!");
}
form1.submit();
}
function freset(){
form1.reset();
return false;
<body>
<%
ScoreDao l=new ScoreDao();
score s=new score();
s.setScoreid(score.getScoreid());
s.setTeacherusername(score.getTeacherusername());
s.setStudentusername(score.getStudentusername());
s.setCourseid(score.getCourseid());
s.setScoreyear(score.getScoreyear());
s.setScore(score.getScore()); if(score.getScoreid().equals(l.getScore(score.getScoreid()).getScoreid())){
%><script language="javascript">
alert("此选课信息已对应一个课程名,请重新输入正确的课程名!");
window.location.href="student_class.jsp";
</script>
<%
}
else{
l.insertScore(s);
%><script language="javascript">
alert("新选课添加成功!!");
window.location.href="student_class.jsp";
3)学生成绩录入
运行界面:
主要代码:
<%
ArrayList<String> arr=l.getScoreteacher(login.getUsername(),score.getCourseid());
if(score.getCourseid()!=null&&!score.getCourseid().equals(l.getCourseid(login.getUsername(),score.getCourseid()).getCourseid())){
%>
<script language="javascript">
alert("你没有查询和录入该课程成绩的权限!!");
window.location.href="teacher_score.jsp";
</script>
<%
}
else if(score.getCourseid()!=null){
%>
for (int i = start;i <=end;i++) {
%>
<tr style="">
<td height="30" align=center><%=l.getScore(arr.get(i)).getScoreid() %></td><tdheight="30"align=center><%=l.getScore(arr.get(i)).getTeacherusername() %></td><td
height="30"align=center><%=l.getScore(arr.get(i)).getStudentusername() %></td><td height="30"align=center><%=l.getScore(arr.get(i)).getCourseid() %></td><td height="30" align=center><%=l.getScore(arr.get(i)).getScoreyear() %></td>
<td align=center height="30"><input name="score" type="text" id="score" value="<%=l.getCourseid(login.getUsername(),arr.get(i)).getScore()%>" size="16" maxlength="3" >
<input type="hidden" name="hiddenField" id="hiddenField" value="<%=l.getScore(arr.get(i)).getScoreid() %>"></td>
五、实验总结
这次课设对我来说意义重大,作为我们组的组长,我需要明确大家的分工,并且协调好组员的合作,做好动员的同时,还要注意时间的把握。在分工之外,为了更好的提升自己,我又自己用ASP独立完成了一个系统,虽然没有我们组系统的主负责人黄彬同学做的好,但是通过自己动手,让我学习到了很多很多以前课设没有学到的东西。
以前说做系统,首先就是闷头编程,然后搞很久也没什么进展。但是,自从上了管理信息系统这门课程后,我明白了做系统,其实最重要的是前期的需求分析和整体设计,编程其实只是其中一个很小的部分。历时几周的课设终于结束了,对于要做一个项目,我掌握了如何去做需求分析,如何画程图,写数据字典等等。还有最重要的就是,对于做项目我已经有了一个系统和规范的认识。无论以后从事什么职业,这一套流程对于我来说都是非常重要的知识财富。
当然,最重要的就是要感谢老师和同学,在课设期间给我的帮助和鼓励,没有他们我是不会在短时间内取得突破的。感谢你们~~
展开阅读全文