学生考试管理系统-Oracle数据库课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle数据库课程设计
题目学生考试管理系统
班级
姓名
学号
指导老师
目录
一、前言 (2)
二、需求分析 (3)
三、系统设计 (5)
四、数据库设计 (7)
五、编程步骤 (19)
六、测试 (25)
七、课程设计总结 (33)
八、参考资料 (34)
九、附录 (34)
一、前言
学生考试管理是一个学校必不可少的部分,随着计算机和计算机知识的普及,学生考试管理系统得到了更大的发展空间,通过对学生考试管理系统的开发,可以提高校务人员的工作效率。

学生成绩管理是一个学校不可缺少的部分,一个良好的学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段。

学生考试管理系统对学校加强学生考试管理有着极其重要的作用.由于各个大学都在持续扩招,学生的数量日益庞大,对于如何管理如此庞大的学生考试数据显得更为复杂,传统的手工成绩管理不仅工作量大,而且容易出现问题,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。

已不能适应时代的发展。

随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。

作为计算机应用的一部分,使用计算机对学生成绩信息进行管理,具有手工管理所无法比拟的优点。

例:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。

这些优点能够极大地提高管理者管理的效率,也是学校走向科学化、正规化管理,与世界接轨的重要条件。

因此,开发设计这样一套学生成考试理软件成为很有必要的事情.
二、需求分析
1.功能需求
1.学生基本信息及所选科目成绩的录入或导入。

2.基本信息的查询(分系、班级;分科目)与修改。

3.对每系或每班各科成绩进行分析(即求单科平均成绩、及格率和优秀率);
4.对所开课程的成绩分析(求其平均成绩,最高分和最低分);
5.对学生考试成绩进行排名(单科按系别或班级进行排名,对每一个班级,同一学期学生总体
成绩进行排名,并显示各科成绩信息)
6.不及格情况的统计、导出、打印
2.系统需求
该学生成绩管理系统采用java语言开发研制,JavaBean作为行为模型,servlet作为响应服务器,DIV+CSS+javascript设计网页,oracle作为数据存储。

在完成用户需求同时,完成条件查询等功能。

针对学生成绩及其数据特点,可以全面实现对学生成绩的插入、查询、修改、删除和输出等功能的计算机管理。

它能使学生成绩数据的工作人员从繁重的工作中解脱出来,大大减轻了工作量,减少人为的工作失误,全面提高学生成绩管理的效率,从而使学校对于学生成绩的管理水平和技术水平跃上一个新的台阶。

3.系统开发环境
1.开发语言:java+jsp
2.开发工具:IE 8.0,Tomcat ,jdk 1.7,dreamweaver
3.数据库:Oracle 10g
4.文档编写工具:word
5. 服务器端运行环境:oracle 10g,Tomcat ,jdk 1.7
6. 客户端运行环境:浏览器
三、系统设计
1.功能模块
2.系统流程图
3.数据字典(1)数据存储
数据表:用户表
表组成:用户名,密码
数据项:用户名
数据类型:varchar
数据长度:50
数据项:密码
数据类型:varchar
数据长度:50
(2) 数据流定义:
登陆
名称:登陆
简述:用户登陆系统
数据来源:用户
数据去向:用户表
数据组成:用户名+密码
四、数据库设计
1.数据库结构设计
院系表(cs)
2.实体联系图
3.数据库源代码
select userenv('language') from dual;
shutdown immediate
startup mount
ALTER SYSTEM ENABLE RESTRICTED SESSION; ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; ALTER SYSTEM SET AQ_TM_PROCESSES=0; ALTER DATABASE OPEN;
alter database character set INTERNAL_USE UTF8; shutdown immediate
startup
create user xz105151640043 identified by xz
/
grant dba to xz
/
conn xz105151640043/xz
/
set serveroutput on
/
create table user_(name varchar(50) primary key,passwd varchar(50) not null) /
insert into user_ values('xz','xz');
/
Commit
/
create table cs(
cs_class varchar(50) primary key,
cs_dept varchar(50) not null,
cs_grade varchar(50) not null
)
/
create table student(
stu_no varchar(15) primary key,
stu_name varchar(10) not null,
stu_sex varchar(4) not null check (stu_sex='男'or stu_sex='女'),
stu_birthday varchar(50) ,
stu_phone varchar(50),
stu_cs_class varchar(50),
constraint class_fk foreign key(stu_cs_class) references cs(cs_class)
on delete cascade
)
/
create table sub(
sub_subject varchar(50) primary key,
sub_teacher_name varchar(10)
)
/
create table gd(
gd_stu_no varchar(15),
gd_sub_subject varchar(50),
gd_grade number(3) not null,
primary key(gd_stu_no,gd_sub_subject),
constraint fk_gd_stu_no foreign key(gd_stu_no) references student(stu_no),
constraint fk_gd_sub_subject foreign key(gd_sub_subject) references sub(sub_subject)
)
/
create or replace procedure p_insert_stu(
p_stu_no in student.stu_no%type,
p_stu_name in student.stu_name%type,
p_stu_sex in student.stu_sex%type,
p_stu_birthday in student.stu_birthday%type,
p_stu_phone in student.stu_phone%type,
p_stu_cs_class in student.stu_cs_class%type,
s_state_values out number
) as
begin
insert into student (stu_no,stu_name,stu_sex ,stu_birthday,stu_phone,stu_cs_class)
values (p_stu_no,p_stu_name,p_stu_sex,p_stu_birthday,p_stu_phone,p_stu_cs_class); if sql%rowcount=1
then s_state_values:=0;
end if;
exception
when others then s_state_values:=1;
commit;
end ;
/
create or replace procedure c_insert_stu(
c_stu_no in student.stu_no%type,
c_state_values out number)
as
begin
select count(*) into c_state_values from student
where stu_no=c_stu_no;
end ;
/
create or replace procedure c_insert_stu_fk(
c_cs_class in cs.cs_class%type,
c_state_values_fk out number)
as
begin
select count(*) into c_state_values_fk from cs
where cs_class=c_cs_class;
/
create or replace procedure p_insert_cs(
p_cs_dept in cs.cs_dept%type,
p_cs_grade in cs.cs_grade%type,
p_cs_class in cs.cs_class%type,
s_state_values out number)
as
begin
insert into cs(cs_dept,cs_grade,cs_class)
values(p_cs_dept, p_cs_grade, p_cs_class);
if sql%rowcount=1
then s_state_values:=0;
end if;
exception
when others then s_state_values:=1;
commit;
end ;
/
create or replace procedure c_insert_cs(
c_cs_class in cs.cs_class%type,
c_state_values out number)
as
begin
select count(*) into c_state_values from cs
where cs_class=c_cs_class;
end ;
/
create or replace procedure p_insert_sub(
p_sub_subject in sub.sub_subject%type,
p_sub_teacher_name in sub.sub_teacher_name%type, s_state_values out number)
as
begin
insert into sub(sub_subject,sub_teacher_name) values(p_sub_subject, p_sub_teacher_name);
if sql%rowcount=1
then s_state_values:=0;
end if;
exception
when others then s_state_values:=1;
commit;
/
create or replace procedure c_insert_sub(
c_sub_subject in sub.sub_subject%type,
c_state_values out number)
as
begin
select count(*) into c_state_values from sub
where sub_subject=c_sub_subject;
end ;
/
create or replace procedure p_insert_gd(
p_gd_stu_no in gd.gd_stu_no%type,
p_gd_sub_subject in gd.gd_sub_subject%type,
p_gd_grade in gd.gd_grade%type,
s_state_values out number)
as
begin
insert into gd(gd_stu_no,gd_sub_subject,gd_grade) values(p_gd_stu_no,p_gd_sub_subject,p_gd_grade); if sql%rowcount=1
then s_state_values:=0;
end if;
exception
when others then s_state_values:=1;
if p_gd_grade=null
then s_state_values:=2;
end if;
commit;
end ;
/
create or replace procedure c_insert_gd(
p_gd_stu_no in gd.gd_stu_no%type,
p_gd_sub_subject in gd.gd_sub_subject%type,
c_state_values out number)
as
begin
select count(*) into c_state_values from (
select gd_stu_no from gd
where gd_sub_subject=p_gd_sub_subject
)
where gd_stu_no=p_gd_stu_no;
end ;
/
create or replace procedure c_insert_gd_fk1(
c_stu_no in student.stu_no%type,
c_state_values_fk1 out number)
as
begin
select count(*) into c_state_values_fk1 from student
where stu_no=c_stu_no;
end ;
/
create or replace procedure c_insert_gd_fk2(
c_sub_subject in sub.sub_subject%type,
c_state_values_fk2 out number)
as
begin
select count(*) into c_state_values_fk2 from sub
where sub_subject=c_sub_subject;
end ;
/
create or replace procedure p_select_stu_no_info(
p_stu_no in out student.stu_no%type,
p_stu_name out student.stu_name%type,
p_stu_sex out student.stu_sex%type,
p_stu_birthday out student.stu_birthday%type,
p_stu_phone out student.stu_phone%type,
p_stu_cs_class out student.stu_cs_class%type,
p_cs_dept out cs.cs_dept%type,
p_cs_grade out cs.cs_grade%type,
c_state_values out number)
as
begin
c_state_values:=0;
select stu_no, stu_name,stu_sex ,stu_birthday ,stu_phone ,stu_cs_class ,cs_dept ,cs_grade
into p_stu_no, p_stu_name, p_stu_sex, p_stu_birthday, p_stu_phone, p_stu_cs_class, p_cs_dept, p_cs_grade
from student, cs
where stu_cs_class=cs_class and stu_no=p_stu_no;
exception
when NO_DATA_FOUND then c_state_values:=1;
when others then c_state_values:=2;
end ;
/
create or replace procedure p_select_stu_no_gd(p_stu_no in student.stu_no%type , cursor_gd out sys_refcursor)
as
begin
open cursor_gd for
select gd_sub_subject,gd_grade
from gd
where gd_stu_no=p_stu_no;
end;
/
create or replace procedure p_select_stu_name(
p_stu_name in student.stu_name%type ,
cursor_stu out sys_refcursor,
c_state_values out number)
as
begin
c_state_values:=0;
open cursor_stu for
select stu_no, stu_name,stu_sex ,stu_birthday ,stu_phone ,stu_cs_class ,cs_dept ,cs_grade
from student, cs
where stu_name=p_stu_name and stu_cs_class=cs_class;
exception
when others then c_state_values:=2;
end;
/
create or replace procedure p_pm_sum(
cursor_gd_sum out sys_refcursor
)
as
begin
open cursor_gd_sum for
select distinct sno,stu_name,sum
from student,(select gd_stu_no as sno,sum(gd_grade) as sum
from gd
group by gd_stu_no
)
where stu_no=sno
order by sum desc;
end;
/
create or replace procedure p_pm_sub(
p_gd_sub_subject in gd.gd_sub_subject%type,
cursor_gd_sub out sys_refcursor
)
as
begin
open cursor_gd_sub for
select gd_stu_no,stu_name,gd_grade
from gd,student
where gd_sub_subject=p_gd_sub_subject and stu_no=gd_stu_no
order by gd_grade desc;
end;
/
create or replace procedure p_pm_class(
p_stu_cs_class in student.stu_cs_class%type,
cursor_gd_class out sys_refcursor
)
as
begin
open cursor_gd_class for
select distinct sno,stu_name,sum
from student,(select gd_stu_no as sno,sum(gd_grade) as sum
from gd
group by gd_stu_no
)
where stu_no=sno and stu_cs_class=p_stu_cs_class
order by sum desc;
end;
/
create or replace procedure p_fx(
cursor_fx out sys_refcursor
)
as
begin
open cursor_fx for
select gd_sub_subject,max(gd_grade) as zuigao,min(gd_grade) as zuidi,avg(gd_grade) as pingjun,SUM(CASE WHEN gd_grade>=60 THEN 1 ELSE 0 END)/COUNT(*)*100 AS jigelv,
SUM(CASE WHEN gd_grade>=80 THEN 1 ELSE 0 END)/COUNT(*)*100 AS youxiulv
from gd
group by gd_sub_subject;
end;
/
create or replace procedure p_bujige(
cursor_bujige out sys_refcursor
)
as
begin
open cursor_bujige for
select gd_stu_no,gd_sub_subject,gd_grade
from gd
where gd_grade<60;
end;
/
create or replace procedure p_update_stu(
p_stu_no in student.stu_no%type,
p_stu_name in student.stu_name%type,
p_stu_sex in student.stu_sex%type,
p_stu_birthday in student.stu_birthday%type,
p_stu_phone in student.stu_phone%type,
p_stu_cs_class in student.stu_cs_class%type,
s_state_values out number
) as
begin
update student
set
stu_name=p_stu_name,stu_sex=p_stu_sex,stu_birthday=p_stu_birthday,stu_phone=p_stu_phone,stu_cs_cl ass=p_stu_cs_class
where stu_no=p_stu_no;
if sql%rowcount=1
then s_state_values:=0;
end if;
exception
when others then s_state_values:=1;
commit;
end ;
/
create or replace procedure p_delete_stu(
p_stu_no in student.stu_no%type,
s_state_values out number)
as
begin
delete from gd where gd_stu_no=p_stu_no;
delete from student where stu_no=p_stu_no;
s_state_values:=0;
exception
when others then s_state_values:=1;rollback;
commit;
end;
/
create or replace procedure p_update_gd(
p_gd_stu_no in gd.gd_stu_no%type,
p_gd_sub_subject in gd.gd_sub_subject%type,
p_gd_grade in gd.gd_grade%type,
s_state_values out number)
as
begin
update gd
set gd_stu_no=p_gd_stu_no,gd_sub_subject=p_gd_sub_subject,gd_grade=p_gd_grade where gd_stu_no=p_gd_stu_no and gd_sub_subject=p_gd_sub_subject;
if sql%rowcount=1
then s_state_values:=0;
end if;
exception
when others then s_state_values:=1;rollback;
commit;
end ;
/
create or replace procedure p_delete_gd(
p_gd_stu_no in gd.gd_stu_no%type,
p_gd_sub_subject in gd.gd_sub_subject%type,
s_state_values out number)
as
begin
delete from gd
where gd_stu_no=p_gd_stu_no and gd_sub_subject=p_gd_sub_subject;
if sql%rowcount=1
then s_state_values:=0;
end if;
exception
when others then s_state_values:=1;rollback;
commit;
end ;
/
create or replace procedure p_denglu(
p_name in user_.name%type,
p_passwd in user_.passwd%type,
s_state_values out number
)
as
begin
select count(*) into s_state_values
from user_
where name=p_name and passwd=p_passwd;
end;
/
create or replace procedure p_update_passwd(
p_name in user_.name%type,
p_passwd in user_.passwd%type,
s_state_values out number
)
as
begin
update user_
set passwd= p_passwd
where name=p_name;
if sql%rowcount=1
then s_state_values:=0;
end if;
exception
when others then s_state_values:=1;rollback;
commit;
end;
/
create or replace procedure p_select_no(
cursor_stu_no out sys_refcursor
)
as
begin
open cursor_stu_no for
select stu_no
from student
order by stu_no;
end;
/
create or replace procedure p_select_all(
cursor_all out sys_refcursor
)
as
begin
open cursor_all for
select stu_no, stu_name,stu_sex ,stu_birthday ,stu_phone ,stu_cs_class ,cs_dept ,cs_grade from student, cs
where stu_cs_class=cs_class
order by stu_no;
end;
/
create or replace procedure p_select_count(
myrowcount out number
)
as
begin
select count(*) into myrowcount
from student;
end;
/
五、编程步骤
1.连接数据库的javabean
由于在本系统的多个JSP页面中都需要访问数据库,因此使用一个JavaBean来专门完成数据库的连接。

把数据库连接封装在一个类中,每次需要访问数据库是只需实例化这个类并利用类里面提供的共有方法来完成连接即可。

这样,既可以节省编码时间,也提高了代码的利用率。

1.1模块描述
负责完成与数据库的连接
1.2.类的设计与实现
(1)名称:jdbc.java
(2)功能:负责完成与数据库的连接。

1.3构造方法设计
1.3.1
①方法定义:public jdbc()
② IPO图
输入:无。

处理:加载驱动程序,若加载中出现异常,则显示异常描述信息。

输出:无。

③程序清单:
public class jdbc {
private static final String DB_NAME= "xz105151640043";
private static final String DB_PASSWORD="xz";
private static final String DB_URL = "jdbc:oracle:thin:@localhost:1521:orcl";
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.out.println("class not found!!");
}
}
1.3.2
①方法定义:public getConnection()
② IPO图
输入:无。

处理:创建驱动程序和指定数据库间的连接对象,建立语句对象
输出:无。

③程序清单:
public static Connection getConnection(){
try {
return DriverManager.getConnection(DB_URL, DB_NAME, DB_PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
2.登陆模块
2.1.模块描述
提供用户登录、退出、修改密码功能。

2.2.原文件定义
(1)denglu.jsp
名称:登陆页面。

功能:系统登录页面,获取用户登录系统时的用户名和密码。

(2)cl-denglu.jsp
名称:登录处理页面。

功能:主要负责读取用户在登录页面输入的用户名、密码,判断是否为合法用户。

若是合法用户,则将该用户的用户名写入到session中,并重定向到系统内部的功能页面;否则,重定向到denglu.jsp,阻止该用户进入系统。

输入:用户在登录页面输入的信息(用户名和密码)。

处理:连接数据库,调用存储过程p_denglu,传入参数name、password,接收存储过程返回值s_state_values,如果返回值为1则为合法用户,将该用户的用户名写入到session中,并重定向到系统主页面index.jsp;否则,弹出错误警告用户名密码错误,重定向到denglu.jsp,阻止该用户进入系统。

输出:根据验证结果重定向到不同页面。

程序清单:
<%
Connection conn = jdbc.getConnection();
String j_name=request.getParameter("j_name");
String j_passwd=request.getParameter("j_passwd");
CallableStatement cstmt1 = conn.prepareCall("{call p_denglu(?,?,?)}");
cstmt1.setString(1,j_name);
cstmt1.setString(2,j_passwd);
cstmt1.registerOutParameter(3,java.sql.Types.INTEGER);
cstmt1.execute();
int s_state_values=(cstmt1.getInt(3));
if(s_state_values==1)
{
session.setAttribute("user_name",j_name);
response.sendRedirect("index.jsp");
}
else if(s_state_values==0)
out.println("<script>alert(\"用户名密码错误!\");location.href=\"denglu.jsp\"</script>");
cstmt1.close();
conn.close();
%>
(3)tuichu.jsp
名称:用户退出页面
功能:主要负责登录用户的退出功能,将退出系统的用户信息从session中清除掉。

输入:无。

处理:清楚session中存储的一切信息
输出:重定向到登录也页面。

程序清单:
<%
session.invalidate();
response.sendRedirect("denglu.jsp");
%>
(4)xg-mm.jsp
名称:修改密码页面
功能:主要负责登录用户的修改密码,将用户密码传给cl-xgmm.jsp。

(5)cl-xg-mm.jsp
名称:处理修改密码页面
功能:主要负责登录用户的修改密码功能,首先验证两次输入的新密码是否一致,然后调用存储过程p_denglu验证原密码是否正确,最后调用存储过程p_update_passwd修改密码。

程序清单:
<%
Connection conn = jdbc.getConnection();
String j_name=request.getParameter("j_name");
String j_passwd=request.getParameter("j_passwd");
String j_passwd_new1=request.getParameter("j_passwd_new1");
String j_passwd_new2=request.getParameter("j_passwd_new2");
if(j_passwd_new1.equals(j_passwd_new2))
{
CallableStatement cstmt1 = conn.prepareCall("{call p_denglu(?,?,?)}");
cstmt1.setString(1,j_name);
cstmt1.setString(2,j_passwd);
cstmt1.registerOutParameter(3,java.sql.Types.INTEGER);
cstmt1.execute();
int s_state_values=(cstmt1.getInt(3));
if(s_state_values==1)
{
CallableStatement cstmt2 = conn.prepareCall("{call p_update_passwd(?,?,?)}");
cstmt2.setString(1,j_name);
cstmt2.setString(2,j_passwd_new1);
cstmt2.registerOutParameter(3,java.sql.Types.INTEGER);
cstmt2.execute();
int s_state_values2=(cstmt2.getInt(3));
if (s_state_values2==0)
{out.print("恭喜你,密码修改成功!");
}
else
{out.print("密码修改失败!");
}
}
else if(s_state_values==0)
out.print(" 原名密码错误!请重新填写");
cstmt1.close();
cstmt2.close();
conn.close();
}
else
{
out.print("两次输入的密码不一致,请重新输入!");
}
%>
3.控制面板模块
3.1.模块描述
提供信息录入、查询、修改、删除、成绩统计分析功能。

3.2.原文件定义
源代码详见附件
(1)lr-cs.jsp
名称:录入班级信息页面。

功能:录入班级信息。

(2)cl-lr-cs.jsp
名称:处理录入班级信息页面。

功能:录入班级信息。

(3)lr-sub.jsp
名称:录入科目信息页面。

功能:录入科目信息。

(4)cl-lr-sub.jsp
名称:处理录入科目信息页面。

功能:录入科目信息。

(5)lr-stu.jsp
名称:录入学生信息页面。

功能:录入学生信息。

(6)cl-lr-stu.jsp
名称:处理录入学生信息页面。

功能:录入学生信息。

(7)lr-gd-sub.jsp
名称:录入成绩信息选择科目页面。

功能:录入成绩信息。

(8)lr-gd.jsp
名称:录入成绩信息页面。

功能:录入成绩信息。

(9)cl-lr-stu.jsp
名称:处理录入成绩信息页面。

功能:录入成绩信息。

(10)cx-by-no.jsp
名称:通过学号查询信息页面。

功能:通过学号查询信息。

(11) cl-cx-by-no.jsp
名称:处理通过学号查询信息页面。

功能:通过学号查询信息。

(12) cx-by-name.jsp
名称:通过姓名查询信息页面。

功能:通过姓名查询信息。

(13) cl-cx-by-name.jsp
名称:处理通过姓名查询信息页面。

功能:通过姓名查询信息。

(14)xg-stu.jsp
名称:修改学生信息页面。

功能:修改学生信息。

(15)cl-xg-stu.jsp
名称:处理修改学生信息页面。

功能:修改学生信息。

(16)xg-gd.jsp
名称:修改成绩信息页面。

功能:修改成绩信息。

(17)cl-xg-gd.jsp
名称:处理修改成绩信息页面。

功能:修改成绩信息。

(18)sc-stu.jsp
名称:删除学生信息页面。

功能:删除学生信息。

(19)cl-sc-stu.jsp
名称:处理删除学生信息页面。

功能:删除学生信息。

(20)sc-gd.jsp
名称:删除成绩信息页面。

功能:删除成绩信息。

(21)cl-sc-gd.jsp
名称:处理删除成绩信息页面。

功能:删除成绩信息。

(22)pm-sum.jsp
名称:学生总成绩排名页面。

功能:显示学生总成绩排名。

(23)pm-sub.jsp
名称:学生单科成绩排名页面。

功能:选择科目。

(24)cl-pm-sub.jsp
名称:显示学生单科成绩排名页面。

功能:显示学生单科成绩排名。

(25)pm-class.jsp
名称:班级内部排名页面。

功能:选择班级。

(26)cl-pm-sub.jsp
名称:显示班级内部排名页面。

功能:显示班级内部排名。

(27)cl-fx.jsp
名称:单科成绩页面。

功能:显示单科成绩分析。

(28)bujigetj.jsp
名称:不及格情况统计页面。

功能:显示不及格情况。

六、测试
1.登陆界面
2.系统主界面
3.修改密码
4.退出系统
5.录入信息
6.录入成绩信息
7.成绩信息录入
8.按学号查询
9.查询结果
10.学生总成绩排名
11.按单科成绩排名
12.按单科成绩排名
13.班级内部排名
14.单科成绩分析
15.不及格情况统计
七、课程设计总结
虽然只是很小很简单的系统,但是不仅仅是对这阶段学习的知识的一个巩固,对项目的开发又多增了一层了解和领悟。

经过这次课程设计的锻炼,我对数据库存储过程、触发器、PL/SQL编程掌握的更加牢固,对oracle10g的体系结构有了更深的理解,对sql语句进行了一次复习,对jsp学习也有很大提升,受益匪浅。

在这次课程设计中,我也发现了许多不足之处:
1.前期的准备还不足,需求分析不完善,这就导致了在项目开发过程中还出现了功能反复修
改的情况。

2.数据库设计不够完善,没多方面的考虑完善,导致在编码过程中还多次的修改数据库。

3.整体项目框架没规划好,项目的前期就应该把项目的整体框架和包类,列出和规范分类,
这样能使在其后编码阶段统一的模块化的编码,也能给整合项目的时候节省时间。

4.数据库文字编码和项目开发工具文字编码不一致,导致中期测试时输入数据库的中文数据
变成乱码,经老师指导统一改为utf-8后解决
5.系统还存在许多问题,如界面不够友好,美化不好,不符合软件工程的要求等
最后感谢老师对我的指导和建议,在实训期间我遇到了许多困难,老师总是很认真的为我解答,通过老师的细心指导使我们在数据库设计方面的知识得到了扩充,懂得了许多以前不知道的知识,我也在老师的细心指导中体会到了老师对学生那种从内心发出的关爱,让我非常感动。

在本次课程设计中,我有幸得到了刘老师的细心指导,使我学习到了许多专业知识及数据库设计方面的宝贵经验。

通过本次课程设计,我从指导老师身上学到了很多东西,老师认真负责的工作态度,严谨的治学的精神和深厚的理论水平都使我收益匪浅,并给我留下了深刻的印象。

老师在整个设计过程中,帮助我解决了不少的难题,给予了我巨大的帮助和鼓励,并细心的为我介绍在数据库设计方面的知识,这使我得到不少的长进,这对于我以后的工作和学习都起着巨大的影响。

八、参考资料
1.oracle10g数据库管理应用与开发清华大学出版社
2.jsp使用教程(第二版)清华大学出版社
3.java程序设计基础教程清华大学出版社
4.数据库原理及应用河南科学技术出版社
5.网页设计基础教程北京邮电大学出版社
6.网络资料
九、附录
1.数据库源代码
2.jsp页面源代码。

相关文档
最新文档