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

  • Вид работы:
    Отчет по практике
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    182,5 Кб
  • Опубликовано:
    2013-09-29
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

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

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

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

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

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

Направление: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() //...Деструктор

}

. . .

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

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

. . .

#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 <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));}

Похожие работы на - Самая длинная фамилия

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!