小型学生信息管理系统设计报告
- 格式:doc
- 大小:323.00 KB
- 文档页数:13
小型学生信息管理系统设计报告一、实验目的1、通过系统分析和设计了解数据库应用系统设计的方法、步骤、关键技术和开发过程,并通过上机操作,加深对数据库系统理论知识的理解。
2、通过使用具体DBMS和前台开发工具——DELPHI,了解数据库的特点和SQL语言对数据库的操作能力与方法,并进一步了解数据库系统开发中的宿主语言的作用、数据库控件在数据库应用程序的作用和地位。
3、提高动手能力、调试程序的能力、解决问题的能力和实际开发应用能力,增强自学能力及对知识的融会贯通能力。
二、实验要求1、根据自身情况,选择一种常用高级语言作为数据库系统的宿主语言(建议VB,VC或DELPHI)。
2、利用操纵语言中的控件完成对所设计数据库的操作,主要包括查询、添加、修改和删除。
3、本实验的重点是理解操纵语言和数据库管理系统(DBMS)的相互关系、与数据库相关的控件、数据库控件的作用和使用的过程,而不在于高级语言本身的应用和编程技巧,也不在于数据库模式的设计与实现。
三、实验环境硬件:PC机一台软件:WindowsXP delphi 7.0四、小型学生信息管理系统的功能介绍1、可以实现各种相关SQL语句的查询功能,如:简单查询,连接查询,自身连接,嵌套查询,使用谓词的查询,计算,分组,查询结果排序等。
2、能够实现对学生基本信息、课程信息和学生选课情况(三个基本表)的添加、修改以及删除。
这些功能可通过delphi 7.0自带的DBNavigator(DBCtrls)实现,也可以通过编写相应的程序实现。
五、需求分析随着社会的发展,学校的规模不断的扩大,日常教学活动中需要提取学生相关信息,以反映教学情况。
传统的手工操作方式,易发生数据丢失,统计错误,劳动强度高,且速度慢。
使用计算机可以高速,快捷地完成以上工作。
在计算机联网后,数据在网上传递,可以实现数据共享,避免重复劳动,规范教学管理行为,从而提高了管理效率和水平。
学生信息管理系统以计算机为工具,通过对教务管理所需的信息管理,把管理人员从繁琐的数据计算处理中解脱出来,使其有更多的精力从事教务管理政策的研究实施,教学计划的制定执行和教学质量的监督检查,从而全面提高教学质量。
六、学生课程关系E-R图七、功能结构图八、数据模型图九、实验步骤1、启动dephi7.0中的DataBase Desktop工具创建数据库表和视图,并完成建立索引、完整性约束和修改表结构等数据库的定义功能。
2、启动dephi7.0,在Form1中添加“PageControl”控件,然后进行简单操作并修改相关属性便可获得如下界面:3、在名为“学生”的界面上添加“Table”、“DataSource”、“DBGrid”和“DBNavigator(DBCtrls)”控件,设置其相关属性及事件便可将数据库中的数据显示出来了,并可以初步的获得添加、删除、修改的功能。
4、再添加“添加”、“删除”、“修改”和“退出”按纽(注:此时的这些“添加”、“删除”、“修改”和“退出”按纽不具有任何功能,需要写入相应的程序才能使其具备有关功能)便可获得如下界面:5、在名为“课程”、“选课”的界面做同样的操作,使其具有的和“学生”页面上同样的功能(注:它们分别对三个基本表进行操作)。
6、在名为“查询”界面上添加“Query”、“DataSource”、“DBGrid”和“Memo”控件,然后再添加“查询”、“清空”和“退出”按纽(注:此时“查询”、“清空”、和“退出”按纽不具有任何功能,需要写入相应的程序才能使其具备有关功能)便可获得如下界面:7、依次双击所有“按纽”并输入相应的程序代码,最后进行相关连接和设置,便完成了小型学生信息管理系统的设计。
下图是简单的查询示例:十、有关按纽的程序代码“添加”按钮中设置的程序begintrytable1.Append;finallytable1.Post;table1.Refresh;end;end;“删除”按钮中设置的程序beginif table1.RecordCount>0then table1.Delete;end;“修改”按钮中设置的程序begintrytable1.Edit;finallytable1.Post;table1.Refresh;end;end;注:以上“添加”、“删除”和“修改”中的程序是在“学生”界面中设置的,在“课程”和“选课”界面上,有的“table1”分别换成“table2和“table3”即可。
“查询”按钮中设置的程序begintryQuery1.Close;Query1.SQL.Clear;Query1.SQL.Add(memo1.Text);Query1.Open;excepton edatabaseerror do Query1.execsqlend;end;“清空”按钮中设置的程序beginmemo1.Clear;Query1.Close;end;“退出”按钮中设置的程序beginform1.Close;end;十一、用到的SQL查询语句一、选择表中的若干列select sname,1996-sagefrom studentselect sname,'出生年份:',1996-sage,sdeptfrom studentselect sname 姓名,'个人信息:'相关信息,1996-sage 出生年份,sdept 所在系from student二、选择若干组1.取消取值重复的行select distinct snofrom sc2.满足条件的元组(1)比较大小select sname 姓名,sno 学号,sage 年龄from studentwhere sage<22(2)确定范围select sname 姓名,sdept 所在系,sage 年龄from studentwhere sage not between 19and 21(3)确定集合select sname 姓名,sno 学号,ssex 性别,sdept 所在系from studentwhere sdept not in ('CS','IS')(4)字符匹配select sno 学号, sname 姓名,ssex 性别from studentwhere sname LIKE '李%'select sno 学号, sname 姓名,ssex 性别from studentwhere sname LIKE '李____'select cno 课程号,cname 课程名,ccredit 学分from coursewhere cname LIKE 'PAS___\_%课__' ESCAPE '\' (5)空值的查询select sno 学号,cno 课程号,grade 分数from scwhere grade is not null(6)多重条件查询select sname 姓名,ssex 性别,sdept 所在系,sage 年龄from studentwhere (sdept='CS' or sdept='MA') and sage<21三、对查询结果排序select sno 学号,cno 课程号,grade 分数from scwhere sno='5001'order by grade descselect *from studentorder by sdept,sage desc四、使用集合函数select count(distinct sno) 选课人数from scselect avg(grade) 平均分from scwhere cno='5'select max(grade) 最高分from scwhere cno!='0'五、对查询结果分组select cno 课程号,count(sno) 选修人数from scgroup by cnohaving count(*)>1连接查询select student.sno 学号,sname 姓名,ssex 性别,sdept 所在系,cno 课程号,cname 课程名,grade 分数,ccredit 学分from student,sc,coursewhere student.sno=sc.sno and o=oselect student.sno 学号,sname 姓名,cno 课程号,cname 课程名,grade 分数from student, course,scwhere student.sno=sc.sno and o=o and o between 2 and 5 and sc.grade>60嵌套查询搜索"李青"同学所在系的所有学生的相关信息select sno 学号,sname 姓名,sdept 所在系from studentwhere sdept in(select sdeptfrom studentwhere sname='李青')上下两语句实现同一查询作用select sno 学号,sname 姓名,sdept 所在系from studentwhere sdept =(select sdeptfrom studentwhere sname='李青')查询选修了“数据结构”的学生的相关信息(涉及一个表)select sno 学号,sname 姓名,ssex 性别from studentwhere sno in(select snofrom scwhere cno in(select cnofrom coursewhere cname='数据结构'))带有比较运算符的子查询查询选修了“数据结构”的学生的相关信息(涉及三个表)。
select sno 学号,sname 姓名,ssex 性别,cno 课程号,grade 分数,ccredit 学分from student,course,scwhere student.sno=sc.sno and o=o and ame='数据结构'带有any或all谓词的子查询查询年龄小于“CS”系最大年龄且不是“CS”系的学生的相关信息select sno 学号,sname 姓名,ssex 性别,sage 年龄,sdept 所在系from studentwhere sage<(select max(sage)from studentwhere sdept='CS')and sdept<>'CS'上下两语句实现同一查询作用select sno 学号,sname 姓名,ssex 性别,sage 年龄,sdept 所在系from studentwhere sage<any(select sagefrom studentwhere sdept='CS')and sdept<>'CS'集合查询查询“MA”系,或者年龄小于22岁学生的相关信息select sno 学号,sname 姓名,ssex 性别,sage 年龄,sdept 所在系from studentwhere sdept='MA'unionselect sno 学号,sname 姓名,ssex 性别,sage 年龄,sdept 所在系from studentwhere sage<22上下两语句实现同一查询作用select sno 学号,sname 姓名,ssex 性别,sage 年龄,sdept 所在系from studentwhere sdept='MA' or sage<22查询同时选修了“1”和“7”课程且“7”课程成绩不为空的学生的所有信息select distinct sno 学号,sname 姓名,ssex 性别,sage 年龄,sdept 所在系统,cname 课程名,cno 课程号,ccredit 学分,grade 分数from student,sc,coursewhere student.sno=sc.sno and o=o and student.sno=(select snofrom scwhere cno='1' and sno in(select snofrom scwhere cno='7' and grade is not null))and ( cno='1' or cno='7')带有EXISTS谓词的子查询查询选修了“4”号课程学生的相关信息(按性别降序姓氏字母升序排序)。