VC++课程设计报告
一、设计时间
2010年12月 27日----12月31日
二、设计地点
三、设计目的
《VC++程序设计》是计算机科学与技术专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。VC程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。要求学生在设计指导教师的帮助下自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握VC++程序设计的基本技能和面向对象的概念和方法;了解菜单、视图/文档、数据库等编程技术。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
四、设计小组成员
五、指导老师
六、设计课题
派生、多态编程
设计内容:依照书p33-40内容,创建一个应用了的窗口和应用程序派生类地完整实例。 设计要求:1)掌握虚函数的使用。2)改变窗口的背景颜色和窗口的图标。
七、基本思路及关键问题的解决方法
仔细审题理解题目要求,整理思路思考出一个系统总体开发,总体设计、总体实现的完整过程,参照书本,按思路编写程序。遇到问题先独立思考,翻阅教材或上网查找解决,实在无法自己解决的问题可以向老师或同学求助。
八、算法及流程图
九、调试过程中出现的问题及相应解决办法
问题1:missing ';' before identifier 'InvalidateRect'
解决办法:将该中文下的分号改为英文下的分号。
问题2:LINK : fatal error LNK1168: cannot open Debug/0000.exe for writing 解决办法:将前一次的运行后的窗口关闭
改变图标
十、课程设计心得体会
Visual C++是Microsofe公司开发的基于C和C++语言的集成开发工具,同其他的可视化编程工具一样,Visual C++6.0集代码编辑,编译,链接,调试等功能于一体,并提供多种有用的辅助开发工具。学习好VC++是广大计算机专业学生的迫切要求。
经过一个星期的VC++课程设计,我在老师和同学的共同帮助下,顺利完成该课程设计,收获很大。在《Windows程序设计》中MFC部分很重要,是需要实践内容。所以在本学期课
程设计是很及时、很必要的。而且还及时、真正的做到了学以致用。主要是以下几点。
基本功要过硬。不能马虎经常犯犯小错误。提高自己找错纠错能力,通常错误总是那几种,多练习就熟练了。
要善于查找资料提高自己的资料查询能力,要善于利用网络来获得知识,获得帮助。开始着手程序设计时,有些功能感觉无从下手,都不知道要干什么。这些问题只要找到相关的资料就会得到提示从而理解所要解决问题的大致方向。有了明确的目的,就可以发挥自己的头脑来完成它了。
要善于思考。程序中有些实现难点和最初完成程序时免不了的许多不足就需要自己根据代码认真思考来解决。只有这样才能纠正程序的不足并使其更加人性化。
这次课程设计让我学到了很多,不仅是巩固了先前学的MFC程序设计知识,而且也培养了我的动手能力,更令我的创造性思维得到拓展。希望今后类似这样课程设计、类似这样的锻炼机会能更多些!
通过这次课程设计,可以明显地感觉到它弥补了课堂教学和实验中知识的深度和广度方面的不足,也让我进一步掌握了面向过程和面向对象程序设计的基本方法和编程技巧,同时也巩固所学理论知识,虽然花费了不止一点点的时间和精力,不过那确实挺值得的,既让我认识到自己知识方面的缺陷,又培养了我独立分析问题、解决问题的能力。希望在今后的学习中我能够长久的保持这股学习热情,将理论知识化为实际编程能力,努力学好VC++,将所学知识与数据库充分结合起来,学好计算机专业课。
十一、源程序(每句话都要有详细解释)
#include "windows.h"//头文件
//定义全局变量和函数
HINSTANCE hInst;
HINSTANCE hInstance; //表示当前应用程序实例句柄
MSG msg;
char lpszClassName[]="城院";//指出窗口类的名称
char *ShowText;
//声明消息响应函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,WPARAM wParam,LPARAM lParam); void OnLButtonDown(HWND hWnd, UINT message,WPARAM wParam,LPARAM lParam); void OnRButtonDown(HWND hWnd, UINT message,WPARAM wParam,LPARAM lParam); void OnPaint(HWND hWnd, UINT message,WPARAM wParam,LPARAM lParam);
void OnDestory(HWND hWnd, UINT message,WPARAM wParam,LPARAM lParam);
//声明窗口类
class CFrameWnd
{
public:
HWND hWnd;
public:
int RegisterWindow();
void Create(LPCTSTR lpClasasName,LPCTSTR lpWindowName);
void ShowWindow(int nCmdShow);
void UpdateWindow();
};
//类中的函数
// RegisterWindow()设计窗口
int CFrameWnd::RegisterWindow()
{WNDCLASS wndclass;
wndclass.style=0;//窗口类型为默认类型
wndclass.lpfnWndProc=WndProc;//窗口处理函数为WndProc
wndclass.cbClsExtra=0;//窗口类无扩展
wndclass.cbWndExtra=0;//窗口实力无扩展
wndclass.hIcon=LoadIcon(NULL,IDI_QUESTION); //窗口的最小化图标为问号图标 wndclass.hCursor=LoadCursor(NULL,IDC_CROSS); //窗口采用十字光标
wndclass.hbrBackground=(HBRUSH)GetStockObject(DKGRAY_BRUSH); //窗口背景为深灰色 wndclass.lpszMenuName=NULL;//窗口中无菜单
wndclass.lpszClassName=lpszClassName;//窗口类名为“窗口示例”
//以下进行窗口类的注册
if (!RegisterClass(&wndclass))//如果注册失败则发出警告声音
{
MessageBeep(0);
return FALSE;
}
}
//创建窗口
void CFrameWnd::Create(LPCTSTR lpClassName,LPCTSTR lpWindowName)
{RegisterWindow();
hInst=hInstance;
hWnd=CreateWindow(lpszClassName,//窗口类名
lpWindowName,
WS_OVERLAPPEDWINDOW,//窗口的风格
CW_USEDEFAULT,
CW_USEDEFAULT,//窗口的左上角坐标为默认值
CW_USEDEFAULT,
CW_USEDEFAULT,//窗口的高和宽设为默认值
NULL,//此窗口无父窗口
NULL,//此窗口无主菜单
hInstance,//创建此窗口应用程序的当前句柄
NULL);//不使用该值
}
//显示窗口
void CFrameWnd::ShowWindow(int nCmdShow)
{::ShowWindow(hWnd,nCmdShow);
}
//注册窗口
void CFrameWnd::UpdateWindow()
{::UpdateWindow(hWnd);}
//声明应用程序类
class CWinApp
{
public:
CFrameWnd*m_pMainWnd;
CWinApp*m_pCurrentWnd;
public:
CWinApp();
~CWinApp();
virtual BOOL InitInstance(int nCmdShow);
int Run();
};
//类中的函数
//构造函数
CWinApp::CWinApp()
{
m_pCurrentWnd=this;
}
//初始化函数
BOOL CWinApp::InitInstance(int nCmdShow)
{
m_pMainWnd=new CFrameWnd;
m_pMainWnd->Create(NULL,"Windows 程序");
m_pMainWnd->ShowWindow(nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
//Run()函数
int CWinApp::Run()
{
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//构造函数
CWinApp::~CWinApp()
{
delete m_pMainWnd;
}
//声明窗口类CFrameWnd的派生类
class CMyWnd:public CFrameWnd
{
};
//声明窗口类CWinApp的派生类
class CMyApp:public CWinApp
{
public:
BOOL InitInstance(int nCmdShow);
};
//实现类中的函数
CMyApp::InitInstance(int nCmdShow)
{
CMyWnd*pMainWnd;
pMainWnd=new CMyWnd;
pMainWnd->Create(NULL,"派生类Windows程序");
pMainWnd->ShowWindow(nCmdShow);
pMainWnd->UpdateWindow();
return TRUE;
}
//构造CMyApp类对象
CMyApp myApp;
//重写AfxGetApp()函数
CWinApp*AfxGetApp()
{
return myApp.m_pCurrentWnd;
}
//主函数
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
int rt;
CWinApp*pApp=(CWinApp*)AfxGetApp();
pApp->InitInstance (nCmdShow);
rt=pApp->Run();
return rt;
}
//窗口函数
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) {
switch(message) //message为标示的消息
{
case WM_LBUTTONDOWN://放开鼠标左键时产生消息
OnLButtonDown(hWnd,message,wParam,lParam);
break;
case WM_PAINT://处理重画消息
OnPaint(hWnd,message,wParam,lParam);
break;
case WM_DESTROY: //退出
PostQuitMessage(0);
break;
default://默认时采用系统消息默认处理函数
return DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;
}
//消息响应函数
//响应鼠标单击消息
void OnLButtonDown(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) {
ShowText="湖南城市学院欢迎您的到来!";
InvalidateRect(hWnd,NULL,1);
}
//刷新消息
void OnPaint(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
hdc=BeginPaint(hWnd,&ps);
TextOut(hdc,300,250,ShowText,25);
EndPaint(hWnd,&ps);
}
//关闭消息
void OnDestory(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
PostQuitMessage(0);
}
运行后可得如下结果:
改变图标可得如下结果:
改变背景颜色可得如下结果:
十二、参考文献
[1] 揣锦华.面向对象程序设计与VC++实践.西安电子科技大学出版社,2005年
[2] 陈清华等。Visual C++课程设计案例精选与编程指导。东南大学出版社 2004年
[3] 陈清华.Visual C++课程设计案例精选与编程指导.东南大学出版社,2004年
[4] 陈维兴、林小茶,《C++面向对象程序设计教程》,清华大学出版社
[5] 谭浩强,《C语言程序设计》,清华大学出版社,2000年.
[6] 孙鑫 余安萍. VC++深入详解. 电子工业出版社.2006年
[7] 刘振安、刘燕君、孙忱,《C++语言课程设计》,机械工业出版社,2007年
[8] 严华峰. Visual C++课程设计案例精编. 北京:中国水利水电出版社,2002年
[9] 魏亮, 李春葆编著.Visual C++程序设计例学与实践.清华大学出版社 .2006
[10] 郑阿奇,丁有和.Visual C++教程.北京:机械工业出版社,2006
VC++课程设计报告
一、设计时间
2010年12月 27日----12月31日
二、设计地点
三、设计目的
《VC++程序设计》是计算机科学与技术专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。VC程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。要求学生在设计指导教师的帮助下自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握VC++程序设计的基本技能和面向对象的概念和方法;了解菜单、视图/文档、数据库等编程技术。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
四、设计小组成员
五、指导老师
六、设计课题
派生、多态编程
设计内容:依照书p33-40内容,创建一个应用了的窗口和应用程序派生类地完整实例。 设计要求:1)掌握虚函数的使用。2)改变窗口的背景颜色和窗口的图标。
七、基本思路及关键问题的解决方法
仔细审题理解题目要求,整理思路思考出一个系统总体开发,总体设计、总体实现的完整过程,参照书本,按思路编写程序。遇到问题先独立思考,翻阅教材或上网查找解决,实在无法自己解决的问题可以向老师或同学求助。
八、算法及流程图
九、调试过程中出现的问题及相应解决办法
问题1:missing ';' before identifier 'InvalidateRect'
解决办法:将该中文下的分号改为英文下的分号。
问题2:LINK : fatal error LNK1168: cannot open Debug/0000.exe for writing 解决办法:将前一次的运行后的窗口关闭
改变图标
十、课程设计心得体会
Visual C++是Microsofe公司开发的基于C和C++语言的集成开发工具,同其他的可视化编程工具一样,Visual C++6.0集代码编辑,编译,链接,调试等功能于一体,并提供多种有用的辅助开发工具。学习好VC++是广大计算机专业学生的迫切要求。
经过一个星期的VC++课程设计,我在老师和同学的共同帮助下,顺利完成该课程设计,收获很大。在《Windows程序设计》中MFC部分很重要,是需要实践内容。所以在本学期课
程设计是很及时、很必要的。而且还及时、真正的做到了学以致用。主要是以下几点。
基本功要过硬。不能马虎经常犯犯小错误。提高自己找错纠错能力,通常错误总是那几种,多练习就熟练了。
要善于查找资料提高自己的资料查询能力,要善于利用网络来获得知识,获得帮助。开始着手程序设计时,有些功能感觉无从下手,都不知道要干什么。这些问题只要找到相关的资料就会得到提示从而理解所要解决问题的大致方向。有了明确的目的,就可以发挥自己的头脑来完成它了。
要善于思考。程序中有些实现难点和最初完成程序时免不了的许多不足就需要自己根据代码认真思考来解决。只有这样才能纠正程序的不足并使其更加人性化。
这次课程设计让我学到了很多,不仅是巩固了先前学的MFC程序设计知识,而且也培养了我的动手能力,更令我的创造性思维得到拓展。希望今后类似这样课程设计、类似这样的锻炼机会能更多些!
通过这次课程设计,可以明显地感觉到它弥补了课堂教学和实验中知识的深度和广度方面的不足,也让我进一步掌握了面向过程和面向对象程序设计的基本方法和编程技巧,同时也巩固所学理论知识,虽然花费了不止一点点的时间和精力,不过那确实挺值得的,既让我认识到自己知识方面的缺陷,又培养了我独立分析问题、解决问题的能力。希望在今后的学习中我能够长久的保持这股学习热情,将理论知识化为实际编程能力,努力学好VC++,将所学知识与数据库充分结合起来,学好计算机专业课。
十一、源程序(每句话都要有详细解释)
#include "windows.h"//头文件
//定义全局变量和函数
HINSTANCE hInst;
HINSTANCE hInstance; //表示当前应用程序实例句柄
MSG msg;
char lpszClassName[]="城院";//指出窗口类的名称
char *ShowText;
//声明消息响应函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,WPARAM wParam,LPARAM lParam); void OnLButtonDown(HWND hWnd, UINT message,WPARAM wParam,LPARAM lParam); void OnRButtonDown(HWND hWnd, UINT message,WPARAM wParam,LPARAM lParam); void OnPaint(HWND hWnd, UINT message,WPARAM wParam,LPARAM lParam);
void OnDestory(HWND hWnd, UINT message,WPARAM wParam,LPARAM lParam);
//声明窗口类
class CFrameWnd
{
public:
HWND hWnd;
public:
int RegisterWindow();
void Create(LPCTSTR lpClasasName,LPCTSTR lpWindowName);
void ShowWindow(int nCmdShow);
void UpdateWindow();
};
//类中的函数
// RegisterWindow()设计窗口
int CFrameWnd::RegisterWindow()
{WNDCLASS wndclass;
wndclass.style=0;//窗口类型为默认类型
wndclass.lpfnWndProc=WndProc;//窗口处理函数为WndProc
wndclass.cbClsExtra=0;//窗口类无扩展
wndclass.cbWndExtra=0;//窗口实力无扩展
wndclass.hIcon=LoadIcon(NULL,IDI_QUESTION); //窗口的最小化图标为问号图标 wndclass.hCursor=LoadCursor(NULL,IDC_CROSS); //窗口采用十字光标
wndclass.hbrBackground=(HBRUSH)GetStockObject(DKGRAY_BRUSH); //窗口背景为深灰色 wndclass.lpszMenuName=NULL;//窗口中无菜单
wndclass.lpszClassName=lpszClassName;//窗口类名为“窗口示例”
//以下进行窗口类的注册
if (!RegisterClass(&wndclass))//如果注册失败则发出警告声音
{
MessageBeep(0);
return FALSE;
}
}
//创建窗口
void CFrameWnd::Create(LPCTSTR lpClassName,LPCTSTR lpWindowName)
{RegisterWindow();
hInst=hInstance;
hWnd=CreateWindow(lpszClassName,//窗口类名
lpWindowName,
WS_OVERLAPPEDWINDOW,//窗口的风格
CW_USEDEFAULT,
CW_USEDEFAULT,//窗口的左上角坐标为默认值
CW_USEDEFAULT,
CW_USEDEFAULT,//窗口的高和宽设为默认值
NULL,//此窗口无父窗口
NULL,//此窗口无主菜单
hInstance,//创建此窗口应用程序的当前句柄
NULL);//不使用该值
}
//显示窗口
void CFrameWnd::ShowWindow(int nCmdShow)
{::ShowWindow(hWnd,nCmdShow);
}
//注册窗口
void CFrameWnd::UpdateWindow()
{::UpdateWindow(hWnd);}
//声明应用程序类
class CWinApp
{
public:
CFrameWnd*m_pMainWnd;
CWinApp*m_pCurrentWnd;
public:
CWinApp();
~CWinApp();
virtual BOOL InitInstance(int nCmdShow);
int Run();
};
//类中的函数
//构造函数
CWinApp::CWinApp()
{
m_pCurrentWnd=this;
}
//初始化函数
BOOL CWinApp::InitInstance(int nCmdShow)
{
m_pMainWnd=new CFrameWnd;
m_pMainWnd->Create(NULL,"Windows 程序");
m_pMainWnd->ShowWindow(nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
//Run()函数
int CWinApp::Run()
{
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//构造函数
CWinApp::~CWinApp()
{
delete m_pMainWnd;
}
//声明窗口类CFrameWnd的派生类
class CMyWnd:public CFrameWnd
{
};
//声明窗口类CWinApp的派生类
class CMyApp:public CWinApp
{
public:
BOOL InitInstance(int nCmdShow);
};
//实现类中的函数
CMyApp::InitInstance(int nCmdShow)
{
CMyWnd*pMainWnd;
pMainWnd=new CMyWnd;
pMainWnd->Create(NULL,"派生类Windows程序");
pMainWnd->ShowWindow(nCmdShow);
pMainWnd->UpdateWindow();
return TRUE;
}
//构造CMyApp类对象
CMyApp myApp;
//重写AfxGetApp()函数
CWinApp*AfxGetApp()
{
return myApp.m_pCurrentWnd;
}
//主函数
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
int rt;
CWinApp*pApp=(CWinApp*)AfxGetApp();
pApp->InitInstance (nCmdShow);
rt=pApp->Run();
return rt;
}
//窗口函数
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) {
switch(message) //message为标示的消息
{
case WM_LBUTTONDOWN://放开鼠标左键时产生消息
OnLButtonDown(hWnd,message,wParam,lParam);
break;
case WM_PAINT://处理重画消息
OnPaint(hWnd,message,wParam,lParam);
break;
case WM_DESTROY: //退出
PostQuitMessage(0);
break;
default://默认时采用系统消息默认处理函数
return DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;
}
//消息响应函数
//响应鼠标单击消息
void OnLButtonDown(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) {
ShowText="湖南城市学院欢迎您的到来!";
InvalidateRect(hWnd,NULL,1);
}
//刷新消息
void OnPaint(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
hdc=BeginPaint(hWnd,&ps);
TextOut(hdc,300,250,ShowText,25);
EndPaint(hWnd,&ps);
}
//关闭消息
void OnDestory(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
PostQuitMessage(0);
}
运行后可得如下结果:
改变图标可得如下结果:
改变背景颜色可得如下结果:
十二、参考文献
[1] 揣锦华.面向对象程序设计与VC++实践.西安电子科技大学出版社,2005年
[2] 陈清华等。Visual C++课程设计案例精选与编程指导。东南大学出版社 2004年
[3] 陈清华.Visual C++课程设计案例精选与编程指导.东南大学出版社,2004年
[4] 陈维兴、林小茶,《C++面向对象程序设计教程》,清华大学出版社
[5] 谭浩强,《C语言程序设计》,清华大学出版社,2000年.
[6] 孙鑫 余安萍. VC++深入详解. 电子工业出版社.2006年
[7] 刘振安、刘燕君、孙忱,《C++语言课程设计》,机械工业出版社,2007年
[8] 严华峰. Visual C++课程设计案例精编. 北京:中国水利水电出版社,2002年
[9] 魏亮, 李春葆编著.Visual C++程序设计例学与实践.清华大学出版社 .2006
[10] 郑阿奇,丁有和.Visual C++教程.北京:机械工业出版社,2006