算法与数据结构课程设计.docx
《算法与数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《算法与数据结构课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
![算法与数据结构课程设计.docx](https://file1.bdocx.com/fileroot1/2023-2/25/6c2193d1-382c-4eea-81f1-a040222d9de8/6c2193d1-382c-4eea-81f1-a040222d9de81.gif)
算法与数据结构课程设计
郑州科技学院
算法与数据结构课程设计
题目学生成绩管理系统
学生姓名敖荣成
专业班级09级计科一班
学号*********
所在系信息科学与工程系
指导教师王玉萍
完成时间年月日
第1章课程设计的目的与要求
1.1课程设计目的
《算法与数据结构》是计算机相关专业的选修专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
本课程的程序设计专题实际是计算机相关专业学生学习完《算法与数据结构》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
1.2课程设计的实验环境
硬件要求能运行Windows2000操作系统的微机系统。
JAVA程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE、TOMCAT等开发工具。
1.3课程设计的预备知识
熟悉JAVA语言及ECLIPSE开发工具。
1.4课程设计要求
按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JSP网站设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。
同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
第2章课程设计内容
2.1需求分析
学生成绩管理系统作为高校校园网建设的一个模块,主要是为了学生在校园网内能了解更多与学生生活相关的信息。
学校在公告网上发布,学生在信息网上查询,方便教师和学生查询学生信息,成绩查询使学生能及时了解自己的成绩以及方便学生选课,同时也方便教师及时作出课程调整等。
学生成绩管理系统可作为一个高校学生获取信息、查询成绩、交流、选课和教务管理的平台。
一直以来学生的成绩管理是学校工作中的一项重要内容,我国的大中专院校的学生成绩管理水平普遍不高。
随着办学规模的扩大和招生人数的增加,建立一个成绩维护系统是非常必要的。
普通的成绩管理已不能适应时代的发展,因为它浪费了许多的人力和物力。
在当今信息时代这种传统的管理方法必然被以计算机为基础的信息管理系统所代替。
该学生成绩管理系统有学生信息管理,成绩信息管理,管理员等功能。
各个模块各有不同的功能,各模块的数据都存放在数据库中。
数据的调用和连接都由程序来完成。
学生成绩信息浏览功能:
学生和管理员都可进行查询和浏览,学生可以按学号查询成绩,管理员可以按班级和专业查询。
这些功能的具体描述如下:
1.用户注册模块:
用户可已成为本论坛的会员,通过表单把用户的相关信息提交给数据库。
2.登录模块:
基本是每个系统必备的模块,本论坛的登录的模块分为两个小模块:
一个是学生登录,另一个是管理员登录。
3.成绩查询模块:
学生可以通过学号查询自己的成绩,也可以查询同班同学的成绩,管理员可以查询所有的成绩。
4.数据库更新前的数据记录模块:
管理员可通过输入要添加成绩的同学的学号、输入要添加成绩的同学的姓名、输入新的数学成绩、输入新的英语成绩、输入新的法律成绩来更新数据记录。
5.添加新记录后的表的模块:
学生可看到管理员更新完记录后的表。
6.删除记录的模块:
管理员通过输入被删除记录的学号来实现删除某学生的成绩记录,同时数据库删除妻啊的数据记录也将显示出来。
7.删除记录后的表的模块:
管理员将表中某个学生删除完之后,将会显示出删除记录后的表。
2.2分析和设计(页面和数据库)
设计网站时,首先应该区别是学生登录还是管理员登录。
如果是学生登录,那么该学生只有查看和回复留言的权限。
如果是管理员登录,则除了具有查看和回复权限外,还用具有管理学生成绩管理网站的权限。
在学生发表留言后,将显示该学生的姓名、性别、留言内容和留言时间等内容。
如果在某个留言有回复内容,则显示出是谁恢复了该篇留言和回复的内容。
另外还能在页面中显示当前的系统的时间和访问权限。
1.数据库设计
通过以上的分析:
我所设计的网站需要1个表,为学生成绩表。
由于是个小型的论坛,选择了sqlserver2000数据库。
具体各表的设计如下:
分析得知student_info表功能的记录学生的信息,具有如下字段:
Sno、Sname、Math、English、Law。
见下表:
表2.1学生成绩表(student_info)
名称
类型
长度
说明
Sno
Char
12
学号
Sname
Char
12
姓名
Math
Int
4
高等数学成绩
English
Int
4
英语成绩
Law
Int
4
法律成绩
2.网站的流程体如下:
学生成绩管理数据流程图如下:
图2.2数据流程图
3.各页面功能实现说明:
(1)各页面功能说明
1)系统登录
实现系统登录的功能(login.jsp),并验证用户输入的信息是否正确。
图2.3所示是系统登录界面图,其中提供了数据输入接口。
当单击“登录”按钮后,则调用loginservlet的post方法,然后查询数据库,验证用户身份,如果是学生,则调用StuSucess.jsp页面,否则调用AdminSucess.jsp页面。
实现过程:
首先用户提交用户名和密码,并选择用户类型,再提交loginservlet的dopost方法进行处理,其中longinservlet中通过下拉框中对应的ID号,确定当前用户类型,再分别调用判断学生信息的方法(checkStuUser)和判断管理员信息方法(checkManUser),来完成不同级别用户登录功能。
启动Tomcat,在地址栏里输入:
http:
//localhost:
8080/http:
//localhost:
8080/SchoolManag
ement/login.jsp(8080为Tomcat的默认端口,可以自行修改)即可看到系统的运行效果,选择不同的用户类型进行登录,如图2.3所示:
图2.3系统登录
核心代码如下:
publicstaticbooleancheckStuUser(Connectionconn,Stringusername,
Stringpassword)throwsException{
StringstrSql;
Statementstmt;
ResultSetrs;
strSql="select*fromstudentinfowhereSno='"+username
+"'andpassword='"+password+"'";
stmt=DB.createStmt(conn);
rs=DB.executeQuery(stmt,strSql);
if(rs.next()){
returntrue;
}else{
returnfalse;
}
}//验证学生信息方法
publicstaticbooleancheckManUser(Connectionconn,Stringusername,
Stringpassword)throwsException{
StringstrSql;
Statementstmt;
ResultSetrs;
strSql="select*fromadministratorwherenumber='"+username
+"'andpassword='"+password+"'";
stmt=DB.createstmt(conn);
rs=DB.executeQuery(stmt,strSql);
if(rs.next()){
returntrue;
}else{
returnfalse;
}
}//验证管理员方法
2)学生成绩查询
对于学生成绩查询模块,由于管理员和学生权限不同,所以学生只能查看个人的各科成绩和同学的各科成绩(如高等数学成绩、英语成绩、法律成绩),而管理员则可以修改所有学生的所有成绩。
当管理员要修改某个学生的成绩时,必须首先找到所要修改的学生成绩信息,再进行学生成绩信息更新操作。
实现过程:
其中学生查看学生成绩查询界面时,都是只读,不能更改。
而对于管理员则可以修改学生的全部成绩信息。
首先用户通过selectGra.jsp提交成绩信息修改表单数据,并响应对应的action:
selectGrade中的doPost方法,获取表单数据,并将学生信息保存在Grade的实例中,最后调用grade类中的selectGra(conn,stu)方法,实现对学生成绩信息的查询操作,如图2.4所示:
图2.4成绩表
代码如下:
<%@pagecontentType="text/html;charset=GB2312"%>
<%@pageimport="java.sql.*"%>
<%!
//声明一个共享的连接对象:
Connectioncon=null;
%>
<%Statementsql=null;
ResultSetrs=null;
Stringdriv="com.microsoft.jdbc.sqlserver.SQLServerDriver";
Stringurl1="jdbc:
microsoft:
sqlserver:
//127.0.0.1:
1433;DatabaseName=tengfei";
//第一个客户负责建立连接对象:
if(con==null)
{try{Class.forName(driv);
}
catch(ClassNotFoundExceptione)
{out.print(e);
}
try{con=DriverManager.getConnection(url1,"sa","");
sql=con.createStatement();
rs=sql.executeQuery("SELECT*FROMCJ");
out.print("成绩表");
}
catch(SQLExceptione)
{out.print(e);
}
}
//其它客户通过同步块使用这个连接:
else
{synchronized(con)
//把共享变量放在synchronized块中,或用synchornized方法来修饰,可以修改synchornized块(方法)来共享一个成员变量
{try{sql=con.createStatement();
rs=sql.executeQuery("SELECT*FROMCJ");
out.print("成绩表");
}
catch(SQLExceptione)
{out.print(e);
}
}
}
try
{out.print("");
out.print("
");out.print(""+"学号");
out.print(""+"姓名");
intphysics=rs.getInt("法律成绩");
out.print("
"+physics+" | ");out.print("
");}
out.print("");
}
catch(SQLExceptione1){}out.print(""+"高等数学成绩");
out.print(""+"英语成绩");
out.print(""+"法律成绩");
out.print("");
while(rs.next())
{out.print("
");Stringnumber=rs.getString
(1);
out.print("
"+number+" | ");Stringname=rs.getString
(2);
out.print("
"+name+" | ");intmath=rs.getInt("高等数学成绩");
out.print("
"+math+" | ");intenglish=rs.getInt("英语成绩");
out.print("
"+english+" | ");%>