版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
77/77湖南科技大学计算机科学与工程学院数据库课程设计报告二○○九级计三班学号:09050103XX姓名:贺双凤指导老师:刘毅志时间:2012.02.20—2012.03.021系统需求分析1.1系统功能分析职员培训系统需要实现的要紧功能包括:企业总体培训课程的设置和安排。同意职员依照自己的情况选择合适的课程和上课时刻。对选课结果进行统计报表。同意职员对最后选课结果的查询。培训考核成绩的输入和查询。职员培训效果的综合报表。职员个人信息的修改。图1、职员培训治理系统功能模块图1.2系统功能模块设计(划分)本系统涉及到职员和培训治理部门之间的交流,因此需要依照用户的不同分成两大功能模块。这两个模块的功能和使用的权限完全不同。本系统功能模块如图1所示。1.3与其它系统的关系图2、培训治理数据流程图职员培训系统能够为职员素养技能的评价提供可靠的依据,是职务评定的一个参考信息源。系统本身需要用到人事治理系统中的职员差不多信息和部门信息等辅助资料,这些数据能够通过数据库直接读取。1.4数据流程图职员培训治理系统的数据流程如图2所示。2数据库设计2.1数据库需求分析依照系统数据流程图,我们能够列出以下系统所需的数据项和数据结构:课程设置:编号、名称、简介、所用教材、上课地点、人数、上课时刻选课结果:记录编号、职员、课程、考核成绩、评价、考核日期。所需的外部数据支持:人员信息:职员号、密码、权限、姓名、部门、当前状态等。部门设置:部门编号、名称等。2.2数据库概念结构设计图3是本系统所需数据的E-R模型图。图3、培训治理E-R图2.3数据库逻辑结构设计依照E-R图和数据库需求分析,培训治理系统需要创建2个要紧的数据表:课程设置表和培训安排表。对应这两个表中的个不代码字段,又需要创建2个代码表:课程状态代码表和考核评价代码表。这4个数据表的结构如表1至表4所示。职员信息和部门信息作为外部数据支持能够使用人事治理系统中建立的数据表,如表5和表6所示。2.4数据库的建立2.4.1数据库的建立2.4.2初始数据的输入本系统中,初始数据包括课程状态代码和评价代码,如表7至表8所示。(以下各部分请设计者完成)。3各功能模块的设计与实现3.1功能讲明本治理系统要紧分为两大部分:培训治理应用程序和学员选课应用程序。培训治理应用程序要紧用于培训中心的治理人员对培训课程和培训情况进行维护。此应用程序要紧包括四项功能:课程设置、选课结果查询修改、成绩输入、培训成绩统计报表。另外,系统需要有登录窗口(用于权限认证)和导航窗口(用于连接各项功能)。学员选课应用程序包括个人信息修改、选课和成绩查询三项功能。(一)培训治理治理应用程序功能讲明(二)学员选课应用程序功能讲明3.2用户界面设计完成数据库创建和功能讲明以后,我们能够进行下一步工作,既设计用户界面。1、培训治理应用程序登录窗体的创建2、培训治理应用程序主窗体的创建3、课程设置窗体的创建4、选课结果查询窗体的创建5、学员名单报表窗体的创建6、考核评定结果窗体的创建7、培训统计窗体的创建8、培训成绩报表窗体的创建9、学员选课客户端界面的创建3.3各功能模块的实现1、培训治理应用程序数据模块的创建2、培训治理应用程序登录程序的实现3、课程设置模块的实现4、选课结果查询的实现5、学员名单报表的实现6、考核评定结果的实现7、培训统计的实现8、培训成绩报表的实现9、学员选课客户端应用程序的创建4系统实现 本实验由三个人共同完成,我负责“选择培训课程模块”和“课程设置模块”。阮柳春同学负责“登陆模块”、“用户信息修改模块”、和“培训成绩治理模块”。王相同学负责“考核成绩查询模块”和“选课结果治理模块” 4.1选课培训课程模块 4.1.1具体功能分析 1)能查询课程表 2)能选择课程 3)能删除选择的课程 4.1.2实现方法 通过两个ado控件与数据库进行连接,两个datagrid控件分不显示课程表和登陆用户已选择的课程。3个button按钮对应查询课程表、选择课程和删除课程。 4.1.2遇到的要紧问题及相关解决方法 1)因为在数据库中建立course表的时候用的是英文,故在查询的时候表显示的也是英文,这给用户带来了极大的不便,使系统的友好性降低,为了解决那个问题,我使用了sql重命名语句,对用户已选择的课程表,使用了语句:select课程号=training_plan.cid,成绩=score,考核评价=apprisement.descriptionfromtraining_plan,apprisementwheretraining_plan.personid='"+personid+"'andapprisement.appcode=training_plan.appcode;在course表中使用了语句:select课程号=cid,课程名=cname,老师编号=personid,课程简介=intro,所用教材=book,上课地点=classroom,课程上限人数=number,开课时刻=classtime,状态=cscode,考试时刻=exam_date;那个问题同样在选择查询字段的时候也出现了,combo控件备选查询字段要用到中文,而数据库中的字段名是英文,因此要进行中英文的转换。刚开始用switch语句,由于switch语句不支持csting型,改用if……else…语句。 2)选课函数的编码要考虑多种情况。第一,假如登录用户已选择这门课,则不能再选。第二,课程差不多开始或结束则不能选。第三,该课上限人数已到,则选课失败。 3)退选课程函数要考虑课程是否差不多开始或结束,假如差不多开始或结束,则不能退选。4.1.3本模块的部分界面截图4.2设置课程模块 4.2.1具体功能分析 1)能查询课程表 2)能删除某门课程 3)能更新某门课程 4)能添加某门课程 4.2.3实现方法 通过一个ado控件与数据库进行连接,一个datagrid控件显示课程表信息。10个edit控件对应课程表的10个字段。4个button按钮对应“查询”、“更新”、“删除”和“添加”。在测试的时候,老师给我提出了有用的建议,要我增加一个“清零”按钮,故在后来增加了一个“清零”按钮。 4.2.4遇到的要紧问题及相关解决方法 1)在写查询函数的时候,发觉这次与往常要实现的功能有所差异。往常差不多上对单个字段进行查询,专门容易编码。现在要对单个或多个字段进行查询,比如要查询同时满足上课地点为10,课程号为1,老师编号为5的单元组,如此实现起来就难度加大了。因为查询的字段具有不可预知性。为了解决那个问题,我引入了一个标记变量ok,成功解决了那个问题。值得一提的是当查询字段全部为空的时候,点击“查询”按钮,课程表应该显示全部的课程信息。不然的话,只能在初次进入该模块时,能看到全部课程信息。当完成某个操作的时候,就无法看到全部课程的信息了。在测试的时候,老师建议我对某些字段(如课程名)加入模糊查询功能,我觉得那个建议特不行,专门方便,实现起来也不是专门复杂,引入通配符*即可。 2)更新一定要通过课程编号,不然无法得到要更新的元组,假如没有输入课程编号,应该给出错误提示。课程表的状态字段,只能是0.,1,2三个数字中的一个,假如不是,要给出错误提示。(事实上那个地点通过combo控件实现起来更方便) 3)刚开始写删除函数的时候,只考虑到了不存在该课程时,不能删除,给出提示。后来发觉了一个专门隐蔽的问题,确实是假如有学生选了这门课,则不能随便删除。如一定要删除,必须先对培训打算表training_plan表进行处理。 4)添加函数要考虑几个问题。第一,检测该课程是否已在course表存在,如存在,则不能添加。第二,检测输入的任课老师是否存在,假如在person表中没有该任课老师,则给出错误提示。第三,状态字段的内容是否是0,1,2三个数字中的一个,如不是,给出错误提示。第四,要考虑哪些字段能够为空,哪些字段不能为空,不为空的地点,如输入为空,要给出相关提示。 4.2.3本模块的部分界面截图5.心得体会 第一,由因此第一次进行数据库开发,同时vc使用了MFC,且工作量不小。因此前两天我们遇到了许多的苦恼。基于此,我们并没有忙于进行项目开发,而是找寻相关书籍资料认真了解数据库详细开发流程,参照课程设计指导书的前两章,先做单模块的功能开发,实现“插入”,“删除”,“查询”,“添加”,同时读明白提供的代码。从那个地点,我明白了一个拿到一个项目,同时是陌生的,往常没有做过类似的,一定不要急于动手,事先要做好需求分析,逻辑设计,概念设计,否则只会事倍功半。第二,要学会团队合作。相比往常做的课程设计,那个项目不管从难度上,依旧工作量上都大专门多。故这时,团队合作就显得特不重要了。一个人是无法在短时刻内完成如此一个项目的。在分工的时候,一定要明确各自的任务,定义好相关的接口。第三,要对工程文件及时进行正确清晰有层次的备份,最好是每次修复的bug,都有相关的日志文件进行记录。由于没有大型项目开发的经验,我们尽管对工程文件进行了备份,然而没有层次,工程命名也没有按项目开发的进度命名,没有日志文件,加上分工合作,常常是那个bug在那个工程进行了修复,另一个bug在难道是在令一个版本进行修复。搞得专门乱。开发前期,我们在这点上吃了许多苦果。幸好及时意识到了错误,果断进行了改正。以后,进公司了,项目会大专门多,动则几十万行代码,从事开发的团队成员也专门多,这时候,对工程文件进行正确清晰有层次的备份,对bug修复进行记录就变得专门重要了。6.源代码 由于整个项目的源代码比较多,因此在此只附上我写的两个模块的源代码。 6.1选课模块源代码 //DailogForSelectCourse.cpp:implementationfile#include"stdafx.h"#include"职员培训治理系统.h"#include"DailogForSelectCourse.h"#include"DailogFor_Confirm_sel_course.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////DailogForSelectCoursedialogDailogForSelectCourse::DailogForSelectCourse(CString_peronid,CStringLink,CWnd*pParent
/*=NULL*/) :CDialog(DailogForSelectCourse::IDD,pParent){ personid=_peronid; LinkSql=Link; //{{AFX_DATA_INIT(DailogForSelectCourse) m_Edit1_FieldValue=_T(""); m_Edit2_cidValue=_T(""); m_Edit3_cidValue=_T(""); //}}AFX_DATA_INIT}//voidDailogForSelectCourse::OnInitDialog()//{// m_combo1_FieldName.AddString(cid);// m_combo1_FieldName.AddString(cname);// m_combo1_FieldName.AddString(personid);// m_combo1_FieldName.AddString(intro);// m_combo1_FieldName.AddString(book);// m_combo1_FieldName.AddString(classroom);// m_combo1_FieldName.AddString(number);// m_combo1_FieldName.AddString(classtime);// m_combo1_FieldName.AddString(cscode);//}voidDailogForSelectCourse::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(DailogForSelectCourse) DDX_Control(pDX,IDC_COMBO1,m_combo1_FieldName); DDX_Text(pDX,IDC_EDIT1,m_Edit1_FieldValue); DDX_Control(pDX,IDC_ADODC1,m_Adodc1); DDX_Text(pDX,IDC_EDIT2,m_Edit2_cidValue); DDX_Text(pDX,IDC_EDIT3,m_Edit3_cidValue); DDX_Control(pDX,IDC_ADODC2,m_Adodc2); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(DailogForSelectCourse,CDialog) //{{AFX_MSG_MAP(DailogForSelectCourse) ON_BN_CLICKED(IDC_OK,OnOk) ON_BN_CLICKED(IDC_BUTTON1,OnButton1) ON_CBN_KILLFOCUS(IDC_COMBO1,OnKillfocusCombo1) ON_BN_CLICKED(IDC_BUTTON2,OnButton2) ON_BN_CLICKED(IDC_BUTTON3,OnButtonDEL) //}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////DailogForSelectCoursemessagehandlersvoidDailogForSelectCourse::OnOk(){ //TODO:Addyourcontrolnotificationhandlercodehere }voidDailogForSelectCourse::OnButton1(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(TRUE); CStringtmpStr1,tmpStr2,strSQL="select课程号=cid,课程名=cname,老师编号
=personid,课程简介=intro,所用教材=book,上课地点=classroom,课程上限人数=number,开课时刻
=classtime,状态=cscode,考试时刻=exam_datefromcourseWHERE";m_combo1_FieldName.GetWindowText(tmpStr1); if(tmpStr1=="课程号") tmpStr2="cid"; else if(tmpStr1=="课程名") tmpStr2="cname"; else if(tmpStr1=="任课老师") tmpStr2="personid"; else if(tmpStr1=="课程简介") tmpStr2="intro"; else if(tmpStr1=="所用教材") tmpStr2="book"; else if(tmpStr1=="上课地点") tmpStr2="classroom"; else if(tmpStr1=="课程上限人数") tmpStr2="number"; else if(tmpStr1=="开课时刻") tmpStr2="classtime"; else if(tmpStr1=="状态") tmpStr2="cscode"; else if(tmpStr1=="考核日
期")
tmpStr2="exam_date"; else if
(tmpStr1=="") {
strSQL="select课程号=cid,课程名=cname,老师编号=personid,课程简介=intro,所用教材=book,上
课地点=classroom,课程上限人数=number,开课时刻=classtime,状态=cscode,考试时刻=exam_datefrom
course";
m_Adodc1.SetRecordSource(strSQL);
m_Adodc1.Refresh();
UpdateData(FALSE);
return; } else {
AfxMessageBox("查询字段有误,请确认");
return; }strSQL+=tmpStr2+"="; strSQL+="'"+m_Edit1_FieldValue+"'";m_Adodc1.SetRecordSource(strSQL); m_Adodc1.Refresh(); UpdateData(FALSE); }voidDailogForSelectCourse::OnKillfocusCombo1(){ //TODO:Addyourcontrolnotificationhandlercodehere// m_combo1_FieldName.AddString("cid");// m_combo1_FieldName.AddString("cname");// m_combo1_FieldName.AddString("intro");// m_combo1_FieldName.AddString("book");// m_combo1_FieldName.AddString("classroom");// m_combo1_FieldName.AddString("number");// m_combo1_FieldName.AddString("classtime");// m_combo1_FieldName.AddString("state");}voidDailogForSelectCourse::OnButton2(){ //TODO:Addyourcontrolnotificationhandlercodehere// DailogFor_Confirm_sel_course*dlg=newDailogFor_Confirm_sel_course
(personid,m_Edit2_cidValue);// dlg->DoModal(); if(::MessageBox(NULL,"确定选这门课吗?","提示",MB_OKCANCEL)==IDOK){ // AfxMessageBox("MBOK"); UpdateData(TRUE); _ConnectionPtrm_pConnection; ::CoInitialize(NULL); //在ADO操作中建议语句中要常用try…catch()来捕获错误信息 //因为它有时会经常出现一些想不到的错误 try { m_pConnection.CreateInstance("ADODB.Connection"); _bstr_t strConn=LinkSql.AllocSysString(); m_pConnection->Open(strConn,"","",adModeUnknown); //if(m_pConnection->State==adStateOpen)MessageBox("成功连接数据
库"); } catch(_com_errore) { ::CoUninitialize(); AfxMessageBox(e.ErrorMessage()); return; } intcnt=0,sum; _RecordsetPtrm_pRecordset; CStringstr; str="SELECT*FROMtraining_plan"; _variant_tpcid,ppersonid,authority,cscode; m_pRecordset.CreateInstance("ADODB.Recordset"); intOK=0; m_pRecordset=m_pConnection->Execute(str.AllocSysString(),NULL,adCmdText); UpdateData(TRUE); CStringpa; while(!m_pRecordset->adoEOF) { pcid=m_pRecordset->GetCollect("cid"); ppersonid=m_pRecordset->GetCollect("personid"); CStringtmp1=(LPCSTR)(_bstr_t)pcid; CStringtmp2=(LPCSTR)(_bstr_t)ppersonid; if(strcmp(m_Edit2_cidValue,tmp1)==0&&strcmp(tmp2,personid)==0){ OK=1; break; } // AfxMessageBox(m_Edit2_cidValue+""+tmp1+""+tmp2+""+personid); if(strcmp(m_Edit2_cidValue,tmp1)==0)cnt++; m_pRecordset->MoveNext(); } if(OK){ AfxMessageBox("已选修了该课程!"); m_pRecordset->Close(); m_pConnection->Close(); return; } CString_cid; str="SELECT*FROMcourse"; m_pRecordset=m_pConnection->Execute(str.AllocSysString(),NULL,adCmdText); UpdateData(TRUE); OK=0; while(!m_pRecordset->adoEOF) { _cid=str=(LPCSTR)(_bstr_t)m_pRecordset->GetCollect("cid"); if(m_Edit2_cidValue==_cid) { str=(LPCSTR)(_bstr_t)m_pRecordset->GetCollect("cscode"); break; } m_pRecordset->MoveNext(); }// AfxMessageBox(pa); if(str!="0"){ AfxMessageBox("课程差不多开始或结束,不能选课"); m_pRecordset->Close(); m_pConnection->Close(); return; } str="SELECT*FROMcourse"; m_pRecordset=m_pConnection->Execute(str.AllocSysString(),NULL,adCmdText); UpdateData(TRUE); OK=0; while(!m_pRecordset->adoEOF) { CStringtmp2=(LPCSTR)(_bstr_t)m_pRecordset->GetCollect("cid"); CStringtmp1=(LPCSTR)(_bstr_t)pcid; if(strcmp(tmp1,tmp2)==0) { pa=(LPCSTR)(_bstr_t)m_pRecordset->GetCollect("number"); OK=1; break; } m_pRecordset->MoveNext(); } sum=atoi(pa); if(cnt>=sum){ AfxMessageBox("该课已满人!"); m_pRecordset->Close(); m_pConnection->Close(); return; } _variant_tra; _bstr_tstrAdd="INSERTINTOtraining_planVALUES('"; strAdd=strAdd+personid+"','"; strAdd=strAdd+m_Edit2_cidValue+"',"; strAdd=strAdd+"'-1',"+"'0')"; //AfxMessageBox(strAdd); m_pConnection->Execute(strAdd,&ra,adCmdText); // m_Adodc2.SetRecordSource("SELECT*FROMtraining_plan"); m_Adodc2.Refresh(); UpdateData(FALSE); m_pRecordset->Close(); m_pConnection->Close(); AfxMessageBox("成功选课"); }}voidDailogForSelectCourse::OnButtonDEL(){ //TODO:Addyourcontrolnotificationhandlercodehere CStringtmp=personid; if(::MessageBox(NULL,"确定要删除这门课吗?","提示",MB_OKCANCEL)==IDOK){ // AfxMessageBox("MBOK"); UpdateData(TRUE); _ConnectionPtrm_pConnection; _RecordsetPtrm_pRecordset; ::CoInitialize(NULL); //在ADO操作中建议语句中要常用try…catch()来捕获错误信息 //因为它有时会经常出现一些想不到的错误 try { m_pConnection.CreateInstance("ADODB.Connection"); _bstr_t strConn=LinkSql.AllocSysString(); m_pConnection->Open(strConn,"","",adModeUnknown); //if(m_pConnection->State==adStateOpen)MessageBox("成功连接数据
库"); } catch(_com_errore) { ::CoUninitialize(); AfxMessageBox(e.ErrorMessage()); return; } CStringstr,_cid; intok=0; _variant_tcscode; str="SELECT*FROMcourse"; m_pRecordset=m_pConnection->Execute(str.AllocSysString(),NULL,adCmdText); UpdateData(TRUE); while(!m_pRecordset->adoEOF) { _cid=(LPCSTR)(_bstr_t)m_pRecordset->GetCollect("cid"); if(m_Edit3_cidValue==_cid) { str=(LPCSTR)(_bstr_t)m_pRecordset->GetCollect("cscode"); break; } m_pRecordset->MoveNext(); } // AfxMessageBox(pa); if(str!="0"){ AfxMessageBox("课程差不多开始或结束,不能删除!"); m_pRecordset->Close(); m_pConnection->Close(); return; } //以下删除数据 _variant_tra; _bstr_tstrAdd="DELETEFROMTraining_planwherepersonid="+tmp; strAdd=strAdd+"ANDcid="+m_Edit3_cidValue; // AfxMessageBox(strAdd); m_pConnection->Execute(strAdd,&ra,adCmdText); m_pConnection->Close(); m_Adodc2.Refresh(); UpdateData(FALSE); AfxMessageBox("成功删除"); }}BOOLDailogForSelectCourse::OnInitDialog(){ CDialog::OnInitDialog(); CStringstrAdd="select课程号=training_plan.cid,成绩=score,考核评价
=apprisement.descriptionfromtraining_plan,apprisementwhere
training_plan.personid='"+personid+"'andapprisement.appcode=training_plan.appcode;"; m_Adodc2.SetRecordSource(strAdd); m_Adodc2.Refresh(); m_combo1_FieldName.SetWindowText("请选择"); m_combo1_FieldName.AddString("课程号"); m_combo1_FieldName.AddString("课程名"); m_combo1_FieldName.AddString("任课老师"); m_combo1_FieldName.AddString("课程简介"); m_combo1_FieldName.AddString("所用教材"); m_combo1_FieldName.AddString("上课地点"); m_combo1_FieldName.AddString("课程上限人数"); m_combo1_FieldName.AddString("开课时刻"); m_combo1_FieldName.AddString("状态"); m_combo1_FieldName.AddString("考核日期"); returnTRUE;} 6.2设置课程模块//DailogForMGcourse.cpp:implementationfile//#include"stdafx.h"#include"职员培训治理系统.h"#include"DailogForMGcourse.h"#include"Columns.h"#include"Column.h"#include"DailogForMGResultC.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////DailogForMGcoursedialogDailogForMGcourse::DailogForMGcourse(CStringName,CStringLink,CWnd*pParent/*=NULL*/) :CDialog(DailogForMGcourse::IDD,pParent){ userName=Name; LinkSql=Link; //{{AFX_DATA_INIT(DailogForMGcourse) m_Edit1_cid=_T(""); m_Edit2_cname=_T(""); m_Edit3_personid=_T(""); m_Edit5_book=_T(""); m_Edit6_classroom=_T(""); m_Edit8_classtime=_T(""); m_Edit4_intro=_T(""); m_Edit7_number=_T(""); m_Edit9_cscode=_T(""); m_Edit10_exam_date=_T(""); //}}AFX_DATA_INIT}voidDailogForMGcourse::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(DailogForMGcourse) DDX_Control(pDX,IDC_ADODC1,m_adodc1); DDX_Text(pDX,IDC_EDIT1,m_Edit1_cid); DDX_Text(pDX,IDC_EDIT2,m_Edit2_cname); DDX_Text(pDX,IDC_EDIT3,m_Edit3_personid); DDX_Text(pDX,IDC_EDIT5,m_Edit5_book); DDX_Text(pDX,IDC_EDIT6,m_Edit6_classroom); DDX_Text(pDX,IDC_EDIT8,m_Edit8_classtime); DDX_Text(pDX,IDC_EDIT4,m_Edit4_intro); DDX_Text(pDX,IDC_EDIT7,m_Edit7_number); DDX_Text(pDX,IDC_EDIT9,m_Edit9_cscode); DDX_Text(pDX,IDC_EDIT10,m_Edit10_exam_date); DDX_Control(pDX,IDC_DATAGRID1,m_datagrid1); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(DailogForMGcourse,CDialog) //{{AFX_MSG_MAP(DailogForMGcourse) ON_BN_CLICKED(IDC_BUTTON1,OnButton1) ON_BN_CLICKED(IDC_BUTTON4,OnInsert) ON_BN_CLICKED(IDC_BUTTON3,OnDEL) ON_BN_CLICKED(IDC_BUTTON2,OnUPDATE) ON_BN_CLICKED(IDC_BUTTON5,OnClear) //}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////DailogForMGcoursemessagehandlersvoidDailogForMGcourse::OnButton1(){ //TODO:Addyourcontrolnotificationhandlercodehere intok=0; UpdateData(TRUE); CStringtmpStr,strSQL="SELECT课程号=cid,课程名=cname,老师编号=personid,课程简介
=intro,所用教材=book,上课地点=classroom,课程上限人数=number,开课时刻=classtime,状态=cscode,
考试时刻=exam_dateFROMcourseWHERE"; if(m_Edit1_cid!="") { strSQL+="cid='"+m_Edit1_cid+"'"; ok=1; } if(m_Edit2_cname!="") if(ok==1) strSQL+="andcname='"+m_Edit2_cname+"'"; else { strSQL+="cname='"+m_Edit2_cname+"'"; ok=1; } if(m_Edit3_personid!="") if(ok==1) strSQL+="andpersonid='"+m_Edit3_personid+"'"; else { strSQL+="personid='"+m_Edit3_personid+"'"; ok=1; } if(m_Edit4_intro!="") if(ok==1) strSQL+="andintro='"+m_Edit4_intro+"'"; else { strSQL+="intro='"+m_Edit4_intro+"'"; ok=1; } if(m_Edit5_book!="") if(ok==1) strSQL+="andbook='"+m_Edit5_book+"'"; else { strSQL+="book='"+m_Edit5_book+"'"; ok=1; } if(m_Edit6_classroom!="") if(ok==1) strSQL+="andclassroom='"+m_Edit6_classroom+"'"; else { strSQL+="classroom='"+m_Edit6_classroom+"'"; ok=1; } if(m_Edit7_number!="") if(ok==1) strSQL+="andnumber='"+m_Edit7_number+"'"; else { strSQL+="number='"+m_Edit7_number+"'"; ok=1; } if(m_Edit8_classtime!="") if(ok==1) strSQL+="andclasstime='"+m_Edit8_classtime+"'"; else { strSQL+="classtime='"+m_Edit8_classtime+"'"; ok=1; } if(m_Edit9_cscode!="") if(ok==1) strSQL+="andcscode='"+m_Edit9_cscode+"'"; else { strSQL+="cscode='"+m_Edit9_cscode+"'"; ok=1; } if(m_Edit10_exam_date!="") if(ok==1) strSQL+="andexam_date='"+m_Edit10_exam_date+"'"; else { strSQL+="exam_date='"+m_Edit10_exam_date+"'"; ok=1; } if(!ok) strSQL="select课程号=cid,课程名=cname,老师编号=personid,课程简介=intro,所
用教材=book,上课地点=classroom,课程上限人数=number,开课时刻=classtime,状态=cscode,考试时刻
=exam_datefromcourse"; //AfxMessageBox(strSQL);m_adodc1.SetRecordSource(strSQL); m_adodc1.Refresh(); UpdateData(FALSE); }voidDailogForMGcourse::OnInsert(){ //TODO:Addyourcontrolnotificationhandlercodehere if(::MessageBox(NULL,"确定插入这门课吗?","提示",MB_OKCANCEL)==IDOK){ // AfxMessageBox("MBOK"); UpdateData(TRUE); _ConnectionPtrm_pConnection; ::CoInitialize(NULL); //在ADO操作中建议语句中要常用try…catch()来捕获错误信息 //因为它有时会经常出现一些想不到的错误 try { m_pConnection.CreateInstance("ADODB.Connection"); CString strConn=LinkSql; m_pConnection->Open(strConn.AllocSysString(),"","",adModeUnknown); //if(m_pConnection->State==adStateOpen)MessageBox("成功连接数据
库"); } catch(_com_errore) { ::CoUninitialize(); AfxMessageBox(e.ErrorMessage()); return; } //检测该课程是否存在 _RecordsetPtrm_pRecordset; CStringstr; str="SELECT*FROMcourse"; _variant_tpcid; m_pRecordset.CreateInstance("ADODB.Recordset"); intOK=0; m_pRecordset=m_pConnection->Execute(str.AllocSysString(),NULL,adCmdText); UpdateData(TRUE); CStringpa; while(!m_pRecordset->adoEOF) { pcid=m_pRecordset->GetCollect("cid"); CStringtmp1=(LPCSTR)(_bstr_t)pcid; if(strcmp(m_Edit1_cid,tmp1)==0){ OK=1; break; } m_pRecordset->MoveNext(); } if(OK){ AfxMessageBox("已有该课程"); m_pRecordset->Close(); m_pConnection->Close(); return; } //检测该课程任课老师是否存在 str="SELECT*FROMperson"; m_pRecordset.CreateInstance("ADODB.Recordset"); OK=0; _variant_t_personid; m_pRecordset=m_pConnection->Execute(str.AllocSysString(),NULL,adCmdText); UpdateData(TRUE); while(!m_pRecordset->adoEOF) { _personid=m_pRecordset->GetCollect("personid"); CStringtmp1=(LPCSTR)(_bstr_t)_personid; if(strcmp(m_Edit3_personid,tmp1)==0){ OK=1; break; } m_pRecordset->MoveNext(); } if(!OK){ AfxMessageBox("不存在该任课老师,请重新确认!"); m_pRecordset->Close(); m_pConnection->Close(); return; } if(m_Edit9_cscode!="0"&&m_Edit9_cscode!="1"&&m_Edit9_cscode!="2") { AfxMessageBox("状态输入有误,请确认!"); return; } //以下插入数据 _variant_tra; _bstr_tstrAdd="INSERTINTOcourseVALUES('"; strAdd=strAdd+m_Edit1_cid+"','"; strAdd=strAdd+m_Edit2_cname+"','"; strAdd=strAdd+m_Edit3_personid+"','"; strAdd=strAdd+m_Edit4_intro+"','"; strAdd=strAdd+m_Edit5_book+"','"; strAdd=strAdd+m_Edit6_classroom+"','";//事实上还要考虑哪些数据为能够为空,
不能为空的进行提示 strAdd=strAdd+m_Edit7_number+"','"; strAdd=strAdd+m_Edit8_classtime+"','"; strAdd=strAdd+m_Edit9_cscode+"','"; strAdd=strAdd+m_Edit10_exam_date+"')"; //AfxMessageBox(strAdd); m_pConnection->Execute(strAdd,&ra,adCmdText); m_adodc1.Refresh(); UpdateData(FALSE); m_pRecordset->Close(); m_pConnection->Close(); AfxMessageBox("成功插入课程"); }}voidDailogForMGcourse::OnDEL(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(TRUE); if(m_Edit1_cid=="") AfxMessageBox("请输入要删除的课程号"); else if(::MessageBox(NULL,"确定要删除这门课吗?","提示",MB_OKCANCEL)==IDOK){ // AfxMessageBox("MBOK"); _ConnectionPtrm_pConnection; _RecordsetPtrm_pRecordset; ::CoInitialize(NULL); //在ADO操作中建议语句中要常用try…catch()来捕获错误信息 //因为它有时会经常出现一些想不到的错误 try { m_pConnection.CreateInstance("ADODB.Connection"); CString strConn=LinkSql; m_pConnection->Open(strConn.AllocSysString
(),"","",adModeUnknown); //if(m_pConnection->State==adStateOpen)MessageBox("成功
连接数据库"); } catch(_com_errore) { ::CoUninitialize(); AfxMessageBox(e.ErrorMessage()); return; } CStringstr; _variant_tpcid; intOK=0; str="SELECT*FROMcourse"; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset=m_pConnection->Execute(str.AllocSysString
(),NULL,adCmdText); UpdateData(TRUE); CStringpa; while(!m_pRecordset->adoEOF) { pcid=m_pRecordset->GetCollect("cid"); CStringtmp1=(LPCSTR)(_bstr_t)pcid; if(strcmp(m_Edit1_cid,tmp1)==0){ OK=1; break; } m_pRecordset->MoveNext(); } if(!OK){ AfxMessageBox("不存在该课程"); m_pRecordset->Close(); m_pConnection->Close(); return; } //推断该课是否已有学生选择 str="SELECT*FROMtraining_plan"; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset=m_pConnection->Execute(str.AllocSysString
(),NULL,adCmdText); UpdateData(TRUE); OK=0; while(!m_pRecordset->adoEOF) { pcid=m_pRecordset->GetCollect("cid"); CStringtmp1=(LPCSTR)(_bstr_t)pcid; if(strcmp(m_Edit1_cid,tmp1)==0){ OK=1; break; } m_pRecordset->MoveNext(); } if(OK){ // AfxMessageBox("该课程已有学生选择,如要删除该课程,请先对选
课结果表进行修改"); if(::MessageBox(NULL,"该课程已有学生选择,如要删除该课程,
是否到选课治理进行删除?","提示",MB_OKCANCEL)==IDOK){ this->ShowWindow(SW_HIDE); DailogForMGResultC*dlg=newDailogForMGResultC
(userName,LinkSql); dlg->DoModal(); this->ShowWindow(SW_SHOW); } m_pRecordset->Close(); m_pConnection->Close(); return; } //以下删除数据 _variant_tra; _bstr_tstrAdd="DELETEFROMcoursewherecid="+m_Edit1_cid; AfxMessageBox(strAdd); m_pConnection->Execute(strAdd,&ra,adCmdText); m_pConnection->Close(); m_adodc1.SetRecordSource("SELECT*FROMcourse"); m_adodc1.Refresh(); UpdateData(FALSE); AfxMessageBox("成功删除"); }}voidDailogForMGcourse::OnUPDATE(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(TRUE); _ConnectionPtrm_pConnection;::CoInitialize(NULL); try {m_pConnection.CreateInstance("ADODB.Connection"); _bstr_tstrConn=LinkSql.AllocSysString(); m_pConnection->Open(strConn,"","",adModeUnknown); //if(m_pConnection->State==adStateOpen)MessageBox("成功连接数据库"); } catch(_com_errore) { ::CoUninitialize();AfxMessageBox(e.ErrorMessage()); return; } //以下更新数据 _variant_tra; intok=0; CStringstrAdd="UPDATEcourseSET"; if(m_Edit9_cscode!="0"&&m_Edit9_cscode!="1"&&m_Edit9_cscode!="2") { AfxMessageBox("状态输入有误,请确认!"); return; } if(m_Edit1_cid=="") { AfxMessageBox("请输入课程号"); return; } else { if(m_Edit2_cname!="") { strAdd+="cname='"+m_Edit2_cname+"'"; ok=1; } if(m_Edit3_personid!="") if(ok) strAdd+=",personid='"+m_Edit3_personid+"'"; else { strAdd+="personid='"+m_Edit3_personid+"'"; ok=1; } if(m_Edit4_intro!="") if(ok) strAdd+=",intro='"+m_Edit4_intro+"'"; else { strAdd+="intro='"+m_Edit4_intro+"'"; ok=1; } if(m_Edit5_book!="") if(ok) strAdd+=",book='"+m_Edit5_book+"'"; else { strAdd+="book='"+m_Edit5_book+"'"; ok=1; } if(m_Edit6_classroom!="") if(ok) strAdd+=",classroom='"+m_Edit6_classroom+"'"; else { strAdd+="classroom='"+m_Edit6_classroom+"'"; ok=1; } if(m_Edit7_number!="") if(ok) strAdd+=",number='"+m_Edit7_number+"'"; else { strAdd+="number='"+m_Edit7_number+"'"; ok=1; } if(m_Edit8_classtime!="") if(ok) strAdd+=",classtime='"+m_Edit8_classtime+"'"; else { strAdd+="classtime='"+m_Edit8_classtime+"'"; ok=1; } if(m_Edit9_cscode!="") if(ok) strAdd+=",cscode='"+m_Edit9_cscode+"'"; else { strAdd+="cscode='"+m_Edit9_cscode+"'"; ok=1; } if(m_Edit10_exam_date!="") if(ok) strAdd+=",exam_date='"+m_Edit10_exam_date+"'"; else { strAdd+="exam_date='"+m_Edit10_exam_date+"'"; ok=1; } } if(ok==0) { AfxMessageBox("没有输入要更新的内容"); return; } strAdd+="wherecid='"+m_Edit1_cid+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年广灵县教师招聘考试备考题库及答案解析
- 小型挡土墙结构设计
- 医疗康复护理专科建设自评报告
- 手工创客项目商业计划书
- 四年级上册道德与法治课堂观察报告
- 物业设备设施管理手册
- 预应力管桩桩基检测方案
- 雨污水管道沟槽雨季施工专项方案
- 雨污水管道沟槽工程施工环保专项方案
- 特种设备企业安全生产管理制度
- 2025~2026学年七年级上学期第一次月考数学试卷【附解析】
- 2026年中国医美行业发展白皮书
- 【2026新版一年级上册数学】第一单元一课一练【人教版】
- 2026年考研管综199真题(试卷+答案)
- 2026年建党105周年党史知识竞赛题库及答案
- 2026年10月自考动漫艺术概论试题及标准答案
- 颈椎病康复指导
- 亲爱的你啊混声四部合唱简谱
- 中核集团校招面试题及答案(2026版)
- 海康威视iVMS-8700智能建筑综合管理平台 软件技术白皮书
- 首届全国行业职业技能竞赛(电力交易员)大赛考试题(附答案)
评论
0/150
提交评论