第一篇:C++課程實踐報告試題及答案
任務(wù)一 一、實踐任務(wù) 1.試建立一個類 PP,求出下列多項式的前 n 項的值。
?????? ? ???n x P n x xP nx x Pnn/))()1()()1 2((1)(2 n 1 -
110???nnn 二、詳細設(shè)計 1、類的描述與定義(1)私有數(shù)據(jù)成員 ? int n:前若干項的項數(shù)。
? double
x:存放 x 的值。
? double *p:根據(jù) n 的大小動態(tài)申請存放 P n(x)前 n 項的數(shù)組空間。
(2)公有成員函數(shù) ? PP(int num,double x1):構(gòu)造函數(shù),初始化數(shù)據(jù)成員 n 和 x,使 p 指向動態(tài)申請的數(shù)組空間。
? ~PP():析構(gòu)函數(shù),釋放 p 指向的動態(tài)內(nèi)存空間。
? double fun(int n1,double x):遞歸函數(shù),用于求多項式)(x P n 的第 n1 項。注意:將遞歸公式中的 n 用作函數(shù)參數(shù)。本函數(shù)供 process 函數(shù)調(diào)用。
? void process():完成求前 n 項的工作,并將它們存放到 p 指向的動態(tài)數(shù)組中。
? void show():輸出 n 和 x,并將前 n 項以每行 4 個數(shù)的形式輸出到屏幕上。
2、主要函數(shù)設(shè)計
在主函數(shù)中完成對該類的測試。先輸入 num 和 x1,并定義一個 PP 類的對象 items,用 num 和 x1 初始化 items 的成員 n 和 x,調(diào)用 items 的成員函數(shù),求出并輸出多項式前 num 項的值。
三、源程序清單 #include
int n;
double x;
double*p;public:
PP(int num,double x1)
{
n=num;
x=x1;
p=new double[n];
}
~PP()
{
if(p)delete []p;
}
double fun(int n1,double x);
void process();
void show();};double PP::fun(int n1,double x){
if(n1==0)return 1;
else if(n1==1)return x;
else if(n1>1)return((2*n1-1)*x*fun(n1-1,x)-(n1-1)*fun(n1-2,x))/n1;} void PP::process(){
for(int i=0;i { p[i]=fun(i,x); } } void PP::show(){ cout<<“n=”< for(int i=0;i { cout< if((i+1)%4==0)cout< } } void main(){ int num; double x1; cout<<“請輸入 num 和 x1:”; cin>>num>>x1; PP items(num,x1); items.process(); items.show();} 任務(wù)二 一、實踐任務(wù) 2.試建立一個類 SP,求k k k kn k n f ? ? ? ? ?....3 2 1),(,另有輔助函數(shù) power(m,n)用于求nm。 二、詳細設(shè)計 1、類的描述與定義(1)私有數(shù)據(jù)成員 ? int n,k:存放公式中 n 和 k 的值;(2)公有成員函數(shù) ? SP(int n1,int k1):構(gòu)造函數(shù),初始化成員數(shù)據(jù) n 和 k。 ? int power(int m, int n):求 m n。 ? int fun():求公式的累加和。 ? void show():輸出求得的結(jié)果。 2、主要函數(shù)設(shè)計 在主程序中定義對象 s,對該類進行測試。 三、源程序清單 #include private: int n,k;public: SP(int n1,int k1) { n=n1; k=k1; } int power(int m,int n); int fun(); void show();};int SP::power(int m,int n){ int s=1; for(int i=0;i { s*=m; } return s;} int SP::fun(){ int s=0; for(int i=1;i<=n;i++) { s+=power(i,k); } return s;} void SP::show(){ cout<<“f(”< int n1,k1; cout<<“請輸入 n1,k1:”; cin>>n1>>k1; SP s(n1,k1); s.fun(); s.show();} 任務(wù)三 一、實踐任務(wù) 3.建立一個類 MOVE,不進行排序,將數(shù)組中小于平均值的元素放到數(shù)組的左邊,大于平均值的元素放到數(shù)組的右邊。 二、詳細設(shè)計 1、類的描述與定義(1)私有數(shù)據(jù)成員 ? float array[20]:一維整型數(shù)組。 ? int n:數(shù)組中元素的個數(shù)。 (2)公有成員函數(shù) ? MOVE(float b[],int m):構(gòu)造函數(shù),初始化成員數(shù)據(jù)。 ? void average():輸出平均值,并將數(shù)組中的元素按要求重新放置。 ? void print():輸出一維數(shù)組。 2、主要函數(shù)設(shè)計 在主程序中用數(shù)據(jù){1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}對該類進行測試。 三、源程序清單 #include float array[20]; int n;public: MOVE(float b[],int m) { for(int i=0;i { array[i]=b[i]; } n=m; } void average(); void print(); ~MOVE() {};};void MOVE::average(){ float ave=0; int i,j; for(i=0;i { ave+=array[i]; } ave/=n; cout< float turn[20]; j=0; for(i=0;i { if(array[i]<=ave) { turn[j]=array[i]; j++; } } j=0; for(i=0;i { if(array[i]>ave) { turn[n-1-j]=array[i]; j++; } } for(i=0;i { array[i]=turn[i]; } } void MOVE::print(){ for(int i=0;i cout< float b1[]={1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}; int num; num=sizeof(b1)/sizeof(float); MOVE s(b1,num); s.average(); s.print();} 任務(wù)四 一、實踐任務(wù) 4.建立一個類 MOVE,將數(shù)組中最大元素的值與最小元素的值互換。 二、詳細設(shè)計 1、類的描述與定義(1)私有數(shù)據(jù)成員 ? int *array:一維整型數(shù)組。 ? int n:數(shù)組中元素的個數(shù)。 (2)公有成員函數(shù) ? MOVE(int b[],int m):構(gòu)造函數(shù),初始化成員數(shù)據(jù)。 ? void exchange():輸出平均值,并將數(shù)組中的元素按要求重新放置。 ? void print():輸出一維數(shù)組。 ? ~MOVE():析構(gòu)函數(shù)。 2、主要函數(shù)設(shè)計 在主程序中用數(shù)據(jù){21,65,43,87,12,84,44,97,32,55}對該類進行測試。 三、源程序清單 #include int *array; int n;public: MOVE(int b[],int m) { array=new int[m]; n=m; for(int i=0;i { array[i]=b[i]; } } void exchange(); void print(); ~MOVE() { if(array)delete array; } };void MOVE::exchange() { float ave=0; for(int i=0;i { ave+=array[i]; } ave/=n; cout<<“平均值為”< int max,min; max=min=array[0]; int m; for(i=0,m=0;i { if(array[i]>=max)m=i,max=array[i]; } int l; for(i=0,l=0;i { if(array[i] } i=array[m],array[m]=array[l],array[l]=i; } void MOVE::print() { for(int i=0;i cout< { int text[]={21,65,43,87,12,84,44,97,32,55}; int num; num=sizeof(text)/sizeof(int); MOVE s(text,num); s.print(); cout< s.exchange(); s.print();} 任務(wù)五 一、實踐任務(wù) 定義一個類 Palindrome,實現(xiàn)絕對回文數(shù)。設(shè)計一個算法實現(xiàn)對任意整型數(shù)字判斷是否為絕對回文數(shù)。所謂絕對回文數(shù),是指十進制數(shù)和二進制數(shù)均對稱的數(shù)。 二、詳細設(shè)計 1、類的描述與定義(1)私有數(shù)據(jù)成員 ? int n:整型數(shù)字。 ? int y: 標(biāo)記是否為回文數(shù)。 (2)公有成員函數(shù) ? Palindrome(int x):構(gòu)造函數(shù),根據(jù) x 參數(shù)初始化數(shù)據(jù)成員 n,y 初始化為 0。 ? void huiwen():判斷數(shù) n 是否為絕對回文數(shù)。 ? void show():若該數(shù)為回文數(shù),則在屏幕顯示。 2、主要函數(shù)設(shè)計 在主程序中定義 int a,由鍵盤輸入數(shù)字。定義一個 Palindrome 類對象 p,用 a 初始化 p,完成對該類的測試。 三、源程序清單 #include int n; int y;public: Palindrome(int x) { n=x; y=0; } void huiwen(); void show();};void Palindrome::huiwen(){ int i=0,j=0; int m; m=n; while(m) { m/=10; i++; } m=n; while(m) { m/=2; j++; } int*s10=new int[i]; int*s2=new int[j]; m=n; for(int k=0;k { s10[i-1-k]=m%10; m/=10; } m=n; for(k=0;k { s2[j-1-k]=m%2; m/=2; } int num10=0; for(k=0;k { if(s10[i-1-k]==s10[k])num10++; else break; } int num2=0; for(k=0;k { if(s2[j-1-k]==s2[k])num2++; else break; } if(num10==(i/2)&&num2==(j/2))y=1; } void Palindrome::show(){ int i=0,j=0; int m; m=n; while(m) { m/=10; i++; } m=n; while(m) { m/=2; j++; } int*s10=new int[i+1]; int*s2=new int[j+1]; m=n; for(int k=0;k { s10[i-1-k]=m%10; m/=10; } m=n; for(k=0;k { s2[j-1-k]=m%2; m/=2; } if(y) { cout<<“該數(shù)為絕對回文數(shù)!:”< cout<<“十進制表示為:”; for(k=0;k cout< cout<<“二進制表示為:”; for(k=0;k cout< } else { cout<<“該數(shù)不是絕對回文數(shù)!:”< cout<<“十進制表示為:”; for(k=0;k cout< cout<<“二進制表示為:”; for(k=0;k cout< } cout< int a; cout<<“請輸入一個數(shù)字:”; cin>>a; Palindrome p(a); p.huiwen(); p.show();} 任務(wù)六 一、實踐任務(wù) 6.定義一個字符串類 String,實現(xiàn)判斷該字符串是否為回文字符串。所謂回文字符串,是 指該字符串左右對稱。例如字符串“123321”是回文字符串。 二、詳細設(shè)計 1、類的描述與定義(1)私有數(shù)據(jù)成員 ? char *str; ? int y:標(biāo)記是否為回文字符串。 (2)公有成員函數(shù) ? String(char *s):構(gòu)造函數(shù),用給定的參數(shù) s 初始化數(shù)據(jù)成員 str。y 初始化為 0。 ? void huiwen():判斷 str 所指向的字符串是否為回文字符串。 ? void show():在屏幕上顯示字符串。 2、主要函數(shù)設(shè)計 在主程序中定義字符串 char s[]=”ababcedbaba”作為原始字符串。定義一個 String 類對象 test,用 s 初始化 test,完成對該類的測試。 三、源程序清單 #include char*str; int y;public: String(char*s) { int n=strlen(s); str=new char[n+1]; strcpy(str,s); y=0; } void huiwen(); void show(); ~String() { if(str)delete []str;} };void String::huiwen(){ int n,judge=0; n=strlen(str); for(int i=0;i<(n/2);i++) { if(str[i]==str[n-1-i])judge++; } if(judge==i)y=1;} void String::show()//輸出; { if(y==1)cout<<“y=1,?該字符串是回文數(shù)”< else cout<<“y=0,該字符串不是回文數(shù)”< char s[]=“ababcedbaba”; String test(s); test.huiwen(); test.show();} 任務(wù)七 一、實踐任務(wù) 7.建立一個類 PHALANX,生成并顯示一個折疊方陣。折疊方陣如下圖所示。折疊方陣的生成過程為:起始數(shù)置于方陣的左上角,然后從起始數(shù)開始遞增,依次折疊構(gòu)成方陣。 二、詳細設(shè)計 1、類的描述與定義(1)私有數(shù)據(jù)成員 1 … 1 1 4 9 16 ? int(*p)[20]:指向按照折疊規(guī)律存放方陣的二維整型數(shù)組。 ? int startnum:折疊方陣的起始數(shù)。 ? int n:存放方針的層數(shù)。 (2)公有成員函數(shù) ? PHALANX(int s, int m):構(gòu)造函數(shù),初始化成員數(shù)據(jù)。 ? void process():生成起始數(shù)為 startnum 的 n 行方陣。 ? void print():輸出折疊方陣。 ? ~ PHALANX():析構(gòu)函數(shù)。 2、主要函數(shù)設(shè)計 在主程序中對該類進行測試。 三、源程序清單 #include int(*p)[20]; int startnum; int n; public: phalanx(int s[20][20],int m) { startnum=1; p=s; n=m; } void process() { p[0][0]=startnum; for(int i=0;i for(int j=0;j {if(i>j){p[i][j]=1+i*i+i+i-j;} else{p[i][j]=1+j*j+i;}} } void print() { for(int i=0;i { for(int j=0;j } } ~ phalanx(){ } }; void main() { int m; int s[20][20]; cout<<“請輸入折疊層數(shù):”; cin>>m; cout<<“n”; phalanx pp(s,m); pp.process(); pp.print(); } 中南大學(xué) 本科生課程設(shè)計(實踐)任務(wù)書、設(shè)計報告 (C++程序設(shè)計) 題 目 學(xué)生姓名 指導(dǎo)教師 C++程序設(shè)計實踐 * * 孫 岱 學(xué) 院 地球科學(xué)與信息物理學(xué)院 專業(yè)班級 信息物理工程類1106班 學(xué)生學(xué)號 01451106** 計算機基礎(chǔ)教學(xué)實驗中心 2012年 7 月 日 C++程序設(shè)計實踐報告書 C++是一種使用非常廣泛的電腦程式設(shè)計語言,在當(dāng)今網(wǎng)絡(luò)如此發(fā)達的時代能夠運用C++語言進行編程顯得尤為重要。它是一種靜態(tài)資料類型檢查的,支援多范型的通用程式設(shè)計語言。C++支援程序化程式設(shè)計、資料抽象化、面向?qū)ο蟪淌皆O(shè)計、泛型程式設(shè)計、基于原則設(shè)計等多種程式設(shè)計風(fēng)格。在系統(tǒng)學(xué)習(xí)完《C++程序設(shè)計基礎(chǔ)》課程后,我們在老師的指導(dǎo)下進行了這次C++程序設(shè)計實踐,主要以visual C++6.0為編譯環(huán)境,重點使用了visual C++ MFC編程實現(xiàn)實踐所要求的功能。 【任務(wù)描述】 這次實踐采用了上機實踐與老師集體輔導(dǎo)結(jié)合的方式,以完成輔導(dǎo)老師下發(fā)的《C++語言課程設(shè)計任務(wù)書》中指定任務(wù)與要求為目的,要求我們在已學(xué)過的《C++程序設(shè)計基礎(chǔ)》所掌握的一些C++語言的結(jié)構(gòu)和函數(shù)的基礎(chǔ)上,以全新的角度去感知和運用C++語言進行一些具有相關(guān)目的和功能的程序設(shè)計和編譯。在這次實踐中,我們統(tǒng)一以visual C++ 6.0為編譯系統(tǒng),使用visual C++ MFC編程來達到和完成輔導(dǎo)老師給的《C++語言課程設(shè)計任務(wù)書》中給出的題目,其中部分題目以基本對話框為應(yīng)用程序的框架,另一部分則設(shè)計為單文檔界面(SDI)應(yīng)用程序。這些程序都具有不同的設(shè)計目的和應(yīng)用功能,運用了常用的基本控件,如靜態(tài)文本框、命令按鈕、編輯框、復(fù)選框、列表框、組合框、滾動條等。 本次實踐可分為三部分: 一、基于對話框的Windows應(yīng)用程序: 這部分以知識要點掌握與編程實例主輔結(jié)合的方式,讓我們基本掌握了基于對話框的應(yīng)用程序的創(chuàng)建過程,建立基于對話框的 MFC 應(yīng)用程序框架,放置控件并設(shè)置控件屬性,以及為控件連接變量(即為控件命名),添加并且編寫消息處理函數(shù)。在這部分實踐中,我按照任務(wù)書中要求按照任務(wù)書所給的實例,基本掌握了基于對話框的 MFC 應(yīng)用程序中各常用的基本控件的使用。在完成對MFC編程的初步了解后,我們按《C++語言課程設(shè)計任務(wù)書》所給出的題目和要求完成了相關(guān)基于對話框的 MFC 應(yīng)用程序的編譯。實踐完成了以下任務(wù)和要求: 1.編寫一個如圖所示的應(yīng)用程序。若單擊“復(fù)制”按鈕,則把上面的編輯框中的內(nèi)容復(fù)制到下面的編輯框中;若單擊“結(jié)束”按鈕,則退出程序的運行。 2.輸入一元二次方程 ax2 +bx+c=0 的系數(shù) a、b、c,計算并輸出兩個根 x1、x2。 3.編寫一個能對列表框進行項目添加、修改和刪除操作的應(yīng)用程序。 4.設(shè)計如圖所示的對話框。若選定了“日期”或“時間”復(fù)選框,則在對應(yīng)的只讀編輯框中顯示系統(tǒng)當(dāng)前日期或時間。 5.設(shè)計如圖所示的對話框。單擊“確定”按鈕后,在列表框中顯示選擇的信息。 二、文檔/視圖結(jié)構(gòu)應(yīng)用程序: 文檔/視圖結(jié)構(gòu)的思想是將數(shù)據(jù)的管理與顯示分離,其中文檔用于管理應(yīng)用程序的數(shù)據(jù),而視圖是用戶界面,用于顯示、打印文檔中的數(shù)據(jù),并管理與用戶的交互。在這部分實踐過程中,通過對任務(wù)書中介紹的幾種SDI結(jié)構(gòu)的典型應(yīng)用程序來了解其結(jié)構(gòu)及設(shè)計方法,學(xué)習(xí)和實踐了典型應(yīng)用包括:?利用畫筆、畫刷等工具及位圖處理的方法實現(xiàn)文字和圖形的輸出。?利用定時器控件制作動畫程序。?對鼠標(biāo)和鍵盤進行編程的基本方法。?文件、字體、顏色等幾種通用對話框的使用方法及自定義對話框的設(shè)計、調(diào)用方法。?菜單的設(shè)計方法。 通過課程實踐,以及與同學(xué)之間的討論,我們完成了這一階段的任務(wù)要求: 6.編寫一個程序,繪制如圖所示的-2π~2π 之間的 sin 曲線。 7.設(shè)計一個如圖所示的畫圖程序。要求按下鼠標(biāo)右鍵畫圓,按住鼠標(biāo)左鍵移動畫線。(圖略) 8.用定時器控制蝴蝶在窗口中飛舞,如圖所示。(圖略) 9.設(shè)計一個如圖所示的應(yīng)用程序。若用戶單擊左鍵,則彈出輸入成績對話框,選擇 OK 后平均成績和總分在窗口的客戶區(qū)輸出。(圖略) 10.設(shè)計如圖所示的菜單,并編寫相應(yīng)用的消息處理函數(shù)。(圖略) 三、完成綜合題的程序設(shè)計: 將實踐過程中選擇3~5題(或類似的題),做成一個綜合程序,要求通過菜單調(diào)用各部分功能。可自行組織和發(fā)揮,使其安排合適。 【系統(tǒng)設(shè)計思想】 首先建立一個單文檔結(jié)構(gòu)的應(yīng)用程序作為綜合程序的主程序,通過對菜單的設(shè)計完成與所需調(diào)用的各個對話框功能相適應(yīng)的編輯。利用對話框類資源創(chuàng)建自己的對話框,然后建立成與實踐中3~5題相對應(yīng)的對話框,并分別按要求進行相關(guān)功能的實現(xiàn)。然后建立對話框類CMyDlg,在調(diào)用的地方建立對話框類對象CMyDlg dlg;然后dlg.DoModal();從而實現(xiàn)主程序?qū)Ω鱾€對話框的調(diào)用。在主程序的單文檔界面的菜單中,可以對所需功能進行選擇,然后調(diào)用出不同的對話框?qū)崿F(xiàn)所系的功能,達到設(shè)計程序通過菜單調(diào)用各部分功能的目的。 【系統(tǒng)功能】 設(shè)計的綜合程序以一個文檔類的程序界面為依托,實現(xiàn)其余各個部分功能的調(diào)用。對書目管理、時間顯示以及教師綜合信息管理者三部分進行了整合,達到了對各個部分功能之間的調(diào)用。在主界面中,我們可以對所需功能進行選擇,從而到達不同的對話框界面進行不同功能的交互。?當(dāng)我們在菜單中選擇“書目管理”時,程序自動彈出書目管理對話框,然后我們能對列表框進行項目添加、修改和刪除操作等。?而我們?nèi)绻谥鹘缑娴牟藛沃羞x擇“時間顯示”,則系統(tǒng)會跳至另一個對話框界面,這個界面可以對當(dāng)前的時間進行顯示,在對話框中若選擇了“日期”或者“時間”復(fù)選框,則在對應(yīng)的只讀編輯框中顯示系統(tǒng)當(dāng)前的日期或時間,從而實現(xiàn)了對系統(tǒng)當(dāng)前時間信息的捕獲。?如果我們在最初的主界面菜單選擇了“教師綜合信息管理”,則在彈出的對話框中我們可以實現(xiàn)對教師姓名、性別、愛好、工齡以及職稱進行選擇。 【設(shè)計過程】 首先打開VC++ 6.0編譯系統(tǒng),因為我設(shè)計的綜合程序以一個文檔類的程序界面為依托,實現(xiàn)其余各個部分功能的調(diào)用。對書目管理、時間顯示以及教師綜合信息管理者三部分進行了整合,從而達到了對各個部分功能之間的調(diào)用。所以創(chuàng)建過程如下: ?按照任務(wù)書要求設(shè)定工程名為“xw1106_0145110626“,利用 AppWizard 創(chuàng)建一個 SDI 應(yīng)用程序框架。 ?在工作區(qū)中選定“ ResourceView ”,展開 Menu,雙擊其中的 IDR_MAINFRAME,可以看到由 AppWizard 生成的標(biāo)準(zhǔn)菜單。首先刪除原有菜單項,然后添加自己所需要的菜單,添加方式為:雙擊空白菜單框,彈出“ Menu Item Properties ”,輸入菜單項的標(biāo)題(名稱)。若菜單項有一個子菜單(單擊會彈出了一子菜單),則選定“彈出”,否則不要選定“彈出”;要輸入一條分割線,則選定“分隔符”。我將菜單欄設(shè)定為三項,分別為“菜單”、“小工具”以及“QQ”,其中菜單包含三個子選項分別為“方程求解/時間顯示/書目管理”,小工具包含“復(fù)制/字符游戲”,而“QQ”則是通過進程方式實現(xiàn)對外部軟件QQ的調(diào)用。 ?利用“CDialog dlg;dlg.DoModal();”來實現(xiàn)各個子菜單項所對應(yīng)的對話框的調(diào)用,而QQ的調(diào)用是個人加進去的(不是任務(wù)要求),利用了進程方式調(diào)用外部exe程序:STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si,sizeof(si));si.cb = sizeof(si);ZeroMemory(&pi,sizeof(pi));if(!CreateProcess(NULL, ”G:Program FilesTencentQQBinQQ.exe “,NULL,NULL,FALSE,CREATE_NO_WINDOW,NULL,NULL,&si,&pi)){ MessageBox(”出錯 “, ”提示 ",MB_OK|MB_ICONINFORMATION);} WaitForSingleObject(pi.hProcess,INFINITE);CloseHandle(pi.hProcess);CloseHandle(pi.hThread);【運行情況】 編譯鏈接后程序運行正常,能實現(xiàn)通過菜單項調(diào)出相應(yīng)的對話框的目的,以一個文檔類的程序界面為依托,實現(xiàn)其余各個部分功能的調(diào)用。對書目管理、時間顯示以及教師綜合信息管理者三部分進行了整合,達到了對各個部分功能之間的調(diào)用。其中點擊QQ也能很快的彈出QQ登陸界面。在主程序的單文檔界面的菜單中,可以對所需功能進行選擇,然后調(diào)用出不同的對話框?qū)崿F(xiàn)所系的功能,達到設(shè)計程序通過菜單調(diào)用各部分功能的目的。 【心得體會】 在為期不到兩周的課程設(shè)計中,我體會頗多,學(xué)到很多東西。我懂得了如何用 MFC編寫可視化界面的應(yīng)用程序,我加強了對C++的認識,復(fù)習(xí)了自己以前的知識,自己的邏輯思考能力也提高不少。從而對Microsoft Visual C++ 6.0又有了更深入的認識!在這次課程設(shè)計中,我還懂得了程序開發(fā)的一些比較重要的步驟,總之,通過這次課程設(shè)計,我收獲頗豐,相信會為自己以后的學(xué)習(xí)和工作帶來很大的好處。最重要的還是激發(fā)了我編程的興趣和熱情,讓我從理論變成了能做一些小型程序,讓我對編程更加熱愛了。整體地評價這次課程設(shè)計,我認為收獲很大,正如上面所說的那樣,通過課程設(shè)計,既復(fù)習(xí)了以前的舊知識,又學(xué)到了一些新的知識;設(shè)計增強了我們用所學(xué)知識去解決具體問題的能力,進一步培養(yǎng)了我們獨立思考問題和解決問題的能力。特別是學(xué)會了在Visual C++ 集成開發(fā)環(huán)境中如何調(diào)試程序的方法。當(dāng)然,老師的悉心指導(dǎo)和同學(xué)的幫助也是不可忽視的,在此感謝本次課程設(shè)計中所有輔導(dǎo)老師對我的關(guān)心和幫助,誠心誠意感謝老師對我的鼓勵與教導(dǎo),是老師在我迷茫的時候給了我些許提示,激發(fā)了我編程的靈感;還有,我在此也十分感謝本次課程設(shè)計中同學(xué)們對我的幫助,盡管本次不是團隊合作,但是他們也給了我不少的提示和幫助,我們相互溝通、共同進步。 【參考文獻】 [1] 楊長興、劉衛(wèi)國.《C++程序設(shè)計》.中國鐵道出版社 [2] 劉衛(wèi)國、楊長興.《C++程序設(shè)計實踐教程》.中國鐵道出版社 #include using namespace std; class Bus_infor { int No; static int Bus_No;char start[20];char end[20];int Bus_order; int all_tickted;int tickted;int Hour_start,Minute_start,Hour_end,Minute_end;int Hour;int Minute; public: Bus_infor *next;Bus_infor();~Bus_infor();int Get_no();int Get_all_tickted();int Get_tickted();int Get_bus_order(); char *Get_start();char *Get_end();void addr(); void Order_tickt(int n);void Unorder_tickt(int n);void GetTime_start();void GetTime_end();void ShowTime();void GetTime();void Show_infor(); void input(){ cout<<“ttt按提示輸入:”< cout<<“tt輸入車次: ”; cin>>Bus_order; cout<<“請輸入車的額定載量: ”; cin>>all_tickted; GetTime_start(); GetTime_end(); addr(); char a; cout<<“是否清空售票(y/n)?”< cin>>a; if(a=='y')tickted=0;} void input(ifstream & is) { is>>Bus_order>>start>>end>>all_tickted>>tickted>>Hour_start>>Minute_start>>Hour_end>>Minute_end; is.get(); } void output(){cout<<“客車基本信息如下:”< <<“ 發(fā)車時間:”< <<“ 起點站:”< <<“ 終點站:”< <<“行車時間”< <<“額定載量”< void output(ofstream & os) { os< < < < < < < < < < }; int Bus_infor::Bus_No=1; void Bus_infor::GetTime_start(){ int NewH=0,NewM=0;cout<<“請輸入發(fā)車時間:”< void Bus_infor::GetTime_end(){ int NewH=0,NewM=0;cout<<“請輸入行車時間:”< void Bus_infor::GetTime(){ if(Minute_end>=Minute_start){Minute=(Minute_end-Minute_start);Hour=(Hour_end-Hour_start);} else {Minute=(Minute_end-Minute_start+60);Hour=(Hour_end-Hour_start-1);} } void Bus_infor::ShowTime(){ cout< cout< tickted=0;} Bus_infor::~Bus_infor(){ Bus_No--;} void Bus_infor::addr(){ cout<<“請輸入起點站與終點站:”< cin>>a;cin>>b;strcpy(start,a);strcpy(end,b);} char *Bus_infor::Get_start(){ return start;} char *Bus_infor::Get_end(){ return end;} int Bus_infor::Get_no(){ return No;} int Bus_infor::Get_all_tickted(){ return all_tickted;} int Bus_infor::Get_tickted(){ return tickted;} int Bus_infor::Get_bus_order(){ return Bus_order;} void Bus_infor::Order_tickt(int n){ tickted=tickted+n;} void Bus_infor::Unorder_tickt(int n){ tickted=tickted-n;}; class Bus_link{ public: Bus_link(){head=new Bus_infor;head->next=NULL;key=0;} void input();void mend();void del();int find(Bus_infor **p,int num,char *pn); int find1(Bus_infor **p,int num,char *pn); void found();void show(); void Order(); void Unorder(); void save(); void begin(); void clear(); char mainmenu(); int getkey(){ return key;} void setkey(int k){ key=k;} private: Bus_infor *head; int key;}; void Bus_link::input(){ Bus_infor *p,*p2=NULL;p=head; int n;while(p->next) p=p->next;while(n){ p2=new Bus_infor; p2->input(); p->next=p2; p2->next=NULL; p=p->next; Bus_link::setkey(1); cout<<“ttt按1繼續(xù),按0返回 : ”; cin>>n;} } void Bus_link::Order(){ Bus_infor *p;cout<<“確定購票(y/n)?”< int num; cout<<“ttt輸入車次號: ”; cin>>num; if(!find1(&p,num,“^”)) { cout<<“tt找不到你要定票的車輛的內(nèi)容!”< return; } cout<<“輸入要定的票數(shù) ”; int n;cin>>n; p=p->next; if((p->Get_tickted()+n)<=p->Get_all_tickted()) {p->Order_tickt(n); cout<<“謝謝使用”< else cout<<“對不起,沒有足夠的票數(shù)。”< } else if(X=='n')cout<<“謝謝使用”< void Bus_link::Unorder(){ Bus_infor *p;cout<<“確定退票(y/n)?”< int num; cout<<“ttt輸入車次號: ”; cin>>num; if(!find1(&p,num,“^”)) { cout<<“tt找不到你要定票的車輛的內(nèi)容!”< return; } cout<<“輸入要退的票數(shù) ”; int n;cin>>n; p=p->next; if((p->Get_tickted()-n)>=0) p->Unorder_tickt(n); else cout<<“對不起,數(shù)據(jù)出錯!。”< } else if(X=='n')cout<<“謝謝使用”< void Bus_link::found(){ Bus_infor *p;int num=-1,n=9;char name[20]=“^”;do { cout<<“tt1:按車次查找,2:按終點站查找: ”; cin>>n;}while(n<1||n>2);if(n==1){ cout<<“ttt輸入車次: ”; cin>>num;} if(n==2){ cout<<“ttt輸入終點站: ”; cin>>name;} if(!find(&p,num,name)){ cout<<“tt找不到你要查找的內(nèi)容!”< return;} } int Bus_link::find(Bus_infor **p1,int num,char *pn){ Bus_infor *p; p=head; int t=0; while(p->next){ (*p1)=p; if((p->next)->Get_bus_order()==num||!strcmp((p->next)->Get_end(),pn)) { (p->next)->output(); t=1; break; } p=p->next;} return t;} int Bus_link::find1(Bus_infor **p1,int num,char *pn){ Bus_infor *p;p=head;int t=0;while(p->next){ (*p1)=p; if((p->next)->Get_bus_order()==num||!strcmp((p->next)->Get_end(),pn)) {return 1;} p=p->next;} return 0;} void Bus_link::del(){ Bus_infor *p,*p2;int num;cout<<“ttt輸入車次號: ”;cin>>num; if(!find(&p,num,“^”)){ cout<<“tt找不到你要刪除的內(nèi)容!”< return;} p2=p->next;p->next=p2->next;delete p2;Bus_link::setkey(1);} void Bus_link::show(){ Bus_infor *p;p=head;while(p->next){ (p->next)->output(); p=p->next;} } void Bus_link::mend(){ Bus_infor *p;int num=-1;char name[20]=“^”; cout<<“ttt輸入車次號: ”;cin>>num; if(!find1(&p,num,name)){ cout<<“tt找不到你要修改的內(nèi)容!”< return;}(p->next)->output();(p->next)->input();Bus_link::setkey(1);} void Bus_link::save(){ Bus_infor *p;p=head;ofstream os(“bus.txt”,ios::out);if(Bus_link::getkey()==1){ while(p->next) { (p->next)->output(os); p=p->next; } } cout<<“ttt文件已保存!”< Bus_infor *p,*p2;p=head;clear();long t;ifstream is(“bus.txt”,ios::in); if(!is){ ofstream os(“bus.txt”,ios::out); os.close(); return;} int num=-1;while(1){ num=-1; t=is.tellg(); is>>num; is.seekg(t); if(num<0) { is.close(); return; } p2=new Bus_infor; p2->input(is); p->next=p2; p2->next=NULL; p=p->next;} } void Bus_link::clear(){ Bus_infor *p,*p2;p=head->next;while(p){ p2=p; p=p->next; delete p2;} } char Bus_link::mainmenu(){ char n[6];cout<<“nn ---歡迎使用車票管理系統(tǒng)---”< 制作人 劉強 ”< <<“ 物理學(xué)院 ”< <<“ ”< <<“ 1.錄入車票信息 2.瀏覽車票信息 <<” 3.查詢車票信息 4.刪除車票信息 <<“ 5.修改車票信息 6.定購車票信息 <<” 7.退還車票信息 8.保存車票信息 <<“ 0: 退出系統(tǒng) <<”--------------------------“< <<”--------------------------“< <<” 請選擇功能按鈕: “;cin>>n;return n[0];} int main(){ Bus_link pp;int k=1;char n;pp.begin(); while(k==1){ n=pp.mainmenu(); switch(n) { case '1':pp.input();break; case '2':pp.show();break; case '3':pp.found();break; ”< case '4':pp.del();break; case '5':pp.mend();break; case '6':pp.Order();break; case '7':pp.Unorder();break; case '8':pp.save();break; case '0': if(pp.getkey()==1) { cout<<“ttt是否保存? 1 : 保存 0:不保存 : ”; cin>>k; if(k==1) pp.save(); } pp.clear(); k=0; break; } } return 0;} 心得體會 在這幾周的面向?qū)ο蟮恼n程設(shè)計中,通過完成本次任務(wù),我所收獲到的東西頗豐。 利用設(shè)計這次學(xué)生信息管理的機會,使我熟練地掌握了上學(xué)期所學(xué)的C++面向?qū)ο蟪绦蚓幊蹋哺由钊肜斫饬藢W(xué)生信息管理的操作原理和了解了文件的用法及其作用,為日后如何熟練使用文件打下堅實的基礎(chǔ)。此外,本次算法的實現(xiàn)采用了C和C++語言面向?qū)ο缶幊蹋刮覍惖臉?gòu)建,派生類的使用等等各類c的知識,有更深層次的認識。 在這次課程設(shè)計中,我還懂得了程序開發(fā)的一些比較重要的步驟,如總體分析,程序模塊設(shè)計等。相信通過此次課程設(shè)計會為我以后的學(xué)習(xí)和工作帶來很大的好處。最重要的還是激發(fā)我對編程的興趣和熱情,讓我從一個只懂理論變成了做一些小程序,讓我們對編程更加熱愛。 最重要的是,在這次的編程中我們不斷地從源程序中尋找錯誤,修改錯誤,通過不斷地更新程序提升對編程的理解。雖然現(xiàn)有的編程還不完美,但是執(zhí)著認識到了追求完美的信念,相信在下一次的面向?qū)γ婢幊痰倪^程中能將程序推向所能的極致。 通過在這次編程中和隊友的攜手合作,為以后的合作打下不錯的默契,培養(yǎng)相互的信心,提高集體的凝聚力。總而言之,這次的課程設(shè)計是比較成功的。程序設(shè)計最重要的是要敢于創(chuàng)新,而不應(yīng)該止步于舊知識的應(yīng)用,唯有不安于現(xiàn)狀,才能有更大的發(fā)展空間。 中南大學(xué) 本科生課程設(shè)計(實踐)設(shè)計報告(程序設(shè)計基礎(chǔ))題目 MFC課程設(shè)計 學(xué)生學(xué)號 學(xué)生姓名 指導(dǎo)教師 學(xué)院 專業(yè)班級 計算機基礎(chǔ)教學(xué)實驗中心 2015年 06月 14 日 一、引言 MFC(Microsoft Foundation Class Library, 微軟基礎(chǔ)類庫)是微軟基Windows平臺下的C++類庫集合。MFC包含了所有與系統(tǒng)相關(guān)的類,其中封裝了大多數(shù)的API(Application Program Interface)函數(shù),提供了應(yīng)用程序框架和開發(fā)應(yīng)用程序的工具,如應(yīng)用程序向?qū)А㈩愊驅(qū)А⒖梢暬Y源設(shè)計等高效工具,用消息映射處理消息響應(yīng),大大簡化了Windows應(yīng)用程序的開發(fā)工作,使程序員可以從繁重的編程工作中解脫出來,提高了工作效率。 程序設(shè)計實踐旨在課堂學(xué)習(xí)的基礎(chǔ)上幫助學(xué)生掌握C++應(yīng)用系統(tǒng)的開發(fā)方法和技巧。在系統(tǒng)學(xué)習(xí)完《C++程序設(shè)計》這門課程后,通過實踐對幾個小型C++應(yīng)用程序?qū)嵗O(shè)計與實現(xiàn)過程分析,幫助學(xué)生利用C++開發(fā)應(yīng)用系統(tǒng)的一般方法和步驟,掌握MFC的基本知識。 這次實踐采用學(xué)生上機與老師集體輔導(dǎo)的方式,以完成老師下發(fā)的《C++語言課程設(shè)計任務(wù)書》為要求和目的,運用課堂上學(xué)習(xí)的C++基礎(chǔ)知識,采用Visual C++ MFC編程系統(tǒng),以全新的角度和感知去認識C++語言在編程方面的優(yōu)越性。在實踐過程中,基于對話框的MFC應(yīng)用程序,達到了解基本控件,如靜態(tài)文本框、命令按鈕、編輯框、列表框、組合框等的使用的目的。還有理解Windows應(yīng)用程序采用“消息傳遞、事件驅(qū)動”的運行機制。本次實踐的任務(wù)主要分為兩個部分: 使用Visual C++ MFC編程實現(xiàn)以下功能: 輸入一元二次方程ax2+bx+c=0 的系數(shù)a、b、c,計算并輸出兩個根x1、x2.編寫一個能對列表框進行項目添加、修改和刪除操作的應(yīng)用程序。編寫一個程序,繪制-2π~2π之間的sin曲線。用定時器控制蝴蝶在窗口中飛舞。等共10道。 將第一部分中選擇3~5題,做一個綜合程序,要求有登陸界面和調(diào)用各部分的功能。總體設(shè)計 本次實踐的主要目的就是了解和掌握運用MFC編程的一般思想和具體的操作步驟。實踐主要是基于MFC的多文檔對話框和單文檔視圖,通過實踐完成第一大部分的任務(wù)之后,還要完成第二部分的綜合題目。第二部分的任務(wù)由學(xué)生自主發(fā)揮,自主找資料,詢問同學(xué)和老師。第一部分的任務(wù)比較簡單,具體的就不再描述。關(guān)于第二部分,我做了一個基于對文檔對話框。首頁為一個登陸頁面,需要輸入用戶名和密碼才能登陸,登陸后的頁面是把第一大部分的幾個題目連接起來。達到預(yù)覽的目的。 三、詳細設(shè)計 實踐前首先要認識AppWizard的工作環(huán)境。其項目工作區(qū)一共有三個選項卡分別為“ResourceView”“ClassView”“FileView”,中間是對話框設(shè)計界面,右邊是控件工具欄。實踐過程中,我們是先完成第一大部分的任務(wù)。雖然在第一次上機實踐前,我仔細地閱讀了老師給我們下發(fā)的資料,并且結(jié)合《C++程序設(shè)計實踐教程》了解相關(guān)知識,但是在實踐時結(jié)果不理想。主要是對創(chuàng)建對話框程序的步驟沒有掌握。在經(jīng)過幾次嘗試失敗后,總結(jié)其一般步驟為:(1)建立基于對話框的MFC應(yīng)用程序框架;(2)放置控件;(3)設(shè)置控件屬性;(4)為控件連接變量,即為控件命名;(5)添加并且編寫消息處理函數(shù)。 基于對話框的MFC程序設(shè)計,對各種控件的了解和使用顯得特別重要。這里就不一一詳細介紹它們的功能。控件控制欄一個有26個控件圖標(biāo),每一個圖標(biāo)都可以看做一個對象,消息便是通過函數(shù)對它們進行操作。每一個控件都有兩個重要而且必不可少的基本屬性:ID和標(biāo)題。ID便是該控件的標(biāo)識,某些函數(shù)需要通過ID對控件進行操作。了解一定相關(guān)知識后,對課程實踐有了很大的幫助。其中“輸入一元二次方程ax2+bx+c=0 的系數(shù)a、b、c,計算并輸出兩個根x1、x2”這個題目比較復(fù)雜,而且與C++連續(xù)很緊密。其中的有這樣的語句m_x1=(-b+sqrt(b*b-4*a*c))/(2*a);m_x2=(-b-sqrt(b*b-4*a*c))/(2*a),這就是我們在課堂上學(xué)習(xí)的C++基本語句,在實踐過程中考驗學(xué)生的靈活運用能力。完成這個題目的關(guān)鍵是把每個編輯框(控件)連接好變量和選的數(shù)據(jù)類型,接下來的就是編寫消息處理函數(shù)。這道題很全面地體現(xiàn)了MFC的“消息傳遞、事件驅(qū)動”的思想,在操作步驟方面也在很多地方得到了實踐。 MFC編程除了基于多文本對話框以外,還有很重要的一部分是基于單文檔界面的應(yīng)用程序,如Windows自帶的Notepad程序。在本次實踐的第一大部分的后5個小題就是基于單文檔的。那么首先要對其有一定的了解:文檔/視圖結(jié)構(gòu)的思想是將數(shù)據(jù)的管理與顯示分離,其中文檔用于管理應(yīng)用程序的數(shù)據(jù),而視圖是用戶界面,用于顯示、打印文檔中的數(shù)據(jù),并管理與用戶的交互。SDI具有文檔/視圖結(jié)構(gòu)的應(yīng)用程序框架,該框架包括應(yīng)用程序類、窗口框架類、文檔類和視圖類,編程的任務(wù)是在文檔類和視圖類中添加適當(dāng)?shù)拇a。其中文檔類中一個重要的成員函數(shù)是OnNewDocument(),用戶在此添加代碼完成對數(shù)據(jù)的初始化;而視圖類中最重要的成員函數(shù)是OnDraw(),通過在該函數(shù)中添加代碼實現(xiàn)窗口內(nèi)容的輸出。本次實踐是對單文檔的典型實例,包括: ? 利用畫筆、畫刷等工具及位圖處理的方法實現(xiàn)文字和圖形的輸出。? 利用定時器控件制作動畫程序。? 對鼠標(biāo)和鍵盤進行編程的基本方法。 ? 文件、字體、顏色等幾種通用對話框的使用方法及自定義對話框的設(shè)計、調(diào)用方法。? 菜單的設(shè)計方法。 雖然進行充分的準(zhǔn)備,實踐中還是遇到了很多的困難和問題。在完成題目“用定時器控制蝴蝶在窗口中飛舞”時,主要的問題就是在插入蝴蝶圖片的,嘗試了幾次都沒有編譯成功。最終再詢問同學(xué)后,才知道是要把GIF格式的圖片分割成一幀一幀,然后才能插入。最后用定時器控制,達到動態(tài)的效果。在完成了第一大部分的任務(wù)后,第二部分的綜合題是一個不小的挑戰(zhàn)對我來說。要靠自己去網(wǎng)上或者圖書館查找資料。在經(jīng)過一番準(zhǔn)備后,最終決定做一個相對簡單的基于多文檔對話框的登陸界面,把幾個原來的程序文件連接起來。但是在這個過程中,完全要靠自己一步一步去探索,當(dāng)然也遇到了各種各樣的困難和挑戰(zhàn)。關(guān)鍵是在連接各部分對話框,經(jīng)過不斷的實驗,不斷的調(diào)試程序,總結(jié)的操作步驟如下:(1)創(chuàng)建工程,MFC Application(exe),工程命名按要求命名;(2)工程建立后有如圖對話框,將途中的靜態(tài)文本框和按鈕都刪掉,留下空白,再使用靜態(tài)文本,編輯框,按鈕和靜態(tài)圖片重新排版,并進行命名。注意靜態(tài)圖框應(yīng)該第一個布置,不然運行時圖片會將其他控件覆蓋;(3)右擊密碼對應(yīng)的編輯框,選擇屬性,選樣式中的密碼;(4)在Dialog上右擊選擇插入DIG,重復(fù)插入4個,依次作為菜單,題目1,題目2和題目3的對話框,并對其分別創(chuàng)建類,以菜單對話框為例,改一下表頭為“菜單”,在對話框空白處雙擊,點OK創(chuàng)建類,并對其命名(假如命名為MyMenu);(5)回到登錄界面的對話框,雙擊登錄控件,出現(xiàn)如圖按鈕,點擊OK,在頂端添加#include”MyMenu.h”,并OnButton1下添加以下代碼CString c_user,c_password;m_user.GetWindowText(c_user);m_password.GetWindowText(c_password);if(c_user.IsEmpty()||c_password.IsEmpty()){ MessageBox(“用戶名或密碼不能為空”,“用戶登錄信息”); return;} if(c_user==“123”&&c_password==“123”){ CMyMenu dlg; dlg.DoModal();//這兩段代碼是用于調(diào)用菜單對話框 } else { MessageBox(“用戶名或密碼不正確”,“提示”,MB_ICONINFORMATION); return;對對話框添加背景圖片。在如下圖文件上右擊,選擇引入,然后導(dǎo)入已準(zhǔn)備好的bmp格式的圖片,然后選擇登錄界面的靜態(tài)圖框右擊,進行如圖操作,這樣圖片就加入了,它會改掉按鈕和編輯框,這沒關(guān)系,運行后會顯示出來的;(7)通過以上操作,已經(jīng)做好了登錄界面和實現(xiàn)和登錄界面與菜單對話框的連接,現(xiàn)在進行菜單對話框的編輯。將原有的按鈕刪除,自己加入按鈕并命名;(8)雙擊題目1,點OK,在代碼頁的頂端加入如圖代碼,并在OnButton1下加入以下代碼 CT1 dlg;dlg.DoModal();其他的按相同操作。 四、設(shè)計總結(jié) 為期為兩周的課程實踐中,我體會頗多,學(xué)到的東西也很多。我懂得了如何運用MFC編寫可視化界面的應(yīng)用程序,加強了對C++的認識,復(fù)習(xí)了以前的知識,自己的邏輯思考能力,解決問題的能力也提高了不少。從而對Microsoft Visual C++有了更加深刻的認識和體會!在這次課程設(shè)計實踐過程中我還懂得了一些程序開發(fā)的重要步驟,總之,在這次課程設(shè)計實踐中,我收獲頗豐。 對于對任務(wù)的完成情況,第一部分主要按老師的步驟完成。第二部分,由學(xué)生自主選題,自主設(shè)計完成。總的來說,我個人對自己的完成情況感覺良好。當(dāng)然,老師的悉心指導(dǎo)和同學(xué)的幫助是不能忽視的,在此感謝所有在本次課程設(shè)計實踐過程中對我細心指導(dǎo)的老師和不斷鼓勵和幫助我的同學(xué)們。 總之,此次課程實踐是對學(xué)生動手動腦的一次很好的鍛煉,為學(xué)生的今后發(fā)展奠定基礎(chǔ)。第二篇:C++實踐報告
第三篇:c++課程實踐火車票管理系統(tǒng)
第四篇:c++課程心得體會
第五篇:中南大學(xué)(C++實踐報告)