КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! |