基于MFC對話框的個(gè)人通信錄系統(tǒng)_第1頁
基于MFC對話框的個(gè)人通信錄系統(tǒng)_第2頁
基于MFC對話框的個(gè)人通信錄系統(tǒng)_第3頁
基于MFC對話框的個(gè)人通信錄系統(tǒng)_第4頁
基于MFC對話框的個(gè)人通信錄系統(tǒng)_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1.作業(yè)題目請分別就C和C++中的基本輸入輸出\文件讀寫各自的特點(diǎn)和實(shí)現(xiàn)方法進(jìn)行分析和舉例說明;完成一個(gè)簡單的基于MFC對話框的個(gè)人通信錄系統(tǒng)(界面布局和系統(tǒng)需求自己確定),詳細(xì)描述你的分析以及實(shí)現(xiàn)過程,通訊錄的數(shù)據(jù)寫入文件。2.C語言的輸入/輸出(文件操作)2.1C語言的輸入/輸出在C語言中,沒有專門的輸入輸出語句,所有輸入輸出操作都是通過對標(biāo)準(zhǔn)I/Q庫函數(shù)的調(diào)用實(shí)現(xiàn)的。常用的輸入輸出函數(shù)有:scanf()、printf()、getchar()、putchar()、gets

()、puts(),使用這些函數(shù)時(shí)需要包含頭文件stadio.h。其中:scanf()---整型、浮點(diǎn)型、字符串?dāng)?shù)據(jù)的輸入函數(shù);printf()---整型、浮點(diǎn)型、字符串?dāng)?shù)據(jù)的輸出函數(shù);putchar()---字符輸出函數(shù);getchar()---字符輸入函數(shù);gets

()---字符串輸入函數(shù);puts()---字符串輸出函數(shù)。2.1.1函數(shù)它的功能是從鍵盤上輸入1個(gè)字符,其一般形式為:getchar();通常把輸入的字符賦予一個(gè)字符變量,構(gòu)成賦值語句。使用getchar函數(shù)時(shí)還應(yīng)注意:getchar函數(shù)只能接受單個(gè)字符,輸入多于一個(gè)字符時(shí),只接受第一個(gè)字符。輸入單個(gè)字符#include<stdio.h>

intmain(void

){charc;printf(“inputacharacter\n”);c=getchar();putchar(c);return0;}注意:程序最后兩行可用下面兩行的任意一行代替:putchar(getchar());printf(“%c”,getchar());2.1.2函數(shù)函數(shù)原型:intprintf(constchar*,)參數(shù)說明:format確定輸出格式的格式字符串;為n個(gè)表達(dá)式。功能說明:把表達(dá)式的值按格式字符串中的第個(gè)格式指示轉(zhuǎn)換為外部形式的數(shù)據(jù)(一串字符),用以取代格式字符串中的第個(gè)格式指示(格式指示符如表2-1所示),若輸出的是整型數(shù)據(jù),可整型變量、整型數(shù)組元素或常型變量。向標(biāo)準(zhǔn)輸出設(shè)備輸出所有轉(zhuǎn)換完成后的格式字符串。輸出整數(shù)時(shí),格式字符標(biāo)志為:“%d”(int型十進(jìn)制整數(shù)),“%u”(unsigned型十進(jìn)制整數(shù)),“%ld”(long型十進(jìn)制整數(shù))。表2-1C語言中的實(shí)數(shù)類型說明符字節(jié)數(shù)有效數(shù)字?jǐn)?shù)的范圍float32(4)6~7~double64(8)15~16~longdouble128(16)18~19~printf()格式化輸出。intmain(void){inta=15;floatb=123.1234567;doublec=12345678.1234567;chard=‘p’;printf(“a=%d,%5d,%o,%x\n”,a,a,a,a);//要求以4種格式輸出整型變量a的值,輸出寬度為5printf(“b=%f,%lf,%5.4lf,%e\n”,b,b,b,b,);//要求以4種格式輸出實(shí)型變量b的值,輸出寬度為5,精度為4printf(“c=%lf,%f,%8.4lf\n”,c,c,c);printf(“d=%c,%8c\n”,d,d);return0:}2.2C語言的文件操作在C語言中,文件操作都是由庫函數(shù)來完成的。文件指針在C語言中用一個(gè)指針變量指向一個(gè)文件,

這個(gè)指針稱為文件指針。通過文件指針就可對它所指的文件進(jìn)行打開、關(guān)閉、讀、寫、定位等各種操作。2.2fopen函數(shù)用來打開一個(gè)文件,其調(diào)用的一般形式為:文件指針名=fopen(文件名,使用文件方式)

其中,“文件指針名”必須是被說明為FILE

類型的指針變量,“文件名”是被打開文件的文件名。

“使用文件方式”是指文件的類型和操作要求?!拔募笔亲址A炕蜃址?dāng)?shù)組。例如:

FILE

*fp;

fp=("file

a","r");

其意義是在當(dāng)前目錄下打開文件file

a,只允許進(jìn)行“讀”操作,并使fp指向該文件。

在打開一個(gè)文件時(shí),如果出錯(cuò),fopen將返回一個(gè)空指針值NULL。在程序中可以用這一信息來判別是否完成打開文件的工作,并作相應(yīng)的處理。因此常用以下程序段打開文件:

if((fp=fopen("c:\\hzk16","rb")==NULL)

{

printf("\nerror

on

open

c:\\hzk16

file!");

getch();

exit(1);

}文件一旦使用完畢,應(yīng)用關(guān)閉文件函數(shù)把文件關(guān)閉,以防意外操作導(dǎo)致數(shù)據(jù)丟失或被非法篡改。關(guān)閉文件的實(shí)質(zhì)是取消系統(tǒng)與正在操作的文件之間的關(guān)聯(lián),關(guān)閉文件操作由標(biāo)準(zhǔn)庫函數(shù)fclose()實(shí)現(xiàn),其一般形式為:fclose(文件指針);例如:fclose(fp);

正常完成關(guān)閉文件操作時(shí),fclose函數(shù)返回值為0。如返回非零值則表示有錯(cuò)誤發(fā)生。編譯時(shí)通常用下列語句判斷文件是否正常關(guān)閉:if(fclose(fp)){printf(“can’tclosethefile!\n)”;exit(1);}2.2.2在C語言中提供了多種文件讀寫的函數(shù):

字符讀寫函數(shù)

:fgetc和fputc字符串讀寫函數(shù):fgets和fputs數(shù)據(jù)塊讀寫函數(shù):freed和fwrite格式化讀寫函數(shù):fscanf和fprinf使用以上函數(shù)都要求包含頭文件stdio.h。字符讀寫函數(shù):fgetc和fputc是以字符(字節(jié))為單位的讀寫函數(shù)。

每次可從文件讀出或向文件寫入一個(gè)字符。下面以一個(gè)復(fù)制文件的例子簡單介紹C語言文本文件讀寫的特點(diǎn)。例2-3打開現(xiàn)存文件f1.txt和新建的文件f2.bak,并讀取f1.txt中的字符,寫到f1.bak中,直至讀到f1.txt文件末尾。該例實(shí)現(xiàn)的算法流程圖如圖2-1所示。從從f1.txt中讀取1個(gè)字符打開f1.txt和f1.bak將讀到的字符寫入f1.bak中關(guān)閉f1.txt和f1.bak結(jié)束f1.txt到文件末尾?開始圖2-1文件復(fù)制流程圖在這里,將用到兩個(gè)函數(shù):fgetc()和fputc(),fgetc()函數(shù)的原型在stdio.h中申明如下:intfgetc(FILE*stream);其調(diào)用方式如下:ch=fgetc(fp);ch為字符型變量,fp為文件型指針變量。函數(shù)fgetc()從文件中讀取1個(gè)字符賦值給ch,fgetc()在讀取字符過程中,如果遇到文件結(jié)束符,函數(shù)將返回文件結(jié)束標(biāo)志EOF(在stdio.h中EOF的值定義為-1)。如需要在屏幕上顯示一個(gè)文本文件,可以用以下語句實(shí)現(xiàn):ch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp);}fputc()函數(shù)的原型在stdio.h中申明如下:intfputc(charch,FILE*stream);ch為字符型變量或字符型常量,fp為文件型指針變量。函數(shù)fputc()將ch的值輸出到fp指針指向的文件中,如果輸出成功,函數(shù)返回ch的內(nèi)容,否則返回EOF。程序?qū)崿F(xiàn)如下:#include<process.h>

#include<stdlib.h>

intmain(void)

{FILE*fp1,*fp2;charch;if(fp1=fopen((“f1.txt”,“r”))==NULL){printf(“cannotopenf1.txt\n”);exit(1);}if((fp2=fopen(“f1.bak”,“w”))==NULL){printf(“cannotopenf2.bak\n”);exit(1);}While((ch=fgetc(fp1))!=EOF)fputc(ch,fp2);fclose(fp1);fclose(fp1);

}3.C++輸入輸出(文件操作)程序在執(zhí)行期間,接受外部信息的操作稱為程序的輸入;而把程序向外部發(fā)送信息的操作稱為程序的輸出。在C++中沒有專門的輸入輸出語句,所有輸入輸出是通過輸入輸出流來實(shí)現(xiàn)的。接下來會(huì)簡單介紹輸入輸出數(shù)據(jù)方法。準(zhǔn)輸入輸出流庫函數(shù)iostream常用的輸入和輸出函數(shù)為cin和cout。在使用C++輸入輸出流之前,必須在程序的開頭增加一行:#include<iostream.h>。3.1C++輸入輸出3.1.1輸入語句:cin語法:cin>>變量>>變量>>變量,提取運(yùn)算符:“>>”。cin可以輸入任何類型的變量。從鍵盤輸入數(shù)據(jù)時(shí),相應(yīng)位置上的值必須符合變量的類型。若輸入的類型不致,則輸入的數(shù)據(jù)不正確。例3-1inti,j;floatx,y;cin>>i>>j>>x>>y;當(dāng)輸入:2722771.2321.30時(shí),變量值為i=27j=227x=71.23y=21.3。(1)字符變量輸入為字符變量輸入數(shù)據(jù)時(shí),輸入的數(shù)據(jù)必須是字符型數(shù)據(jù)。設(shè)有如下的程序片段:

例3-2charc1,c2,c3,c4;

cin

>>

c1

>>

c2

>>

c3;

cin

>>

c4;當(dāng)輸入abcd或者abcd時(shí),變量值為

c1=‘a(chǎn)’c2=‘b’c3=‘c’

c4=‘d’。若要把從鍵盤上輸入的每一個(gè)字符,包括空格和回車鍵都作為一個(gè)輸入字符賦給字符型變量時(shí),必須使用函數(shù)cin.get()。其格式為:cin.get(<字符變量>)。例3-3charc1,c2,c3,c4;

cin.get(c1);cin.get(c2);cin.get(c3);cin.get(c4);執(zhí)行到既定行數(shù)時(shí),若輸入:CD,字符C前沒有空格,在字符C與D之間有一個(gè)空格;則將字符C、空格、D分別賦給c1,c2,c3,該行中的回車鍵賦給變量c4,若用cin>>c4代替cin.get(c4),則輸入行的回車鍵不起作用,等待用戶輸入一個(gè)字符。若此處沒有cin.get(c4),則回車鍵保留。(2)輸入十六進(jìn)制或八進(jìn)制數(shù)據(jù)對于整型變量,從鍵盤上輸入的數(shù)據(jù)也可以是八進(jìn)制或十六進(jìn)制數(shù)據(jù)。在缺省的情況下,系統(tǒng)約定輸入的整型數(shù)是十進(jìn)制數(shù)據(jù)。當(dāng)要求按八進(jìn)制或十六進(jìn)制輸入數(shù)據(jù)時(shí),在cin中必須指明相應(yīng)的數(shù)據(jù)類型:hex為十六進(jìn)制;oct為八進(jìn)制;dec為十進(jìn)制。

格式:cin>>hex>>整型變量;(輸入十六進(jìn)制整數(shù))cin>>oct>>整型變量;(輸入八進(jìn)制整數(shù))cin>>dec>>整型變量;(輸入十進(jìn)制整數(shù))八進(jìn)制或十六進(jìn)制數(shù)的輸入,只適用于整型變量,不適用于字符型變量,實(shí)型變量。當(dāng)在cin中指明使用的數(shù)制輸入后,則所指明的數(shù)制一直有效。如例3-1中,輸入的k值不變時(shí),仍為八進(jìn)制。輸入數(shù)據(jù)的格式、個(gè)數(shù)和類型必須與cin中所列舉的變量類型一一對應(yīng)。例3-4當(dāng)語句執(zhí)行到cin時(shí),若輸入的數(shù)據(jù)為:11111111<CR>時(shí),則將這些數(shù)據(jù)賦給變量i,j,k,和l,轉(zhuǎn)換后輸出:179911。(11111111)(179911)3.1.2和cin流輸出相同,cout在進(jìn)行數(shù)據(jù)輸入時(shí),不管采用何種數(shù)據(jù)類型,其格式都相同。cout語句的語法格式:cout<<表達(dá)式<<表達(dá)式<<表達(dá)式,插入運(yùn)算符:“<<”,這里的表達(dá)式的結(jié)果可以是任何類型。如cout<<“字符串”<<變量1<<“字符串”<<變量2。(1)輸出寬度定位函數(shù)setw()。表達(dá)形式:cout<<setw(n)<<變量或者表達(dá)式。當(dāng)n小于實(shí)際數(shù)據(jù)的長度,按實(shí)際數(shù)據(jù)的長度輸出;當(dāng)n大于實(shí)際數(shù)據(jù)的長度,按右對齊原則輸出。(2)輸出十六進(jìn)制或八進(jìn)制數(shù)據(jù)

輸出十六進(jìn)制或八進(jìn)制數(shù)據(jù)的格式與輸入格式有著極度相似的地方,具體如下:cout<<hex<<整型變量;(輸出十六進(jìn)制整數(shù))cout<<oct<<整型變量;(輸出八進(jìn)制整數(shù))cout<<dec<<整型變量;(輸入出十進(jìn)制整數(shù))對于整型數(shù)據(jù)可指定以八進(jìn)制或十六進(jìn)制輸出,而對于實(shí)型數(shù)據(jù)可指定以科學(xué)表示法形式輸出。例3-5設(shè)有如下程序#include

<iostream.h>

void

main(void)

{

int

i=2,j=10,k=20,m=30;float

x=3.14,y=100;

cout

<<"i="<<hex<<

i<<'\t'<<"j="<<j<<endl;cout.setf(ios::scientific,ios::floatfield);

cout

<<

oct<<m<<'\t'<<j*k<<endl;

cout

<<

x<<'\t';

cout

<<y<<endl;

}執(zhí)行程序后的輸出為:i=2j=a與cin中類同,當(dāng)在cout中指明以一種進(jìn)制輸出整數(shù)時(shí),對其后的輸出均有效,直到指明又以另一種進(jìn)制輸出整型數(shù)據(jù)為止。對實(shí)數(shù)的輸出,也是這樣,一旦指明按科學(xué)表示法輸出實(shí)數(shù),則按著的輸出均按科學(xué)表示法輸出,直到指明以定點(diǎn)數(shù)輸出為止。3.2C++文件操作在C++中,對文件的操作是通過stream的子類fstream(filestream)來實(shí)現(xiàn)的,所以要用這種方式操作文件,就必須加入頭文件fstream.h。

3.2.1在fstream類中,有一個(gè)成員函數(shù)open(),就是用來打開文件的,其原型是:voidopen(constchar*filename,intmode,intaccess);fstream有和open()一樣的構(gòu)造函數(shù),可以在定義的時(shí)侯就打開文件。fstream有兩個(gè)子類:ifstream(默認(rèn)以輸入方式打開文件)和ofstream(默認(rèn)以輸出方式打開文件)。例3-6下面是一個(gè)從文件中讀入數(shù)據(jù)的完整程序#include<iostream.h>#include<fstream.h>#include<stdlib.h>intmain(){charbuffer[256];ifstreamexamplefile("example.txt");if(!examplefile.is_open()){cout<<"Erroropeningfile";exit(1);}while(!examplefile.eof()){examplefile.getline(buffer,100);cout<<buffer<<endl;}return0;}上面的例子讀入一個(gè)文本文件的內(nèi)容,然后將它打印到屏幕上。注意我們使用了一個(gè)新的成員函數(shù)叫做eof,它是ifstream從類ios中繼承過來的,當(dāng)?shù)竭_(dá)文件末尾時(shí)返回true。3.2.2關(guān)閉文件

3.2.3讀寫文件

讀寫文件分為文本文件和二進(jìn)制文件的讀取。對于文本文件的讀取,用插入器(<<)向文件輸出,用析取器(>>)從文件輸入,相對比較簡單。此處著重介紹二進(jìn)制文件的讀寫。①put()

put()函數(shù)向流寫入一個(gè)字符,其原型是ofstream&put(charch),使用也比較簡單,如file1.put('c');就是向流寫一個(gè)字符'c'。②get()

get()函數(shù)比較靈活,有3種常用的重載形式:一種就是和put()對應(yīng)的形式,功能是從流中讀取一個(gè)字符,結(jié)果保存在引用ch中,如果到文件尾,返回空字符;另一種重載形式的原型是:intget();這種形式是從流中返回一個(gè)字符,如果到達(dá)文件尾,返回EOF,如x=file2.get();還有一種形式的原型是:ifstream&get(char*buf,intnum,chardelim='\n');這種形式把字符讀入由buf指向的數(shù)組,直到讀入了num個(gè)字符或遇到了由delim指定的字符,如果沒使用delim這個(gè)參數(shù),將使用缺省值換行符'\n'。③讀寫數(shù)據(jù)塊

要讀寫二進(jìn)制數(shù)據(jù)塊,使用成員函數(shù)read()和write()成員函數(shù),它們原型如下:

read(unsignedchar*buf,intnum);

write(constunsignedchar*buf,intnum);3.3C與C++輸入輸出、文件讀寫的比較。由于C++是在C語言的基礎(chǔ)上發(fā)展擴(kuò)充而來的,它當(dāng)然支持C語言中的輸入輸出函數(shù)。使用C語言的輸入輸出函數(shù)時(shí),要包含相應(yīng)的頭文件。使用C++編程時(shí),我們提倡使用C++提供的輸入輸出流來實(shí)現(xiàn)輸入輸出,最好不要使用C語言的輸入輸出函數(shù)來實(shí)現(xiàn)輸入輸出。因?yàn)橥瑫r(shí)使用C++的輸入輸出流和C語言的輸入輸出函數(shù)來完成輸入輸出時(shí),有時(shí)會(huì)出現(xiàn)一些特殊異常的現(xiàn)象,如輸入輸出語句的執(zhí)行順序不對等。和C的文件操作方式不同的是,C++I/O系統(tǒng)管理兩個(gè)與一個(gè)文件相聯(lián)系的指針。一個(gè)是讀指針,它說明輸入操作在文件中的位置;另一個(gè)是寫指針,它下次寫操作的位置。每次執(zhí)行輸入或輸出時(shí),相應(yīng)的指針自動(dòng)變化。所以,C++的文件定位分為讀位置和寫位置的定位,對應(yīng)的成員函數(shù)是seekg()和seekp(),seekg()是設(shè)置讀位置,seekp是設(shè)置寫位置。它們最通用的形式如下:

istream&seekg(streamoffoffset,seek_dirorigin);

ostream&seekp(streamoffoffset,seek_dirorigin);

streamoff定義于iostream.h中,定義有偏移量offset所能取得的最大值,seek_dir表示移動(dòng)的基準(zhǔn)位置,是一個(gè)有以下值的枚舉:

ios::beg:文件開頭

ios::cur:文件當(dāng)前位置

ios::end:文件結(jié)尾

這兩個(gè)函數(shù)一般用于二進(jìn)制文件,因?yàn)槲谋疚募?huì)因?yàn)橄到y(tǒng)對字符的解釋而可能與預(yù)想的值不同。比如下面:

file1.seekg(1234,ios::cur);//把文件的讀指針從當(dāng)前位置向后移1234個(gè)字節(jié)

file2.seekp(1234,ios::beg);//把文件的寫指針從文件開頭向后移1234個(gè)字節(jié)4.基于MFC的簡易通訊錄管理系統(tǒng)設(shè)計(jì)4.1MFC簡單概述MFC是對WindowsAPI的封裝,它包含兩個(gè)最重要的類:CWinApp和CFrameWnd。CWinApp代表著程序的本體,winmain函數(shù)就是封裝在其中,所以函數(shù)將從這個(gè)類中開始運(yùn)行;CFrameWnd代表了一個(gè)主框窗口:在編寫函數(shù)的時(shí)候需要以這兩個(gè)類為基礎(chǔ)進(jìn)行派生自己的類,并改寫其一些成員函數(shù)以實(shí)現(xiàn)自己的程序的功能。4.1.1MFC是一個(gè)編程框架MFC中的各種類結(jié)合起來構(gòu)成了一個(gè)應(yīng)用程序框架,它的目的是讓程序員在此基礎(chǔ)上來建立Windows下的應(yīng)用程序,這是一種相對于SDK來說更為簡單的方法。因?yàn)榭傮w上,MFC框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標(biāo)準(zhǔn)實(shí)現(xiàn)方法,程序員要做的就是通過預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個(gè)輪廓。在提供了相應(yīng)的工具的MicrosoftVisualC++中,編譯后,就通過類庫是限量應(yīng)用程序特定的邏輯。4.1.2封裝構(gòu)成MFC框架的是MFC類庫,MFC類庫是C++類型。這些類或者封裝了Win32應(yīng)用程序編程接口,或者封裝了應(yīng)用程序的概念,或者封裝了OLE特性,或者封裝了ODBC和DAO數(shù)據(jù)訪問的功能。4.1.3繼承首先,MFC抽象出眾多類的共同性,設(shè)計(jì)出一些基類作為實(shí)現(xiàn)其他類的基礎(chǔ)。這些類中,最重要的是CObject和CCmdTarget。CObject是MFC的根類,絕大部分MFC類是其派生的,CObject實(shí)現(xiàn)了一些重要的特性,包括動(dòng)態(tài)信息、動(dòng)態(tài)創(chuàng)建、對象序列化、對程序調(diào)試的支持等,所以從CObject派生的類都具備或者可以具備它所擁有的特性。CCmdTarget通過封裝一些屬性和方法,提供了信息處理的框架。MFC中,任何可以處理消息的類都從CCmdTarget派生。4.1.4虛擬函數(shù)和動(dòng)態(tài)約束MFC以“C++”為基礎(chǔ),支持虛擬函數(shù)和動(dòng)態(tài)約束,MFC建立了消息映射機(jī)制,以一種富有效率、便于使用的手段解決消息處理函數(shù)。這樣,通過虛擬函數(shù)和消息映射,MFC類提供了豐富的編譯窗口。程序員繼承基類的同時(shí),把自己實(shí)現(xiàn)的虛擬函數(shù)和消息處理函數(shù)嵌入MFC的編譯框架中,MFC編譯框架將在適當(dāng)?shù)臅r(shí)候、地方來調(diào)用程序的代碼。4.2功能模塊框圖根據(jù)系統(tǒng)功能的要求,可以將系統(tǒng)分解成幾個(gè)功能模塊,它如圖4-1所示。朋友家人朋友家人其他通訊錄管理系統(tǒng)全部分類添加圖4-1通訊錄管理系統(tǒng)模塊圖4.3程序代碼編寫本程序采用的是MFC的基于窗體的基本架構(gòu)。實(shí)現(xiàn)程序中主要邏輯和文件訪問功能的函數(shù)被封裝在一個(gè)自己寫的類“myClass”中。(1)頭文件(myClass.h)中的代碼如下:classmyClass{public: myClass(void);//構(gòu)造函數(shù)。 ~myClass(void);//析構(gòu)函數(shù)。 CStringgetAll();//得到全部聯(lián)系人的信息。 CStringgetFriend();//得到標(biāo)記為“朋友”的聯(lián)系人的信息。 CStringgetFamily();//得到標(biāo)記為“家人”的聯(lián)系人的信息。 CStringgetOthers();//得到標(biāo)記為“其他”的聯(lián)系人的信息。 voidadd(CStringstr);//添加一條記錄。};(2)定義文檔類數(shù)據(jù)成員在CAboutDlg對話框中編寫代碼:classCAboutDlg:publicCDialogEx{public: CAboutDlg();//對話框數(shù)據(jù) enum{IDD=IDD_ABOUTBOX}; protected: virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持//實(shí)現(xiàn)protected: DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg():CDialogEx(CAboutDlg::IDD){}voidCAboutDlg::DoDataExchange(CDataExchange*pDX){ CDialogEx::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg,CDialogEx)END_MESSAGE_MAP()}(4)添加記錄voidaddConnect::DoDataExchange(CDataExchange*pDX){ CDialogEx::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(addConnect,CDialogEx) ON_BN_CLICKED(IDC_BUTTON1,&addConnect::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2,&addConnect::OnBnClickedButton2)END_MESSAGE_MAP()//addConnect消息處理程序voidaddConnect::OnBnClickedButton1(){myClassa;CStringb; CEdit*myEdit1=(CEdit*)GetDlgItem(IDC_EDIT1); CEdit*myEdit2=(CEdit*)GetDlgItem(IDC_EDIT2); CEdit*myEdit3=(CEdit*)GetDlgItem(IDC_COMBO1); CStringstr1; CStringstr2; CStringstr3; myEdit1->GetWindowTextA(str1); myEdit2->GetWindowTextA(str2); myEdit3->GetWindowTextA(str3); b=str1+"\t\t"+str2+"\n"+str3; a.add(b); CDialogEx::OnOK(); //TODO:在此添加控件通知處理程序代碼}BOOLaddConnect::OnInitDialog(){ CDialogEx::OnInitDialog(); CComboBox*myEdit4=(CComboBox*)GetDlgItem(IDC_COMBO1); myEdit4->AddString("朋友"); myEdit4->AddString("家人"); myEdit4->AddString("其他"); myEdit4->SetCurSel(0); //TODO:在此添加額外的初始化 returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //異常:OCX屬性頁應(yīng)返回FALSE}voidaddConnect::OnBnClickedButton2(){ CDialogEx::OnCancel(); //TODO:在此添加控件通知處理程序代碼}4.4函數(shù)的實(shí)現(xiàn)函數(shù)的實(shí)現(xiàn)文件(myClass.cpp)中的代碼如下:#include"StdAfx.h"#include"myClass.h"#include<iostream>#include<fstream>#include<istream>usingnamespacestd;//無參數(shù)的構(gòu)造函數(shù)。myClass::myClass(void){}//析構(gòu)函數(shù)的實(shí)現(xiàn)。myClass::~myClass(void){}//得到所有聯(lián)系人信息的函數(shù)CStringmyClass::getAll(){ CStringa; CStringtem; CStdioFilemyFile;//定義文件訪問類。CFileExceptionfileException; //訪問文件。if(myFile.Open("you.txt",CFile::typeText|CFile::modeNoTruncate|CFile::modeCreate|CFile::modeReadWrite),&fileException){ myFile.SeekToBegin(); //讀出文件內(nèi)容 while(myFile.ReadString(tem)){ a=a+tem+"\r\n"; myFile.ReadString(tem);}}//返回得到的值給上游函數(shù)。 returna;}CStringmyClass::getFriend(){ CStringa; CStringtem1; CStringtem2; CStdioFilemyFile;CFileExceptionfileException; if(myFile.Open("you.txt",CFile::typeText|CFile::modeNoTruncate|CFile::modeCreate|CFile::modeReadWrite),&fileException){ myFile.SeekToBegin(); while(myFile.ReadString(tem1)){ myFile.ReadString(tem2); if(tem2=="朋友"){ a=a+tem1+"\r\n"; } } } returna;}CStringmyClass::getFamily(){CStringa; CStringtem1; CStringtem2; CStdioFilemyFile;CFileExceptionfileException; if(myFile.Open("you.txt",CFile::typeText|CFile::modeNoTruncate|CFile::modeCreate|CFile::modeReadWrite),&fileException){ myFile.SeekToBegin(); while(myFile.ReadString(tem1)){ myFile.ReadString(tem2); if(tem2=="家人"){ a=a+tem1+"\r\n"; } } } returna;}CStringmyClass::getOthers(){ CStringa; CStringtem1; CStringtem2; CStdioFilemyFile;CFileExceptionfileException; if(myFile.Open("you.txt",CFile::typeText|CFile::modeNoTruncate|CFile::modeCreate|CFile::modeReadWrite),&fileException){ myFile.SeekToBegin(); while(myFile.ReadString(tem1)){ myFile.ReadString(tem2); if(tem2=="其他"){ a=a+tem1+"\r\n"; } }} returna;}voidmyClass::add(CStringstr){ CStdioFilemyFile;CFileExceptionfileException;if(myFile.Open("you.txt",CFile::typeText|CFile::modeNoTruncate|CFile::modeCreate|CFile::modeReadWrite),&fileException){ myFile.SeekToEnd(); myFile.WriteString(str+"\n");}該程序運(yùn)行起來之后即顯示所有聯(lián)系人的信息。如圖4-2所示:圖4-2程序運(yùn)行后所有聯(lián)系人的信息接下來就是利用事件驅(qū)動(dòng)特點(diǎn)來寫事件里的代碼。主要是幾個(gè)按鈕下的事件。默認(rèn)頁面初始化的代碼:myClass*a=newmyClass(); CEdit*myEdit1=(CEdit*)GetDlgItem(IDC_EDIT1);//調(diào)用的是getAll() CStringcc=a->getAll(); myEdit1->SetWindowTextA(cc);4.4.1點(diǎn)擊“全部”按鈕,和程序初始化(即上面的程序)是一樣的,顯示所有聯(lián)系人的信息,如圖4.4.2點(diǎn)擊“朋友”按鈕,可以查看類型為“朋友”的聯(lián)系人信息,如圖點(diǎn)擊“朋友”按鈕的代碼如下:myClass*a=newmyClass(); CEdit*myEdit1=(CEdit*)GetDlgItem(IDC_EDIT1);//調(diào)用的是getFriend() CStringcc=a->getFrie

溫馨提示

  • 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

提交評論