МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФГБОУВПО
БРЯНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра «Информатика и программное обеспечение»
ЗАДАНИЕ
На курсовую работу по дисциплине ПРОГРАММИРОВАНИЕ
Студенту гр. 11-ПрИ
Тема «Контактная книга»
Содержание работы
Программа должна загружать из файла список с контактами, и предоставлять пользователю возможность добавления новых контактов, их сортировки, сохранения в файл .csv.
Рекомендации ________________________________________________
Замечания ___________________________________________________
Дата получения ______________________
Дата сдачи ______________________
Студент ______________________
Руководитель ______________________
Брянск 2012
Оглавление
1Постановка задачи 3
2Этап анализа. Техническое задание 4
2.1Наименование и назначение программы 4
2.2Требования к программе 4
3Этап проектирования 4
4Этап программирования 5
5Описание интерфейса программы 6
6Написание кода программы 7
7Тестирование 12
8Пример работы программы 14
Список используемой литературы 15
1Постановка задачи
Задача состоит в том, чтобы написать программу которая будет отображать пользователю список с контактами. Пользователь так же должен иметь возможность сортировать контакты, добавлять новые, сохранять их и экспортировать список в файл CSV. Список загружается из текстового файла, который можно дополнять новыми контактами вручную. Программа должна быть написана на языке C++ и иметь графический интерфейс. Для выполнения задачи был использован компилятор QT Creator.
2Этап анализа. Техническое задание
На основе выданной темы для курсовой работы было составлено техническое задание. Основные пункты представлены ниже.
2.1Наименование и назначение программы
Программа называется: «Контактная книга». Программа предназначена для отображения, сортировки и добавления новых контактов. Список содержит следующие данные:
-
Имя и фамилию контакта
-
Город его проживания
-
Его контактный номер
2.2Требования к программе
Программа должна работать под управлением операционной системы Windows и обеспечивать возможность выполнения перечисленных ниже функций:
1. Добавление контактов:
1.1. Имя и Фамилия
1.2. Номер контакта
1.3. Город, где проживает контакт
2. Выполнение сортировки по именам и фамилиям (как по возрастанию, так и по убыванию)
3. При нажатии кнопки 'Добавить контакт' должно появиться отдельное окно для ввода информмации
4. Изменение шрифта, цвета шрифта и фона в новом диалоге.
5. Импортирование в файл csv.
3Этап проектирования
В ходе этапа проектирования была определена внутренняя структура программы.
Основной задачей была реализация считывания списка контактов из файла, сортировка контактов пользователем, сохранения в файл и экспортирование его в csv.
Суть использования сортировки:
-
Выбор интересующего вида сортировки.
-
Программа сравнивает данные вектора методом qSort.
-
Отобразить пользователю отсортированный список.
4Этап программирования
Для создания приложения открываем среду разработки QT Creator, перед нами появляется стартовая страница, выбираем вкладку Файл->Новый файл или проект->Проект QT widget->GUI приложение QT.
После этого, размещаем на форме нужные нам элементы, для решения задачи и создания приложения. В результате мы получили форму следующего вида (См. Рис.4.1 )
Рис.4.1. Форма приложения
Нам понадобится ещё два диалоговых окна для настройки цвета фона и добавления нового контакта. Для их добавления необходимо нажать правой клавишей мыши на корневую папку проекта, далее выбрать добавить новый->QT->Класс формы QT Designer. Выбираем нужный нам шаблон, имя формы и располагаем на нем нужные элементы, после чего, форма имеет вид (См. Рис.4.2 )
Рис.4.2. Форма настроек
Подробный разбор всех элементов формы описан в главе «Описание интерфейса программы».
5Описание интерфейса программы
Ниже представлен интерфейс работы написанной программы (См. рис.5.1)
Рис.5.1. Пример работы программы
Интерфейс программы состоит из следующих компонентов:
QComboBox - выпадающий список, который отвечает за сортировку контактов определенным методом.
QPushButton – 4 кнопки, выполняющая функцию открытия диалогового окна с настройкой интерфейса, добавления нового контакта, удаления контакта и заполнения главного окна контактами.
QLineEdit - 2 заголовка, поясняющие пользователю, где находятся нужные ему поля программы.
QListWidget – Элемент интерфейса, в котором выводятся все контакты с содержанием имени, города и номера.
QPlainTextEdit – В нем отображается подробная информация о выбранном контакте.
Если пользователь захочет изменить тип шрифта или цвет фона, то должен будет нажать на кнопку настроек, и появится следующее диалоговое окно (См. Рис.5.2)
Рис.5.2. Интерфейс настроек программы
В соответствующем QComboBox пользователь выбирает тот тип шрифта, который он захочет, и при нажатии на кнопку выбора цвета фона появляется диалог выбора нужного цвета.
6Написание кода программы
В следующем фрагменте кода, описывается, каким способом загружается список контактов из файла, и как они отображаются на экран монитора.
void MainWindow::on_fill_clicked()
{
FILE *f = fopen ("Data.txt","rt");
if (f==NULL) return;
int ContCount;
fscanf (f, "%d", &ContCount);
char Buffer[100];
fgets(Buffer, 100, f);
for (int i=0; i
{
TCont Cont;
fgets(Buffer, 100, f);
Cont.Name = QString(Buffer).trimmed();
fgets(Buffer, 100, f);
Cont.City = QString(Buffer).trimmed();
fgets(Buffer, 100, f);
Cont.Number = QString(Buffer).trimmed();
ContVector.push_back(Cont);
}
fclose (f);
ShowList();
}
|
Листинг 1. Загрузка списка контактов из файла
Код вывода на экран списка блюд:
void MainWindow::ShowList()
{
ui->mylist->clear();
int Size = ContVector.size();
for(int i=0; i
{
ui->mylist->addItem(ContVector[i].Name + ContVector[i].City + ContVector[i].Number);
}
}
|
Листинг 2. Вывод на экран списка контактов
Код вывода информации о блюде, при его выборе:
void MainWindow::on_mylist_currentRowChanged(int currentRow)
{
ui->PList->clear();
if(currentRow==-1)
{
return;
}
ui->PList->appendPlainText("Имя контакта: " + ContVector[currentRow].Name + "Город: +ContVector[currentRow].City + "Номер телефона: " + ContVector[currentRow].Number);
}
|
Листинг 3. Вывод информации о контакте
Код экспортирования данных в файл csv:
void MainWindow::on_action_csv_activated(int arg1)
{
FILE *f = fopen ("Data.csv","wt");
if (f==NULL) return;
int ContCount=ContVector.size();
fprintf(f, "Количество контактов в списке: %d\n", ContCount);
fprintf(f, "Имя контакта;");
fprintf(f, "Город проживания;");
fprintf(f, "Номер телефона контакта;\n");
for (int i=0; i
{
fprintf(f, "%s" , ContVector[i].Name.toAscii().data());
fprintf(f, "%s" , ";");
fprintf(f, "%s" , ContVector[i].City.toAscii().data());
fprintf(f, "%s" , ";");
fprintf(f, "%s\n" , ContVector[i].Number.toAscii().data());
}
fclose (f);
}
|
Листинг 4. Экспортирование контактов в файл csv
Код осуществления сортировки данных:
bool SortByNameDown(const TCont &s1, const TCont &s2)
{
return s1.Name > s2.Name;
}
bool SortByNameUp(const TCont &s1, const TCont &s2)
{
return s1.Name < s2.Name;
}
bool SortByCityUp(const TCont &s1, const TCont &s2)
{
return s1.City > s2.City;
}
bool SortByCityDown(const TCont &s1, const TCont &s2)
{
return s1.City < s2.City;
}
bool SortByNumberUp(const TCont &s1, const TCont &s2)
{
return s1.Number > s2.Number;
}
bool SortByNumberDown(const TCont &s1, const TCont &s2)
{
return s1.Number < s2.Number;
}
void MainWindow::SortList()
{
int a=ui->SortBox->currentIndex();
if(a==0)
{
qSort(ContVector.begin(),ContVector.end(),SortByNameDown);
}
else if(a==1)
{
qSort(ContVector.begin(),ContVector.end(),SortByNameUp);
}
else if(a==2)
{
qSort(ContVector.begin(),ContVector.end(),SortByCityUp);
}
else if(a==3)
{
qSort(ContVector.begin(),ContVector.end(),SortByCityDown);
}
else if(a==4)
{
qSort(ContVector.begin(),ContVector.end(),SortByNumberUp);
}
else if(a==5)
{
qSort(ContVector.begin(),ContVector.end(),SortByNumberDown);
}
}
void MainWindow::on_SortBox_currentIndexChanged(int index)
{
SortList();
ShowList();
}
|
Листинг 5. Осуществление сортировок
Код сохранения изменений в списке контактов
void MainWindow::on_action_2_activated(int arg1)
{
FILE *f = fopen ("Data.txt","wt");
if (f==NULL) return;
int ContCount=ContVector.size();
fprintf(f, "%d\n", ContCount);
for (int i=0; i
{
fprintf(f, "%s\n" , ContVector[i].Name.toAscii().data());
fprintf(f, "%s\n" , ContVector[i].City.toAscii().data());
fprintf(f, "%s\n" , ContVector[i].Number.toAscii().data());
}
fclose (f);
}
|
Листинг 6. Сохранение в файл
7Тестирование
По окончанию написания программы, было проведено её тестирование на работоспособность, которое не выявило критических ошибок. Тестирование черного ящика показало следующие проблемы в программе.
Таблица 7.1
Тестирование черного ящика
Номер теста
|
Описание теста
|
Ожидаемый ответ
|
Полученный ответ
|
1
|
Ввод только имени или города при добавлении контакта
|
Контакт не добавится
|
Контакт не добавился
|
2
|
После выбора сортировки проверить корректное, соответствующее отображение информации о контакте
|
Информация корректна
|
Информация отображается в той последовательности, в которой была загружена
|
3
|
При открытии палитры для выбора фона нажать «закрыть», а потом еще раз «закрыть»
|
Ничего не произойдет
|
Изменился цвет фона на черный
|
4
|
При добавлении контакта, контакт должен добавляться, соответствуя выбранному типу сортировки
|
Верное добавление контакта
|
Верное добавление контакта
|
5
|
При экспортировании файла в формате csv, экспортируемые данные должны быть разделены ячейками
|
Корректное отображение экспортируемых данных
|
Корректное отображение экспортируемых данных
|
6
|
При удалении контакта информации в поле «Информация о контакте» пропадает
|
Информация перестает отображаться
|
Информация перестает отображаться
|
7
|
После загрузки информации, выбора сортировки и последующем сохранении, информация сохраняется, соответствуя типу сортировки
|
Корректное сохранение информации
|
Информация осталась неизменной
|
8
|
Ввод в поле «Номер контакта» символов, отличных от цифр
|
Обработка данных не происходит
|
Программа добавила данные в список
|
При условии, что пользователь корректно заполняет файл, из которого загружается список с контактами, все остальные недочеты были исправлены. Далее были проведены тесты белого ящика, той части кода, которая считывает контакты из файла. Критических ошибок, которые могут серьезно повлиять на работу программы выявлено не было.
8Пример работы программы
При запуске программы появляется незаполненное поле для контактов. При нажатии на кнопку «Отобразить контакты» программа считывает данные из файла и одновременно отображает их на экран. Пользователь может настроить в программе шрифт и цвет фона, в соответствующем меню настроек. При выборе какого-либо конкретного контакта по щелчку мыши, внизу выводится его подробная информация – имя контакта, город проживания и номер телефона. Далее, если это необходимо, можно выбрать необходимый тип сортировки, например, имя по возрастанию. При необходимости пользователь может экспортировать данные в файл csv, который потом можно открыть при помощи программы Excel. Для того чтобы выйти из программы, необходимо просто закрыть окно.
Список используемой литературы
-
Саммерфилд Марк. Qt. Профессиональное программирование. Разработка кроссплатформенных приложений на С++ / Пер. с англ. - «Символ-Плюс», 2011. - 560с.
-
Шлее Макс. Qt 4: Профессиональное программирование на C++. - СПб.: «БХВ-Петербург», 2007. - 880с.
-
Бланшет Жасмин, Саммерфилд Марк. Qt 4: Программирование GUI на C++ / Пер. с англ. 2-е дополненное издание. - М.: «Кудиц-Пресс», 2008. - 736с.
-
Сергей Бобровский. Технологии C++ Builder, 2007г – 560с.
|