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

Создание программы, работающей со списком группы, который хранится в текстовом файле; среда разработки: Qt Creator 5.1. Описание и определение самой длинной фамилии среди студентов группы. Руководство пользователя; словесный алгоритм; код программы.

Рубрика Программирование, компьютеры и кибернетика
Вид отчет по практике
Язык русский
Дата добавления 29.09.2013
Размер файла 304,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

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

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

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

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

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

Направление:010300.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);

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

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 <QFile>

#include <QTextStream>

. . .

Функция сохранения данных(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 <QDialog>

#include <QPointer>

namespace Ui {

class students;

}

class QTextEdit;

class students : public QDialog

{

Q_OBJECT

QList<QPointer<QTextEdit> > listBirth;

QList<QPointer<QTextEdit> > 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 <QApplication>

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 <QTextEdit>

#include <QFileDialog>

#include <QLabel>

#include <QMessageBox>

students::students(QWidget *parent) :

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

ui(new Ui::students)

{

ui->setupUi(this);

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

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 <QFile>

#include <QTextStream>

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

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

Размещено на Allbest.ru


Подобные документы

  • Отличие исконных слов от заимствованных и установление времени, причины заимствований и их роль для развития языка. Алгоритм подсчета обработанных слов приложением "Подсчет частоты введенных слов в текстовом файле". Отладка и тестирование программы.

    курсовая работа [1,1 M], добавлен 13.06.2012

  • Разработка программы проверки знаний для тестирования студентов по программированию с кодом на языке Delphi. Проектирование визуального интерфейса и словесный алгоритм работы программы. Алгоритмы разработанных процедур и функций, инструкция пользователя.

    курсовая работа [506,5 K], добавлен 21.02.2011

  • Определение необходимых модулей программы, структуры файла базы данных. Описание разработки программы, отладка и тестирование. Разработка приложения Organizer.exe, меню и руководство пользователя. Алгоритм обработки событий главного меню (расписания).

    курсовая работа [901,8 K], добавлен 11.02.2014

  • Построение программы, создающей ведомость для каждой группы студентов по всем дисциплинам с указанием формы контроля (зачет или экзамен). Упорядочивание списка студентов по алфавиту. Описание функций и переменных. Алгоритм, блок-схема и текст программы.

    реферат [281,3 K], добавлен 17.10.2013

  • Создание программы, реализующей игру "Линии". Среда разработки программы, описание ее общего вида. Основные алгоритмы программы. Реализация программы в среде разработки Microsoft Visual Studio 2008 на языке объектно-ориентированного программирования С++.

    курсовая работа [639,0 K], добавлен 16.03.2012

  • Осуществление работы разрабатываемой программы на основе алгоритма, использующего Z-буфер. Аналитическое описание программной реализации. Алгоритмы основных функций программы. Содержание руководства пользователя. Файлы программы, пункты главного меню.

    курсовая работа [1,7 M], добавлен 15.04.2015

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

    курсовая работа [798,8 K], добавлен 26.04.2014

  • Обоснование необходимости разработки программы для игры "Тетрис". Математическая и графическая части алгоритма. Выбор языка и среды программирования. Отладка текста программы, разработка интерфейса пользователя. Тестирование, руководство пользователя.

    курсовая работа [1,5 M], добавлен 17.01.2011

  • Определение назначения и описание функций дискового кэша как промежуточного буфера с быстрым доступом к информации. Процесс кэширования внешних накопителей. Построение алгоритма, описание интерфейса и разработка программы для работы с двусвязным списком.

    курсовая работа [2,1 M], добавлен 21.01.2014

  • Задача зеркального отражения изображения как одна из подзадач многих программ. Анализ создания программы, выполняющей зеркальное отображение изображения, который хранится в файле формата .pcx (256 цветов). Проектирование пользовательского интерфейса.

    курсовая работа [625,6 K], добавлен 17.05.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.