Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример выполнения лабораторной работы




 

Разработать приложение для обработки БД с информацией о парке грузовиков. Структура БД: наименование грузовика, его грузоподъемность, стоимость одного литра топлива, расход на 100 км. Данные сохранять в строчном виде.

 

1) В среде Microsoft Developer Studio (Visual C ++)создаем проект на основе диалога. Для этого в пункте меню File -> New выбираем подпункт Projects.

Далее выбираем тип приложения на основе диалога (Dialog based) и нажимаем на кнопку «Finish».

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

 

2) После генерации всех файлов вам будет показана заготовка будущей программы. Рядом будет отображена панель инструмента для создания интерфейса пользователя с программой. Нужно разместить необходимые элементы управления в окне приложения, при необходимости удалив уже имеющиеся по умолчанию кнопки и текстовый элемент.

Размещаем в окне приложения необходимые элементы управления, готовый интерфейс показан на рисунке 1.

Рисунок 1 – Интерфейс приложения

 

3) Для отключения автоматической сортировки списка строк в элементе управления ListBox убираем галочку в поле Sort в пункте меню Properties, вызываемом нажатием правой кнопки мыши на поле элемента управления ListBox (рис. 2).

Рисунок 2 – Стили элемента управления ListBox

 

4) Добавляем в проект функции для созданных кнопок с помощью мастера Class Wizard, вкладка Message Maps (рис. 3).

Рисунок 3 – Создание заголовков функций для кнопок

 

Дополнительно создаем функцию, вызываемую при выборе определенной строки элемента ListBox, что потребуется для удаления определенной строки из БД (рис. 5).

Рисунок 4 – Создание обработчика для события выбора строки в элементе ListBox

 

5) Создаем переменные для элементов управления ListBox и EditBox (рис. 5) с помощью мастера Class Wizard, вкладка Member Variables.

Рисунок 5 – Объявление переменной для элемента управления ListBox

 

 

6) Создаем необходимые глобальные переменные в файле Имя_проектаDlg.h (рис. 6).

 

 

Рисунок 6 – Объявление глобальных переменных

 

7) Редактируем программный код функции открытия базы данных и заполнения списка в элементе ListBox, функция находится в файле с именем Имя_проектаDlg.cpp.

 

void CMy575Dlg::OnButton1()

{m_list.ResetContent();// очищаем список

 

char Filter []= "TextFile (*.txt),(*.doc) | *.txt; *.doc | All (*.*) | *.*||";

//определили фильтр для открытия файлов

CFileDialog fd(TRUE, "txt", "DataBase", OFN_HIDEREADONLY, Filter);

// объявление объекта класса CFileDialog для открытия файла

if (fd.DoModal()!=IDOK) return;

// инициализация вызова диалога открытия файла

m_file = fd.GetPathName(); // заполнение поля с именем открытого файла

f.Open (m_file, CFile::modeRead);

// открытие файла, выбранного пользователем, на запись

if (f ==NULL) AfxMessageBox("Ошибка открытия файла!");

// обмен данными между элементами EditBox и связанными с ними переменными

num=0;// первоначальное количество строк БД

CString s;

while (f.ReadString(s))

num++; //определяем количество строк в файле

num = num/4; //определяем количество строк в БД (каждая строка БД содержит 4 поля)

if (num>n)

{num=n;

AfxMessageBox("База данных рассчитана на 20 автомобилей максимум!");

}

f.SeekToBegin();

for (int i=0; i<num; i++) //считывание данных в массив

{f.ReadString(Park[i].name);

f.ReadString(Park[i].gruz);

f.ReadString(Park[i].lit);

f.ReadString(Park[i].n100);

}

f.Close();

 

for (i=0; i<num; i++) //заполнение элемента ListBox

m_list.AddString(Park[i].name);

 

m_list.SetCurSel(0); // установка курсора на верхнюю строку списка

m_gruz = Park[0].gruz; //заполнение полей EditBox

m_lit = Park[0].lit;

m_n100 = Park[0].n100;

 

UpdateData(0);

 

}

 

8) Редактируем программный код функции добавления одной строки в базу данных и пополнения списка в элементе ListBox, функция находится в файле с именем Имя_проектаDlg.cpp.

Для ее реализации необходимо создать дополнительное окно для ввода данных и связать его с основным интерфейсным окном, как вы это осуществляли на прошлой лабораторной работе. Дополнительное интерфейсное окно показано на рис. 7.

Рисунок 7 – Дополнительное интерфейсное окно

 

Для каждого элемента EditBox необходимо добавить переменную (строчный тип данных), рис. 8.

 

 

Рисунок 8 – Объявление переменных для объектов класса CSecond

 

Программный код функции, вызываемый при нажатии на кнопку «Добавить автомобиль»:

 

void CMy575Dlg::OnButton2()

{

Dlg2.m_name2.Empty(); // очистка полей EditBox

Dlg2.m_gruz2.Empty();

Dlg2.m_lit2.Empty();

Dlg2.m_n1002.Empty();

UpdateData(0);

if (Dlg2.DoModal()==IDOK) //вызов дополнительного окна

{

if (num==19) //проверка возможности добавления строки в БД

{AfxMessageBox("База данных рассчитана на 20 автомобилей максимум!");

return;

}

UpdateData(1);

num++; // увеличение количества используемых строк

Park[num-1].name = Dlg2.m_name2; //заполнение массивов

Park[num-1].gruz = Dlg2.m_gruz2;

Park[num-1].lit = Dlg2.m_lit2;

Park[num-1].n100 = Dlg2.m_n1002;

m_list.InsertString(num-1,Park[num-1].name); //вставка строки в список на последнее место

m_list.SetCurSel(num-1); //установка курсора на новую строку

m_gruz = Park[num-1].gruz; // заполнение полей EditBox

m_lit = Park[num-1].lit;

m_n100 = Park[num-1].n100;

UpdateData(0); //обновление данных в полях интерфейсного окна

}

}

 

 

Проверяем работу созданных функций (рис. 9-11).

Рисунок 9 – Результат работы функции, вызываемой при нажатии на кнопку «Открыть файл»

Рисунок 10 – Ввод новых данных

 

 

Рисунок 11 – Новое состояние базы данных

 

9) Редактируем программный код функции для удаления выделенной строки в списке и базе данных, функция находится в файле с именем Имя_проектаDlg.cpp.

void CMy575Dlg::OnButton3()

{

int x = m_list.GetCurSel();// определяем индекс выделенной строки

m_list.DeleteString(x); //удаляем строку из списка

for (int i=x; i<num; i++) // удаляем строку из БД

{Park[i].name = Park[i+1].name;

Park[i].gruz = Park[i+1].gruz;

Park[i].lit = Park[i+1].lit;

Park[i].n100 = Park[i+1].n100;

}

 

num--; // сокращаем количество используемых строк БД

if (num==0) //очищаем поля EditBox, если БД пуста

{m_gruz.Empty();

m_lit.Empty();

m_n100.Empty();

AfxMessageBox("База данных пуста!");

}

else

// иначе устанавливаем курсор на верхнюю строку списка

//и заполняем поля EditBox

{m_list.SetCurSel(0);

m_gruz = Park[0].gruz;

m_lit = Park[0].lit;

m_n100 = Park[0].n100;

}

UpdateData(0);

}

 

10) Редактируем программный код функции для изменения содержания полей EditBox при перемещении курсора по списку, функция находится в файле с именем Имя_проектаDlg.cpp.

void CMy575Dlg::OnSelchangeList1()

{

int x = m_list.GetCurSel(); //получения индекса выделенной строки

m_gruz = Park[x].gruz; //заполнение полей EditBox

m_lit = Park[x].lit;

m_n100 = Park[x].n100;

UpdateData(0);

}

 

11) Редактируем программный код функции для сохранения БД, функция находится в файле с именем Имя_проектаDlg.cpp.

void CMy575Dlg::OnButton4()

{

char Filter []= "TextFile (*.txt),(*.doc) | *.txt; *.doc | All (*.*) | *.*||";

//определили фильтр для открытия файлов

 

CFileDialog fd(FALSE, "txt", "DataBase", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, Filter);

// объявление объекта класса CFileDialog для открытия файла

if (fd.DoModal()!=IDOK) return;

// инициализация вызова диалога открытия файла

f.Open (fd.GetPathName(), CFile::modeWrite | CFile::modeCreate);

for (int i=0; i<num; i++) //запись в файл

{f.WriteString(Park[i].name+CString("\n"));

f.WriteString(Park[i].gruz+CString("\n"));

f.WriteString(Park[i].lit+CString("\n"));

f.WriteString(Park[i].n100+CString("\n"));

}

f.Close();

}

Результат работы функции представлен на рисунке 12.

 

Рисунок 12 – Сохраненный файл

 




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 332; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopediasu.com - Студопедия (2013 - 2026) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.