通信工程實(shí)習(xí)報(bào)告_第1頁
通信工程實(shí)習(xí)報(bào)告_第2頁
通信工程實(shí)習(xí)報(bào)告_第3頁
通信工程實(shí)習(xí)報(bào)告_第4頁
通信工程實(shí)習(xí)報(bào)告_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

CHINAUNIVERSI^FYOFPETltOLEUM暑期實(shí)習(xí)報(bào)告題目:簡易手機(jī)10086的制作學(xué)生姓名:學(xué)號:專業(yè)班級:通信工程2011級1班指導(dǎo)教師:2012年7月16日第1章前言暑期實(shí)習(xí)課題的背景(來源)和意義為了加深對通信工程這一專業(yè)的了解,加強(qiáng)對一年來學(xué)習(xí)的語言的實(shí)際應(yīng)用的掌握,進(jìn)行了這次的專業(yè)實(shí)習(xí)。此次實(shí)習(xí)所編的系統(tǒng)以10086為模版,通過VC編程,利用語音卡建立的簡單的模擬手機(jī)服務(wù),主要有單次通話查多手機(jī)余額,和客戶留言兩功能。本次實(shí)習(xí)最大的意義在于熟悉MFC的使用,加深對C++知識的應(yīng)用,并在書本的基礎(chǔ)上拓展實(shí)戰(zhàn)的能力,如初步使用數(shù)據(jù)庫等,培養(yǎng)獨(dú)立編程,和解決問題的能力。暑期實(shí)習(xí)課題的主要任務(wù)總的來說,這個(gè)模擬10086的功能極其有限,僅有余額查詢和反饋留言兩項(xiàng)功能。但其中有包括了不少零碎的小模塊,如手機(jī)號碼位數(shù)匹配,手機(jī)號碼匹配,余額提取和讀出,定時(shí)播放忙音,和一次通話可查多個(gè)號碼。暑期實(shí)習(xí)整體設(shè)計(jì)。該系統(tǒng)主要分三個(gè)模塊:進(jìn)入系統(tǒng)模塊,業(yè)務(wù)服務(wù)模塊,和檢測掛機(jī)模塊。進(jìn)入系統(tǒng)模塊主要包括檢測摘機(jī)和接收號碼并匹配的過程,其中摘機(jī)檢測和接收號碼較為簡單,而號碼匹配的過程則用到數(shù)據(jù)庫的建立與鏈接;進(jìn)入服務(wù)模塊,首先要選擇服務(wù)類型利用條件語句對客戶反映進(jìn)行判斷并執(zhí)行相應(yīng)功能函數(shù)來執(zhí)行響應(yīng)的服務(wù)操作;最后的檢測掛機(jī)主要功能是在通話的任意時(shí)刻檢測用戶是否掛機(jī),若是,則處理系統(tǒng)內(nèi)存初始化變量已備下一通話的使用??傮w流程為檢測摘機(jī)——播放聲音選擇服務(wù)——0查詢余額——輸入手機(jī)號碼——檢測號碼位數(shù)是否正確——(是)檢測數(shù)據(jù)庫中是否有匹配號碼——<——(否)提醒輸入有誤返回重輸[是]匹配號碼讀出余額——1重新讀數(shù)#查詢其他手機(jī)余額

[否]提醒空號檢查并重輸

檢測摘機(jī)——播放聲音選擇服務(wù)——1反饋留言——播放提示音開始留言——#結(jié)束錄音——播放錄音——檢測掛機(jī)。其中輸入號碼前與提醒服務(wù)按鍵后若客戶無動(dòng)作,則向其播放忙音提醒掛機(jī)。任何情況下掛機(jī)軍結(jié)束服務(wù)并還原所有變量,等待下次呼入。第2章相關(guān)技術(shù)以下為系統(tǒng)編寫的大體過程:編輯基本界面一將內(nèi)容顯示到list內(nèi)一設(shè)置定時(shí)器——刷新列表信息——檢測摘掛機(jī)并播放相應(yīng)聲音文件——接受電話輸入號碼(多位)——設(shè)置判斷輸入號碼位數(shù)——正確讀出多位數(shù)——設(shè)置定時(shí)器一定條件下播放忙音——?jiǎng)?chuàng)建并連接數(shù)據(jù)庫——判斷用戶輸入號碼是否匹配數(shù)據(jù)庫——設(shè)置錄音功能——用戶界面設(shè)置。程序創(chuàng)建為MFC基于對話框的工程,在整個(gè)系統(tǒng)編寫過程中,主要功能實(shí)現(xiàn)代碼基本都在OnTimer函數(shù)中,將內(nèi)容顯示到list內(nèi)主要用到函數(shù)m_List.SetItemText();設(shè)置定時(shí)器用到SetTimerO;利用OnTimer實(shí)現(xiàn)對信息的及時(shí)處理和刷新;摘掛機(jī)檢測需要利用if(OffHookDetect(m_ValidCh))〃摘機(jī)檢測{m_State="摘機(jī)";m_ChState=2;sts="";}if(HangUpDetect(m_ValidCh))〃掛機(jī)檢測{StopPlayFile(m_ValidCh);m_ChState=1; //任何情況下掛機(jī)就進(jìn)入空閑狀態(tài)m_List.SetItemText(m_ValidCh,2,"空閑");m_List.SetItemText(m_ValidCh,3,"");}播放聲音文件用到函數(shù)StartPlayFileO;//開始播放if(CheckPlayEnd(m_ValidCh))//判斷文件是否播放完畢{}StopPlayF訂e();停止播放文件接受用戶按鍵需定義變量code并利用函數(shù)GetDtmfCodecode=GetDtmfCode(m_ValidCh));接收按鍵后,用if語句判斷所要進(jìn)行的操作。如if((code=GetDtmfCode(m_ValidCh))!=-1)〃接收手機(jī)號{StopPlayFile(m_ValidCh);if(code==12){StartPlayFile(m_ValidCh,"erro",0L);InitDtmfBuf(m_ValidCh);}else{if(code==10){ch=code+38;}else{ch=code+48;}st=ch;sts=sts+st;m_List.SetItemText(m_ValidCh,3,sts);}}接收手機(jī)號碼時(shí),需要用到字符串和類型轉(zhuǎn)化。其中,特別注意“0”案件的特殊利用strlen函數(shù)得到號碼長度,并判斷是否正常。利用數(shù)據(jù)庫連接函數(shù)checkPass判斷數(shù)據(jù)庫中是否有匹配數(shù)據(jù)。若數(shù)據(jù)庫中沒有可匹配的數(shù)據(jù),則提示為空號。否則讀取數(shù)據(jù)。intCMyapp1Dlg::checkPass(CStringss){_variant_tvar;CStringSQL;inthh=0;char*STRSQL;SQL="SELECT*FROMphoneWHEREphonenum='"+ss+"'";STRSQL=SQL.GetBuffer(SQL.GetLength());m_pConnection.CreateInstance(__uuidof(Connection));try{m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=myphone.mdb","","",adModeUnknown);m_pRecordset.CreateInstance(__uuidof(Recordset));m_pRecordset->Open(STRSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);while(!m_pRecordset->adoEOF){hh=1;m_pRecordset->MoveNext();//m_pRecordset->}m_pRecordset->Close();m_pRecordset=NULL;if(m_pConnection->State)m_pConnection->Close();m_pConnection=NULL;}catch(_com_error*e){AfxMessageBox(e->ErrorMessage());}returnhh;}想要取出相應(yīng)的余額還要用到另一個(gè)函數(shù)getMoney具體代碼較長連接數(shù)據(jù)庫與checkPass函數(shù)相同具體取值方法類似將取出的余額賦給另一變量進(jìn)行其他操作strcpy(re,getMoney(sts));正確讀出余額只需將0,1,2,3,4,5,6,7,8,9,十,百,千的聲音文件正確順序選擇播放。正確判斷不同位上為0的讀法不同,處理讀數(shù)的正確邏輯即可。在特定情況下開始一個(gè)計(jì)時(shí)器進(jìn)行忙音播放的操作開始計(jì)時(shí)器StartTimer(m_ValidCh,3);利用另一函數(shù)返回計(jì)時(shí)器的時(shí)間以判斷進(jìn)行操作if(ElapseTime(m_ValidCh,3)<=1200){if((code=GetDtmfCode(m_ValidCh))!=-1){StopPlayFile(m_ValidCh);if(code==1){m_ChState=6;}if(code==12){m_List.SetItemText(m_ValidCh,3,"");丄 “〃sts="";m_ChState=4;}}}else{StartPlaySignal(m_ValidCh,SIG_BUSY1);m_ChState=18;}錄音功能的實(shí)現(xiàn)StartRecordF訂e(m_ValidCh,"錄音",1000000);if(CheckRecordEnd(m_ValidCh)){StopRecordFile(m_ValidCh);m_ChState=21;}以上為較大功能模塊所用到的重要工具。

程序運(yùn)行界面:簡易手機(jī)客服程序運(yùn)行后,在狀態(tài)欄中顯□內(nèi)線程序運(yùn)行界面:簡易手機(jī)客服程序運(yùn)行后,在狀態(tài)欄中顯□內(nèi)線1內(nèi)線空閑2空閑3空床4內(nèi)悄空閑5內(nèi)緒空閑&空閑T內(nèi)線空訊線路號手機(jī)號碼掛機(jī)示通話狀態(tài)和運(yùn)行過程。在手機(jī)號碼欄中顯示用戶輸入的手機(jī)號碼,在余額一欄中顯示輸入手機(jī)號碼對應(yīng)的余額。第3章個(gè)人總結(jié)懷著好奇的心態(tài)開始第一次的實(shí)習(xí),然后慢慢感覺枯燥,乏味,每當(dāng)遇到難題,總想去自己攻克它,但屢屢調(diào)試,修改失敗,總會(huì)覺得有點(diǎn)想放棄,但跳過這個(gè)過程下面的又不能繼續(xù),因此,在與同學(xué)的討論,自己的思考中將一個(gè)個(gè)錯(cuò)誤修改,然后心情豁然開朗,克服困難是一種享受,這是實(shí)習(xí)中最大的體會(huì)。但實(shí)習(xí)的效果不僅僅是這點(diǎn)。經(jīng)過一年的學(xué)習(xí),我可以使用計(jì)算機(jī)語言做出簡單的程序,但那遠(yuǎn)遠(yuǎn)不夠。而這次實(shí)習(xí),相比平時(shí)學(xué)習(xí),是一種升華。經(jīng)過實(shí)習(xí),我對于所學(xué)知識有了更加深刻的認(rèn)識,對專業(yè)的了解也更深一步。整個(gè)實(shí)習(xí)中,除了學(xué)會(huì)了一些新的方法,代碼,實(shí)現(xiàn)了幾項(xiàng)功能,更重要的是體會(huì)到了編程的樂趣,感悟到編程的思想,對自己的專業(yè)和定位更加明確。編程的過程是困難的,但正是困難才讓我學(xué)到更多。剛開始實(shí)習(xí)時(shí),由于對MFC和數(shù)據(jù)庫不了解,總是一頭霧水,只能照著給的例子進(jìn)行下去。但是慢慢地我知道知識的殘缺是正常的,在我看來,程序也是堆起來的,從最基本的對話框一點(diǎn)點(diǎn)的添加,修改,直到最后做出一個(gè)雖不完美但是完整的程序。因此,實(shí)習(xí)是個(gè)循序漸進(jìn),讓自己領(lǐng)悟方法的過程。我感受到在編程過程中能過保持冷靜的頭腦是很重要的,遇到問題不恐懼,反復(fù)調(diào)試無果時(shí)不急躁,不放棄是一個(gè)編程人員需要具備的心理素質(zhì),唯有這樣,我們才能充分開發(fā)自己的頭腦,發(fā)散自己的思維,從不同的角度獲取解決問題的方法。知識的鞏固和延拓也是本次實(shí)習(xí)中的一大收獲,它彌補(bǔ)了我編程知識的漏洞。在編程過程中,我體會(huì)到實(shí)際上機(jī)操作與平常考試完全不同,上機(jī)調(diào)試鍛煉了我們的操作能力和綜合考慮問題的能力。它是課本知識的一次大的實(shí)際應(yīng)用,是各個(gè)知識點(diǎn)的一次綜合。無論是以前學(xué)的C++,還是新接觸的數(shù)據(jù)庫,所有的困難都帶給我不同的收獲,對以前的知識是種鞏固,而對以后需要的知識是種提前儲(chǔ)備。這次的實(shí)習(xí)更讓我明白以后的路還長,現(xiàn)在學(xué)的也許連皮毛都不是,無論是C,C++,還是MFC,數(shù)據(jù)庫,我都沒有真正領(lǐng)會(huì)到他們的內(nèi)涵。因此,對于以后要走的路,我還需要堅(jiān)持不懈的學(xué)習(xí)。另外,實(shí)習(xí)的過程中有一個(gè)認(rèn)識就是一定要頭腦清晰,無論是設(shè)計(jì)流程還是編寫代碼,亦或是調(diào)試,修改代碼,都需要冷靜的分析。因?yàn)橐粋€(gè)程序編起來,一定不會(huì)太短,也會(huì)涉及到很多不同方面的問題,這次實(shí)習(xí)中,就遇到了這樣的問題,只是因?yàn)閮?nèi)存溢出的小問題,我浪費(fèi)了兩天的時(shí)間去找出它,然后才修改成功繼續(xù)進(jìn)行流程。因此對于編程人員來說,了解各種錯(cuò)誤的發(fā)生情況和修改方法是必須的,而要做到能很快的找出錯(cuò)誤點(diǎn),平時(shí)編程就要有對各種錯(cuò)誤的積累和經(jīng)驗(yàn)。所以此次實(shí)習(xí),在編程上遇到的問題也是一大收獲。以下列舉少量錯(cuò)誤:1.控件值傳遞:控件向變量UpdateData(false);變量向控件;UpdateData只有一個(gè)BOOL類型的參數(shù),UpdateData(FALSE)—般用于對話框控件連接的變量值刷新屏幕顯示,UpdateData(true)相反2?在輸入類名?后不顯示下屬函數(shù):將文件夾中的nep文件刪除;數(shù)組定義太短。并沒有再合適的位置初始化,會(huì)導(dǎo)致內(nèi)存溢出造成錯(cuò)誤;播放忙音:StartPlaySignal(m_ValidCh,SIG_BUSY1);開始播放忙音。但不可缺少FeedSigFuncO;是忙音持續(xù)播放;定時(shí)器StartTimer(m_ValidCh,3);ElapseTime(m_ValidCh,3)<=/>=xx(注意單位不是毫秒而是0.01秒)。StopPlayFile(m_ValidCh);StartPlayFile(m_ValidCh,"",0L)必須搭配使用在必要時(shí)候干凈的刪除一個(gè)類:先從workspace中的fileview中刪除對應(yīng)的?h和?cpp文件;再關(guān)閉項(xiàng)目,從實(shí)際的文件夾中刪除對應(yīng)的?h和.cpp

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論