版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 數(shù)據(jù)庫課程設(shè)計(jì)報(bào)告</b></p><p><b> 二○○九級計(jì)三班</b></p><p><b> 學(xué) 號: </b></p><p><b> 姓 名: </b></p><p><b>
2、 指導(dǎo)老師: </b></p><p> 時(shí) 間:2012.02.20—2012.03.02</p><p><b> 1 系統(tǒng)需求分析</b></p><p><b> 1.1系統(tǒng)功能分析</b></p><p> 員工培訓(xùn)系統(tǒng)需要實(shí)現(xiàn)的主要功能包括:</p>
3、<p> 企業(yè)總體培訓(xùn)課程的設(shè)置和安排。</p><p> 允許員工根據(jù)自己的情況選擇合適的課程和上課時(shí)間。</p><p> 對選課結(jié)果進(jìn)行統(tǒng)計(jì)報(bào)表。允許員工對最后選課結(jié)果的查詢。</p><p> 培訓(xùn)考核成績的輸入和查詢。</p><p> 員工培訓(xùn)效果的綜合報(bào)表。</p><p> 員
4、工個(gè)人信息的修改。</p><p> 1.2系統(tǒng)功能模塊設(shè)計(jì)(劃分)</p><p> 本系統(tǒng)涉及到員工和培訓(xùn)管理部門之間的交流,因此需要根據(jù)用戶的不同分成兩大功能模塊。這兩個(gè)模塊的功能和使用的權(quán)限完全不同。本系統(tǒng)功能模塊如圖1所示。</p><p> 1.3與其它系統(tǒng)的關(guān)系</p><p> 員工培訓(xùn)系統(tǒng)可以為員工素質(zhì)技能的評價(jià)提供
5、可靠的依據(jù),是職務(wù)評定的一個(gè)參考信息源。系統(tǒng)本身需要用到人事管理系統(tǒng)中的員工基本信息和部門信息等輔助資料,這些數(shù)據(jù)可以通過數(shù)據(jù)庫直接讀取。</p><p><b> 1.4數(shù)據(jù)流程圖</b></p><p> 員工培訓(xùn)管理系統(tǒng)的數(shù)據(jù)流程如圖2所示。</p><p><b> 2 數(shù)據(jù)庫設(shè)計(jì)</b></p>
6、<p> 2.1數(shù)據(jù)庫需求分析</p><p> 根據(jù)系統(tǒng)數(shù)據(jù)流程圖,我們可以列出以下系統(tǒng)所需的數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu):</p><p> 課程設(shè)置:編號、名稱、簡介、所用教材、上課地點(diǎn)、人數(shù)、上課時(shí)間</p><p> 選課結(jié)果:記錄編號、員工、課程、考核成績、評價(jià)、考核日期。</p><p> 所需的外部數(shù)據(jù)支持:<
7、;/p><p> 人員信息:員工號、密碼、權(quán)限、姓名、部門、當(dāng)前狀態(tài)等。</p><p> 部門設(shè)置:部門編號、名稱等。</p><p> 2.2數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計(jì)</p><p> 圖3是本系統(tǒng)所需數(shù)據(jù)的E-R模型圖。</p><p> 2.3數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì)</p><p> 根據(jù)
8、E-R圖和數(shù)據(jù)庫需求分析,培訓(xùn)管理系統(tǒng)需要?jiǎng)?chuàng)建2個(gè)主要的數(shù)據(jù)表:課程設(shè)置表和培訓(xùn)安排表。對應(yīng)這兩個(gè)表中的個(gè)別代碼字段,又需要?jiǎng)?chuàng)建2個(gè)代碼表:課程狀態(tài)代碼表和考核評價(jià)代碼表。這4個(gè)數(shù)據(jù)表的結(jié)構(gòu)如表1至表4所示。員工信息和部門信息作為外部數(shù)據(jù)支持可以使用人事管理系統(tǒng)中建立的數(shù)據(jù)表,如表5和表6所示。</p><p> 表2 training_plan培訓(xùn)安排表</p><p> 表3
9、course_state課程狀態(tài)代碼表</p><p> 表4 apprisement考核評價(jià)代碼表</p><p> 表5 person員工個(gè)人信息表</p><p> 表6 department部門信息表</p><p><b> 2.4數(shù)據(jù)庫的建立</b></p><p>
10、2.4.1數(shù)據(jù)庫的建立</p><p> 2.4.2初始數(shù)據(jù)的輸入</p><p> 本系統(tǒng)中,初始數(shù)據(jù)包括課程狀態(tài)代碼和評價(jià)代碼,如表7至表8所示。</p><p> 表7 課程狀態(tài)代碼</p><p> 表8 考核評價(jià)代碼</p><p> ?。ㄒ韵赂鞑糠终?jiān)O(shè)計(jì)者完成)。</p><
11、p> 3 各功能模塊的設(shè)計(jì)與實(shí)現(xiàn)</p><p><b> 3.1功能說明</b></p><p> 本管理系統(tǒng)主要分為兩大部分:培訓(xùn)管理應(yīng)用程序和學(xué)員選課應(yīng)用程序。培訓(xùn)管理應(yīng)用程序主要用于培訓(xùn)中心的管理人員對培訓(xùn)課程和培訓(xùn)情況進(jìn)行維護(hù)。此應(yīng)用程序主要包括四項(xiàng)功能:課程設(shè)置、選課結(jié)果查詢修改、成績輸入、培訓(xùn)成績統(tǒng)計(jì)報(bào)表。另外,系統(tǒng)需要有登錄窗口(用于權(quán)限認(rèn)
12、證)和導(dǎo)航窗口(用于連接各項(xiàng)功能)。學(xué)員選課應(yīng)用程序包括個(gè)人信息修改、選課和成績查詢?nèi)?xiàng)功能。</p><p> (一)培訓(xùn)管理管理應(yīng)用程序功能說明</p><p> ?。ǘW(xué)員選課應(yīng)用程序功能說明</p><p><b> 3.2用戶界面設(shè)計(jì)</b></p><p> 完成數(shù)據(jù)庫創(chuàng)建和功能說明以后,我們可以進(jìn)行
13、下一步工作,既設(shè)計(jì)用戶界面。</p><p> 1、培訓(xùn)管理應(yīng)用程序登錄窗體的創(chuàng)建</p><p> 2、培訓(xùn)管理應(yīng)用程序主窗體的創(chuàng)建</p><p> 3、課程設(shè)置窗體的創(chuàng)建</p><p> 4、選課結(jié)果查詢窗體的創(chuàng)建</p><p> 5、學(xué)員名單報(bào)表窗體的創(chuàng)建</p><p>
14、 6、考核評定結(jié)果窗體的創(chuàng)建</p><p> 7、培訓(xùn)統(tǒng)計(jì)窗體的創(chuàng)建</p><p> 8、培訓(xùn)成績報(bào)表窗體的創(chuàng)建</p><p> 9、學(xué)員選課客戶端界面的創(chuàng)建</p><p> 3.3各功能模塊的實(shí)現(xiàn)</p><p> 1、培訓(xùn)管理應(yīng)用程序數(shù)據(jù)模塊的創(chuàng)建</p><p> 2
15、、培訓(xùn)管理應(yīng)用程序登錄程序的實(shí)現(xiàn)</p><p> 3、課程設(shè)置模塊的實(shí)現(xiàn)</p><p> 4、選課結(jié)果查詢的實(shí)現(xiàn)</p><p> 5、學(xué)員名單報(bào)表的實(shí)現(xiàn)</p><p> 6、考核評定結(jié)果的實(shí)現(xiàn)</p><p><b> 7、培訓(xùn)統(tǒng)計(jì)的實(shí)現(xiàn)</b></p><p
16、> 8、培訓(xùn)成績報(bào)表的實(shí)現(xiàn)</p><p> 9、學(xué)員選課客戶端應(yīng)用程序的創(chuàng)建</p><p><b> 4 系統(tǒng)實(shí)現(xiàn)</b></p><p> 4.1選課培訓(xùn)課程模塊</p><p> 4.1.1具體功能分析</p><p><b> 1)能查詢課程表</b&g
17、t;</p><p><b> 2)能選擇課程</b></p><p> 3)能刪除選擇的課程</p><p><b> 4.1.2實(shí)現(xiàn)方法</b></p><p> 通過兩個(gè)ado控件與數(shù)據(jù)庫進(jìn)行連接,兩個(gè)datagrid控件分別顯示課程表和登陸用戶已選擇的課程。3個(gè)button按鈕對應(yīng)查
18、詢課程表、選擇課程和刪除課程。</p><p> 4.1.2遇到的主要問題及相關(guān)解決方法</p><p> 1)因?yàn)樵跀?shù)據(jù)庫中建立course表的時(shí)候用的是英文,故在查詢的時(shí)候表顯示的也是英文,這給用戶帶來了極大的不便,使系統(tǒng)的友好性降低,為了解決這個(gè)問題,我使用了sql重命名語句,對用戶已選擇的課程表,使用了語句:select 課程號=training_plan.cid,成績=sco
19、re,考核評價(jià)=apprisement.description from training_plan,apprisement where training_plan.personid='"+personid+"'and apprisement.appcode=training_plan.appcode;在course表中使用了語句:select 課程號=cid,課程名=cname,老師編號=perso
20、nid,課程簡介=intro,所用教材=book,上課地點(diǎn)=classroom,課程上限人數(shù)=number,開課時(shí)間=classtime,狀態(tài)=cscode,考試時(shí)間=exam_date;這個(gè)問題同樣在選擇查詢字段的時(shí)候也出現(xiàn)了,combo控件備選查詢字段要用到中文,而數(shù)據(jù)庫中的字段名是英文,所以要進(jìn)行中英文的轉(zhuǎn)換</p><p> 2)選課函數(shù)的編碼要考慮多種情況。第一,如果登錄用戶已選擇這門課,則不能再選。
21、第二,課程已經(jīng)開始或結(jié)束則不能選。第三,該課上限人數(shù)已到,則選課失敗。</p><p> 3)退選課程函數(shù)要考慮課程是否已經(jīng)開始或結(jié)束,如果已經(jīng)開始或結(jié)束,則不能退選。</p><p> 4.1.3本模塊的部分界面截圖</p><p><b> 4.2設(shè)置課程模塊</b></p><p> 4.2.1具體功能分析
22、</p><p><b> 1)能查詢課程表</b></p><p><b> 2)能刪除某門課程</b></p><p><b> 3)能更新某門課程</b></p><p><b> 4)能添加某門課程</b></p><p
23、><b> 4.2.3實(shí)現(xiàn)方法</b></p><p> 通過一個(gè)ado控件與數(shù)據(jù)庫進(jìn)行連接,一個(gè)datagrid控件顯示課程表信息。10個(gè)edit控件對應(yīng)課程表的10個(gè)字段。4個(gè)button按鈕對應(yīng)“查詢”、“更新”、“刪除”和“添加”。在測試的時(shí)候,老師給我提出了有用的建議,要我增加一個(gè)“清零”按鈕,故在后來增加了一個(gè)“清零”按鈕。</p><p>
24、4.2.4遇到的主要問題及相關(guān)解決方法</p><p> 1)在寫查詢函數(shù)的時(shí)候,發(fā)現(xiàn)這次與以前要實(shí)現(xiàn)的功能有所差異。以前都是對單個(gè)字段進(jìn)行查詢,很容易編碼。現(xiàn)在要對單個(gè)或多個(gè)字段進(jìn)行查詢,比如要查詢同時(shí)滿足上課地點(diǎn)為10,課程號為1,老師編號為5的單元組,這樣實(shí)現(xiàn)起來就難度加大了。因?yàn)椴樵兊淖侄尉哂胁豢深A(yù)知性。為了解決這個(gè)問題,我引入了一個(gè)標(biāo)記變量ok,成功解決了這個(gè)問題。值得一提的是當(dāng)查詢字段全部為空的時(shí)候
25、,點(diǎn)擊“查詢”按鈕,課程表應(yīng)該顯示全部的課程信息。不然的話,只能在初次進(jìn)入該模塊時(shí),能看到全部課程信息。當(dāng)完成某個(gè)操作的時(shí)候,就無法看到全部課程的信息了。在測試的時(shí)候,老師建議我對某些字段(如課程名)加入模糊查詢功能,我覺得這個(gè)建議非常好,很方便,實(shí)現(xiàn)起來也不是很復(fù)雜,引入通配符*即可。</p><p> 2)更新一定要通過課程編號,不然無法得到要更新的元組,如果沒有輸入課程編號,應(yīng)該給出錯(cuò)誤提示。課程表的狀態(tài)
26、字段,只能是0.,1,2三個(gè)數(shù)字中的一個(gè),如果不是,要給出錯(cuò)誤提示。(其實(shí)這里通過combo控件實(shí)現(xiàn)起來更方便)</p><p> 3)剛開始寫刪除函數(shù)的時(shí)候,只考慮到了不存在該課程時(shí),不能刪除,給出提示。后來發(fā)現(xiàn)了一個(gè)很隱蔽的問題,就是如果有學(xué)生選了這門課,則不能隨便刪除。如一定要?jiǎng)h除,必須先對培訓(xùn)計(jì)劃表training_plan表進(jìn)行處理。</p><p> 4)添加函數(shù)要考慮幾個(gè)
27、問題。第一,檢測該課程是否已在course表存在,如存在,則不能添加。第二,檢測輸入的任課老師是否存在,如果在person表中沒有該任課老師,則給出錯(cuò)誤提示。第三,狀態(tài)字段的內(nèi)容是否是0,1,2三個(gè)數(shù)字中的一個(gè),如不是,給出錯(cuò)誤提示。第四,要考慮哪些字段可以為空,哪些字段不能為空,不為空的地方,如輸入為空,要給出相關(guān)提示。</p><p> 4.2.3本模塊的部分界面截圖</p><p>
28、;<b> 5.心得體會(huì)</b></p><p> 第一,由于是第一次進(jìn)行數(shù)據(jù)庫開發(fā),并且vc使用了MFC,且工作量不小。所以前兩天我們遇到了不少的麻煩?;诖?,我們并沒有忙于進(jìn)行項(xiàng)目開發(fā),而是找尋相關(guān)書籍資料認(rèn)真了解數(shù)據(jù)庫詳細(xì)開發(fā)流程,參照課程設(shè)計(jì)指導(dǎo)書的前兩章,先做單模塊的功能開發(fā),實(shí)現(xiàn)“插入”,“刪除”,“查詢”,“添加”,并且讀懂提供的代碼。從這里,我知道了一個(gè)拿到一個(gè)項(xiàng)目,并且
29、是陌生的,以前沒有做過類似的,一定不要急于動(dòng)手,事先要做好需求分析,邏輯設(shè)計(jì),概念設(shè)計(jì),否則只會(huì)事倍功半。</p><p> 第二,要學(xué)會(huì)團(tuán)隊(duì)合作。相比以前做的課程設(shè)計(jì),這個(gè)項(xiàng)目無論從難度上,還是工作量上都大很多。故這時(shí),團(tuán)隊(duì)合作就顯得非常重要了。一個(gè)人是無法在短時(shí)間內(nèi)完成這樣一個(gè)項(xiàng)目的。在分工的時(shí)候,一定要明確各自的任務(wù),定義好相關(guān)的接口。</p><p> 第三,要對工程文件及時(shí)進(jìn)
30、行正確清楚有層次的備份,最好是每次修復(fù)的bug,都有相關(guān)的日志文件進(jìn)行記錄。由于沒有大型項(xiàng)目開發(fā)的經(jīng)驗(yàn),我們雖然對工程文件進(jìn)行了備份,但是沒有層次,工程命名也沒有按項(xiàng)目開發(fā)的進(jìn)度命名,沒有日志文件,加上分工合作,常常是這個(gè)bug在這個(gè)工程進(jìn)行了修復(fù),另一個(gè)bug在竟然是在令一個(gè)版本進(jìn)行修復(fù)。搞得很亂。開發(fā)前期,我們在這點(diǎn)上吃了不少苦果。幸好及時(shí)意識到了錯(cuò)誤,果斷進(jìn)行了改正。以后,進(jìn)公司了,項(xiàng)目會(huì)大很多,動(dòng)則幾十萬行代碼,從事開發(fā)的團(tuán)隊(duì)成
31、員也很多,這時(shí)候,對工程文件進(jìn)行正確清楚有層次的備份,對bug修復(fù)進(jìn)行記錄就變得很重要了。</p><p><b> 6.源代碼</b></p><p> 由于整個(gè)項(xiàng)目的源代碼比較多,所以在此只附上我寫的兩個(gè)模塊的源代碼。</p><p> 6.1選課模塊源代碼</p><p> // DailogForSele
32、ctCourse.cpp : implementation file</p><p> #include "stdafx.h"</p><p> #include "員工培訓(xùn)管理系統(tǒng).h"</p><p> #include "DailogForSelectCourse.h"</p>&
33、lt;p> #include "DailogFor_Confirm_sel_course.h"</p><p> #ifdef _DEBUG</p><p> #define new DEBUG_NEW</p><p> #undef THIS_FILE</p><p> static char THIS_
34、FILE[] = __FILE__;</p><p><b> #endif</b></p><p> /////////////////////////////////////////////////////////////////////////////</p><p> // DailogForSelectCourse dialog
35、</p><p> DailogForSelectCourse::DailogForSelectCourse(CString _peronid,CString Link,CWnd* pParent </p><p> /*=NULL*/)</p><p> : CDialog(DailogForSelectCourse::IDD, pParent)</
36、p><p><b> {</b></p><p> personid=_peronid;</p><p> LinkSql = Link;</p><p> //{{AFX_DATA_INIT(DailogForSelectCourse)</p><p> m_Edit1_FieldValu
37、e = _T("");</p><p> m_Edit2_cidValue = _T("");</p><p> m_Edit3_cidValue = _T("");</p><p> //}}AFX_DATA_INIT</p><p><b> }</b&g
38、t;</p><p> // void DailogForSelectCourse::OnInitDialog()</p><p><b> // {</b></p><p> // m_combo1_FieldName.AddString(cid);</p><p> // m_combo1_FieldNa
39、me.AddString(cname);</p><p> // m_combo1_FieldName.AddString(personid);</p><p> // m_combo1_FieldName.AddString(intro);</p><p> // m_combo1_FieldName.AddString(book);</p>
40、;<p> // m_combo1_FieldName.AddString(classroom);</p><p> // m_combo1_FieldName.AddString(number);</p><p> // m_combo1_FieldName.AddString(classtime);</p><p> // m_co
41、mbo1_FieldName.AddString(cscode);</p><p><b> // }</b></p><p> void DailogForSelectCourse::DoDataExchange(CDataExchange* pDX)</p><p><b> {</b></p>&
42、lt;p> CDialog::DoDataExchange(pDX);</p><p> //{{AFX_DATA_MAP(DailogForSelectCourse)</p><p> DDX_Control(pDX, IDC_COMBO1, m_combo1_FieldName);</p><p> DDX_Text(pDX, IDC_EDIT1,
43、 m_Edit1_FieldValue);</p><p> DDX_Control(pDX, IDC_ADODC1, m_Adodc1);</p><p> DDX_Text(pDX, IDC_EDIT2, m_Edit2_cidValue);</p><p> DDX_Text(pDX, IDC_EDIT3, m_Edit3_cidValue);</
44、p><p> DDX_Control(pDX, IDC_ADODC2, m_Adodc2);</p><p> //}}AFX_DATA_MAP</p><p><b> }</b></p><p> BEGIN_MESSAGE_MAP(DailogForSelectCourse, CDialog)</p>
45、;<p> //{{AFX_MSG_MAP(DailogForSelectCourse)</p><p> ON_BN_CLICKED(IDC_OK, OnOk)</p><p> ON_BN_CLICKED(IDC_BUTTON1, OnButton1)</p><p> ON_CBN_KILLFOCUS(IDC_COMBO1, OnKill
46、focusCombo1)</p><p> ON_BN_CLICKED(IDC_BUTTON2, OnButton2)</p><p> ON_BN_CLICKED(IDC_BUTTON3, OnButtonDEL)</p><p> //}}AFX_MSG_MAP</p><p> END_MESSAGE_MAP()</p&g
47、t;<p> /////////////////////////////////////////////////////////////////////////////</p><p> // DailogForSelectCourse message handlers</p><p> void DailogForSelectCourse::OnOk() </p
48、><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p><b> }</b></p><p> void DailogForSelectCourse::OnButton1(
49、) </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> UpdateData(TRUE);</p><p> CString tmpStr1, tmpStr2,strSQL =
50、 "select 課程號=cid,課程名=cname,老師編號</p><p> =personid,課程簡介=intro,所用教材=book,上課地點(diǎn)=classroom,課程上限人數(shù)=number,開課時(shí)間</p><p> =classtime,狀態(tài)=cscode,考試時(shí)間=exam_date from course WHERE ";</p>
51、<p> m_combo1_FieldName.GetWindowText(tmpStr1);</p><p> if(tmpStr1=="課程號")</p><p> tmpStr2="cid";</p><p><b> else</b></p><p>
52、 if (tmpStr1=="課程名")</p><p> tmpStr2="cname";</p><p><b> else</b></p><p> if(tmpStr1=="任課老師")</p><p> tmpStr2="person
53、id";</p><p><b> else</b></p><p> if(tmpStr1=="課程簡介")</p><p> tmpStr2="intro";</p><p><b> else</b></p><p&
54、gt; if(tmpStr1=="所用教材")</p><p> tmpStr2="book";</p><p><b> else</b></p><p> if(tmpStr1=="上課地點(diǎn)")</p><p> tmpStr2="cla
55、ssroom";</p><p><b> else</b></p><p> if(tmpStr1=="課程上限人數(shù)")</p><p> tmpStr2="number";</p><p><b> else</b></p>
56、<p> if(tmpStr1=="開課時(shí)間")</p><p> tmpStr2="classtime";</p><p><b> else</b></p><p> if(tmpStr1=="狀態(tài)")</p><p> tmpStr2
57、="cscode";</p><p><b> else</b></p><p> if(tmpStr1=="考核日</p><p><b> 期")</b></p><p> tmpStr2="exam_date";</p
58、><p><b> else</b></p><p><b> if</b></p><p> (tmpStr1=="")</p><p><b> {</b></p><p> strSQL = "select 課
59、程號=cid,課程名=cname,老師編號=personid,課程簡介=intro,所用教材=book,上</p><p> 課地點(diǎn)=classroom,課程上限人數(shù)=number,開課時(shí)間=classtime,狀態(tài)=cscode,考試時(shí)間=exam_date from </p><p><b> course";</b></p>&l
60、t;p> m_Adodc1.SetRecordSource(strSQL); </p><p> m_Adodc1.Refresh();</p><p> UpdateData(FALSE);</p><p><b> return;</b></p><p><b> }</b>
61、;</p><p><b> else</b></p><p><b> {</b></p><p> AfxMessageBox("查詢字段有誤,請確認(rèn)");</p><p><b> return ;</b></p><p&g
62、t;<b> }</b></p><p> strSQL += tmpStr2+" = ";</p><p> strSQL += "'"+m_Edit1_FieldValue+"'"; </p><p> m_Adodc1.SetRecordSource(s
63、trSQL); </p><p> m_Adodc1.Refresh();</p><p> UpdateData(FALSE);</p><p><b> }</b></p><p> void DailogForSelectCourse::OnKillfocusCombo1() </p>
64、<p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> // m_combo1_FieldName.AddString("cid");</p><p> // m_combo1_
65、FieldName.AddString("cname");</p><p> // m_combo1_FieldName.AddString("intro");</p><p> // m_combo1_FieldName.AddString("book");</p><p> // m_com
66、bo1_FieldName.AddString("classroom");</p><p> // m_combo1_FieldName.AddString("number");</p><p> // m_combo1_FieldName.AddString("classtime");</p><p&
67、gt; // m_combo1_FieldName.AddString("state");</p><p><b> }</b></p><p> void DailogForSelectCourse::OnButton2() </p><p><b> {</b></p>&l
68、t;p> // TODO: Add your control notification handler code here</p><p> // DailogFor_Confirm_sel_course* dlg = new DailogFor_Confirm_sel_course</p><p> (personid,m_Edit2_cidValue);</p&g
69、t;<p> // dlg->DoModal();</p><p> if( ::MessageBox(NULL,"確定選這門課嗎?","提示",MB_OKCANCEL)==IDOK ){</p><p> //AfxMessageBox("MBOK");</p><p>
70、UpdateData(TRUE);</p><p> _ConnectionPtr m_pConnection;</p><p> ::CoInitialize(NULL);</p><p> //在ADO操作中建議語句中要常用try…catch()來捕獲錯(cuò)誤信息</p><p> //因?yàn)樗袝r(shí)會(huì)經(jīng)常出現(xiàn)一些想不到的錯(cuò)誤</
71、p><p><b> try </b></p><p><b> {</b></p><p> m_pConnection.CreateInstance("ADODB.Connection");</p><p> _bstr_t strConn=LinkSql.Alloc
72、SysString();</p><p> m_pConnection->Open(strConn,"","",adModeUnknown); </p><p> //if(m_pConnection->State == adStateOpen) MessageBox("成功連接數(shù)據(jù)</p><p>
73、;<b> 庫");</b></p><p><b> }</b></p><p> catch (_com_error e)</p><p><b> {</b></p><p> ::CoUninitialize();</p><p&
74、gt; AfxMessageBox(e.ErrorMessage());</p><p><b> return;</b></p><p><b> }</b></p><p> int cnt=0,sum;</p><p> _RecordsetPtr m_pRecordset;<
75、/p><p> CString str;</p><p> str = "SELECT * FROM training_plan";</p><p> _variant_t pcid,ppersonid,authority,cscode;</p><p> m_pRecordset.CreateInstance(&qu
76、ot;ADODB.Recordset");</p><p><b> int OK=0;</b></p><p> m_pRecordset = m_pConnection->Execute(str.AllocSysString(),NULL,adCmdText);</p><p> UpdateData(TRUE);&l
77、t;/p><p> CString pa;</p><p> while( !m_pRecordset->adoEOF )</p><p><b> {</b></p><p> pcid = m_pRecordset->GetCollect("cid");</p>&l
78、t;p> ppersonid = m_pRecordset->GetCollect("personid");</p><p> CString tmp1 = (LPCSTR)(_bstr_t)pcid;</p><p> CString tmp2 = (LPCSTR)(_bstr_t)ppersonid;</p><p> i
79、f( strcmp(m_Edit2_cidValue,tmp1)==0&&strcmp(tmp2,personid)==0 ){</p><p><b> OK=1;</b></p><p><b> break;</b></p><p><b> }</b></p>
80、<p> //AfxMessageBox(m_Edit2_cidValue+" "+tmp1+" "+tmp2+" "+personid);</p><p> if( strcmp(m_Edit2_cidValue,tmp1)==0 ) cnt++;</p><p> m_pRecordset->Mo
81、veNext();</p><p><b> }</b></p><p><b> if( OK ){</b></p><p> AfxMessageBox("已選修了該課程!");</p><p> m_pRecordset->Close();</p>
82、<p> m_pConnection->Close();</p><p><b> return ;</b></p><p><b> }</b></p><p> CString _cid;</p><p> str = "SELECT * FROM cou
83、rse";</p><p> m_pRecordset = m_pConnection->Execute(str.AllocSysString(),NULL,adCmdText);</p><p> UpdateData(TRUE);</p><p><b> OK=0;</b></p><p>
84、 while( !m_pRecordset->adoEOF )</p><p><b> {</b></p><p> _cid=str = (LPCSTR)(_bstr_t)m_pRecordset->GetCollect("cid");</p><p> if(m_Edit2_cidValue==_ci
85、d)</p><p><b> {</b></p><p> str = (LPCSTR)(_bstr_t)m_pRecordset->GetCollect("cscode");</p><p><b> break;</b></p><p><b> }
86、</b></p><p> m_pRecordset->MoveNext();</p><p><b> }</b></p><p> //AfxMessageBox(pa);</p><p> if( str != "0" ){</p><p>
87、 AfxMessageBox("課程已經(jīng)開始或結(jié)束,不能選課");</p><p> m_pRecordset->Close();</p><p> m_pConnection->Close();</p><p><b> return ;</b></p><p><b>
88、; }</b></p><p> str = "SELECT * FROM course";</p><p> m_pRecordset = m_pConnection->Execute(str.AllocSysString(),NULL,adCmdText);</p><p> UpdateData(TRUE);<
89、;/p><p><b> OK=0;</b></p><p> while( !m_pRecordset->adoEOF )</p><p><b> {</b></p><p> CString tmp2 = (LPCSTR)(_bstr_t)m_pRecordset->GetCo
90、llect("cid");</p><p> CString tmp1 = (LPCSTR)(_bstr_t)pcid;</p><p> if( strcmp(tmp1,tmp2)==0 )</p><p><b> {</b></p><p> pa=(LPCSTR)(_bstr_t)m_
91、pRecordset->GetCollect("number");</p><p><b> OK=1;</b></p><p><b> break;</b></p><p><b> }</b></p><p> m_pRecordset-
92、>MoveNext();</p><p><b> }</b></p><p> sum=atoi(pa);</p><p> if( cnt>=sum ){</p><p> AfxMessageBox("該課已滿人!");</p><p> m_pRe
93、cordset->Close();</p><p> m_pConnection->Close();</p><p><b> return ;</b></p><p><b> }</b></p><p> _variant_t ra; </p><p>
94、; _bstr_t strAdd = "INSERT INTO training_plan VALUES('";</p><p> strAdd = strAdd + personid + "','";</p><p> strAdd = strAdd + m_Edit2_cidValue + "',&
95、quot;;</p><p> strAdd = strAdd + "'-1'," + "'0')";</p><p> //AfxMessageBox(strAdd);</p><p> m_pConnection->Execute(strAdd,&ra,adCmdText
96、);</p><p> //m_Adodc2.SetRecordSource("SELECT * FROM training_plan"); </p><p> m_Adodc2.Refresh();</p><p> UpdateData(FALSE);</p><p> m_pRecordset->
97、;Close();</p><p> m_pConnection->Close(); </p><p> AfxMessageBox("成功選課");</p><p><b> }</b></p><p><b> }</b></p><p>
98、; void DailogForSelectCourse::OnButtonDEL() </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> CString tmp=personid;</p>
99、;<p> if( ::MessageBox(NULL,"確定要?jiǎng)h除這門課嗎?","提示",MB_OKCANCEL)==IDOK ){</p><p> //AfxMessageBox("MBOK");</p><p> UpdateData(TRUE);</p><p> _Con
100、nectionPtr m_pConnection;</p><p> _RecordsetPtr m_pRecordset;</p><p> ::CoInitialize(NULL);</p><p> //在ADO操作中建議語句中要常用try…catch()來捕獲錯(cuò)誤信息</p><p> //因?yàn)樗袝r(shí)會(huì)經(jīng)常出現(xiàn)一些想不到的錯(cuò)誤
101、</p><p><b> try </b></p><p><b> {</b></p><p> m_pConnection.CreateInstance("ADODB.Connection");</p><p> _bstr_t strConn=LinkSql
102、.AllocSysString();</p><p> m_pConnection->Open(strConn,"","",adModeUnknown); </p><p> //if(m_pConnection->State == adStateOpen) MessageBox("成功連接數(shù)據(jù)</p>&l
103、t;p><b> 庫");</b></p><p><b> }</b></p><p> catch (_com_error e)</p><p><b> {</b></p><p> ::CoUninitialize();</p>
104、<p> AfxMessageBox(e.ErrorMessage());</p><p><b> return;</b></p><p><b> }</b></p><p> CString str,_cid;</p><p><b> int ok=0;<
105、/b></p><p> _variant_t cscode;</p><p> str = "SELECT * FROM course";</p><p> m_pRecordset = m_pConnection->Execute(str.AllocSysString(),NULL,adCmdText);</p>
106、<p> UpdateData(TRUE);</p><p> while( !m_pRecordset->adoEOF )</p><p><b> {</b></p><p> _cid = (LPCSTR)(_bstr_t)m_pRecordset->GetCollect("cid")
107、;</p><p> if(m_Edit3_cidValue==_cid)</p><p><b> {</b></p><p> str = (LPCSTR)(_bstr_t)m_pRecordset->GetCollect("cscode");</p><p><b> b
108、reak;</b></p><p><b> }</b></p><p> m_pRecordset->MoveNext();</p><p><b> }</b></p><p> //AfxMessageBox(pa);</p><p>
109、if( str != "0" ){</p><p> AfxMessageBox("課程已經(jīng)開始或結(jié)束,不能刪除!");</p><p> m_pRecordset->Close();</p><p> m_pConnection->Close();</p><p><b>
110、 return ;</b></p><p><b> }</b></p><p><b> //以下刪除數(shù)據(jù)</b></p><p> _variant_t ra; </p><p> _bstr_t strAdd = "DELETE FROM Training_pl
111、an where personid ="+tmp;</p><p> strAdd = strAdd + "AND cid =" +m_Edit3_cidValue;</p><p> //AfxMessageBox(strAdd);</p><p> m_pConnection->Execute(strAdd,&
112、ra,adCmdText);</p><p> m_pConnection->Close(); </p><p> m_Adodc2.Refresh(); </p><p> UpdateData(FALSE);</p><p> AfxMessageBox("成功刪除");</p>&l
113、t;p><b> }</b></p><p><b> }</b></p><p> BOOL DailogForSelectCourse::OnInitDialog()</p><p><b> {</b></p><p> CDialog::OnInitDi
114、alog();</p><p> CString strAdd="select 課程號=training_plan.cid,成績=score,考核評價(jià)</p><p> =apprisement.description from training_plan,apprisement where </p><p> training_plan.per
115、sonid='"+personid+"'and apprisement.appcode=training_plan.appcode;";</p><p> m_Adodc2.SetRecordSource(strAdd); </p><p> m_Adodc2.Refresh(); </p><p> m_
116、combo1_FieldName.SetWindowText("請選擇");</p><p> m_combo1_FieldName.AddString("課程號");</p><p> m_combo1_FieldName.AddString("課程名");</p><p> m_combo1_Fi
117、eldName.AddString("任課老師");</p><p> m_combo1_FieldName.AddString("課程簡介");</p><p> m_combo1_FieldName.AddString("所用教材");</p><p> m_combo1_FieldName.Ad
118、dString("上課地點(diǎn)");</p><p> m_combo1_FieldName.AddString("課程上限人數(shù)");</p><p> m_combo1_FieldName.AddString("開課時(shí)間");</p><p> m_combo1_FieldName.AddString(
119、"狀態(tài)");</p><p> m_combo1_FieldName.AddString("考核日期");</p><p> return TRUE;</p><p><b> }</b></p><p><b> 6.2設(shè)置課程模塊</b></
120、p><p> // DailogForMGcourse.cpp : implementation file</p><p><b> //</b></p><p> #include "stdafx.h"</p><p> #include "員工培訓(xùn)管理系統(tǒng).h"</p
121、><p> #include "DailogForMGcourse.h"</p><p> #include "Columns.h"</p><p> #include "Column.h"</p><p> #include "DailogForMGResultC.h
122、"</p><p> #ifdef _DEBUG</p><p> #define new DEBUG_NEW</p><p> #undef THIS_FILE</p><p> static char THIS_FILE[] = __FILE__;</p><p><b> #endi
123、f</b></p><p> /////////////////////////////////////////////////////////////////////////////</p><p> // DailogForMGcourse dialog</p><p> DailogForMGcourse::DailogForMGcourse
124、(CString Name,CString Link,CWnd* pParent /*=NULL*/)</p><p> : CDialog(DailogForMGcourse::IDD, pParent)</p><p><b> {</b></p><p> userName = Name;</p><p>
125、 LinkSql = Link;</p><p> //{{AFX_DATA_INIT(DailogForMGcourse)</p><p> m_Edit1_cid = _T("");</p><p> m_Edit2_cname = _T("");</p><p> m_Edit3_pers
126、onid = _T("");</p><p> m_Edit5_book = _T("");</p><p> m_Edit6_classroom = _T("");</p><p> m_Edit8_classtime = _T("");</p><p>
127、 m_Edit4_intro = _T("");</p><p> m_Edit7_number = _T("");</p><p> m_Edit9_cscode = _T("");</p><p> m_Edit10_exam_date = _T("");</p>
128、<p> //}}AFX_DATA_INIT</p><p><b> }</b></p><p> void DailogForMGcourse::DoDataExchange(CDataExchange* pDX)</p><p><b> {</b></p><p>
129、CDialog::DoDataExchange(pDX);</p><p> //{{AFX_DATA_MAP(DailogForMGcourse)</p><p> DDX_Control(pDX, IDC_ADODC1, m_adodc1);</p><p> DDX_Text(pDX, IDC_EDIT1, m_Edit1_cid);</p>
130、<p> DDX_Text(pDX, IDC_EDIT2, m_Edit2_cname);</p><p> DDX_Text(pDX, IDC_EDIT3, m_Edit3_personid);</p><p> DDX_Text(pDX, IDC_EDIT5, m_Edit5_book);</p><p> DDX_Text(pDX, ID
131、C_EDIT6, m_Edit6_classroom);</p><p> DDX_Text(pDX, IDC_EDIT8, m_Edit8_classtime);</p><p> DDX_Text(pDX, IDC_EDIT4, m_Edit4_intro);</p><p> DDX_Text(pDX, IDC_EDIT7, m_Edit7_number
132、);</p><p> DDX_Text(pDX, IDC_EDIT9, m_Edit9_cscode);</p><p> DDX_Text(pDX, IDC_EDIT10, m_Edit10_exam_date);</p><p> DDX_Control(pDX, IDC_DATAGRID1, m_datagrid1);</p><p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- pb課程設(shè)計(jì)—員工培訓(xùn)管理系統(tǒng)
- 員工管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- cs系統(tǒng)課程設(shè)計(jì)報(bào)告--員工管理系統(tǒng)
- java課程設(shè)計(jì)--員工信息管理系統(tǒng)報(bào)告
- 《軟件工程》課程設(shè)計(jì)報(bào)告-員工培訓(xùn)管理系統(tǒng)分析與設(shè)計(jì)
- vb課程設(shè)計(jì)---員工管理系統(tǒng)
- 新員工培訓(xùn)課程設(shè)計(jì)
- big課程設(shè)計(jì)---員工培訓(xùn)管理系統(tǒng)分析與設(shè)計(jì)
- 公司員工管理系統(tǒng)課程設(shè)計(jì)
- 員工信息管理系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)----員工信息管理系統(tǒng)
- 員工信息管理系統(tǒng)課程設(shè)計(jì)
- 員工績效課程設(shè)計(jì)報(bào)告
- 倉庫管理系統(tǒng)--課程設(shè)計(jì)報(bào)告報(bào)告
- 宿舍管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 倉儲(chǔ)管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告--倉庫管理系統(tǒng)
- 學(xué)籍管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 房屋管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 教務(wù)管理系統(tǒng)課程設(shè)計(jì)報(bào)告
評論
0/150
提交評論