面向对象程序设计学习报告

时间:2024.3.19

面向对象程序设计学习报告

1. 程序简介

该程序名为drawcli.exe,是一款由微软公司开发的实现简单功能的绘图软件:具体功能为绘制线条,多边形,圆等基本图形,具有保存和打开文件功能。通过文件目录中的可执行程序进入程序,程序上方有:FILE、EDIT、VIEW、DRAW、OBJECT、WINDOW、HELP五个菜单;下方分别有NEW、OPEN、SAVE、CUT、COPY、PASTE、TOOL、PRINT、ABOUT、HELP等按钮供选择。下方为主要的图形编辑区,可通过新建创立。可以在图新编辑区绘制出直线,圆,椭圆,矩形,多边形等基本图形。对于图形可进行复制粘贴移位删除等操作,也可以改变图形相互之间的叠加顺序。图形编辑完成后可用SAVE按钮或FILE中的SAVE进行用户自定义路径的保存,关闭后便可通过正确的路径打开。程序中的ABOUT,和HELP菜单能够帮助用户了解和使用程序。

2. 程序分析

程序由15个.cpp文件组成,每一个.cpp文件都有一个对应的.h头文件。

(1) 程序中的类的定义以及继承

存在29自定义的新类,所有的类的定义均在头文件中完成。大部分的类的定义中都用到了两种或以上的访问限制符。如class CDrawDoc类中则用到了public和protect两种访问限制符。每

个类中大都定义了一定数量的构造函数,包含各种类型的构造函数。如类class CProperty中含有:CProperty(void) 函数和CProperty( DWORD dwID, const LPVOID pValue, DWORD dwType)函数类class CRectDlg中含有的构造函数。

CRectDlg(CWnd* pParent = NULL);前两个函数中前者是无参构造函数,后者则为一般构造函数,第三个构造函数为复制构造函数。与构造函数相对的,类中必然定义了与此类相应的析构函数,用于撤销该类,如class CDrawView中的函数virtual ~CDrawView()则为其对应的析构函数。类中还含有大量的一般成员函数,主要执行访问本累数据成员以及完成本类主要功能的作用。如class CDrawView类中的 void Select(CDrawObj* pObj, BOOL bAdd = FALSE); class CDrawDoc中的CDrawObjList* GetObjects() { return &m_objects; }等一些函数即是一般成员函数。其中CDrawObjList* GetObjects()函数的主要功能为返回一个地址值。关于this指针的运用,程序中主要将其进行隐式调用,一般在运算符重载,调用成员函数时用到。C++中的静态成员在此程序中亦有用到,如类class CDrawOleObj中的static BOOL c_bShowItems;则为静态数据成员。c++中用于建立类与类之间联系,提高程序执行效率,降低程序中消息在类与类之间传递而带来的开销的友元,包括友元函数和友元类在此程序中有运用,如类class COleDataSource中的friend class COleServerItem;即为友元类。

类的继承作为函数的主体部分,大多数为public继承方式,即公有继承方式。如类class AFX_NOVTABLE COleServerItem的定义则公有继承了类CDocItem,此程序中大都为public式继承,private继承和protect继承在此程序中较少运用。在定义完派生类后,按照一般的类的规则,需要编写对类中数据成员初始化的构造函数和撤销类时释放内存的析构函数,如类class CDrawPoly中就含有函数CDrawPoly()作为其构造函数,有virtual ~CDrawPoly()虚析构函数作为此类的析构函数。类class CDrawOleObj中也含有函数CDrawOleObj()作为其构造函数,virtual ~CDrawOleObj()作为其析构函数。派生类中的构造函数以及析构函数的类型与定义和运用的方式大致与基类中的构造函数和析构函数相似。不同之处主要在于构造函数中的初始化列表中的参数必须包括基类的初始化的参数。派生类中的一般成员函数定义与基类中相同,初始化方式中亦可以定义默认值或在函数调用时运用实参给形参赋值的方式。对于c++中允许的多继承在此程序运用则较少,大都是单继承的形式呈现在程序中。

(2) 程序中使用的常量的定义

如形如const CRect&rect常量引用的定义,形如void AssertValid() const;的常量函数的定义;而引用变量的使用,主要出现在函数自检传值时,形参的定义,主要为了实现函数自检的地址传输,有利于数据在函数与函数之间的传递。程序中存

在new运算符,即动态分配存储空间的使用,CDrawObj* pClone = new CDrawObj(m_position);语句中即通过new申请了一块CDrawObj类大小的内存空间给与CDrawObj指针,与此相对的,用到delete运算符将所申请的内存空间释放掉。对于作用域运算符::的使用,主要是在对类中已经申明的函数在类外进行定义时用到。如class CDrawDoc类中申明的构造函数CDrawDoc();在另一个头文件中进行定义,其定义形式为CDrawDoc::CDrawDoc()。用于指明CDrawDoc()函数的存在区域。

(3)

首先,在程序中运用到了运算符重载的形式。

如类class CString中的 friend CString AFXAPI operator+?语句中,同样是把“+” 符号进行了重载,不同的是上面是将符号重载为运算符函数,而后面则是把符号重载成为友元函数此两种形式有其各自的特点,重载成运算符函数时,由于有this指针的存在,参数的个数为运算符的目数少一,而重载成为友元函数时,由于友元函数不含this指针,参数表中的参数的数量与所重载的运算符的目数相同;这两种重载方式对与不同运算符有着各自选择,如单目运算符最好选用成员函数的重载方式,而双目运算符最好重载成为友元函数,这是因为有些情况不能重载成成员函数。例如此程序中的“+”符号都为重载成友元函数。

关于虚函数的运用,在此程序中有很多地方有用到。虚函数的运

用,主要为了运用到动态联编。如类class CMainFrame中存在三个虚函数:virtual ~CMainFrame(),virtual void AssertValid() const,virtual void Dump(CDumpContext& dc) const,其中还含有一个虚析构函数。


第二篇:面向对象程序设计实训报告


桂林电子科技大学信息科技学院 《面向对象程序设计》实训报告

学 号 0952100134

姓 名 刘嘉轩

指导教师:韩桂明 李登辉

月日

面向对象程序设计实训报告

面向对象程序设计实训报告

1

面向对象程序设计实训报告

宋体五号字

1.1 功能。

面向对象程序设计实训报告

2 所保存的所有记录,最终实现设计要求与任务。

3方案设计

3.1 方案论证

首先,新建工程MFC APPWizard,选择正确路径,以及应选择正确的对话框,然后,提出构想计划对话框进行设计分别设置信息要求如:学号,姓名,语文,数学等以及设置保存,查找,显示全部等功能信息框及编辑输入信息框。

其次,创建数据库,插入类,及建立类向导设定相应的信息等,通过上网及书籍查询相应的程序,定义包含头文件,书写函数及修改程序,编写代码,定义字符串定义类等繁琐工作,通过学习与应用VC++知识实现最终功能。

最后,通过分部编译进行调试程序,验证相应的功能,能否正常运行,实现设计要求与任务。当出现错误时,应及时修改及向老师及同学请教

3.2 工作原理

面向对象程序设计实训报告

4软件设计

5 制作与调试过程

// jiaxuanDlg.cpp : implementation file

//

#include "stdafx.h" //包含头文件

#include "jiaxuan.h"

#include "jiaxuanDlg.h"

#include "data.h"

#include "afxdb.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// Dialog Data

//{{AFX_DATA(CAboutDlg)

enum { IDD = IDD_ABOUTBOX };

//}}AFX_DATA

// ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

//}}AFX_VIRTUAL

// Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX) {

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

// No message handlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

///////////////////////////////////////////////////////////

//////////////////

// CJiaxuanDlg dialog

CJiaxuanDlg::CJiaxuanDlg(CWnd* pParent /*=NULL*/)

: CDialog(CJiaxuanDlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CJiaxuanDlg)

m_xuehao = _T("");

m_xingming = _T("");

m_yuwen = _T("");

m_shuxue = _T("");

m_cz_xuehao = _T("");

//}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); }

void CJiaxuanDlg::DoDataExchange(CDataExchange* pDX) {

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CJiaxuanDlg)

DDX_Control(pDX, IDC_LIST1, m_list);

DDX_Text(pDX, IDC_EDIT1, m_xuehao);

DDX_Text(pDX, IDC_EDIT2, m_xingming);

DDX_Text(pDX, IDC_EDIT3, m_yuwen);

DDX_Text(pDX, IDC_EDIT4, m_shuxue);

DDX_Text(pDX, IDC_EDIT5, m_cz_xuehao);

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CJiaxuanDlg, CDialog)

//{{AFX_MSG_MAP(CJiaxuanDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_BUTTON1, Onbaocun)

ON_BN_CLICKED(IDC_BUTTON2, Onchazhao)

ON_BN_CLICKED(IDC_BUTTON3, Onxianshi)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CJiaxuanDlg message handlers

BOOL CJiaxuanDlg::OnInitDialog()

{

CDialog::OnInitDialog();

m_list.InsertColumn(0,"学号");

m_list.InsertColumn(1,"姓名");

m_list.InsertColumn(2,"语文");

m_list.InsertColumn(3,"数学");

m_list.SetColumnWidth(0,50);

m_list.SetColumnWidth(1,50);

m_list.SetColumnWidth(2,50);

m_list.SetColumnWidth(3,50);

m_list.SetColumnWidth(4,50);

m_list.SetColumnWidth(5,50);

m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

CString strAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// Set the icon for this dialog. The framework does this automatically

// when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon

SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here

return TRUE; // return TRUE unless you set the focus to a control

}

void CJiaxuanDlg::OnSysCommand(UINT nID, LPARAM lParam) {

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog::OnSysCommand(nID, lParam);

}

}

// If you add a minimize button to your dialog, you will need the code below

// to draw the icon. For MFC applications using the document/view model,

// this is automatically done for you by the framework.

void CJiaxuanDlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon

dc.DrawIcon(x, y, m_hIcon);

}

else

{

CDialog::OnPaint();

}

}

// The system calls this to obtain the cursor to display while the user drags

// the minimized window.

HCURSOR CJiaxuanDlg::OnQueryDragIcon()

{

return (HCURSOR) m_hIcon;

}

void CJiaxuanDlg::Onbaocun()

{

data m_file;

CString s;

s.Format("select * from shuju");//调用数据库

if(!m_file.Open(AFX_DB_USE_DEFAULT_TYPE,s))

{

MessageBox("打开数据库失败!","数据库错误",MB_OK); return ;

}

UpdateData(); //更新列表

m_file.MoveFirst;

m_file.AddNew();

m_file.m_xh=m_xuehao;

m_file.m_xm=m_xingming;

m_file.m_yw=m_yuwen;

m_file.m_sx=m_shuxue;

m_file.Update();

m_file.Close();

AfxMessageBox("添加信息成功!");

return;

}

void CJiaxuanDlg::Onchazhao()

{

data m_sjk;//定义对象

UpdateData();

CString str;//定义字符串

if(m_cz_xuehao=="")

{

MessageBox("学号输入不能为空");

}

if(!m_cz_xuehao.IsEmpty())

{

str.Format("select * from shuju where xh m_cz_xuehao);//输入信息与数据库信息相比较 }

m_list.DeleteAllItems();

m_list.SetRedraw(FALSE); //重置

if(!m_sjk.Open(AFX_DB_USE_DEFAULT_TYPE,str)) {

MessageBox("打开数据库失败!"); = '%s' ",

return ;

}

int i=0;

while(!m_sjk.IsEOF())

{

m_list.InsertItem(i,m_sjk.m_xh);

m_list.SetItemText(i,1,m_sjk.m_xm); m_list.SetItemText(i,2,m_sjk.m_yw); m_list.SetItemText(i,3,m_sjk.m_sx);

i++;

m_sjk.MoveNext();

}

m_sjk.Close();

m_list.SetRedraw(TRUE);

}

void CJiaxuanDlg::Onxianshi()

{ data m_sj;//定义对象

m_list.DeleteAllItems();

m_list.SetRedraw(FALSE);

UpdateData(TRUE);

CString m_chuan;

m_chuan.Format( "select * from shuju");

if(!m_sj.Open(AFX_DB_USE_DEFAULT_TYPE,m_chuan)) {

MessageBox("打开数据库失败!");

return ;

}

int i=0;

while(!m_sj.IsEOF())

{

m_list.InsertItem(i,m_sj.m_xh);

m_list.SetItemText(i,1,m_sj.m_xm);

m_list.SetItemText(i,2,m_sj.m_yw);

m_list.SetItemText(i,3,m_sj.m_sx);

i++;

m_sj.MoveNext();

}

m_sj.Close();

m_list.SetRedraw(TRUE);

}

6 实训心得体会

通过本次学习面向对象程序设计,成绩统计系统实训,通过对C++的学习,掌握基本的编程方法,利用课程设计的机会掌握在理论课堂上不便掌握的技能,学到了很多知识,增强了个人的动手能力,熟悉了C++软件的具体应用,也学到了不少的新知识,在遇到问题是可以借阅相应资料,选择合理的方法解决问题,扩展自身的知识面。懂得如何应用资源,及快速查阅资料,通过一定的时间收集资料,系统设计,编写代码和程序测试,我的实训终于完成了,实现成绩统计系统的显示全部、编辑、查找及保存功能。成绩统计系统初步得到完善与应用,充分发挥自己的创新能力,加强对问题分析和解决的能力。利用已学的基础知识结合实际操作提高自学习能力,设计一个《成绩统计管理》,进一步熟悉面向对象编程中类的概念、类的封装、继承的实现方式,在实训时一边看书,一边写程序,看看是不是书上说的那样。但遇到不解的时候向他人请教,了解系统开发的需求分析、类层次设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对C++的理解与Visual C++环境的使用;逐步熟悉程序设计的方法,并养成了良好的编程习惯。

虽然本次实训已经结束,但是真正的学习才现在开始,因为此次实训也暴漏自己本身的缺点与不足。所以在以后的学习当中依然要努力学习,认真对待,细心编程,谦虚请教。

更多相关推荐:
《面向对象程序设计(课程设计)》报告

福建农林大学计算机与信息学院课程名称课题名称姓名学号专业年级指导教师职称计算机类课程设计报告面向对象程序设计课程设计猜数字游戏计算机科学与技术20xx级讲师20xx年11月面向对象程序设计课程设计成绩评定表I目...

java 面向对象程序设计课程设计报告

面向对象程序设计课程设计报告题目门禁系统的设计与实现系(院)计算机科学技术系专业软件技术班级20##级3班学生姓名学号指导教师二〇##年六月十二日团队介绍(一)第六小组成员构成组长:组员:(二)成员的不同分工及…

《面向对象程序设计》课程设计报告

面向对象程序设计课程设计报告题目职工信息管理小型公司工资管理系统院系专业班级学号学生姓名小组成员20xx年9月6日一引言本题对程序有如下要求试建立一个类Worker用于描述职工对象具体要求如下私有数据成员int...

《C++面向对象程序设计》课程设计报告

C面向对象程序设计课程设计报告题目分数计算器设置班级专业计算机科学与技术学号K031241521姓名周林指导教师小组成员周林张齐满二O一三年10月15日一课程设计问题描述分数计算器设计是高等学校教务管理的重要组...

《面向对象程序设计》课程设计报告模板

面向对象程序设计程序设计报告课程设计2020学年第学期设计题目职工工资管理系统设计院系计算机科学与信息工程学院专业班级学号学生姓名设计时间20年1月日20xx年1月日指导教师提交日期20年月日1面向对象程序设计...

面向对象程序设计实验报告

面向对象程序设计之课程设计上海电力学院课题名称院系专业学号姓名时间地点指导教师课程设计报告面向对象程序设计20xx20xx学年第一学期模仿ATM机存取款管理系统设计电子与信息工程学院通信工程20xx年1月12日...

《面向对象程序设计》课程设计报告书(模板)

面向对象程序设计课程设计报告书设计题目成绩管理系统指导老师杨雄学生学号083410148学生姓名张洋洋同组人员崔安超王龙辉魏彦浩时间20xx年11月29日目录第1章选题211题目背景212系统实现的具体分工21...

面向对象课程设计任务书

课程设计报告课程名称课题名称专业班级学号20xx03010308姓名杜云龙指导教师20xx年月日湖南工程学院课程设计任务书课程名称面向对象程序设计课题学生考勤管理系统专业班级计算机0803学号20xx03010...

面向对象程序设计课程设计

课程设计报告课程名称面向对象程序设计课程设计任课教师尹剑伟设计题目网络聊天室所学专业信息管理与信息系统二年制班级学号0916150320学生姓名黄萌萌报告完成日期20xx年01月10日一题目描述及功能要求实现的...

面向对象程序设计实验报告05

课程实验报告课程名称面向对象程序设计实验名称面向对象的整型队列编程院系计算机科学与技术专业班级学号姓名指导教师月日面向对象程序设计实验报告一需求分析1题目要求整型队列是一种先进后出的存储结构对其进行的操作通常包...

面向对象程序设计实验报告

面向对象程序设计实验报告姓名学号班级专业学院实验三函数的应用一实验目的掌握函数的定义和调用方法练习重载函数使用练习函数模板的使用练习使用系统函数二实验步骤编写函数floatConvertfloatTempFer...

Java面向对象程序设计语言课程设计指导书

山东建筑大学商学院电子商务专业Java面向对象程序设计语言课程设计实验指导书一对学生的基本要求1理论联系实际严肃认真实事求是的科学态度和勇于探索的创新精神2运用所学基础理论与专业知识分析和解决实际问题培养独立思...

面向对象程序设计课程设计报告(29篇)