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