Самая длинная фамилия
Создание программы, работающей со списком группы, который хранится в текстовом файле; среда разработки: 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