实验十九Oracle数据库系统开发实例-学生成绩管理系统
实验十九Oracle数据库系统开发实例-学生成绩管理系统

实验十九Oracle数据库系统开发实例-学生成绩管理系统【一】实验目的1.掌握采用开发Oracle数据库系统的方法;2.掌握开发C/S模式的数据库系统的方法。
【二】实验内容利用SQL Developer,在scott用户下创建6张表:student、teacher、course、allocate、score和users表,如表19-1至19-7所示。
表19-1 users表结构表19-2 users表的数据表19-3 student表的结构表19-4 teacher表的结构表19-5 course表的结构表19-6 allocate表的结构表19-7 score表的结构一、系统功能1.实现学生基本数据的编辑和相关查询。
2.实现教师基本数据的编辑和相关查询。
3.实现课程基本数据的编辑和相关查询。
4.实现各课程任课教师安排和相关查询。
5.实现学生成绩数据的编辑和相关查询。
6.实现用户管理和控制功能。
二、系统结构本系统对应的项目为“学生成绩管理系统.sln”,共有20个窗体和1个公共模块。
本项目的启动窗体为pass,该窗体提示用户输入相应的用户名/密码,并判断是否为合法用户。
如果是非法用户(用户名/密码输入错误),则提示用户再次输入用户名/密码,若用户非法输入3次,便自动退出系统运行。
如果是合法用户,则调用main多文档窗体启动相应的菜单,用户通过该系统菜单执行相应的操作。
系统结构图,如图19-1所示。
main窗体学生数据管理menu13_Click过程系统维护setuser窗体setuser1窗体pass窗体editstudent窗体editstudent1窗体querystudent窗体教师数据管理editteacher窗体editteacher1窗体queryteacher窗体课程数据管理editcourse窗体editcourse1窗体querycourse窗体成绩数据管理editscore窗体queryscore窗体课程安排管理allocatecourse窗体allocatecourse1窗体queryallocate窗体menu62_Click过程2.pass窗体pass窗体用于接受用户的用户名/密码输入,判断是否为合法用户。
学生成绩管理系统

Oracle数据库课程设计题目学生成绩管理系统班级计网络12001班成员:1.功能模块2.系统流程图3.数据字典(1)数据存储数据表:用户表表组成:用户名,密码数据项:用户名数据类型:varchar数据长度:50数据项:密码数据类型:varchar数据长度:50(2) 数据流定义:登陆名称:登陆简述:用户登陆系统数据来源:用户数据去向:用户表数据组成:用户名+密码四、数据库设计1.数据库结构设计院系表(cs)2.实体联系图3.数据库源代码select userenv('language') from dual;shutdown immediatestartup mountALTER 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 immediatestartupcreate user sr12111200128 identified by sr/grant dba to sr/conn sr12111200128/sr/set serveroutput on/create table user_(name varchar(50) primary key,passwd varchar(50) not null) /insert into user_ values('sr','sr');/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) asbegininsert 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=1then s_state_values:=0;end if;exceptionwhen 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)asbeginselect count(*) into c_state_values from studentwhere 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)asbeginselect count(*) into c_state_values_fk from cswhere 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)asbegininsert into cs(cs_dept,cs_grade,cs_class)values(p_cs_dept, p_cs_grade, p_cs_class);if sql%rowcount=1then s_state_values:=0;end if;exceptionwhen 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)asbeginselect count(*) into c_state_values from cswhere 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)asbegininsert into sub(sub_subject,sub_teacher_name) values(p_sub_subject, p_sub_teacher_name);if sql%rowcount=1then s_state_values:=0;end if;exceptionwhen 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)asbeginselect count(*) into c_state_values from subwhere 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)asbegininsert 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=1then s_state_values:=0;end if;exceptionwhen others then s_state_values:=1;if p_gd_grade=nullthen 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)asbeginselect count(*) into c_state_values from (select gd_stu_no from gdwhere 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)asbeginselect count(*) into c_state_values_fk1 from studentwhere 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)asbeginselect count(*) into c_state_values_fk2 from subwhere 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)asbeginc_state_values:=0;select stu_no, stu_name,stu_sex ,stu_birthday ,stu_phone ,stu_cs_class ,cs_dept ,cs_gradeinto p_stu_no, p_stu_name, p_stu_sex, p_stu_birthday, p_stu_phone, p_stu_cs_class, p_cs_dept, p_cs_gradefrom student, cswhere stu_cs_class=cs_class and stu_no=p_stu_no;exceptionwhen 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)asbeginopen cursor_gd forselect gd_sub_subject,gd_gradefrom gdwhere 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)asbeginc_state_values:=0;open cursor_stu forselect stu_no, stu_name,stu_sex ,stu_birthday ,stu_phone ,stu_cs_class ,cs_dept ,cs_gradefrom student, cswhere stu_name=p_stu_name and stu_cs_class=cs_class;exceptionwhen others then c_state_values:=2;end;/create or replace procedure p_pm_sum(cursor_gd_sum out sys_refcursor)asbeginopen cursor_gd_sum forselect distinct sno,stu_name,sumfrom student,(select gd_stu_no as sno,sum(gd_grade) as sumfrom gdgroup by gd_stu_no)where stu_no=snoorder 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)asbeginopen cursor_gd_sub forselect gd_stu_no,stu_name,gd_gradefrom gd,studentwhere gd_sub_subject=p_gd_sub_subject and stu_no=gd_stu_noorder 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)asbeginopen cursor_gd_class forselect distinct sno,stu_name,sumfrom student,(select gd_stu_no as sno,sum(gd_grade) as sumfrom gdgroup by gd_stu_no)where stu_no=sno and stu_cs_class=p_stu_cs_classorder by sum desc;end;/create or replace procedure p_fx(cursor_fx out sys_refcursor)asbeginopen cursor_fx forselect 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 youxiulvfrom gdgroup by gd_sub_subject;end;/create or replace procedure p_bujige(cursor_bujige out sys_refcursor)asbeginopen cursor_bujige forselect gd_stu_no,gd_sub_subject,gd_gradefrom gdwhere 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) asbeginupdate studentsetstu_name=p_stu_name,stu_sex=p_stu_sex,stu_birthday=p_stu_birthday,stu_phone=p_stu_phone,s tu_cs_class=p_stu_cs_classwhere stu_no=p_stu_no;if sql%rowcount=1then s_state_values:=0;end if;exceptionwhen 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)asbegindelete from gd where gd_stu_no=p_stu_no;delete from student where stu_no=p_stu_no;s_state_values:=0;exceptionwhen 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)asbeginupdate gdset 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=1then s_state_values:=0;end if;exceptionwhen 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)asbegindelete from gdwhere gd_stu_no=p_gd_stu_no and gd_sub_subject=p_gd_sub_subject;if sql%rowcount=1then s_state_values:=0;end if;exceptionwhen 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)asbeginselect count(*) into s_state_valuesfrom 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)asbeginupdate user_set passwd= p_passwdwhere name=p_name;if sql%rowcount=1then s_state_values:=0;end if;exceptionwhen others then s_state_values:=1;rollback;commit;end;/create or replace procedure p_select_no(cursor_stu_no out sys_refcursor)asbeginopen cursor_stu_no forselect stu_nofrom studentorder by stu_no;end;/create or replace procedure p_select_all(cursor_all out sys_refcursor)asbeginopen cursor_all forselect stu_no, stu_name,stu_sex ,stu_birthday ,stu_phone ,stu_cs_class ,cs_dept ,cs_grade from student, cswhere stu_cs_class=cs_classorder by stu_no;end;/create or replace procedure p_select_count(myrowcount out number)beginselect count(*) into myrowcountfrom student;end;/示例图:创建一个名为:DEPT_SC 的序列,用于产生系部的编号,起始值为1,步长为1,不缓存不循环。
Oracle 综训学生成绩管理系统

软件学院综合训练项目报告书课程名称Oracle数据库项目名称学生成绩管理系统专业班级组别成员任课教师刘腊梅2015 年 6 月目录1.设计时间 (3)2.设计任务 (3)3.设计内容 (3)3.1系统设计 (3)3.1.1系统功能概述 (3)3.1.2系统功能模块设计 (4)3.2数据库设计 (5)3.2.1数据库需求分析 (5)3.2.2数据库逻辑结构设计 (9)3.3数据库实现 (11)3.3.1创建用户 (11)3.3.2创建表和约束 (11)3.3.3创建存储过程、函数及触发器 (13)3.4测试与分析 (16)3.4.1测试 (16)3.4.2分析 (19)3.5代码 (19)4.总结与展望 (30)5.参考文献 (31)1 设计时间2015/6/1~2015/6/72 设计任务信息管理系统—学生成绩管理系统掌握ORACLE数据库的特点,熟悉SQL命令和PL/SQL的编程特点,运用所学知识解决现实问题,完成学生成绩管理系统的后台数据库设计,提高系统性能。
在该项目中,不考虑需求分析过程,要求建立以下关系:院系信息:院系编号、院系名称、院系主管、地址、院系人数;学生基本信息:院系编号、学号、姓名、性别、学生类型、入学日期、籍贯、身份证号、详细地址、出生日期、所学专业、民族、电话(家) 、缴费总计、已修学分、备注;课程信息:课程号、课程名称、开设年级、学时数、学分;成绩单:学号、课程号、学期、成绩、备注。
使用存储过程统计每个学生的‘已修学分’。
使用触发器实现当登记学生成绩(60分以上)时自动统计学生的‘已修学分’。
使用函数实现统计各课程的未及格人数,要求输入参数课程号后,返回各课程的人数NUM。
并实现调用,查‘数据库系统设计’的未及格人数。
将上实验中的存储过程与本实验中函数创建包。
3 设计内容3.1系统设计图3-1-2 业务流程图3.2数据库设计图3-2-6 0层数据流图图3-2-7 1层数据流图3.3.2创建表和约束1.创建院系信息表。
ORACLE学生成绩管理系统

华东交通大学理工学院课程设计报告书所属课程名称ORACLE数据库题目学生成绩管理系统分院电信分院专业班级计算机科学与技术ﻩ学号学生姓名指导教师2013年1月4 日华东交通大学理工学院课程设计( 论文)任务书专业计算机科学与技术班级姓名一、课程设计(论文)题目学生成绩管理系统二、课程设计(论文)工作:自2012 年12 月31 日起至2013 年 1 月 4 日止。
三、课程设计(论文)的内容要求:1、学生成绩管理系统的设计1.在对数据库理论及知识理解的基础上,针对具体的实际问题,设计合适的数据库表。
2.给出系统的概要设计、详细设计,完成相关的算法描述。
3.设计必要的视图、触发器、存储过程4.完成规范化的课程设计说明书的编写本设计是我和戈振军2个合作完成,我主要负责各个模块的界面设计与源代码的编译,最后测试系统的运行。
戈振军(20090210440123)主要负责各种数据的收集整理,数据库的设计,E-R图的设计与系统框架的搭建。
学生签名:2013 年1 月4日课程设计(论文)评阅意见评阅人职称20 年月日ﻬ目录第一章系统概述ﻩ错误!未定义书签。
1.1系统背景ﻩ错误!未定义书签。
1.2 可行性研究............................................................. 错误!未定义书签。
第二章需求分析................................................................ 错误!未定义书签。
2.1 运行环境:ﻩ错误!未定义书签。
2.2数据需求ﻩ错误!未定义书签。
第三章软件设计................................................................ 错误!未定义书签。
3.1总体设计............................................................. 错误!未定义书签。
PBOracle+学生成绩管理系统

实习 PB/Oracle 学生成绩管理系统项目1 创建与Oracle 8数据库的连接1.新建操作XSCJ数据库数据源新建操作XSCJ数据库数据源的方法如下.(1)单击PB工具栏的Database按钮,如图:打开数据库的连接“Database"对话框,如图:(2)双击ODB ODBC,选择Utilities,双击ODBC Administrator,添加新的数据源(3)单击“添加”按钮,为数据源选择驱动程序,选择Oracle ODBC Driver(4)单击“完成“按钮,系统显示Oracle ODBC配置(2)(3)(4)如图:在Database Source Name栏输入数据库名“XSCJ”;TNS ServiceName栏输入(选择)服务器名:XSCJ。
输入相应的内容后,单击“OK”按钮,数据源完成设置。
如图:2.新建Profile:xscj_pro与数据源相连新建Profile:xscj_pro与数据源相连的具体步骤如下。
(1)在Database对话框中,单击ODB ODBC,选择Profile Name,如图:(2)在Profile Name输入XSCJ,在Data Source选择XSCJ,在User ID 选择SYSMAN,在Password选择dcr48,单击“OK”按钮即可完成。
完成后ODB ODBC的子目录中就会出XSCJ,如图:(3)用鼠标右键单击XSCJ,选择connect连接XSCJ数据库即可,该数据库中的表就会列在Tables中,如图:项目2 主应用程序和界面1。
主应用程序在应用程序xscj的open()事件中添加代码,用于和数据库的连接,具体步骤及代码如下:2.新建数据界面d_cr新建数据界面d_cr的步骤如下。
(1)单击“New”,选取“DataWindow”下的“FreeFrom",单击“OK”,选择“Quick Selcet”图标,单击“Next”.如图:(2)在弹出的界面中选取需要建立查询的表,如OFFICE。
基于Oracle数据库的学生信息管理系统

1 引言1.1 课题来源及意义21世纪是信息化的时代,信息化以更快捷更为方便为目标来融入各行各业。
学校也不能例外。
当前,我国的学校正在加紧实施信息化建设,其中学生信息管理是相当重要的一部分。
目前社会上信息管理系统发展飞快,各个事业单位都引入了信息管理系统来管理自己日益增长的各类信息,学生信息管理系统也是有了很大的发展,商业化的学生信息管理系统也不少。
但本系统完全独立开发,力求使系统功能简洁明了,但功能齐全且易于操作[1]。
学生信息管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都是至关重要,所以学生管理系统应该能够为用户提供充足的信息和快捷的查询手段[2]。
但一直以来人们使用传统人工的方式管理文件,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
在各大高校,用计算机管理学校的信息已经越来越普遍了。
用计算机不但可以提高工作效率,而且还节省了许多人力物力,增强了学校资料的安全性。
提高了学校的管理能力,为此,用计算机来管理学校的信息,是非常必要的。
1.2研究内容与目标本文主要工作包括:(1)新系统在原有系统的基础上加入新的数据库的支持,使用了现金的数据库技术与数据管理技术,是数据的准确性与安全性得到了很大的提高,且在用户的并行操作与用户管理方面也有了极大地改善。
(2)利用虚拟机的运行环境与Oracle数据库相结合实现了主要原型系统。
(3)设计了基于三层结构的设计思想。
(4)尽量达到人力与设备费用的节省,并且是软件处理数据的速度提高,系统的整个设计过程必须通过生产能力的提高,系统的整个设计过程必须通过生产能力的提高,人员工作效率的提高等等是软件开发成本最小化,实现保证软件质量的前提下的资金投入最小化[3]。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已成为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
学生信息管理系统Oracle数据库

学生信息管理系统Oracle数据库/* --备注:学期:年份-上下学年;02上学期,09下学期,eg:2012-09,表示2012届下学年性别:男/女出生地:eg:广东省深圳市布吉街道办下水径村*//* --创建系部表*/create table department_tb(dep_no_n number not null primary key, --系部编号,主键dep_name_s varchar2(40) not null, --系部名称,eg:RJGC,(dep_name_s,term_s须唯一,即同一学期系部唯一)term_s varchar2(7) not null, --学期constraint dep_tb_name_term_unique unique(dep_name_s,term_s));/* --创建专业表*/create table major_tb(major_no_n number NOT NULL PRIMARY KEY, --专业编号,主键major_name_s varchar2(40) NOT NULL, --专业名称,eg:RJ,(term_s,dep_no_s,major_name_s须唯一,即同一学期同一系部专业唯一)dep_no_n number not null, --系部编号,外键term_s varchar2(7) not null, --学期foreign key(dep_no_n) references department_tb(dep_no_n), constraint major_tb_name_dep_term_unique unique(major_name_s,dep_no_n,term_s) );/* --创建教师信息表*/create table teacher_tb(work_no_s varchar2(10) not null primary key, --工号(eg:SD000001),主键name_s varchar2(10) not null, --姓名sex_c char(2) not null, --性别born_date_s varchar2(10) not null, --出身日期(eg:1980-01-01)born_address_s varchar2(60) not null, --出生地idcard_no_s varchar2(18) not null unique, --身份证号码,唯一employed_date_s varchar2(10) not null --入职时间);/* --创建教师系部表*/create table teacher_dep_tb(work_no_s varchar2(10) not null primary key, --工号,主键,外键dep_no_n number not null, --系部编号,外键foreign key(work_no_s) references teacher_tb(work_no_s),foreign key(dep_no_n) references department_tb(dep_no_n) );/* --创建班级表*/create table class_tb(class_no_n number not null primary key, --班级编号,主键class_name_s varchar2(20) not null unique, --班级名称,eg:RJ12002,唯一major_no_n number not null, --专业编号,外键term_s varchar2(7) not null, --学期foreign key(major_no_n) references major_tb(major_no_n) );/* --创建学生信息表*/create table student_info_tb( --有待补充stu_no_n number not null primary key, --学生编号,主键stu_name_s varchar2(10) not null, --学生姓名sex_c char(2) not null, --性别born_date varchar2(10) not null, --出身日期(eg:1980-01-01)born_address_s varchar2(60) not null, --出生地class_no_n number not null, --班级编号,外键term_s varchar2(7) not null, --学期idcard_no_s varchar2(18) not null unique, --身份证号码,唯一foreign key(class_no_n) references class_tb(class_no_n));/* --创建课程表*/create table course_tb(course_no_n number not null primary key, --课程编号,主键course_name_s varchar2(30) not null, --课程名称term_s varchar2(7) not null, --学期major_no_n number NOT NULL, --专业编号,外键foreign key(major_no_n) references major_tb(major_no_n),constraint course_tb_name_term_major_uni unique(course_name_s,term_s,major_no_n) );/* --创建成绩表*/create table grade_tb(grade_no_n number not null primary key, --成绩序列号,主键score_n number not null,stu_no_n number not null, --学号,外键,(stu_no_s,course_no_s,time_tg_s必须唯一,即同一次考评成绩下同一学号同一课程成绩唯一)course_no_n number not null, --课程号,外键term_s varchar2(7) not null, --学期time_tg_s varchar2(10) not null, --时间标识(标识什么时间的成绩eg:2012-01-01)foreign key(course_no_n) references course_tb(course_no_n), foreign key(stu_no_n) references student_info_tb(stu_no_n), constraint grade_tb_stu_cou_time_uni unique(stu_no_n,course_no_n,time_tg_s)/* --创建功能表*/create table function_tb(fun_no_n number not null primary key, --功能序号(eg:001),主键fun_name_s varchar2(20) not null, --功能名称,(fun_name_s,parent_no_n须唯一,即同一父节点下该功能唯一) parent_no_n number, --父节点,外键foreign key(parent_no_n) references function_tb(fun_no_n),constraint fun_tb_name_parent_uni unique(fun_name_s,parent_no_n));insert into function_tb(fun_no_n,fun_name_s,parent_no_n) values (0,'根节点',0);alter table function_tb modify (parent_no_n number not null);/* --创建角色表*/create table role_tb(role_no_n number not null primary key, --角色编号(eg:001),主键role_name_s varchar2(20) not null unique, --角色名称,唯一fun_no_n number not null, --功能编号,外键foreign key(fun_no_n) references function_tb(fun_no_n));/* --创建学生用户信息表*/create table user_tb(user_no_n number not null primary key, --用户编号(eg:0000000001),主键,外键user_name_s varchar2(10) not null, --用户姓名(term_s,user_name_s,class_name_s必唯一,即同一学期同一班级用户名唯一)user_pwd_s varchar2(100) not null, --用户密码,密文role_no_n number not null, --角色编号,外键stu_no_n number not null, --学号,外键term_s varchar2(7) not null, --学期class_name_s varchar2(20) not null, --班级名称,外键foreign key(role_no_n) references role_tb(role_no_n),foreign key(stu_no_n) references student_info_tb(stu_no_n), foreign key(class_name_s) references class_tb(class_name_s), foreign key(user_no_n) references student_info_tb(stu_no_n), constraint user_tb_term_name_class_uni unique(term_s,user_name_s,class_name_s) );/* --创建教职工用户表*/create table teacher_tb(work_no_s varchar2(10) not null primary key, --工号,主键,外键user_pwd_s varchar2(100) not null, --用户密码,密文role_no_n number not null, --角色编号,外键);。
PBOracle+学生成绩管理系统

实习 PB/Oracle 学生成绩管理系统项目1 创建与Oracle 8数据库的连接1.新建操作XSCJ数据库数据源新建操作XSCJ数据库数据源的方法如下。
(1)单击PB工具栏的Database按钮,如图:打开数据库的连接“Database”对话框,如图:页脚内容1(2)双击ODB ODBC,选择Utilities,双击ODBC Administrator,添加新的数据源(3)单击“添加”按钮,为数据源选择驱动程序,选择Oracle ODBC Driver(4)单击“完成“按钮,系统显示Oracle ODBC配置(2)(3)(4)如图:在Database Source Name栏输入数据库名“XSCJ”;TNS ServiceName栏输入(选择)服务器名:XSCJ。
输入相应的内容后,单击“OK”按钮,数据源完成设置。
如图:页脚内容22.新建Profile:xscj_pro与数据源相连新建Profile:xscj_pro与数据源相连的具体步骤如下。
页脚内容3(1)在Database对话框中,单击ODB ODBC,选择Profile Name,如图:(2)在Profile Name输入XSCJ,在Data Source选择XSCJ,在User ID 选择SYSMAN,在Password选择dcr48,单击“OK”按钮即可完成。
完成后ODB ODBC的子目录中就会出XSCJ,如图:页脚内容4(3)用鼠标右键单击XSCJ,选择connect连接XSCJ数据库即可,该数据库中的表就会列在Tables 中,如图:页脚内容5项目2 主应用程序和界面1.主应用程序在应用程序xscj的open()事件中添加代码,用于和数据库的连接,具体步骤及代码如下:页脚内容62.新建数据界面d_cr新建数据界面d_cr的步骤如下。
页脚内容7(1)单击“New”,选取“DataWindow”下的“FreeFrom”,单击“OK”,选择“Quick Selcet”图标,单击“Next”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验十九Oracle数据库系统开发实例-学生成绩管理系统【一】实验目的1.掌握采用开发Oracle数据库系统的方法;2.掌握开发C/S模式的数据库系统的方法。
【二】实验内容利用SQL Developer,在scott用户下创建6张表:student、teacher、course、allocate、score和users表,如表19-1至19-7所示。
表19-1 users表结构表19-2 users表的数据表19-3 student表的结构表19-4 teacher表的结构表19-5 course表的结构表19-6 allocate表的结构表19-7 score表的结构一、系统功能1.实现学生基本数据的编辑和相关查询。
2.实现教师基本数据的编辑和相关查询。
3.实现课程基本数据的编辑和相关查询。
4.实现各课程任课教师安排和相关查询。
5.实现学生成绩数据的编辑和相关查询。
6.实现用户管理和控制功能。
二、系统结构本系统对应的项目为“学生成绩管理系统.sln”,共有20个窗体和1个公共模块。
本项目的启动窗体为pass,该窗体提示用户输入相应的用户名/密码,并判断是否为合法用户。
如果是非法用户(用户名/密码输入错误),则提示用户再次输入用户名/密码,若用户非法输入3次,便自动退出系统运行。
如果是合法用户,则调用main多文档窗体启动相应的菜单,用户通过该系统菜单执行相应的操作。
系统结构图,如图19-1所示。
图19-1 系统结构图三、系统实现1.公共模块本项目中包含一个公共模块即CommModule.vb模块,包含一些全局变量和全局函数Exesql。
其中全局变量被本项目中的一些窗体用于在窗体之间传递数据。
全局函数Exesql可以对school数据库中任何表执行Select、Insert、Update和Delete操作,如果是Select操作,返回相应的DataTable对象,如果是Insert、Update或Delete操作,对数据表执行更新,返回空(Nothing)。
具体代码如下:2.pass窗体pass窗体用于接受用户的用户名/密码输入,判断是否为合法用户。
如果是合法用户,释放该窗体并启动main窗体;否则释放该窗体不启动main窗体即退出系统运行。
对于合法用户,用全局变量userlevel保存当前用户的级别。
pass窗体设计如图19-2、如表19-8所示。
图19-2 pass窗体设计表19-8 pass窗体的控件属性表3.main窗体main窗体是一个多文档窗体,其中有菜单栏MenuStrip对象和状态栏StatusStrip对象。
main窗体设计如图19-3、如表19-9所示。
图19-3 main窗体设计表19-9main窗体的控件属性表4.editstudent窗体editstudent窗体用于编辑学生数据,用户可以单击“添加”、“修改”和“删除”按钮执行相应的功能。
当DataGridView1控件中不存在任何学生记录时,“修改”和“删除”按钮不可用。
editstudent 窗体设计如图19-4、如表19-10所示。
表19-10 editstudent窗体的控件属性表5.editstudent1窗体editstudent1窗体被editstudent窗体所调用,以实现student 表中记录基本数据的编辑。
用户单击“确定”按钮时,记录编辑有效,即保存用户的修改;单击“取消”按钮时,记录编辑无效,即不保存用户的修改。
editstudent1窗体设计如图19-5、如表19-11所示。
图19-5 editstudent1窗体设计表19-11 editstudent1窗体的控件属性表6.querystudent窗体querystudent窗体实现学生记录的查询。
在设置条件时可以直接从组合框中选择1个班号等。
用户可以通过在“设置查询条件”分组框中输入相应的条件后,单击“确定”按钮,在上方的DataGridView1控件中仅显示满足指定条件的学生记录。
querystudent窗体设计如图19-6、如表19-12所示。
图19-6 querystudent窗体设计表19-12 querystudent窗体的控件属性表7.editteacher窗体editteacher窗体用于编辑教师基本数据,用户可以单击“添加”、“修改”和“删除”按钮执行相应的功能。
当DataGridView1控件中不存在任何教师记录时,右下方的“修改”和“删除”按钮不可用。
editteacher窗体设计如图19-7、如表19-13所示。
表19-13 editteacher窗体的控件属性表8.editteacher1窗体editteacher1窗体被editteacher窗体所调用,以实现teacher 表中记录基本数据的编辑。
用户单击“确定”按钮时,记录编辑有效,即保存用户的修改;单击“取消”按钮时,记录编辑无效,即不保存用户的修改。
editteacher1窗体设计如图19-8、如表19-14所示。
图19-8 editteacher1窗体设计表19-14 editteacher1窗体的控件属性表9.queryteacher窗体queryteacher窗体用于教师记录的查询。
用户可以通过在设置查询条件分组框中输入相应的条件后,单击“确定”按钮,在上方的DataGridView1控件中仅显示满足指定条件的教师记录。
queryteacher窗体设计如图19-9、如表19-15所示。
图19-9 queryteacher窗体设计表19-15 queryteacher窗体的控件属性表10.editcourse窗体editcourse窗体用于编辑课程基本数据,用户可以单击“添加”、“修改”和“删除”按钮执行相应的功能。
当DataGridView1控件中不存在任何课程记录时,“修改”和“删除”按钮不可用。
editcourse窗体设计如图19-10、如表19-16所示。
图19-10 editcourse窗体设计表19-16 editcourse窗体的控件属性表11.editcourse1窗体editcourse1窗体被editcourse窗体所调用,以实现course表中记录基本数据的编辑。
用户单击“确定”按钮时,记录编辑有效,即保存用户的修改;单击“取消”按钮时,记录编辑无效,即不保存用户的修改。
editcourse1窗体设计如图19-11、如表19-17所示。
图19-11 editcourse1窗体设计表19-17 editcourse1窗体的控件属性表12.querycourse窗体querycourse窗体实现学生记录的通用查询。
用户可以通过在设置查询条件分组框中输入相应的条件后,单击“确定”按钮,在上方的DataGridView1控件中仅显示满足指定条件的课程记录。
querycourse窗体设计如图19-12、如表19-18所示。
图19-12 querycourse窗体设计表19-18 querycourse窗体的控件属性表13.allocateCourse窗体allocateCourse窗体用于安排某班某课程的任课教师。
用户可以单击“安排新课程”、“修改任课教师”和“删除课程安排”按钮执行相应的功能。
当DataGridView1控件中不存在任何课程安排记录时,“修改任课教师”和“删除课程安排”按钮不可用。
allocateCourse窗体设计如图19-13、如表19-19所示。
图19-13 allocateCourse窗体设计表19-19 allocateCourse窗体的控件属性表14.allocateCourse1窗体allocateCourse1窗体被allocateCourse窗体所调用,以实现某班某课程的任课教师编辑。
若是安排新课程,需选择班号和课程号,然后指定对应的教师编号;若是修改任课教师,班号和课程号不能修改,只需选择相应的任课教师编号。
用户单击“确定”按钮时,本次安排或修改任课教师记录有效,即保存所作的修改;单击“取消”按钮时,本次安排或修改任课教师记录无效,即不保存所作的修改。
allocateCourse1窗体设计如图19-14、如表19-20所示。
图19-14 allocateCourse1窗体设计表19-20 allocateCourse1窗体的控件属性表15.queryallocate窗体queryallocate窗体实现课程安排记录的通用查询。
用户可以通过在设置查询条件分组框中输入相应的条件后,单击“确定”按钮,在上方的DataGridView1控件中仅显示满足指定条件的课程安排记录。
queryallocate窗体设计如图19-15、如表19-21所示。
图19-15 queryallocate窗体设计表19-21 queryallocate窗体的控件属性表16.editscore窗体editscore窗体用于产生和编辑学生成绩数据。
DataGridView1控件中仅显示满足指定条件的学生成绩记录,其中学号和课程号是不可修改的,只可以编辑分数。
如果指定课程号的学生成绩记录不存在,可以单击“产生空白成绩表”按钮,先产生一个没有分数的成绩表,然后再输入学生分数。
如果指定课程号的学生成绩记录已存在,可以单击“清除课程成绩表”按钮,删除该课程号的学生成绩记录。
输入或修改学生的分数,单击“保存成绩”按钮将本次编辑保存到score表中。
editscore窗体设计如图19-16、如表19-22所示。
注意:由于Oracle中,由于有1个score的公有同义词,和score 表有冲突,所以要删除score公有同义词。
图19-16 editscore窗体设计表19-22 editscore窗体的控件属性表17.queryscore窗体queryscore窗体用于实现学生成绩数据的查询。
用户可以通过在设置查询条件分组框中输入相应的条件后,单击“确定”按钮,在上方的DataGridView1控件中仅显示满足指定条件的学生成绩记录。
queryscore窗体设计如图19-17、如表19-23所示。
图19-17 queryscore窗体设计表19-23 queryscore窗体的控件属性表18.setuser窗体setuser窗体用于添加、删除和修改使用本系统的用户。
DataGridView1控件中显示所有的用户。
通过“添加”按钮增加新用户,“修改”按钮修改当前选择的用户,“删除”按钮删除当前选择的用户。
但不得删除“admin”的系统管理员用户。
setuser窗体设计如图19-18、如表19-24所示。
图19-18 setuser窗体设计表19-24 setuser窗体的控件属性表19.setuser1窗体setuser1窗体被setuser窗体调用以编辑用户记录。