信息系统与数据库技术全书实验参考答案

更新时间:2024-06-06 19:06:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

10.1 实验一 SQL Server数据库基本操作

一.实验目的

本实验主要了解Microsoft SQL Server 2000中各组件的主要功能和基本使用方法;了解SQL Server数据库的逻辑结构和物理结构;了解数据表的结构特点以及索引的基本概念。通过本实验,读者将学会在“企业管理器”中创建和修改数据库和数据表结构、对数据表进行数据的添加、删除和更新操作以及在数据表上创建字段索引的操作。

二.实验环境

? Microsoft SQL Server 2000 企业管理器

三.实验内容

1.创建一个名称为Book的数据库,支持教材订购信息管理,要求:

(1)将主数据库文件Book_Data.MDF放置在的D:\\DBF文件夹中,文件大小为5MB,最大值为50MB,文件增量为2MB。

(2)将事务日志文件Book_Log.LDF放置在的D:\\DBF文件夹中,文件大小为5MB,最大值为100MB,文件增量为1MB。

实验参考步骤:

1)在D:\\下创建DBF文件夹。

2)在企业管理器窗口右单击“数据库”或任一数据库名,从快捷菜单中选择“新建数据库”命令,出现“数据库属性”对话框。

3) 在“数据库属性”对话框中选择“常规”选项卡,在名称文本框中输入:Book;

4) 在“数据库属性”对话框中选择“数据文件”选项卡,设置数据文件的位置、大小、最大值和文件增量等属性;

5) 在“数据库属性”对话框中选择“事务日志”选项卡,设置事务日志文件的位置、大小、最大值和文件增量等属性。

2.在上题所建数据库Book中建立5张数据表结构并分别向数据表插入记录。

实验参考步骤:

在企业管理器中展开Book数据库。右击数据库文件夹下的“表”项,从弹出的快捷菜单中选择“新建表”命令,弹出“表设计”界面,分别建立5张表的结构,并且为各个表建立主关键字。

3.创建T_Teacher、T_Academy、T_BookInfo、T_Publisher和T_BookOrder5个表之间的关系。

实验参考步骤::

1) 在企业管理器中展开Book数据库。右击数据库文件夹下的“关系图”项,从弹出的快捷菜单中选择“新建数据库关系图”命令。

2) 通过“创建数据库关系图向导”新建关系图。

4.任选两个数据表插入3-5条记录(例如T_BookInfo、T_BookOrder、T_Teacher),各数据表记录如表9-xb)所示。

实验参考步骤:

在企业管理器中展开Book数据库中的表文件夹,右单击需插入记录的数据表,从弹出的快捷菜单中选择“打开表/返回所有行”命令。在数据表显示界面中依次输入记录。

5.将T-teacher表“TeacherName”字段的类型改为Varchar(16)。为T_BookOrder表添加约

束条件,使得“StuBookNum”和“TeaBookNum”的取值都大于0;“OrderTime”大于2007年。

实验参考步骤:

1) 在企业管理器中展开Book数据库中的表文件夹,右击T-teacher表,选择“表设计”,进入T-teacher表结构设计界面,修改“TeacherName”字段的类型。

2) 在企业管理器中展开Book数据库表文件夹,右击T_BookOrder表,选择“表设计”,进入T_BookOrder表结构设计界面,右单击T_BookOrder表结构设计界面,从弹出的快捷菜单中选择“CHECK约束”命令,在“属性”对话框的“CHECK约束”选项卡中点击“新建”按钮分别设置约束条件。

6.练习记录数据的添加、删除和更新操作。在T_Teacher表中添加记录“01010117、黄蓉、13、女、1977-9-21、副教授、63478445”。将T_Teacher表中TeacherCode为“01010113”的记录删除;将TeacherCode为“01010116”记录的title字段内容更新为“教授”。

实验参考步骤:

在企业管理器中展开Book数据库表文件夹,右击T-teacher表,选择“打开表/返回所有行”,进入T-teacher表数据行显示界面,进行数据的添加、删除和更新操作。

7.在企业管理器中练习索引的创建和删除。在“TeacherName”(降序)和“AcadCode”(升序)上建立一个名称为“Name_Code”的普通索引。删除“Name_Code”索引。

实验参考步骤: 方法1:

在企业管理器中展开Book数据库表文件夹,右击T_Teacher表,选择“表设计”,进入T_Teacher表结构设计界面,右单击T_Teacher表结构设计界面,从弹出的快捷菜单中选择“索引/键”命令,在“属性”对话框的“索引/键”选项卡中点击“新建”按钮进行“Name_Code”索引的建立。 方法2:

在企业管理器中展开Book数据库表文件夹,右击T-teacher表,选择“所有任务/管理索引”,打开“管理索引”窗口,进行索引的建立和编辑。

10.2 实验二 T-SQL语言基本操作

一.实验目的

本实验主要了解T-SQL语句以及在查询分析器中执行T-SQL语句的方法。通过本实验,读者将了解使用T-SQL语句创建数据库和数据表;掌握数据库查询语句Select语句的基本语法及使用方法;掌握对数据表进行数据插入、修改和删除的T-SQL语句;了解T-SQL语言的各种运算符、控制语句的功能并学会简单的程序编写。

二.实验环境

? Microsoft SQL Server 2000查询分析器和Microsoft SQL Server 2000企业管理器 ? Book数据库

三.实验内容

1.利用企业管理器中提供的“生成SQL脚本”命令编写Book数据库中数据表对象“T_Teacher”、“T_BookOrder”、“T_BookInfo”、“T_Publisher”、“T_Academy”创建的脚本文件D:\\Table.sql。

实验参考步骤:

1) 在企业管理器右单击Book数据库,选择“所有任务/生成SQL脚本”菜单,打开“生成SQL脚本”窗口,点击“全部显示”按钮。

2) 按要求添加写入脚本的对象,点击“确定”按钮,打开“另存为”对话框,设置脚本文件名称。

2.在查询分析器中使用T-SQL语句完成实验一中的第1题。

CREATE DATABASE Book ON

(NAME=Book_Data,

FILENAME='D:\\DBF\\BOOK_Data.MDF', SIZE=5MB, MAXSIZE=50MB, FILEGROWTH=2MB) LOG ON

(NAME=Book_log,

FILENAME='D:\\DBF\\Book_Log.LDF', SIZE=5MB, MAXSIZE=100MB, FILEGROWTH=1MB)

3.编写SELECT语句,建立以下查询 1)显示T_BookInfo表中所有字段的值。

SELECT * FROM T_BookInfo

2)查询T_Teacher表中所有记录的TeacherCode、TeacherName、EnterDate和Title字段信息。

USE Book

SELECT TeacherCode,TeacherName,EnterDate,Title FROM T_Teacher

3)查询男教师的姓名(TeacherName),显示时将字段名TeacherName改为“姓名”。

SELECT TeacherName AS 姓名 FROM T_Teacher WHERE Sex='男'

4)查询2007年以后出版的教材名称(BookName)、出版日期(PublishDate)和库存量(StockNum),显示时字段标题分别为:教材名称、出版日期和库存量。

SELECT BookName AS 教材名称,

PublishDate AS 出版日期,StockNum AS 库存量 FROM T_BookInfo

WHERE year(PublishDate)>='2007' 或

SELECT BookName AS 教材名称,

PublishDate AS 出版日期,StockNum AS 库存量 FROM T_BookInfo

WHERE PublishDate>='2007-01-01'

5)查询所有教材的出版社代码(PublisherCode),将重复的记录去掉。

SELECT DISTINCT PublisherCode FROM T_BookInfo

6)查询学生订书量(StuBookNum)最大的3个记录,显示教材代号(BookCode)和学生订书量(StuBookNum)。

SELECT top 3 BookCode,StuBookNum FROM T_BookOrder

ORDER BY StuBookNum DESC

图7

7)查询学生订书量(StuBookNum)在150到250之间的教材信息。

SELECT BookCode,TeacherCode,StuBookNum,OrderTime FROM T_BookOrder

WHERE ( StuBookNum BETWEEN 150 AND 250)

8)查询每一种教材的学生订书总量。

SELECT BookCode AS 教材代号 ,SUM(StuBookNum) AS 学生订书数量 FROM T_BookOrder GROUP BY BookCode

9)查询书名为“VB程序设计”的教材的学生总订量(StuBookNum)和教师总订量(TeaBookNum)和总订量。

SELECT SUM(StuBookNum) AS 学生总订量,SUM(TeaBookNum) AS 教师总订量, (SUM(StuBookNum)+SUM(TeaBookNum)) AS 总订量 FROM T_BookInfo ,T_BookOrder

WHERE T_BookInfo.BookCode=T_BookOrder.BookCode AND BookName='VB程序设计' 或

SELECT SUM(StuBookNum) AS 学生总订量,SUM(TeaBookNum) AS 教师总订量, (SUM(StuBookNum)+SUM(TeaBookNum)) AS 总订量 FROM T_BookInfo INNER JOIN T_BookOrder ON T_BookInfo.BookCode=T_BookOrder.BookCode WHERE BookName='VB程序设计'

10)显示教材的最高价、最低价、平均价、最高价与最低价之间的差值。

SELECT str(Max(Price),5,2) AS 最高价,str(Min(Price),5,2)AS 最低价, str(AVG(Price),5,2) AS 平均价, str((Max(Price)-Min(Price)),5,2) AS 差值 FROM T_BookInfo

11)查询出版社代号(PublisherCode)为10、02、31的出版社所出版的教材信息。要求显示教材名称(BookName)、作者(Author)、价格(Price)、库存(StockNum)和出版社名称(Publisher)。

SELECT T_BookInfo.BookName,T_BookInfo.Author,T_BookInfo.Price, T_BookInfo.StockNum,T_Publisher.PublisherCode,T_Publisher.Publisher FROM T_Publisher,T_BookInfo

WHERE T_Publisher.PublisherCode=T_BookInfo.PublisherCode AND T_Publisher.PublisherCode IN ('10','02','31') 或:

SELECT T_BookInfo.BookName,T_BookInfo.Author,T_BookInfo.Price,

T_BookInfo.StockNum,T_Publisher.PublisherCode,T_Publisher.Publisher FROM T_Publisher INNER JOIN T_BookInfo

ON T_Publisher.PublisherCode=T_BookInfo.PublisherCode WHERE T_Publisher.PublisherCode IN ('10','02','31')

12)查询没有领书的教师信息。要求显示TeacherCode(教师工号)、TeacherName(姓名)、AcadName(学院名称)和Telephone(电话号码),并按学院名称降序排列。

SELECT T_Teacher.TeacherCode,TeacherName,AcadName,Telephone FROM T_BookOrder ,T_Teacher ,T_Academy

WHERE T_Teacher.TeacherCode= T_BookOrder.TeacherCode AND T_Teacher.AcadCode= T_Academy.AcadCode AND TakeAway=0 ORDER BY AcadName DESC 或:

SELECT T_Teacher.TeacherCode,TeacherName,AcadName,Telephone FROM T_Academy INNER JOIN

(T_Teacher INNER JOIN T_BookOrder

ON T_Teacher.TeacherCode=T_BookOrder.TeacherCode) ON T_Academy.AcadCode=T_Teacher.AcadCode WHERE TakeAway=0 ORDER BY AcadName DESC

13)查询人文学院教师所订教材的信息。要求显示教材代码(BookCode)、数量(StuBookNum+TeaBookNum)和订教材日期(OrderTime)。

SELECT BookCode,StuBookNum+TeaBookNum AS 数量,OrderTime FROM T_BookOrder

WHERE TeacherCode IN (SELECT TeacherCode FROM T_Teacher

WHERE AcadCode=(SELECT AcadCode FROM T_Academy

WHERE AcadName='人文学院')) 或:

SELECT BookCode,StuBookNum+TeaBookNum AS 数量,OrderTime FROM T_BookOrder WHERE TeacherCode IN (SELECT TeacherCode

FROM T_Teacher INNER JOIN T_Academy ON T_Teacher.AcadCode=T_Academy.AcadCode WHERE AcadName='人文学院')

14)查询姓名字符数大于等于4个字符的作者情况,要求显示作者姓名(Author)、教材名称(BookName)。

SELECT Author,BookName From T_BookInfo WHERE LEN(Author)>=4

15)查询教师工号(TeacherCode)为“01010109”的教师是否已预订教材,若已预订则显示所订教材的数量;否则显示:“该教师没有预订教材”。

DECLARE @cn smallint,@text varchar(100)

SELECT @cn=(SELECT StuBookNum+TeaBookNum FROM T_BookOrder

WHERE TeacherCode='01010109') IF @cn>0

SET @text='该教师预订教材数量'+str(@cn) ELSE

SET @text='该教师没有预订教材' SELECT @text

4.使用联接关键字(JOIN――ON)建立查询 1)查询所有教师姓名(TeacherName)及所属学院名称(AcadName)。(提示:本题使用INNER JOIN完成查询)

SELECT TeacherName, AcadName

FROM T_Teacher INNER JOIN T_Academy ON T_Teacher.AcadCode= T_Academy.AcadCode ORDER BY T_Teacher.AcadCode

2)查询所有学院名称(AcadName)及每个学院的教师姓名(TeacherName)。(提示:本题使用LEFT OUTER JOIN完成查询)

SELECT AcadName,TeacherName

FROM T_Academy LEFT OUTER JOIN T_Teacher ON T_Academy.AcadCode=T_Teacher.AcadCode

3)查询所有教师姓名(TeacherName)及所订教材代号(BookCode)。(提示:本题使用RIGHT OUTER JOIN完成查询)

SELECT TeacherName,BookCode

FROM T_BookOrder RIGHT OUTER JOIN T_Teacher ON T_BookOrder.TeacherCode=T_Teacher.TeacherCode

4)查询所有已订教材的教师姓名(TeacherName)、教材代号(BookCode)及教材名称(BookName)。(提示:本题使用嵌套的INNER JOIN完成查询)

SELECT TeacherName,T_BookOrder.BookCode,BookName From T_Teacher INNER JOIN

(T_BookOrder INNER JOIN T_BookInfo

ON T_BookOrder.BookCode=T_BookInfo.BookCode) ON T_Teacher.TeacherCode=T_BookOrder.TeacherCode

5.使用SELECT语句复制数据表

1)将T_BookOrder表中的教师编号(TeacherCode)、教材代号(BookCode)、学生用书量(StuBookNum)、教师用书量(TeaBookNum)字段及对应的书名(BookName)复制到新表NewTable1中。

SELECT TeacherCode,T_BookOrder.BookCode,BookName,StuBookNum,TeaBookNum INTO NewTable1

FROM T_BookInfo ,T_BookOrder

WHERE T_BookInfo.BookCode=T_BookOrder.BookCode 或:

SELECT BookName,T_BookOrder.BookCode,StuBookNum,TeaBookNum INTO NewTable1

FROM T_BookOrder INNER JOIN T_BookInfo ON T_BookOrder.BookCode=T_BookInfo.BookCode

2)将T_Teacher表中的教师姓名(TeacherName)、性别(Sex)字段及每个教师所属的学院名称(AcadName)复制到新表NewTable2中。

SELECT TeacherName, Sex, AcadName INTO NewTable2

FROM T_Teacher ,T_Academy

WHERE T_Teacher.AcadCode= T_Academy .AcadCode 或:

SELECT TeacherName, Sex, AcadName INTO NewTable2

FROM T_Teacher INNER JOIN T_Academy ON T_Teacher.AcadCode= T_Academy.AcadCode

6.使用DELECT语句练习删除操作

1)删除NewTable1表中学生用书量(StuBookNum)和教师用书量(TeaBookNum)之和低于60的记录。

DELETE FROM NewTable1 WHERE StuBookNum+TeaBookNum<60

2)删除NewTable2表中姓“王”和姓“杨”的记录。

DELETE FROM NewTable2

WHERE LEFT(TeacherName,1)='王'OR LEFT(TeacherName,1)='杨' 或:

DELETE FROM NewTable2

WHERE TeacherName LIKE '王%' OR TeacherName LIKE '杨%'

3)删除NewTable1中“体育部”教师的订书记录。

DELETE FROM NewTable1

WHERE TeacherCode IN (SELECT T_Teacher.TeacherCode From T_Teacher INNER JOIN T_Academy ON T_Teacher.AcadCode=T_Academy.AcadCode Where AcadName='体育部' )

7.使用INSERT语句练习插入操作

1)在NewTable2表中添加一条记录,姓名:吴清、性别:女、学院名称:计算机科学与技

术学院。

INSERT INTO NewTable2(TeacherName,Sex,AcadName) VALUES('吴清','女','计算机科学与技术学院')

2)将T_Teacher表中姓“王”和姓“杨”的记录添加到NewTable2表中。

INSERT INTO NewTable2

SELECT TeacherName,Sex,AcadName

FROM T_Teacher INNER JOIN T_Academy ON T_Teacher.AcadCode=T_Academy.AcadCode

WHERE LEFT(TeacherName,1)='王' OR LEFT(TeacherName,1)='杨'

8.使用UPDATE语句修改数据

1)将2000年以前(不包括2000年)入校的、职称为助教的教师职称(TitleCode)往上提一级。

UPDATE T_Teacher SET Title='讲师'

WHERE Title='助教' AND YEAR(EnterDate)<2000

2)修改订书数量。要求:所有学院名称中包含汉字“工”的学院所属的教师所订的学生定书量减少3本、教师定书量增加3本。

UPDATE T_BookOrder

SET StuBookNum=StuBookNum-3,TeaBookNum=TeaBookNum+3 WHERE TeacherCode IN

(SELECT T_BookOrder.TeacherCode

FROM T_BookOrder,T_Academy,T_Teacher

WHERE T_BookOrder.TeacherCode= T_Teacher.TeacherCode

AND T_Teacher.AcadCode= T_Academy.AcadCode AND AcadName LIKE '%工%' )

3)将订书量超过300本的教材库存量增加500本。

UPDATE T_BookInfo SET StockNum=500

WHERE BookCode IN (SELECT BookCode FROM T_BookOrder )

10.3 实验三 SQL Server的视图、存储过程和触发器

一.实验目的

本实验主要了解SQL Server视图、存储过程和触发器的基本概念和使用方法。通过本实验,读者将学会在企业管理器中创建、修改、执行和删除存储过程的操作以及在查询分析器中执行的T-SQL语句;掌握触发器的创建、修改和删除的操作方法和T-SQL语句。掌握视图的创建、修改和删除的操作方法和T-SQL语句。

二.实验环境

? Microsoft SQL Server 2000 企业管理器和Microsoft SQL Server 2000 查询分析器 ? Book数据库

三.实验内容

1.创建存储过程proc_book1,查询指定学院的教师预订教材的情况。要求显示教材名称(T_BookInfo.BookName)、教师姓名(T_Teacher.TeacherName)和教材数量(T_BookOrder.StuBookNum+T_BookOrder.TeaBookNum)。 (1)查询条件为:学院代码

CREATE PROC proc_book1 @acode char(6) AS

SELECT BookName, TeacherName,StuBookNum+TeaBookNum AS 数量 FROM T_Teacher INNER JOIN (T_BookOrder INNER JOIN T_BookInfo ON T_BookOrder.BookCode= T_BookInfo.BookCode) ON T_Teacher.TeacherCode=T_BookOrder.TeacherCode WHERE T_Teacher.AcadCode=@acode

--执行存储过程proc_book1,查询学院代号为'02'的教师预订教材的信息。 EXEC proc_book1 '02' 或:

EXEC proc_book1 @scode='02'

(2)查询条件为:学院名称

CREATE PROC proc_book1_2 @aname varchar(50) AS

SELECT BookName, TeacherName,StuBookNum+TeaBookNum AS 数量 FROM T_Academy,T_Teacher,T_BookOrder,T_BookInfo WHERE T_Academy.AcadCode=T_Teacher.AcadCode

AND T_Teacher.TeacherCode=T_BookOrder.TeacherCode AND T_BookInfo.BookCode=T_BookOrder.BookCode AND T_Academy.AcadName=@aname

--执行存储过程proc_book1_2,查询学院名称为'人文学院'的教师预订教材的信息。 EXEC proc_book1_2 '人文学院' 或

EXEC proc_book1_2 @scode='人文学院'

2.创建存储过程proc_book2,查询指定教材的预订数量。

统计条件为:教材代码

CREATE PROCEDURE proc_book2 @tcode char(20) AS

SELECT SUM(StuBookNum)+SUM(TeaBookNum) FROM T_BookOrder GROUP BY BookCode HAVING BookCode=@tcode

--执行存储过程proc_book2,统计教材代号为'010004'的预订信息。 exec proc_book2 '100001'

3.创建添加教材信息的存储过程proc_book3。

CREATE PROCEDURE proc_book3 (@bookcode char(6),@bookname varchar(40), @publishercode varchar(2),@author varchar(40), @publisherdate datetime,@price money, @isbncode char(20),@stocknum smallint, @booksort char(20)) AS BEGIN

INSERT INTO T_BookInfo

VALUES(@bookcode,@bookname,@publishercode,@author, @publisherdate,@price, @isbncode,@stocknum,@booksort) END

--执行存储过程proc_book3

EXEC proc_book3 '500001','信息系统管理技术','31','谭浩强','2007-05-11',30,'760211008',30,'计算机'

4.创建存储过程proc_book4,查询指定教材名称和出版社名称的教材所对应的教材代号和库存。

CREATE PROCEDURE proc_book4

@bookname varchar(40),@publisher varchar(40),

@bookcode char(6) OUTPUT,@stocknum smallint OUTPUT AS

SELECT @bookcode=BookCode,@stocknum=StockNum FROM T_BookInfo INNER JOIN T_Publisher

ON T_Publisher.PublisherCode=T_BookInfo.PublisherCode WHERE T_Publisher.Publisher=@publisher AND BookName=@bookname

--执行存储过程proc_book4

DECLARE @bookcode char(6),@stocknum smallint

EXEC proc_book4 'C语言程序设计','电子工业出版社',@bookcode OUTPUT,@stocknum OUTPUT PRINT '该教材的代号'+CAST(@bookcode AS char(6)) PRINT '该教材的库存'+STR(@stocknum)

5.创建触发器tri_book1,在对T_Teacher表进行插入、修改和删除记录时,都会自动显示表中的内容。

CREATE TRIGGER tri_book1 ON T_Teacher

FOR INSERT,UPDATE,DELETE AS

SELECT * FROM T_Teacher

6.创建触发器tri_book2,当修改T_Teacher表中的TeacherCode字段值时,该字段在T_BookOrder表中的对应值也作修改。

CREATE TRIGGER tri_book2 ON T_BookOrder FOR UPDATE AS

UPDATE T_BookOrder

SET TeacherCode=(SELECT Inserted.TeacherCode FROM Inserted) WHERE TeacherCode=(SELECT TeacherCode FROM Deleted)

7.创建触发器tri_book3,检查插入在T_BookInfo表中的教材库存(StockNum)是否大于等于0。

CREATE TRIGGER tri_book3 ON T_BookInfo FOR INSERT,UPDATE AS

DECLARE @stocknum smallint

SELECT @stocknum=StockNum FROM inserted IF @stocknum<0 BEGIN ROLLBACK

RAISERROR('库存量必须大于等于0!',16,1) END

8.创建触发器tri_book4,当删除教师信息时同步删除T_BookOrder表中对应教师所预订的教材记录。

CREATE TRIGGER tri_book4 ON T_Teacher FOR DELETE AS

DELETE FROM T_BookOrder WHERE T_BookOrder.TeacherCode= (SELECT TeacherCode FROM deleted)

9.创建视图view_book1,使其包含预订数量最高的20%的教材信息。要求显示教材代号(BookCode)、教材名称(BookName)、ISBN号(ISBNCode)和出版社名称(Publisher)。

CREATE VIEW view_book1 AS

SELECT TOP 20 PERCENT T_BookOrder.BookCode, BookName, ISBNCode,StuBookNum+TeaBookNum AS 数量, Publisher FROM T_BookOrder INNER JOIN

(T_Publisher INNER JOIN T_BookInfo

ON T_Publisher.PublisherCode=T_BookInfo.PublisherCode) ON T_BookOrder.BookCode=T_BookInfo.BookCode ORDER BY StuBookNum+TeaBookNum DESC

10.创建视图view_book2,查询预订了教材名中含有“程序”一词的教师姓名(TeacherName)和所在学院名称(AcadName)。

CREATE VIEW view_book2 AS

SELECT TeacherName,AcadName

FROM T_Teacher,T_Academy,T_BookOrder,T_Bookinfo WHERE T_Bookinfo.BookCode=T_BookOrder.BookCode AND T_BookOrder.TeacherCode=T_Teacher.TeacherCode AND T_Teacher.AcadCode=T_Academy.AcadCode AND BookName LIKE '%程序%' 或

CREATE VIEW view_book2 AS

SELECT TeacherName,AcadName FROM T_Academy INNER JOIN (T_Teacher INNER JOIN

(T_BookOrder INNER JOIN T_Bookinfo

ON T_BookOrder.BookCode=T_Bookinfo.BookCode) ON T_Teacher.TeacherCode=T_BookOrder.TeacherCode) ON T_Academy.AcadCode=T_Teacher.AcadCode WHERE BookName LIKE '%程序%' 或

11.创建视图view_book3,使其包含“学院名称(AcadName)”、“教师姓名(TeacherName)”、“预订书名(BookName)”、“是否领走(TakeAway)”。

CREATE VIEW view_book3 AS

SELECT AcadName, TeacherName, BookName, TakeAway FROM T_BookInfo INNER JOIN T_BookOrder ON T_BookInfo.BookCode=T_BookOrder.BookCode INNER JOIN T_Teacher

ON T_BookOrder.TeacherCode = T_Teacher.TeacherCode INNER JOIN T_Academy

ON T_Teacher.AcadCode = T_Academy.AcadCode

10.4 实验四 SQL Server数据库管理

一.实验目的

本实验主要了解SQL Server数据库的安全机制和备份策略。通过本实验,读者将学会

在企业管理器中进行用户的创建和权限的管理以及数据库的备份和恢复。

二.实验环境

? Microsoft SQL Server 2000 企业管理器和Microsoft SQL Server 2000 查询分析器 ? Book数据库

三.实验内容

1.利用企业管理器将Book数据库完全备份到磁盘文件D:\\BookBackup中,然后使用备份文件D:\\BookBackup进行完全恢复操作。

备份操作参考步骤:

(1)选中数据库并执行备份菜单。在控制台根目录窗格选中要备份的数据库Book,单击右键找到“所有任务/备份数据库”菜单,如图6-1a;或选中数据库Book后使用菜单栏中“工具/备份数据库”菜单,如图6-1b。

.

图6-1a

图6-1b

(2) 在SQL Server备份窗口中选择备份策略为完全备份,点击添加按钮设置备份的目的设备,如图6-1c所示。

(3) 在选择备份目的窗口添加备份目的设备或文件,选择或设置目的文件为:D:\\BookBackup,如图6-1d所示。

(4) 在SQL Server备份窗口中选择重写方式为重写现有媒体,然后单击“确定”按钮执行备份,如图6-1e所示。

图6-1d

图6-1e

图6-1 c

恢复操作参考步骤:

(1) 在控制台根目录窗格选中数据库,点右键找到“所有任务/还原数据库”菜单;或选中数据库后使用菜单栏中“工具/还原数据库”菜单。

(2) 在“还原数据库窗口”中,设置“还原为数据库”的数据库名,可以使用原数据库名,也可重新命名。选择“还原”的备份源,如果选择“数据库”,在显示数据库备份中选择备份的数据,则系统在“要还原

1c

的的第一个备份”列表框中自动列出所有已生成在指定备份目录下的备份文件和时间,只要将备份文件的复选框选中,按确定按钮就开始数据库恢复。

2.利用企业管理器建立一个名称为“Book维护计划”的数据库维护计划,将Book数据库每天0:00备份到磁盘目录D:\\下,事务日志每隔6小时备份一次到磁盘目录D:\\下。

操作参考步骤:

选中要备份的数据库Book,单击右键找到“所有任务/维护计划”菜单;或选中数据库Book后使用菜单栏中“工具/数据库维护计划器”菜单。

3.将Book数据库中的教师信息表数据(T_Teacher)导出到Excel文件D:\\Teacher.xls。

操作参考步骤:

选中数据库Book,单击右键找到“所有任务/导出数据”菜单,进入DTS导入/导出/向导首页。

4.将Book数据库进行分离,然后再练习附加数据库Book_Data.MDF的操作。

操作参考步骤:

(1) 分离数据库:在“数据库”文件夹找到Book右击Book数据库选择“所有任务/分离数据库”菜单。 (2) 附加数据库:右击“数据库”,选择“所有任务/附加数据库”菜单。

5.利用企业管理器创建一个用户名为“MyMary”的用户,密码为“secret1234”,该用户对“Book”数据库中的T_Teacher表只有查询的权限,没有删除、插入和修改权限。以该用户名和密码通过查询分析器登录到SQL Server服务器,对T_Teacher表进行查询、插入、删除和修改操作来验证用户权限。

操作参考步骤:

(1) 在控制台根目录窗格,找到“安全性/登录/新建登录”菜单,创建一个名称为“MyMary”,密码为“secret1234”的SQL Server认证帐号。

(2) 展开Book数据库树形结构,在“用户”项上单击右键,选择“新建数据库用户”,创建一个名称为“MyMary”,密码为“secret1234”的用户。如果步骤(1)中已设好可访问数据库“Book”,则与该SQL Server认证帐号同名的用户帐户就自动加入该数据库的用户中,步骤(2)省略。 (3) 选中”MyMary”,右单击找到“属性”,对“MyMary”用户授规定的权限。 (4) 修改SQL Server登录帐号为”MyMary”

验证:(1)以”MyMary”登录查询分析器

(2) 删除验证: DELETE FROM T_Teacher WHERE TeacherCode='01010101' (3)插入验证: INSERT T_Teacher(TeacherCode,TeacherName,AcadCode,Sex,Title) VALUES('11111111','张三','11','女','讲师')

(4)修改验证: UPDATE T_Teacher SET TeacherCode='12345678' WHERE TeacherCode='11111111'

6.利用企业管理器修改上题中“MyMary”用户的权限,授予其对T_Teacher表的查询、插入和修改权限,重新再对该用户权限进行验证。

操作参考步骤:

选中“MyMary”用户,右单击找到“属性”,对“MyMary”的权限进行修改。 验证:如第5题

7.为Book数据库创建一个名称为“BookRole”的数据库角色,设置其对所有表具有Select

图1

权限,此外,对T_BookOrder表和T_BookInfo还具有修改、插入或删除权限,禁止在T_Teacher执行Delete操作。

操作参考步骤:

(1) 打开Book数据库文件夹,右击“角色”文件夹,并在弹出的菜单中选择“新建数据库角色”命令, 创建“BookRole”数据库角色。

(2)右击“BookRole” 角色,并在弹出的菜单中选择“属性”命令, 在属性对话框中单击“权限”按钮,对“BookRole” 角色的权限进行设置。

8.为Book数据库创建一个名称为“zhujiu”的用户,该用户对应SQL Server登录帐户“zhujiu”,将该用户添加为数据库角色BookRole的成员。

操作参考步骤:

(1) 创建名称为“zhujiu”的SQL Server认证帐号。

(2) 创建名称为“zhujiu”的用户,并将其添加为数据库角色BookRole的成员。

验证:如第5题设计相应的SQL命令进行用户权限的验证。

10.5 实验五 VB.NET程序设计基础和常用控件

一.实验目的

本实验主要了解面向对象程序设计语言VB.NET基本语言元素包括集成开发环境、语言基础、基本控制结构、过程、常用控件和界面设计。通过本实验,读者将学会一些主要的面向对象的设计方法并可以利用VB.NET完成简单的应用程序开发。

二.实验环境

? Microsofe Visual Studio .NET 2003和Book数据库

三.实验内容

1.设计一个Visual Basic.Net的应用程序,窗体上有一个多行文本框和3个命令按钮,程序界面如图1所示。要求应用程序运行时,当单击窗体上【显示文本信息】按钮,文本框中显示红色文字“我喜欢VB.NET,因为它简单易学,使用方便。”当单击窗体上【改变背景色】按钮,文本框的背景色变为黄色。当单击窗体上【结束】按钮,程序结束。保存该应用程序。

图1

图2

窗体对象属性 对象 属性 设置值

Form1 Text Text Text Text 第一个VB.NET实验 显示文本信息 改变背景色 结束 Textbox1 Text Button1 Button2 Button3

Private Sub Button1_Click(……) Handles Button1.Click

TextBox1.Text = \我喜欢VB.NET,因为它简单易学,使用方便。\End Sub

Private Sub Button2_Click(……) Handles Button2.Click TextBox1.BackColor = Color.Yellow End Sub

Private Sub Button3_Click(……) Handles Button3.Click End End Sub

2.试编一程序,将华氏温度转换为摄氏温度。程序运行时,单击窗体上【开始】按钮,提示输入华氏温度(用InputBox函数),然后将华氏温度转化为摄氏温度,并在窗体上显示华氏温度和摄氏温度。转换公式为:C=5/9*(F-32),其中,F是华氏温度,C是摄氏温度。程序界面如图2所示。

窗体对象属性 对象 Button1 Label1 Label2 Label3 Label4

Private Sub Button1_Click(……) Handles Button1.Click Dim c As Single Dim f As Single

f = Val(InputBox(\请输入华氏温度\ c = 5.0 / 9 * (f - 32)

Label3.Text = Format(f, \ Label4.Text = Format(c, \End Sub

属性 Text Text Text Text Text 设置值 开始 华氏温度 摄氏温度 Textbox1 Text

3.设计一程序,窗体界面如图3所示。要求在程序运行时,根据选择可以改变文本框内文本的字体、字形等。

图4

图3 图4

窗体对象属性

对象 Textbox1 Button1 GroupBox1 GroupBox 2 属性 Text Text Text Text 退出 颜色设置 字形设计 设置值 RadioButton1 Text 红色 Checked True RadioButton2 Text RadioButton3 Text CheckBox1 CheckBox2 CheckBox3

Private Sub Form1_Load(……) Handles MyBase.Load TextBox1.ForeColor = Color.Red

TextBox1.Font = New Font(TextBox1.Font.FontName, 12, FontStyle.Underline)

TextBox1.Text = \是面向对象的程序设计语言,简单易学,深受程序设计者喜欢\ TextBox1.SelectionStart = 0 End Sub

Private Sub RadioButton1_CheckedChanged(……) Handles RadioButton1.CheckedChanged, _ RadioButton2.CheckedChanged, RadioButton3.CheckedChanged If RadioButton1.Checked Then TextBox1.ForeColor = Color.Red ElseIf RadioButton2.Checked Then TextBox1.ForeColor = Color.Green Else

TextBox1.ForeColor = Color.Blue End If End Sub Private

Sub

CheckBox1_CheckedChanged(……)

Handles

CheckBox1.CheckedChanged,

CheckBox2.CheckedChanged, CheckBox3.CheckedChanged Dim newFontStyle As System.Drawing.FontStyle newFontStyle = FontStyle.Regular If CheckBox1.Checked Then

newFontStyle = newFontStyle + FontStyle.Underline End If

If CheckBox2.Checked Then

newFontStyle = newFontStyle + FontStyle.Bold

绿色 蓝色 Text 下划线 Checked True Text Text 粗体 斜体 End If

If CheckBox3.Checked Then

newFontStyle = newFontStyle + FontStyle.Italic End If

TextBox1.Font = New Font(TextBox1.Font.Name, TextBox1.Font.Size, newFontStyle) End Sub

Private Sub Button1_Click(……) Handles Button1.Click End End Sub

4. 设计一程序,其界面如图4所示,程序运行时,单击“添加”按钮,可将文本框的内容添加到列表框中;单击“删除”按钮,可删除选中的内容;单击“清除”按钮,清除列表框中的所有内容;双击列表框中某一项,该项内容可在文本框中显示。

窗体对象属性

对象 Label1 属性 歌星排行榜 Text 设置值 Textbox1 Text ListBox1 Items 刘德华 周杰伦 张惠妹 Button1 Button2 Button3

Private Sub Button1_Click(……) Handles Button1.Click Dim i As Integer

For i = 0 To ListBox1.Items.Count - 1

If TextBox1.Text = ListBox1.Items(i) Then Exit For End If Next

If i >= ListBox1.Items.Count Then ListBox1.Items.Add(TextBox1.Text) TextBox1.Text = \ End If End Sub

Private Sub Button2_Click(……) Handles Button2.Click ListBox1.Items.RemoveAt(ListBox1.SelectedIndex) End Sub

Private Sub Button3_Click(……) Handles Button3.Click ListBox1.Items.Clear() End Sub

Private Sub ListBox1_DoubleClick(……) Handles ListBox1.DoubleClick

Text Text Text 添加 删除 清除 TextBox1.Text = ListBox1.SelectedItem End Sub

5-2

5.设计一个具有3个窗体的应用程序。其中“算术运算”窗口具有主菜单,菜单内容如图5a、5b所示;“加、减运算”和“乘、除运算”窗口具有弹出式菜单,如图5c、5d所示。应用程序运行时,可从“算术运算”窗口的主菜单中选择“计算加、减”或“计算乘、除”菜单命令,进入“加、减运算”窗口或“乘、除运算”窗口,然后从键盘上输入两个数到文本框中,利用窗体上的弹出式菜单命令求出它们的和、差或乘、除,并显示运算结果。

图5a

图5b 图5c 图5d

窗体Form1对象属性 对象 属性 设置值 Form1 Text 算术运算 MenuItem1 Text 计算 MenuItem2 Text 计算加、减 MenuItem3 Text 计算乘、除 MenuItem4 Text 退出 MenuItem5 Text 结束

窗体Form2对象属性 窗体Form3对象属性 对象 属性 设置值 对象 属性 设置值 Form2 Text 加、减运算 Form3 Text 乘、除运算 ContextMenu ContextMenu1 ContextMenu ContextMenu Label1 Text 第一个数 Label1 Text 第一个数 Label2 Text 第二个数 Label2 Text 第二个数 Label3 Text 计算结果 Label3 Text 运算结果 Textbox1 Text Textbox1 Text Textbox2 Text Textbox2 Text Textbox3 Text Textbox3 Text ContextMenu1 ContextMenu1 MenuItem1 Text 加运算 MenuItem1 Text 乘运算 MenuItem2 Text 减运算 MenuItem2 Text 除运算 MenuItem3 Text 清除 MenuItem3 Text 清除 MenuItem4 Text 返回 MenuItem4 Text 返回 //窗体“算术运算”

Private Sub MenuItem2_Click(……) Handles MenuItem2.Click

图 Dim frm2 As New Form2 Me.Hide() frm2.Show() End Sub

Private Sub MenuItem3_Click(……) Handles MenuItem3.Click Dim frm3 As New Form3 Me.Hide() frm3.Show() End Sub

Private Sub MenuItem5_Click(……) Handles MenuItem5.Click End End Sub

//窗体“加、减运算”

Private Sub MenuItem1_Click(……) Handles MenuItem1.Click

TextBox3.Text = Val(TextBox1.Text.Trim) + Val(TextBox2.Text.Trim) End Sub

Private Sub MenuItem2_Click(……) Handles MenuItem2.Click

TextBox3.Text = Val(TextBox1.Text.Trim) - Val(TextBox2.Text.Trim) End Sub

Private Sub MenuItem3_Click(……) Handles MenuItem3.Click TextBox1.Text = \ TextBox2.Text = \ TextBox3.Text = \End Sub

Private Sub MenuItem4_Click(……) Handles MenuItem4.Click Dim frm1 As New Form1 Me.Hide() End Sub

//窗体“乘、除运算”

Private Sub MenuItem1_Click(……) Handles MenuItem1.Click TextBox3.Text = Val(TextBox1.Text) * Val(TextBox2.Text) End Sub

Private Sub MenuItem2_Click(……) Handles MenuItem2.Click If Val(TextBox2.Text) = 0 Then MsgBox(\除数为0,出错!\ TextBox1.Text = \ TextBox2.Text = \ Exit Sub Else

TextBox3.Text = Format(Val(TextBox1.Text) * 1.0 / Val(TextBox2.Text), \ End If End Sub

Private Sub MenuItem3_Click(……) Handles MenuItem3.Click TextBox1.Text = \

TextBox2.Text = \ TextBox3.Text = \End Sub

Private Sub MenuItem4_Click(……) Handles MenuItem4.Click Dim frm1 As New Form1 Me.Hide() frm1.Show() End Sub

10.6 实验六 VB.NET数据库应用程序(1)

一.实验目的

通过本实验,学习和掌握ADO.NET中对象SqlDataAdapter和对象DataSet的应用,同时掌握通过绑定对象实现数据库的数据浏览操作和更新操作。

二.实验环境

? Microsofe Visual Studio .NET 2003和Book数据库 三.实验内容

1.利用绑定对象编程实现对Book数据库中教材订购表的信息浏览和信息更新,功能界面见下图

图10-34 用数据绑定实现表T_BookOrder的数据浏览和更新

实验辅导:

定义绑定对象:Dim BookOrder_bind As BindingManagerBase

设置绑定数据源:BookOrder_bind = BindingContext(DataSet11, \翻到头:BookOrder_bind.Position = 0

前翻:BookOrder_bind.Position = BookOrder_bind.Position - 1 后翻:BookOrder_bind.Position = BookOrder_bind.Position + 1 翻到尾:BookOrder_bind.Position = BookOrder_bind.Count - 1 增加一门新课程:BookOrder_bind.AddNew()

删除一门课程:BookOrder_bind.RemoveAt(BookOrder_bind.Position)

窗体对象属性 对象 Label1 Text 属性 设置值 教材订购信息查询 GroupBox1 Label2 Label3 Label4 Label5 Label6 Label7 Label8 Textbox1 Textbox2 Textbox3 Textbox4 Textbox5 Textbox6 Button1 Button2 Button3 Button4 Button5 Button6 Button7 Button8 Button9 DataGrid1

//窗体加载

Text Text Text Text Text Text Text Text DataBindings.Text DataBindings.Text DataBindings.Text DataBindings.Text DataBindings.Text DataBindings.Text Text Text Text Text Text Text Text Text Text 教材订购信息浏览 教材编号 教师编号 学生人数 教师人数 订购时间 领取否 备注 DataSet11-T_BookOrder.BookCode DataSet11-T_BookOrder.TeacherCode DataSet11-T_BookOrder.StuBookNum DataSet11-T_BookOrder.TeaBookNum DataSet11-T_BookOrder.TakeAway DataSet11-T_BookOrder.Description DataSet11-T_BookOrder.OrderTime |< << >> >| 订购新教材 删除教材 撤销更新 确认更新 退出系统 DataTimePicker1 DataBindings.Text Private Sub Form1_Load(……) Handles MyBase.Load SqlDataAdapter1.Fill(Me.DataSet11.T_BookOrder)

BookOrder_bind = Me.BindingContext(DataSet11, \ DataGrid1.DataSource = DataSet11.Tables(\ End Sub //翻到首记录

Private Sub Button1_Click(……) Handles Button1.Click BookOrder_bind.Position = 0

DataGrid1.CurrentRowIndex = BookOrder_bind.Position End Sub

//前翻一条记录

Private Sub Button2_Click(……) Handles Button2.Click BookOrder_bind.Position = BookOrder_bind.Position - 1 DataGrid1.CurrentRowIndex = BookOrder_bind.Position End Sub //后翻一条记录

Private Sub Button3_Click(……) Handles Button3.Click

BookOrder_bind.Position = BookOrder_bind.Position + 1 DataGrid1.CurrentRowIndex = BookOrder_bind.Position End Sub //翻到尾记录

Private Sub Button4_Click(……) Handles Button4.Click BookOrder_bind.Position = BookOrder_bind.Count - 1 DataGrid1.CurrentRowIndex = BookOrder_bind.Position End Sub

// 单击DataGrid1绑定对象指针同步移动

Private Sub DataGrid1_Click(……) Handles DataGrid1.Click BookOrder_bind.Position = DataGrid1.CurrentRowIndex End Sub

//增加记录

Private Sub Button5_Click(……) Handles Button5.Click BookOrder_bind.AddNew() End Sub

//删除记录

Private Sub Button6_Click(……) Handles Button6.Click BookOrder_bind.RemoveAt(BookOrder_bind.Position) End Sub //取消修改

Private Sub Button7_Click(……) Handles Button7.Click BookOrder_bind.CancelCurrentEdit() End Sub

//确定修改

Private Sub Button8_Click(……) Handles Button8.Click BookOrder_bind.EndCurrentEdit()

SqlDataAdapter1.Update(Me.DataSet11.T_BookOrder) End Sub //退出系统

Private Sub Button9_Click(……) Handles Button9.Click End

End Sub

2.按书名查询书的作者、价格和出版社名称:输入书名中的部分字或词,查询所有相关书的情况。运行效果如图10-x所示。

10-x 根据书名查询书的情况

提示:

(1)构造Select语句时:查询结果来自T_BookInfo和T_Publisher两个表;使用Like运算构造查询条件,使用As为查询字段重命名为中文;

(2)DataGrid标题“查询结果”的设置通过DataGrid的CaptionText属性实现。

窗体对象属性

对象 Form1 Label1 属性 Text Text Text Text 设置值 书籍查询 请输入书名 查询 Textbox1 Button1

DataGrid1 CaptionText 查询结果 Private Sub Button1_Click(……) Handles Button1.Click

Dim sql As String = \书名,price as 价格,publisher as 出版社\ & \

& \ & \ Dim myconn As New SqlConnection(\ \

Dim myadapter As SqlDataAdapter = New SqlDataAdapter(sql, myconn) Dim mydataset As New Data.DataSet myadapter.Fill(mydataset, \

DataGrid1.DataSource = mydataset.Tables(\ End Sub

3.通过查询实验三第11题所创建的视图view_book3,实现查询各学院领书情况,如图10-k所示。

图10-k 各学院领书情况

提示:

查询学院使用ComboBox选择。可以先创建数据集,使用ComboBox的DataSource属性设置数据集,使用ComboBox的DisplayMember属性设置显示数据集的数据字段。

窗体对象属性

对象 Form1 Label1 属性 Text Text 设置值 学院领书情况 选择学院 ComboBox1 Text DataGrid1

Private Sub Form1_Load(……) Handles MyBase.Load

CaptionText 查询结果 Dim sql As String = \

Dim myconn As New SqlConnection(\ & \

Dim myadapter As SqlDataAdapter = New SqlDataAdapter(sql, myconn) Dim mydataset As New Data.DataSet myadapter.Fill(mydataset, \学院名\

ComboBox1.DataSource = mydataset.Tables(\学院名\

ComboBox1.DisplayMember = mydataset.Tables(\学院名\ End Sub

Private Sub ComboBox1_SelectedIndexChanged(……) Handles ComboBox1.SelectedIndexChanged Dim sql As String = \ & \ Dim myconn As New SqlConnection(\ & \

Dim myadapter As SqlDataAdapter = New SqlDataAdapter(sql, myconn) Dim mydataset As New Data.DataSet myadapter.Fill(mydataset, \

DataGrid1.DataSource = mydataset.Tables(\ End Sub

10.7 实验七 VB.NET数据库应用程序(2)

一.实验内容

通过本次实验,学习和掌握ADO.NET中对象SqlCommand的应用;学习存储过程的调用。

二.实验环境

? Microsofe Visual Studio .NET 2003和Book数据库

三.实验内容

SqlCommand对象既可以完成对数据库的读操作,又可以完成对数据库的写操作。本实验要求完成下列数据库访问操作:

1. 用SqlCommand完成数据查询操作。具体要求如下:

从控件ComboBox1中选择不同的书号时,右侧的教材订购信息将随之变化。即实现查询功能:给定教材代号,查出相应教材的教材名称,统计学生订数和教师订数。运行界面如图10-35所示。

Dim sql As String = \

& \

Dim myconn As New SqlConnection(\ & \

Dim mycmd As SqlCommand = New SqlCommand(sql, myconn) Dim i As Integer myconn.Open() Try

i = mycmd.ExecuteNonQuery() If i > 0 Then

MsgBox(\记录删除成功\ TextBox1.Text = \ TextBox2.Text = \ TextBox3.Text = \ End If

Catch ex As Exception MsgBox(ex.Message) End Try myconn.Close() End Sub //确认修改

Private Sub Button4_Click(……) Handles Button4.Click

Dim sql As String = \ & TextBox2.Text & \ & TextBox3.Text & \

& \

Dim myconn As New SqlConnection(\ & \

Dim mycmd As SqlCommand = New SqlCommand(sql, myconn) Dim i As Integer myconn.Open() Try

i = mycmd.ExecuteNonQuery() If i > 0 Then

MsgBox(\记录修改成功\ TextBox1.Text = \ TextBox2.Text = \ TextBox3.Text = \ End If

Catch ex As Exception MsgBox(ex.Message) End Try myconn.Close() End Sub

//取消修改

Private Sub Button5_Click(……) Handles Button5.Click

Dim sql As String = \ & \

Dim myconn As New SqlConnection

myconn.ConnectionString = \ & \ Dim mycmd As SqlCommand = New SqlCommand(sql, myconn) Dim myread As SqlDataReader myconn.Open()

myread = mycmd.ExecuteReader If (myread.Read) Then

TextBox2.Text = myread.Item(0) TextBox3.Text = myread.Item(1) Else

TextBox2.Text = \ TextBox3.Text = \ End If

myconn.Close()

End Sub

4.通过调用实验三第2题所创建的存储过程proc_book2,实现程序查询指定图书的预订数量,如图10-z所示。

图10-z调用存储过程查询教材预订量

窗体对象属性

对象 Label1 Label2 Label3 Button1

Private Sub Button1_Click(……) Handles Button1.Click

Dim myconn As New SqlConnection(\ & \ Dim mycmd As SqlCommand

属性 Text Text Text Text 设置值 书号 预订数量 查询 Textbox1 Text mycmd = New SqlCommand(\ mycmd.CommandType = CommandType.StoredProcedure

Dim myParm As SqlParameter = mycmd.Parameters.Add(\ myParm.Value = TextBox1.Text myconn.Open()

Label3.Text = Format(mycmd.ExecuteScalar, \ myconn.Close() End Sub

10.8 实验八 VB.NET数据报表和数据图表

一.实验目的

掌握利用Crystal Reports for VS.NET创建数据报表和数据图表的基本方法和操作步骤;熟练掌握利用“标准报表专家”向导创建水晶报表;掌握在嵌入式 Crystal Report Designer中设计和调整水晶报表布局的方法和技巧;掌握水晶报表数据访问的拉(PULL)模式和推(PUSH)模式的实现方法;了解图表延伸的实现方法;掌握水晶报表的导出与打印。

二.实验环境

? Microsofe Visual Studio .NET 2003和Book数据库

三.实验内容

1. 利用Crystal Reports创建一个如图10-37所示的教材一览表。提示:使用报表专家。

图10-37 教材一览表

教材一览表初始布局:

教材一览表最终布局:

教材一览表:

2.创建一个如图10-39所示的机械工业出版社教材一览表。提示:可使用“来自于现有的报表”创建。 图10-39 机械工业出版社教材

机械工业出版社教材一览表初始布局:

机械工业出版社教材一览表最终布局:

机械工业出版社教材一览表:

3.创建教师一览表。

(1)创建一个如图10-40所示的教师一览表。要求按学院分组显示每个学院下的教师姓名、职称、性别和联系电话,并统计每个学院的教师人数以及该校教师总人数。提示:使用报表专家。

图10-40教师一览表

教师一览表初始布局:

教师一览表最终布局:

教师一览表:

(2)为实验3(1)的教师一览表增加一个如图10-42所示的学院教师分布图。提示:可使用“来自于现有的报表”创建。

图10-42学院教师分布图表

教师一览表最终布局:

教师一览表:

(3)实现如图10-43所示的学院教师分布图的图表延伸功能。 操作提示:

在Crystal Report Designer中右击任一报表节,并执行相应快捷菜单中的“格式化节”命令,将出现“节专家”对话框,在“节”区中,单击“报表页眉”,然后选中“延伸到后续节”复选框,单击“确定”按钮完成后,在Crystal Report Designer的“报表页眉”节中适当移动图表或调整其大小,即可实现图表延伸功能。

图10-43教师分布图延伸

4.创建一个如图10-44所示的教材订购一览表。要求按教材分组显示每名订购该教材的教师姓名、订书时间以及订书量(教师订书量+学生订书量),并统计该教材订购教师的人数和订书量以及所有教材订购教师的总人数和总订书量。 教材订购一览表初始布局:

教材订购一览表最终布局:

教材订购一览表:

5.创建教师教材订购一览表。

(1)利用水晶报表的推(PUSH)数据访问方式创建一个如图10-46所示的教师教材订购一览表。要求按教师分组显示该教师所订购的教材信息(教材名称、作者、订书时间、订书量),并统计该教师的订书量以及所有教师的总订书量。 (2)分别以PDF和XLS格式导出教师教材订购一览表,并分别在Adobe Acrobat 和Microsoft Excel应用程序中打开并观察所导出的水晶报表文件内容。 (3)打印教师教材订购一览表。 参考步骤:

1) 通过数据适配器配置向导创建数据集:DataSetTeacherOrder。

2) 用“标准报表专家”向导创建一个新的水晶报表文件:CrystalReportTeacherOrder.rpt。 3) 调整水晶报表的布局。

4) 向Windows窗体添加CrystalReportViewer控件。从工具箱中拖动CrystalReportViewer

控件至表单Form1中,编写程序代码将数据集中的数据绑定到CrystalReportViewer上:

Private Sub Form1_Load(…) Handles MyBase.Load

Me.SqlDataAdapter1.Fill(Me.DataSetTeacherOrder1, \ ' 填充数据集

Dim oRpt As New CrystalReportTeacherOrder ' 水晶报表绑定

oRpt.SetDataSource(DataSetTeacherOrder1) ' 设定水晶报表的ReportSource

CrystalReportViewer1.ReportSource = oRpt End Sub

5) 运行应用程序,查看报表;单击【导出】按钮,从“导出报表”对话框中分别选择报表导出格式:Adobe Acrobat (.pdf)和Microsoft Excel (.xls)即可导出相应格式的报表。单击【打印】按钮,即可打印教师教材订购一览表。

教师订购一览表初始布局:

教师订购一览表最终布局:

教师订购一览表:

本文来源:https://www.bwwdw.com/article/bvf6.html

Top