Дипломы, курсовые, рефераты, контрольные...
Срочная помощь в учёбе

Самая длинная фамилия

ОтчётПомощь в написанииУзнать стоимостьмоей работы

Кнопка загружает данные из текстового файла в таблицу, если она заполнена, заменяет (очищает и заполняет). Ввод данных в таблицу осуществляется последовательно. Передвигаться по ячейкам таблицы можно клавишами. При нажатии на кнопку появится модальное окно (QMessageBox) с результатом (Рис. 2, выделена красной рамкой). Как мы уже знаем, модальное окно блокирует родительское. Для его закрытия… Читать ещё >

Самая длинная фамилия (реферат, курсовая, диплом, контрольная)

Министерство образования и науки РФ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Тверской государственный университет Факультет прикладной математики и кибернетики Кафедра информационных технологий Направление:10 300.62 — Фундаментальная информатика и информационные технологии

ОТЧЕТ ПО УЧЕБНО-ВЫЧИСЛИТЕЛЬНОЙ ПРАКТИКЕ

Тема: «Самая длинная фамилия»

Выполнил:студент 16ой группы

Агададашев Агакерим Асланович

Проверил: К. ф.-м.н., доцент

Сорокин Сергей Владимирович

Тверь — 2013

Постановка задачи

Условие задачи

Среда разработки

Приложение

Руководство пользователя

Словесный алгоритм

Описание функций

Код программы

Постановка задачи

Условие задачи

Нужно написать программу, работающую со списком группы. Список хранится в текстовом файле, каждый студент описывается одной строчкой следующего формата:

Фамилия Имя Отчество; пол; год рождения

Где: пол — буквы М или Ж, год рождения — число.

Основная задача

Написать программу, которая определяет самую длинную фамилию среди студентов группы.

Среда разработки:

Qt Creator 5.1.

ПРИЛОЖЕНИЕ

Руководство пользователя

Приложение запускается из Qt Creator 5.1, после нажатия на или при нажатии клавиш.

Первоначально на экране появится главное окно (QDialog) (Рис. 1).

1) Ввод данных в таблицу осуществляется последовательно. Передвигаться по ячейкам таблицы можно клавишами .

2) После нажатия на кнопку, программа сохраняет данные в файл «students_list.txt».

3) Чтобы получить результат (т.е. самая длинная фамилия) достаточно нажать на кнопку, как наша программа, в специальном окне (QMessageBox) выдаст результат (рис. 2).

4) Кнопка открывает файл «students_list.txt», считывает ранее сохраненные*2) данные и выводит их в таблице.

5) Выйти из программы можно нажав на или на соответствующую кнопку Exit.

Замечание: Не выполнив пункт (1) не следует выполнять-(2). Выполнив (1)-(2) или (4) — если данные, ранее, уже добавлены, можно выполнить (3). (4) доступен в любом случае.

Рис. 2

Словесный алгоритм При запуске программы появиться окно, с базовым классом QDialog.

Внутри окна расположены объекты. В нашем случае таблица (TableWidget) и кнопки для сохранения (Save), считывания ранее сохраненных данных (Open) и вывода (Result).

При нажатии на [Exit] приложение выполняет действие — «Закрытие Главного окна» или просто close (), т. е. фактически выходит из приложения.

После ввода данных в таблицу и при нажатии [Save], приложение сохраняет данные в файл.

Кнопка [Open] загружает данные из текстового файла в таблицу, если она заполнена, заменяет (очищает и заполняет).

При нажатии на кнопку [Result] появится модальное окно (QMessageBox) с результатом (Рис. 2, выделена красной рамкой).

Как мы уже знаем, модальное окно блокирует родительское. Для его закрытия необходимо нажать на [OK] или.

Описание функций Опишем строение главного окна:

students:students (QWidget *parent) :

QDialog (parent), //Тип окна: QDialog

ui (new Ui: students)

{

ui->setupUi (this);

//Таблица с размерностью 5×5, т. е.:

ui->tableWidget->setRowCount (5); //количество строк равна 5(ячейкам)

ui->tableWidget->setColumnCount (5); //количество столбцов равна

5(ячейкам)

//Связка слотов и сигналов для open, save, exit

connect (ui->open, SIGNAL (clicked ()), SLOT (Open ()));//При

поступлении сигнала от open обращайся к ф-и Open ()

connect (ui->save, SIGNAL (clicked ()), SLOT (Save ()));//При поступлении

сигнала от save обращайся к ф-и Save ()

connect (ui->exit, SIGNAL (clicked ()), SLOT (close ()));//При поступлении

сигнала от exit обращайся к ф-и close ()

}

students:~students () //…Деструктор

{

delete ui;

}

.. .

Разберем теперь каждую функцию по отдельности:

Для работы с файлами подключаем необходимые библиотеки:

.. .

#include

#include

.. .

Функция сохранения данных (Save):

/***Сохранение данных в файл***/

void students: Save () {

QFile file («students list. txt»); //

file.open (QIODevice:WriteOnly); //Открываем файл только для чтения

//последовательно сохраняем:…

QTextStream out (&file); // QTextStream-класс для чтения и записи

out << ui->tableWidget->rowCount () << «n»; //…строки, пока не

встретится конец строки

for (int i = 0; i < ui->tableWidget->rowCount (); ++i)

for (int j = 0; j<5; ++j)

out << ui->tableWidget->item (i, j)->text () << (j == 4? «n»: ««);// и т. д.

пока все строки добавляя разделитель" «

file.close ();//Закрываем файл

}

Данная функция использует класс для чтения и записи — QTextStream.

Функция открывает файл и добавляет в него последовательно, сначала слова первой строки, а затем, после того как увидел конец строки, переходит к обработке 2 строки и т. д.

Функция считывания данных (Open):

void students: Open () {

QFile file («students list. txt»);//(1)

file.open (QIODevice:ReadOnly); //Открываем файл (1) только для

чтения

bool ok; //задаем логич. переменную ok

QTextStream in (&file); // QTextStream-класс для чтения и записи

ui->tableWidget->setRowCount ((in.readLine ()).toInt (&ok)); //

программа список длинный фамилия добавляем, ранее добавленные слова обратно в строку. Определить конец строки и не путать с отдельными словами помогает readline (которая возвращает) пустое QString):

QTableWidgetItem *item;

QString str;

for (int i = 0; i < ui->tableWidget->rowCount (); ++i) {

str = in. readLine ();

for (int j = 0; j<5; ++j) {

item = new QTableWidgetItem (str.section (' ', j, j),

QString:SectionSkipEmpty);

ui->tableWidget->setItem (i, j, item);

}

}

file.close ();

}

Данная функция считывает данные из файла, определяя конец строки и отдельно слова, последовательно добавляет их в ячейки нашей таблицы, начиная от нулевой (0,0). После добавления всей первой строки аналогично поступает со второй и с последующими.

Функция вывода сообщения (Result):

void students: on_result_clicked () //при поступлении сигнала от result,

делай:

{

int c = -1;

QString longest;

//сравнивает последовательно слова наход-ся в 1 столбце:

for (int i = 0; i < ui->tableWidget->rowCount (); ++i)

if (ui->tableWidget->item (i, 0)->text ().length () > c) {

c = ui->tableWidget->item (i, 0)->text ().length ();

//longest — переменная, в котором самое длинное слов:

longest = ui->tableWidget->item (i, 0)->text ();

}

//Вывод в виде сообщения найденного слова, а точнее значение longest:

QMessageBox:information (this, tr («Результат»), tr («Самая длинная

фамилия — %1″).arg (longest));

}

Функция, при получении сигнала от нажатия на result, считывает данные 1 столбца (i, 0) каждой строки последовательно сравнивая их, запоминает максимальное по длине слово. А после окончания сравнения, выводит в форме QMessageBox, с заголовком «Результат», фразу «Самая длинная фамилия — «+ <�то (слово) что в longest >.

Код программы

students.h ():

#ifndef STUDENTS_H

#define STUDENTS_H

#include

#include

namespace Ui {

class students;

}

class QTextEdit;

class students: public QDialog

{

Q_OBJECT

QList > listBirth;

QList > listGender;

public:

explicit students (QWidget *parent = 0);

~students ();

public slots:

void Open ();

void Save ();

void Result ();

void doIt ();

private slots:

void on_result_clicked ();

void on_exit_clicked ();

private:

Ui:students *ui;

};

#endif // STUDENTS_H

main.cpp ():

#include «students.h»

#include

int main (int argc, char *argv[])

{

QApplication a (argc, argv);

students w;

w.show ();

return a. exec ();

}

students.cpp ():

#include «students.h»

#include «ui_students.h»

#include

#include

#include

#include

students:students (QWidget *parent) :

QDialog (parent), //Тип окна: QDialog

ui (new Ui: students)

{

ui->setupUi (this);

//Таблица с размерностью 5×5, т. е.:

ui->tableWidget->setRowCount (5); //количество строк равна 5(ячейкам)

ui->tableWidget->setColumnCount (5); //количество столбцов равна

5(ячейкам)

//Связка слотов и сигналов для open, save, exit

connect (ui->open, SIGNAL (clicked ()), SLOT (Open ()));//При

поступлении сигнала от open обращайся к ф-и Open ()

connect (ui->save, SIGNAL (clicked ()), SLOT (Save ()));//При поступлении

сигнала от save обращайся к ф-и Save ()

connect (ui->exit, SIGNAL (clicked ()), SLOT (close ()));//При поступлении

сигнала от exit обращайся к ф-и close ()

}

students:~students () //…Деструктор

{

delete ui;

}

//Подключаем библиотеки для работы с файлами:

#include

#include

/***Считывание данных из файла***/

void students: Result () {

}

void students: Open () {

QFile file («students list. txt»);//(1)

file.open (QIODevice:ReadOnly); //Открываем файл (1) только для

чтения

bool ok; //задаем логич. переменную ok

QTextStream in (&file);

ui->tableWidget->setRowCount ((in.readLine ()).toInt (&ok));

QTableWidgetItem *item;

QString str;

for (int i = 0; i < ui->tableWidget->rowCount (); ++i) {

str = in. readLine ();

for (int j = 0; j<5; ++j) {

item = new QTableWidgetItem (str.section ('', j, j),

QString:SectionSkipEmpty);

ui->tableWidget->setItem (i, j, item);

}

}

file.close ();

}

/***Сохранение данных в файл***/

void students: Save () {

QFile file («students list. txt»); //(1)

file.open (QIODevice:WriteOnly); //Открываем файл (1) только для

чтения

//последовательно сохраняем:…

QTextStream out (&file);

out << ui->tableWidget->rowCount () << «n»; //…строки, пока не

встретится конец строки

for (int i = 0; i < ui->tableWidget->rowCount (); ++i)

for (int j = 0; j<5; ++j)

out << ui->tableWidget->item (i, j)->text () << (j == 4? «n»: ««);// и т. д.

все строки добавляя разделитель" «

file.close ();//Закрываем файл

}

void students: on_result_clicked () //при поступлении сигнала от result,

делай:

{

int c = -1;

QString longest;

//сравнивает последовательно слова наход-ся в 1 столбце:

for (int i = 0; i < ui->tableWidget->rowCount (); ++i)

if (ui->tableWidget->item (i, 0)->text ().length () > c) {

c = ui->tableWidget->item (i, 0)->text ().length ();

//longest — переменная, в котором самое длинное слов:

longest = ui->tableWidget->item (i, 0)->text ();

}

//Вывод в виде сообщения найденного слова, а точнее значение longest:

QMessageBox:information (this, tr («Результат»), tr («Самая длинная

фамилия — %1″).arg (longest));}

Показать весь текст
Заполнить форму текущей работой