Материал: ЛР-9

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Федеральное Агентство Связи Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования «Московский технический университет связи и информатики»

Заочный Общетехнический Факультет

Кафедра информатики

Отчет Лабораторная работа № 9 «Обработка строковых данных»

Выполнила: Иванов Иван, студент группы БСТ17хх

Содержание

1. Задание на разработку проекта и вариант задания 3

2. Формализация и уточнение задания 4

3. Разработка приложения 5

3.1. Графический интерфейс пользователя 5

3.2. Составление таблицы используемых объектов и их свойств 5

3.3. Схемы алгоритмов процедур пользователя 7

3.4. Программный код с использованием процедур 10

4. Результаты выполнения проекта с доказательством правильности работы программы 13

5. Выводы 15

  1. Задание на разработку проекта и вариант задания

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

  • Разработать интерфейс пользователя.

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

  • Подготовить тесты для контрольного решения задачи.

  • Получить решение.

Задание (Вариант 24):

Из строки, содержащей корректно заданную дату в формате "dd.mm.yy", где dd - день, mm - месяц, yy - год, получить строку с датой, отстоящей от заданной на n дней вперед, в том же формате.

  1. Формализация и уточнение задания

Исходные данные: строка символов, целое число. Строка символов и число будут вводиться с помощью TextBox-ов.

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

Разработаем проверку существования введённой даты в реальном календаре.

  1. Разработка приложения

    1. Графический интерфейс пользователя

Используемые элементы:

  • label - ля поясняющих надписей

  • textBox - для ввода и вывода данных

  • button - для запуска и окончания программы

Интерфейс представлен на Рисунок 1.

Рисунок 1 - Графический интерфейс пользователя

    1. Составление таблицы используемых объектов и их свойств

Используемые объекты и их свойства приведены в Таблица 1.

Таблица 1- Используемые объекты и их свойства

Объект

Имя объекта

Свойство

Значение свойства

Форма

Form1

FormBorderStyle

FixedSingle

Text

ЛР-4-09. Обработка строковых данных.

Метка

label1

BackColor

PaleGreen

Font

Microsoft Sans Serif; 8,25pt

Text

Введите дату в формате

(dd.mm.yy)

Метка

label2

BackColor

PaleGreen

Font

Microsoft Sans Serif; 8,25pt

Text

Результат должен отстоять на

n = дней вперёд

Метка

label3

BackColor

Info

Font

Microsoft Sans Serif; 8,25pt

Text

Результат работы программы:

Кнопка

startButton

Font

Constantia; 12pt

Text

Выполнить

Кнопка

exitButton

Font

Constantia; 12pt

Text

Закрыть

Текстовое поле

dateInputTB

Font

Microsoft Sans Serif; 8,25pt

Текстовое поле

shiftInputTB

Font

Microsoft Sans Serif; 8,25pt

Текстовое поле

dateOutputTB

Font

Microsoft Sans Serif; 8,25pt

    1. Схемы алгоритмов процедур пользователя

Метод startButton _Cick().

Метод обрабатывает нажатие кнопки “Выполнить”. Блок-схема этого метода представлена на Рисунок 2.

Рисунок 2 - Блок-схема метода startButton _Cick()

Метод checkDate().

Метод осуществляет ввода данных из строки в соответствующие переменные, а так же выполняет проверку существования полученной даты. Блок-схема этого метода представлена на Рисунок 3.

Рисунок 3 - Блок-схема метода checkDate()

Метод TimeMachine().

Метод обрабатывает исходную дату и выполняет условие задания – двигает дату на n дней вперёд. Блок-схема этого метода представлена на Рисунок 4.

Рисунок 4 - Блок-схема метода TimeMachine()

    1. Программный код с использованием процедур

Программный код представлен ниже.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Lab_09

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void startButton_Click(object sender, EventArgs e)

{

int dd = 0, mm = 0, yy = 0, shift;

string str = "";

try

{

str = dateInputTB.Text;

shift = Convert.ToInt32(shiftInputTB.Text);

}

catch

{

MessageBox.Show("Ошибка ввода данных, повторите попытку", "Ошибка!", MessageBoxButtons.OK);

return;

}

if (str.Length > 8)

{

MessageBox.Show("Ошибка ввода данных, повторите попытку", "Ошибка!", MessageBoxButtons.OK);

return;

}

checkDate(str, ref dd, ref mm, ref yy);

int dd2 = dd, mm2 = mm, yy2 = yy;

TimeMachine(ref dd2, ref mm2, ref yy2, shift);

dateOutput(dd2, mm2, yy2, dateOutputTB);

}

private void exitButton_Click(object sender, EventArgs e)

{

Application.Exit();

}

private void checkDate (string str, ref int dd, ref int mm, ref int yy)

{

dd = count(str, 0);

mm = count(str, 3);

yy = count(str, 6);

if (!UniversalCalendar(dd, mm, yy))

{

MessageBox.Show("Ошибка ввода даты, данной даты не существует", "Ошибка!", MessageBoxButtons.OK);

}

}

private int count (string str, int i)

{

try

{

return (Convert.ToInt32(str.Substring(i,1)) * 10 + Convert.ToInt32(str.Substring(i + 1,1)));

}

catch

{

MessageBox.Show("Ошибка ввода даты, проверьте правильность ввода", "Ошибка!", MessageBoxButtons.OK);

return 0;

}

}

private void TimeMachine(ref int dd2, ref int mm2, ref int yy2, int shift)

{

int doc = 0;

dd2 += shift;

while (!UniversalCalendar(dd2, mm2+doc, yy2))

{

dd2 -= HowManyDaysInMonth(mm2+doc, yy2);

doc++;

if (mm2 + doc > 12)

{

mm2 = 1;

doc = 0;

yy2++;

if (yy2 > 99)

yy2 = 0;

}

}

mm2 += doc;

}

private void dateOutput(int dd, int mm, int yy, TextBox t)

{

t.Text = lastCheck(dd) + "." + lastCheck(mm) + "." + lastCheck(yy);

}

private string lastCheck(int xx)

{

if (xx < 10)

return ("0" + xx).ToString();

else

return xx.ToString();

}

private bool UniversalCalendar(int dd, int mm, int yy)

{

if ((mm < 0 | mm > 12) |

(dd < 0 |

((dd > 31 && ((mm == 1) | (mm == 3) | (mm == 5) | (mm == 7) | (mm == 8) | (mm == 10) | (mm == 12))) |

(dd > 30 && (mm == 2) | (mm == 4) | (mm == 6) | (mm == 9) | (mm == 11)) |

((dd > 29) && (mm == 2) && (yy % 4 == 0)) |

((dd > 28) && (mm == 2) && (yy % 4 != 0)))))

{

return false;

}

else

return true;

}

private int HowManyDaysInMonth(int mm, int yy)

{

if ((yy % 4 != 0) && (mm == 2))

return 28;

else if ((yy % 4 == 0) && (mm == 2))

return 29;

else if ((mm == 1) | (mm == 3) | (mm == 5) | (mm == 7) | (mm == 8) | (mm == 10) | (mm == 12))

return 31;

else /*if ((mm == 2) | (mm == 4) | (mm == 6) | (mm == 9) | (mm == 11))*/

return 30;

}

//Функции для реализации подсказки формата записи в текстовом поле

private void dateInputTB_Enter(object sender, EventArgs e)

{

if (dateInputTB.Text == "dd.mm.yy")

{

dateInputTB.Text = "";

dateInputTB.ForeColor = Color.Black;

}

}

private void dateInputTB_Leave(object sender, EventArgs e)

{

if (dateInputTB.Text == "")

{

dateInputTB.Text = "dd.mm.yy";

dateInputTB.ForeColor = Color.Silver;

}

}

}

}

  1. Результаты выполнения проекта с доказательством правильности работы программы

Для проверки работы программы были подготовлены две тестовых строки.

Тест 1.

Исходная строка: ”05.04.98”, сдвиг на 31 день.

Результат выполнения представлен на Рисунок 5.

Рисунок 5 - Результат работы программы

Тест 2.

Исходная строка: “25.02.19”, сдвиг на 1460 дней (4 года).

Результат выполнения представлен на Рисунок 6.

Рисунок 6 - Результат работы программы

Как мы видим, программа верно считает сдвиг даты, и даже учитывает високосные года.

  1. Выводы

  1. Формализовано и уточнено задание.

  2. Разработан графический интерфейс пользователя.

  3. Составлена таблица используемых объектов и их свойств.

  4. Разработана схема алгоритма решения задачи.

  5. Написан программный код на языке C#.

  6. Подготовлены тестовые данные для решения задачи. Протестирована работа приложения (см. Результаты выполнения проекта с доказательством правильности работы программы). Полученные результаты верны.

Москва, 2018

Источник: https://studfile.net/preview/16439614/