Oracle數(shù)據(jù)庫課程設(shè)計(jì)報(bào)告學(xué)生成績管理系統(tǒng).doc
《Oracle數(shù)據(jù)庫課程設(shè)計(jì)報(bào)告學(xué)生成績管理系統(tǒng).doc》由會員分享,可在線閱讀,更多相關(guān)《Oracle數(shù)據(jù)庫課程設(shè)計(jì)報(bào)告學(xué)生成績管理系統(tǒng).doc(34頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
Oracle數(shù)據(jù)庫課程設(shè)計(jì) 題目 學(xué)生考試管理系統(tǒng) 班級 11網(wǎng)工2班 姓名 馬路瑤 學(xué)號 指導(dǎo)老師 楊超峰 目錄 一、 前言…………………………………………………2 二、 需求分析……………………………………………3 三、 系統(tǒng)設(shè)計(jì)……………………………………………5 四、 數(shù)據(jù)庫設(shè)計(jì)…………………………………………7 五、 編程步驟……………………………………………19 六、 測試…………………………………………………25 七、 課程設(shè)計(jì)總結(jié)………………………………………33 八、 參考資料……………………………………………34 九、 附錄…………………………………………………34 一、前言 學(xué)生考試管理是一個(gè)學(xué)校必不可少的部分,隨著計(jì)算機(jī)和計(jì)算機(jī)知識的普及,學(xué)生考試管理系統(tǒng)得到了更大的發(fā)展空間,通過對學(xué)生考試管理系統(tǒng)的開發(fā),可以提高校務(wù)人員的工作效率。 學(xué)生成績管理是一個(gè)學(xué)校不可缺少的部分,一個(gè)良好的學(xué)生成績管理系統(tǒng)應(yīng)該能夠?yàn)橛脩籼峁┏渥愕男畔⒑涂旖莸牟樵兪侄?。學(xué)生考試管理系統(tǒng)對學(xué)校加強(qiáng)學(xué)生考試管理有著極其重要的作用.由于各個(gè)大學(xué)都在持續(xù)擴(kuò)招,學(xué)生的數(shù)量日益龐大,對于如何管理如此龐大的學(xué)生考試數(shù)據(jù)顯得更為復(fù)雜,傳統(tǒng)的手工成績管理不僅工作量大,而且容易出現(xiàn)問題,如:效率低、保密性差,另外時(shí)間一長,將產(chǎn)生大量的文件和數(shù)據(jù),這對于查找、更新和維護(hù)都帶來了不少的困難。已不能適應(yīng)時(shí)代的發(fā)展。 隨著科學(xué)技術(shù)的不斷提高,計(jì)算機(jī)科學(xué)日漸成熟,其強(qiáng)大的功能已為人們深刻認(rèn)識,它已進(jìn)入人類社會的各個(gè)領(lǐng)域并發(fā)揮著越來越重要的作用。 作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對學(xué)生成績信息進(jìn)行管理,具有手工管理所無法比擬的優(yōu)點(diǎn)。例:檢索迅速、查找方便、可靠性高、存儲量大、保密性好、壽命長、成本低等。這些優(yōu)點(diǎn)能夠極大地提高管理者管理的效率,也是學(xué)校走向科學(xué)化、正規(guī)化管理,與世界接軌的重要條件。 因此,開發(fā)設(shè)計(jì)這樣一套學(xué)生成考試?yán)碥浖蔀楹苡斜匾氖虑? 二、需求分析 1.功能需求 1. 學(xué)生基本信息及所選科目成績的錄入或?qū)搿? 2. 基本信息的查詢(分系、班級;分科目)與修改。 3. 對每系或每班各科成績進(jìn)行分析(即求單科平均成績、及格率和優(yōu)秀率); 4. 對所開課程的成績分析(求其平均成績,最高分和最低分); 5. 對學(xué)生考試成績進(jìn)行排名(單科按系別或班級進(jìn)行排名,對每一個(gè)班級,同一學(xué)期學(xué)生總體成績進(jìn)行排名,并顯示各科成績信息) 6. 不及格情況的統(tǒng)計(jì)、導(dǎo)出、打印 2.系統(tǒng)需求 該學(xué)生成績管理系統(tǒng)采用java語言開發(fā)研制, JavaBean作為行為模型,servlet作為響應(yīng)服務(wù)器,DIV+CSS+javascript設(shè)計(jì)網(wǎng)頁,oracle作為數(shù)據(jù)存儲。在完成用戶需求同時(shí),完成條件查詢等功能。 針對學(xué)生成績及其數(shù)據(jù)特點(diǎn),可以全面實(shí)現(xiàn)對學(xué)生成績的插入、查詢、修改、刪除和輸出等功能的計(jì)算機(jī)管理。它能使學(xué)生成績數(shù)據(jù)的工作人員從繁重的工作中解脫出來,大大減輕了工作量,減少人為的工作失誤,全面提高學(xué)生成績管理的效率,從而使學(xué)校對于學(xué)生成績的管理水平和技術(shù)水平躍上一個(gè)新的臺階。 3.系統(tǒng)開發(fā)環(huán)境 1.開發(fā)語言:java+jsp 2.開發(fā)工具: IE 8.0,Tomcat ,jdk 1.7,dreamweaver 3.數(shù)據(jù)庫:Oracle 10g 4.文檔編寫工具:word 5. 服務(wù)器端運(yùn)行環(huán)境:oracle 10g,Tomcat ,jdk 1.7 6. 客戶端運(yùn)行環(huán)境:瀏覽器 三、系統(tǒng)設(shè)計(jì) 1.功能模塊 學(xué)生考試管理系統(tǒng) 信息錄入 信息查詢 信息修改 信息刪除 成績統(tǒng)計(jì)分析 班級信息錄入 科目信息錄入 學(xué)生信息錄入 班級內(nèi)部排名 按學(xué)號查詢 按姓名查詢 學(xué)生信息修改 成績信息修改 學(xué)生信息刪除 成績信息刪除 單科成績排名 單科成績分析 成績信息錄入 不及格情況統(tǒng)計(jì) 學(xué)生總成績排名 2.系統(tǒng)流程圖 開始 登陸 密碼正確? 是 否 進(jìn)入系統(tǒng) 修改密碼 控制面板 退出系統(tǒng)? 結(jié)束 是 否 3.數(shù)據(jù)字典 (1)數(shù)據(jù)存儲 數(shù)據(jù)表:用戶表 表組成:用戶名,密碼 數(shù) 據(jù) 項(xiàng):用戶名 數(shù)據(jù)類型:varchar 數(shù)據(jù)長度:50 數(shù) 據(jù) 項(xiàng):密碼 數(shù)據(jù)類型:varchar 數(shù)據(jù)長度:50 (2) 數(shù)據(jù)流定義: 登陸 名 稱: 登陸 簡 述: 用戶登陸系統(tǒng) 數(shù)據(jù)來源: 用戶 數(shù)據(jù)去向:用戶表 數(shù)據(jù)組成:用戶名+密碼 四、數(shù)據(jù)庫設(shè)計(jì) 1.數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì) 院系表(cs) 字段名 數(shù)據(jù)類型 是否為空 說明 Cs_class Varchar2(50) Not null 班級名(主鍵) Cs_dept Varchar2(50) Not null 系別 Cs_grade Varchar2(50) Not null 年級 成績表(gd) 字段名 數(shù)據(jù)類型 是否為空 說明 Gd_stu_no Varchar2(15) Not null 學(xué)號(聯(lián)合主鍵、外鍵) Gd_sub_subject Varchar2(50) Not null 科目(聯(lián)合主鍵、外鍵) Gd_grade Number(3) Not null 成績 科目表(sub) 字段名 數(shù)據(jù)類型 是否為空 說明 Sub_subject Varchar2(50) Not null 科目名(主鍵) Sub_teacher_name Varchar2(10) 任課老師名 學(xué)生表(student) 字段名 數(shù)據(jù)類型 是否為空 說明 Stu_no Varchar2(15) Not null 學(xué)號(主鍵) Stu_name Varchar2(10) Not null 學(xué)生名 Stu_cs_class Varchar2(50) 班級名(外鍵) Stu_sex Varchar(4) Not null 性別(約束) Stu_birthday Varchar2(50) 出生日期 Stu_phone Varchar2(200) 聯(lián)系電話 用戶表(user_) 字段名 數(shù)據(jù)類型 是否為空 說明 name Varchar2(50) Not null 用戶名(主鍵) Passwd Varchar2(50) notnull 密碼 2.實(shí)體聯(lián)系圖 學(xué)生信息 姓名 出生日期 性別 學(xué)號 聯(lián)系電話 所在班級 成績信息 科目名 學(xué)號 成績 教師用戶 管理 用戶名 密碼 班級信息 班級名 年級 科目信息 科目名 任課老師 系別 管理 管理 管理 3.數(shù)據(jù)庫源代碼 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; end ; / 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; end; / 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_class=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.連接數(shù)據(jù)庫的javabean 由于在本系統(tǒng)的多個(gè)JSP頁面中都需要訪問數(shù)據(jù)庫,因此使用一個(gè)JavaBean來專門完成數(shù)據(jù)庫的連接。把數(shù)據(jù)庫連接封裝在一個(gè)類中,每次需要訪問數(shù)據(jù)庫是只需實(shí)例化這個(gè)類并利用類里面提供的共有方法來完成連接即可。這樣,既可以節(jié)省編碼時(shí)間,也提高了代碼的利用率。 1.1模塊描述 負(fù)責(zé)完成與數(shù)據(jù)庫的連接 1.2.類的設(shè)計(jì)與實(shí)現(xiàn) (1)名稱:jdbc.java (2)功能:負(fù)責(zé)完成與數(shù)據(jù)庫的連接。 1.3構(gòu)造方法設(shè)計(jì) 1.3.1 ① 方法定義:public jdbc() ② IPO圖 輸入:無。 處理:加載驅(qū)動程序,若加載中出現(xiàn)異常,則顯示異常描述信息。 輸出:無。 ③ 程序清單: 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圖 輸入:無。 處理:創(chuàng)建驅(qū)動程序和指定數(shù)據(jù)庫間的連接對象,建立語句對象 輸出:無。 ③ 程序清單: 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 名稱:登陸頁面。 功能:系統(tǒng)登錄頁面,獲取用戶登錄系統(tǒng)時(shí)的用戶名和密碼。 (2)cl-denglu.jsp 名稱:登錄處理頁面。 功能:主要負(fù)責(zé)讀取用戶在登錄頁面輸入的用戶名、密碼,判斷是否為合法用戶。若是合法用戶,則將該用戶的用戶名寫入到session中,并重定向到系統(tǒng)內(nèi)部的功能頁面;否則,重定向到denglu.jsp,阻止該用戶進(jìn)入系統(tǒng)。 輸入:用戶在登錄頁面輸入的信息(用戶名和密碼)。 處理:連接數(shù)據(jù)庫,調(diào)用存儲過程p_denglu,傳入?yún)?shù)name、password,接收存儲過程返回值s_state_values,如果返回值為1則為合法用戶,將該用戶的用戶名寫入到session中,并重定向到系統(tǒng)主頁面index.jsp;否則,彈出錯誤警告用戶名密碼錯誤,重定向到denglu.jsp,阻止該用戶進(jìn)入系統(tǒng)。 輸出:根據(jù)驗(yàn)證結(jié)果重定向到不同頁面。 程序清單: <% 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(""); cstmt1.close(); conn.close(); %> (3)tuichu.jsp 名稱:用戶退出頁面 功能:主要負(fù)責(zé)登錄用戶的退出功能,將退出系統(tǒng)的用戶信息從session中清除掉。 輸入:無。 處理:清楚session中存儲的一切信息 輸出:重定向到登錄也頁面。 程序清單: <% session.invalidate(); response.sendRedirect("denglu.jsp"); %> (4)xg-mm.jsp 名稱:修改密碼頁面 功能:主要負(fù)責(zé)登錄用戶的修改密碼,將用戶密碼傳給cl-xgmm.jsp。 (5)cl-xg-mm.jsp 名稱:處理修改密碼頁面 功能:主要負(fù)責(zé)登錄用戶的修改密碼功能,首先驗(yàn)證兩次輸入的新密碼是否一致,然后調(diào)用存儲過程p_denglu驗(yàn)證原密碼是否正確,最后調(diào)用存儲過程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.模塊描述 提供信息錄入、查詢、修改、刪除、成績統(tǒng)計(jì)分析功能。 3.2.原文件定義 源代碼詳見附件 (1)lr-cs.jsp 名稱:錄入班級信息頁面。 功能:錄入班級信息。 (2)cl-lr-cs.jsp 名稱:處理錄入班級信息頁面。 功能:錄入班級信息。 (3)lr-sub.jsp 名稱:錄入科目信息頁面。 功能:錄入科目信息。 (4)cl-lr-sub.jsp 名稱:處理錄入科目信息頁面。 功能:錄入科目信息。 (5)lr-stu.jsp 名稱:錄入學(xué)生信息頁面。 功能:錄入學(xué)生信息。 (6)cl-lr-stu.jsp 名稱:處理錄入學(xué)生信息頁面。 功能:錄入學(xué)生信息。 (7)lr-gd-sub.jsp 名稱:錄入成績信息選擇科目頁面。 功能:錄入成績信息。 (8)lr-gd.jsp 名稱:錄入成績信息頁面。 功能:錄入成績信息。 (9)cl-lr-stu.jsp 名稱:處理錄入成績信息頁面。 功能:錄入成績信息。 (10)cx-by-no.jsp 名稱:通過學(xué)號查詢信息頁面。 功能:通過學(xué)號查詢信息。 (11) cl-cx-by-no.jsp 名稱:處理通過學(xué)號查詢信息頁面。 功能:通過學(xué)號查詢信息。 (12) cx-by-name.jsp 名稱:通過姓名查詢信息頁面。 功能:通過姓名查詢信息。 (13) cl-cx-by-name.jsp 名稱:處理通過姓名查詢信息頁面。 功能:通過姓名查詢信息。 (14)xg-stu.jsp 名稱:修改學(xué)生信息頁面。 功能:修改學(xué)生信息。 (15)cl-xg-stu.jsp 名稱:處理修改學(xué)生信息頁面。 功能:修改學(xué)生信息。 (16)xg-gd.jsp 名稱:修改成績信息頁面。 功能:修改成績信息。 (17)cl-xg-gd.jsp 名稱:處理修改成績信息頁面。 功能:修改成績信息。 (18)sc-stu.jsp 名稱:刪除學(xué)生信息頁面。 功能:刪除學(xué)生信息。 (19)cl-sc-stu.jsp 名稱:處理刪除學(xué)生信息頁面。 功能:刪除學(xué)生信息。 (20)sc-gd.jsp 名稱:刪除成績信息頁面。 功能:刪除成績信息。 (21)cl-sc-gd.jsp 名稱:處理刪除成績信息頁面。 功能:刪除成績信息。 (22)pm-sum.jsp 名稱:學(xué)生總成績排名頁面。 功能:顯示學(xué)生總成績排名。 (23)pm-sub.jsp 名稱:學(xué)生單科成績排名頁面。 功能:選擇科目。 (24)cl-pm-sub.jsp 名稱:顯示學(xué)生單科成績排名頁面。 功能:顯示學(xué)生單科成績排名。 (25)pm-class.jsp 名稱:班級內(nèi)部排名頁面。 功能:選擇班級。 (26)cl-pm-sub.jsp 名稱:顯示班級內(nèi)部排名頁面。 功能:顯示班級內(nèi)部排名。 (27)cl-fx.jsp 名稱:單科成績頁面。 功能:顯示單科成績分析。 (28)bujigetj.jsp 名稱:不及格情況統(tǒng)計(jì)頁面。 功能:顯示不及格情況。 六、測試 1.登陸界面 2.系統(tǒng)主界面 3.修改密碼 4.退出系統(tǒng) 5.錄入信息 6.錄入成績信息 7.成績信息錄入 8.按學(xué)號查詢 9.查詢結(jié)果 10.學(xué)生總成績排名 11.按單科成績排名 12.按單科成績排名 13.班級內(nèi)部排名 14.單科成績分析 15.不及格情況統(tǒng)計(jì) 七、課程設(shè)計(jì)總結(jié) 雖然只是很小很簡單的系統(tǒng),但是不僅僅是對這階段學(xué)習(xí)的知識的一個(gè)鞏固,對項(xiàng)目的開發(fā)又多增了一層了解和領(lǐng)悟。 經(jīng)過這次課程設(shè)計(jì)的鍛煉,我對數(shù)據(jù)庫存儲過程、觸發(fā)器、PL/SQL編程掌握的更加牢固,對oracle10g的體系結(jié)構(gòu)有了更深的理解,對sql語句進(jìn)行了一次復(fù)習(xí),對jsp學(xué)習(xí)也有很大提升,受益匪淺。 在這次課程設(shè)計(jì)中,我也發(fā)現(xiàn)了許多不足之處: 1. 前期的準(zhǔn)備還不足,需求分析不完善,這就導(dǎo)致了在項(xiàng)目開發(fā)過程中還出現(xiàn)了功能反復(fù)修改的情況。 2. 數(shù)據(jù)庫設(shè)計(jì)不夠完善,沒多方面的考慮完善,導(dǎo)致在編碼過程中還多次的修改數(shù)據(jù)庫。 3. 整體項(xiàng)目框架沒規(guī)劃好,項(xiàng)目的前期就應(yīng)該把項(xiàng)目的整體框架和包類,列出和規(guī)范分類,這樣能使在其后編碼階段統(tǒng)一的模塊化的編碼,也能給整合項(xiàng)目的時(shí)候節(jié)省時(shí)間。 4. 數(shù)據(jù)庫文字編碼和項(xiàng)目開發(fā)工具文字編碼不一致,導(dǎo)致中期測試時(shí)輸入數(shù)據(jù)庫的中文數(shù)據(jù)變成亂碼,經(jīng)老師指導(dǎo)統(tǒng)一改為utf-8后解決 5. 系統(tǒng)還存在許多問題,如界面不夠友好,美化不好,不符合軟件工程的要求等 最后感謝老師對我的指導(dǎo)和建議,在實(shí)訓(xùn)期間我遇到了許多困難,老師總是很認(rèn)真的為我解答,通過老師的細(xì)心指導(dǎo)使我們在數(shù)據(jù)庫設(shè)計(jì)方面的知識得到了擴(kuò)充,懂得了許多以前不知道的知識,我也在老師的細(xì)心指導(dǎo)中體會到了老師對學(xué)生那種從內(nèi)心發(fā)出的關(guān)愛,讓我非常感動。在本次課程設(shè)計(jì)中,我有幸得到了劉老師的細(xì)心指導(dǎo),使我學(xué)習(xí)到了許多專業(yè)知識及數(shù)據(jù)庫設(shè)計(jì)方面的寶貴經(jīng)驗(yàn)。通過本次課程設(shè)計(jì),我從指導(dǎo)老師身上學(xué)到了很多東西,老師認(rèn)真負(fù)責(zé)的工作態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)的精神和深厚的理論水平都使我收益匪淺,并給我留下了深刻的印象。老師在整個(gè)設(shè)計(jì)過程中,幫助我解決了不少的難題,給予了我巨大的幫助和鼓勵,并細(xì)心的為我介紹在數(shù)據(jù)庫設(shè)計(jì)方面的知識,這使我得到不少的長進(jìn),這對于我以后的工作和學(xué)習(xí)都起著巨大的影響。 八、參考資料 1.oracle10g數(shù)據(jù)庫管理應(yīng)用與開發(fā) 清華大學(xué)出版社 2.jsp使用教程(第二版) 清華大學(xué)出版社 3.java程序設(shè)計(jì)基礎(chǔ)教程 清華大學(xué)出版社 4.數(shù)據(jù)庫原理及應(yīng)用 河南科學(xué)技術(shù)出版社 5.網(wǎng)頁設(shè)計(jì)基礎(chǔ)教程 北京郵電大學(xué)出版社 6.網(wǎng)絡(luò)資料 九、附錄 1.數(shù)據(jù)庫源代碼 2.jsp頁面源代碼- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- Oracle 數(shù)據(jù)庫 課程設(shè)計(jì) 報(bào)告 學(xué)生 成績管理系統(tǒng)
鏈接地址:http://m.appdesigncorp.com/p-6522853.html