2011年西安科技大学数据库系统原理课程设计.doc_第1页
2011年西安科技大学数据库系统原理课程设计.doc_第2页
2011年西安科技大学数据库系统原理课程设计.doc_第3页
2011年西安科技大学数据库系统原理课程设计.doc_第4页
2011年西安科技大学数据库系统原理课程设计.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库综合实验报告班 级:计科0904班学 号:0908030416 姓 名: 2011年12月数据库应用系统的初步开发一、实验类别:综合型实验二、实验目的1掌握数据库设计的基本技术,熟悉数据库设计的每个步骤中的任务和实施方案,并加深对数据库系统系统概念和特点的理解。2初步掌握基于C/S的数据库应用系统分析、设计和实现方法。3进一步提高学生的知识综合运用能力。三、实验内容在SQL 2k 数据库管理系统上,利用VC+ 6.0开发工具开发一个学生管理系统的数据库应用系统。四、实验过程1 系统需求说明本系统的主要需求为对模拟对西安科技大学计算机学院的学生基本信息进行管理。使用者可以通过该系统了解计算机学院学生的基本信息。如 学生基本资料,学院所设的系以及各系专业设置情况等。于此同时,用户也要求操作简单,界面相对友好。2 数据库结构设计 (1)概念结构设计使用E-R图表示对数据库中要存储的信息及语义进行详细描述;专业学号姓名班级系名学生性别生日民族课程简介课程号课程名字学习分数mn属于1系系号系名字属于n专业专业名专业号号号所属系班级数n登陆用户密码用户名1如上的E-R代表着如下的含义:学生实体 记录了学生的基本信息。 系别实体 记录了计算机学院所设的系。 专业实体 记录了不同系所含的专业。 课程实体 记录了学院为各个专业所开设的课程信息。 登陆用户实体 记录了管理员的登陆用户名与密码信息。其中一个学院有若干系而每个系只属于一个学院,而一个系含有若干的专业,每个专业只属于一个系。一个学生要学若干门课程,每门课程要被若干学生来学习(2)逻辑结构设计详细描述将E-R图转换成关系模型的过程以及对关系模式的规范化,至少达到3NF)(3) E-R图转换为关系模型的过程如下: 该概念模型中实体间存在着的关系类型为1:n 和 m : n两种。1:n联系可以转换为为一个独立的关系模式,也可以与n端合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。. m : n 联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身本身的属性均转换为关系的属性,而关系的码为各实体码的组合。依照如上的方法将E-R 图转换为如下的关系模型学生(学号,姓名,班级,系号,专业,性别,生日,民族)学习(学号,课程号,分数)课程(课程号,课程名,课程简介)系别(系号,系名, 班级数)专业(专业号,所在属系,专业名)登陆用户(用户名,密码)*含有下划线的为主码关系模式不存在部分依赖以及传递依赖所以达到了3NF(3)物理结构设计以表格形式详细描述系统需要的基本表及属性、视图和索引,对基本表的主键、候选键、外键及被参照表进行说明,对基本表中数据的约束条件进行说明。登陆用户字段名描述类型说明user登陆用户名nvarchar(8)主键,unique约束password密码nvarchar(8)not null 约束学生字段名描述类型说明s_no学号nvarchar(10)主键,unique约束s_name姓名nvarchar(10)not nullclass_no班级号nvarchar(10)not nulls_department系名nvarchar(10)not nulls_major专业nvarchar(10)not nulls_sex性别nvarchar(2)Check约束s_birth生日smalldatetimenot nulls_folk民族nvarchar(6)not null系别字段名描述类型说明d_no系号nvarchar(10)主键,unique约束d_name系名nvarchar(10)not nulld_classnum班级数smallintnot null课程字段名描述类型说明cno课程号nvarchar(10)主键,unique约束cname课程名nvarchar(10)not nullcsummary描述信息nvarchar(50)null专业字段名描述类型说明m_no专业号nvarchar(10)m_no,d_no主键,unique约束d_no系号nvarchar(10)d_no 外键 参照系别d_nom_name专业名nvarchar(10)not null学习字段名描述类型说明s_no学号nvarchar(10)s_no cno主键 cno课程号nvarchar(10)s_no参照学生s_no cno参照课程cnoscore分数smallintnull3 系统功能设计(阐述系统的每个功能。系统应具有身份验证、对数据库数据的增加、删除、修改、查询、浏览、输出等基本功能。)CBackUpDlg类:对数据库进行备份CDepartment类:对惜别信息进行增,删,改,查.CDepartMentSet类:与数据库中的信别信息表关联CListctr类: 负责显示学生的基本信息包括启动窗体时信息载入,退出窗体的时候将更改的信息保存CLoginDlg类: 登录对话框,包含身份验证CScore类: 显示分数的 对话框CScoreinput类:成绩输入CScoreinputSet类 :与成绩表相关联CScoreSearch类 :负责成绩查询CSPeciality 类:专业信息显示CSPecialitySet类:与专业表相关联CStudentSet类:与学生信息表相关联CStuinfoins 类:负责插入数据时显示插入数据的弹出对话框CSubjectSet 类:负责课程设置CSubjectSetSet类:关联课程表CM_myview类: 在分割窗口中负责显示欢迎界面的视图CMy_treeview类:显示树形控件的视图4 系统实现(1)系统的开发环境(软、硬件配置情况)Microsoft windows xp professional (5.1,版本 2600) Vc+ 6.0内存:2GHzCPU B940 2.00GHz(2)数据库创建过程(简要一些)及其连接(说明数据库连接方法写出关键代码或步骤)该程序通过SQL 2k 的企业管理器的可视化界面创建数据库。建立系统数据源 通过控制面板中的数据源管理器创建访问数据库是通过ODBC技术实现。这里利用的是MFC中封装好的 CRecordSet类来实现 步骤为:创建一个类继承自CRecordSet类系统会提示选择数据源,选择好相应的数据源后选择对象所要关联的表,并打开进行操作。主要代码如下:if(!m_departRecord.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)MessageBox(无法打开数据库,错误,MB_OK);strSQL为所要执行的SQL语句。其它类中与此类似。(3)创建工程文件及窗体,添加所需的控件,为相应控件的事件编写代码,以实现目标功能。(在此包括:关键代码、运行后的界面)1.登陆界面及主要代码:void CLoginDlg:OnOK() /单击登陆按钮/ TODO: Add extra validation hereCUserSet recordset;CString strSql;UpdateData(TRUE);m_pw.TrimLeft();m_pw.TrimRight();m_user.TrimRight();m_user.TrimLeft();strSql.Format(select * from users where user =%s and password = %s,m_user,m_pw);if(!recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSql) /打开并执行查询AfxMessageBox(数据库打开失败!);if(!recordset.GetRecordCount()recordset.Close();AfxMessageBox(密码或用户名错误,请重新输入);elseCDialog:OnOK();2.成功登陆后的主窗体与主要实现代码窗口分割实现代码:BOOL CMainFrame:OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) / TODO: Add your specialized code here and/or call the base classCRect rect;GetWindowRect(&rect);m_SplitterWnd.CreateStatic(this,1,2);m_SplitterWnd.CreateView(0,0,RUNTIME_CLASS(my_treeview),CSize(rect.right/4,rect.bottom),pContext);m_SplitterWnd.CreateView(0,1,RUNTIME_CLASS(m_myview),CSize(rect.right/4)*3,rect.bottom),pContext); return TRUE;/CFrameWnd:OnCreateClient(lpcs, pContext);图像的加载void m_myview:OnPaint() CPaintDC dc(this); / device context for painting/ TODO: Add your message handler code hereCBitmap bmp;if (bmp.LoadBitmap(IDB_BITMAP3)CDC dcMemory;dcMemory.CreateCompatibleDC(&dc);CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp);CRect rect;GetClientRect(&rect);BITMAP bitMap;bmp.GetBitmap(&bitMap);dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMemory,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);dcMemory.SelectObject(pOldBitmap);树型控件信息的加载m_ImageList.Create(ImageList,32,1,RGB(255,255,255);m_treectrl-SetImageList(&m_ImageList,TVSIL_NORMAL);HTREEITEM promptItem5;promptItem0 = m_treectrl-InsertItem(快速导航,TVI_ROOT);promptItem1 = m_treectrl-InsertItem(学院设置,promptItem0);promptItem2 = m_treectrl-InsertItem(学生管理,promptItem0);promptItem3 = m_treectrl-InsertItem(成绩管理,promptItem0);promptItem4 = m_treectrl-InsertItem(系统管理,promptItem0);m_treectrl-InsertItem(系别设置,promptItem1);m_treectrl-InsertItem(专业设置,promptItem1);m_treectrl-InsertItem(学生资料管理,promptItem2);m_treectrl-InsertItem(成绩查询,promptItem3);m_treectrl-InsertItem(成绩录入,promptItem3);m_treectrl-InsertItem(科目设置,promptItem3);m_treectrl-InsertItem(数据库备份,promptItem4);单击树型控件后分别弹出不同功能对话框的实现代代码:void my_treeview:OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;/ TODO: Add your control notification handler code here WPARAM wPm; / 存放消息中的参数WPARAM CString itemStr; itemStr = m_treectrl-GetItemText(m_treectrl-GetSelectedItem(); if(itemStr = 系别设置) wPm = ID_DEPARTMENT; else if(itemStr = 专业设置) wPm = ID_SPECIALITY; else if(itemStr = 学生资料管理) wPm = ID_STUINFO; else if(itemStr = 成绩查询) wPm = ID_SCOREQUERY; else if(itemStr = 成绩录入) wPm = ID_INPUTSCORE; else if(itemStr = 科目设置) wPm = ID_SUBJECTSET; else if(itemStr = 数据库备份) wPm = ID_MENUITEMBACKUP; AfxGetMainWnd()-PostMessage(WM_COMMAND,wPm,0);*pResult = 0;3.系别设置的相关实现代码与界面打开窗口时信息的加载void CDepartment:loadDepInfo()CString strSQL;strSQL.Format( select * from department );m_depInfo.DeleteAllItems();if(!m_departRecord.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)MessageBox(无法打开数据库,错误,MB_OK);elseint index = 0;while(!m_departRecord.IsEOF()m_depInfo.InsertItem(index,m_departRecord.m_d_no);m_depInfo.SetItemText(index,1,m_departRecord.m_d_name);m_departRecord.MoveNext();index+;m_departRecord.Close();m_depInfo.SetRedraw();信息的添加及添加后信息更新void CDepartment:OnAddDep() / TODO: Add your control notification handler code hereUpdateData();m_depname.TrimLeft();m_depname.TrimRight();m_depno.TrimLeft();m_depno.TrimRight();if(m_depname.IsEmpty()|m_depno.IsEmpty()MessageBox(系号与系名不能为空,通知,MB_OK);elseCString strSql;strSql.Format(select * from department);if(!m_departRecord.Open(AFX_DB_USE_DEFAULT_TYPE,strSql)MessageBox(数据库无法打开,通知,MB_OK);elsem_departRecord.AddNew();m_departRecord.m_d_name = m_depname;m_departRecord.m_d_no = m_depno;m_departRecord.Update();m_departRecord.Close();loadDepInfo();删除功能void CDepartment:OnDel() / TODO: Add your control notification handler code hereint index = m_depInfo.GetSelectionMark();if(index = -1)MessageBox(请选择要删除的记录!);elseCString strSQL;CString d_no = m_depInfo.GetItemText(index,0);d_no.TrimLeft();d_no.TrimRight();strSQL.Format(select * from department where d_no=%s,d_no);if(!m_departRecord.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)MessageBox(无法打开数据库!,错误,MB_OK);elsem_departRecord.Delete();m_departRecord.Close();loadDepInfo();信息修改更新void CDepartment:OnUpdate() / TODO: Add your control notification handler code here/CStuInfoins stdlg;int index = m_depInfo.GetSelectionMark();if(index = -1)MessageBox(请选择要修改的记录,温馨提示,MB_OK);elsem_depname.TrimLeft();m_depname.TrimRight();m_depno.TrimLeft();m_depno.TrimRight();UpdateData();if(m_depno.IsEmpty()MessageBox(请输入系号,温馨提示,MB_OK);else if(m_depname.IsEmpty()MessageBox(请输入系名字,温馨提示,MB_OK);elseCString d_no = m_depInfo.GetItemText(index,0); / 获取系号CString str;d_no.TrimLeft();d_no.TrimRight();CString strSql;strSql.Format(select * from department where d_no =%s,d_no); if(!m_departRecord.Open(AFX_DB_USE_DEFAULT_TYPE,strSql)MessageBox(无法打开数据库,错误,MB_OK);elsem_departRecord.Edit();m_departRecord.m_d_name = m_depname;m_departRecord.m_d_no = m_depno;m_departRecord.Update();m_departRecord.Close();loadDepInfo(); / 重新加载数据MessageBox(修改完成,通知,MB_OK);专业信息设置对话框专业信息设置中的增删该与系别信息设置的代码基本相同,故不在此重复添加实现代码。4.学生信息设置与相应的窗体添加的界面增删改的实现与前面的实现基本一致不在此重复。如下的是实现查询功能的主要代码:根据选择的条件生成sql语句并查询void CListctr:OnButtonQuery() / TODO: Add your control notification handler code hereBOOL bCondition = FALSE;CString sql,temp;UpdateData();if(m_dep.GetCurSel()!=CB_ERR&!m_depstr.IsEmpty()sql.Format(select * from student where s_department = %s,m_depstr);bCondition = TRUE; / 用户选择了查询条件 if(m_sp.GetCurSel()!=CB_ERR&!m_specstr.IsEmpty()if(!bCondition)sql.Format(select * from student where s_department = %s,m_specstr);elsetemp.Format( s_major = %s,m_specstr);sql = sql+and+temp;bCondition = TRUE;if(!bCondition)sql.Format(select * from student);/AfxMessageBox(sql);CStudentSet stu_recordSet;if(!stu_recordSet.Open(AFX_DB_USE_DEFAULT_TYPE,sql)MessageBox(无法打开数据库!,错误,MB_OK);elseif(!stu_recordSet.GetRecordCount()MessageBox(没有找到相关信息,提示,MB_OK);elsem_liststuinfo.DeleteAllItems();int i_index = 0;while(!stu_recordSet.IsEOF()m_liststuinfo.InsertItem(i_index,stu_recordSet.m_s_no);m_liststuinfo.SetItemText(i_index,1,stu_recordSet.m_class_no);m_liststuinfo.SetItemText(i_index,2,stu_recordSet.m_s_name);m_liststuinfo.SetItemText(i_index,3,stu_recordSet.m_s_sex);CString data;data.Format(%d年%d月%d日,stu_recordSet.m_s_birth.GetYear(),m_insStu.m_s_birth.GetMonth(),stu_recordSet.m_s_birth.GetDay();m_liststuinfo.SetItemText(i_index,4,data);m_liststuinfo.SetItemText(i_index,5,stu_recordSet.m_department);m_liststuinfo.SetItemText(i_index,6,stu_recordSet.m_s_major);m_liststuinfo.SetItemText(i_index,7,stu_recordSet.m_folk);i_index+;stu_recordSet.MoveNext();stu_recordSet.Close();m_liststuinfo.SetRedraw();5.成绩录入代码与窗体双击显示的记录会弹出对话框然后录入成绩void CScoreinput:OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code hereCScore scoredlg;CString strSQL,cnd1,cnd2;int i_index;i_index = m_ctrList.GetSelectionMark();cnd1 = m_ctrList.GetItemText(i_index,0);cnd2 = m_ctrList.GetItemText(i_index,1);UpdateData();strSQL.Format(select * from score where sno=%s and cno=%s,cnd1,cnd2);if(IDOK!=scoredlg.DoModal()return; /点ok的两种判断一=IDOK二不等于IDOK则退出if(!m_recordSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)MessageBox(打开数据库失败!,数据库错误,MB_OK);return ;m_recordSet.Edit();CString score;score.Format(%d,scoredlg.m_score);m_recordSet.m_score = score;m_ctrList.SetItemText(i_index,4,m_recordSet.m_score);m_recordSet.Update();m_recordSet.Close();m_ctrList.SetRedraw();*pResult = 0;6.科目设置窗体与代码增删该功能于前面雷同在此不再重复7,成绩查询窗体与代码按学号查询主要代码sql.Format(select * from score where sno like %s,m_sno);if(!recordSet.Open(AFX_DB_USE_DEFAULT_TYPE,sql)MessageBox(打开数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论