数据库原理实验报告.docx
《数据库原理实验报告.docx》由会员分享,可在线阅读,更多相关《数据库原理实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
数据库原理实验报告
重庆交通大学信息科学与工程学院
设计性实验报告
专业:
计算机科学与技术
班级:
2015级4班
学号:
631507020418
姓名:
张再朝
课程名称:
数据库原理课程实验
实验项目性质:
设计性实验
实验所属课程:
《数据库原理B》
实验室(中心):
软件与通信实验室
指导教师:
王家伟
实验完成时间:
2017年11月25日
总成绩
教师签名
此页必须保留
评分标准及成绩
实验名称
评分细则
评分
实验四
报告表述的清晰程度和完整性(20分)
概念模型的合理性(实验一内容)(10分)
逻辑模型的合理性(实验一内容)(10分)
功能合理性(20分)
功能完善性(10分)
个人体会(10分)
实验二
10分
实验三
10分
总成绩
总体实验要求:
1排版要求
标题用黑体四号,段前、段后距6磅(或0.3行);正文用小四号宋体,行距为1.5倍行距。
报告必须生成目录,目录必须带页码。
2设计报告需要打印,装订,1份/人,理论课考试时交设计报告。
3各班学习委员收集每位同学做的成果,包含数据库的备份、程序源代码和运行配置说明,并将每位同学的成果拷贝到软件与通信实验室的教师机上。
第一部分实验四
报告正文
一、实验目的
1、掌握ODBC的概念并学习使用ODBC访问数据库;
2、学习VisualC++下如何通过ODBC访问数据库;
3、学习用VisualC++整理简单数据库应用程序的方法。
二、实验题目
某大学需要使用计算机管理学生信息、成绩信息等,要求如下:
1、学生信息管理,包含学生的基本信息,如学号、姓名、性别、出生日期等;还要包含学生的简历、社会关系等;
2、课程管理,包含整个学校开设的所有课程;
3、教学计划管理,包含设定各系各专业在哪学期开设什么样的课程,学分是多少;
4、学生选课管理,包含学生在某学期选择什么样的课程;
5、学生成绩管理,包含学生各课程的成绩、是否补考、补考成绩;
6、学生奖惩管理,管理学生在校期间所获得的奖励和惩罚记录。
根据实验一的结果,完成设计。
可以根据自己的实际情况实现一部分也可。
三、实验涉及仪器设备和材料清单(或软件)
操作系统:
Windows10
软件:
VisualStudioProfessional2017,PowerDesigner15.1
实现语言:
C#
开发平台:
.NETFramework4
数据库:
SQLServer2014
四、实验原理
Microsoft推出的ODBC(OpenDatabaseConnectivity)技术为异质数据库的访问提供了统一的接口。
ODBC基于SQL(StructuredQueryLanguage),并把它作为访问数据库的标准。
这个接口提供了最大限度的相互可操作性:
一个应用程序可以通过一组通用的代码访问不同的数据库管理系统。
一个软件开发者开发的客户/服务器应用程序不会被束定于某个特定的数据库之上。
ODBC可以为不同的数据库提供相应的驱动程序。
ODBC的灵活性表现在以下几个方面:
·应用程序不会受制于某种专用的API
·SQL语句以源代码的方式直接嵌入在应用程序中
·应用程序可以以自己的格式接收和发送数据
·ODBC的设计完全和ISOCall-LevelInterface兼容
·现在的ODBC数据库驱动程序支持55家公司的数据产品
最新推出的ODBC3.0已经升级到32位,支持Win32。
在C#中,提供了良好的数据库支持。
输入数据源是遵循开放式数据库互接(ODBC)标准,还是微软的数据访问对象(DAO)标准,或OLE数据库(OLEDB)标准。
ODBC功能在数据库管理系统,如MicrosoftAccess、Oracle或dBase的特定的驱动程序中实现。
C#提供了一个ODBC驱动程序的集合;其他的可从经销商那里买到。
实验中即利用ODBC接口来创建.NET下的数据库支持。
五、实验内容
1、建立概念模型
2、利用PowerDesigner生成的SQL语句建立相关数据表
3、利用C#进行相关软件开发
六、实验步骤及代码分析
查询部分:
privatevoid查询课程ToolStripMenuItem_Click(objectsender,EventArgse)
{
stringCommandString="select*fromCourse";
try
{
OdbcDataAdapteradapter=newOdbcDataAdapter(CommandString,odbcConnection);
DataSetds=newDataSet();
adapter.Fill(ds);
dataGridView1.DataSource=ds.Tables[0].DefaultView;
odbcConnection.Close();
}
catch(OdbcExceptionex)
{
MessageBox.Show(ex.Message);
}
}
录入成绩,利用数据源自动更新
privatevoidbutton2_Click(objectsender,EventArgse)
{
OdbcCommandBuilderocd=newOdbcCommandBuilder(adapter);
try
{
adapter.Update(ds);
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
this.Close();
return;
}
MessageBox.Show("成功");
this.Close();
}
更改成绩,利用数据源自动更新
privatevoidbutton1_Click(objectsender,EventArgse)
{
//dataGridView1.DataSource=null;
ds.Clear();
dataGridView1.Update();
stringCommandString="select*fromScorewhereScore.CourseNo='"+textBox1.Text+"'";
try
{
adapter=newOdbcDataAdapter(CommandString,odbcConnection);
adapter.Fill(ds);
dataGridView1.DataSource=ds.Tables[0].DefaultView;
odbcConnection.Close();
}
catch(OdbcExceptionex)
{
MessageBox.Show(ex.Message);
}
}
privatevoidbutton2_Click(objectsender,EventArgse)
{
OdbcCommandBuilderocd=newOdbcCommandBuilder(adapter);
try
{
adapter.Update(ds);
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
this.Close();
return;
}
MessageBox.Show("成功");
this.Close();
}
}
七、实验结果及分析
登录界面:
查询界面:
:
增加界面:
修改界面:
删除界面:
实验体会
通过本次实验,我明白了数据库中的各种操作是怎么回事,这些操作有增加,修改和删除,基于这些操作,完成了学生信息管理系统。
在用C#完成系统的过程中,重新回顾了高级程序设计语言编程的基本语法和思想,由此让我产生了许多学习的心得:
在上理论课的时候,要把笔记做好,课堂上的重点内容需要记录下来,尤其是关于技术方面的知识,这些知识的贯通需要通过应用来实现,在实验的实践过程中把理论知识用起来,达到活学活用的目的。
在完成了本次实验之后,我对于SQL代码的掌握更熟练了,而且对于C#语法的认识更深刻,在做出体现面向对象的程序的能力上,有所进步。
第二部分实验二、实验三
实验二表查询
一实验要求
根据给定的样例数据库pubs,完成以下查询操作。
1、无条件查询
1)查找pub库中authors表的全部信息。
2)查找其他样例表中全部信息。
2、简单条件查询
1)查找titles表中全部书号及书名。
2)查找titles表中价格在$15~18元之间的书的书名。
3)查找titles表中书名以T开头的书号,书名。
4)对其他样例表构造各种简单查询条件,进行查询。
3、多条件查询
1)查找书名起始字符为T,价格小于$16元的书名及价格。
2)查找书名起始字符不为T的,价格大于$16元的书号,书名及价格。
3)对其他样例表构造多个查询条件,进行查询。
4、用连接操作(或嵌套查询)进行查询
1)使用样例表titles,publishers进行查询:
查找出版社的名称以及所出的书名。
2)使用样例表authors,titleauthor,titles进行查询:
查找整理的姓、名和所写的书名。
3)对构造其他条件,在两个以上样例表中进行查询。
5、得到排序的查询结果
1)查找整理的姓、名、电话号码,并按整理姓、名排列。
2)查找书名和书的价格,按书价由大到小的次序排列。
3)对其他样例表构造查询条件、排序要求,给出查询结果。
6、使用函数进行查找
1)列出有多少类书。
2)列出书的定价有多少种。
3)列出书价最低的书名和书价。
4)查出书价最高的书名及书价。
5)列出当年销量的总和。
6)构造其他查询条件和统计要求,给出查询结果。
二实验结果
select*
fromauthors
select*
fromdiscounts
select*
fromsales
select*
fromtitles
select*
fromemployee
select*
fromjobs
select*
frompub_info
select*
frompublishers
select*
fromroysched
select*
fromstores
select*
fromtitleauthor
selecttitle_id,title
fromtitles
selecttitle
fromtitles
whereprice>15andprice<18
selecttitle_id,title
fromtitles
wheretitlelike'T%'
selecttitle_id,title,pub_id
fromtitles
wherepub_id<1000
selectprice,title
fromtitles
whereprice<16andtitlelike'T%'
selecttitle_id,title,price
fromtitles
wheretitlenotlike'T%'andprice>16
selecttitle_id,title,price
fromtitles
wheretitlenotlike'T%'andprice<=16
selectpub_name,title
fromtitles,publishers
wheretitles.pub_id=publishers.pub_id
selectau_lname,au_fname,title
fromauthors,titleauthor,titles
wheretitles.title_id=titleauthor.title_idandtitleauthor.au_id=authors.au_id
selectcity,title
fromtitles,publishers
wheretitles.pub_id=publishers.pub_id
selectau_fname,au_lname,phone
fromauthors
orderbyau_fname,au_lname
selecttitle,price
fromtitles
orderbypricedesc
selecttitle,price
fromtitles
orderbypriceasc
selectCOUNT(distincttype)as书的种类
fromtitles
selectCOUNT(distinctprice)as定价种类
fromtitles
selecttitle,price
fromtitles
whereprice=(selectmin(price)fromtitles)
selecttitle,price
fromtitles
whereprice=(selectmax(price)fromtitles)
实验三对象的建立与数据更新操作
一实验要求
1创建和修改对象
(1)创建表对象
按照下面的的结构与内容建两个关系。
表名分别以S、T开头,后面是建表人的学号(以下简记为T**、S**)。
先用createtable命令建立表的初始结构,表T**的初始结构包括下面T**中前四个属性。
然后再用altertable.add.添加一个属性:
QTY(库存量)。
并插入相应的内容。
T**
Title
author
t_no
price
QTY
计算机原理
张一平
S3092
20.80
200
C语言程序设计
李华
H129815.30
300
数据库原理
王家树
D1007
22.70
150
计算机网络
高明
S569018.90
230
Artificialintelligence
P.Winston
D2008
20.50
400
Expertsystems
R.Ullman
H3067
17.00
370
软件工程
鲁廷璋
S2005
35.00
200
Fortran程序设计
顾学峰
S5006
18.00
180
S**
T_no
Page
pub-date
S3092
304
1986
D1007
280
1993
S5006
315
1987
S5690
300
1993
H1298
210
1989
D2008
358
1994
S2005
298
1995
H3067
307
1995
(2)用altertable.altercolumn.改变属性title的长度。
(3)用子查询方式建新表。
表名以ST开头,后面为建表人学号(简记为ST**)。
(新表内须包括title和price两个属性。
)
(4)按t_no建索引,索引名为IT**(**表示建表人的学号,下同)。
(5)用子查询方式建视图,视图名为VT**,并在视图上查找所需信息。
(6)删除以VT**命名的视图。
(7)删除以ST**命名的表。
2、记录的插入、删除与更新
(1)同前,用子查询方式建立表ST**。
该表的属性应有t_no,title,price。
(2)在ST**表中插入一元组:
S7028,DigitalImageProcessing,36.00
(3)删除书名为“Fortran程序设计”的那个元组。
(4)删除书号以H开头的元组。
(5)把书价调整到原来价格的95%。
(6)把书号以D开头的那些书的书价减掉2.00元。
(7)将“计算机原理”的书号改为S1135。
(8)对所建的表,进行各种插入、删除、更新操作。
(9)每次修改表后,可用select查看一下修改后表中的内容,看是否满足要求。
3、统计
(1)计算T**表中这些书籍的最高书价、最低书价及平均书价。
(2)计算T**表中的书的种类是多少。
(3)计算S**表中1990年后出版的书有多少。
(4)计算总共有多少本书。
(5)对样例表,设计统计要求,获得各种统计量。
二实验结果
/*1*/
/*
(1)*/
createdatabasestudent
usestudent
createtableT631507020418(
Titlevarchar(30),
authorvarchar(15),
t_nochar(6),
pricenumeric(6,2))
insertintoT631507020418(Title,author,t_no,price)
select'计算机原理','张一平','S3092','20.8'
unionall
select'C语言程序设计','李华','H1298','15.3'
unionall
select'数据库原理','王家树','D1007','22.7'
unionall
select'计算机网络','高明','S5690','18.9'
unionall
select'Artificialintelligence','P.Winston','D2008','20.5'
unionall
select'Expertsystems','R.Ullman','H3067','17'
unionall
select'软件工程','鲁廷璋','S2005','35'
unionall
select'Fortran程序设计','顾学峰','S5006','18'
altertableT631507020418
addQTYint
updateT631507020418setQTY=200wheret_no='S3092'
updateT631507020418setQTY=300wheret_no='H1298'
updateT631507020418setQTY=150wheret_no='D1007'
updateT631507020418setQTY=230wheret_no='S5690'
updateT631507020418setQTY=400wheret_no='D2008'
updateT631507020418setQTY=370wheret_no='H3067'
updateT631507020418setQTY=200wheret_no='S2005'
updateT631507020418setQTY=180wheret_no='S5006'
createtableS6*******0418(
T_nochar(6),
pageint,
pub_datedate)
insertintoS6*******0418
select'S3092','304','1986'
unionall
select'D1007','280','1993'
unionall
select'S5006','315','1987'
unionall
select'S5690','300','1993'
unionall
select'H1298','210','1989'
unionall
select'D2008','358','1994'
unionall
select'S2005','298','1995'
unionall
select'H3067','307','1995'
/*
(2)*/
altertableT631507020418
altercolumnTitlevarchar(35)
/*(3)*/
selectTitle,priceintoST631507020418
fromT631507020418
/*(4)*/
createindexIT6315070200418
onT631507020418(t_no)
/*(5)*/
createviewVT631507020418as
select*fromT631507020418
/*(6)*/
dropviewVT631507020418
/*(7)*/
droptableST631507020418
/*2*/
/*
(1)*/
selectT_no,Title,price
intoST631507020418
fromT631507020418
/*
(2)*/
insertintoST631507020418
select'S7028','DigitalImageProcessing','36'
/*(3)*/
delete
fromST631507020418
whereTitle='Fortran程序设计'
/*(4)*/
delete
fromST631507020418
wheret_nolike'H%'
/*(5)*/
updateST631507020418
setprice=price*0.95
/*(6)*/
updateST631507020418
setprice=price-2
wheret_nolike'D%'
/*(7)*/
updateST631507020418
sett_no='S1135'
whereTitle='计算机原理'
/*(8)无*/
/*(9)无*/
/*3*/
/*
(1)*/
selectmax(price)MAX,min(price)MIN,avg(price)AVG
fromT631507020418
/*
(2)*/
selectcount(Title)种类
fromT631507020418
/*(3)*/
selectcount(*)
fromS6*******0418
whereDATEDIFF(yea