IT行业,数据库确实是一门相当重要的课程。但是在大学里面,对待数据库原理及应用这么课程以及其课程设计的重视程度就相差很大了,各个学校要求也不一样。如果是要学好,那确实要下工夫;如果只是完成课程设计,交差了事,其实相当简单。
既然是课程设计,也算是个小小的项目,既然是项目,也就离不开需求分析、数据库设计、部署实现等环节。当然,这个小小的项目只需要前面的部分:需求和数据库设计,数据库设计是重点。
需求分析就不用多说,和所有其他项目一样,无非就是用户需求,功能需求,系统需求等,找任何一本关于需求分析的书都是可以,除了那些个空话之外,更多的是要根据设计需要进行分析。
数据库设计就比较复杂一点,首先得把数据库原理搞清楚,比如:符合什么样的范式,怎么画ER图,如何理解用例图。在设计数据库之前,有一系列的分析要做:面向对象分析,用例分析,类和对象分析等等。分析到位是数据库设计成功的重要保障。分析完成之后才是设计,比如:逻辑结构设计,关系模式设计,存取方法设计,存储结构设计,数据完整性设计,参考完整性设计,Check约束,Default约束,触发器设计,视图设计,存储过程设计,权限设计等。这些都完成了,最后一步才是写SQL代码实现这些设计,创建数据库及相关的数据表,关联,视图,触发器,存储过程等一些列的看得见的数据库参数。
上面说的比较理论,也比较笼统。我想我可以用一个简单例子告诉你我要表达的意思。例子很简单,其中很多地方都不是太好,不过或许可以给你一个直观的思路。
数据库应用课程设计报告书
网上超市管理系统
成 绩:
学 号:
姓 名:
指导教师:
20 年 月 日
目录
任务书 (3)
1 需求调查、分析 (4)
11 企业介绍 (4)
12 需求调查及分析 (5)
2 面向对象分析和设计 (7)
21 用例分析 (7)
22类和对象设计 (12)
3 逻辑结构设计 (15)
31 类和对象向关系模式转换 (15)
32 关系模式优化 (16)
4 数据库物理结构设计 (16)
41 存取方法设计 (16)
42 存储结构设计 (17)
5 数据库完整性设计 (17)
51 主键及唯一性索引 (17)
52 参照完整性设计 (18)
53 Check约束 (18)
54 Default约束 (18)
55 触发器设计 (19)
6 数据库视图设计 (19)
7 数据库存储过程设计 (20)
8 权限设计 (20)
9 总结 (21)
参考资料 (21)
网上超市管理系统
摘要:
网上超市管理系统,是以网上管理方式为实例而设计的一种实用型管理系统。本系统最大的特点是通用性、简单 *** 作性,适用于超市的管理。随着商品的增多,商品管理人员的负担越来越重,为了让所有商品管理人员能从繁重的工作中解脱出来,实现无纸化办公;也为了使工作更有条理,更方便,更有效率,更为了超市在经营中提高利润而开发出这套网上超市管理系统。
1 需求调查、分析
11 企业介绍
在Internet飞速发展的今天,互联网成为人们快速获取、发布和传递信息的重要渠道,它在人们政治、经济、生活等各个方面发挥着重要的作用。在政府的大力提倡和支持下,我国电子商务已走上了健康发展的轨道。各行业纷纷建立自己的网站,开展网上产品信息发布,进行网上洽谈、签约,开展网络营销。将超市办成网上超市已经是大势所趋,甚至一些小型的超市也可以开展网上交易。总之,电子商务以互联网为媒介,以信息传播速度快、受众广泛、低成本动作的优势决定着其必然成为未来营销的主导,我国企业要充分重视由此带来的机遇和挑战,才能在激烈的国际竞争中立于不败之地。
在超市经营中,随着超市规模的不断扩大,人们对超市服务的要求不断提高,使用一款适合的网上超市管理系统将更加迫切。利用网上超市,人们可以在家里逛超市,只需要办理会员卡,就可以为本地顾客送货上门。不仅如此,把超市办成网上经营和管理将大大提高效率和收益。因此,开发一个网上超市管理系统是非常有必要和好处的。
12 需求调查及分析
121顾客需求
为方便用户购买商品,网上超市客户系统应该提供如下所示几种功能:
(1)商品分类:网上超市与传统超市相比的一个优势是,当用户明确自己要买哪类商品时,用户可以使用商品分类功能快速找到需要的商品。
(2)商品预览:以列表的方式显示商品信息,这样可以在页面显示大量的商品信息,同时可以提供更多的商品浏览方式,如分类浏览、热门商品等。
(3)商品显示:当用户找到感兴趣的商品后需要显示商品的详细信息,包括商品简介、出产商、价格等。
(4)购物帮助:当用户在购物中遇到什么问题时,可以查看购物帮助获得相关信息。管理员会根据顾客反映的情况及时更改或增添购物帮助的内容。
(5)购物车:当用户找到需要的商品时,可以先将商品加入购物车,然后继续允许找其他的商品,购物车中存储当前用户打算购买的所有商品。
(6)商品订单:当用户在网上超市中找到了所有需要的商品后,决定购买,可以下订单。管理员会定期处理用户下达的订单,并根据用户订单的信息向用户送货。
(7)用户注册:提供用户注册功能以及相关的用户信息修改、密码维护等。
122销售管理员需求
网上超市的销售部分的管理员功能是维护销售的正常工作,它需要提供如下功能:
(1)商品管理:商品是网上超市的内容所在,管理员需要能够维护超市中的商品信息。同时与商品相关的商品类型等信息也需要管理员维护。
(2)会员管理:由于有注册用户,所以管理员需要对拥护账号进行管理,如删除一些无效账号等。
(3)订单处理:在用户下达订单后,管理员需要对用户订单进行处理,为用户准备订购的商品,并组织送货、收取货等。
(4)购物帮助管理:管理员要根据用户反映的情况及时修改购物帮助的内容,使用户得到即时的帮助。
123采购、仓存管理员需求
网上超市的系统中将采购员和仓存管理员统一为采购、仓存管理员,其主要需求如下:
(1)录入商品信息:商品是网上超市的内容所在,当有新进的货物时,采购管理员需要维护超市中的商品信息。
(2)维护供应商信息:采购管理员在进行采购工作时,就需要对供应商信息的查询。
(3)维护仓库信息:有多上仓库,什么商品存放在哪个仓库,这些都需要采购仓存管理员来维护。
124系统管理员需求
网上超市的系统管理员功能是维护系统的正常工作,它需要提供如下功能:
(1)对系统中用户的管理:系统中顾客,销售管理员,采购、仓存管理员都是系统的用户,这些用户就需要系统管理员进行统一管理。
(2)会员管理:由于有注册用户,所以管理员需要对拥护账号进行管理,如删除一些无效账号等。但这样的一个功能可以授权于销售管理员去处理。
125数据库需求分析
用户的需求具体体现在各种信息的提供、保存、更新和查询。这就要求数据库结构能够充分地满足各种信息的输入和输出。收集基本数据、数据结构和数据处理流程,为下一步的具体设计做好充分的准备。
网上超市管理系统要处理的数据流程图:
2 面向对象分析和设计
21 用例分析
22 类和对象设计
3 逻辑结构设计
31 类和对象向关系模式转换
顾客信息(姓名、顾客编号、性别、出生年月、家庭地址、邮政编码、是否居住本地区、联系电话、身份z号、备注信息)
供应商信息(供应商编号、公司名称、联系人姓名、联系地址、所在城市、邮政编码、电话号码、传真号码、备注信息)
购物车(商品编号、顾客编号、商品名称、商品规格、时间、备注信息)
商品信息(商品编号、商品名称、单价、商品规格、商品产地、保质期、类别、备注信息)
订单信息(订单编号、商品编号、顾客编号、商品名称、商品规格、数量、顾客姓名、时间、备注信息)
员工信息(姓名、职工号、部门编号、性别、出生年月、家庭地址、邮政编码、联系电话、身份z号、备注信息)
进货信息(进货信息编号、供应商编号、公司名称、联系人姓名、商品编号、商品名称、商品规格、商品产地、商品数量、商品单价、进货日期、备注信息)
部门信息(部门编号、部门名称、负责人姓名)
销售信息(销售信息编号、顾客编号、顾客姓名、商品编号、商品名称、商品规格、商品产地、商品数量、商品单价、销售日期、折扣、备注信息)
仓库信息(仓库编号、仓库名称、存放商品类别、容量、负责人编号,负责人姓名)
留言信息(留言编号、留言标题、留言内容、留言日期、顾客编号、回复人编号、回复日期)
积分信息(积分编号、顾客编号、顾客姓名、积分)
商品入库(仓库编号、仓库名称、商品编号、商品名称、库存量、入库时间)
32 关系模式优化
顾客信息(姓名、顾客编号、性别、出生年月、家庭地址、邮政编码、是否居住本地区、联系电话、身份z号、备注信息)
供应商信息(供应商编号、公司名称、联系人姓名、联系地址、所在城市、邮政编码、电话号码、传真号码、备注信息)
购物车(商品编号、顾客编号、时间、备注信息)
商品信息(商品编号、商品名称、单价、商品规格、商品产地、保质期、类别、备注信息)
订单信息(订单编号、商品编号、顾客编号、数量、时间、备注信息)
员工信息(姓名、职工号、部门编号、性别、出生年月、家庭地址、邮政编码、联系电话、身份z号、备注信息)
进货信息(进货信息编号、供应商编号、商品编号、商品名称、商品规格、商品数量、商品单价、进货日期、备注信息)
部门信息(部门编号、部门名称、负责人姓名)
销售信息(销售信息编号、顾客编号、商品编号、商品数量、商品单价、销售日期、折扣、备注信息)
仓库信息(仓库编号、仓库名称、存放商品类别、容量、负责人编号)
留言信息(留言编号、留言标题、留言内容、留言日期、顾客编号、回复人编号、回复日期)
积分信息(积分编号、顾客编号、积分)
商品库存(仓库编号、商品编号、库存量、入库时间)
4 数据库物理结构设计
41 存取方法设计
42 存储结构设计
为了提高查询时间和空间的利用率,对网上超市管理系统的数据库作如下设计:
首先将网上超市管理系统日志文件存放在磁带上,因为数据库的数据备份和日志文件等只在故障恢复的时候才要使用,而且数据量很大。第二,把所有的基本表(如:顾客信息表)存放在一块磁盘上,而所有的索引则存放在另一块磁盘上。这样分开存放的目的在于查询时多个磁盘驱动器并行工作,提高了物理I/O读写效率,也加快了存取速度。
5 数据库完整性设计
51 主键及唯一性索引
52 参照完整性设计
1、由于员工信息表中的部门编号必须在部门信息中存在,而部门编号又是部门信息表中的主键,所以员工信息表中将属性部门编号设计为外键。
2、订单信息表中属性商品编号对应于商品信息表中的商品编号,因此将其设计为外键。
订单信息表中字段顾客编号对应于顾客信息表中的顾客编号,而顾客编号又是顾客信息的主键,所以将顾客编号作为订单信息表的外键。
3、进货信息表中属性商品编号对应于商品信息表中的商品编号,因此将其设计为外键。
进货信息表中字段供应商编号对应于供应商信息表中的供应商编号,而供应商编号又是供应商信息表的主键,所以将供应商编号作为进货信息表的外键。
4、销售信息表中字段顾客编号对应于顾客信息表中的顾客编号,而顾客编号又是顾客信息表的主键,所以将顾客编号作为销售信息表的外键。此外,销售信息表中的商品编号必须在商品信息表中存在,所以将商品编号也设计为改表的外键。
5、留言信息表中顾客编号需要在顾客信息表中存在记录,把顾客编号作为该表的外键。留言信息表中的属性回复人编号必须是员工信息表在存在的记录,所以把回复人编号也设为留言信息表的外键。
6、积分表中的属性顾客编号对应于顾客信息表中的顾客编号,而顾客编号是主键,所以将其设计为积分表的外键。
53 Check约束
1、对积分表中的积分字段设计check约束:积分必须是大于或者等于0的。
2、订单信息表、进货信息表和销售信息表对数量、商品数量设计check约束:即这些属性值必须取大于或者等于0的值。
54 Default约束
1、积分表中的积分字段设计default约束:积分默认值为0。
2、订单信息表中属性值数量默认为1单位。
55 触发器设计
1、 当采购完成后,即在进货信息表中添加信息时,建立该表上的插入触发器。该触发器的功能是当进货信息表中插入信息时,将进货的商品信息自动添加到商品信息表中以及在商品库存表在自动增加库存量。在这些动作完成之后,将进货信息表中添加的该信息删除。
2、 在订单信息表上建立插入触发器。如果订单中要添加的商品信息在商品信息表中不存在,则不予以添加。当订单信息成功提交,即订单信息表在成功插入新记录时,首先根据该顾客的积分情况自动生成折扣,然后自动将订单信息表中的记录添加到销售信息表中,并且将积分信息表中的记录更新或添加。在这些动作完成之后,再将订单信息表在的该记录删除。
3、 在商品库存量不足的时候需要系统提示工作人员及时的进行采购,所以在商品库存表上建立一个触发器就可以完成以上功能。当商品库存量到达一定的底线时,自动给采购、库存管理员留言,即在留言信息表中添加信息。这样可以对商品库存情况动态掌握。
6 数据库视图设计
1、为了方便查看部门信息,建立部门信息视图。显示部门信息表中的全部内容。
2、商品查询在网上超市管理系统中查看的非常频繁,需要建立商品信息视图。显示商品信息表中的全部信息。
3、建立顾客信息视图,显示顾客信息表中的全部内容。
4、在采购的时候,采购人员需要对供应商的信息进行查询,因此需要建供应商信息视图,显示该表中的全部内容。
5、当顾客在网上逛过超市后会将自己喜欢的商品先放入购物车中备选,这时就需要对购物车进行查询。所以有必要建立购物车信息视图。除了显示购物车表中的全部信息外,还需要连接查询并显示商品信息表中的商品名称和商品规格以及其他的商品信息。
6、顾客确定要购买商品的时候,需要提交订单信息,而在提交之前必须对其进行查询,所以需要建立订单信息视图。显示订单信息,以及连接查询并显示商品信息表中的商品名称和商品规格以及其他的商品信息。
7、对于网上超市的各部门的负责人来说,经常需要对员工的信息查看,故建立员工信息视图。除显示员工信息表中全部信息外,还要通过连接查询并显示部门名称。
8、采购人员在采购前后都需要对进货信息进行查询,这就需要建立进货信息视图。除显示进货信息表中全部信息外,还要通过连接查询并显示供应商的公司名称、联系人姓名、联系电话和商品名称、商品规格、商品产地、数量及单价。
9、每隔一段时间,都要查看一下收益如何,即查询销售情况。因此需要建立一个销售信息视图。显示销售信息表中的全部信息和通过连接查询并显示商品名称、商品规格、商品产地、数量及单价。除此之外,还要计算并显示销售总额。
10、建立仓库信息视图,显示仓库信息表中的所有信息即可。
11、建立留言信息视图。显示留言信息表中的全部信息以及通过连接查询并显示顾客姓名和回复人的姓名。
12、对积分的查询也是顾客经常查询的项目。所以非常有必要建立积分信息视图。显示积分信息表在的所有信息和连接查询并显示顾客姓名。
13、不管是在销售还是在采购的时候,都要对商品的库存量进行查询。因此要建立商品库存信息视图。显示库存信息以及通过连接查询并显示仓库名称和商品名称、商品规格等其他商品信息。
7 数据库存储过程设计
1、 顾客是网上超市管理系统的最主要的用户,也需要经常的添加和删除,故建立顾客删除存储过程。在删除某个顾客信息的时候,如果他的购物车中还有记录,则将其删除;若他提交了订单信息,也要把订单信息中的记录删除;最后还要把留言信息表和积分表中与该顾客相关的信息一并删除。
2、 建立删除员工的存储过程。如果该员工是某个部门的负责人,则一般情况下不予以删除,如果要删除,则必须对部门信息表中的负责人进行更新。若该员工是留言信息表中的回复人,则要对留言信息表在回复人编号进行修改或者删除。
3、 建立删除商品的存储过程。如果某个商品已经过了保质期或者已经被淘汰了,则要对这样的商品进行删除。首先要在商品信息表中把这些商品删除,在商品库存表将其删除,其次若果有顾客将该商品选入了购物车,甚至提交了订单,则要对顾客予以说明并将其从购物车表和订单信息表中删除。
8 权限设计
9 总结
理论联系实际才能做好一件事,学习一门课程同样是这样。通过一周的数据库课程设计实习,我受益匪浅,从中学到了许多新知识,这些知识是在课堂中不能学到或者说很难学到的。并且对数据库应用这一门课程有了更深一步的理解。在做课程设计中,我们可以把课堂上所学的理论知识和实践联系起来,在所要开发的系统中渐渐学会了融会贯通。同样通过对SQL的应用,也使我们熟练和巩固了对SQL的理解。这样我们对开发系统的整个过程也有了一个系统的了解。
这次课程设计,我选择的课题是《教务管理系统》,在教务管理系统的开发中采用了完整的数据库设计的全过程,从需求分析到概念结构设计,到逻辑结构设计,再到物理结构设计,最后到数据库的实施和维护,每一步都认真的分析和实施。当然,在本次课程设计的成果中还存在许多的不足之处,这就需要我们学习更多的知识,进行更深研究。
在这次实习中,我们完全投入到了开发系统的世界里。结束后明白了理论和实践要想充分地结合,需要非常扎实的基本功。这就说明学好基础知识是理论付诸实践的前提。在开发教务管理系统中我学到了很多,希望在以后能充分利用实习的机会充实自己,用所学的理论知识充分去实践,在实践中又要努力去巩固理论知识。只有这样,才能把一门课程甚至一门学科学精、学透
参考资料:
1 萨师煊,王珊数据库系统概论高等教育出版社第三版2000
2 龚波等译 SQL SERVER 2000教程北京希望电子出版社
3 史嘉权,史红星,李博等数据库系统概论习题、实验与考试辅导清华大学出版社2006
4 赵乃真等信息系统设计与应用清华大学出版社2005
注:由于这里不好排版,文章中的表格和没有显示出来,我打包成附件了,可以下载查看。
静轩图书信息管理系统---摘 要
图书管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。其能够完成对图书的添加、删除、借阅、归还和对读者的管理等功能的 *** 作。经过分析,使用 Microsoft�0�8
Visual Basic 60为开发工具,利用其提供的各种面向对象的可视化开发平台作为开发工具,采用面向对象技术,图形化的应用开发环境,尤其是它有一个功能极其强大的集成环境提供给开发人员,使得开发人员可通过菜单、界面、图形浏览工具、对话框以及嵌入的各种生成器来轻松地完成各种复杂的 *** 作。并且,方便的界面制作,可以节省更多的时间来研发后台的程序代码及数据库。数据库选用Access,其存储方式单一,都存放在后缀为(mdb)的数据库文件中,界面友好易于 *** 作管理。开发过程中不断修正和改进,直到形成满意的可行系统。
关键词: VB程序设计、图书管理系统、信息管理系统(MIS)、数据库、Visual Basic60、面向对象(Object)、图书管理。
数据库课程设计报告
计网0831数据库课程设计
1、数据的导入和导出今天是数据库实习的第一天,对于我们来说数据库虽然是今年刚刚学过的课程,但是我们已经考试完一段时间了,所以也很久没有翻书本了,很多知识在刚刚做的时候还是很陌生的,不得不翻一下书本,下面就是在第一天实习中所产生的问题报告和分析结果。
在做实训前,老师先给我们讲了数据库如何导入EXCL表,在老师的指导下我们学会了,为创建表提供了方便。
首先我们是建立了一个新的KCSJ数据库,建立的数据语句如下:
用SQL语句在D:\KCSJ下创建课程设计数据库(KCSJ)
(一)CREATE DATABASE KCSJ
ON
(NAME=KCSJ_DATA,
FILENAME='D:\KCSJ_DATAMDF')
LOG ON
(NAME=KCSJ_LOG,
FILENAME='D:\KCSJ_LOGLDF')
将KCSJXLS文件中的数据导入KCSJ数据库中。导入后在数据库中将生成以下五个基本表:
成绩(学号,课程号,成绩)
课程(课程号,课程名,教师名)
三角形(a,b,c,s)
回文数(A1,A2)
其中:a> 学生、成绩、课程、三角形、回文数是表的名字。
b> 学号、姓名、性别、班级、籍贯、课程名和教师名为字符型,长度分别为10 、10、2、6、8、20、10;
c> 入学成绩为整型。
d> 年龄、课程号和成绩为整型或微整型。
e> A1为整型;A2为字符型,长度为2。
f> a、b、c为float类型,代表三角形的三边,s为float类型,代表三角形的面积。
在导入数据库中KCSJXLS文件的数据导入的时候是在所有任务--导入数据—数据源为excel97-2000- 文件位置—导入表中的数据—修改类型和长度 最后确定。
用企业管理器创建数据库(JW0831),将KCSJ数据库中的五个表导入该数据库中。
打开所有任务 导入数据源 选择KSCJ 数据库 下一步 再选择jw0831数据库 选择所有 确定 就可以将KCSJ数据库中的五个表导入该数据库中。
简单的结构化查询
--(1)查询学生的详细记录
selectfrom 学生
--(2)查询学生表中前两个班级(班级名称不能重复)
select top 2 班级 from 学生
group by 班级
在做本题的时候,由于想的比较复杂,外加题意有点模糊,所以转了很大一个圈,并在老师的侧外指导下通过group by分组才把本题做了出来。
--(3)显示把 成绩表中各科学生的成绩加 20 分后的信息
selectfrom 成绩
where 成绩='成绩'+20
在做本题的时候,由于题意理解错误,所以我先用updata语句来进行更新,但是在做到其它题的时候,听到老师在指导其它同学的时候,把题意一说,我才恍然大悟,自己的方向又错了。然后又重新思考,接着就做出了上面的答案。
--(4)查询来自“宁波” 学生的学号、姓名、籍贯
select 学号,姓名,籍贯 from 学生
where 籍贯='宁波'
--(5)查询选修4号课程且考试成绩在70分以上的学生的学号以及所选修的课程号和成绩,显示前3条结果记录
select top 3from 成绩
where 成绩>=70 and 课程号='4'
--(6)查询入学成绩在 300-400 分之内的学生的详细情况,并按入学成绩降序排序 ( 用两种方法完成 )
select from 学生
where 300<入学成绩 and 入学成绩<400 order by 入学成绩 desc
select from 学生
where 入学成绩 between 300 and 400 order by 入学成绩 desc
--(7)统计学生表中的学生人数
select count()from 学生
对于今天的题目做的多了,忽然发现很多题的类型都差不多,都是运用基本的书本知识,然后融会贯通,举一反三,然后不费吹灰之力就做出来了,我说的不费吹灰之力是简单的,但是有些还是费了好大一番功夫的。
--(8)查询学生表中姓李,姓名列包含两个字的学生的基本情况
select from 学生
where 姓名 like '李_'
--(9)查询名字中第 2 个字为‘北'的学生的基本信息
select from 学生
where 姓名 like '_北%
在做这几道题的时候,我解决了并也明白了—和%得区别和用途
--(10)查询选修 4 号课程,成绩在 80-90 分之间的学生学号和成绩
selectfrom 成绩
where 80<=成绩 and 成绩<90 and 课程号='4'
--(11)查询 JW0831 班和 JW0551 班学生的姓名、性别及班级(用谓词查询 in )
select 姓名,性别,班级 from 学生 where 班级 in('JW0831','JW0551')
group by 姓名,性别,班级
对于本道题拿到的时候,还是愣了一下的,因为我忽然不知道什么是,对于用谓词查询 in,自己不会用,在翻书翻了一遍并且询问了同学才发现如何去用它。
--(12)查询缺少成绩的学生的学号和相应的课程号
select 学号,课程号 from 成绩
where 成绩 is NULL
--(13)统计选修了4号课程学生人数
SELECT COUNT()AS'人数' FROM 成绩 where 课程号='4'
--(14)查询JW0831班家在河北学生的学号、姓名、性别
select 学号,姓名,性别 from 学生
where 籍贯='河北'and 班级='JW0831'
--(15)检索刘志生老师所授课程的课程号和课程名。
select 课程号,课程名 from 课程
where 教师名='刘志生'
---(16)检索年龄大于23岁的男学生的学号和姓名。
select 学号,姓名 from 学生
where 性别='男' and 年龄>23
--(17)查询学生表中姓李的学生的基本情况
select from 学生
where 姓名 like '李%'
--(18) 统计学生表中所有学生“入学成绩”的平均分、最高分、最低分
select AVG(入学成绩) as'平均成绩',max(入学成绩) as'最高分',min(入学成绩) as'最低分'from 学生
--(19)查询选修了1号或者3号课程,成绩及格的学生的学号和成绩
select 学号,成绩 from 成绩
where 成绩>=60 and 课程号 in (1,3)
--(20)统计学生表中所有男女生人数
SELECT 性别, COUNT(性别)AS'人数' FROM 学生
group by 性别
对于今天的题除了自己不太熟悉课本知识和同学讨论出来的那些分析外,对于其他的题已经没有什么问题了,因为我把今天的题做完之后,把报告写完的同时,对于明天的题我也进行了一番思考,并且还帮助其他同学解决了一些不会的问题。
星期二 天气 冷 心情 good
3、复杂的结构化查询
--(1)检索至少选修刘志生老师所授课程中一门课程的女学生姓名。
select 学生学号,姓名,性别,课程课程号 from 学生,成绩,课程
where 性别='女' and 课程课程号 in(select 课程号 from 课程 where 教师名='刘志生')and 学生学号=成绩学号
and 课程课程号=成绩课程号
对于今天的课程设计不是像昨天一样那么简单了,简直是提高了一个很大的层次,简直是一步三晃啊!不容易啊!就像本题一样,在查询的时候要用一个子查询和三个条件才能把它做出来!
--(2)检索吴计算同学不学的课程的课程号。
select 课程号 from 课程 where 课程号 not in(select 成绩课程号 from 成绩,学生where 姓名='吴计算' and 成绩学号=学生学号)
在本题中,用的方法还真是一波三折啊!因为如果要查不学的课程,要先查出他学的课程,然后再排掉学过的!充分运用了not in这个语法
--(3)检索至少选修四门课程的学生学号。
select 学号, count(成绩学号)as '门数' from 成绩,课程 where 成绩课程号=课程课程号
group by 成绩学号
having count(成绩学号)>=4
对于本题的用的是count做统计这个数据语句,外加可以用在group by 语句后的having条件语句。通过本题的联系,可以很好的运用count 和having语句
--(4)检索全部学生都选修的课程的课程号与课程名。
select 课程课程名 ,课程课程号 from 成绩,课程
where 成绩课程号=课程课程号
group by 课程课程名,课程课程号
having count(成绩学号) in (select count(学生学号)from 学生)
--(5)检索选修课程包含刘志生老师所授课的学生学号。
select 学号 from 成绩,课程
where 教师名='刘志生'and 成绩课程号=课程课程号
--(6)统计有学生选修的课程门数。
select 学号, count(成绩学号)as '门数' from 成绩,课程 where 成绩课程号=课程课程号
group by 成绩学号
--(7)求选修4号课程的学生的平均年龄。
select AVG(年龄)as'平均年龄',成绩课程号 from 学生,成绩
where 课程号='4' and 学生学号=成绩学号
group by 成绩课程号
--(8)求刘志生老师所授课程的每门课程的学生平均成绩。
select avg(成绩成绩)as'平均成绩',课程课程号 from 成绩,课程
where 教师名='刘志生' and 成绩课程号=课程课程号
group by 课程课程号
--(9)统计每门课程的学生选修人数(超过6人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
select 成绩课程号, count(成绩学号)as '人数' from 成绩,课程
where 成绩课程号=课程课程号
group by 成绩课程号
having count(成绩学号)>=6
order by count(成绩学号) asc
--(10)检索学号比陆力利同学大,而年龄比他小的学生姓名。
select 学号,姓名 from 学生
where 学号>(select 学号 from 学生 where 姓名='陆力利') and 年龄<(select 年龄 from 学生 where 姓名='陆力利'
--(11)求年龄大于女同学平均年龄的男学生姓名和年龄。
select 姓名,年龄 from 学生
where 性别='男'and 年龄>(select avg(年龄)as'平均年龄'from 学生 where 性别='女')
--(12)统计学生人数超过 5人的班级名称和对应的人数
select 班级,count(学生学号)as '人数'from 学生
group by 班级
having count(学生学号)>=5
--(13)检索课程号和选修人数,查询结果按人数升序排列,若人数相同,按课程号降序排列。
select 成绩课程号, count(成绩学号)as '人数' from 成绩,课程
where 成绩课程号=课程课程号
group by 成绩课程号
order by count(成绩学号) asc,成绩课程号 desc
这道题运用很多知识点,不但用了count 统计 还用了 group by 分组 外加排序
--(14)查询选修课程学生的学号、姓名、所选课程号、取得的成绩
select 学生学号,学生姓名,成绩课程号,成绩成绩 from 学生,成绩
where 学生学号=成绩学号
--(15)查询学生的学号、课程号和成绩等级
select 学号,课程号,成绩,(
CASE
WHEN 成绩>=90 and 成绩<=100 THEN 'A'
WHEN 成绩>=80 and 成绩<90 THEN 'B'
WHEN 成绩>=70 and 成绩<80 THEN 'C'
WHEN 成绩>=60 and 成绩<70 THEN 'D'
ELSE 'E'
END ) as 等级
from 成绩
本题运用了一个新的知识点,这个知识点是在老师的ppt课件上找到的,利用这个语句何以很好很方便的为管理系统中的成绩分等级,所以在本体中一定要记住本语句的语法如:case when……and then ……else end
今天小结,通过今天一天的课程设计,我觉得我收获了很多,因为它让我以前学的不太好的知识点全部都巩固了一遍,尤其是成绩、课程、学生这些表与表的链接,每次不是这里连不上就是那里连不上,但是现在不但可以连上了,还可以帮助其他同学检查出来错误,真是一笔不小的收获,虽然今天做的题比较难,但是每一次在自己的努力下做出来都会有不小的成就感……
3、复杂的结构化查询
星期三 天气 冷 心情 good
外面飘着雪花,美好的一天又已经开始了!实习已经到了一半,离回家的日子也近了很多,所以心情也是越实习越好了!今天的工作当然也完成的比较顺利!虽然有的还挺难的!但是相信自己一定就会成功!嘿嘿……看看自己的劳动成果就知道了!
3、复杂的结构化查询
--(16)查询选修了英语的学生的姓名和成绩;
select 学生姓名,成绩成绩 from 成绩,学生,课程
where 课程课程名='英语'and 学生学号=成绩学号 and 课程课程号=成绩课程号
group by 学生姓名,成绩成绩
--(17)分别统计每个班级的男女人数(要求显示出班级、性别、对应的人数)
SELECT 班级, 性别, COUNT(性别)AS'人数' FROM 学生
group by 班级,性别
--(18)求年龄大于所有女同学年龄的男学生姓名和年龄。
select 姓名,年龄 from 学生
where 性别='男'and 年龄>(select max(年龄) from 学生 where 性别='女')
group by 姓名,年龄
--(19)计算选修了1号课程的学生的平均成绩(要求显示出课程号和对应的平均成绩)
select 课程号,avg(成绩)as'平均成绩'from 成绩
where 课程号='1'
group by 课程号
--(20)查询选修课程学生的学号、姓名、所选课程名、取得的成绩
select 学生学号,姓名,课程课程名,成绩成绩 from 学生,成绩,课程
where 学生学号=成绩学号 and 课程课程号=成绩课程号
--(21)查询学生的学号、姓名、性别及所选修各门课程的成绩(要求每位学生用一个数据行显示这些信息)
SELECT 学生学号, 学生姓名,学生性别,
(select 成绩 from 成绩 where 课程号='1' and 学生学号=学号) as '数学',
(select 成绩 from 成绩 where 课程号='2' and 学生学号=学号) as '英语',
(select 成绩 from 成绩 where 课程号='3' and 学生学号=学号) as '计算机基础',
(select 成绩 from 成绩 where 课程号='4' and 学生学号=学号) as '数据库',
(select 成绩 from 成绩 where 课程号='5' and 学生学号=学号) as '政治',
(select 成绩 from 成绩 where 课程号='6' and 学生学号=学号) as '体育'
FROM 学生 INNER JOIN 成绩 ON 学生学号=成绩学号
GROUP BY 学生学号, 学生姓名,学生性别
--(22)查询李路路所学的课程名和对应的成绩,并按照成绩升序排列。
select 姓名,课程名,成绩 from 学生,课程,成绩
where 姓名='李路路'and 课程课程号=成绩课程号 and 学生学号=成绩学号
order by 成绩
--(23)查询平均成绩大于 75 分的课程,要求显示课程名和平均成绩。
select 课程名,avg(成绩)as'平均成绩' from 课程,成绩
where 课程课程号=成绩课程号
group by 课程名
having avg(成绩)>=75
--(24)查询所选课程平均成绩前三名的那些学生的姓名和平均成绩。
select top 3 学生学号,姓名,avg(成绩成绩)as'平均成绩'from 成绩,学生 where 学生学号=成绩学号 group by 学生学号,姓名 order by avg(成绩成绩) desc
--(25)查询和李工业在同一个班级的学号和姓名
select 学号,姓名 from 学生
where 班级 in (select 班级 from 学生 where 姓名='李工业')
--(26)查询JW0831班中入学成绩比李里高的学生的姓名
select 姓名 from 学生
where 班级='JW0831' and 入学成绩>(select 入学成绩 from 学生 where 姓名='李里')
--(27)在学生表中查询高于入学成绩平均分的学生学号、姓名、班级、入学成绩
select 学号,姓名,班级,入学成绩 from 学生
where 入学成绩>(select avg(入学成绩)as'平均成绩'from 学生)
--(28)查询没有选修课程的学生的学号和姓名
select 学生学号,学生姓名 from 学生
where 学号 not in(select 学号 from 成绩 group by 学号 )
--(29)查询选修了 5(含5) 门以上课程的学生的姓名。
select 姓名 from 学生,成绩,课程 where 成绩课程号=课程课程号 and 学生学号=成绩学号
group by 成绩学号,姓名
having count(成绩学号)>=5
--(30)查找同名同姓的学生信息。
select a1 from 学生 a1,学生 a2
where a1姓名=a2姓名 and a1学号<>a2学号
星期四 天气 冷 心情 good
数据管理
--(1)利用学生表创建一个新表(不含数据):优秀(学号,姓名,性别),
--然后在学生表中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别,
--并把检索到的值送往优秀表中。
select 学号,姓名,性别 into 优秀 from 学生
where 5>6
insert into 优秀 select 学号,姓名,性别 from 学生 where 学号 in (select 学号 from 成绩 group by 学号 having min(成绩)>=80 )
--(2)把李路路同学的选课和成绩全部删去。
delete from 成绩
where 成绩 in(select 成绩 from 学生,成绩 where 学生学号=成绩学号 and 姓名='李路路')
--(3)把低于总平均成绩的女同学成绩提高5%。
UPDATE 成绩 SET 成绩=成绩(1+005) WHERE 成绩<(select avg(成绩成绩)as'平均成绩'from 成绩) and 学号 in(select 学号 from 学生 where 性别='女')
--(4)把选修数学课不及格的成绩全改为空值。
UPDATE 成绩 SET 成绩=null WHERE 成绩<60 AND 课程号=(select 课程号 from 课程 where 课程名='数学')
--(5)在成绩表修改4号课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDATE语句实现)。
UPDATE 成绩 SET 成绩=成绩05 WHERE 成绩<=75 and 课程号='4'
UPDATE 成绩 SET 成绩=成绩04 WHERE 成绩>75 and 课程号='4'
--(6)将选修4号课程且成绩没有及格的学生的成绩调整为 60 分。
UPDATE 成绩 SET 成绩=60 WHERE 成绩<60 AND 课程号='4'
自定义函数的使用
编写一函数(hws),判断一个整数是否为回文数,若是函数值为“是”,否则为“否”,利用该函数判断回文数基本表中A1列的整数是否为回文数,若是,则A2列的值为“是”,否则为“否”。
create function hws(@A1 int)
returns char(2)
as
begin
declare @y int,@r int,@c char(2),@z int
select @y=0,@z=@A1
while @A1!=0
select @r=@A1%10,@y=@y10+@r,@A1=@A1/10
if @y=@z
set @c='是'
else
set @c='否'
return @c
end
update 回文数 set A2=dbohws(A1)。
星期五 天气 冷 心情 good
游标的使用
利用游标可以访问单独数据行的特点,逐一对三角形基本表中的数据行(三条边)进行处理,求三角形的面积。
Declare yb cursor
For
Selectfrom 三角形
Declare @a float,@b float,@c float,@p float,@s float
Open yb
Fetch next from yb into @a,@b,@c,@s
While @@fetch_status=0
Begin
If @a+@b>@c and @a+@c>@b and @b+@c>@a
select @p=(@a+@b+@c)/20,@s=round(sqrt(@p(@p-@a)(@p-@b)(@p-@c)),2)
else
set @s=null
update 三角形 set s=@s where current of yb
fetch next from yb into @a,@b,@c,@s
end
close yb
deallocate yb
心得体会
时光匆匆,一个星期的实习已经接近尾声了,对于本次的实习心情就是轻松加愉快,收获也是硕果累累,在老师的安排下,实习的过程是根据每天老师给的任务,按时完成作业然后再把报告写完根据规划每天都有条不絮的干着自己的事情,对于我是一个不会安排时间的人,生活中重来没有规划,所以事情每次干完不是紧一阵就是松一阵的,所以通过这次实习中在老师的安排下,自己也懂得了安排时间的重要性,也从中吸取到了一些经验。
在本次实习中我不仅把本学期学习的数据库基本知识进行了点到点的复习,也把它进行了巩固,在原来没有学好的地方通过本次的实习学的比以前学的更好,不仅如此,我们在做课程设计的时候还学会了独自的思考和协作,有些知识点我们运用的不是很好,但是后面再老实的帮助和在同学的探讨下,最后都把它解决了出来。除此之外,我也感觉到实习并不是因为完成任务而实习,它是为了让我们更好的掌握知识,并把知识运用到生活中去的,就像艺术一样,源于生活,而应用于生活一样。数据库的学习,也是为了以后生活中方便自己方便他人而学习的。
由于每天紧张的课程,一路都是匆匆来匆匆去,所以一个班同学的交流也是很少的,通过实习所以同学之间交流的机会也就比较多了一点,比才的感觉也因此增进了不少,以上就是本次在实习中所得到的心得,至于没有感受到的,将在以后的生活中再次的吸取生活中的经验。来进行学习中的总结。
以上就是关于数据库sql 的课程设计怎么做,要借哪些书看,求大神指教全部的内容,包括:数据库sql 的课程设计怎么做,要借哪些书看,求大神指教、sql数据库课程设计怎么做啊、谁可以帮忙做下这个题目呀 数据库课程设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)