程序设计实践

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

动态生成 (Dynamic Creation)
重载CObject类成员函数 CObject * CreateObject(void)
永久保存 (Persistence)
信息映射 (Message Mapping)
实现成员函数 void Serialize (CArchive & ar)
命令传递 (Command Routing)
程序设计实践
计算机科学与工程学院 孙学波
第四章 面向对象实用系统分析与设计
MFC程序设计知识小结
Windows程序设计基础
MFC程序框架中的主要类
CObject类: MFC中大多数类的抽象基类,它提供序列化、 运行时信息,诊断和调试支持等。
CWinapp类: 代表应用程序的核心。
CDocument类: 文档类,用于组织用户数据。
(2)文档类结构
m_List
CTraveler Traveler01 Traveler02 … Traveler n
CBusInfo 07051601 07051602 …
其他的设计方案?
CTraveler
CBusInfo
+mm__sLtirsBt;usID : +m_StartTime
C: CSTtriimnCgBeusInfo
(3) MDI应用程序
文档/视结构、多文档、多 视图等
(4) 非文档视图结构程序
对话框的应用程序 或 以SDI和MDI为基础,不使 用文档/视结构。
第四章 面向对象实用系统分析与设计
使用面向对象技术设计并实现一个题目为《汽车客运 公司售票系统》小型管理信息系统案例。
本章内容提要:
需求分析 系统功能结构设计 系统中各MFC类的设计和实现 主要算法 界面设计 案例分析
CTraveler::CTraveler( CString strBusID,CString TravelID,CString Name,CTime DateTime,int nSeat,CBusInfo* pBusInf)
{
m_strBusID=strBusID;
//班次号
m_TravelID=TravelID;
int nSeat, int nSeatSaled, float fPrice); 构造、析构函数
CBusInfo(CBusInfo & obj);
virtual ~CBusInfo(); void Serialize(CArchive& ar);
序列化函数
};
2 班次类的实现
IMPLEMENT_SERIAL(CBusInfo,CObject,1); CBusInfo::CBusInfo() //默认构造函数 { }
班次对象地址,用于 //////班 身 姓表关次 份 名示系号 证号旅(客车与票车)次。之间的
CTime m_DateTime;
//购票日期
int
m_nSeat;
//座位号
CBusInfo *m_pBusInfo;
//班次指针
};
4 旅客类的实现
IMPLEMENT_SERIAL(CTraveler,CObject,1); CTraveler::CTraveler() { }
CAboutDlg
MFC SDI程序框架
CWinApp 1
CSingleDocTemplate
**
1*
*
CFormView
CDocument CMainFrame
CTicketSalingApp CTicketSalingView CTicketSalingDoc
CBuyTicketDlg
*
1
*
CReturnTicketDlg
+m_Destination B: uCsS0t7r0in51g601 +m_nSeat : int Bus07051602 +…m_nSeatSaled …: int +m_nPrice : int Bus0705160s +CBusInfo()
+CBusInfo(inout obj : CBusInfo)
CBusInfo
CTraveler
框架类的派生类
4.2 详细设计方案
4.2.1 实体类设计
1 班次类设计;
class CBusInfo : public CObject
CObject类
{
DECLARE_SERIAL(CBusInfo);
序列化定义宏
private:
CString m_strBusID; CTime m_StartTime; CString m_Destination;
//身份证号
m_Name =Name ;
//姓名
m_DateTime=DateTime;
//购票日期
m_nSeat =nSeat ;
//座位号
m_pBusInfo =pBusInfo;
}
4 旅客类的实现
void CTraveler::Serialize(CArchive& ar) {
CObject::Serialize( ar); if (a限r.制IsS(toCorinnsgt(r)a) in): { CTraveler类中数据成员CBusInfo *m_pBusInfo是
+Serialize(inout ar : CArchive)
Travelers1
Travelers2
////班终次点号城班、市次发、类车时数间据成员
int m_nSeat; m_nSeatSaled;
//座位数量、已售数量
float m_fPrice;
//票价
public: CBusInfo();
默认构造函数
CBusInfo(CString strBusID, CTime StartTime,CString Destination,
4.1 项目需求
项目名称:汽车客运公司售票系统 业务需求:
某客运公司每日向10个城市发一个直达班车 (中途不停车)。每天都发售今明后3天的客票。
功能需求:
1 数据存储需求 该系统需要磁盘上存储以下信息: (1)今、明、后3天每个班次的基本信息, 包括:每个班次的班次号、发车时间、终点城市,票价 和座位数量; (2)已发售每个班次的旅客登记表,包括: 身份证号、姓名、座号。
序列化 DECLARE_SERIAL IMPLEMENT_SERIAL
消息映射 DECLARE_MESSAGE_MAP BEGIN_MESSAGE_MAP
ON 消息名(参数…) END_MESSAGE_MAP
支持 RUNTIMECLASS 机制 重载IsKindOf() 方法
支持动态类型识别 重载CreateObject () 方法
>>m_Name>>m_nSeat; } }
3 文档类的设计
(1)文档类设计:
使旅 客 异用客票构M表:FC:从即类除旅C库T旅客中ra客与的veC数班lePrt据次r对L外之i象st,间类和对还的C象存关B存u储系s储I一导n班fo个出次对类。对象和旅客类对象。 C象puB共bulis同cI:n存fo储对于象同指一针个,现指性向表该中旅,客但的表班中次 对 存C象储Pt,的rL用是ist 于这m_表些Li示对st; 旅象客的与地班址次。之间的关系。
CWnd类:
图形用户界面对象的基类。
CMainFrame类: 应用程序主窗口类。
CChildFrame类: 应用程序子窗口类。
CView类:
视图类,用于显示和操作文档中的数据。
CTemplateDoc类:文档模版基类。
CMultiTemplateDoc和CSingleTemplateDoc类。
WM_COMMAND消息传递机制
使用消息映射表替代窗口函数, 降低程序设计的难度。
第四章 面向对象实用系统分析与设计
MFC应用程序常用的宏
动态类型识别 DECLARE_DYNAMIC IMPLEMENT_DYNAMIC
动态生成 DECLARE_DYNCREATE IMPLEMENT_DYNCREATE
+~CBusInfo()
+Serialize(inout ar : CArchive)
Ticket 1 0..*
CTraveler * TravelerList; Int n;//旅客列表
Traveler01
TraCvTerlaevr0e2ler
++mm__sTtrraBvue…slIIDD
: :
CString CString
m_StartTime = StartTime;
m_Destination = Destination;
m_nSeat
= nSeat;
m_nSeatSaled = nSeatSaled;
m_fPrice
= fPrice;
}
2 班次类的实现
序列化函数
保存数据
void CBusInfo::Serialize(CArchive& ar)
第四章 面向对象实用系统分析与设计
MFC程序运行机制
定义全局变量theApp 重载成员函数InitialInstance()
重载CObject类成员函数
MFC程序的初始化过程 BOOL IsKindOf(CRunTimeClass *)
动态类型识别 RTTI (Runtime Type Identification)
一ar个<<指m向_sCtrBBusuIsnIfDo<类<m型_对Tr象av的el内ID存<<地m址_D,a将te其Tim数e值 写<入<磁m_盘N文am件e是<<毫m无_n意S义ea的t; 。这个成员的负值是在 } 从文件中读入旅客类数据后再将相应的CBusInfo类 els型e 对象地址付给这个数据成员。 { ar>>m_strBusID>>m_TravelID>>m_DateTime
+m_NameTr: aCvSetlreinrng
+m_DateTime : CTime
+m_nSeaTt r: ainvteler11
+m_pBusTInrfaov:eCleBru1s2Info *
+CTravel…er() ++C~CTTraravevelTelerr(ari(nv)oeuletro1bnj : CTraveler)
CTime dDateTime, int nSeat);
CTraveler(CTraveler & obj);
virtual ~CTraveler();
virtual void Serialize(CArchive& ar);
public: CString CString CString
m_strBusID; m_TravelID; m_Name;
序列化基类 CObject类
{来自百度文库
CObject::Serialize( ar);
if (ar.IsStoring())
{
ar<<m_strBusID<<m_StartTime<<m_Destination<< m_nSeat
<<m_nSeatSaled<<m_fPrice;
}
else
{
ar>>m_strBusID>>m_StartTime>>m_Destination>>m_nSeat
4.1 项目需求
2 主要功能
创建存储一天的每个班次的基本信息的存储系统。 创建每个班次的旅客登记表。 办理售票(座号不能重复) 办理退票(删除旅客信息) 查询指定班次的剩余票数和座位号 输出指定班次的旅客登记表
4.2 详细设计方案
1 系统总体设计方案:使用MFC中SDI程序框架。
支持动态类型识别 支持动态生成 重载Serialize () 方法
支持信息映射 支持动态生成 支持Serialize () 方法
第四章 面向对象实用系统分析与设计
MFC应用程序类型
对话框界面设计、成员变 量、消息映射。
(1) 基于对话框的应用程序
(2) SDI应用程序
文档/视结构、用户界面
资源、文本和图形输出、 序列化文档保存。
>>m_nSeatSaled>>m_fPrice;
}
}
读入数据
3 旅客类设计
class CTraveler : public CObject
{
DECLARE_SERIAL(CTraveler);
public:
CTraveler();
CTraveler( CString strBusID,CString TravelID,CString strName,
序列化实现宏
CBusInfo::CBusInfo( CString strBusID,CTime StartTime,CString
Destination,int nSeat,int nSeatSaled,
float fPrice)
{ //构造函数,用于创建对象。
m_strBusID = strBusID;
相关文档
最新文档