Структурное программирование
Разработка программы по решению задачи средствами языка программирования C++. Использование статических массивов и структуры данных, для хранения информации о рейсах "WORKER". Возможность добавления, удаления, просмотра данных, и их сортировка и поиск.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 26.06.2014 |
Размер файла | 68,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
Введение
1. Постановка задачи
1.1 Задание
1.2 Конечные цели решения задачи
1.3 Формы выдачи результатов
1.4 Описание используемых данных
2. Анализ и исследование задачи
2.1 Типы решения задачи
2.2 Технические и программные средства для её решени
2.3 Математическая модел
3. Алгоритм решения задачи
3.1 Метод проектирования алгоритма
3.2 Модули
3.3 Метод тестирования
3.4 Последовательность создания программы
3.5 Блок-схема программы
3.6 Програмный код
Заключение
Список используемой литературы
Введение
В данной курсовой работе будет рассмотрена разработка программы по решению приведенной задачи средствами языка программирования C++. В нашей программе будут использоваться статические массивы и структуры данных, для хранения информации о рейсах «WORKER», а также предусмотрены возможности добавления, удаления, просмотра данных, а также их сортировка и поиск по нескольким критериям.
язык программирование информация
1. Постановка задачи
1.1 Задание
Описать структуру с именем WORKER, содержащую следующие поля:
1. фамилия и инициалы работника;
2. название занимаемой должности;
3. год поступления на работу.
Написать программу, выполняющую следующие действия:
1. ввод с клавиатуры данных в массив, состоящий из десяти структур типа WORKER; записи должны быть размещены по алфавиту;
2. вывод на дисплей фамилий работников, чей стаж работы в организации превышает значение, введенное с клавиатуры;
3. если таких работников нет, вывести на дисплей соответствующее сообщение.
1.2 Конечные цели решения задачи
Перед нами стоит задача разработки программы «WORKER», возможности которой приведены выше. Следовательно, нашей конечной целью является разработка программы, реализующей требуемые задачи, а также не содержащей ошибки и с понятным для пользователя интерфейсом.
1.3 Формы выдачи результатов
Так как наша программа представляет собой окно в консоли, то результаты будут выдаваться в виде диалога в окне консоли.
1.4 Описание используемых данных
В программе используется структура «WORKER», содержащая в себе 3 поля, два из которых символьные и одно числовое целого типа:
struct WORKERchar NAME[80]char POS[20]int YEAR |
-структура «WORKER»-фамилия и инициалы сотрудника-должность сотрудника-год поступления |
2. Анализ и исследование задачи.
2.1 Типы решения задачи
Решение задач определяется выбором способа ее решения. Для реализации задачи мы построили модель проектирования структуры программы в виде блок - схемы и последовательных шагов к конечному результату.
Итогом исследования являются конечные результаты работы программы (ввод, вывод, сортировка, поиск по определенным полям в таблице структуры)
Для решения данной задачи была применена сортировка методом вставки, последовательный поиск.
2.2 Технические и программные средства для её решения
Для реализации технической стороны нашей задачи используется ноутбук ASUS K53SM (Intel Core i7 2670QM 2200Mhz/15.6"/1366x768/6144Mb/500Gb) с операционной системой Windows 7 HomePremium
Также устройства ввода: клавиатура, мышь.
И устройства вывода: дисплей
В качестве программных средств используется язык программирования C++ .
2.3 Математическая модель
Для решения поставленной задачи была использована сортировка методом пузырька.
Сортировка вставками - простой алгоритм сортировки, преимущественно использующийся в учебном программировании. К положительной стороне метода относится простота реализации, а также его эффективность на частично упорядоченных последовательностях, и/или состоящих из небольшого числа элементов. Тем не менее, высокая вычислительная сложность не позволяет рекомендовать алгоритм в повсеместном использовании.
Рассмотрим алгоритм сортировки вставками на примере колоды игральных карт. Процесс их упорядочивания по возрастанию (в колоде карты расположены в случайном порядке) будет следующим. Обратим внимание на вторую карту, если ее значение меньше первой, то меняем эти карты местами, в противном случае карты сохраняют свои позиции, и алгоритм переходит к шагу 2. На 2-ом шаге смотрим на третью карту, здесь возможны четыре случая отношения значений карт:
1. первая и вторая карта меньше третьей;
2. первая и вторая карта больше третьей;
3. первая карта уступает значением третьей, а вторая превосходит ее;
4. первая карта превосходит значением третью карту, а вторая уступает ей.
В первом случае не происходит никаких перестановок. Во втором - вторая карта смещается на место третьей, первая на место второй, а третья карта занимает позицию первой. В предпоследнем случае первая карта остается на своем месте, в то время как вторая и третья меняются местами. Ну и наконец, последний случай требует рокировки лишь первой и третьей карт. Все последующие шаги полностью аналогичны расписанным выше.
На входе:
массив TABL[i].NAME
for (int i = 0; i<Num; i++)
{for (int j = 0; j<Num; j++)
{if (TABL[i].NAME[0] < TABL[j].NAME[0])
{swap(TABL[i], TABL[j]);
}
else if (TABL[i].NAME[0] == TABL[j].NAME[0])
{if (TABL[i].NAME[1] < TABL[j].NAME[1])
{swap(TABL[i], TABL[j]);
}
}
}
}
Для поиска, из имеющихся методов, был выбран метод последовательного поиска.
Суть метода заключается в том, что последовательно просматривается массив, пока не будет найден нужный элемент массива. Последовательный поиск в среднем случае выполнит проверку 1/2n элементов. В наилучшем случае она выполнит проверку только одного элемента, а в наихудшем - n элементов. Если объем данных не велик, эта производительность будет приемлемой.
3. Алгоритм решения задачи
3.1 Метод проектирования алгоритма
Методы проектирования алгоритмов включают: нисходящее проектирование, модульность, структурное программирование.
Нисходящее проектирование предполагает последовательное разбиение исходной задачи на подзадачи до такой конкретизации, когда подзадача сможет быть реализована одним оператором выбранного для программирования языка. По ходу нисходящего проектирования та или иная подзадача может сформировать самостоятельный модуль. Тогда может быть применен принцип модульного программирования. Он обеспечивает легкость составления алгоритмов и отладки программ, легкость сопровождения и модификации, а также возможность одновременной разработки различных модулей разными специалистами с использованием разных языков программирования.
При работе над модулем можно применить принцип структурного программирования. Его цель - повышение читабельности и ясности алгоритма (и программы), более высокой производительности программистов и упрощение отладки.
При решении нашей курсовой работы мы будем придерживаться модульного метода проектирования. Вя наша программа будет состоять из нескольких модулей, у каждой из которых будет своя функция. Это позволит проще отслеживать ошибки, а также каждый модуль будет работать независимо от наличия ошибок в других частях программы (модулях). Далее приведены непосредственно сами модули.
3.2 Модули
1. Ввод БД с клавиатуры
{setlocale(LC_ALL, "Russian");//Объявляем локализацию текста в консоли
for (int i = 0; i<Num; i++)//Заполнение структуры данными
{system("cls");
cin.get(); cout«"Введите ФИО работника: "; cin.getline(TABL[i].NAME, 80);
cout«"Введите должность работника: "; cin»TABL[i].POS;
cout«"Введите год поступления на работу: "; cin»TABL[i].YEAR;
}
2. Cортировка БД по фамилиям сотрудников
for (int i = 0; i<Num; i++)
{for (int j = 0; j<Num; j++)
{if (TABL[i].NAME[0] < TABL[j].NAME[0])
{swap(TABL[i], TABL[j]);
}
else if (TABL[i].NAME[0] == TABL[j].NAME[0])
{if (TABL[i].NAME[1] < TABL[j].NAME[1])
{swap(TABL[i], TABL[j]);
}
}
}
}
3. Вывод текущей БД на экран
system("cls");
for (int i = 0; i<Num; i++)
{cout«"ФИО работника: "«TABL[i].NAME«endl;
cout«"Должность работника: "«TABL[i].POS«endl;
cout«"Год поступления на работу: "«TABL[i].YEAR«endl;
cout«endl;
}
4. Поиск работников имеющих стаж работы отличный от введенного числа
system("pause"); system("cls");
short Year; bool flag = false; //Объявляем переменные
cout«"\nВведите нужный вам год и вы узнаете работников \nимеющих стаж работы не меньше года: ";
AskYear: cin»Year; system("cls"); //Ввод года и очистка консоли от записей
if (Year <= 0)
{cout«"Вы ввели недопустимый год! Введите корректный год :"; goto AskYear; //Запрос на повторный ввод значения "год"
}
else
{for (int i = 0; i<Num; i++)//Цикл перебора массива структур TABL поля NAME
{if (TABL[i].YEAR < Year)//Условие проверяющее стаж работника с введенным годом с клавиатуры
{for (int j = 0; j<sizeof(TABL[i].NAME); j++)//Цикл проверки строки NAME
{if (TABL[i].NAME[j] == ' ')//Проверка символов на равенство "пробел" или нет.
{break; //Вывод из цикла если "пробел"
}
else
{cout«TABL[i].NAME[j]; //Вывод символа если не равен "пробелу"
}
}
cout«endl;
flag = true;
}
}
}
if (flag == false) cout«"Работников со стажем не найдено.\n\n";//Вывод сообщения (сотрудников со стажем не найдено)
3.3 Метод тестирования
Тестирование - очень важный и трудоемкий этап процесса разработки программного обеспечения, так как правильное тестирование позволяет выявить подавляющее большинство ошибок, допущенных при составлении программ.
Процесс разработки программного обеспечения предполагает три стадии тестирования: автономное, комплексное и системное, каждая из которых соответствует завершению соответствующей части Системы.
Различают два подхода к формированию тестов: структурный и функциональный. Каждый из указанных подходов имеет свои особенности и области применения.
Структурное тестирование.
Структурное тестирование называют также тестированием по «маршрутам», так как в этом случае тестовые наборы формируют путем анализа маршрутов, предусмотренных алгоритмом.
Под маршрутами при этом понимают последовательности операторов программы, которые выполняются при конкретном варианте исходных данных.
В основе структурного тестирования лежит концепция максимально полного тестирования всех маршрутов программы. Так, если алгоритм программы включает ветвление, то при одном наборе исходных данных может быть выполнена последовательность операторов, реализующая действия, которые предусматривает одна ветвь, а при втором - другая. Соответственно, для программы будут существовать маршруты, различающиеся выбранным при ветвлении вариантом.
Считают, что программа проверена полностью, если с помощью тестов удается осуществить выполнение программы по всем возможным маршрутам передач управления. Однако нетрудно видеть, что даже в программе среднего уровня сложности число неповторяющихся маршрутов может быть очень велико, и, следовательно, полное или исчерпывающее тестирование маршрутов, как правило, невозможно.
Структурный подход к тестированию имеет ряд недостатков. Так тестовые наборы, построенные по данной стратегии:
· не обнаруживают пропущенных маршрутов;
· не обнаруживают ошибок, зависящих от обрабатываемых данных, например, в операторе if (a - b) <eps - пропуск функции абсолютного значения abs проявится только, если а <b;
· не дают гарантии, что программа правильна, например, если вместо сортировки по убыванию реализована сортировка по возрастанию.
Для формирования тестов программу представляют в виде графа, вершины которого соответствуют операторам программы, а дуги представляют возможные варианты передач и управления.
Функциональное тестирование.
Одним из способов проверки программ является тестирование с управлением по данным или по принципу «черного ящика». В этом случае программа рассматривается как «черный ящик», и целью тестирования является выяснение обстоятельств, в которых поведение программы не соответствует спецификации.
Для обнаружения всех ошибок в программе, используя управление по данным, необходимо выполнить исчерпывающее тестирование, т. е. тестирование на всех возможных наборах данных. Для тех же программ, где исполнение команды зависит от предшествующих ей событий, необходимо проверить и все возможные последовательности. Очевидно, что проведение исчерпывающего тестирования для подавляющего большинства случаев невозможно. Поэтому обычно выполняют «разумное» или «приемлемое» тестирование, которое ограничивается прогонами программы на небольшом подмножестве всех возможных входных данных. Этот вариант не дает гарантии отсутствия отклонений от спецификаций.
Правильно выбранный тест должен уменьшать, причем более чем на единицу, число других тестов, которые должны быть разработаны для обеспечения требуемого качества программного обеспечения.
Мы будем использовать именно этот способ тестирования, так как он менее трудоемкий, чем метод «белого ящика» (структурный анализ).
3.4 Последовательность создания программы
Мы проанализировали и исследовали задачу курсовой работы, выбрали метод проектирования алгоритма, определили функции и возможности, которые будет предоставлять программа. Теперь можно приступить непосредственно к разработке программы по её модулям.
3.5 Блок-схема программы
3.6 Програмный код
#include "stdafx.h"
#include <iostream>
#include <locale>
using namespace std;
#define Num 5
struct WORKER
{char NAME[80];
char POS[20];
int YEAR;
};
WORKER TABL[Num];
void main()
{setlocale(LC_ALL, "Russian");//Объявляем локализацию текста в консоли
for (int i = 0; i<Num; i++)//Заполнение структуры данными
{system("cls");
cin.get(); cout«"Введите ФИО работника: "; cin.getline(TABL[i].NAME, 80);
cout«"Введите должность работника: "; cin»TABL[i].POS;
cout«"Введите год поступления на работу: "; cin»TABL[i].YEAR;
}
//Сортировка по Алфавиту
for (int i = 0; i<Num; i++)
{for (int j = 0; j<Num; j++)
{if (TABL[i].NAME[0] < TABL[j].NAME[0])
{swap(TABL[i], TABL[j]);
}
else if (TABL[i].NAME[0] == TABL[j].NAME[0])
{if (TABL[i].NAME[1] < TABL[j].NAME[1])
{swap(TABL[i], TABL[j]);
}
}
}
}
//Вывод работников по алфавиту
system("cls");
for (int i = 0; i<Num; i++)
{cout«"ФИО работника: "«TABL[i].NAME«endl;
cout«"Должность работника: "«TABL[i].POS«endl;
cout«"Год поступления на работу: "«TABL[i].YEAR«endl;
cout«endl;
}
//Поиск работников имеющих стаж работы отличный от введенного числа
system("pause"); system("cls");
short Year; bool flag = false; //Объявляем переменные
cout«"\nВведите нужный вам год и вы узнаете работников \nимеющих стаж работы не меньше года: ";
AskYear: cin»Year; system("cls"); //Ввод года и очистка консоли от записей
if (Year <= 0)
{cout«"Вы ввели недопустимый год! Введите корректный год :"; goto AskYear; //Запрос на повторный ввод значения "год"
}
else
{for (int i = 0; i<Num; i++)//Цикл перебора массива структур TABL поля NAME
{if (TABL[i].YEAR < Year)//Условие проверяющее стаж работника с введенным годом с клавиатуры
{for (int j = 0; j<sizeof(TABL[i].NAME); j++)//Цикл проверки строки NAME
{if (TABL[i].NAME[j] == ' ')//Проверка символов на равенство "пробел" или нет.
{break; //Вывод из цикла если "пробел"
}
else
{cout«TABL[i].NAME[j]; //Вывод символа если не равен "пробелу"
}
}
cout«endl;
flag = true;
}
}
}
if (flag == false) cout«"Работников со стажем не найдено.\n\n";//Вывод сообщения (сотрудников со стажем не найдено)
system("pause");
}
Заключение
В данной курсовой работе была разработана программа, позволяющая работать с базой данных «WORKER» в соответствии с поставленными требованиями. Программа включает в себя процедуры, обеспечивающие выполнение всех поставленных задач для работы с базой данных. Главное меню программы позволяет обеспечить доступ к функциям программы и к сведениям, хранящимся в базе данных «WORKER».
С помощью класса статических массивов эффективно использовалась память, необходимая для работы программы. Проведенное тестирование показало работоспособность программы и соответствие её требованиям задания на курсовой проект.
Список используемой литературы
1. Б. Страуструп. Язык программирования С++, 3-е издпер. с англ. - М.: "Бином", СПб.: "Невский диалект", 1999. - 991 с., ил.
2. Т.А. Павловская. Ю.А. Щупак С/C++. Программирование на языке высокого уровня. - СПб.: Питер,2007. - 461 с.: ил.
3. Прата. Объектно-ориентированное программирование в C++. 2 изд. - ЭКСМО, 2007. - 336 с.: ил.
4. Т.А. Павловская, Ю.А. Щупак. С/C++. Структурное программирование: Практикум. - СПб.: Питер, 2007. - 239 с.: ил.
Размещено на Allbest.ru
...Подобные документы
Изучение условий поставленной задачи и используемых данных для разработки программы хранения информации о рейсах поезда. Описание разработанных функций, листинга, блок-схем алгоритмов и дерева функции. Рассмотрение сценария диалога данной программы.
курсовая работа [532,7 K], добавлен 20.07.2014Методы хеширования данных и реализация хеш-таблиц. Разработка на языке программирования высокого уровня программы с функциями создания хеш-таблицы, добавления в нее элементов, их просмотра, поиска и удаления. Экспериментальный анализ хеш-функции.
лабораторная работа [231,9 K], добавлен 18.06.2011Разработка программы, создающей и управляющей базой данных, ее реализация на языке Turbo Pascal. Организация алгоритма программы. Вывод информации и возможность добавления информации в базу данных. Поиск информации в базе данных по заданному значению.
курсовая работа [26,7 K], добавлен 19.06.2010Интерфейсные средства СУБД MS Access 2003. Проектирование схемы данных. Создание составного отчёта, содержащего диаграмму. Группировка и сортировка в отчётах. Использование языка программирования VBА, создание макросов. Разработка программы и функций.
курсовая работа [5,2 M], добавлен 20.06.2010Создание программы, работающей с набором данных на внешнем устройстве. Описание программного комплекса. Обзор структуры главной программы. Процедура добавления новых элементов, поиска и создания на экране вертикального меню. Проверка работы программы.
курсовая работа [265,6 K], добавлен 28.08.2017Исследование основных отличий ассоциативных массивов от массивов скаляров. Разработка библиотеки классов. Выбор языка программирования. Сравнение языка C++ с Delphi, Java и JavaScript. Изучение методики тестирования и структуры тестового приложения.
практическая работа [390,2 K], добавлен 06.01.2013Основы работы с прикладным программным обеспечением, содержащим составляющие для работы с данными. Составление исходного кода скриптов для сортировки, добавления, редактирования и удаления информации в базу данных. Особенности работы операции поиска.
курсовая работа [610,7 K], добавлен 20.01.2012Сущность языка программирования, идентификатора, структуры данных. Хранение информации, алгоритмы их обработки и особенности запоминающих устройств. Классификация структур данных и алгоритмов. Операции над структурами данных и технология программирования.
контрольная работа [19,6 K], добавлен 11.12.2011Разработка web-приложения для оперирования данными с помощью базы данных и web-браузера в качестве клиента пользователя. Основные преимущества языка программирования Java. Осуществление редактирования, добавления информации и поиска по архивам данных.
дипломная работа [2,1 M], добавлен 30.09.2016Разработка алгоритмов на динамических структурах данных. Описание структуры данных "стек". Процедуры добавления и удаления элемента, очистки памяти. Код распечатки содержимого всего стека. Инструкция пользователя, код программы, контрольный пример.
курсовая работа [22,9 K], добавлен 19.10.2010Разработка программного продукта - базы данных "Экскурсия" в интегрированной среде программирования C++ Builder 6. Определение порядка просмотра данных базы, их редактирования и удаления. Особенности руководства пользователя и общего интерфейса программы.
курсовая работа [2,4 M], добавлен 03.11.2013Обзор существующих систем управления базы данных. Основные характеристики языка программирования MS VB 2010. Содержание базы данных для хранения информации об успеваемости. Программирование системных модулей программы, содержание интерфейса пользователя.
курсовая работа [1,1 M], добавлен 22.02.2014Методика разработки программы по поиску информации из базы данных, содержащей информацию о телевизорах. Использование языка программирования "С++" и среды разработки Qt Creator "С++" - статически типизированного языка программирования общего назначения.
курсовая работа [626,1 K], добавлен 22.12.2011Цель информационного программирования; алгоритмический язык как система обозначений и правил для единообразной и точной записи алгоритмов и их исполнения. Языки программирования низкого и высокого уровня; классификация и использование структуры данных.
реферат [383,1 K], добавлен 07.01.2012Основные понятия объектно-ориентированного программирования, особенности описания функций и классов. Разработка программы для работы с универсальной очередью установленного типа, добавления и удаления ее элементов и вывода содержимого очереди на экран.
курсовая работа [187,2 K], добавлен 27.08.2012Алгоритмизация и структурное программирование на языке С/С++. Создание справочника в памяти (ввод данных), вывод справочника на экран с использованием потоковых классов, сортировка методом Шелла. Циклы, описание применяемых специальных алгоритмов.
курсовая работа [1,0 M], добавлен 26.02.2012Разработка базы данных "Тюрьма" для управления информацией, повышение оперативности выдачи информации, добавления и хранения информации о заключенных, охранниках и обслуживающем персонале. Использование языка Java, среды разработки NetBeans и СУБД Derby.
курсовая работа [996,8 K], добавлен 31.01.2016Технические характеристики: постановка задачи, описание основных типов входных и выходных данных. Описание алгоритмов основной программы и процедур удаления и исправления данных в таблицах. Выбор языка программирования. Технико-экономические показатели.
курсовая работа [478,1 K], добавлен 28.12.2012Реализация различных методов сортировки. Алгоритмические языки программирования. Обработка большого числа единообразно организованных данных. Алгоритмы сортировки массивов. Анализ проблем реализации и использования различных видов сортировок массивов.
курсовая работа [640,3 K], добавлен 07.07.2011Характеристика структурированного языка программирования С, его основных структурных компонентов, области памяти, библиотеки. Методы поиска в массивах данных. Описание программы, функции сортировки и меню выбора, последовательного и бинарного поиска.
курсовая работа [1,7 M], добавлен 19.05.2014