系统分析和准备
概述
通过计算机完成高等院校的招生录取工作,是一个复杂而又有代表性的数据库应用。其中涉及到大量考生和院校数据的录入、整理、存储以及由数据库应用程序来实现录取过程的自动化等工作。因为在校学生对高考录取过程都有一定程度的了解,所以我们选用这一项目来达到综合运用Oracle数据库的训练目的。因为这个系统比较复杂,所以我们通过设计和实现一个简化的“招生录取系统”来模拟招生录取的过程。
系统首先要建立合理的数据结构和关系,并输入必要的基本数据,然后根据院校的招生要求和学生填报的志愿,实现对符合要求的考生的录取。通过对这一过程的模拟,我们可以比较全面地应用前面所学的知识和技能,并提高使用Oracle数据库技术解决实际问题的能力。
基本需求分析
先来做一个简单的需求分析。高考招生和录取工作,一般是由招生部门和院校合作完成的。招生部门和院校是该应用程序的使用者。该应用程序为考生只提供一些简单的查询功能。
1.院校
院校应提供招生的要求,如招生的人数、最低录取分数线以及对考生的其他条件的限制。
院校需要在录取结束后查询院校的录取名单。
2.招生部门
招生部门要收集和整理考生信息,建立考生信息库和院校信息库。考生信息库用于存取考生的基本信息,包括考生的高考成绩和报考志愿;院校信息库用于存取院校的基本信息和招生信息。
招生部门通过数据库中的院校信息和考生信息,由相应的数据库应用程序来完成一系列的数据加工处理过程,其中最主要的就是投档录取过程。所谓投档,就是把满足院校要求的考生档案信息发送给院校,由院校审查档案后决定考生的录取与否。为了简化录取过程,我们由系统投档程序来完成考生的录取工作,一旦考生满足院校招生条件,即视为被录取。被录取的考生,在数据库中要标识成录取状态,并记录录取院校的信息,在院校信息库中要回填录取人数的有关信息。
在录取过程中或录取结束后,招生部门要进行查询和统计,主要是在录取结束后统计所有院校的招生情况。
3.考生
考生在录取过程中需要查询其高考分数和录取状态。
10.1.3 功能分析设计
系统完成的主要功能有数据录入、投档和查询统计。
1.数据录入
数据录入要完成院校和学生信息表的数据输入及修改工作。
在本系统中,为了完成录取的模拟,可以虚拟10所院校,给出院校的基本信息和招生要求;虚拟至少50名考生,给出考生的基本信息以及考试成绩,并为每个考生填报2个院校志愿(一志愿和二志愿)。为了简化数据录入,可直接由SQL语句或其他工具完成,比如可以使用TOAD软件来完成。
2.投档过程
招生录取的原则是:一志愿要求优先录取,一志愿全部录取完毕后,才能开始二志愿的录取;二志愿录取对没有达到计划招生人数的院校进行补充录取。
根据以上原则,投档可分为一志愿投档和二志愿投档。一志愿投档是根据院校编号完成对一个学校的一志愿投档的;二志愿投档是根据院校编号完成对一个学校的二志愿投档的,二志愿投档应该在一志愿投档完成以后进行。一次完成全部院校的投档称为自动投档。自动投档一次完成对所有院校的一志愿或二志愿投档。如果使用自动投档,只需为一志愿和二志愿分别投档一次,即完成投档过程。作为补充,可以设计一个调剂投档功能,对一、二志愿没有被录取的考生,如果存在没有招满的院校,补充录取同意调剂的考生。
3.查询统计
在投档过程中或投档结束之后,根据院校编号显示院校的录取结果,即录取考生按分数排序的名单,同时应该显示考生的分数、录取的志愿等信息。
在录取结束之后,按院校的录取平均分数排名,显示所有院校的招生统计信息。
开发账户的创建和授权
在开发之前,要为新的应用创建模式账户,并授予必要的权限,以便创建表和其他数据库对象。为了能够创建账户和授权,必须使用具有足够权限的管理账户,可使用系统管理员账户来创建新的应用账户。
在users表空间上创建开发账户,增加一些权限。
步骤1:创建账户:
Sql代码
见附件
 
说明:从结果可以看出,深圳职业技术学院计划招生8人,已经录取8人。其中一志愿录取3人,二志愿录取5人。最高分数为589分,最低分数为455分,录取控制分数线为450分。
2.招生情况统计
显示按平均分降序排列的招生情况统计表:
EXEC COLLEGE_TOTAL;
执行结果:
Sql代码
院校编号 院校名称             招生人数 录取人数 男生人数 女生人数 最高分数 最低分数 平均分数
1001        清华大学     5         5        3        2     689     627     660
1002        北京大学        4        4        1        3        615    600        609
1005        复旦大学        4         2        2        0     610     600        605
1006        中山大学         5        2        0        2        608     587    598
1003        武汉大学        6         6            2         4         617    560            595
  1004        华南科技大学         3         2         1         1         595        588            592
  1007        华南理工大学         4         4         3            1        585        532            557
  1008        暨南大学         3         3            1         582        534        552
  1009        深圳大学         6         5            3        2         555        502    522
  1010        深圳职业技术学院 8        8         5        3         598        455        502
  PL/SQL 过程已成功完成。
说明:从结果可以看出,清华大学平均录取分数最高,为660分。该校计划招收5人,已经招满,其中男生3人,女生2人,最高分为689分,最低分为627分。
结果分析
系统招生录取过程中和结束后,应该对系统数据进行分析,检查是否存在投档错误,避免造成损失。如果发现问题,则要重新投档。
检查没有被录取的考生一志愿报考的院校:
Sql代码
SELECT 编号,姓名,总分,院校名称 FROM STUDENT S,COLLEGE C    
     WHERE S.一志愿=C.院校编号 AND S.录取志愿 IS NULL ORDER BY 总分 DESC;
执行结果:
Sql代码
编号 姓名                                    总分 院校名称
--------------- ----------------------------- ----------- ------------------------------
         10045 张韦                                     553 复旦大学
         10047 高飞云                                 540 复旦大学
         10042 邓树林                                 485 北京大学
         10030 国丹丹                                 415 深圳大学
         10034 洪智力                                 378 武汉大学
后5名考生因为分数不够(低于最低的录取分数线450分)不能被录取,前3名考生要对其进行检查(以第一个考生10045为例):
Sql代码
   SELECT * FROM STUDENT WHERE 编号=10045;
执行结果:
Sql代码
编号 姓名                        性             总分             一志愿         二志愿    
     ---------------- --------------------- ------ --------------------- -------------- ---------------    
             10045 张韦                        2                 553 1             1005             1007
该生总分为553分,一志愿报1005,二志愿报1007。先检查一志愿的情况:
Sql代码
SELECT * FROM COLLEGE WHERE 院校编号=1005;
执行结果:
Sql代码
院校编号 院校名称                 录取分数线     招生人数     录取人数
     --------------- ---------------------------------------------- ----------------- --------------- ----------------
             1005 复旦大学                                                            580                    4                    2
复旦大学虽然没有招满,但因该考生的分数低于复旦大学的录取分数线,所以一志愿落选正常。继续检查二志愿情况:
Sql代码
SELECT * FROM COLLEGE WHERE 院校编号=1007;
执行结果:
Sql代码
院校编号 院校名称             录取分数线     招生人数     录取人数
--------------- ---------------------------------------------- ---------------- ---------------- ---------------
              1007 华南理工大学                    520                    4                    4
该考生达到了华南理工大学的录取分数线。该校招生4人,录取4人。继续检查该考生为什么没有被二志愿录取:
Sql代码
SELECT 编号,姓名,总分,录取志愿 FROM STUDENT WHERE 录取院校=1007 ORDER BY 总分 DESC;
执行结果:
Sql代码
编号 姓名                                    总分
   --------------- ------------------------------- ----------
         10017 罗惯通                                 585 1
         10046 胡月                                     557 1
         10006 杨煌                                     555 2
         10041 林晨曦                                 532 1
该校有3名考生被一志愿录取,二志愿录取1人。按照一志愿优先的原则,10045号考生只能参加二志愿投档。该校二志愿缺额1人,按分数从高到低排序,考生杨煌的分数555高于考生张韦的分数553,故杨煌优先录取,达到录取人数4人,录取结束。
通过以上分析可知,张韦没有被录取属于正常情况。
对其他考生的情况分析可以模仿以上步骤进行。
系统改进
至此完成了高校招生模拟的全部工作。该系统在以下方面还有待于改进:
(1) 可按照模块功能以包的形式对模块进行分类,比如可以分为投档包、查询包和公用包。
(2) 可以设立多个应用账户,通过授予不同的系统权限对象及包的访问权限,来限定对数据的访问和操作。
(3) 进一步完成调剂投档的程序。
以上工作,有兴趣的读者可以进一步完善。
练习
设计开发“图书管理系统”,完成图书的入库、查询、出借、归还和信息统计工作。系统主要的表应该包括图书表、出版社表、图书出借表和读者表(参照第4章内容)。
系统的主要功能包括:
(1) 插入修改图书表、出版社表和读者表。
(2) 按图书名称、出版社、出版时间和作者检索图书。
(3) 对图书进行模糊检索。
(4) 出借和归还图书。
(5) 查询过期未归还的图书。
(6) 查询在借图书的有关信息。
(7) 热门图书统计(按出借次数统计)。
(8) 按日期查询新进图书。