已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据库课程设计 设计选题:学生成绩查询系统班 级:设 计 人:学 号: 辅导教师: 目录一、需求分析 -31.1建立数据库,数据表1.2向表中添加记录1.3用查询语句来查看表中特定记录1.4向表中添加字段1.5创建视图1.6创建存储过程1.7创建触发器1.8创建自定义函数二、数据库设计 -42.1实体模型2.2E-R图到关系图的转换2.3数据字典三、功能实现 -53.1创建数据库3.2创建数据表四、数据操作 -64.1插入4.2查询4.3创建数据类型4.4添加字段4.5创建视图4.6创建存储过程4.7创建触发器4.8创建自定义函数五、数据库的实施与维护 -14六、总结与体会 -19引 言在现代,高科技的飞跃发展,计算机的大量普及,使得人们生活节奏越来越快。因此对教育行业的多元信息进行有效的管理工作,也成为教育行业中的重中之重。目前,学校工作繁杂、资料重多,虽然各类管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,目前还没有一套完整的、统一的系统。为各高校教务工作人员减轻负,提高工作效率,所以制作了学生成绩管理系统。学生成绩管理系统依据开发要求主要应用于教育系统,完成对日常的教育工作中学生成绩档案的数字化管理。比较系统地对教务、教学上的各项服务和信息进行管理,使数据管理更现代化、自动化、智能化、人性化。同时,减轻了学院教务人员管理的工作量,缩小开支,提高工作效率和准确率,使其变得更具有条理性,科学性,为教育行业做出了巨大的贡献,也为今天的民办教育在未来市场的竞争力有所提高。学生成绩管理系统使用了全新的成绩管理理念,系统从完善的基础信息管理,和对创建新用户、已创建的成绩数据的录入,修改,浏览,统计等功能操作,基本能够满足各高校教师的需要。一、需求分析1.1 建立一个数据库,然后在此数据库中数据表。建立ssh数据库创建学生表和老师表课程表1.2 向表中添加记录。向学生表和老师表中加入信息1.3 用一些查询语句来查看表中的特定记录。查询学生表和老师表的信息1.4 向表中添加一些字段。向teacher表中添加字段 tel1.5 创建几个视图查询某个班级的学生信息查看每门课程的平均成绩1.6 创建几个存储过程显示成绩表中的课程号在课程表中且所任教师性别为男、计算机系的成绩表显示某学生的学号,姓名,所学课程号,课程名称和对应的成绩在执行此存储过程时,如果没有给出参数(学生姓名),则输入全部的学生的学号,姓名,班级,任课教师编号及其姓名,所学课程名称和成绩,如果有,显示此学生的以上信息。1.7 创建触发器在成绩表中建立一个触发器,当向表中添加记录时,此学生的成绩都乘以1.2检查学生的邮箱地址是否相同。 1.8 创建自定义函数创建自定义函数,输出与指定的学生同班的学生个数,输出同一个班级中的学生信息。2、 数据库设计2.1 实体模型:教师学生学教 1 N课程 N M2.2 ER图到关系图的转换学号号班级号学生信息表出生日期号性别号学号号出生日期号教师姓名号成绩表号部门号 成绩号教师信息表课程名称号课程号号 职称号教师编号号课程表2.3 数据字典Student表:snoChar(8)不允许为空snameChar(10)不允许为空SsexChar(2)不允许为空sbirthDatetime(8)允许为空classChar(4)不允许为空typeChar(7)允许为空score表结构:snoChar(8)不允许为空cnoChar(5)不允许为空degreeFloat(8)不允许为空Course表: cno(主键)Char(5)不允许为空cnamevarchar(10)不允许为空tnochar(3)不允许为空Teacher表tnochar(5)不允许为空tnamevarchar(10)不允许为空departvarchar(8)不允许为空Tsexchar(2)不允许为空Tbirthdatetime ,允许为空profchar(6)允许为空三、功能实现3.1 创建数据库: create database sshon( name=ssh, filename=e:databasessh.mdf, size=1)log on( name=ssh1, filename=e:databasessh1.ldf, size=1)3.2创建数据表(1) student表use sshcreate table student( sno char(8) primary key,sname char(10) not null,Ssex char(2) not null, Sbirth datetime,class char(4) not null semail varchar(20)(2) score表create table score(sno char(8) not null,cno char(4) not null, degree float not null)(3) course表create table course(cno char(5) not null primary key,cname varchar(10) not null, tno char(3) not null )(4) teacher表 create table teacher(tno char(5) not null primary key, tname varchar(10) not null, depart varchar(8) not null, Tsex char(2) not null, Tbirth datetime , prof char(6) )四、数据操作4.1 插入(1)向学生表插入信息insert into student values(101,李明,女,1983-09-18,11)insert into student values(102,王二,男,1984-01-01,11)insert into student values(103,李开,男,1984-01-01,11)insert into student values(104,章浪,女,1984-11-11,11)insert into student values(105,生命,男,1984-12-05,13)insert into student values(106,无悔,女,1984-11-01,13)insert into student values(107,历史,女,1984-10-01,12)insert into student values(108,风尘,男,1985-9-08,11)insert into student values(109,活着,男,1985-12-12,12)insert into student values(110,傻瓜,女,1985-08-28,12) 查看记录 Select * from student(2)向成绩表中添加 insert into score values(101,01,88)insert into score values(101,02,85)insert into score values(102,02,80)insert into score values(101,03,88)insert into score values(102,02,85)insert into score values(102,03,80)insert into score values(103,01,83)insert into score values(103,02,85)insert into score values(103,03,90)insert into score values(104,01,60)查看记录 Select * from score(3)向教师表中添加数据insert into course values(01,计算机,11)insert into course values(02,网络管理,12)insert into course values(03,专业英语,13)insert into course values(04,软件工程,14)查看记录 Select * from course(4)向课程表中添加数据insert into teacher values(11,无意,计算机系,男,1973-4-5,教授) insert into teacher values(12,生活,计算机系,女,1975-12-1,副教授) insert into teacher values(13,没有,管理系,女,1975-3-3,副教授) insert into teacher values(14,离开,英语系,男,1973-5-5,教授)查看记录 Select * from teacher4.2查询(1) 查询成绩大于学号为101的学生的课程为02的成绩的所有列。select * from score where degree(select degree from score where sno=101 and cno=02)(2) 查询课程号01大于课程号02的最大值、并以分数降序排序的成绩表中所有列select * from score s where o=01 and s.degree=(select max(degree) from score y where o=02 ) order by degree descgo select max(degree) as 02max from score where cno=02(3) 查询性别为男的学号,姓名,班级,课程号和成绩的学生select student.sno,student.sname,student.class,o,score.degree from student,score where student.sno=score.sno and ssex=男(4) 查询成绩在60到80之间的所有列select * from score where degree between 60 and 80(5) 查询score表中至少有5名学生选修的并以0开头的课程的平均分select avg(degree) as 平均分,cno from score where cno like 0% group by cno having count(*)=54.3 创建数据类型创建一个email自定义数据类型 exec sp_addtype email, varchar(20) , null修改student表中的semail数据类型为email类型alter table student alter column semail email4.4 向表中添加字段 向student表添加type,semail,b并且邮件地址有check约束alter table student add type char(7)alter table student add semail varchar(20) null constraint ck_sem check (semail like %)alter table teacher add tel varchar(15)4.5 创建视图(1) 创建所有11班的学生信息的视图create view student11as select * from student where class=11查看视图中的记录select * from student11(2) 创建视图course_degree其中的内容是选修计算机课程的学生信息,包括(sno,sname,cno,cname,degree),创建时加上with check optioncreate view course_degree(sno,sname,cno,cname,degree)as select score.sno,sname,o,cname,degree from course ,student, score where o=o and student.sno=score.sno and cname=计算机with check option查看视图中的记录select * from course_degree(3) 创建一个视图,其中的内容是成绩表中每门课程的create view averageas select avg(degree) as 平均分 from score group by cno查看视图中的记录select * from average (4) 创建视图其中的内容是所有男教师和男学生的name,sex,birthcreate view man as select sname as name,ssex as sex,sbirth as birth from student where ssex=男union select tname,tsex,tbirth from teacher where tsex=男查看视图中的记录select * from man4.6 创建存储过程 (1) 创建一个存储过程。来显示成绩表中的课程号在课程表中并且所任教师性别为男、所在部门是计算机系的成绩表中的列create proc student_11as select * from score where cno in (select cno from course ,teacher where course.tno=teacher.tno and depart=计算机系 and tsex=男)调用此存储过程Execstudent_11 (2) 创建一个带输入参数的存储过程。调用此存储过程时,给出一个学生名,显示出此学生的学号,姓名,所学课程号,课程名称和对应的成绩create proc student_namesname varchar(10)as select student.sno,sname,o,degree cname from student,score,course where student.sno=score.sno and o=o and sname=sname调用此存储过程,(此例是输出姓名为历史的学生的信息)exec student_name 历史(3) 创建一个存储过程,传递一个学生姓名。先判断此学生是否有邮箱,如果有,则显示此学生的姓名,邮箱地址,学号,班级;如果没有的话,输出此句话the semail is emptycreate proc student_emailsname varchar(10)asbeginif (select semail from student where sname=sname) is nullbeginprintthe semail is emptyendelseselect sname,semail,sno,class from student where sname=snameend调用此存储过程exec student_email super当给出姓名的那个学生没有邮箱地址时,则会显示如下内容。 exec student_email dfdf4.7 触发器(1) 创建一个触发器。来检查学生的邮箱地址是否相同,如果相同,输出inserting fail,并且回滚事务;如果不相同,则插入成功。create trigger studentinserton studentafter insertas if (select semail from inserted where semail in (select semail from student) is not nullbeginprint inserting failrollback transactionendelseprintinsering succeed向学生信息表中插入一条记录,检验是否成功插入insert into student values(114,lengbing,女,1985-12-12,11,,一般 )(2) 在成绩表中建立一个触发器,当向表中添加记录时,此学生的成绩都乘以1.2create trigger scoreupdate on scoreafter insertas update score set degree=degree*1.2 from score where sno in (select sno from inserted )向表中插入一条记录,检验触发器是否有用。insert into score values(108,01,56)4.8 自定义函数 (1) 创建一个用户自定义函数,输出与指定的学生同班的学生个数create function studentcount(sno char(5)returns intbegindeclare counter intselect counter=count(*) from student where class=(select class from student where sno=sno)return counterend调用此自定义函数(本例是查找与学号102同班的学生个数)declare a intset a=dbo.studentcount(102)print convert(char(3),a)(2) 创建一个用户自定义函数,用于输出同一个班级中的学生信息create function studentclass(class char(5)returns tablereturn(select * from student where class=class)调用自定义函数(本例是输出12班的学生信息)select * from studentclass(12)下图显示了学生,课程和成绩三个关系的物理设计其中课程号与学号号分别为关系的主码。 五、数据库的实施与维护5.1 数据库的实施:此阶段主要任务包括创建数据库,加载初始数据,数据库试运行,数据库的安全性和完整性控制数据库的备份与恢复,数据库性能的监督分析和改仅,数据库的重组和重构等。首先在数据库中建立一个学生成绩管理系统数据库,然后新建一个数据源。主要代码如下:#include stdafx.h#include StudentScore.h#include Course.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;/ CCourseIMPLEMENT_DYNAMIC(CCourse, CRecordset)CCourse:CCourse(CDatabase* pdb): CRecordset(pdb)/AFX_FIELD_INIT(CCourse)/AFX_FIELD_INITm_nDefaultType = snapshot;CString CCourse:GetDefaultConnect()return _T(ODBC;DSN=);CString CCourse:GetDefaultSQL()return _T();void CCourse:DoFieldExchange(CFieldExchange* pFX)/AFX_FIELD_MAP(CCourse)pFX-SetFieldType(CFieldExchange:outputColumn);/AFX_FIELD_MAP/ CCourse diagnosticsvoid CCourse:AssertValid() constCRecordset:AssertValid();void CCourse:Dump(CDumpContext& dc) constCRecordset:Dump(dc);/ MainFrm.h : interface of the CMainFrame classclass CMainFrame : public CFrameWndprotected: / create from serialization onlyCMainFrame();DECLARE_DYNCREATE(CMainFrame)/ Attributespublic:/ Operationspublic:/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CMainFrame)virtual BOOL PreCreateWindow(CREATESTRUCT& cs);/AFX_VIRTUAL/ Implementationpublic:virtual CMainFrame();protected: / control bar embedded members/CStatusBar m_wndStatusBar;/CToolBar m_wndToolBar;/ Generated message map functionsprotected:/AFX_MSG(CMainFrame)afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnPassword();afx_msg void OnUser();afx_msg void OnStudent();afx_msg void OnTeach();afx_msg void OnTeacher();afx_msg void OnScore();afx_msg void OnQueryTeach();afx_msg void OnQueryScore();afx_msg void OnCourse();/AFX_MSGDECLARE_MESSAGE_MAP();/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line./ CScoreAddDlg dialogCScoreAddDlg:CScoreAddDlg(CWnd* pParent /*=NULL*/): CDialog(CScoreAddDlg:IDD, pParent)/AFX_DATA_INIT(CScoreAddDlg)/AFX_DATA_INITvoid CScoreAddDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CScoreAddDlg)DDX_Control(pDX, IDC_SCORE_STUDENT, m_cStudent);DDX_Control(pDX, IDC_SCORE_SCORE, m_cScore);DDX_Control(pDX, IDC_SCORE_COURSE, m_cCourse);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CScoreAddDlg, CDialog)/AFX_MSG_MAP(CScoreAddDlg)/AFX_MSG_MAPEND_MESSAGE_MAP()void CScoreAddDlg:OnOK()CString student,course,score,student_no,course_no;m_cStudent.GetWindowText(student);m_cCourse.GetWindowText(course); m_cScore.GetWindowText(score);else/成绩不为空CString strSQL;/查出该学生的学号strSQL.Format(select * from student where active_status=Y and student_name=%s,student);CRecordset m_recordSet=&m_database;m_recordSet.Open(CRecordset:forwardOnly,strSQL); m_recordSet.GetFieldValue(student_no,student_no);m_recordSet.Close();/查出该课程的课程号 strSQL.Format(select * from course where active_status=Y and course_name=%s,course);m_recordSet.Open(CRecordset:forwardOnly,strSQL); m_recordSet.GetFieldValue(course_no,course_no);m_recordSet.Close();BOOL CScoreAddDlg:OnInitDialog()CDialog:OnInitDialog();CRecordset m_recordSet;if(!m_database.IsOpen()m_database.Open(_T(student); m_recordSet.m_pDatabase=&m_database;CString strSQL;strSQL.Format(select course_name from
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 成品检验判定参考实施办法
- 智慧医院建设实施方案推进计划
- 2026年度医疗服务质量分析报告
- 屋面防水施工进度控制方案
- 支付承载链路自动化测试方案
- 初中音乐人音版八年级下册小河的呼唤(片段)教学设计及反思
- 第一单元整体教学 感受诗的韵律追寻“诗和远方”教学设计- 2025-2026学年统编版语文九年级下册
- 肾囊肿围手术期护理查房
- 重大项目立项决策评审流程
- 部编版语文八年级下册 6. 阿西莫夫短文两篇 教学设计
- 2026届广东广州市普通高中毕业班综合测试(二)数学(含答案)
- 2025-2030中国数字多用表行业发展分析及竞争格局与发展趋势预测研究报告
- 2026届东北三省三校高三第二次联合模拟考试物理试题(含答案解析)
- 初中物理八年级下册《功与机械能》单元教学设计:探究“功”的内涵、计算与意义
- 医疗器械质量安全风险会商管理制度
- 2026年青少年国防教育专题竞赛题库
- 交银金科校招笔试题库
- 2026年长春中考艺术常识测试题及答案
- 铁路防胀知识培训
- 截桩头施工方案
- 《商标品牌价值评估规范》团体标准-征求意见稿
评论
0/150
提交评论