

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> MFC課程設(shè)計(jì)報(bào)告</b></p><p> 題 目 聊天室程序設(shè)計(jì) </p><p> 學(xué) 號(hào) </p><p> 專(zhuān) 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) </p><p> 授課班號(hào) <
2、;/p><p> 學(xué)生姓名 </p><p> 指導(dǎo)教師 </p><p> 完成時(shí)間 2008.12.30 </p><p> 題目:設(shè)計(jì)一個(gè)聊天室系統(tǒng),實(shí)現(xiàn)多人一起聊天。</p><p><b> 引言<
3、/b></p><p><b> 1.1開(kāi)發(fā)背景</b></p><p> 隨著網(wǎng)絡(luò)信息時(shí)代的來(lái)臨,INTERNET應(yīng)用越來(lái)越廣泛,人們?cè)絹?lái)越習(xí)慣于在網(wǎng)上獲取和交流信息。據(jù)調(diào)查顯示,80%以上的人上網(wǎng)都會(huì)打開(kāi)聊天工具來(lái)聊天,而幾乎每一個(gè)年輕人都會(huì)去聊天。使用網(wǎng)上聊天已經(jīng)成為現(xiàn)代年輕人一種新的交往方式。聊天室更適合于陌生人之間進(jìn)行較為主觀(guān)、感興化的討論。所以有
4、大部分的人會(huì)進(jìn)入聊天室聊天,它會(huì)給人一個(gè)完全自由的聊天世界。因此我聯(lián)系所學(xué)的MFC知識(shí),決定做一個(gè)簡(jiǎn)易的聊天室程序。</p><p> 1.2開(kāi)發(fā)環(huán)境以及運(yùn)行環(huán)境</p><p> 1.2.1 開(kāi)發(fā)環(huán)境</p><p> Intel® Pentium® 4 2.0GHz,512M內(nèi)存,80G硬盤(pán)</p><p>
5、Microsoft® Windows? XP Professional</p><p> Microsoft® Visual C++ 6.0</p><p> 1.2.2 運(yùn)行環(huán)境</p><p> Intel® Pentium® 2及以上處理器,32M以上內(nèi)存,4G以上硬盤(pán)</p><p>
6、Microsoft® Windows? XP操作系統(tǒng)</p><p> 800*600或以上的屏幕分辨率</p><p><b> 二.需求分析</b></p><p> 用WINSOCK實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)絡(luò)聊天;</p><p> 在MFC開(kāi)發(fā)平臺(tái)上編寫(xiě)一個(gè)聊天系統(tǒng); </p><p&g
7、t; 得server和client之間可以相互通信; </p><p> 多人能夠發(fā)送信息至服務(wù)器,首先顯示進(jìn)入聊天室的成員名,然后顯示對(duì)方名字和聊天信息,可以并發(fā)執(zhí)行。</p><p><b> 三、算法分析</b></p><p> 建立連接過(guò)程流程圖如下:</p><p><b> 四、詳細(xì)設(shè)計(jì)
8、</b></p><p> 程序個(gè)模塊代碼如下:</p><p><b> 1.客戶(hù)端</b></p><p> (1)通過(guò)AppWizard生成基于對(duì)話(huà)框的應(yīng)用程序ChatClient,在向?qū)У牡诙竭x擇WindowsSockets的支持,其余步驟均用默認(rèn)值。</p><p> ?。?)增加一個(gè)登錄服
9、務(wù)器的對(duì)話(huà)框資源,其ID為IDD_SETUP,然后通過(guò)ClassWizard生成對(duì)應(yīng)的基于CDialog的類(lèi)CSetupDlg。</p><p> ?。?)給對(duì)話(huà)框CSetupDlg增加3個(gè)編輯框,用來(lái)輸入登錄信息(聊天代號(hào)、服務(wù)器地址以及服務(wù)器端口號(hào)),</p><p> ?。?)通過(guò)ClassWizard生成對(duì)應(yīng)的基于CSocket的類(lèi)CChatSocket。</p>&
10、lt;p> (5)給CChatSocket類(lèi)聲明一個(gè)主對(duì)話(huà)框CChatClientDlg指針類(lèi)型的私有成員變量,其代碼如下:</p><p> protected:</p><p> CChatClientDlg* m_pDlg;</p><p> 并且在ChatSocket類(lèi)的頭文件開(kāi)始處增加如下代碼:</p><p> c
11、lass CChatClientDlg; //主對(duì)話(huà)框類(lèi)</p><p> (6)給ChatSocket類(lèi)重載一個(gè)構(gòu)造函數(shù),其定義如下:</p><p> CChatSocket::CChatSocket(CChatClientDlg* pDlg)</p><p><b> {</b></p><p> m_p
12、Dlg = pDlg;</p><p><b> }</b></p><p> 并且在ChatSocket類(lèi)的CPP文件開(kāi)始處增加如下語(yǔ)句:</p><p> #include "ChatClientDlg.h"</p><p> ?。?)通過(guò)ClassWizard響應(yīng)類(lèi)的ChatSocket的
13、OnReceive函數(shù),表示可以接收數(shù)據(jù)了,其代碼如下:</p><p> //通知客戶(hù)端可以接受數(shù)據(jù)</p><p> void CChatSocket::OnReceive(int nErrorCode) {</p><p> CSocket::OnReceive(nErrorCode);</p><p> if(m_pDlg)
14、{</p><p> PlaySound("F:\msg.wav",NULL,SND_ASYNC|SND_NODEFAULT);</p><p> m_pDlg->ProcessPendingRead();</p><p><b> }</b></p><p><b> }
15、</b></p><p> (8)在主對(duì)話(huà)框ChatClientDlg的頭文件中定義ChatSocket指針類(lèi)型的私有成員變量,其代碼如下:</p><p> CChatSocket* m_pSocket;</p><p> 并且在CChatClientDlg類(lèi)的頭文件開(kāi)始處增加如下代碼:</p><p> class C
16、ChatSocket;//基于CSocket的新類(lèi)CChatSocket</p><p> ?。?)給對(duì)話(huà)框CChatClientDlg增加處理接收數(shù)據(jù)的共有成員函數(shù)ProcessPendingRead,其定義如下:</p><p> void CChatClientDlg::ProcessPendingRead()//處理接收的數(shù)據(jù){</p><p><b
17、> //定義緩沖區(qū)</b></p><p> char buffer[BUFFER_SIZE];</p><p><b> //接收數(shù)據(jù)</b></p><p> int nReceived = m_pSocket->Receive(buffer,BUFFER_SIZE,0);</p><p&
18、gt; buffer[nReceived] = 0;</p><p> //將數(shù)據(jù)在列表框中顯示出來(lái)</p><p> CString str;</p><p> str.Format("%s",buffer);</p><p> m_ctrlMsgs.AddString(str);</p>&l
19、t;p><b> }</b></p><p> ?。?0)給對(duì)話(huà)框CChatClientDlg增加發(fā)送數(shù)據(jù)的私有成員函數(shù)SendMsg:</p><p> //發(fā)送數(shù)據(jù)到服務(wù)器</p><p> void CChatClientDlg::SendMsg(CString strMsg){</p><p> C
20、String str;</p><p> str.Format("%s:%s",m_strClientName,strMsg);</p><p> m_pSocket->Send(str.GetBuffer(0),str.GetLength(),0);</p><p><b> }</b></p>
21、<p> 并且在CChatClientDlg類(lèi)的頭文件開(kāi)始處定義緩沖區(qū)的大小,其代碼如下:</p><p> #defineBUFFER_SIZE200</p><p> ?。?1)給對(duì)話(huà)框CChatClientDlg增加表示聊天代號(hào)的CString類(lèi)型私有成員變量m_strClientName。</p><p> ?。?2)在對(duì)話(huà)框CChatC
22、lientDlg的OnInitialUpdate函數(shù)中增加登錄服務(wù)器的代碼:</p><p> BOOL CChatClientDlg::OnInitDialog()//登錄服務(wù)器{</p><p> CDialog::OnInitDialog();</p><p> ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOU
23、TBOX);</p><p> ASSERT(IDM_ABOUTBOX < 0xF000);</p><p> CMenu* pSysMenu = GetSystemMenu(FALSE);</p><p> if (pSysMenu != NULL) {</p><p> CString strAboutMen
24、u;</p><p> strAboutMenu.LoadString(IDS_ABOUTBOX);</p><p> if (!strAboutMenu.IsEmpty()) {</p><p> pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendM
25、enu(MF_STRING,IDM_ABOUTBOX, strAboutMenu);</p><p><b> }</b></p><p><b> }</b></p><p> SetIcon(m_hIcon, TRUE);// Set big icon</p><p> SetIc
26、on(m_hIcon, FALSE);// Set small icon </p><p><b> //顯示登錄對(duì)話(huà)框</b></p><p> CSetupDlg dlg;</p><p> if(dlg.DoModal()==IDOK) {</p><p> //創(chuàng)建一個(gè)新的Socket&
27、lt;/p><p> m_pSocket = new CChatSocket(this);</p><p> if (!m_pSocket->Create()) {</p><p> delete m_pSocket;</p><p> m_pSocket = NULL;</p><p>
28、 AfxMessageBox("create socket failed");</p><p> return FALSE;</p><p><b> }</b></p><p><b> //連接服務(wù)器</b></p><p> while (!m_pSocket-
29、>Connect(dlg.m_strServer,dlg.m_nPort + 700)) {</p><p> if (AfxMessageBox("Failed to connect to server\nTry again?",MB_YESNO) == IDNO) {</p><p> delete m_pSocket;</p>
30、<p> m_pSocket = NULL;</p><p> return FALSE;</p><p><b> }</b></p><p><b> }</b></p><p> m_strClientName = dlg.m_strName;</p>&
31、lt;p><b> }</b></p><p><b> else</b></p><p> return FALSE;</p><p> //發(fā)送登錄消息給服務(wù)器</p><p> SendMsg("進(jìn)入聊天室");</p><p>
32、 return TRUE; // return TRUE unless you set the focus to a control</p><p><b> }</b></p><p> ?。?3)給主對(duì)話(huà)框CChatClientDlg增加一個(gè)CListBox類(lèi)型的變量m_strMsg。</p><p> (14)給住對(duì)話(huà)框CChat
33、ClientDlg增加一個(gè)輸入發(fā)送信息的編輯框,并生成對(duì)應(yīng)的CString類(lèi)型的變量m_strMsg。</p><p> ?。?5)給主對(duì)話(huà)框CChatClientDlg增加一個(gè)【send】按鈕,其響應(yīng)函數(shù)定義如下:</p><p> void CChatClientDlg::OnSend() //響應(yīng)控件send{</p><p> UpdateData(TR
34、UE); </p><p> SendMsg(m_strMsg);</p><p> m_strMsg.Empty();////清空編輯區(qū)</p><p> UpdateData(FALSE);</p><p><b> } </b></p><p> ?。?6)給主對(duì)話(huà)框增添一個(gè)【離開(kāi)】
35、按鈕,其響應(yīng)函數(shù)定義如下:</p><p> void CChatClientDlg::leave()//離開(kāi){</p><p> SendMsg("離開(kāi)聊天室");</p><p> m_ctrlMsgs.AddString("離開(kāi)狀態(tài)");</p><p> m_pSocket->Cl
36、ose();</p><p><b> }</b></p><p> ?。?7)給主對(duì)話(huà)框增添一個(gè)【連接】按鈕,其響應(yīng)函數(shù)如下:</p><p> void CChatClientDlg::land()//連接{</p><p> OnInitDialog();</p><p><b&
37、gt; }</b></p><p><b> 2.服務(wù)器端</b></p><p> ?。?)通過(guò)AppWizard生成基于對(duì)話(huà)框的應(yīng)用程序ChatServer,在向?qū)У牡诙竭x擇WindowsSockets的支持,其余步驟均用默認(rèn)值。</p><p> (2)增加一個(gè)登錄服務(wù)器的對(duì)話(huà)框資源,其ID為IDD_INT,然后通過(guò)C
38、lassWizard生成對(duì)應(yīng)的基于CDialog的類(lèi)CInitDlg。</p><p> ?。?)給對(duì)話(huà)框CInitDlg增加1個(gè)輸入端口號(hào)的編輯框,并生成對(duì)應(yīng)的整形變量m_nPort。</p><p> ?。?)通過(guò)ClassWizard生成對(duì)應(yīng)的基于CSocket的類(lèi)CListeningSocket,用來(lái)監(jiān)聽(tīng)服務(wù)器。</p><p> ?。?)給CListeni
39、ngSocket類(lèi)聲明一個(gè)主對(duì)話(huà)框CChatServerDlg指針類(lèi)型的私有成員變量,其代碼如下:</p><p> protected:</p><p> CChatServerDlg* m_pDlg;</p><p> 并且在CListeningSocket類(lèi)的頭文件開(kāi)始處增加如下代碼:</p><p> class CChatS
40、erverDlg; //主對(duì)話(huà)框類(lèi)</p><p> (6)給ChatSocket類(lèi)重載一個(gè)構(gòu)造函數(shù),其定義如下:</p><p> CChatSocket::CClientSocket(CChatServerDlg* pDlg)</p><p> { m_pDlg = pDlg; }</p><p> 并且在CListe
41、ningSocket類(lèi)的CPP文件開(kāi)始處增加如下語(yǔ)句:</p><p> #include "ChatServerDlg.h"</p><p> ?。?)通過(guò)ClassWizard響應(yīng)類(lèi)的CListeningSocket的OnAccept函數(shù),表示客戶(hù)端連接,其代碼如下:</p><p> void CListeningSocket::OnA
42、ccept(int nErrorCode) </p><p> //通知服務(wù)器,有客戶(hù)端需要連接服務(wù)器</p><p> { CSocket::OnAccept(nErrorCode);</p><p> //主對(duì)話(huà)框處理連接信息</p><p> if(m_pDlg)</p><p> m_pDlg-&
43、gt;ProcessPendingAccept();</p><p><b> }</b></p><p> (8)通過(guò)ClassWizard生成基于CSocket的新類(lèi)CClientSocket,用來(lái)與客戶(hù)端通信。</p><p> ?。?)給CClientSocket類(lèi)聲明一個(gè)主對(duì)話(huà)框CChatServerDlg指針類(lèi)型的私有成員變量,
44、其代碼如下:</p><p> protected:</p><p> CChatServerDlg* m_pDlg;</p><p> 并且在CClientSocket類(lèi)的頭文件開(kāi)始處增加如下語(yǔ)句:</p><p> class CChatServerDlg;</p><p> ?。?0)給CClientSo
45、cket類(lèi)重載一個(gè)構(gòu)造函數(shù),其定義如下:</p><p> CClientSocket::CClientSocket(CChatServerDlg* pDlg){</p><p> m_pDlg = pDlg;</p><p><b> }</b></p><p> 并且在CClientSocket類(lèi)的CPP文件
46、開(kāi)始處增加如下語(yǔ)句:</p><p> #include "ChatServerDlg.h"</p><p> ?。?1)通過(guò)ClassWizard響應(yīng)類(lèi)的CClientSocket的OnReceive函數(shù),表示數(shù)據(jù)已到達(dá),其代碼如下:</p><p> void CClientSocket::OnReceive(int nErrorCode
47、)</p><p> //通知服務(wù)器可以接受數(shù)據(jù)</p><p> { CSocket::OnReceive(nErrorCode);</p><p> if(m_pDlg)</p><p> { //讓主對(duì)話(huà)框處理數(shù)據(jù)</p><p> m_pDlg->ProcessPendingRead(th
48、is);</p><p><b> }</b></p><p><b> } </b></p><p> ?。?2)在主對(duì)話(huà)框CChatServerDlg的頭文件那個(gè)增加兩個(gè)私有成員變量,其代碼如下:</p><p> CListeningSocket* m_pSocket;//監(jiān)聽(tīng)套節(jié)字
49、</p><p> CPtrList m_connectionList;//客戶(hù)端套節(jié)字鏈表</p><p> 并且在CChatSvrDlg的頭文件開(kāi)始處增加如下代碼:</p><p> class CListeningSocket;</p><p> class CClientSocket;</p><p&
50、gt; ?。?3)給主對(duì)話(huà)框CChatSvrDlg增加處理客戶(hù)端連接信息的私有成員變量ProcessPendingAccept,其定義如下:</p><p> void CChatServerDlg::ProcessPendingAccept() {</p><p> //生成一個(gè)新的套節(jié)字與客戶(hù)端通訊</p><p> CClientSocket* pSoc
51、ket = new CClientSocket(this);</p><p> if (m_pSocket->Accept(*pSocket)) {</p><p> //將該套節(jié)字保存起來(lái)</p><p> m_connectionList.AddTail(pSocket);</p><p><b>
52、 }</b></p><p><b> else</b></p><p> delete pSocket;</p><p><b> }</b></p><p> ?。?4)給主對(duì)話(huà)框CChatSvrDlg增加更新所有客戶(hù)端的私有成員函數(shù)UpdateClient,其定義如下:&l
53、t;/p><p> void CChatServerDlg::UpdateClients(char* buffer,int nBufferSize)</p><p><b> {</b></p><p> for(POSITION pos = m_connectionList.GetHeadPosition();</p><
54、;p> pos != NULL;)</p><p><b> {</b></p><p> //將新信息發(fā)送給每個(gè)客戶(hù)端</p><p> CClientSocket* pSocket= (CClientSocket*)m_connectionList.GetNext(pos);</p><p> if
55、(buffer != NULL)</p><p> pSocket->Send(buffer,nBufferSize,0);</p><p><b> }</b></p><p><b> }</b></p><p> (15)給主對(duì)話(huà)框CChatSvrDlg增加接受數(shù)據(jù)的私有成Pro
56、cessPendingRe,</p><p><b> 其定義如下:</b></p><p> void CChatServerDlg::ProcessPendingRead(CClientSocket* pSocket)</p><p><b> {</b></p><p><b>
57、; //定義緩沖區(qū)</b></p><p> char buffer[BUFFER_SIZE];</p><p><b> //接收數(shù)據(jù)</b></p><p> int nReceived = pSocket->Receive(buffer,BUFFER_SIZE,0);</p><p>
58、buffer[nReceived] = 0;</p><p> //將數(shù)據(jù)在列表框中顯示出來(lái)</p><p> m_ctrlMsgs.AddString(buffer);</p><p> //將數(shù)據(jù)發(fā)送給每個(gè)客戶(hù)</p><p> UpdateClients(buffer,nReceived);</p><p&g
59、t;<b> }</b></p><p> 并且在CChatSvrDlg類(lèi)的頭文件開(kāi)始處定義緩沖區(qū)的大小,其代碼如下:</p><p> #define BUFFER_SIZE200</p><p> ?。?6)給主對(duì)話(huà)框CChatSvrDlg的OnInitialUpdate函數(shù)中顯示初始化對(duì)話(huà)框,其定義如下:</p>
60、<p> BOOL CChatServerDlg::OnInitDialog()</p><p><b> {</b></p><p> CDialog::OnInitDialog();</p><p> ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);</p>
61、;<p> ASSERT(IDM_ABOUTBOX < 0xF000);</p><p> CMenu* pSysMenu = GetSystemMenu(FALSE);</p><p> if (pSysMenu != NULL)</p><p><b> {</b></p><p> C
62、String strAboutMenu;</p><p> strAboutMenu.LoadString(IDS_ABOUTBOX);</p><p> if (!strAboutMenu.IsEmpty())</p><p><b> {</b></p><p> pSysMenu->AppendMen
63、u(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX, strAboutMenu);</p><p><b> }</b></p><p><b> }</b></p><p> SetIcon(m_hIcon, TRUE)
64、;// Set big icon</p><p> SetIcon(m_hIcon, FALSE);// Set small icon</p><p> //彈出初始話(huà)對(duì)話(huà)框</p><p> CInitDlg dlg;</p><p> if (dlg.DoModal() == IDOK)</p><
65、p><b> {</b></p><p><b> //創(chuàng)建監(jiān)聽(tīng)套節(jié)字</b></p><p> m_pSocket = new CListeningSocket(this);</p><p> if (m_pSocket->Create(dlg.m_nPort+700))</p><
66、;p><b> {</b></p><p> if (m_pSocket->Listen())</p><p> return TRUE;</p><p><b> }</b></p><p><b> else</b></p><p&
67、gt; return FALSE;</p><p><b> }</b></p><p><b> else</b></p><p> return FALSE;</p><p> return TRUE; // return TRUE unless you set the focu
68、s to a control</p><p><b> }</b></p><p><b> 五、運(yùn)行結(jié)果如下:</b></p><p> 1.服務(wù)端初始化, 進(jìn)入聊天室界面:</p><p> 3.客戶(hù)端初始化,端口號(hào)與服務(wù)器對(duì)應(yīng):</p><p> 4. 進(jìn)入聊
69、天界面:</p><p> 5.聊天室顯示進(jìn)入的客戶(hù):</p><p> 6.另一個(gè)客戶(hù)進(jìn)入聊天室:</p><p> 7.在客戶(hù)界面上顯示聊天界面:</p><p><b> (芳菲燕)</b></p><p><b> ?。_)</b></p>&
70、lt;p> 8.在聊天室界面上顯示所有客戶(hù)的聊天記錄:</p><p> 9.顯示芳菲燕離開(kāi)聊天室:</p><p> 10.在芳菲燕的聊天界面上顯示離開(kāi)狀態(tài):</p><p> 11.顯示芳菲燕又進(jìn)入聊天室:</p><p><b> 六、課程設(shè)計(jì)心得:</b></p><p>
71、 我做的是“聊天室”系統(tǒng),這個(gè)程序是和鐘宏運(yùn)同學(xué)合作的,他教會(huì)了我很多東西。通過(guò)做這個(gè)系統(tǒng),我鞏固和運(yùn)用了很多課上學(xué)過(guò)的知識(shí),也學(xué)會(huì)了很多課上沒(méi)有講過(guò)的知識(shí),感受到了解課外知識(shí)的重要性,可謂是受益匪淺。</p><p> 在最開(kāi)始建立工程時(shí)就犯了一個(gè)很大的錯(cuò)誤,間錯(cuò)了工程,以致在建類(lèi)時(shí)總是出錯(cuò),浪費(fèi)了幾個(gè)小時(shí)才發(fā)現(xiàn)要建基于對(duì)話(huà)框的程序。這就體現(xiàn)了上課聽(tīng)講的重要性,由于一時(shí)的疏忽又很有可能造成無(wú)可挽回的錯(cuò)誤。我
72、們做的系統(tǒng)很小,如果這是一個(gè)巨大工程,犯了這樣一個(gè)錯(cuò)誤,那是致命的。但是,話(huà)說(shuō)回來(lái),這不叫浪費(fèi)時(shí)間,我們要吃一塹長(zhǎng)一智,下次要記住,做工程,從第一步就應(yīng)該認(rèn)認(rèn)真真,踏踏實(shí)實(shí),避免出錯(cuò)。已進(jìn)入工程,首先就做好了所有的界面設(shè)計(jì)。其中又遇到了很多困難。在插入位圖時(shí),要調(diào)整位圖的大小,這是我不知道的,通過(guò)參考書(shū)和討論終于完成這一步。從中,我更加堅(jiān)定了討論的重要作用。其次,代碼部分很多很復(fù)雜,但是結(jié)構(gòu)確是很清晰的。我想這應(yīng)該是MFC的一個(gè)很大的
73、優(yōu)點(diǎn)。根據(jù)參考書(shū)上的講解和自己的揣摩,我明白了整個(gè)算法的靈魂。</p><p> 這個(gè)程序講的是通信,互聯(lián)網(wǎng)上關(guān)于聊天功能的工具非常多,但是其實(shí)現(xiàn)技術(shù)都是大同小異。我們做的這個(gè)系統(tǒng)是用WINSOCK實(shí)現(xiàn)的最簡(jiǎn)單的聊天,多人能夠發(fā)送信息至服務(wù)器,服務(wù)器首先顯示進(jìn)入聊天室的成員名,然后顯示對(duì)方名字和聊天信息,而且可以并發(fā)執(zhí)行。把通信的思想轉(zhuǎn)化成語(yǔ)言的過(guò)程,靠的是C++的基礎(chǔ)。實(shí)現(xiàn)過(guò)程中犯了很多錯(cuò)誤,真的很后悔基礎(chǔ)功
74、不牢固,現(xiàn)在就要付出更多的時(shí)間來(lái)彌補(bǔ)。最近有很多專(zhuān)業(yè)課的要做課程設(shè)計(jì),每一次任務(wù)的完成,都會(huì)很有成就感,發(fā)現(xiàn)經(jīng)驗(yàn)真的很寶貴。有些人,可以隨口說(shuō)出那些常用的函數(shù),走了一條捷徑,而不知道的人,就要花時(shí)間去找那個(gè)函數(shù),或者說(shuō)自己寫(xiě)代碼來(lái)實(shí)現(xiàn)那個(gè)函數(shù)的功能。所以,從現(xiàn)在開(kāi)始,我會(huì)認(rèn)真面對(duì)每一次編程,即使是小程序,也一樣能鍛煉人。</p><p> 到這,這個(gè)學(xué)期的MFC學(xué)習(xí)結(jié)束了,但對(duì)知識(shí)的追求還沒(méi)有結(jié)束,我們會(huì)的只是
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- vc++課程設(shè)計(jì)--聊天室程序設(shè)計(jì)
- mfc聊天軟件課程設(shè)計(jì)---網(wǎng)絡(luò)聊天程序設(shè)計(jì)
- mfc聊天軟件課程設(shè)計(jì)---網(wǎng)絡(luò)聊天程序設(shè)計(jì)
- 網(wǎng)絡(luò)編程課程設(shè)計(jì)-簡(jiǎn)單的聊天室程序設(shè)計(jì)
- 網(wǎng)絡(luò)編程課程設(shè)計(jì)-簡(jiǎn)單的聊天室程序設(shè)計(jì)
- 聊天室課程設(shè)計(jì)---聊天程序的設(shè)計(jì)和實(shí)現(xiàn)
- 基于java的聊天室程序設(shè)計(jì)
- jsp課程設(shè)計(jì)報(bào)告--在線(xiàn)聊天室
- 《web開(kāi)發(fā)》課程設(shè)計(jì)報(bào)告--聊天室
- web課程設(shè)計(jì)—— 聊天室
- 軟件課程設(shè)計(jì)報(bào)告---簡(jiǎn)易網(wǎng)絡(luò)聊天室
- java課程設(shè)計(jì)--聊天室系統(tǒng)
- java網(wǎng)絡(luò)聊天室課程設(shè)計(jì)
- java課程設(shè)計(jì)---聊天室系統(tǒng)
- tcp課程設(shè)計(jì)--網(wǎng)絡(luò)聊天室
- mfc程序設(shè)計(jì)課程設(shè)計(jì)---考勤系統(tǒng)
- java課程設(shè)計(jì)之簡(jiǎn)單聊天室
- 網(wǎng)絡(luò)編程課程設(shè)計(jì)---網(wǎng)絡(luò)聊天室
- 網(wǎng)絡(luò)編程課程設(shè)計(jì)-java聊天室
- 網(wǎng)絡(luò)編程課程設(shè)計(jì)報(bào)告--基于linux網(wǎng)絡(luò)聊天室設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論