Разработка компьютерной программы, решающей конкретную задачу

Концепция решения задания, описание основных переменных и констант. Разработка общих требований к программе и ее структуре. Программная реализация алгоритмов и управляющей программы. Создание процедур и функций для реализации алгоритмов расчета.

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

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

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

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

Реферат

Пояснительная записка содержит: 34 стр., 2 табл., 12 рис., 3 приложения, 4 источников.

Цель курсового проекта - закрепление теоретических знаний и практических навыков, полученных при изучении курса «Программирование», а также демонстрация практических навыков при выполнении работы.

Предмет курсового проекта - разработка компьютерной программы, которая решает конкретную задачу, а также ее тестирование.

В работе изложены методы обработки статистических данных, расписаны все этапы создания программы, которая проводит обработку статистических данных, а также проведено ее тестирование. Данная программа написана на современном языке программирования высокого уровня C#.

МАТЕМАТИЧЕСКАЯ СТАТИСТИКА, ДИСПЕРСИЯ, ГИСТОГРАММА, МАТЕМАТИЧЕСКОЕ ОЖИДАНИЕ, СРЕДНЕКВАДРАТИЧЕСКОЕ ОТКЛОНЕНИЕ.

Содержание

программа алгоритм расчет управляющий

  • Введение
  • 1. Анализ задания
  • 1.1 Теоретические сведения, необходимые для выполнения работы
  • 1.2 Концепция решения задания
  • 1.3 Описание переменных и констант
  • 2. Разработка требований к программе и алгоритмам
  • 2.1 Разработка общих требований к программе и ее структуре
  • 2.2 Разработка интерфейса пользователя
  • 2.3 Разработка алгоритмов расчетов
  • 3. Программная реализация алгоритмов и управляющей программы
  • 3.1 Создание процедур и функций для реализации алгоритмов расчета
  • 3.2 Тестирование программы
  • Выводы
  • Приложение А
  • Приложение Б
  • Приложение В

Введение

Математическая статистика - это наука, которая изучает методы сбора, обработки, систематизации, анализа и интерпретации случайных явлений, которым присуще статистическое постоянство, с целью выявления закономерностей.

Современную математическу статистику определяют как науку о принятии решений в условиях неопределённости. Её задача состоит в создании методов сбора и обработки статистических данных для получения научных и практических выводов.

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

Обычно исследователь многократно повторяет свой опыт, получая большое количество однотипных данных, которые теперь надо обработать и сделать весомые выводы.

В ходе выполнения курсовой работы будут закреплены практические навыки работы в области программирования

1. Анализ задания

1.1 Теоретические сведения, необходимые для выполнения работы

Математическая статистика -- это раздел математики, который занимается систематизацией, обработкой и использованием статистических данных для теоретических и практических выводов.

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

Вторая задача математической статистики - разработать методы анализа статистических данных в зависимости от целей исследования.

Современная математическая статистика разрабатывает способы определения числа необходимых испытаний до начала исследования в ходе исследования. Её можно определить как науку о принятии решений в условии неопределённости.

Иначе, можно сказать, задача математической статистики состоит в создании методов сбора и обработки статистических данных.

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

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

В зависимости от конкретных результатов наблюдений математическая статистика делится на несколько разделов.

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

В современной науке считается, что любая область исследований не может быть настоящей наукой до тех пор, пока в неё не проникнет математика. В этом смысле математическая статистика является полномочным представителем математики в любой другой науке и обеспечивает научный подход к исследованиям. Можно сказать, что научный подход начинается там, где в исследовании появляется математическая статистика.

1.2 Концепция решения задания

Решение поставленной задачи (а именно обработки статистических данных, заданных таблицей) состоит из следующих этапов:

1. Считывание исходных данных (из файла формата *.txt).

2. Обработка полученных данных.

3. Корректировка (по необходимости) исходных данных.

4. Непосредственно вычисление параметров выборок, построение гистограммы.

5. Вывод результатов обработки (на форму или в файл формата *.html).

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

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

Среднее значение является характеристикой выборки, характеризующей среднее значение измеряемой величины по выборке. Среднее значение определяется по формуле [1]:

, (1)

где n - число элементов выборки,

Xi - i-й элемент выборки.

Математическое ожидание характеризует, аналогично среднему арифметическому, среднее значение признака по выборке и определяется формулой [2]:

, (2)

где n - число элементов выборки,

Xi - i-й элемент выборки,

Pi - вероятность появления i-го элемента выборки.

В данной работе математическое ожидание будем вычислять по следующей формуле [2.1]:

, (2.1)

Дисперсия характеризует средний квадрат отклонения признака по выборке от среднего значения признака по выборке, определяется формулой [3]:

, (3)

где - математическое ожидание выборки, состоящей из квадратов значений данной выборки,

- квадрат математического ожидания данной выборки.

Среднее квадратическое отклонения (СКО) характеризует среднее отклонение признака от среднего значения признака по выборке. СКО вычисляется по формуле [4]:

. (4)

1.3 Описание переменных и констант

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

Таблица 1

Переменные и константы

Имя переменной (константы)

Тип

Назначение

massGod

int[ ]

Переменная, предназначенная для хранения массива годов

massObyom

double[ ]

Переменная, предназначенная для хранения массива значений объема продаж

massCena

double[ ]

Переменная, предназначенная для хранения массива значений цены

massVyruchka

double[ ]

Переменная, предназначенная для хранения массива значений выручки

massMesyac

int [ ]

Переменная, предназначенная для хранения массива месяцев

sep

string[]

Массив, предназначенный для хранения разделителей для метода Split( )

Для работы программы необходимо подключить следующие библиотеки: System.IO, System.Drawing.Drawind2D.

System.IO - Библиотека, используемая для работы с файлами на носителях.

System.Drawing.Drawind2D - Библиотека, используемая для реализации методов рисования графических объектов на форме.

2. Разработка требований к программе и алгоритмам

2.1 Разработка общих требований к программе и ее структуре

Программа разработана для обработки статистических данных с помощью современного языка программирования высокого уровня C#.

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

Все функции системы доступны через меню пользователя, которое находится в верхней части главной формы. Меню состоит из следующих пунктов: «Файл», «Операции», «Справка». Все эти функции реализованы также с помощью аналогичных кнопок на панели инструментов.

Пункт меню «Файл» имеет 3 подпункта: «Ввести или изменить данные», «Сохранить», «Выход». Подпункт «Открыть» позволяет открыть файл с расширением *.txt и отобразить исходные данные на дочерней MDI-форме FormDannye. Подпункт «Сохранить» активен только после выполнения вычислений и позволяет открыть диалоговое окно сохранения результатов вычислений и исходных данных в файл с расширением *.html. Подпункт «Выход» позволяет выйти из программы.

Пункт меню «Операции» активен, если открыта форма ввода исходных данных FormDannye и позволяет вычислить характеристики по каждому из трех параметров (цена, выручка и объемы продаж), а также построить гистограмму. В случае если данные введены некорректно либо данные введены не полностью, программа выведет пользователю сообщение об ошибке.

Пункт меню «Справка» позволяет открыть пункт меню «О программе», в котором содержится информация об авторе программы.

В строке состояния постоянно отображаются текущие дата и время в поле lbTimeData. Для его полноценного функционирования в программе предусмотрен таймер timer1.

Программа позволяет считать исходные данные для вычислений из файла с расширением *.txt и провести анализ считанных данных. Для возможности удобного просмотра результаты вычислений можно сохранить в файл с расширением *.html.

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

Программа «Курсовой проект» имеет главное и дочерние окна. Главное окно программы служит контейнером для дочерних MDI-окон, позволяет вызвать дочерние формы, а также содержит в себе главное меню, панель инструментов, строку состояния.

Главное меню имеет следующую структуру: «Файл - Ввести или изменить данные», «Файл - Сохранить», «Файл - Выход», «Операции - Построить гистограмму», «Операции -Вычисления» «Справка - О программе».

Пункт главного меню «Файл - Ввести или изменить данные» вызывает модальное диалоговое окно открытия файла с исходными данными с расширением *.txt с последующим вызовом формы ввода исходных данных FormDannye и занесением в поля tbObyom, tbCena, tbVyruchka, cbxGod, cbxMesyac этой формы соответствующих данных.

Пункт главного меню «Файл - Сохранить» активен, когда открыта форма результатов вычислений FormDannye и вызывает модальное диалоговое окно сохранения файла с расширением *.html с исходными данными и результатом вычислений; в этом окне пользователь может выбратьместо, куда будет сохранен файл, а также имя файла.

Пункт главного меню «Файл - Выход» позволяет закрыть программу, включая главное и все дочерние окна.

Пункт главного меню «Операции» активен, если открыта форма ввода исходных данных FormDannye и позволяет запустить функцию обработки статистических данных. В случае, если данные введены некорректно либо какие-либо данные не введены, программа выведет сообщение об ошибке.

Пункт главного меню «О программе» вызывает модальное диалоговое окно, в котором содержится информация об авторе программы.

Панель инструментов предназначена для быстрого доступа к командам главного меню и полностью дублирует их. Она располагается непосредственно под главным меню в главном окне программы и состоит из 2 кнопок: «Открыть», «Сохранить»

Кнопка панели инструментов «Открыть» по функциональному назначению аналогична пункту главного меню «Файл - Ввести или изменить данные» и вызывает модальное диалоговое окно открытия файла с исходными данными.

Кнопка панели инструментов «Сохранить» активна, если открыта форма отображения результатов вычислений FormDannye, по функциональному назначению аналогична пункту главного меню «Файл - Сохранить» и позволяет вызвать модальное диалоговое окно сохранения исходных данных и результатов вычислений в файл с расширением *.html.

Внизу главного окна программы расположена строка состояния, в которой отображается текущие время и дата. Корректная работа данного элемента обеспечивается работающим в программе таймером timer1.

После открытия файла с исходными данными с помощью пункта меню «Файл - Открыть» (или после нажатия на соответствующие кнопки на панели инструментов) открывается дочерняя MDI-форма корректировки и просмотра исходных данных FormDannye.

Общий вид главного окна программы, главного окна с отображенными в нем дочерними MDI-формами, а также дочернего окна «О программе» приведен в приложении А.

2.3 Разработка алгоритмов расчетов

Для проведения процедуры обработки статистических данных программа должна выполнить ряд действий:

1. Получить исходные данные из файла *.txt.

2. Проверить корректность исходных данных.

3. В случае если данные введены корректно, запустить функцию обработки статистических данных.

4. Вывести результат вычислений.

Блок-схемы алгоритма работы программы приведена на рисунке 1. Подробные описания некоторых элементов блок-схемы приведены в таблице 2.

Таблица 2

Описание элементов блок-схем

Номер элемента

Описание

2

Открытие исходных данных с помощью функции Opener( ) с последующим заполнением массивов massGod, massCena, massObyom, massVyruchka и дальнейшей возможностью корректирования значений данных массивов в полях формы Form1

8

Построение гистограммы с помощью инструментов, предоставляемых библиотекой System.Drawing.Drawing2D

Рисунок 2.1 Блок-схема алгоритма работы программы

3. Программная реализация алгоритмов и управляющей программы

3.1 Создание процедур и функций для реализации алгоритмов расчета

После ввода пользователем исходных данных в программе необходимо провести анализ введенных данных. Для этого используются средства и компоненты библиотек, включенных в проект.

После проверки данных на корректность проводится занесение их в массивы. Для этого используются стандартные циклы вместе с процедурой считывания из текстового файла с помощью потока Filestream и средства чтения данных StreamReader.

После заполнения массивов и корректировки (если необходимо) некоторых (или всех) их значений проводятся вычисления. Поочередно для каждого параметра (выручка, цена и объем продаж) вычисляется среднее значение, математическое ожидание, дисперсия и среднее квадратическое отклонение.

Среднее значение вычисляется путем прибавления к переменной temp (временная сумма) значения каждого элемента данного массива, а затем деления полученного значения на количество элементов выборки. Аналогично вычисляется и математическое ожидание.

Дисперсия вычисляется путем подсчета разности между математическим ожиданием квадратов значений данного массива и квадратом математического ожидания исходного массива.

Среднее квадратическое отклонение вычисляется путем извлечения квадратного корня из значения дисперсии по данному параметру.

Вычисления проводятся для каждого параметра поочереди.

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

Гистограмма строится следующим образом: вначале задается количество интервалов - 10, затем находится интервал между наибольшим и наименьшим значениями выборки, и этот интервал разбивается на десят меньших интервалов, а затем подсчитывается количество попаданий данных массива в данный интервал, и в зависимости от полученных значений строится десять столбцов разной высоты, зависящей от количества попадания признака в данный интервал.

Для подсчета количество попаданий признака в интервал используется стандартный набор циклов и условных операторов.

Для рисования гистограммы используются стандартные методы библиотеки System.Drawing.Drawing2D, такие как DrawString, DrawRectangle, DrawLine и т.д.

Для полноценного функционирования данных методов введены внутренние переменные (кисти, шрифты, перья).

3.2 Тестирование программы

Все исходные данные заносим в файл с именем test.txt, который сохраняем на диск.

При открытии программы появляется главная форма Form1. Пункты главного меню «Файл - Сохранить», «Вычислить», а также кнопки на панели инструментов «Сохранить», «Вычислить» недоступны, остальные элементы управления доступны. В строке состояния отображаются текущие время и дата.

При выборе пункта меню «Файл - Ввести или изменить данные» открывается диалоговое окно открытия файла с исходными данными. Доступное расширение файлов - *.txt.

После открытия файла «test.txt» открывается дочерняя MDI-форма ввода исходных данных FormDannye. Пункт меню «Вычислить» на панели инструментов теперь активен.

После выбора пункта меню «Вычислить» форма Form1 закрывается, и открывается дочерняя форма отображения результатов вычислений FormDannye. В главной форме отображены результаты вычислений, и при нажатии кнопки «Построить гистограмму» нарисована гистограмма по параметру выручки.

После выбора пункта меню «Файл - Сохранить» открывается диалоговое окно сохранения файла с исходными данными и результатом вычислений. Доступное расширение сохраняемого файла - *.html. При открытии в браузере сохраненного файла result.html открываются таблицы с исходными данными и результатами вычислений.

При выборе пункта меню «Файл - Выход» программа закрывается.

Окна программы, файл с исходными данными, а также файл с результатами вычислений приведены в приложении В.

Выводы

В ходе работы над курсовым проектом были получены навыки разработки приложений Windows Forms, а также получен опыт оформления описания к программе.

Также были усовершенствованы навыки в области программирования на языке C#.

Список использованной литературы

1. Дьяконов, В.П. Справочник по алгоритмам и программам на языке бейсик для персональных ЭВМ / В.П. Дьяконов. М.: Наука, 1989. 240 с.

2. Мудров, А.Е. Численные методы для ПЭВМ на языках Бейсик, Фортран и Паскаль/А.Е. Мудров. Томск: МП «РАСКО», 1991. 272 с.: ил.

3. Грурман, В.Е. Теория вероятностей и математическая статистика /В.Е. Грурман. М.: Высшая шеъкола, 2005. 478с.

4. Королюк, В.С. Справочник по теории вероятностей и математической статистике / В.С. Королюк, Н.И. Портенко, А.В. Скороход, А.Ф. Турбин. М.: Наука, 1985. 640 с.

Приложение А

Формы программы

Общий вид главной формы программыКурсовой проект, формы исходных данных Данные, формы отображения результатов вычислений, формы «О программе» t приведен на рисунках А.1-А4.

Рисунок А.1 Главная форма программы Form1

Рисунок А.2 Дочерняя форма исходных данных FormDannye

Рисунок А.3 Форма отображения результатов вычислений

Рисунок А.4 Форма «О программе»

Приложение Б

Программный код

Программные коды главной формы FormMain, формы исходных данных WindowData, формы отображения результатов вычислений WindowResult, формы «О программе» FormAbout приведены в листингах Б.1-Б.4.

Листинг Б.1 - Код главной формы Form1

//Курсовой проект по программированию

//Программа для обработки статистических данных

//Выполнил ст. гр. СКС-14 Паламарчук Денис Алекстандрович

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace CorseProj

{

public partial class Form1: Form

{

//массивы данных

public double[] massGod { get; set; }//Год

public double[] massMesyac { get; set; }//Месяц

public double[] massCena { get; set; }//Цена

public double[] massObyom { get; set; }//Объем

public double[] massVyruchka { get; set; }//Выручка

private string strPechat { get; set; } //переменная для печати

public int razm { get; set; } //размер массивов данных

private bool flag; //готовность данных для расчетов и гистограммы

private bool flagend; //готовность данных для вывода

//объект класса (формы)

FormDannye fd = new FormDannye();

FormGistogr fg = new FormGistogr();

public Form1()

{

InitializeComponent();

flag = false;

flagend = false;

ControlStatus();

}

private void Form1_Load(object sender, EventArgs e)

{

}

private void ControlStatus()

{

if (flag == true)

{

расчетToolStripMenuItem.Enabled = true;

statbar.Text = "Данные внесены. Выберите действие...";

}

if (flag == false)

{

расчетToolStripMenuItem.Enabled = false;

сохранитьВHTMLToolStripMenuItem.Enabled = false;

сохранитьToolStripButton.Enabled = false;

statbar.Text = "Введите данные...";

}

//условия для flagend

if (flagend == true)

{

сохранитьToolStripButton.Enabled = true;

сохранитьВHTMLToolStripMenuItem.Enabled = true;

}

if (flagend == false)

{

сохранитьToolStripButton.Enabled = false;

сохранитьВHTMLToolStripMenuItem.Enabled = false;

}

}

//метод вычисления необходимых параметров для массива

private double[] RaschetParametr(double[] Arr)

{

double[] Param = new double[3];

//Param[0] - ср арифм оно же мат ожидание (выборочная средняя)

int count = 0;

double sum = 0;

for (int i = 0; i < razm; i++)

{

sum += Arr[count];

count++;

}

Param[0] = sum / razm;

count = 0;

//Param[1] - дисперсия

double sqsum = 0;

for (int i = 0; i < razm; i++)

{

sqsum += Math.Pow(Arr[count], 2);

}

Param[1] = Math.Abs(sqsum - Math.Pow(Param[0], 2)) / (razm - 1);

//Param[2] - СКО

Param[2] = Math.Sqrt(Param[1]);

return Param;

}

private void вводДанныхToolStripMenuItem_Click_2(object sender, EventArgs e)

{

fd.ShowDialog();

//присваивание данных из формы данных на главную

if (fd.flag == false)

{

MessageBox.Show("Данные не обработаны/не введены", "Внимание!");

flag = false;

}

else

{

razm = fd.razm;

massGod = fd.massGod;

massMesyac = fd.massMesyac;

massVychObyom = fd.massVychCena;

massCena = fd.massCena;

massVyruchka = fd.massVyruchka;

flag = true;

}

ControlStatus();

}

private void сохранитьВHTMLToolStripMenuItem_Click_1(object sender, EventArgs e)

{

SaveFileDialog sfd = new SaveFileDialog();

sfd.Filter = "html files (*.html)|*.html";

if (sfd.ShowDialog() == DialogResult.OK)

{

StreamWriter sw = new StreamWriter(sfd.FileName);

sw.WriteLine("<html>");

sw.WriteLine(" <HEAD>");

sw.WriteLine("<meta charset='utf-8'>");

sw.WriteLine(" <TITLE>Статистика доходов</TITLE>");

sw.WriteLine(" </HEAD>");

sw.WriteLine("<BODY>");

sw.WriteLine("<table border=\"1\">");

sw.WriteLine("<caption>Исходные данные</caption>");

sw.WriteLine("<tr>");

sw.WriteLine("<th>Год</th>");

sw.WriteLine("<th>Месяц</th>");

sw.WriteLine("<th>Объем, тыс. т</th>");

sw.WriteLine("<th>Цена за 1 т, тыс. грн</th>");

sw.WriteLine("<th>Выручка, тыс. грн</th>");

sw.WriteLine("</tr>");

for (int i = 0; i < razm; i++)

{

sw.WriteLine("<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td></tr>", massGod[i], massMesyac[i], massVychObyom[i], massCena[i], massVyruchka[i]);

}

sw.WriteLine("</table>");

sw.WriteLine("</BODY>");

sw.WriteLine("</HTML>");

sw.Close();

MessageBox.Show("Успешно сохранено!");

}

}

private void выходToolStripMenuItem_Click_1(object sender, EventArgs e)

{

this.Close();

}

private void построитьГистограммуToolStripMenuItem_Click_1(object sender, EventArgs e)

{

//для передачи данных в дочернюю форму создадим объект этой формы и укажем родителя

FormGistogr f = new FormGistogr();

f.Owner = this;

f.ShowDialog();

}

private void вычислитьНеобходимоеToolStripMenuItem_Click_1(object sender, EventArgs e)

{

double[] Parametry = new double[3];

// 1) для массива Объема MassResValue

Parametry = RaschetParametr(massVychObyom);

//Вывод в ТБ

textbox.Text += " Параметры для объема продаж:\n";

textbox.Text += " Среднее значение - " + Parametry[0].ToString();

textbox.Text += "\n Мат. ожидание - " + Parametry[0].ToString();

textbox.Text += "\n Дисперсия - " + Parametry[1].ToString();

textbox.Text += "\n СКО - " + Parametry[2].ToString() + "\n";

Array.Clear(Parametry, 0, 3);

// 2) для массива Цены MassPrice

Parametry = RaschetParametr(massCena);

//Вывод в ТБ

textbox.Text += " Параметры для цены товара за 1 т:\n";

textbox.Text += " Среднее значение - " + Parametry[0].ToString();

textbox.Text += "\n Мат. ожидание - " + Parametry[0].ToString();

textbox.Text += "\n Дисперсия - " + Parametry[1].ToString();

textbox.Text += "\n СКО - " + Parametry[2].ToString() + "\n";

Array.Clear(Parametry, 0, 3);

// 3) для массива Выручки MassProfit

Parametry = RaschetParametr(massVyruchka);

//Вывод в ТБ

textbox.Text += " Параметры для объема выручки:\n";

textbox.Text += " Среднее значение - " + Parametry[0].ToString();

textbox.Text += "\n Мат. ожидание - " + Parametry[0].ToString();

textbox.Text += "\n Дисперсия - " + Parametry[1].ToString();

textbox.Text += "\n СКО - " + Parametry[2].ToString();

Array.Clear(Parametry, 0, 3);

flagend = true;

ControlStatus();

}

private void оПрограммеToolStripMenuItem_Click_1(object sender, EventArgs e)

{

AboutBox ab = new AboutBox();

ab.Show();

}

private void timer1_Tick_1(object sender, EventArgs e)

{

datetimebar.Text = System.DateTime.Now.ToString();

}

}

}

Листинг Б.2 - Код формы FormDannye

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace CorseProjKislyakova

{

public partial class FormDannye: Form

{

//массивы данных

public double[] massGod { get; set; }

public double[] massMesyac { get; set; }

public double[] massObyom { get; set; }

public double[] massCena{ get; set; }

public double[] massVychCena { get; set; }

public double[] massVyruchka { get; set; }

public int razm { get; set; } //кол-во записей

public int n = 10; //номер по списку

public bool flag;

public FormDannye()

{

InitializeComponent();

очиститьToolStripMenuItem.Enabled = false;

обновитьДанныеToolStripMenuItem.Enabled = false;

расчитатьСтолбцыToolStripMenuItem.Enabled = false;

далееToolStripMenuItem.Enabled = false;

flag = false;

}

private void FormData_Load(object sender, EventArgs e)

{

}

private void Sbros() //метод очистки массивов и сброса параметров

{

Array.Clear(massGod, 0, razm);

Array.Clear(massMesyac, 0, razm);

Array.Clear(massObyom, 0, razm);

Array.Clear(massCena, 0, razm);

textbox.Clear();

razm = 0;

очиститьToolStripMenuItem.Enabled = false;

обновитьДанныеToolStripMenuItem.Enabled = false;

расчитатьСтолбцыToolStripMenuItem.Enabled = false;

далееToolStripMenuItem.Enabled = false;

flag = false;

}

private void открытьTXTToolStripMenuItem_Click_1(object sender, EventArgs e)

{

//открытие файла

OpenFileDialog ofd = new OpenFileDialog();

ofd.Filter = "TXT Files (*.txt)|*.txt"; //фильтр

if (ofd.ShowDialog() == DialogResult.OK)

{

razm = File.ReadAllLines(ofd.FileName).Length - 1; //определим размер массива

//определим размер каждого массива

massGod = new double[razm];

massMesyac = new double[razm];

massObyom = new double[razm];

massCena = new double[razm];

//очистим массивы и ТБ

Array.Clear(massGod, 0, razm);

Array.Clear(massMesyac, 0, razm);

Array.Clear(massObyom, 0, razm);

Array.Clear(massCena, 0, razm);

textbox.Clear();

string[] mass1; //временный массив

int count = 1; //счетчик строк

string[] massFile;

string[] sep = new string[] { " " }; //разделитель для метода Split

string s1;

try

{

massFile = File.ReadAllLines(ofd.FileName);

for (int i = 0; i < razm; i++) //заполнение массивов данными из файла

{

s1 = massFile[i];

mass1 = s1.Split(sep, StringSplitOptions.RemoveEmptyEntries);

massGod[i] = Double.Parse(mass1[0]);

massMesyac[i] = Double.Parse(mass1[1]);

massObyom[i] = Double.Parse(mass1[2]);

massCena[i] = Double.Parse(mass1[3]);

count++;

}

}

//обработка всех возможных исключений

catch (IOException ex)

{

MessageBox.Show(ex.Message, "Ошибка!");

flag = false;

}

catch (ArgumentException ex)

{

MessageBox.Show(ex.Message, "Ошибка!");

flag = false;

}

catch (IndexOutOfRangeException ex)

{

MessageBox.Show(ex.Message, "Ошибка!");

flag = false;

}

catch (FormatException ex)

{

MessageBox.Show(ex.Message, "Ошибка!");

flag = false;

}

catch

{

MessageBox.Show("Произошла неизвестная ошибка", "Ошибка!");

flag = false;

}

//вывод в ТБ

for (int i = 0; i < razm; i++)

{

textbox.Text += " " + massGod[i].ToString() + " " + massMesyac[i].ToString() + " " +

massObyom[i].ToString() + " " + massCena[i].ToString() + " \n";

}

очиститьToolStripMenuItem.Enabled = true;

обновитьДанныеToolStripMenuItem.Enabled = true;

расчитатьСтолбцыToolStripMenuItem.Enabled = true;

}

}

private void очиститьToolStripMenuItem_Click_1(object sender, EventArgs e)

{

Sbros();

}

private void обновитьДанныеToolStripMenuItem_Click_1(object sender, EventArgs e)

{

string[] m1; //временный массив

string[] mass;

string[] sep = new string[] { " ", " " }; //разделитель для метода Split

string str;

try

{

mass = textbox.Lines;

for (int i = 0; i < razm; i++) //заполнение массивов данными из ТБ

{

str = mass[i];

m1 = str.Split(sep, StringSplitOptions.RemoveEmptyEntries);

massGod[i] = Double.Parse(m1[0]);

massMesyac[i] = Double.Parse(m1[1]);

massObyom[i] = Double.Parse(m1[2]);

massCena[i] = Double.Parse(m1[3]);

}

}

//обработка всех возможных исключений

catch (IOException ex)

{

MessageBox.Show(ex.Message, "Ошибка обновления!");

Sbros();

}

catch (ArgumentException ex)

{

MessageBox.Show(ex.Message, "Ошибка обновления!");

Sbros();

}

catch (IndexOutOfRangeException ex)

{

MessageBox.Show(ex.Message, "Ошибка обновления!");

Sbros();

}

catch (FormatException ex)

{

MessageBox.Show(ex.Message, "Ошибка обновления!");

Sbros();

}

catch

{

MessageBox.Show("Произошла неизвестная ошибка", "Ошибка обновления!");

Sbros();

}

//вывод в ТБ

textbox.Clear();

for (int i = 0; i < razm; i++)

{

textbox.Text += " " + massGod[i].ToString() + " " + massMesyac[i].ToString() + " " +

massObyom[i].ToString() + " " + massCena[i].ToString() + " \n";

}

flag = false;

}

private void расчитатьСтолбцыToolStripMenuItem_Click_1(object sender, EventArgs e)

{

//определяем размеры массивов

massVychCena = new double[razm];

massVyruchka = new double[razm];

try

{

//вычисления

for (int i = 0; i < razm; i++)

{

massVychCena[i] = Math.Round((massObyom[i] * n) / (n + 1), 1);

}

for (int i = 0; i < razm; i++)

{

massVyruchka[i] = Math.Round(massVychCena[i] * massCena[i], 1);

}

}

//обработка исключений

catch (IndexOutOfRangeException ex)

{

MessageBox.Show(ex.Message, "Ошибка вычислений!");

Sbros();

}

catch

{

MessageBox.Show("Неизвестная ошибка при расчете.", "Ошибка вычислений!");

Sbros();

}

//вывод в ТБ

textbox.Clear();

for (int i = 0; i < razm; i++)

{

textbox.Text += " " + massGod[i].ToString() + " " + massMesyac[i].ToString() + " " +

massVychCena[i].ToString() + " " + massCena[i].ToString() + " " + massVyruchka[i].ToString() + "\n";

}

далееToolStripMenuItem.Enabled = true;

обновитьДанныеToolStripMenuItem.Enabled = false;

расчитатьСтолбцыToolStripMenuItem.Enabled = false;

flag = true;

}

private void далееToolStripMenuItem_Click_1(object sender, EventArgs e)

{

this.Close();

flag = true;

}

prvate void textbox_KeyPress(object sender, KeyPressEventArgs e)

{

//разрешаем ввод только цифр и запятой в ТБ

//разрешить цифры

if ((e.KeyChar >= '0') && (e.KeyChar <= '9'))

return;

//разрешаем запятую

if (e.KeyChar == '-')

return;

//разрешить <Enter> <Beckspace> esc...

if (Char.IsControl(e.KeyChar))

return;

//все остальное запретить

e.Handled = true;

}

}

}

Листинг Б.3 - Код для гистограммы

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace CorsePro

{

public partial class FormGistogr: Form

{

private int razm { get; set; }

public double[] Dannye { get; set; }

public FormGistogr()

{

InitializeComponent();

}

private void FormGraph_Load_1(object sender, EventArgs e)

{

//получим данные из главной формы

Form1 main = this.Owner as Form1;

if (main != null)

{

razm = main.razm;

Dannye = main.massVyruchka;

}

//Гистограмма выручки

//Необходимые переменные

Bitmap BMP = new Bitmap(pb1.Width, pb1.Height);

Graphics G = Graphics.FromImage(BMP);

Pen PenFrame = new Pen(Color.Black, 2);

Pen PenRect = new Pen(Color.Gray, 2);

Pen PenGrid = new Pen(Color.LightGray, 1);

Brush brushText = new SolidBrush(Color.Black);

Brush brushRect = new SolidBrush(Color.Pink);

Font FontText = new Font("Arial", 6);

Array.Sort(Dannye);

double maxX = Dannye[Dannye.Length - 1];

double minX = Dannye[0];

Dannye = main.massVyruchka;

int[] intervals = new int[10];

double stepX = (maxX - minX) / 10;

for (int i = 0; i < razm; i++)

{

for (int j = 0; j < 10; j++)

{

if (Dannye[i] >= (minX + stepX * j) && Dannye[i] <= (minX + stepX * (j + 1)))

{

intervals[j]++;

}

}

}

int maxY = intervals[0], minY = intervals[0];

for (int j = 0; j < 10; j++)

{

if (intervals[j] > maxY)

maxY = intervals[j];

if (intervals[j] < minY)

minY = intervals[j];

}

double stepY = (maxY - minY) / 10;

//Масштабы

float scalex = (float)((pb1.Width - 60) / (maxX - minX));

float scaley = (float)((pb1.Height - 60) / (maxY - minY));

//Очистим поле рисования

G.Clear(Color.White);

//Рисуем сетку

G.DrawRectangle(PenFrame, 30, 30, pb1.Width - 64, pb1.Height - 64);

int movex = (pb1.Width - 60) / 10;

int movey = (pb1.Height - 60) / 10;

for (int ym = 0; ym < 10; ym++)

{

G.DrawLine(PenGrid, 30, 30 + ym * movey, pb1.Width - 36, 30 + ym * movey);

G.DrawLine(PenGrid, 30 + ym * movex, 30, 30 + ym * movex, pb1.Height - 32);

}

//Подписи по осям

for (int i = 0; i < 11; i++)

{

G.DrawString(Convert.ToString(Math.Round(minX + stepX * i, 2)), FontText, brushText, (float)(30 + movex * i), (float)(pb1.Height - 25));

G.DrawString(Convert.ToString(Math.Round(minY + stepY * i, 1)), FontText, brushText, 10, (float)(pb1.Height - 40 - movey * i));

}

G.DrawString("Выручка, тыс. руб.", FontText, brushText, (float)(pb1.Width / 2 - 30), (float)(pb1.Height - 10));

G.DrawString("Частота значений выручки", FontText, brushText, 10, 15);

//Столбцы гистограммы

double moveyY = (pb1.Height - 60) / maxY;

for (int i = 0; i < 10; i++)

{

G.DrawRectangle(PenRect, (float)(31 + movex * i), (float)(pb1.Height - 34 - intervals[i] * moveyY), movex, (float)(moveyY * intervals[i]));

G.FillRectangle(brushRect, (float)(31 + movex * i), (float)(pb1.Height - 34 - intervals[i] * moveyY), movex, (float)(moveyY * intervals[i]));

}

//Загрузим изображение в PictureBox

pb1.Image = BMP;

}

}

}

Приложение В

Тестовый пример

Главная форма программы, файл с исходными данными, окно открытия файла с исходными данными, окно программы с открытой формой ввода исходных данных, окно программы с открытой формой отображения результатов, окно сохранения файла с результатами вычислений, файл с результатами вычислений приведены на рисунках В.1-В.7.

Рисунок В.1 Главная форма программы

Рисунок В.2 Файл с исходными данными

Рисунок В.3 Окно открытия файла с исходными данными

Рисунок В.4 Главная форма с открытой формой ввода исходных данных

Рисунок В.5 Главная форма с открытой формой отображения результатов вычислений

Рисунок В.6 Окно сохранения файла с результатами вычислений

Рисунок В.7 Файл с результатами вычислений

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

...

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

  • Разработка программы тестирования студентов по MS PowerPoint с кодом на языке Delphi. Создание алгоритма для решения функциональных требований задачи. Описание переменных, вспомогательных процедур, входных и выходных данных для реализации программы.

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

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

    реферат [125,2 K], добавлен 28.05.2014

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

    контрольная работа [831,0 K], добавлен 24.11.2013

  • Анализ затрат и прибыли. Создание программного проекта для решения задачи о прибыли и убытках на языке программирования C#. Использование функций и переменных, компиляция программы. Алгоритмы и структуры данных. Тестирование программного обеспечения.

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

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

    курсовая работа [34,9 K], добавлен 11.01.2011

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

    курсовая работа [305,9 K], добавлен 03.07.2011

  • Создание программы для вычисления значения функции на основе определённой формулы. Уточнение структуры входных и выходных данных и определение ассемблерного формата их представления. Разработка алгоритмов для реализации работы программного обеспечения.

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

  • Описание особенностей программирования циклических алгоритмов на С/С++. Использование операторов цикла для организации повтора в программе определенных действий. Создание и реализация программы приближенного вычисления интеграла методом трапеций.

    лабораторная работа [86,3 K], добавлен 25.03.2019

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

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

  • Основные особенности эволюционных алгоритмов. Описание алгоритмов селекции, мутации, скрещивания, применяемых для реализации генетических алгоритмов. Вычисление функции приспособленности. Программная реализация. Тестирование и руководство пользователя.

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

  • Разработка программы для решения инженерных задач с использованием функций, процедур и сложных типов данных, в том числе динамических массивов и объединений. Интерфейс ввода/вывода. Схемы алгоритмов отдельных подзадач. Технические требования к программе.

    курсовая работа [60,7 K], добавлен 26.11.2012

  • Разработка и тестирование программы класса Точка. Спецификация программы. Сценарий диалога с пользователем. Разработка структур данных и алгоритмов. Таблица параметров функций программы. Текст программы на языке C++. Особенности тестирования программы.

    лабораторная работа [43,1 K], добавлен 21.07.2012

  • Разработка концептуальной модели базы данных. Реализация алгоритмов и разработка управляющей программы. Разработка структуры системы управления данными. Методика проведения и результаты тестирования. Функционирование разработанного программного модуля.

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

  • Приемы программирования в Delphi. Алгоритм поиска альфа-бета отсечения, преимущества. Описание программного средства. Разработка программы, реализующая алгоритм игры "реверси". Руководство пользователя. Листинг программы. Навыки реализации алгоритмов.

    курсовая работа [357,1 K], добавлен 28.02.2011

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

    курсовая работа [61,1 K], добавлен 25.07.2012

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

    курсовая работа [391,1 K], добавлен 30.09.2013

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

    дипломная работа [6,3 M], добавлен 10.06.2013

  • Изучение принципов построения линейных алгоритмов и простых расчетных программ на языке программирования C. Разработка программы расчета математических выражений на основе вводимых данных. Создание консольных приложений в среде Microsoft Visual Studio.

    лабораторная работа [254,4 K], добавлен 23.11.2014

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

    курсовая работа [532,7 K], добавлен 20.07.2014

  • Разработка программы, решающей базовую задачу линейного программирования симплекс-методом с помощью симплекс-таблиц. Целевая функция с определенным направлением экстремума и система ограничений для нее. Разработка алгоритма программы, ее листинг.

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

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