База данных "Дни рождения"

Автор работы: Пользователь скрыл имя, 13 Апреля 2013 в 11:06, курсовая работа

Описание

Целью данной курсовой работы является создание базы данных «Дни рождения».
Программа, разрабатываемая в ходе выполнения работы, должна выполнять следующие функции:
Создание базы данных;
Корректировка записей;
Вывод базы данных на экран и на печать.
Структура данных, описываемая в программе должна содержать следующие записи:
Фамилия, имя, отчество;
Дата рождения;
Время рождения.

Содержание

Введение 3
1. Описание технологий, используемых при разработке 4
2. Описание структур данных 5
3. Описание программы 6
4. Пример выполнения программы 8
Заключение 10
Список использованных источников 11

Работа состоит из  1 файл

курсовая ООП.doc

— 175.50 Кб (Скачать документ)

Содержание

 

 

 

Введение

 

Целью данной курсовой работы является создание базы данных «Дни рождения».

Программа, разрабатываемая в ходе выполнения работы, должна выполнять  следующие функции:

    1. Создание базы данных;
    2. Корректировка записей;
    3. Вывод базы данных на экран и на печать.

Структура данных, описываемая в  программе должна содержать следующие  записи:

    1. Фамилия, имя, отчество;
    2. Дата рождения;
    3. Время рождения.

Разрабатываемое приложение не использует стандартных СУБД, поэтому представляет собой интерес, как пример программы, вручную манипулирующей данными.

 

1. Описание технологий, используемых при разработке

 

Согласно заданию, для разработки используется язык программирования С++.

Поскольку использование стандартных  СУБД не допускается, следует выбрать  или создать технологию, которая позволяет управлять массивами данных произвольного вида, а также сохранять эти данные в файлы и извлекать их из файлов.

Структура данных должна производить  следующие операции с записями:

    • Создание новой структуры;
    • Удаление записи по индексу или по значению;
    • Добавление записи;
    • Доступ к записи по индексу: чтение или запись.

Для выполнения всех указанных операций был выбран класс vector из стандартной библиотеки шаблонов С++. Vector – это класс-контейнер, способный хранить произвольное число записей указанного типа, и обеспечивать произвольный доступ к ним.

Для записи данных в файл и чтения из файла используются ifstream (чтение) и ofstream (запись). Это базовые классы для работы с файлами, запись и чтение отдельных полей записи осуществляется с их использованием вручную.

Помимо прочего, требуется создать  интерфейс пользователя. Для этого  используется технология MFC.

MFC – Microsoft Foundation Classes – технология, позволяющая упростить построение пользовательских интерфейсов путём введения классов, соответствующих отдельным визуальным компонентам, таким как кнопки, окна и другие.

С помощью этой технологии удобно организовать ввод и вывод посредством  визуальных компонент.

2. Описание структур данных

 

Для хранения и обработки данных в программе созданы структура данных о человеке и класс для работы с данными.

Структура Human содержит информацию об объекте, описанную в задании. Помимо прочего, данная структура содержит:

    • Конструктор, обнуляющий все данные;
    • Операторы сравнения и равенства;
    • Оператор присваивания.

Класс CLib содержит поля и методы, необходимые для работы с данными:

    • Объект класса vector, хранящий в себе список объектов;
    • Конструктор, в котором производится проверка на существование файла «file.txt», и, если файл существует, то производится загрузка данных из него в список;
    • Метод Save, предназначенный для записи данных в файл.

 

3. Описание программы

 

Главное диалоговое окно программы в режиме конструктора приведено на рисунке 1.

Рисунок 1 – Главное диалоговое окно в режиме конструктора

 

Окно состоит  из следующих компонент:

    • Кнопка «Добавить день рождения». При нажатии на эту кнопку открывается окно диалога добавления новой записи (см. рис. 2);
    • Кнопка «Удалить выделенный». В случае, если в таблице выбрана одна из записей, программа удаляет выбранную запись при нажатии этой кнопки;
    • Кнопка «Изменить выделенный». В случае, если в таблице выбрана одна из записей, программа откроет окно для изменения этой записи (см. рис. 2);
    • Таблица, в которой отображён список записей в базе данных;
    • Кнопка «Печать», которая выводит на печать список всех записей в базе данных.

Для создания и редактирования записей  в базе данных, в прогремме имеется  соответствующее окно (см. рис. 2).

Рисунок 2 – Окно редактирования в  режиме констркутора

 

Данное  окно предназначено для создания и редактирования записей. При нажатии кнопки «ОК» приложение завершает выбранное действие, при нажатии кнопки «Отмена» - отменяет его.

 

4. Пример выполнения  программы

 

При запуске  программы на экране появляется главное  окно (рис. 3).

Рисунок 3 – Главное окно программы

 

При нажатии на кнопку «Добавить  день рождения» на экране появляется окно добавления (рис. 4).

Рисунок 4 – Окно добавления

 

При нажатии на кнопку «Удалить выделенный»  программа удаляет выбранный  элемент, если он есть.

При нажатии на кнопку «Изменить  выделенный» программа предлагает отредактировать выбранный элемент  таблицы (рис. 4).

Рисунок 4 – Редактирование записи

 

При нажатии на кнопку «Печать» программа  осуществляет печать, используя принтер  по умолчанию.

 

Заключение

 

В результате выполнения курсовой работы было разработано приложение, демонстрирующее  работу с базой данных без использования  стандартных СУБД.

Возможности приложения:

    • Хранение данных в файле, загрузка и сохранение в файл;
    • Графический интерфейс пользователя;
    • Добавление записей в базу данных;
    • Удаление записей из базы данных;
    • Редактирование выбранной записи;
    • Печать всех записей.

 

Список использованных источников

 

    1. Visual C++ на примерах (+ CD-ROM): Галина Довбуш, Анатолий Хомоненко — Москва, БХВ-Петербург, 2007 г.- 528 с.
    2. Березин Б.И., Березин С.Б. Начальный курс С и C++. — М.: ДИАЛОГ-МИФИ, 2006.
    3. Вирт Н. Алгоритмы и структуры данных. — М.: Мир, 2009.
    4. К. Джамса. Учимся программировать на языке C++: Пер. с англ. - Москва: Мир, 2007. 320с.
    5. В.В. Подбельский. Язык C++: Учебное пособие. - Москва: Финансы и статистика, 2005. 560с.

 

Приложение 1 – Текст  программы

 

#include <memory.h>

 

 

struct Human

{

char Name[50], bDate[50], bTime[50];

Human()

{

memset(this, 0, sizeof(Human));

}

bool operator <(Human & arg)

{

return strcmp(Name, arg.Name) < 0;

}

bool operator >(Human & arg)

{

return strcmp(Name, arg.Name) > 0;

}

bool operator ==(Human & arg)

{

return strcmp(Name, arg.Name) == 0;

}

bool operator >= (Human &arg)

{

return this->operator>(arg) || (*this == arg);

}

bool operator <= (Human &arg)

{

return this->operator<(arg) || (*this == arg);

}

Human &operator=(Human &arg)

{

memcpy(this, &arg, sizeof(Human));

return *this;

}

};

 

#include <stdlib.h>

#include <vector>

#include <fstream>

using namespace std;

 

class CLib

{

public:

vector <Human> Elems;

 

CLib()

{

ifstream f("file.txt");

if (!f.is_open()) return;

while (!f.eof())

{

Human Elem;

f.getline(Elem.Name, 256);

f.getline(Elem.bDate, 256);

f.getline(Elem.bTime, 256);

Elems.insert(Elems.end(), Elem);

}

f.close();

}

 

void Save()

{

ofstream f("file.txt");

DWORD i;

for (i = 0; i < Elems.size(); i++)

{

if (i > 0) f<<endl;

f<<Elems[i].Name<<endl<<Elems[i].bDate<<endl<<Elems[i].bTime;

}

f.close();

}

};

 

 

 

 

// MainDlg.cpp : файл реализации

//

 

#include "stdafx.h"

#include "Kurs.h"

#include "MainDlg.h"

#include "afxdialogex.h"

 

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

 

 

// Диалоговое окно CAboutDlg используется для описания сведений о приложении

 

class CAboutDlg : public CDialogEx

{

public:

CAboutDlg();

 

// Данные диалогового  окна

enum { IDD = IDD_ABOUTBOX };

 

protected:

virtual void DoDataExchange(CDataExchange* pDX);    // поддержка DDX/DDV

 

// Реализация

protected:

DECLARE_MESSAGE_MAP()

};

 

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)

{

}

 

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

}

 

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)

END_MESSAGE_MAP()

 

 

// диалоговое окно CMainDlg

 

 

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

: CDialogEx(CMainDlg::IDD, pParent)

{

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

}

 

void CMainDlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

DDX_Control(pDX, IDC_LIST1, m_ListCtl);

}

 

BEGIN_MESSAGE_MAP(CMainDlg, CDialogEx)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_ADD, &CMainDlg::OnBnClickedAdd)

ON_BN_CLICKED(IDC_DEL, &CMainDlg::OnBnClickedDel)

ON_BN_CLICKED(IDC_EDIT, &CMainDlg::OnBnClickedEdit)

ON_BN_CLICKED(IDC_PRINT, &CMainDlg::OnBnClickedPrint)

END_MESSAGE_MAP()

 

 

// обработчики сообщений  CMainDlg

 

BOOL CMainDlg::OnInitDialog()

{

CDialogEx::OnInitDialog();

 

// Добавление пункта "О  программе..." в системное меню.

 

// IDM_ABOUTBOX должен быть в пределах системной команды.

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

 

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

BOOL bNameValid;

CString strAboutMenu;

bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);

ASSERT(bNameValid);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

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

}

}

 

// Задает значок для  этого диалогового окна. Среда  делает это автоматически,

//  если главное  окно приложения не является  диалоговым

SetIcon(m_hIcon, TRUE);   // Крупный значок

SetIcon(m_hIcon, FALSE);  // Мелкий значок

 

// TODO: добавьте дополнительную  инициализацию

m_ListCtl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);

m_ListCtl.InsertColumn(0, _T("ФИО"), LVCFMT_LEFT, 250);

m_ListCtl.InsertColumn(1, _T("Дата  рождения"), LVCFMT_LEFT, 100);

m_ListCtl.InsertColumn(2, _T("Время  рождения"), LVCFMT_LEFT, 100);

IsFilter = false;

FillTable();

return TRUE;  // возврат значения TRUE, если фокус не передан элементу управления

}

 

void CMainDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

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

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialogEx::OnSysCommand(nID, lParam);

}

}

 

// При добавлении кнопки  свертывания в диалоговое окно  нужно воспользоваться приведенным  ниже кодом,

//  чтобы нарисовать  значок. Для приложений MFC, использующих  модель документов или представлений,

//  это автоматически  выполняется рабочей областью.

 

void CMainDlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // контекст  устройства для рисования

 

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

 

// Выравнивание значка  по центру клиентского прямоугольника

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;

 

// Нарисуйте значок

dc.DrawIcon(x, y, m_hIcon);

}

else

{

CDialogEx::OnPaint();

}

}

 

void CMainDlg::FillTable()

{

m_ListCtl.DeleteAllItems();

Human k;

DWORD i;

int n = 0;

for (i = 0; i < Lib.Elems.size(); i++)

{

m_ListCtl.InsertItem(n, _T(""));

m_ListCtl.SetItemText(n, 0, CA2CT((const char*)Lib.Elems[i].Name));

m_ListCtl.SetItemText(n, 1, CA2CT((const char*)Lib.Elems[i].bDate));

m_ListCtl.SetItemText(n, 2, CA2CT((const char*)Lib.Elems[i].bTime));

n++;

}

}

 

// Система вызывает  эту функцию для получения  отображения курсора при перемещении

//  свернутого окна.

HCURSOR CMainDlg::OnQueryDragIcon()

{

return static_cast<HCURSOR>(m_hIcon);

}

 

#include "EditDlg.h"

 

void CMainDlg::OnBnClickedAdd()

{

// Добавление нового  кинотеатра

CEditDlg *d = new CEditDlg();

INT_PTR nResponse = d->DoModal();

if (nResponse == IDOK)

{

Lib.Elems.insert(Lib.Elems.end(), d->k);

}

Lib.Save();

FillTable();

delete d;

}

 

 

void CMainDlg::OnBnClickedDel()

{

if (IsFilter) return;

POSITION pos = m_ListCtl.GetFirstSelectedItemPosition();

if (!pos) return;

DWORD sel = m_ListCtl.GetNextSelectedItem(pos);

Lib.Elems.erase(Lib.Elems.begin() + sel);

Lib.Save();

FillTable();

}

 

 

void CMainDlg::OnBnClickedEdit()

{

if (IsFilter) return;

POSITION pos = m_ListCtl.GetFirstSelectedItemPosition();

if (!pos) return;

DWORD sel = m_ListCtl.GetNextSelectedItem(pos);

CEditDlg *d = new CEditDlg();

d->k = Lib.Elems[sel];

INT_PTR nResponse = d->DoModal();

if (nResponse == IDOK)

{

Lib.Elems[sel] = d->k;

}

Lib.Save();

FillTable();

delete d;

}

 

void CMainDlg::OnBnClickedPrint()

{

//Печать БД

ofstream f("temp.txt");

f<<"ФИО\tДата рождения\tВремя  рождения"<<endl;

int i;

for (i = 0; i < Lib.Elems.size(); i++)

{

f<<Lib.Elems[i].Name<<"\t"<<Lib.Elems[i].bDate<<"\t"<<Lib.Elems[i].bTime<<endl;

}

f.close();

ShellExecute(0, "print", "temp.txt", "", "", SW_SHOW);

}

 

 

// EditDlg.cpp: файл реализации

//

 

#include "stdafx.h"

#include "Kurs.h"

#include "EditDlg.h"

#include "afxdialogex.h"

 

 

// диалоговое окно CEditDlg

 

IMPLEMENT_DYNAMIC(CEditDlg, CDialogEx)

 

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

: CDialogEx(CEditDlg::IDD, pParent)

{

 

}

 

CEditDlg::~CEditDlg()

{

}

 

void CEditDlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

DDX_Control(pDX, IDC_NAME, m_Name);

DDX_Control(pDX, IDC_EDIT2, m_bDate);

DDX_Control(pDX, IDC_EDIT3, m_bTime);

}

 

 

BEGIN_MESSAGE_MAP(CEditDlg, CDialogEx)

ON_BN_CLICKED(IDOK, &CEditDlg::OnBnClickedOk)

END_MESSAGE_MAP()

 

 

// обработчики сообщений  CEditDlg

 

 

void CEditDlg::OnBnClickedOk()

{

m_Name.GetWindowTextA(k.Name, 50);

m_bTime.GetWindowTextA(k.bTime, 50);

m_bDate.GetWindowTextA(k.bDate, 50);

CDialogEx::OnOK();

}

 

 

BOOL CEditDlg::OnInitDialog()

{

CDialogEx::OnInitDialog();

 

if (k.Name[0] != 0)

{

m_Name.SetWindowTextA(k.Name);

m_bTime.SetWindowTextA(k.bTime);

m_bDate.SetWindowTextA(k.bDate);

}

 

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

// Исключение: страница свойств  OCX должна возвращать значение FALSE

}

 


Информация о работе База данных "Дни рождения"