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

 

Министерство образования и науки РФ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

Тверской государственный университет

Факультет прикладной математики и кибернетики

Кафедра информационных технологий

Направление:010300.62 - Фундаментальная информатика и информационные технологии






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

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





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

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

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

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






Тверь - 2013


Содержание


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

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

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

Приложение

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

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

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

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



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


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


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

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

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

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

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


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


Qt Creator 5.1.



ПРИЛОЖЕНИЕ


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




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

Первоначально на экране появится главное окно (QDialog) (Рис. 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) :(parent), //Тип окна: QDialog(new Ui::students)

{>setupUi(this);

//Таблица с размерностью 5x5, т.е.:>tableWidget->setRowCount(5); //количество строк равна 5(ячейкам)>tableWidget->setColumnCount(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() //...Деструктор

{ui;

}

. . .



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

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


. . .

#include <QFile>

#include <QTextStream>

. . .


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


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

void students::Save() {file("students list.txt"); //

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

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

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

out << ui->tableWidget->rowCount() << "\n"; //...строки, пока не

встретится конец строки(int i = 0; i < ui->tableWidget->rowCount(); ++i)(int j = 0; j<5; ++j)<< ui->tableWidget->item(i, j)->text() << (j == 4 ? "\n" : " ");// и т.д.

пока все строки добавляя разделитель" ".close();//Закрываем файл

}


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

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


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


void students::Open() {

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

чтения

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

QTextStream in (&file); // QTextStream-класс для чтения и записи>tableWidget->setRowCount((in.readLine()).toInt(&ok)); //

программа список длинный фамилия

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


пустое QString):*item;str;(int i = 0; i < ui->tableWidget->rowCount(); ++i) {= in.readLine();(int j = 0; j<5; ++j) {= new QTableWidgetItem (str.section(' ', j, j), ::SectionSkipEmpty);>tableWidget->setItem(i, j, item);

}

}.close();

}


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


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


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

делай:

{c = -1;longest;

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

for (int i = 0; i < ui->tableWidget->rowCount(); ++i)(ui->tableWidget->item(i,0)->text().length() > 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 <QDialog>

#include <QPointer>Ui {students;

}QTextEdit;students : public QDialog

{_OBJECT<QPointer<QTextEdit> > listBirth;<QPointer<QTextEdit> > listGender;:students(QWidget *parent = 0);

~students();slots:Open();Save();Result();doIt();slots:on_result_clicked();


void on_exit_clicked();:::students *ui;

};

#endif // STUDENTS_H


main.cpp( ):

#include "students.h"

#include <QApplication>main(int argc, char *argv[])

{a(argc, argv);w;.show();a.exec();

}


students.cpp( ):

#include "students.h"

#include "ui_students.h"

#include <QTextEdit>

#include <QFileDialog>

#include <QLabel>

#include <QMessageBox>::students(QWidget *parent) :(parent), //Тип окна: QDialog(new Ui::students)

{>setupUi(this);

//Таблица с размерностью 5x5, т.е.:>tableWidget->setRowCount(5); //количество строк равна 5(ячейкам)>tableWidget->setColumnCount(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() //...Деструктор

{ui;

}

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

#include <QFile>

#include <QTextStream>

/***Считывание данных из файла***/students::Result() {

}students::Open() {file("students list.txt");//(1).open(QIODevice::ReadOnly); //Открываем файл (1) только для

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

QTextStream in (&file);>tableWidget->setRowCount((in.readLine()).toInt(&ok));*item;str;(int i = 0; i < ui->tableWidget->rowCount(); ++i) {= in.readLine();(int j = 0; j<5; ++j) {= new QTableWidgetItem (str.section('', j, j), ::SectionSkipEmpty);>tableWidget->setItem(i, j, item);

}

}.close();

}

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

void students::Save() {file("students list.txt"); //(1).open(QIODevice::WriteOnly); //Открываем файл (1) только для

чтения

//последовательно сохраняем:...out (&file);

out << ui->tableWidget->rowCount() << "\n"; //...строки, пока не

встретится конец строки(int i = 0; i < ui->tableWidget->rowCount(); ++i)(int j = 0; j<5; ++j)<< ui->tableWidget->item(i, j)->text() << (j == 4 ? "\n" : " ");// и т.д.

все строки добавляя разделитель" ".close();//Закрываем файл

}

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

делай:

{c = -1;longest;

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

for (int i = 0; i < ui->tableWidget->rowCount(); ++i)(ui->tableWidget->item(i,0)->text().length() > 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));}


Министерство образования и науки РФ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Тверской госуда

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ