Объектно-ориентированное программирование Автобусы и маршруты
Реферат - Компьютеры, программирование
Другие рефераты по предмету Компьютеры, программирование
µжду таблицами Race и Path. Содержит два поля: первое - уникальный идентификатор рейса, второе - уникальный идентификатор пути.
Название
тип
race_ID
счетчик
path_ID
поле memo
- Station - таблица, размещающая информацию об остановочных пунктах автобусов. Имеет два поля - это уникальный идентификатор остановочного пункта, однозначно определяющий его во всем множестве других остановочных пунктах, и поле с его названием.
Название
тип
station_ID
длинное целое
name
длинное целое
- Time - таблица, размещающая информацию о временах отправлений автобусов. Автобусы, привязанные к одному рейсу, в течении определенного периода могут неоднократно отправляться в рейс в разные часы, что и отражается структурой данной таблицы. Таблица состоит из 3 полей: первое - это уникальный идентификатор времени, однозначно определяющий его во всем множестве других времен отправлений, второе поле - это идентификатор автобуса, свеянный с таблицей Bus (поскольку таблица Bus связанна с Time связью “один ко многим”, в Time может присутствовать несколько идентификаторов одного автобуса), третье поле - время отправления.
Название
тип
time_ID
счетчик
bus_ID
длинное целое
time
длинное целое
- Type - таблица, размещающая информацию о типах автобусов (классов). Имеет два поля - это уникальный идентификатор типа, однозначно определяющий его во всем множестве других типов, и поле с названием типа.
Название
тип
busType_ID
счетчик
name
поле memo
Схема данных представлена в таблице 1. Она отражает сущности, а также связи и их типы.
Таблица 1 - схема данных
4. Описание основных классов
На рисунке 1 изображена диаграмма классов. Она отражает все классы проекта. Практически все классы являются пользовательскими. Они переопределены от встроенных классов путем однократного и множественного наследования.
Класс CMyDBVariant представляет собой объект, способный хранить различные типы данных. Он незаменим для работы с базой данный. Его прародителем стал класс CDBVariant. Поскольку возможностей базового класса оказалось недостаточно, пришлось его переопределить, вводя дополнительные переменные m_cstring для передачи строк типа Cstring и m_time для передачи времени типа CTime.
CMyDBRecordset новый класс от CDBRecordset. Более гибок, нежели стандартный класс. Позволяет легко, без внедрения дополнительных переопределений, на месте, быстро создать представление сущности. В него добавлены: Count член класса, хранящий количество записей (это сделано в силу того, что метод GetCount не возвращает реального количества), DefineRealCount метод, определяющий Count. Также в этот класс входит fieldnames и fieldValues, позволяющий не передавать непосредственно переменные в метод DoFieldExchange а держать их прямо в классе в качестве его членов, что значительно упрощает код и способ обращения к полям представления.
Полное описание классов находиться в листинге программы.
Рисунок 1 - Диаграмма классов5. Листинг программы
CAboutForm.cpp
#include "stdafx.h"
#include "../main.h"
#include "CAboutForm.h"
CAboutForm::CAboutForm(CWnd* pParent):CDialog(CAboutForm::IDD,pParent){
//{{AFX_DATA_INIT(CAboutForm)
//}}AFX_DATA_INIT
}
void CAboutForm::DoDataExchange(CDataExchange* pDX){
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutForm)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutForm, CDialog)
//{{AFX_MSG_MAP(CAboutForm)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
CAboutForm.h
#if !defined(AFX_CABOUTFORM_H__09D6634D_16A6_44E9_849C_AD1B2E71646D__INCLUDED_)
#define AFX_CABOUTFORM_H__09D6634D_16A6_44E9_849C_AD1B2E71646D__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// CAboutForm.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CAboutForm dialog
class CAboutForm : public CDialog
{
// Construction
public:
CAboutForm(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CAboutForm)
enum { IDD = AboutForm };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutForm)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAboutForm)
// NOTE: the ClassWizard will add member functions here
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_CABOUTFORM_H__09D6634D_16A6_44E9_849C_AD1B2E71646D__INCLUDED_)
CBusForm.cpp
#include "stdafx.h"
#include "../main.h"
#include "CBusForm.h"
#include "CTypeForm.h"
#include "../ExLibrary/CMyRecordset.h"
char* toString(int value,int radix=10);
CString IsEmpty_CEdit(CEdit* ctrl);
void sqlFilter(CString* value);
bool isUnique(CString sql,CString fields);
bool isRelate(CString sql,CString fields);
void Load_List(CString sql,CString fields,CListBox* ctrl,void clearIdxFunc(void),void initIdxFunc(int),void setIdxFunc(int,int));
void Load_List(CString sql,CString fields,CComboBox* ctrl,void clearIdxFunc(void),void initIdxFunc(int),void setIdxFunc(int,int));
CBusForm::CBusForm(CWnd* pParent):CDialog(CBusForm::IDD, pParent){
//{{AFX_DATA_INIT(CBusForm)
//}}AFX_DATA_INIT
}
void CBusForm::DoDataExchange(CDataExchange* pDX){
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBusForm)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBusForm, CDialog)
//{{AFX_MSG_MAP(CBusForm)
ON_BN_CLICKED(Button_showBusType, showBusType_onClick)
ON_BN_CLICKED(Button_DeleteBus, DeleteBus_onClick)
ON_BN_CLICKED(Button_EditBus, EditBus_onClick)
ON_BN_CLICKED(Button_AddBus, AddBus_onClick)
ON_BN_CLICKED(IDOK, OK_onClick)
ON_WM_CLOSE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/* ============================
===== User realization =====
============================ */
CListBox* pList_Bus;
CComboBox* pComboBox_BusType;
CComboBox* pComboBox_RaceInBus;
extern CDa