




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、内容概要 系统设计 数据库操作 程序实现 程序演示 第1页/共95页1.系统设计 初始研究阶段 该阶段定义项目的范围以及触发该项目的可见的问题、机会和指示 解决“为什么”的问题。第2页/共95页1.系统设计(2/)需求分析阶段 选课系统的需求: 1.学生选课 2.维护网络选课系统的数据库信息 解决系统需要“做什么”, 而非“如何做”。 第3页/共95页1.系统设计(3/) 系统建模第4页/共95页2.数据库操作 1.建立相关数据表 数据库管理系统:Microsoft Access 优点:简单,易用,微软出品 2.注册数据源 控制面板-管理工具-ODBC数据源 第5页/共95页2.1.建立相关数
2、据表 启动Access,创建数据库第6页/共95页2.1.建立相关数据表 创建所需数据表(1)字段名称字段名称数据类型数据类型 备注备注courseNum数字数字课程数目课程数目creditNum数字数字学分数目学分数目course_lim:记录最多总的课程数和学分 第7页/共95页2.1.建立相关数据表 创建所需数据表(2)字段字段名称名称数据数据类型类型备注备注cNo数字数字课程号课程号cName文本文本课程名称课程名称cCredit数字数字课程学分课程学分cNum数字数字课时课时cTime数字数字上课时间上课时间(如:(如:5252表表示周五第示周五第2 2节)节)course_rec:
3、课程记录表 第8页/共95页2.1.建立相关数据表 创建所需数据表(3)字段名称字段名称数据类型数据类型备注备注sNo数字数字学号学号cNo数字数字课程号课程号grade数字数字课程分数课程分数course_sel:选课记录表第9页/共95页2.1.建立相关数据表 创建所需数据表(4)字段名称字段名称数据类型数据类型备注备注dNo文本文本院系别院系别dName文本文本院系名院系名dTelNo数字数字院系电话院系电话department:系所信息表第10页/共95页2.1.建立相关数据表创建所需数据表(5)student:学生信息表字段名称字段名称数据类型数据类型备注备注sNo数字数字学号学号s
4、Name文本文本姓名姓名Sex文本文本性别性别Birthday日期日期/ /时时间间生日生日dNo文本文本系别系别第11页/共95页ODBC简介 Microsoft推出的开放数据库互连技术(Open Database Connectivity),简称ODBC。开放数据库互连接实际上是一个数据库访问库,它包含访问不同数据库所要求的ODBC驱动程序。 第12页/共95页ODBC简介 应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,OD
5、BC就能建立起与相应数据库的连接。第13页/共95页2.2 注册数据源 控制面板-管理工具-ODBC数据源第14页/共95页2.2 注册数据源 创建新数据源第15页/共95页3.程序实现 建立Course工程项目 界面设计 添加相应的类和函数 添加记录集类(CRecordset类) 功能实现第16页/共95页3.1 建立Course工程项目创建基于对话框的应用程序第17页/共95页3.2 界面设计1.添加Flexgrid ActiveX控件支持 Microsoft FlexGrid (MSFlexGrid) 控件可以显示网格数据,也可以对其进行操作。它提供了高度灵活的网格排序、合并和格式设置功
6、能,网格中可以包含字符串和图片。 在应用程序中使用 MSFlexGrid之前,首先必须将 MSFlxGrd.ocx 文件添加到工程中。 第18页/共95页添加Flexgrid ActiveX控件支持第19页/共95页添加Flexgrid ActiveX控件支持第20页/共95页添加Flexgrid ActiveX控件支持第21页/共95页程序界面设计选课系统开始界面第22页/共95页程序界面设计学生选课界面第23页/共95页程序界面设计第24页/共95页程序界面设计第25页/共95页程序界面设计选课系统维护界面第26页/共95页3.3 添加相应的类和函数Ctrl+W第27页/共95页3.3 添
7、加相应的类和函数第28页/共95页3.3 添加相应的类和函数为相关控件添加变量第29页/共95页CCourseSlectDlg类控件变量列表(1)控件类型控件类型ID文字命名文字命名Button IDC_BUTTON_STUDENT_IDENTIFY 输入确认输入确认 Button ID_BUTTON_SELECT_COURSE选课选课 Button ID_BUTTON_DELETE_COURSE 退选退选 ButtonIDC_BUTTON_CONFIRM选课确认选课确认Button IDC_BUTTON_COURSEFIND查找查找 Static Text IDC_STATIC 请输入学号请
8、输入学号 Static TextIDC_STATIC_STUNAME姓名姓名 Static TextIDC_STATIC_CREDIT 已选学分已选学分 Static Text IDC_STATIC 输入课程名输入课程名称称 Static Text IDC_STATIC输入课程号输入课程号 第30页/共95页CCourseSlectDlg类控件变量列表(2)控件类型控件类型ID文字命名文字命名Static Text IDC_STATIC已选课程列表已选课程列表 Static Text IDC_STATIC 选课门数选课门数 Edit Box IDC_EDIT_STUNO输入学号输入学号 Edi
9、t Box IDC_EDIT_STUNAME 显示姓名显示姓名 Edit Box IDC_EDIT_CREDIT 显示学分显示学分 Edit Box IDC_EDIT_COURSENAME输入课程名输入课程名 Edit Box IDC_EDIT_COURSENUMBER 输入课程号输入课程号 Edit Box IDC_EDIT_TOTALCOURSE显示已选学分显示已选学分 FlexGrid IDC_MSFLEXGRID1 List Box IDC_LIST_SELECTED_COURSE第31页/共95页3.3 添加相应的类和函数学生选课对话框相关变量第32页/共95页CMaintenanc
10、eDlg类控件变量列表(1)控件类型控件类型ID文字命名文字命名Combo boxIDC_COMBO_SELECTCOURSE 选择数据表选择数据表 Edit Box IDC_EDIT1修改修改 Edit Box IDC_EDIT2 修改修改Edit Box IDC_EDIT3 修改修改Edit Box IDC_EDIT4修改修改Edit Box IDC_EDIT5修改修改FlexGrid IDC_MSFLEXGRID_MAINTENANCE显示数据表显示数据表第33页/共95页CMaintenanceDlg类控件变量列表(2)控件类型控件类型ID文字命名文字命名BUTTONIDC_BUTTO
11、N_INSERT插入插入 BUTTONIDC_BUTTON_DELETE删除删除 BUTTONIDC_BUTTON_MODIFY 修改修改BUTTONIDC_OK 退出退出第34页/共95页3.3 添加相应的类和函数系统维护对话框相关变量第35页/共95页3.3 添加相应的类和函数 为控件添加相应的变量,相当于在对话框类中定义相关的变量。 这些变量显示在ClassView 视图中第36页/共95页3.3 添加相应的类和函数显示在头文件类定义里的变量(1)第37页/共95页3.3 添加相应的类和函数显示在头文件类定义里的变量(1)第38页/共95页3.3 添加相应的类和函数为相关控件映射功能函数
12、第39页/共95页3.3 添加相应的类和函数第40页/共95页3.3 添加相应的类和函数为相关控件映射功能函数后,这些函数出现在类的成员函数列表中第41页/共95页3.3 添加相应的类和函数为相关控件映射的功能函数在头文件中的定义第42页/共95页3.3 添加相应的类和函数为相关控件映射的功能函数的函数体第43页/共95页3.4添加记录集类(CRecordset类)1.增加头文件支持 StdAfx.h文件末尾加入#include 2.CRecordset类 该类代表从数据源选择的一组记录(记录集),程序可以选择将数据库中的某个表中的所有列绑定到一个数据集;可以选择将某个表中的若干列绑定到一个数
13、据集;还可以将同一数据集中多个表的列绑定到一个数据集里。通过这个类的对象,可以对数据集里的记录进行滚动,修改,增加和删除等操作。第44页/共95页3.4添加记录集类(CRecordset类)2.程序里用到的CRecordset类 一个表里的所有列绑定到一个CRecordset类 CCourseSet(course_rec) CCourseLimitSet(course_lim) 一个表里的若干列绑定到一个CRecordset类 CStudentSet(student) CCourseSelectedOnlySet(course_sel) 多个表的若干列绑定到一个CRecordset类 CCou
14、rseSelSet(course_rec, course_sel)第45页/共95页一个表里的所有列绑定到一个CRecordset类步骤1. 添加一个新的类,派生于CRecordset第46页/共95页一个表里的所有列绑定到一个CRecordset类步骤2. 为记录集类设定数据源第47页/共95页一个表里的所有列绑定到一个CRecordset类与表course_rec绑定的记录集类CCourseSet,其中表中每一列都对应CCourseSet中的一个变量第48页/共95页一个表里的若干列绑定到一个CRecordset类 步骤1与第一种CRecordset类相同 步骤2 不选中Bind all
15、columns的复选框 步骤3 手工设定所要绑定的列第49页/共95页一个表里的若干列绑定到一个CRecordset类第50页/共95页一个表里的若干列绑定到一个CRecordset类与表course_rec绑定的记录集类CCourseSelectedOnlySet其中表中与记录集绑定的每一列都对应记录集中的一个变量第51页/共95页多个表的若干列绑定到一个CRecordset类与列绑定后CRecordset类头文件的改变第52页/共95页多个表的若干列绑定到一个CRecordset类与列绑定后CRecordset类中相关函数的改变第53页/共95页多个表的若干列绑定到一个CRecordset
16、类步骤1:在头文件里定义相应的变量第54页/共95页多个表的若干列绑定到一个CRecordset类步骤2:对类里相应的函数进行修改第55页/共95页多个表的若干列绑定到一个CRecordset类第56页/共95页3.5 功能实现1.学生选课对话框 程序演示2.系统维护对话框 程序演示第57页/共95页学生选课对话框函数列表函数名函数名功能功能对应控件对应控件OnInitDialog初始化对话框初始化对话框AddGridItem为为FlexGrid添加记录添加记录FlexGridAddListBoxItem为为ListBox添加记录添加记录ListBoxRefreshDisplay刷新显示刷新显
17、示OnButtonCoursefind响应单击响应单击“查找查找”按按钮钮ButtonOnButtonDeleteCourse响应单击响应单击“退选退选”按按钮钮ButtonOnButtonSelectCourse响应单击响应单击“选课选课”按按钮钮ButtonOnButtonConfirm响应单击响应单击“选课确认选课确认”按按钮钮Button第58页/共95页OnInitDialog()函数 BOOL CCourseSlectDlg:OnInitDialog() CDialog:OnInitDialog();CCourseSet courseSet; /声明实例对象 courseSet.m
18、_strSort = cno; /按照cno字段排序输出courseSet.Open(); /打开记录集AddGridItem(&courseSet);courseSet.Close(); /关闭记录集第59页/共95页OnInitDialog()函数 /由course_lim表读入选课数及学分数的限制CCourseLimitSet courselimitSet; /声明实例对象courselimitSet.Open(); /打开记录集m_iCourseNumLimit = (int)courselimitSet.m_courseNum; /读出字段值m_iCourseCreditLi
19、mit = (int)courselimitSet.m_creditNum; /同上courselimitSet.Close(); /关闭记录集return TRUE; 第60页/共95页AddGridItem(CCourseSet*)函数 void CCourseSlectDlg:AddGridItem(CCourseSet *courseSet) CString strGridItem;CString strTab = ;VARIANT vIndex;m_flexgridCourse.Clear();/清除原有显示的内容if (courseSet-IsBOF() /检查传来的参数是否为空r
20、eturn;courseSet-MoveFirst(); /如参数不为空则移动到第一个记录vIndex.vt = VT_I2; /设置类型为2字节整形strTab.Replace( , 0 x9); /将空格替换为0 x9 m_flexgridCourse.SetFormatString(“课程号 |课程名称 |学分 |IsEOF()/循环读取直到最后一条记录vIndex.iVal = iIndex; /保存记录的序号iIndex +;strGridItem = courseSet-m_cNo + strTab + courseSet-m_cName+ strTab + courseSet-m
21、_cCredit + strTab + courseSet-m_cNum;/生成表格一行的字符串m_flexgridCourse.AddItem(strGridItem, vIndex);/向表内添加一行courseSet-MoveNext(); /移动到下一条记录 第62页/共95页学生选课功能实现 FlexGrid的成员函数AddItem完成向表格中加入一行的功能,它有两个参数,第一个参数是插入的内容,是CString类型的,各列之间以Tab(0 x09)隔开,第二个参数是代表插入的行的序号,是VARIANT类型。 VARIANT是一个C结构。如果vt 是VT_I2, 则读到的VARIAN
22、T的值是一个2个字节的整数。 如果vt 是VT_R8, 则读到的VARIANT的值是一个8-byte的双精度的浮点数。 程序中首先定义了一个VARIANT类型的变量,然后将其类型值设为VT_I2,将其值在while循环里设定为所要插入的行号,最后作为参数,传给FlexGrid的成员函数AddItem第63页/共95页OnButtonStuendtIdentify()函数 void CCourseSlectDlg:OnButtonStudentIdentify() CStudentSet studentSet;CString strConnectionStr;CString strSno;int
23、 iNumItems; iNumItems = m_selectedCourse.GetCount();/得到listbox中的记录行数for (int i = 0; i m_iCourseCreditLimit) AfxMessageBox(不能选定该课程,学分数超过限定额); return;if (m_iTotalCourse + 1) m_iCourseNumLimit) AfxMessageBox(不能选定该课程,选课数超过限定额); return;第73页/共95页OnButtonSelectCourse()函数 CCourseSelectedOnlySet courseSelOnl
24、ySet; CString strSno; m_editStudentNumber.GetWindowText(strSno); courseSelOnlySet.m_strFilter = sNo = + strSno + and cNo = + strCourseNo; courseSelOnlySet.Open(CRecordset:dynaset); if (!courseSelOnlySet.IsBOF() return; /如果取回的记录不空,则说 明该课程已经选过了 courseSelOnlySet.AddNew(); /加入该课程 courseSelOnlySet.m_cNo
25、= strCourseNo; courseSelOnlySet.m_sNo = strSno; courseSelOnlySet.Update(); m_courseSelectedSet.Requery(); 第74页/共95页OnButtonConfirm()函数 void CCourseSlectDlg:OnButtonConfirm() CStudentSet studentSet;CString strSno;int iNumItems;iNumItems = m_selectedCourse.GetCount();/得到listbox中的记录行数for (int i = 0; i
26、iNumItems; i+)/逐行删除m_selectedCourse.DeleteString(0);m_editStudentNumber.GetWindowText(strSno);/得到学生学号studentSet.m_strFilter = sno= + strSno; /设定查找条件studentSet.m_strSnoParam = strSno;studentSet.Open();if (m_courseSelectedSet.IsOpen()m_courseSelectedSet.Close();m_courseSelectedSet.m_strFilter = sNo= +
27、 strSno + and course_o=course_o;m_courseSelectedSet.Open();AddListBoxItem();/添加listbox内容RefreshDisplay();/填写总学分和总选课数 第75页/共95页OnButtonDeleteCourse()函数 void CCourseSlectDlg:OnButtonDeleteCourse() INT nIndex, nLen;CString strSelectedText;int iNumItems = m_selectedCourse.GetCount();if (iNumItems = 0)/查
28、看listbox中是否有内容return;nIndex = m_selectedCourse.GetCurSel();if (nIndex IsBOF() /检查传来的参数是否为空return;courseLimitSet-MoveFirst(); /参数不为空移动到第一个记录vIndex.vt = VT_I2; /设置类型为2字节整形strTab.Replace( , 0 x9); /将空格替换为0 x9=m_flexgridMaintenance.SetFormatString(最大课程数目 |IsEOF()/循环读取直到最后一条记录vIndex.iVal = iIndex; /保存记录的
29、序号iIndex +; course.Format(_T(“%d”),courseLimitSet-m_courseNum);/生成字符串 credit.Format(_T(%d),courseLimitSet-m_creditNum); strGridItem = course + strTab + credit; /生成表格一行的字符串m_flexgridMaintenance.AddItem(strGridItem, vIndex);/向表内添加一行 courseLimitSet-MoveNext(); /移动到下一条记录 第84页/共95页OnButtonInsert()函数 void
30、 CMaintenanceDlg:OnButtonInsert() CString strSelected;/记录选择的数据表VARIANT vIndex; CString edit1,edit2,edit3,edit4,edit5;if(!m_bEditable)/判断下拉选择框状态AfxMessageBox(必须首先选择数据表);return; m_ComboList.GetLBText(m_ComboList.GetCurSel(),strSelected);m_edit1.GetWindowText(edit1);m_edit2.GetWindowText(edit2);m_edit3
31、.GetWindowText(edit3);m_edit4.GetWindowText(edit4);m_edit5.GetWindowText(edit5);第85页/共95页OnButtonInsert()函数if(strSelected = _T(学生表)CStudentSet studentSet;studentSet.Open();studentSet.AddNew();/完成一条记录studentSet.m_sNo=edit1;studentSet.m_sName=edit2;studentSet.m_sex=edit3;studentSet.m_birthday=edit4;st
32、udentSet.m_dNo=edit5;studentSet.Update();studentSet.Requery();AddGridItem(&studentSet);第86页/共95页OnButtonInsert()函数 if(strSelected = _T(课程表)CCourseSet courseSet;courseSet.Open();courseSet.AddNew();courseSet.m_cNo=edit1;courseSet.m_cName=edit2;courseSet.m_cCredit=edit3;courseSet.m_cNum=edit4;cours
33、eSet.m_cTime=edit5;courseSet.Update();courseSet.Requery();AddGridItem(&courseSet);if (strSelected = _T(选课限制表)AfxMessageBox(选课限制表不能添加记录,只能修改);return;第87页/共95页OnButtonDeleteCourse()函数 void CMaintenanceDlg:OnButtonDelete() int iSel;/记录行号记录行号CString strSelected;if(!m_bEditable)/判断下拉选择框状态判断下拉选择框状态Afx
34、MessageBox(必须首先选择数据表必须首先选择数据表);return; m_ComboList.GetLBText(m_ComboList.GetCurSel(),strSelected); iSel=m_flexgridMaintenance.GetRowSel(); /取得选中取得选中行号行号if (strSelected = _T(选课限制表选课限制表) AfxMessageBox(选课限制表不能删除记录选课限制表不能删除记录,只能修改只能修改);return;第88页/共95页OnButtonDeleteCourse()函数if(strSelected = _T(学生表)CStu
35、dentSet studentSet;studentSet.Open();if(studentSet.IsBOF()/如果表为空则返回return;studentSet.Move(iSel-1);/移到要删除的记录studentSet.Delete();studentSet.Requery();AddGridItem(&studentSet);第89页/共95页OnButtonDeleteCourse()函数 if(strSelected = _T(课程表)CCourseSet courseSet;courseSet.Open();if(courseSet.IsBOF()/如果表为空则
36、返回return;courseSet.Move(iSel-1);courseSet.Delete();courseSet.Requery();AddGridItem(&courseSet); 第90页/共95页OnButtonModify()函数 void CMaintenanceDlg:OnButtonModify() int iSel;/记录行号CString strSelected;/记录选择的数据表CString edit2,edit3,edit4,edit5;m_edit2.GetWindowText(edit2);m_edit3.GetWindowText(edit3);m_edit4.GetWindowText(edit4);m_edit5.GetWindowText(edit5);if(!m_bEditable)AfxMessageBox(必须首先选择数据表);return; m_ComboList.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业管理小区能源管理系统协议
- 有趣的户外活动记事+活动细节描写5篇范文
- 在线课程教育培训协议
- 银行入行考试试题及答案
- 银行出纳考试试题及答案
- 六一剪发活动方案
- 六一墙纸活动方案
- 六一幼儿花展活动方案
- 六一操场活动方案
- 六一汉服童话活动方案
- 11ZJ311地下室防水图集
- 土地整治实施操作手册
- 深圳市引导基金管理办法
- 10以内连加练习题完整版51
- GB 30254-2024高压三相笼型异步电动机能效限定值及能效等级
- 机场建造行业投资机会与风险识别及应对策略报告
- 统编版语文一年级下册第四单元整体解读
- 重大事故隐患判定标准与相关事故案例培训课件
- 环境检测实验室分析人员绩效考核方案
- (正式版)CB∕T 4548-2024 船舶行业企业相关方安全管理要求
- CJT 166-2014 建设事业集成电路(IC)卡应用技术条件
评论
0/150
提交评论