Oracle课程设计 图书管理系统

时间:2019-05-14 02:20:44下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《Oracle课程设计 图书管理系统》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《Oracle课程设计 图书管理系统》。

第一篇:Oracle课程设计 图书管理系统

数据库课程设计

设计名称:图书管理系统

组员:尚靖伟(122068)

张红凯(122072)班级:计G121班

信息工程学院计算机系

2013年6月27日

“Oracle数据库应用设计”指导书

Oracle数据库管理与设计

目 录

目录.........................................................................................................................I 前言.......................................................................................................................II 第1部分

Oracle管理技术........................................................................................1

实验1 实验2 实验3 实验4 实验5 实验6 实验7 实验8 第2部分

数据库管理................................................................................................................1 角色和用户管理........................................................................................................6 表和视图管理............................................................................................................8 索引和序列管理......................................................................................................12 PL/SQL编程...........................................................................................................14 使用游标、存储过程和触发器..............................................................................22 表空间管理..............................................................................................................26 文件管理..................................................................................................................30

Oracle开发技术......................................................................................36

I

Oracle数据库管理与设计

前 言

数据库技术是计算机科学中发展最快的领域之一。随着网络技术的不断发展,数据库技术与网络技术相结合,已经广泛应用于工作和生活的各个领域。同时,数据库技术及其应用已经成为国内外高校计算机专业和许多非计算机专业的必修或选修课程。

Oracle是当前最流行的大型关系数据库之一,支持包括32位Windows、64位Windows、OS、HP-UX、AIX5L、Solaris和Linux等多种操作系统,拥有广泛的用户和大量的应用案例,已成为大型数据库应用系统的首选后台数据库系统。

本实验课程要求学生全面了解Oracle数据库的特点和功能。从安装配置、安全性、可用性、互操作性、PL/SQL、可开发性、商业智能等多个方面,对Oracle数据库的各项技术进行学习和实验。

通过学习Oracle数据库安装、管理及开发,为今后从事Oracle数据库管理和开发工作打下良好的基础。

本实验课程共分2个部分。第1部分为Oracle的管理技术,由实验1至实验8组成,内容包括:(1)数据库管理;(2)角色和用户管理;(3)表和视图管理;(4)索引和序列管理;(5)PL/SQL编程;(6)使用游标、存储过程和触发器;(7)表空间;(8)文件管理。第2部分为Oracle开发技术,要求完成基于一定背景的管理信息系统的数据库设计,如学生信息管理系统、图书管理系统、人事信息管理系统、网上购物系统等。

II

第1部分 Oracle管理技术

第1部分 Oracle管理技术

实验1 数据库管理

目的和要求

(1)了解Oracle数据库的逻辑结构和物理结构;(2)了解Oracle Enterprise Manager的使用情况;(3)学习关闭和启动数据库实例的方法;(4)学习使用SQL语句创建数据库的方法;(5)学习使用SQL语句删除数据库的方法。

实验准备

首先要了解Oracle数据库的逻辑结构,包括方案(schema)对象、数据块(data block)、区间(extent)、段(segment)和表空间(tablespace)等。数据库由若干个表空间组成,表空间由表组成,段由区间组成,区间则由数据块组成。Oracle数据库的物理结构由构成数据库的操作系统文件所决定。每个Oracle数据库都由3种类型的文件组成:数据文件、日志文件和控制文件。这些数据库文件为数据库信息提供真正的物理存储。

Enterprise Manager 9i是Oracle 9i提供的新的管理工具,简称EM。使用它可以完成启动、关闭数据库,创建、删除数据库等功能。只有系统管理员或拥有CREATE DATABASE权限的用户才能创建数据库。可以在Enterprise Manager中通过图形界面创建数据库,也可以使用CREATE DATABASE语句创建数据库。

实验内容

本实验主要包括以下内容。

(1)练习使用不同方法启动和关闭数据库实例。

(2)练习使用不同方法创建和删除数据库,要使操作的数据库为用户管理数据库UserMan。

1.使用SHUTDOWN命令关闭数据库实例

练习使用SHUTDOWN命令关闭数据库实例,分别按以下方式启动数据库实例。

(1)正常关闭。等待当前所有已连接的用户断开与数据库的连接,然后关闭数据库。正常关闭的语句如下:

SHUTDOWN NORMAL

(2)立即关闭。回退活动事务处理并断开所有已连接的用户,然后关闭数据库。立即关闭的语句如下:

SHUTDOWN IMMEDIATE

第1部分 Oracle管理技术

(3)事务处理关闭。完成事务处理后断开所有已连接的用户,然后关闭数据库。事务处理关闭的语句如下:

SHUTDOWN TRANSACTIONAL

(4)中止关闭。中止数据库实例,立即关闭数据库。中止关闭的语句如下:

SHUTDOWN ABORT

每次执行SHUTDOWN语句关闭数据库实例之前,请执行STARTUP命令启动数据库。2.使用STARTUP命令启动数据库实例

练习使用STARTUP命令启动数据库实例,分别按以下方式启动数据库实例。(1)启动数据库实例时不装载数据库。执行此操作的命令如下:

STARTUP NOMOUNT

(2)启动数据库实例,装载数据库,但不打开数据库。通常在数据库维护时执行此操作,对应的命令如下:

STARTUP MOUNT

(3)启动数据库实例,装载数据库,打开数据库。执行此操作的命令如下:

STARTUP OPEN

第1部分 Oracle管理技术

(4)强制实例启动。在遇到特殊异常的情况时,可以强制启动实例。强制启动实例的语句如下:

STARTUP FORCE

该语句将数据库强行启动到OPEN模式。

(5)启动后限制对数据库实例的访问。执行此操作的命令如下:

STARTUP RESTRICT

每次执行STARTUP语句启动数据库实例之前,请执行SHUTDOWN命令关闭数据库。3.使用ORACLE Enterprise Manager关闭数据库实例 按照下面的步骤关闭数据库实例。

(1)在数据库处于打开状态时,使用SYS用户以SYSDBA身份登录到Enterprise Manager。在主目录页面的“一般信息”栏目中,可以看到“关闭”按钮。

(2)单击“关闭”按钮,可以打开“主机和目标数据库身份证明”页面。用户需要拥有管理员的权限才能关闭数据库实例,包括主机操作系统的管理员和当前数据库实例的SYSDBA用户。

(3)输入完成后,单击“确定”按钮,打开“确认关闭”页面。

(4)单击“是”按钮,开始关闭数据库。关闭操作完成后,单击“刷新”按钮,打开“启动数据库实例”页面。

4.使用ORACLE Enterprise Manager启动数据库实例 按照下面的步骤启动数据库实例。

第1部分 Oracle管理技术

(1)使用SYS用户以SYSDBA身份登录到Enterprise Manager。

(2)单击“启动”按钮,打开“主机和目标数据库身份证明”页面。用户需要拥有管理员的权限才能启动数据库实例,包括主机操作系统的管理员和当前数据库实例的SYSDBA用户。

(3)输入完成后,单击“确定”按钮,打开“确认打开”页面。(4)单击“是”按钮,开始打开数据库。5.使用SQL语句创建数据库

按照如下条件创建数据库OracleDB(以SYSDBA的用户身份连接到数据库)。

(1)设置SYS用户的密码为SYSPWD,设置SYSTEM用户的密码为SYSTEMPWD。(2)使用已有的控制文件。

(3)指定日志文件组redo01.log,大小为100MB;指定日志文件组redo02.log,大小为100MB。设置最大的日志文件数量为10。

(4)定义日志文件组中最大的日志文件数量为5。(5)定义最大的数据文件数量为100。(6)定义数据库中最大的实例数量为1。(7)定义存储数据的字符集为US7ASCII。

(8)定义数据文件名称为SYS01.dbf,初始大小为100MB。(9)定义默认的表空间为tbs_1。(10)定义临时表空间为tempts1。

(11)定义临时文件为temp01.dbf,大小为10MB。CREATE DATABASE语句实例:

CREATE DATABASE OracleDB

USER SYS IDENTIFIED BY bipt123

USER SYSTEM IDENTIFIED BY bipt123

CONTROLFILE REUSE MAXLOGFILES 10

MAXLOGMEMBERS 5

MAXDATAFILES 100

MAXINSTANCES 1

LOGFILE GROUP 1(‘E:redo01.log’)SIZE 100M ,GROUP 2(E:redo02.log’)SIZE 100M ,CHARACTER SET US7ASCII

DATAFILE ‘E:sys01.dbf’ SIZE 100M REUSE

EXTENT MANAGEMENT LOCAL

DEFAULT TABLESPACE tbs_1

DEFAULT TEMPORARY TABLESPACE tempts1

TEMPFILE ‘E:temp01.dbf’ SIZE 10M REUSE;6.使用SQL语句删除数据库

按照如下步骤删除数据库UserMan。

(1)在删除数据库之前,需要用户以SYSDBA或SYSOPER身份登录,代码如下:

CONNECT SYS/SYSPWD AS SYSDBA;其中SYSPWD为SYS用户的密码,请根据实际情况输入。(2)关闭数据库,再以MOUNT模式启动数据库,代码如下:

第1部分 Oracle管理技术

SHUTDOWN IMMEDIATE;STARTUP MOUNT;(3)删除数据库,代码如下:

DROP DATABASE;

第1部分 Oracle管理技术

实验2 角色和用户管理

目的和要求

(1)了解Oracle数据库用户和角色的概念;(2)学习使用SQL语句创建Oracle用户;(3)学习使用SQL语句创建Oracle角色;(4)学习使用SQL语句指定用户的角色。

实验准备

(1)了解Oracle数据库用户可以分为6种类型,即数据库管理员、安全官员、网络管理员、应用程序开发员、应用程序管理员和数据库用户;

(2)了解角色是对用户的一种分类管理办法,不同权限的用户可以分为不同的角色;(3)了解使用CREATE ROLE语句创建角色的方法;(4)了解使用DROP ROLE语句删除角色的方法;(5)了解使用GRANT语句指定用户角色的方法;(5)了解使用CREATE USER语句创建用户的方法;(4)了解使用DROP USER语句删除用户的方法。

实验内容

本实验主要包括以下内容。

(1)练习使用SQL语句创建数据库角色;

(2)练习使用SQL语句为数据库角色授予权限;(3)练习使用SQL语句指定用户角色;(4)练习使用SQL语句创建数据库用户。

1.使用SQL语句创建数据库角色

参照下面的步骤练习使用CREATE ROLE语句创建数据库角色。(1)以SYSTEM用户登录到SQL*PLUS。

(2)使用CREATE ROLE语句创建角色UserManRole,密码为myrolepwd,代码如下:

CREATE ROLE UserManRole IDENTIFIED BY myrolepwd;

2.使用SQL语句为数据库角色授权

参照下面的步骤练习使用GRANT语句为数据库角色授权。(1)以SYSTEM用户登录到SQL*PLUS。

第1部分 Oracle管理技术

(2)使用GRANT语句将角色UserManRole授予CONNECT和RESOURCE权限,代码如下:

--设置角色权限

GRANT CONNECT TO UserManRole;GRANT RESOURCE TO UserManRole;

3.使用SQL语句创建数据库用户

参照下面的步骤练习使用CREATE USER语句创建数据库用户。(1)以SYSTEM用户登录到SQL*PLUS。

(2)使用CREATE USER语句创建用户UserManAdmin,密码为UserPwd,代码如下:

CREATE USER UserManAdmin IDENTIFIED BY UserPwd

DEFAULT TABLESPACE USERS

TEMPORARY TABLESPACE TEMP;

(3)使用GRANT语句对用户UserManAdmin授予系统权限UNLIMITED TABLESPACE,代码如下:

--设置系统权限

GRANT UNLIMITED TABLESPACE TO UserManAdmin;

4.使用SQL语句指定用户角色

参照下面的步骤将用户UserMan指定为角色UserManRole。(1)以SYSTEM用户登录到SQL*PLUS。

(2)使用GRANT语句将用户UserMan指定为角色UserManRole,代码如下:

GRANT UserManRole TO UserManAdmin;

第1部分 Oracle管理技术

实验3 表和视图管理

目的和要求

(1)了解Oracle表和视图的概念;(2)学习使用SQL语句创建表;

(3)学习使用SELECT语句查询数据;(4)学习使用SQL语句创建视图。

实验准备

(1)了解表是数据库中最常用的数据存储单元,它包括所有用户可以访问的数据。作为关系型数据库,Oracle表由行和列组成。

(2)视图是一个虚拟的表,它在物理上并不存在。视图可以把表或其它视图的数据按照一定的条件组合起来,所以也可以把它看成是一个存储的查询。视图并不包含数据,它只是从基表中读取数据。

(3)了解使用CREATE TABLE语句创建表的方法。(4)了解使用SELECT语句查询数据的方法。(5)了解使用SQL语句创建视图的方法。

实验内容

本实验主要包括以下内容。

(1)练习使用SQL语句创建表;

(2)练习使用SQL语句向表中插入数据;(3)练习使用SQL语句修改表中的数据;(4)练习使用SQL语句删除表中的数据;(5)练习使用SELECT语句查询数据;(6)练习使用SQL语句创建视图。

1.使用SQL语句创建表

使用CREATE TABLE语句创建用户信息表Users,结构如表1所示。

表1 表Users的结构

号 1 2 3 4 字段名称 UserId UserName UserType UserPwd

数据结构 NUMBER VARCHAR2 40 NUMBER 1 VARCHAR2 40

用户编号 用户名

用户类型(1 管理员用户,2 普通用户)

参照下面的步骤练习使用CREATE TABLE语句创建表Users。

(1)以实验2中创建的UserManAdmin用户登录到SQL*PLUS。(2)使用CREATE TABLE语句创建表Users,代码如下:

CREATE TABLE UserManAdmin.Users(UserId

UserName UserType

Number Primary Key, Varchar2(40)NOT NULL, Number(1),第1部分 Oracle管理技术

UserPwd);Varchar2(40)使用CREATE TABLE语句创建用户登录信息表LoginInfo,结构如表2所示。

表2 表LoginInfo的结构

号 1 2

字段名称 UserId LoginTime

数据结构 NUMBER CHAR(20)

明 用户编号 登录时间

参照下面的步骤练习使用CREATE TABLE语句创建表LoginInfo。(1)以实验2中创建的UserManAdmin用户登录到SQL*PLUS。(2)使用CREATE TABLE语句创建表LoginInfo,代码如下:

CREATE TABLE UserManAdmin.LoginInfo(UserId

LoginTime);Number, CHAR(20)NOT NULL 2.使用SQL语句向表中插入数据

使用INSERT语句向表Users中插入用户数据,内容如表3所示。

表3 表Users中的数据

UserId 1 2 3 4

UserName Admin User Zhangsan Lisi

UserType 2 2 2

UserPwd AdminPwd UserPwd ZhangsanPwd LisiPwd 参照下面的步骤练习使用INSERT语句向表Users中插入数据。(1)以实验2中创建的UserManAdmin用户登录到SQL*PLUS。(2)使用INSERT语句向表Users中插入数据,代码如下:

INSERT INTO UserManAdmin.Users VALUES(1, ‘Admin’, 1, ‘AdminPwd’);INSERT INTO UserManAdmin.Users VALUES(2, ‘User’, 2, ‘UserPwd’);INSERT INTO UserManAdmin.Users VALUES(3, ‘Zhangsan’, 2, ‘ZhangsanPwd’);INSERT INTO UserManAdmin.Users VALUES(4, ‘Lisi’, 2, ‘LisiPwd’);COMMIT;使用INSERT语句向表LoginInfo中插入数据。内容如表4所示。参照下面的步骤练习使用INSERT语句向表LoginInfo中插入数据。(1)以实验2中创建的UserManAdmin用户登录到SQL*PLUS。(2)使用INSERT语句向表LoginInfo中插入数据,代码如下:

INSERT INTO UserManAdmin.LoginInfo VALUES(1, ‘2012-5-15 10:33:02’);INSERT INTO UserManAdmin.LoginInfo VALUES(1, ‘2012-5-16 08:34:13’);INSERT INTO UserManAdmin.LoginInfo VALUES(1, ‘2012-5-17 09:13:11’);INSERT INTO UserManAdmin.LoginInfo VALUES(2, ‘2012-5-15 07:35:02’);INSERT INTO UserManAdmin.LoginInfo VALUES(2, ‘2012-5-16 08:11:54’);INSERT INTO UserManAdmin.LoginInfo VALUES(2, ‘2012-5-17 09:13:11’);INSERT INTO UserManAdmin.LoginInfo VALUES(3, ‘2012-5-15 08:34:02’);INSERT INTO UserManAdmin.LoginInfo VALUES(3, ‘2012-5-16 09:34:13’);

第1部分 Oracle管理技术

INSERT INTO UserManAdmin.LoginInfo VALUES(3, ‘2012-5-17 10:13:09’);INSERT INTO UserManAdmin.LoginInfo VALUES(4, ‘2012-5-15 11:34:02’);INSERT INTO UserManAdmin.LoginInfo VALUES(4, ‘2012-5-16 13:34:13’);INSERT INTO UserManAdmin.LoginInfo VALUES(4, ‘2012-5-17 15:13:12’);COMMIT;

表4 表LoginInfo中的数据

UserId 1 1 1 2 2 2 3 3 3 4 4 4

LoginTime 2012-5-15 10:33:02 2012-5-16 08:34:13 2012-5-17 09:13:11 2012-5-15 07:35:02 2012-5-16 08:11:54 2012-5-17 09:13:11 2012-5-15 08:34:02 2012-5-16 09:34:13 2012-5-17 10:13:09 2012-5-15 11:34:02 2012-5-16 13:34:13 2012-5-17 15:13:12 3.使用SQL语句修改表中的数据

使用UPDATE语句可以修改表Users中的数据。参照下面的步骤练习将表Users中Admin用户的密码修改为AdminPassword。

(1)以SYSTEM用户登录到SQL*PLUS。

(2)使用UPDATE语句将表Users中Admin用户的密码修改为AdminPassword,代码如下:

UPDATE UserManAdmin.Users SET UserPwd=‘AdminPassword’ WHERE UserName=‘Admin’

(3)使用SELECT语句查看用户Admin的密码,代码如下:

SELECT UserPwd FROM UserManAdmin.Users WHERE UserName=‘Admin’

修改表

ALTER TABLE USERMANADMIN.LOGININFO MODIFY(LOGINTIME DATE)4.使用SQL语句删除表中的数据

使用DELETE语句可以删除表Users中的数据。参照下面的步骤练习将表Users中Zhansan用户的记录删除。

(1)以SYSTEM用户登录到SQL*PLUS。

(2)使用DELETE语句将表Users中Zhangsan用户的记录删除,代码如下:

DELETE FROM UserManAdmin.Users WHERE UserName=‘Zhangsan’

(3)使用SELECT语句查看表Users中的数据,确认用户Zhangsan的记录是否被删除,代码如下:

SELECT * FROM UserManAdmin.Users 5.使用SELECT语句查询数据

使用SELECT语句查询数据库中的用户数据,分别按以下方式查询数据库。

第1部分 Oracle管理技术

(1)查询表Users中的所有数据。

以SYSTEM用户登录到SQL*PLUS,然后执行如下代码:

SELECT * FROM UserManAdmin.Users *代表UserManAdmin.Users中的所有字段。(2)在返回结果中使用自定义标题。

以SYSTEM用户登录到SQL*PLUS,然后执行如下代码:

SELECT UserName AS 用户名, UserPwd AS 密码 FROM UserManAdmin.Users(3)设置查询条件。

查询所有普通用户的信息。以SYSTEM用户登录到SQL*PLUS,然后执行如下代码:

SELECT * FROM UserManAdmin.Users WHERE UserType=2 查询用户Admin的密码信息。以SYSTEM用户登录到SQL*PLUS,然后执行如下代码:

SELECT UserPwd FROM UserManAdmin.Users WHERE UserName=‘Admin’

(4)对查询结果进行排序。

查询所有普通用户的信息,并按用户名的降序排列结果集。以SYSTEM用户登录到SQL*PLUS,然后执行如下代码:

SELECT * FROM UserManAdmin.Users ORDER BY UserName DESC(5)对记录进行统计。

统计表Users中共有多少个用户记录。以SYSTEM用户登录到SQL*PLUS,然后执行如下代码:

SELECT COUNT(*)FROM UserManAdmin.Users(6)实现连接查询。

查看每个用户的登录记录。以SYSTEM用户登录到SQL*PLUS,然后执行如下代码:

SELECT u.UserName, 1.LoginTime FROM Users u INNER JOIN LoginInfo 1 ON u.UserId=1.UserID 在上面的SELECT语句中涉及两个表:表Users和表LoginInfo。在FROM子句中,为每个表指定一个别名,表Users的别名为u,表LoginInfo的别名为1。

6.使用SQL语句创建视图

使用CREATE VIEW语句创建用户登录信息表UserLogin,代码如下:

CREATE VIEW UserLogin AS SELECT u.UserName,l.LoginTime

FROM

UserManAdmin.Users

u

INNER

JOIN UserManAdmin.LoginInfo l ON u.UserId=l.UserID;

SELECT * FROM UserLogin;

第1部分 Oracle管理技术

实验4 索引和序列管理

目的和要求

(1)了解索引的概念和作用;(2)了解序列的概念和作用;

(3)学习使用SQL语句创建索引;(4)学习使用SQL语句创建序列。

实验准备

(1)了解索引是对数据库表中一个或多个列的值进行排序的结构。可以利用索引快速访问数据库表中的特定信息。

(2)了解序列号是一个Oracle整数,最多可有38个数字。序列的作用是自动生成整型数值,作为表中标识字段的值。有许多表在创建时定义了一个标识字段,此字段的值需要由系统自动生成,每当插入一条新记录时,此字段的值自动加1。在Oracle中,这个功能由序列来实现。

(3)了解使用CREATE INDEX语句创建索引的方法。

(4)了解使用CREATE SEQUENCE语句创建序列的方法。

实验内容

本实验主要包括以下内容。

(1)练习使用SQL语句创建索引;(2)练习使用SQL语句创建序列;

1.使用SQL语句创建索引

使用CREATE INDEX语句在Users表的UserName字段上创建索引。代码如下:

CREATE INDEX index_username ON UserManAdmin.Users(UserName)TABLESPACE Users;

2.在创建表的同时创建索引

在使用CREATE TABLE语句创建表的同时,可以为指定字段创建索引。创建表Employees,在字段EmpName上创建索引。表Employees的结构如表5所示。

表5 表Employees的结构

号 1 2 3 4

字段名称 EmpId EmpName Sex UserId

数据结构 NUMBER VARCHAR2(50)CHAR(2)NUMBER

明 编号 姓名 性别 用户编号

代码如下:

CREATE TABLE UserManAdmin.Employees(EmpId

EmpName Sex

Number, VARCHAR2(50)UNIQUE, CHAR(2),第1部分 Oracle管理技术

UserId);Number 3.使用SQL语句创建序列

使用CREATE SEQUENCE语句创建序列。序列的最小值为1,并且没有最大值限制。序列的初始值为1,序列间隔为1。代码如下:

CREATE SEQUENCE EMP_S MINVALUE 1 NOMAXVALUE START WITH 1 INCREMENT BY 1 NOCYCLE CACHE 20;2.在插入数据时使用序列

在使用INSERT语句向表Employees中插入数据时,可以使用序列EMP_S生成字段EmpId的值,代码如下:

INSERT INTO UserManAdmin.Employees(EmpId, EmpName)VALUES(EMP_S.NEXTVAL, ‘Employee1’);INSERT INTO UserManAdmin.Employees(EmpId, EmpName)VALUES(EMP_S.NEXTVAL, ‘Employee2’);INSERT INTO UserManAdmin.Employees(EmpId, EmpName)VALUES(EMP_S.NEXTVAL, ‘Employee3’);COMMIT;SELECT * FROM UserManAdmin.Employees

第1部分 Oracle管理技术

实验5 PL/SQL编程

目的和要求

(1)了解PL/SQL语言的结构;

(2)了解PL/SQL变量和常量的声明和使用方法;(3)学习条件语句的使用方法;(4)学习分支语句的使用方法;(5)学习循环语句的使用方法;(6)学习使用Oracle系统函数。

实验准备

首先要了解PL/SQL语言是结构化程序设计语言。块(Block)是PL/SQL程序中最基本的结构,所有PL/SQL程序都是由块组成的。PL/SQL的块由变量声明、程序代码和异常处理代码3部分组成。在PL/SQL中,常量和变量在使用前必须声明,可以使用DECLARE对变量进行声明。

实验内容

本实验主要包括以下内容。

(1)练习条件语句的使用方法;(2)练习分支语句的使用方法;(3)练习循环语句的使用方法;(4)练习使用Oracle系统函数。

1.使用条件语句

参照下面的步骤练习使用条件语句。

(1)以SYSTEM用户登录到SQL*PLUS。(2)执行如下程序,观察结果。

SET ServerOutput ON;DECLARE

Num INTEGER :=-11;BEGIN

IF Num < 0 THEN

dbms_output.put_line(‘负数’);

ELSIF Num > 0 THEN

dbms_output.put_line(‘正数’);

ELSE

dbms_output.put_line(‘0’);

END IF;END;

第1部分 Oracle管理技术

2.使用分支语句

参照下面的步骤练习使用分支语句。

(1)以SYSTEM用户登录到SQL*PLUS。(2)执行如下程序,观察结果。

SET ServerOutput ON;DECLARE

varDAY INTEGER := 3;

Result VARCHAR(20);BEGIN

Result := CASE varDAY

WHEN 1 THEN ‘星期一’

WHEN 2 THEN ‘星期二’

WHEN 3 THEN ‘星期三’

WHEN 4 THEN ‘星期四’

WHEN 5 THEN ‘星期五’

WHEN 6 THEN ‘星期六’

WHEN 7 THEN ‘星期日’

ELSE ‘数据越界’

END;

dbms_output.put_line(Result);END;

第1部分 Oracle管理技术

3.使用循环语句

LOOP…EXIT…END语句:此语句的功能是重复执行循环体中的程序块,直到执行EXIT语句,退出循环。

LOOP…EXIT WHEN…END:此语句的功能是重复执行循环体中的程序块,直到满足EXIT WHEN后面的判断语句时,退出循环。

WHILE…LOOP…END LOOP语句:此语句的功能是当WHILE后面的条件语句成立时,重复执行循环体中的程序块。

参照下面的步骤练习使用循环语句。

(1)以SYSTEM用户登录到SQL*PLUS。(2)执行如下程序,观察结果。

程序一:

SET ServerOutput ON;DECLARE

v_Num INTEGER := 1;

v_Sum INTEGER := 0;BEGIN

LOOP

v_Sum := v_Sum + v_Num;

dbms_output.put_line(v_Num);

IF v_Num = 3 THEN

EXIT;

END IF;

dbms_output.put_line(‘+’);

v_Num := v_Num + 1;

END LOOP;

dbms_output.put_line(‘=’);

dbms_output.put_line(v_Sum);END;

程序二:

SET ServerOutput ON;DECLARE

v_Num INTEGER := 1;

v_Sum INTEGER := 0;BEGIN

LOOP

v_Sum := v_Sum + v_Num;

第1部分 Oracle管理技术

dbms_output.put_line(v_Num);

EXIT WHEN v_Num = 3;

dbms_output.put_line(‘+’);

v_Num := v_Num + 1;

END LOOP;

dbms_output.put_line(‘=’);

dbms_output.put_line(v_Sum);END;

程序三:

SET ServerOutput ON;DECLARE

v_Num INTEGER := 1;

v_Sum INTEGER := 0;BEGIN

WHILE v_Num <=3

LOOP

v_Sum := v_Sum + v_Num;

dbms_output.put_line(v_Num);

IF v_Num < 3 THEN

dbms_output.put_line(‘+’);

END IF;

v_Num := v_Num + 1;

END LOOP;

dbms_output.put_line(‘=’);

dbms_output.put_line(v_Sum);END;

第1部分 Oracle管理技术

4.使用系统函数(1)数值型函数

·ABS:返回给定数字表达式的绝对值。

·CEIL:返回大于或等于所给数字表达式的最小整数。·FLOOR:返回小于或等于所给数字表达式的最大整数。·POWER:返回给定表达式指定次方的值。

·ROUND:返回数字表达式并四舍五入为指定的长度或精度。(2)字符型函数

·ASCII:返回字符表达式最左端字符的ASCII代码值。·LENGTH:返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。·UPPER:返回将小写字符数据转换为大写的字符表达式。(3)日期型函数

·SYSDATE:返回当前日期和时间。·TO_CHAR:转换日期为字符串。

·LAST_DAY:返回指定日期所在月份的最后一天的日期。这个函数可以被用来确定当前月中还剩下多少天。

·MONTHS_BETWEEN:返回两个日期之间月的数目。(4)统计函数

·COUNT:返回组中项目的数量。·MAX:返回表达式的最大值。·MIN:返回表达式的最小值。

参照下面的步骤练习使用系统函数。

(1)以SYSTEM用户登录到SQL*PLUS。(2)执行如下程序,观察结果。

程序一:

SET ServerOutput ON;BEGIN

dbms_output.put_line(ABS(-4));END;

程序二:

SET ServerOutput ON;BEGIN

dbms_output.put_line(CEIL(116.24));

dbms_output.put_line(CEIL(-112.75));

dbms_output.put_line(CEIL(0));END;

第1部分 Oracle管理技术

程序三:

SET ServerOutput ON;BEGIN

dbms_output.put_line(FLOOR(116.24));

dbms_output.put_line(FLOOR(-112.75));

dbms_output.put_line(FLOOR(0));END;

程序四:

SET ServerOutput ON;BEGIN

dbms_output.put_line(POWER(15, 4));END;

程序五:

SET ServerOutput ON;BEGIN

dbms_output.put_line(ROUND(123.456, 2));

dbms_output.put_line(ROUND(123.456, 1));

dbms_output.put_line(ROUND(123.456, 0));

dbms_output.put_line(ROUND(123.456,-1));

dbms_output.put_line(ROUND(123.456,-2));

dbms_output.put_line(ROUND(123.456,-3));END;

程序六:

SET ServerOutput ON;BEGIN

dbms_output.put_line(ASCII(‘ABC’));END;

第1部分 Oracle管理技术

程序七:

SELECT UserName, LENGTH(UserName)FROM UserManAdmin.Users WHERE UserType = 1;程序八:

SET ServerOutput ON;BEGIN

dbms_output.put_line(UPPER(‘abc’));END;

程序九:

SET ServerOutput ON;BEGIN

dbms_output.put_line(SYSDATE);END;

程序十:

SET ServerOutput ON;BEGIN

dbms_output.put_line(TO_CHAR(SYSDATE));END;

程序十一:

SET ServerOutput ON;BEGIN

dbms_output.put_line(LAST_DAY(SYSDATE));END;

第1部分 Oracle管理技术

程序十二:

SET ServerOutput ON;DECLARE

date1 VARCHAR(20):= ‘2010-05-17’;

date2 VARCHAR(20):= ‘2010-10-17’;BEGIN

dbms_output.put_line(END;

MONTHS_BETWEEN(TO_DATE(date2,‘yyyy-mm-dd’), TO_DATE(date1, ‘yyyy-mm-dd’)));

程序十三:

SELECT COUNT(UserName)FROM UserManAdmin.Users;

程序十四:

SELECT MAX(UserId)FROM UserManAdmin.Users;

程序十五:

SELECT MIN(UserId)FROM UserManAdmin.Users;

第1部分 Oracle管理技术

实验6 使用游标、存储过程和触发器

目的和要求

(1)了解游标的概念和工作原理;(2)了解存储过程的分类和使用方法;(3)了解触发器的概念;

(4)学习编写和执行自定义过程;(5)学习编写和执行自定义函数;(6)学习创建和使用触发器。

实验准备

首先要了解游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了。将游标放置到某行后,即可对该行数据进行操作,最常见的操作是提取当前行数据。

了解PL/SQL包括3种存储过程,即过程、函数和程序包。

了解触发器是一种特殊的存储过程,当指定表中的数据发生变化时自动运行。

实验内容

本实验主要包括以下内容。

(1)练习创建和使用游标的方法;

(2)练习编写和执行自定义过程的方法;(3)练习编写和执行自定义函数的方法;(4)练习创建和使用触发器的方法。

1.创建和使用游标

创建游标MyCursor,从表LoginInfo中读取指定用户的登录信息,操作步骤如下:(1)以UserManAdmin用户登录到SQL*PLUS。(2)执行如下程序:

/*打开显示模式*/ SET ServerOutput ON;DECLARE

CURSOR Mycursor(varUserName VARCHAR2)IS

SELECT u.UserName,l.LoginTime

FROM

UserManAdmin.Users

u, UserManAdmin.LoginInfo l

WHERE u.UserId =l.UserId;BEGIN

FOR var_LoginRecord IN MyCursor(‘Admin’)LOOP

dbms_output.put_line(‘用户名:’ || var_LoginRecord.UserName || ‘, 登录时间:’ || var_LoginRecord.LoginTime);

END LOOP;END;

第1部分 Oracle管理技术

2.编写和执行自定义过程

参照下面的步骤练习编写和执行自定义过程:(1)以UserManAdmin用户登录到SQL*PLUS。(2)执行如下程序,观察结果。

/*创建示例过程ResetPwd,此过程的功能是将表User中指定用户的密码重置为111111*/ CREATE OR REPLACE PROCEDURE UserManAdmin.ResetPwd(u_UserId IN NUMBER)AS BEGIN UPDATE UserManAdmin.Users SET UserPwd = ‘111111’ WHERE UserId = u_UserId;END;

/*使用EXEXUTE命令可以调用过程。如,要将编号为1(用户Admin)的用户密码重置*/ EXECUTE UserManAdmin.ResetPwd(1);SELECT UserName, UserPwd FROM Users;

第1部分 Oracle管理技术

/*使用DROP PROCEDURE命令可以删除过程*/ DROP PROCEDURE UserManAdmin.ResetPwd;

3.编写和执行自定义函数

参照下面的步骤练习编写和执行自定义函数GetLastLogin,获取指定用户最后一次登录的时间。

(1)以SYSTEM用户登录到SQL*PLUS。(2)执行如下程序:

CREATE OR REPLACE FUNCTION GetLastLogin(n_name IN UserManAdmin.Users.UserName%Type)RETURN UserManAdmin.LoginInfo.LoginTime%Type AS outTime UserManAdmin.LoginInfo.LoginTime%Type;BEGIN

SELECT MAX(l.LoginTime)INTO outTime FROM UserManAdmin.Users u join UserManAdmin.LoginInfo l on u.UserId = l.UserId

WHERE u.UserName = ‘’|| n_name ||’’

ORDER BY l.LoginTime DESC;

RETURN outTime;END;

4.创建和使用触发器

参照下面的步骤创建一个触发器MyTrigger,它的作用是当表Users中的记录被删除后,自动删除表LoginInfo中对应的用户登录记录,从而保证数据的完整性。

(1)以SYSTEM用户登录到SQL*PLUS。(2)执行如下程序,观察结果。

CREATE OR REPLACE TRIGGER UserManAdmin.MyTrigger AFTER DELETE ON UserManAdmin.Users FOR EACH ROW BEGIN

DELETE FROM UserManAdmin.LoginInfo WHERE UserId = :old.UserId;END;

第1部分 Oracle管理技术

(3)执行下面的语句,观察删除用户Users后,在表LoginInfo中是否还存在其登录的记录。

DELETE FROM UserManAdmin.Users WHERE UserName =’User’;

SELECT * FROM UserManAdmin.LoginInfo

第1部分 Oracle管理技术

实验7 表空间管理

目的和要求

(1)了解表空间的概念和工作原理;

(2)学习创建、修改、查询和删除用户表空间;

(3)学习创建、修改、查询、切换和删除撤销表空间。

实验准备

首先要了解表空间是Oracle数据库最高层次的逻辑存储结构,其中保存着由段、区和块等逻辑存储结构描述的各种模式对象。

Oracle表空间分为系统表空间、临时表空间、撤销表空间和用户表空间4种类型。用户表空间主要用来保存用户数据,其包含的数据文件称为用户数据文件,是DBA管理的主要表空间。

保存撤销记录的存储空间是撤销表空间。利用撤销表空间可以实现撤销事务、数据库恢复和数据的读一致性等功能。

实验内容

本实验主要包括以下内容。

(1)练习创建和使用用户表空间的方法;(2)练习创建和使用撤销表空间的方法。

1.创建本地管理方式的用户表空间

为Oracle数据库新建一个用户表空间,该表空间中包括2个数据文件,区的分配管理方式为AUTOALLOCATE或UNIFORM,段的存储管理方式为MANUAL或AUTO。操作步骤如下:

(1)在SQL*Plus中执行CREATE TABLESPACE语句创建新的用户表空间,并通过查询V$TABLESPACE视图查看新建用户表空间情况。

Create tablespace newspace Datafile ‘D:oracleoradatanew01.dbf’ size 10m

第1部分 Oracle管理技术

(2)通过OEM控制台创建新的临时表空间,并查看新建用户表空间情况。

2.创建本地管理方式的临时表空间

为Oracle数据库新建一个临时表空间,该表空间中包括1个数据文件,并设置该表空间为默认临时表空间。操作步骤如下:

(1)在SQL*Plus中执行CREATE TEMPORARY TABLESPACE语句创建新的临时表空间,设置该表空间为默认临时表空间,并通过查询V$TABLESPACE视图查看新建临时表空间情况。

CREATE TEMPORARY TABLESPACE newtemp tempfile 'D:oracleoradatanewtemp01.dbf' size 10m;

select * from V$tablespace;

(2)通过OEM控制台创建新的临时表空间,设置该表空间为默认临时表空间,并查看新建临时表空间情况。

3.改变表空间的可用性

将新建的用户表空间设置为脱机状态,之后再将其改为联机状态。操作步骤如下:(1)在SQL*Plus中执行ALTER TABLESPACE语句设置表空间为脱机状态,并通过查询DBA_TABLESPACES视图查看表空间的状态,之后再执行ALTER TABLESPACE语句设置表空间为联机状态。

Alter tablespace newspace Add datafile ‘D:oracleoradatanew02.dbf’ size 10m

第1部分 Oracle管理技术

(2)通过OEM控制台设置表空间为脱机状态或联机状态,并查看修改之后的表空间状态。

4.删除表空间

删除无用的表空间及其在磁盘上的数据文件。操作步骤如下:

(1)在SQL*Plus中执行DROP TABLESPACE语句删除表空间及其在磁盘上的数据文件。

Drop tablespace newspace;

(2)通过OEM控制台删除表空间及其在磁盘上的数据文件。

5.查询表空间的各种信息

查询表空间的各种信息。操作步骤如下:(1)在SQL*Plus中查询V$TABLESPACE、DBA_TABLESPACES、DBA_SEGMENTS、DBA_EXTENTS、DBA_FREE_SPACE、V_$DATAFILE和V$TEMPFILE动态性能视图获得表空间的信息。

(2)在OEM控制台中查询表空间的信息。

6.创建撤销表空间

在数据库建立后创建一个撤销表空间,并设置该表空间为默认撤销表空间。操作步骤如

第1部分 Oracle管理技术

下:

(1)在SQL*Plus中执行CREATE UNDO TABLESPACE语句创建一个撤销表空间,并执行ALTER SYSTEM语句修改初始化参数UNDO_TABLESPACE,设置该撤销表空间为默认撤销表空间。

CREATE UNDO TABLESPACE undotb datafile 'D:oracleoradataundotb01.dbf' size 2m reuse;

(2)通过OEM控制台向某一撤销表空间中添加新的数据文件,并查看新的数据文件情况。

7.查询撤销表空间的各种信息

查询表空间的各种信息。操作步骤如下:

(1)在SQL*Plus中查询V$UNDOSTAT、V$ROLLSTAT、V$TRANSACTION、DBA_UNDO_EXTENTS动态性能视图获得撤销表空间的信息。

select * from V$tablespace;

(2)利用V$UNDOSTAT动态性能视图计算撤销表空间所需要的存储空间。

第1部分 Oracle管理技术

实验8 文件管理

目的和要求

(1)了解初始化参数文件、控制文件、重做日志文件和数据文件的概念;(2)学习创建和使用初始化参数文件;

(3)学习创建、备份、查询和删除控制文件;(4)学习创建和使用重做日志文件;

(5)学习添加、移动、查询和删除数据文件。

实验准备

首先要了解初始化参数文件是Oracle实例运行所需的参数配置文件,Oracle数据库的物理结构、实例中的内存结构,以及启动后台进程的种类和数量等参数,都需要在初始化参数文件中设置,是数据库运行和性能调整的重要文件。初始化参数文件分为两类:PFILE和SPFILE。PFILE是文本形式的初始化参数文件,可以利用任何文本编辑器对它进行查看或编辑。SPFILE的作用同PFILE一样,但是该文件是二进制的,无法用文本编辑器查看或修改。

控制文件是一个非常小的二进制文件,其中存放有Oracle数据库物理结构(数据文件和重做日志文件等)的信息,是Oracle启动和运行必备的文件。

重做日志文件中保存着事物对数据库进行的修改的重做项,是数据库进行恢复的必要部分。重做日志文件分为联机重做日志文件和归档重做日志文件。

数据文件是Oracle主要的物理存储结构之一。一个表空间可以有多个数据文件,一个数据文件只属于一个表空间。数据文件可分成系统数据文件、撤销数据文件、临时数据文件和用户数据文件。

实验内容

本实验主要包括以下内容。

(1)练习创建和使用初始化参数文件;(2)练习创建和使用控制文件;(3)练习创建和使用重做日志文件;(4)练习添加和使用数据文件。

1.创建初始化参数文件

创建PFILE和SPFILE文件。操作步骤如下:

(1)找到已有的PFILE文件,使用COPY或者在Windows资源管理器中使用复制/粘贴功能,创建一个新的PFILE文件。

(2)使用CREATE PFILE FROM SPFILE命令创建一个新的PFILE文件。

第1部分 Oracle管理技术

(3)利用OEM创建一个新的PFILE文件。

(4)使用CREATE SPFILE FROM PFILE命令创建一个新的SPFILE文件。create spfile='D:oracleora92databaseininew01.ora' pfile='D:oracleadminBIPT921pfile init.ora.23201322748';

from

(5)利用OEM创建一个新的SPFILE文件。

2.修改初始化参数

修改SPFILE文件中的初始化参数。操作步骤如下:

(1)在SQL*Plus中使用动态性能视图V$SYSTEM_PARAMETER查看初始化参数值和属性。

(2)使用ALTER SYSTEM SET 参数名=参数值 SCOPE=SPFILE | MEMORY | BOTH

第1部分 Oracle管理技术

命令修改其中的动态或静态的初始化参数。

(3)再使用动态性能视图V$SYSTEM_PARAMETER或在OEM中查看初始化参数值是否被修改。

(4)或者在OEM中修改其中的初始化参数,并查看初始化参数值和属性。3.备份控制文件

为Oracle数据库备份一个控制文件。操作步骤如下:

(1)使用ALTER DATABASE BACKUP CONTROLFILE TO命令备份控制文件。

(2)在OEM控制台中备份控制文件。

4.查询控制文件信息

查询控制文件中的各种信息。操作步骤如下:(1)在SQL*Plus中查询V$CONTROLFILE、V$CONTROLFILE_RECORD_SECTION、V$PARAMETER动态性能视图获得控制文件的基本信息和记录文档段信息。

第1部分 Oracle管理技术

(2)在OEM控制台中查询控制文件的基本信息和记录文档段信息。

5.创建多路联机重做日志文件组

为Oracle数据库新建一个联机重做日志组,该组包含2个成员。操作步骤如下:(1)使用SYSDBA身份登录SQL*Plus。

(2)查询V$LOGLFILE视图,了解目前的重做日志文件组情况。

(3)执行ALTER DATABASE ADD LOGFILE命令增加一个重做日志文件组,该组包含2个成员。

(4)重新查询V$LOGLFILE视图,查看新建重做日志文件组情况。

6.使用LogMiner Viewer工具对重做日志文件进行分析

使用LogMiner Viewer工具分析重做日志文件,获得指定用户在规定的时间段内对数据库所进行的更改。操作步骤如下:

(1)启动OEM控制台,登录Oracle管理服务器。(2)启动LogMiner Viewer。(3)设置查询条件。

(4)执行并分析查询结果。(5)保存分析结果。

7.向表空间中添加数据文件

向表空间中添加一个新的数据文件。操作步骤如下:(1)在SQL*Plus中使用ALTER TABLESPACE...ADD DATAFILE语句向某一表空间中添加一个数据文件,并通过查询DBA_DATA_FILES视图查看新建数据文件的情况。

ALTER TABLESPACE dtf add datafile 'D:oracleadminBIPT921pfileinit.ora.23201322748' size 10m reuse;

第1部分 Oracle管理技术

(2)通过OEM控制台添加新的数据文件,并查看新的数据文件情况。

8.移动单个数据文件

将表空间中某个数据文件从一个物理磁盘移动到另一个磁盘。操作步骤如下:

(1)在SQL*Plus中使用ALTER TABLESPACE语句将包含有需要移动数据文件的表空间脱机。

ALTER TABLESPACE dtf offline;

(2)在操作系统中,将数据文件复制到另一个磁盘上。

(3)使用ALTER TABLESPACE语句对表空间中的数据文件重命名。alter tablespace XDB rename datafile'XDB01.DBF'to'XDB02.DBF'(4)使用ALTER TABLESPACE语句重新使该表空间联机。ALTER TABLESPACE dtf online;

(5)通过查询DBA_DATA_FILES视图获得移动后的数据文件信息。9.删除数据文件

删除无用的数据文件。操作步骤如下:

(1)在SQL*Plus中使用ALTER DATABASE语句删除某一数据文件。

(2)通过OEM控制台删除某一数据文件。

10.查询数据文件的各种信息

查询数据文件的各种信息。操作步骤如下:

第1部分 Oracle管理技术

(1)在SQL*Plus中查询DBA_DATA_FILES、DBA_EXTENTS、DBA_FREE_SPACE、V$DATAFILE、V$DATAFILE_HEADER动态性能视图获得数据文件的信息。

(2)在OEM控制台中查询数据文件的信息。

第2部分 Oracle开发技术

第2部分 Oracle开发技术

设计目的

利用所学的有关数据库设计知识,设计一个基于Oracle数据库的信息管理系统。通过该部分的操作与实践,使学生能够在完成第一部分任务的基础上,进一步巩固Oracle数据库应用的方法和技术,提高基于Oracle数据库的应用程序综合设计能力。

设计任务

 数据库设计:

(1)通过对应用系统的数据库需求分析,确定系统的服务范围,绘制系统业务流程图,设计系统功能和绘制系统功能图,设计数据流图和数据字典;

(2)采用自底向上的方法设计E-R图;

(3)依据关系规范化原则设计应用系统数据库全局关系模式;(4)依照数据库全局关系模式设计数据库中各表的表结构。 界面设计:(1)数据库准备;

(2)创建工程并添加所需控件;(3)主要功能模块的界面设计。

设计题目

1.图书管理系统

图书管理系统包括对所有图书基本信息的维护,实现图书管理的需求,包括图书档案、图书查询、图书资料统计和图书借阅、归还等功能。

图书管理系统读者信息用户图书信息管理图书借阅管理读者号读者名已借数量最大借阅数量用户名密码ISBN书名作者出版社数量图书借阅图书归还

第2部分 Oracle开发技术

建立角色:

CREATE ROLE br IDENTIFIED BY asd;GRANT CONNECT TO br;GRANT RESOURCE TO br;

建立用户:

CREATE USER Book IDENTIFIED BY asd DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;授权:

GRANT UNLIMITED TABLESPACE TO Book;GRANT br TO Book;

建立bookusers表

CREATE TABLE Book.BookUsers(UserId Number Primary Key, UserName Varchar2(40)NOT NULL, UserType Number(10), UserPwd Varchar2(40));

create table book.reader

第2部分 Oracle开发技术

(reader_id varchar(20)primary key, reader_name varchar(20), maxlend int, alreadylen int)

create table borrow(reader_id varchar(20), ISBN varchar(20), lendtime date, returntime date, primary key(reader_id,ISBN))foreign key(reader_id)references book.reader(reader_id), foreign key(ISBN)references book(ISBN)

插入数据:

INSERT INTO Book.BookUsers VALUES(1, ‘shang’, 1, ‘123’);INSERT INTO Book.BookUsers VALUES(2, ‘zhang’, 2, ‘456’);

INSERT INTO Book.BookUsers VALUES(3, ‘shangjingwei’, 2, ‘asd123’);INSERT INTO Book.BookUsers VALUES(4, ‘zhanghongkai’, 2, ‘asd123’);COMMIT;

第2部分 Oracle开发技术

//创建序列

CREATE SEQUENCE userid MINVALUE 1 NOMAXVALUE START WITH 1 INCREMENT BY 1 NOCYCLE NOCACHE

//触发器创建

CREATE OR REPLACE TRIGGER Book.NewMyTrigger before Insert ON Book.BookUsers FOR each row begin select userid.nextval into :new.userid from dual;END;

string cmdString = “insert into Book.BookUsers(UserId,UserName,UserPwd)(xl_1.nextval,'” + student_numer.Text + “','” + password.Text + “')”;登录窗口:

values 第2部分 Oracle开发技术

String oraString = “ Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=BOOK)));User ID=system;Password=asd”;//数据库连接语句

查询图书:

String bookname = “";String bookisbn = ”“;String bmark = ”“;if(textBox1.Text!= ”“)bookisbn =(”ISBN = '“ + textBox1.Text + ”'“);if((textBox2.Text!= ”“)&&(textBox1.Text!= ”“))bookname =(”AND book_name='“ + textBox2.Text + ”'“);else if(textBox2.Text!= ”“)bookname =(”book_name='“ + textBox2.Text + ”'“);bmark = bookname + bookisbn;

if(radioButton2.Checked){ //添加精确查询的代码 if(bmark!= ”“)dataCommand.CommandText = ”SELECT * FROM book.book WHERE “ + bmark;else if(bmark == ”“)

第2部分 Oracle开发技术

MessageBox.Show(”请输入查询数据!“);} else if(radioButton1.Checked){ if(textBox1.Text!= ”“)MessageBox.Show(”不支持ISBN的模糊查询!“);else { //添加模糊查询的代码 if(textBox2.Text!= ”“){ bookname =(”书名 like '%“ + textBox2.Text + ”%'“);dataCommand.CommandText = ”SELECT * FROM book.book WHERE “ + bookname;} else//查询所有图书 { dataCommand.CommandText = ”SELECT * FROM book.book“;} } } else MessageBox.Show(”请选择查询方式!“);

OracleDataReader dataReader = dataCommand.ExecuteReader();

第2部分 Oracle开发技术

BindingSource bs = new BindingSource();bs.DataSource = dataReader;this.dataGridView1.DataSource = bs;if(dataReader.Read()){ lnum = dataReader.GetInt32(3);ynum = dataReader.GetInt32(6);} dataConnection.Close();}

SqlConnection dataConnection;//数据库连接类 SqlCommand dataCommand;//数据库命令类

读者信息:

dataConnection.Open();

dataCommand.CommandText = ”SELECT * FROM book.reader WHERE reader_id='“ + uID + ”'“;OracleDataReader dataReader = dataCommand.ExecuteReader();

第2部分 Oracle开发技术

BindingSource bs = new BindingSource();bs.DataSource = dataReader;this.dataGridView4.DataSource = bs;dataReader.Close();dataConnection.Close();

maxnum =(int)dataGridView4.Rows[0].Cells[”maxlend“].Value;dnum =(int)dataGridView4.Rows[0].Cells[”alredylend“].Value;ymaxnum =(int)dataGridView4.Rows[0].Cells[”maxyuyue“].Value;ydnum =(int)dataGridView4.Rows[0].Cells[”yiyuyue“].Value;}

还书:

dataConnection.Open();String bookisbn;bookisbn = textBox5.Text;if(bookisbn!= ”“){ dataCommand.CommandText = ”DELETE FROM book.borrow WHERE ISBN='“ + bookisbn + ”'“;dataCommand.ExecuteNonQuery();dataCommand.CommandText = ”UPDATE book SET incount=incount+1 WHERE ISBN='“ + bookisbn + ”'“;

第2部分 Oracle开发技术

dataCommand.ExecuteNonQuery();dataCommand.CommandText = maxyuyue=maxyuyue-1 WHERE ISBN='” + bookisbn + “'”;dataCommand.ExecuteNonQuery();dataCommand.CommandText = “UPDATE alredylend=alredylend-1 WHERE reader_id='” + uID + “'”;dataCommand.ExecuteNonQuery();textBox5.Text = “";MessageBox.Show(”归还成功!“);dnum--;

实验总结:

通过这次课程设计,我收获了很多,对oracle数据库从一片空白到现在的有所了解。界面设计和代码用的是C#通过本次课程设计,我们对数据库的应用有了更深刻的体会。网络系统都是离不开数据库的支持的。数据库设计的是否合理,直接影响到系统的性能。数据库理论对于实际应用有很大的指导意义。

本次课程设计的名称是图书管理系统,由于我们能力有限,加之近期课程任务比较紧迫,所以我们负责的这个项目还有许多不完善的地方。可以说我们的这次系统是做的比较丑陋,功能还有很多不完善的地方。但是总的来说还是收获很大的,因为通过这次的团队合作,首先对数据库和C#有了进一步的了解,并且深深体会到团队合作的重要性,还有合理的团队分工是非常重要的。并且能在最后将前台程序和后台数据库连接起来运行,也对我们是一个比较大的挑战,而且我们也成功的做到了这一点。本次的图书管理系统,在功能上仅实现了图书,用户,图书类别和用户的注册管理,只是一些非常基础的功能,没有设计添加图书的功能。此外,该系统原先计划设计的一些功能也没有实现。系统完全实现的功能实现图书信息的删除、更改和查看等。

最后也非常感谢向胜军老师对我们本次课程设计的指导及最后验收的评价。我们也会吸取本次设计经验,为以后的设计继续努力。

reader

SET

”UPDATE

book

SET

第二篇:Oracle数据库 图书管理系统实验报告

图书管理系统(Oracle)

1、创建表空间student_library

2、(1)创建表Administrator

(2)创建表library

(3)创建表student

(4)创建表lent_library

(5)创建表booktype

3、(1)创建表空间student_library

create tablespace student_library datafile 'C:oracleproduct10.2.0oradataorclstudent_library' size 100M autoextend on;

(2)创建表Administrator create table Administrator(AdministratorID number(20)primary key,AdministratorName varchar2(25),sex varchar2(5),beizhu varchar2(30),bookID varchar2(20), foreign key(bookID)references library(bookID))tablespace student_library;

向Administrator表插入数据 insert into Administrator values(100421101,'张三','男',' ',100421)insert into Administrator values(100421102,'李四','女',' ',100422)insert into Administrator values(100421103,'王五','男',' ',100423)对Administrator表删除数据

delete from Administrator where AdministratorID=100421103 ——删除Administrator表中管理员编号为‘100421103’的一行数据 对Administrator表查询数据

select * from Administrator order by AdministratorID ——按照管理员的ID号对Administrator表进行排列 向Administrator表修改数据

update Administrator set AdministratorName=‘王明’where AdministratorID=100421101 ——对Administrator表中管理员编号为‘100421101’的姓名改为“王明” update Administrator set sex=‘女’where AdministratorID=100421103 ——对Administrator表中管理员编号为‘100421103’的性别改为“女”(3)创建表library create table library(bookID number(20)primary key,bookName varchar2(20),author varchar2(10),press varchar2(20),publishDate varchar2(50),price number(20),leibienumber number(20),state varchar2(8),studentID number(20),foreign key(studentID)references student(studentID))tablespace student_library;

向library表插入数据 insert into library

values(100421,'Oracle数据库管理','马晓玉','清华大学出版社','2011-11-8',40,'013999',' ',100421203)insert into library

values(100422,'ASP.NET网站设计','唐慧','南京大学出版社','2011-5-18',32,'165923',' ',100421205)insert into library

values(100423,'JavaScript程序设计','徐元','苏州大学出版社','2011-2-12',28,'265894',' ',100421207)对library表删除数据

delete from library where bookID=100422 ——删除library表中书籍编号为‘100422’的一行数据 向library表查询数据

select bookID,bookName,author,press,publishDate,price from library order by bookID ——查询library表中的bookID,bookName,author,press,publishDate,price的数据根据书籍的编号进行排序

向library表修改数据

update library set author=‘张敏’where bookID=100422 ——对library表中书籍编号为‘100422’的作者改为“张敏”

(4)创建表student create table student(studentID number(20)primary key,studentName varchar2(50),sex varchar2(2),department varchar2(10),studentPhone number(15),borrowID number(20),password number(10))tablespace student_library;

向student表插入数据 insert into student values(100421203,'王逸','男','信电系','***','123456','521568')insert into student values(100421205,'刘娟','女','食品系','***','256302','269756')insert into student values(100421207,'张一凡','男','园林园艺系','***','687456','305621')对student表删除数据

delete from student where studentName=‘张一凡’

——删除student表中学生姓名为‘张一凡’的一行数据 向student表修改数据

update student set department=‘经贸系’where studentID=100421205 ——对student表中学生学号为‘100421205’的系部名称改为“经贸系”

(5)创建表lent_library create table lent_library(lentID number(20)primary key,bookID number(20),borrowbookID number(20),borrowDate varchar2(50),borrowState varchar2(30),foreign key(bookID)references library(bookID))tablespace student_library;

向lent_library表插入数据 insert into lent_library values(12345,'100421','1360','2012-3-15','还未归还')insert into lent_library values(21350,'100422','2035','2012-1-6','已经归还')insert into lent_library values(13056,'100423','1503','2012-3-22','还未归还')向lent_library表删除数据 delete from lent_library where bookID=‘100423’

——删除lent_library表中书籍编号为‘100423’的一行数据 向lent_library表查询数据

select lentID,bookID,borrowbookID,borrowState from lent_library where bookID=‘10042%’ ——查询lent_library表中的lentID,bookID,borrowbookID,borrowState数据根据书籍编号前五位数位‘10042’进行排序

(6)创建表booktype create table booktype(Leibienumber number(20)primary key,booktype varchar2(20))tablespace student_library;

向booktype表插入数据 insert into booktype values('4630','文学类')insert into booktype values('1623','科普类')insert into booktype values('2412','理工科类')向booktype表删除数据

delete from booktype where leibienumber=‘1623’

——删除booktype表中类别编号为‘1623’的一行数据 向booktype表修改数据

update booktype set booktype=‘计算机类’where leibienumber=‘2412’ ——对booktype表中类别编号为‘2412’的书籍类型改为“计算机类”

4、(1)创建索引

【1】create index AdministratorID _index on Administrator(AdministratorID)tablespace users;

—在Administrator表的AdministratorID列创建一个名为Aid_index的索引

【2】create bitmap index studentName_index on student(studentName)tablespace users;—在student表的学生姓名列上创建位图索引

(2)创建视图

create or replace view view_library as select bookID,bookName,author,press,publishDate,price from library;—创建视图view_library,查询library表中的bookID,bookName,author,press,publishDate,price

5、(1)创建匿名块

set serveroutput on declare out_text varchar2(50);begin out_text:='程序块示例';dbms_output.put_line(out_text);exception when others then dbms_output.put_line('捕获一个异常');end;

(2)创建存储过程

create or replace procedure InsertAdministrator as begin insert into Administrator(AdministratorID,administratorName,sex)values(100421105,'李凡','男');exception when dup_val_on_index then

dbms_output.put_line('重复的编号');when others then

dbms_output.put_line('发生其他错误!');end InsertAdministrator;—创建一个存储过程InsertAdministrator,向Administrator表的AdministratorID,administratorName和sex列分别插入数据100421105,李凡和男三个值。

(3)创建函数

create or replace function Factorial(n in number)return number as result number: =1;begin for i in 1...n loop result: =result*i;end loop;return(result);end Factorial;(4)创建触发器 create table student_log(studentID number(20),studentName varchar2(50),sex varchar2(2),department varchar2(10));—创建一个日志表,记录对student表所做的修改,日志表名为student_log create or replace trigger insertlog_trigger after insert on student begin insert into student_log values(100421230,'路奇', '女', '园林系');end;—在student表上创建一个语句级Insert触发器

6、用户权限和角色管理

(1)创建用户user_student create user user_student identified by student default tablespace student_library

(2)为用户user_student设置系统权限 grant create session to user_student;

(3)为用户user_student撤销系统权限

revoke create session from user_student;

(4)创建角色user_library

create role user_library identified by student

(5)为角色user_library授予权限

grant user_library to public;

(6)启用角色user_library

set role user_library identified by student

第三篇:图书管理系统 数据结构 课程设计

《数据结构》

课程设计报告书

一.课程设计题目

图书借阅管理系统

二.课程设计内容

实现图书管理信息系统的设计

(一)管理员功能:

①登录:输入管理员密码,若密码错误则不得执行管理员操作。

②添加新书:增加新的图书资料,同时需检查新书的图书编号是否已存在于原图书资料中,若已存在则应取消添加或提示重新输入。

③修改图书:通过编号查询该图书资料,若该编号存在,则显示已有信息,允许修改,否则提示 无该图书信息。

④删除图书:通过编号查询该图书资料,若该编号存在,则显示已有信息,允许删除,否则提示无该图书信息。删除对象包括该图书资料以及“图书状态”和“借阅人”中与此书相关的所有记录。

⑤查找图书:

A.按书号查找:通过编号查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。

B.按书名查找:通过书名查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。

C.按作者查找:通过作者查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。

⑥查看全部图书:显示所有图书资料,包括书号、书名、作者、状态和借阅人等信息。

⑦修改读者:通过姓名查询该读者信息,若该姓名存在,则显示已有信息,允许修改,否则提示无该读者信息。

⑧删除读者:通过姓名查询该读者信息,若该姓名存在,则显示已有信息,允许删除,否则提示无该读者信息。删除对象包括该读者姓名、班级、电话以及“图书状态”和“借阅人”中与此人相关的所有记录。

⑨查看所有读者:显示所有读者资料,包括姓名、班级、电话等信息。

(二)读者功能:

①登录:输入读者姓名,若未经注册则不得进入读者服务界面。②注册:新用户经注册方可登录系统并使用读者服务功能。③借书:

A.输入所需图书编号,判断该编号是否存在,若不存在则提示重新输入。

B.若所输入图书编号存在,则判断该书籍是否已被借出,若已借则不允许执行借书操作。

C.若所输入图书未借,则提示输入读者姓名,判断所输入读者姓名是否存在,若不存在则提示重新输入。D.若读者姓名存在,则允许执行借书操作。

E.借书处理包括在“图书状态”中加上“已借”标记。④还书:

A.输入所借书编号,判断该编号是否存在,若不存在则提示重新输入。B.判断该书是否已借出,若未借则不允许执行还书操作。C.借书处理包括在“图书状态”中加上“未借”标记。⑤查询图书:

A.按书号查找:通过编号查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。

B.按书名查找:通过书名查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。

C.按作者查找:通过作者查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。

⑥查看借阅情况:输入读者姓名,若该姓名不存在则提示重新输入,若该姓名存在则显示该读者借阅信息。

三.算法设计

1.流程图(部分示例)

①管理员登录

②读者登录

③读者借阅图书

④管理员或读者按书名查找图书

2.代码实现

#include #include

#include #include //文件流 #include #define BookFile “book.txt”

//将字符串BookFile替换原文件中的宏名称book #define ReaderFile “reader.txt” using namespace std;//**********读者结构体,用于存放读者基本信息********** class Reader {

private:

char rname[10];

char rclass[10];

char rtel[10];public:

Reader()//构造函数,实现数据初始化

{strcpy(rname,“");strcpy(rclass,”“);strcpy(rtel,”“);} //初始化

void set_rname(char *rn)//设置读者姓名

{strcpy(rname,rn);} //将rn的字符复制给rname

char * get_rname()//获得读者姓名

{return rname;} //返回rname的值

void set_rclass(char *rc)//设置班级

{strcpy(rclass,rc);}

char *get_rclass()

//获得班级

{return rclass;}

void set_rtel(char *rt)

//设置电话

{strcpy(rtel,rt);}

char *get_rtel()

//获得电话

{return rtel;}

void copy(Reader m)//读者Reader结构体copy函数

{strcpy(rname,m.get_rname());strcpy(rclass,m.get_rclass());strcpy(rtel,m.get_rtel());} };//*********读者管理结构体,实现对读者用户的管理********* class ReaderManage {

Reader readers[50];//定义读者结构体数组对象,最多50位

int length;

void readFile()

//读取读者文件函数

{

ifstream fread;//定义输入文件流对象fread

length=0;

//计数

if(!fread)

{cout<<”读取磁盘文件失败!“<

fread.open(ReaderFile,ios::binary);//使文件流与文件关联,以二进制方式打开

int i=0;

while((fread.read((char *)&readers[i],sizeof(Reader))))//计算并返回所占字节数

i++;

length=i;

fread.close();//关闭磁盘文件

} void saveFile()//保存读者文件

{

ofstream fwrite;

//定义输出文件流对象fwrite

if(!fwrite)

{cout<<”文件保存失败!n“;exit(1);}

fwrite.open(ReaderFile,ios::binary);//使文件流与文件关联,以二进制方式打开

fwrite.write((char *)readers,length*sizeof(Reader));//计算并返回所占字节数

fwrite.close();//关闭磁盘文件

} public:

ReaderManage()//构造函数,读取读者文件

{readFile();}

~ReaderManage()//析构函数,保存读者文件

{saveFile();}

void add_reader(Reader r)//添加读者用户函数

{

if(length>=50)

{cout<<”对不起,注册人数已满!n“;return;}

readers[length].copy(r);//调用读者结构体copy函数

length++;} int search(char *rn)//按姓名查找读者函数

{

for(int i=0;i

if(strcmp(readers[i].get_rname(),rn)==0)//判断是否相等

return i;

return-1;

} bool revise(Reader reader,int i)//修改读者资料函数

{

readers[i].copy(reader);//调用读者结构体cpoy函数

return true;} void delete_reader(int index)//删除读者函数

{

for(int i=index;i

readers[i].copy(readers[i+1]);//用后面的地址覆盖前面的地址

length--;} bool log_reader(Reader r)//登录时判断读者用户是否存在函数,相当于遍历

{

for(int i=0;i

if(strcmp(readers[i].get_rname(),r.get_rname())==0)

return true;

return false;

} void reg_reader()//注册用户函数

{

char n[10];

//姓名name

char c[10];

//班级class

char t[10];

//电话tel

Reader reader;

cout<<”nt请输入您的姓名:“;

cin>>n;

cout<<”nt请输入您的所在班级:“;

cin>>c;

cout<<”nt请输入您的联系电话:“;

cin>>t;

reader.set_rname(n);//调用读者结构体设置读者姓名函数

reader.set_rclass(c);//调用读者结构体设置读者班级函数

reader.set_rtel(t);//调用读者结构体设置联系电话函数

add_reader(reader);//调用读者结构体添加读者函数

cout<<”nt注册成功!“;} void show_reader()//不带参的显示读者信息函数

{ cout<<”n ☆☆☆☆☆☆☆☆☆☆☆☆读★★者★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆nn“;

cout<<”姓名ttt班级ttt电话n“;

for(int i=0;i

{

cout<

cout<<”ttt“<

cout<<”ttt“<

} } void show_reader(int i)//带参的显示读者信息函数

{

cout<<”n ☆☆☆☆☆☆☆☆☆☆☆☆读★★者★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆nn“;

cout<<”姓名ttt班级ttt电话n“;

cout<

cout<<”ttt“<

cout<<”ttt“<

}

};

//********书籍结构体,用于存放书籍基本信息******** class Book { private:

char bnum[10];

//书号

char bname[20];

//书名

char bauthor[10];

//作者

char rname[10];

//借阅人 public: int tag;

//状态标记判断指标(已借/在架)Book()

//构造函数初始化信息

{strcpy(bnum,”“);strcpy(bname,”“);strcpy(bauthor,”“);strcpy(rname,”“);tag=0;}

void set_bnum(char *no)

//设置书号

{strcpy(bnum,no);}

//把字符串no中的字符复制到字符串bnum中

char *get_bnum()

//获得书号

{

return bnum;}

//返回值为bnum

void set_bname(char *n)

//设置书名

{strcpy(bname,n);}

char *get_bname()

//获得书名

{return bname;}

void set_bauthor(char *a)

//设置作者

{strcpy(bauthor,a);}

char * get_bauthor()

//获得作者姓名

{return bauthor;}

void set_tag(int t)

//状态设置

{tag=t;}

void set_rname(char *rn)

//设置借阅人

{strcpy(rname,rn);}

char *get_rname()

//获得借阅人姓名

{return rname;}

void show_tag()

//显示图书状态

{

if(tag==1)

{cout<<”已借“;}

else

{cout<<”在架“;}

}

void copy(Book m)

//Book结构体copy函数

{

strcpy(bnum,m.get_bnum());

//将获得书号函数里的返回值里的字符复制到bnum

strcpy(bname,m.get_bname());

strcpy(bauthor,m.get_bauthor());

tag=0;

} };//**********书籍管理结构体,实现管理书籍功能********** class BookManage { private:

Book books[100];

//定义Book书籍结构体数组对象,最大容量100本

int length;

void saveFile()

//保存书籍文件

{

ofstream fwrite;//定义输出文件流ofstream结构体对象fwrite

if(!fwrite)

{cout<<”文件保存失败!n“;exit(1);

}

fwrite.open(BookFile,ios::binary);//使文件流与文件建立关联,以二进制方式打开

fwrite.write((char *)books,length*sizeof(Book));//计算并返回所占字节数

fwrite.close();

//关闭磁盘文件

} void readFile()

//读取书籍文件

{

ifstream fread;//定义输入文件流对象fread

length=0;

if(!fread)

{cout<<”文件读取失败!“<

Book temp;

//定义书籍结构体临时对象temp

int i=0;

fread.open(BookFile ,ios::binary);//使文件流与文件建立关联,以二进制方式打开

while((fread.read((char *)&books[i],sizeof(Book))))

i++;

//每读完一次,指针后移一位,直到不能读出正确结果为止

length=i;

fread.close();} public:

BookManage()

//构造函数,读取磁盘文件

{

length=0;

//从头读起,计数,最大100

readFile();

//调用读取文件函数

}

~BookManage()

//析构函数,保存磁盘文件

{

saveFile();

//调用保存文件函数

}

bool add(Book book)

//添加图书资料

{

if(length>=100)

{ cout<<”对不起,储存已满,您无法继续添加!n“;

return-1;

}

else

{

books[length].copy(book);//调用书籍结构体copy函数

length++;

return(length-1);

} } int bnu_search(char *bnu)

//按书号查找书籍

{

for(int i=0;i

if(strcmp(books[i].get_bnum(),bnu)==0)//字符串比较,判断是否相等

return i;

return-1;

} int bna_search(char *bna)

//按书名查找书籍

{

for(int i=0;i

if(strcmp(books[i].get_bname(),bna)==0)//判断

return i;

return-1;

} int bau_search(char *bau)//按作者查找书籍

{

for(int i=0;i

if(strcmp(books[i].get_bauthor(),bau)==0)//判断

return i;

return-1;

}

int rn_search(char *rn)//按借阅人查找书籍

{

for(int i=0;i

if(strcmp(books[i].get_rname(),rn)==0)//判断

return i;

return-1;

}

void revise(Book book,int i)//带参的修改书籍函数

{books[i].copy(book);} //调用Book结构体copy函数

void deleteBook(int index)//带参的删除书籍资料函数

{

for(int i=index;i

books[i].copy(books[i+1]);//用后面的地址将当前的地址覆盖

length--;

} void show_book()//不带参的显示书籍函数

{

cout<<” ☆☆☆☆☆☆☆☆☆☆☆书★★籍★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆nn“;

cout<<”书号“;

cout.width(10);

cout<<”书名“;

cout.width(10);

cout<<”作者“;

cout.width(17);

cout<<”状态“;

cout.width(25);

cout<<”借阅人n“;

for(int i=0;i

{ cout<

cout.width(10);

cout<

cout.width(10);

cout<

cout.width(20);

books[i].show_tag();

cout.width(20);

cout<

}

} void show_book(int i)//带参的显示书籍函数

{ cout<<” ☆☆☆☆☆☆☆☆☆☆☆书★★籍★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆nn“;

cout<<”书号“;

cout.width(10);

cout<<”书名“;

cout.width(10);

cout<<”作者“;

cout.width(17);

cout<<”状态“;

cout.width(25);

cout<<”借阅人n“;

cout<

cout.width(10);

cout<

cout.width(10);

cout<

cout.width(20);

books[i].show_tag();

cout.width(20);

cout<

}

void br_book()//读者借、还书功能函数

{

ReaderManage reader;

int choi;//选择

int a;

//图书状态指标(1已借2在架)

char sh[10];//需要还书的书号

char dz[10];//读者姓名

cin>>sh;

int index=bnu_search(sh);//定义一个变量等于查找到的书号

if(index>=0)

{ if(books[index].tag==1)//已借

a=1;

if(books[index].tag==0)//在架

a=2;

switch(a)

{ case 1:

cout<<”nt该书目前状态为<已借出>n“;

cout<<”nt请选择您需要的服务:1:还书

0:返回n“;

cin>>choi;

cin.ignore();//清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响

if(choi!=1&&choi!=0)

{

cout<<”nt操作有误,请重新选择(0/1)!n“;

return;

}

else if(choi==1)

{

cout<<”nt请输入您的姓名:“;

cin>>dz;

cin.ignore();

int index1=reader.search(dz);

if(index1==-1)

{

cout<<”nt对不起,系统无该读者记录,新用户请先注册!“;

return;

}

else

{

strcpy(dz,”“);//将读者姓名已空白代替

books[index].set_rname(dz);//借阅人一项变为空白

books[index].set_tag(0);//图书状态变为在架

cout<<”nt还书成功!“<

}

}break;

case 2:

cout<<”nt该书目前状态为<在馆>n“;

cout<<”nt请您需要的服务:1:借书

0:返回n“;

cin>>choi;

cin.ignore();

if(choi!=1&&choi!=0)

{

cout<<”nt操作有误,请重新选择(0/1)!n“;

return;

}

else if(choi==1)

{

cout<<”nt请输入您的姓名:“;

cin>>dz;

int index1=reader.search(dz);

if(index1==-1)

{ cout<<”nt对不起,系统无改读者记录,新用户请先注册!“;

return;

}

else

{

books[index].set_rname(dz);

books[index].set_tag(1);

cout<<”nt借书成功!“<

}

}break;

}

}

else

{

cout<<”nt对不起,系统无该书记录!“;}

}

bool in(int i)//判断图书是否在架函数

{

if(books[i].tag==1)

return false;

return true;

}

};//**********菜单结构体,实现界面引导********** class Menu {

BookManage bm;

//定义书籍管理结构体对象bm ReaderManage rm;

//定义读者管理结构体对象rm Reader r;

//定义读者结构体对象r private: int choice;

//菜单序号选择

int key;

//管理员密码 public: void header()

//页眉

{

system(”color fd“);

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”t

☆n“;

cout<<”t

☆n“;

cout<<”t

☆n“;

cout<<”t

☆n“;

cout<<”t

☆n“;

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;} void log_menu()

//主界面登录菜单

{

system(”color fd“);

header();

cout<<”nttt< 请

份 >n“;

cout<<”ntttt1: 管理员nntttt2: 读

者nntttt0: 退

出nt您的选择是: “;choice: cin>>choice;

cin.ignore();

//清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响

switch(choice)

{

case 1:

log_admin();

//管理员登录,需密码验证

break;

case 2:

reader_lr();

//读者登录或注册

break;

case 0:

exit(1);

//退出系统

break;

default:

cout<<”nt您的操作有误,请重新选择(0→2): “;

goto choice;

} } void admin_menu()

//管理员管理菜单

{

system(”cls“);

system(”color f9“);

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”t

☆n“;

cout<<”t

系★统★管★理★界★面

☆n“;

cout<<”t

☆n“;

cout<<”t

1: 添加新的图书资料

2: 修改已有图书资料

☆n“;

cout<<”t

☆n“;

cout<<”t

3: 删除已有图书资料

4: 查找已有图书资料

☆n“;

cout<<”t

☆n“;

cout<<”t

5: 查看所有图书资料

6: 修改读者用户信息

☆n“;

cout<<”t

☆n“;

cout<<”t

7: 删除读者用户信息

8: 查看所有读者信息

☆n“;

cout<<”t

☆n“;

cout<<”t

9: 返回系统登录界面

0: 退出图书管理系统

☆n“;

cout<<”t

☆n“;

cout<<”t

☆n“;

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”nt请选择您需要的服务序号: “;choice: cin>>choice;

cin.ignore();

switch(choice)

{

case 1:

//添加图书

addBook();

bm.~BookManage();

break;

case 2:

//修改图书

reviseBook();

bm.~BookManage();

break;

case 3:

//删除图书

delBook();

bm.~BookManage();

break;

case 4:

//查找图书

absearch_menu();

break;

case 5:

//查看全部图书

bm.show_book();

cout<<”nt显示完毕!“;

system(”pause“);

admin_menu();

break;

case 6:

//修改读者

reviseReader();

rm.~ReaderManage();

break;

case 7:

//删除读者

delReader();

rm.~ReaderManage();

break;

case 8: //查看所有读者

rm.show_reader();

cout<<”nt显示完毕!“;

system(”pause“);

admin_menu();

break;

case 9: //返回系统登录界面

system(”cls“);

log_menu();

case 0: //退出系统

exit(1);

break;

default:

cout<<”nt您的操作有误,请重新选择(0→7): “;

goto choice;

} } void reader_menu()

//读者服务菜单

{

system(”cls“);

system(”color f9“);

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”t

☆n“;

cout<<”t

读★者★服★务★界★面

☆n“;

cout<<”t

☆n“;

cout<<”t

1: 借 阅 图 书

2: 归 还 图 书

☆n“;

cout<<”t

☆n“;

cout<<”t

3: 查 找 图 书

4: 借 阅 情 况

☆n“;

cout<<”t

☆n“;

cout<<”t

5: 返 上 一 级

0: 退 出 系 统

☆n“;

cout<<”t

☆n“;

cout<<”t

☆n“;

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”nt请选择您需要的服务序号: “;choice: cin>>choice;

cin.ignore();

switch(choice)

{

case 1:

cout<<”nt请输入您欲借阅的图书书号: “;

bm.br_book();

bm.~BookManage();

break;

case 2:

cout<<”nt请输入您欲归还的图书书号: “;

bm.br_book();

bm.~BookManage();

break;

case 3:

bsearch_menu();

break;

case 4:

rn_search();

break;

case 5:

system(”cls“);

reader_lr();

break;

case 0:

exit(1);

break;

default:

cout<<”nt您的操作有误,请重新选择(0→5):

goto choice;

} } void bsearch_menu()

//读者查找书籍菜单

{

system(“color f2”);

cout<<“ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n”;cout<<“ttt☆

☆n”;

cout<<“ttt☆

书★籍★查★找★界★面

☆n”;

cout<<“ttt☆

☆n”;

cout<<“ttt☆

1: 按 书号查找

☆n”;

cout<<“ttt☆

☆n”;

cout<<“ttt☆

2: 按 书名查找

☆n”;

cout<<“ttt☆

☆n”;

cout<<“ttt☆

3: 按 作者查找

☆n”;

cout<<“ttt☆

☆n”;

cout<<“ttt☆

4: 返 回 上 级

☆n”;

cout<<“ttt☆

☆n”;

cout<<“ttt☆

0: 退 出 系 统

☆n”;cout<<“ttt☆

☆n”;

cout<<“ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n”;

int bsc;//book search choice cout<<“nt请输入您需要的服务序号: ”;

cin>>bsc;

cin.ignore();

switch(bsc){

case 1:

bnu_search();

break;

case 2:

bna_search();

“;

break;

case 3:

bau_search();

break;

case 4:

reader_menu();

break;

case 5:

exit(1);

default:

cout<<”nt操作有误,请重新选择<0→4>“;

break;

}

}

void absearch_menu()

//管理员查找书籍菜单

{

system(”color f2“);

cout<<”ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

书★籍★查★找★界★面

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

1: 按 书号查找

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

2: 按 书名查找

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

3: 按 作者查找

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

4: 返 回 上 级

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

0: 退 出 系 统

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

int bsc;//book search choice

cout<<”nt请输入您需要的服务序号: “;

cin>>bsc;

cin.ignore();

switch(bsc)

{

case 1:

bnu_search();

break;

case 2:

bna_search();

break;

case 3:

bau_search();

break;

case 4:

admin_menu();

break;

case 5:

exit(1);

default:

cout<<”nt操作有误,请重新选择<0→4>“;

break;

}

} void reader_lr()//读者登录或注册菜单 {

system(”cls“);

header();

system(”color f1“);

cout<<”nttt< 读

面 >n“;

cout<<”nttt

1: 登

录t2: 注

册nnttt

3: 返

回t0: 退

出nt您的选择是: “;

int rlc;//reader login choice choice: cin>>rlc;

cin.ignore();

switch(rlc)

{

case 1:

//已注册读者登录

cout<<”nt请输入您的姓名: “;

char rn[10];//reader name

cin>>rn;

r.set_rname(rn);

if(rm.log_reader(r))

{

cout<<”nt登录成功!“;

system(”pause“);

reader_menu();

}

else

cout<<”nt登录失败!新用户请先注册!“;

system(”pause“);

reader_lr();

break;

case 2:

//新用户注册

rm.reg_reader();

rm.~ReaderManage();

system(”pause“);

reader_lr();

break;

case 3:

system(”cls“);

log_menu();

case 0:

exit(1);

break;

default:

cout<<”nt您的操作有误,请重新选择(0→2):

goto choice;

} } void log_admin()

//管理员登录

{

cout<<“nt请输入管理员密码:”;

int key;

cin>>key;

if(key==14125)

{

cout<<“nt登录成功!nnt”;

system(“pause”);

admin_menu();

//管理员操作菜单

}

else

{cout<<“nt登录失败!原因是密码错误!n”;

cout<<“nt请选择 <1:返回上一级菜单

0:退出系统>

cin>>choice;

cin.ignore();

switch(choice)

”;“;

{

case 1:

system(”cls“);

log_menu();

break;

case 0:

exit(1);

break;

default:

cout<<”nt操作有误,请重新选择(0/1)“;

}

} } void rn_search()

//按书号查找函数

{

char rn[10];//reader name

cout<<”nt请输入您的姓名:“;

cin>>rn;

int index=bm.rn_search(rn);

if(index>=0)

bm.show_book(index);

else

cout<<”nt对不起,系统无您的借阅记录!“;

cout<<”nt“;

system(”pause“);

reader_menu();

} void bnu_search()

//按书号查找函数

{

char bnu[10];

cout<<”nt请输入您要查找的书号:“;

cin>>bnu;

int index=bm.bnu_search(bnu);

if(index>=0)

bm.show_book(index);

else

cout<<”nt对不起,系统无该书籍记录!“;

cout<<”nt“;

system(”pause“);

bsearch_menu();

}

void bna_search()

//按书名查找函数

{

cout<<”nt请输入您要查找的书名:“<

char bna[20];

cin>>bna;

int index=bm.bna_search(bna);

if(index>=0)

bm.show_book(index);

else

cout<<”nt对不起,系统无该书籍记录!“;

cout<<”nt“;

system(”pause“);

bsearch_menu();

}

void bau_search()

//按作者查找函数

{

cout<<”nt请输入您要查找的作者:“<

char bau[10];

cin>>bau;

int index=bm.bau_search(bau);

if(index>=0)

bm.show_book(index);

else

cout<<”nt对不起,系统无该书籍记录!“;

cout<<”nt“;

system(”pause“);

bsearch_menu();

}

void addBook()

//新增书籍函数

{ char numb[10];

//书号

char nameb[20];

//书名

char authorb[10];//作者

Book book;

//书籍结构体对象book

int tag1;input1:cout<<”nt请输入新书书号:“;

cin>>numb;

int index=bm.bnu_search(numb);

if(index==-1)

{

cout<<”nt系统目前尚无该书记录,您可以继续操作!n“;

cout<<”nt请输入新书书名:“;

cin>>nameb;

cout<<”nt请输入新书作者:“;

cin>>authorb;

tag1=0;

book.set_bnum(numb);

book.set_bname(nameb);

book.set_bauthor(authorb);

book.set_tag(tag1);

bm.add(book);

cout<<”nt恭喜您!新书资料录入成功!“;

}

else

{

cout<<”nt对不起,该书号纪录已存在!请重新输入!“;

goto input1;

}

system(”pause“);

admin_menu();} void reviseBook()

//修改书籍函数

{

char numb[10];

char nameb[20];

char authorb[10];

Book book;

int index=-1;input2: cout<<”nt请输入您要修改书籍的书号:“;

cin>>numb;

index=bm.bnu_search(numb);

if(index==-1)

{

cout<<”nt对不起,您输入的书号不存在,请重新输入!“<

goto input2;

return;

}

bool sta=bm.in(index);//判断是否在馆

if(sta)

{ cout<<”nt该书目前处于<在架>状态,您可以继续操作!“;

cout<<”nt请输入更改后的书名:“;

cin>>nameb;

cout<<”nt请输入更改后的作者:“;

cin>>authorb;

book.set_bnum(numb);

book.set_bname(nameb);

book.set_bauthor(authorb);

bm.revise(book,index);

cout<<”nt恭喜您!书籍资料修改成功!“;}

else

cout<<”nt该书已被借出,请于读者归还后再进行相关操作!“<

system(”pause“);

admin_menu();

} void delBook()

//删除书籍函数

{

char numb[10];

cout<<”nt请输入您要删除书籍的书号:“;

cin>>numb;

int index=bm.bnu_search(numb);

if(index>=0)

{

cout<<”nt您确定要删除该书记录吗(y/n)

“;

char y;

cin>>y;

if(y=='y'||y=='Y')

{

bm.deleteBook(index);

cout<<”nt删除成功!“;

}

else

cout<<”nt删除取消!“;

}

else

cout<<”nt对不起,系统没有该图书记录!“;

system(”pause“);

admin_menu();

} void reviseReader()//修改读者用户函数

{

char namer[10];

Reader reader;get1:

cout<<”nt请输入你要修改读者用户的姓名: “;

cin>>namer;

int index=rm.search(namer);

if(index==-1)

{

cout<<”nt对不起,系统无改读者记录,重新输入请按1,返回请按0:

int a;

cin>>a;get2:

cin.ignore();

switch(a)

{

case 1:

goto get1;

break;

case 0:

system(“pause”);

admin_menu();

break;

default:

cout<<“nt您的操作有误,请重新选择(0/1):

”;

goto get2;

}

return;

}

“;

else

{

char namer[10];

char classr[10];

char telr[10];

Reader reader;

cout<<”nt请输入更改后的读者姓名:“;

cin>>namer;

cout<<”nt请输入更改后的班级名称:“;

cin>>classr;

cout<<”nt请输入更改后的联系电话:“;

cin>>telr;

reader.set_rname(namer);

reader.set_rclass(classr);

reader.set_rtel(telr);

cout<<”nt是否真的修改该记录(y/n?):“;

char y;

cin>>y;

if(y=='y'||y=='Y')

{ rm.revise(reader,index);

cout<<”nt修改成功!n“;

}

else

cout<<”nt操作取消!n“;

}

system(”pause“);

admin_menu();

}

void delReader()

//删除读者用户函数

{

cout<<”nt请输入您要删除的读者用户的姓名:“<

char namer[10];

cin>>namer;

int index=rm.search(namer);

if(index>=0)

{

cout<<”nt是否真的删除该记录(y/n?): “;

char y;

cin>>y;

if(y=='y'||y=='Y')

{

rm.delete_reader(index);

cout<<”nt删除成功!n“;

}

else

cout<<”nt操作取消!n“;

}

else

cout<<”nt对不起,系统尚无该读者记录!“;

system(”pause“);

admin_menu();

} };//********主函数******** int main(){

system(”color fd“);Menu menu;//定义菜单结构体对象menu

cout<<”ttt 文计091-1 庞丽萍 200990514125

“;cout<<”ttt

当前日期:2011-6-22 星期三“;cout<<”ttt

当前时间:08:00

“;cout<<”nttt

★ 欢 “;cout<<”★ 迎 “;

} cout<<”★ 进 “;cout<<”★ 入 ★nn";menu.log_menu();return 0;四.程序正确性验证

1主页面

2.管理员登陆页面

3.图书添加

五.课程设计过程中出现的问题、原因及解决方法

1.用户登录密码时,不能使用暗码来保护密码。(未解决成功)2.每个界面都能退出到主页面,而不是直接跳出系统。(以解决)3.书名字长太多影响书籍、作者、数量等之间的一一对应关系。(为解决成功)

六.课程设计的主要收获

通过这几天学习设计图书信息管理系统,认识到一切看似简单的事情只有自己动手做,明白了其中的原理才会更好的把它变成自己的东西。图书管理系统主要用到了文件的输入输出,以及利用简单的顺序查找知识,加深了对数据结构的理解与应用。对于这次的课程设计,首先,许多知识不仅仅只是课本上的,需要我们自己去图书馆或网上收集资料。其次,编程过程终遇到各种错误,需要我们耐心分析,讨论,最后得出正确结果。第三,程序无错,进行调试,然后进行加工修改优化。

七.对今后课程设计的建议

希望老师可以分小组做课程设计,题目可以相应的增大难度。分组可以锻炼团对合作能力,队员可以相互讨论解决问题,彼此能够激发更多的思想,做出更完善的作品,同时也防止了互相拷贝的情况,让每个同学都积极的参与到设计中,而不是坐享其成。

第四篇:图书管理系统课程设计摘要

摘要

摘要

随着计算机技术的飞速发展,电子信息化慢慢替代了企业管理的传统管理手法,采用管理系统是能够有效提高管理效率的。图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。图书馆若采取手工方式对图书资料和图书借阅情况进行人工管理,由于资料繁多,手工处理的工作量大,整体管理效率低下,也不方便读者对图书资料的查阅。为了提高日常的图书管理效率,本文针对通常的图书管理流程,设计了一个面向对象图书管理系统。本系统中包含六个功能模块:图书馆基本信息,借书,还书,读

者维护,图书维护,管理员维护。

summary

With the rapid development of computer technology, electronic information technology gradually replaced the traditional management of enterprise management methods, management system, can effectively improve the efficiency of management.Library as a kind of information resource collection and distribution center, library and user lending data is various, contains a lot of information data management, today, there are a lot of libraries are preliminary started using, hasn't even use a computer for information management.If libraries adopt manual approach to artificial management books and materials and library, because the material is various, manual processing workload is big, the overall management efficiency is low, also not convenient to readers of books and materials inspection.In order to improve the efficiency of books management, this paper usually books management processes, an

object-oriented books management system management system is designed.This system contains six modules: basic information, library books, and books, the reader maintenance, maintenance, administrators to maintain.1共30页

第五篇:图书管理系统课程设计绪论

绪论

1.1 课题背景意义

在学校现代化的管理中,图书馆管理系统也是其中非常重要的一部分,然而,用大型软件系统来于小型的图书管理,不啻于“杀鸡用牛刀”,因此小型的的软件对于这种管理自然有十分重要作用。某图书馆需要管理其各种人员信息和图书信息,希望实现办公的信息化,通过建立一个图书管理系统来管理图书馆。

1.2国内外研究的现状

国内在信息化这一方面做的没有国外好,因此现在需要大量这样的程序人员,图书馆管理系统这一块也需要做大量改进。

3共30页

下载Oracle课程设计 图书管理系统word格式文档
下载Oracle课程设计 图书管理系统.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    图书管理系统课程设计(5篇范文)

    秦皇岛职业技术学院课程设计论文设计题目: 图书管理系统 学生姓名:蔡昆 指导教师:刘学超,李旺彦 专业名称: 计算机应用技术专业 所在院系:信息工程系2007 年 7 月5日 摘要 随着人......

    C++课程设计(简单图书管理系统)

    课 程 设 计 课程名称C++课程设计 题目名称图书管理系统 2016 年6 月 29 日目录 一.设计内容与要求 .......................................................................

    数据库课程设计 图书管理系统(精选)

    课 程 设 计 软件工程与数据库 课程设计 任务书 学院名称:数学与计算机学院 课程代码:_6014419_ 专业: 年级:一、设计题目 图书管理系统 二、主要内容 一个简单的图书管理系统......

    数据结构课程设计—西文图书管理系统

    数据结构课程设计报告 课程名称:数据结构课程设计课设题目: 西文图书管理系统 教师姓名: 郭艳本科生姓名: 王瑞林本科生学号: 20121002932 班号:191124 日期:2014年6月20日 题号......

    图书管理系统大全

    图书管理系统源代码#include #include class Book{ // 书籍基类 protected: char Title[40]; // 书名 long Code; // 条码 int Type; // 0表示书,1表示杂志 public: Book......

    图书管理系统

    目录 第一章 绪论 ..................................................................................................................................... 1 第二章......

    图书管理系统

    图书管理系统 背景:当今时代是飞速发展的信息时代,在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。......

    图书管理系统

    七个文件 1. book.txt存放书籍2.borrower.txt存放借阅信息3.chenwen.txt 存放开始信息 4. mima.txt存放密码 5.qianyan.txt前言 6.student.txt存放学生信息7. yuyue.txt......