当前位置:文档之家› 数据库课程实验报告

数据库课程实验报告

课程实验报告课程名称:数据库系统原理专业班级:CS1110学号:U201114468姓名:梅超指导教师:杨茂林报告日期:2014年6月23日计算机科学与技术学院目录1实验目的与内容 (1)1.1实验目的 (1)1.2实验内容 (1)2系统分析与设计 (2)2.1系统分析 (2)2.2系统设计 (3)2.2.1数据库设计 (3)2.2.2功能模块设计 (4)3系统实现 (5)3.1数据库的实现 (5)3.2模块功能实现 (6)3.2.1开发环境 (6)3.2.2模块实现 (6)3.2.2.1系统登录模块设计 (6)3.2.2.2系统注册模块设计 (9)3.2.2.3数据库主界面设计 (11)3.2.2.4学生信息查询模块设计 (16)3.2.2.5学生信息插入模块设计 (19)3.2.2.6学生信息删除模块设计 (22)3.2.2.7学生信息修改模块设计 (26)3.2.2.8课程信息查询模块设计 (29)3.2.2.9课程信息插入模块设计 (30)3.2.2.10课程信息删除模块设计 (31)3.2.2.11课程信息修改模块设计 (32)3.2.2.12选课信息查询模块设计 (33)3.2.2.13选课信息插入模块设计 (34)3.2.2.14选课信息删除模块设计 (35)3.2.2.15选课信息修改模块设计 (36)3.2.2.16SQL复杂操作模块设计 (37)4总结 (40)参考文献 (41)1实验目的与内容1.1实验目的本综合实验的目的主要是通过理论联系实际,巩固课堂所学理论知识,如关系数据库规范化理论与数据库设计的方法,同时提高实践能力和创新能力,培养数据库应用系统开发的能力,以及技术总结和撰写实验报告的基本技能。

1.2实验内容设计一个学生-课程信息管理系统,实现以下功能:1.实现对学生信息的查询、插入、删除、修改2.实现对课程信息的查询、插入、删除、修改3.实现对学生选课信息的查询、插入、删除、修改4.通过SQL语句实现多表连接复杂查询5.实现新建用户功能2系统分析与设计2.1系统分析2.1.1需求分析根据分析,本系统的实体有学生、课程和选课信息。

描述学生的属性有:学号、姓名、性别、年龄、所在院系。

描述课程的属性有:课程号、课程名称、学分描述选课信息的属性有:学号、课程号、考试成绩。

一个学生可选多门课程,一门课程可被多个选手选择,因此数据库系统E-R图如图2.1所示。

图 2.12.1.2数据字典(1)学生数据属性类型含义Sno Char(9)学号Sname Char(20)姓名Ssex Char(2)性别Sage Smallint年龄Sdept Char(20)院系表 2.1(2)课程数据属性类型含义Cno Char(4)课程号Cname Char(20)课程名Ccredit Smallint学分表 2.2(3)选课数据属性类型含义Sno Char(9)学号Cno Char(4)课程号Grade Smallint成绩表 2.32.2系统设计2.2.1数据库设计(1)数据库关系逻辑模式:学生表Student(Sno,Sname,Ssex,Sage,Sdept)课程表Course(Cno,Cname,Ccredit)选课表SC(Sno,Cno,Grade)(2)索引表学生信息索引表:列名Sno Sname Ssex Sage Sdept 索引主无无无无表 2.4课程信息索引表:列名Cno Cname Ccredit索引主无无表 2.5选课信息索引表:列名Sno Cno Grade索引主无2.2.2功能模块设计系统功能模块图如图2.2所示。

图 2.2由图可知:系统主要由四个模块组成,分别是学生信息管理模块、课程信息管理模块、选课信息管理模块以及SQL复杂查询模块。

学生信息管理模块:主要实现快速的对学生信息表Student的查询、插入、删除、以及修改操作。

课程信息管理模块:主要实现快速的对课程信息表Course的查询、插入、删除、以及修改操作。

选课信息管理模块:主要实现快速的对选课信息表SC的查询、插入、删除、以及修改操作。

SQL复杂操作模块:主要实现通过输入SQL语句对多张表进行连接查询等操作。

3系统实现3.1数据库的实现(1)创建数据库Create database Database;(2)创建学生表:Create table Student(Sno char(9)primary key,Sname char(20),Ssex char(2),Sage smallint,Sdept char(20));(3)创建课程信息表:Create table Course(Cno char(4)primary key,Cname char(20),Ccredit smallint);(4)创建选课信息表:Create table SC(Sno char(9),Cno char(4),Grade smallint,Primary key(Sno,Cno),Foreign key(Sno)references Student(Sno),Foreign key(Cno)references Course(Cno) )3.2模块功能实现3.2.1开发环境本系统在Visual C++6.0下开发,采用MFC设计界面,WindowsXP操作系统及以上版本均可。

3.2.2模块实现3.2.2.1系统登录模块设计系统登录界面如图3.1所示。

图 3.1登录按钮消息响应函数如下:void CSQL2Dlg::OnLogin(){//TODO:Add your control notification handler code hereUpdateData(TRUE);_ConnectionPtr pConnection;_RecordsetPtr pRecordset;if(m_user.IsEmpty())MessageBox("用户名不能为空!","提示",MB_OK);else if(m_password.IsEmpty())MessageBox("密码不能为空!","提示",MB_OK);else{try{pConnection.CreateInstance("ADODB.Connection");//创建连接对象实例bstr_t strConnect="DRIVER={Microsoft Access Driver (*.mdb)};\uid=;pwd=;DBQ=Database.mdb;";pConnection->Open(strConnect,"","",adModeUnknown);//打开数据库}catch(_com_error e)//捕捉错误{AfxMessageBox(e.Description());//弹出错误}CString sql="select*from User where Username=\'"+m_user+"\'";pRecordset.CreateInstance(__uuidof(Recordset));//创建记录集对象实例pRecordset->Open(_bstr_t(sql),pConnection.GetInterfacePtr(), adOpenDynamic,adLockOptimistic,adCmdText);//执行SQL得到记录集int RecordCount=0;CString password;while(!pRecordset->adoEOF){RecordCount++;password=pRecordset->GetCollect("Password").bstrVal;pRecordset->MoveNext();}if(RecordCount==0)MessageBox("该用户未注册!","提示",MB_OK);else{if(m_password!=password)MessageBox("用户名和密码不匹配!","错误",MB_OK);else{this->ShowWindow(SW_HIDE);CSQL2App*App=(CSQL2App*)AfxGetApp();App->Maindlg=new CMainDialog;App->Maindlg->Create(IDD_MAINDIALOG);App->Maindlg->ShowWindow(SW_SHOW);}}pRecordset->Close();pConnection->Close();}}首先,系统根据用户表User检查用户是否存在,若果存在怎继续检查用户信息是否正确以及用户名和密码是否匹配,都检测无误才允许进入系统。

3.2.2.2系统注册模块设计系统注册用户的界面图3.2所示。

图 3.2注册按钮消息响应函数如下:void CRegisterDlg::OnRigister(){//TODO:Add your control notification handler code hereUpdateData(TRUE);_ConnectionPtr pConnection;_RecordsetPtr pRecordset;if(m_Username.IsEmpty())MessageBox("用户名不能为空!","提示",MB_OK);else if(m_Password.IsEmpty()||m_Password1.IsEmpty())MessageBox("密码不能为空!","提示",MB_OK);else if(m_Password!=m_Password1)MessageBox("两次输入密码不匹配!","提示",MB_OK);else{try{pConnection.CreateInstance("ADODB.Connection");//创建连接对象实例bstr_t strConnect="DRIVER={Microsoft Access Driver (*.mdb)};\uid=;pwd=;DBQ=Database.mdb;";pConnection->Open(strConnect,"","",adModeUnknown);//打开数据库}catch(_com_error e)//捕捉错误{AfxMessageBox(e.Description());//弹出错误}CString sql="select*from User where Username=\'"+m_Username+"\'";pRecordset.CreateInstance(__uuidof(Recordset));//创建记录集对象实例pRecordset->Open(_bstr_t(sql),pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);//执行SQL得到记录集int RecordCount=0;while(!pRecordset->adoEOF){RecordCount++;pRecordset->MoveNext();}if(RecordCount>0)MessageBox("该用户名已被注册!","提示",MB_OK);else{CString Sql="insert into User(Username,Password)values(\'" +m_Username+"\'"+",\'"+m_Password+"\')";pConnection->Execute((_bstr_t)Sql,NULL,adCmdText);MessageBox("注册成功!");}pRecordset->Close();pConnection->Close();}}系统根据用户的注册信息检查User表中该用户名是否已经被注册,若没有怎检查填写信息是否无误,若都正确怎在User表中插入一个新的用户记录,包括用户名和用户密码。

相关主题