
- •1 Постановка задачи
- •1.1 Исходные данные.
- •1.2 Результаты.
- •1.3 Ограничения
- •1.4 Связь
- •2 Техническое проектирование
- •2.1 Разработка метода решения
- •2.2 Модульный анализ
- •2.2.1 Структура программы и взаимодействие ее модулей
- •2.2.2 Спецификация модулей программы
- •2.2.3 Основные алгоритмы функционирования программы
- •3.Рабочее проектирование
- •3.1 Структура данных программы
- •3.2 Алгоритмы функционирования модулей.
- •3.3Тестирование программы.
3.3Тестирование программы.
В ряде случаев, при некорректном вводе некоторых данных, программа не может нормально функционировать и тем более выполнять положенные функции. Тогда пользователю выводятся сообщения об ошибке, или же программа просто зависает.
Но в этом случае код программы прописан так, что пользователь неукоснительно вводит правильные данные, руководствуясь здравым смыслом и некоторыми инструкциями.
ВЫВОДЫ:
В результате выполнения курсовой работы была разработана программа для работы с данными, представляющая собой справочную систему. Программа может нормально полноценно функционировать при условии наличия операционной системы Windows и базовых системных устройств: мыши, клавиатуры и монитора. Интерфейс программы представляет собой меню с 18 вариантами выбора действия (включая выход), что само по себе является дружественным для пользователя, так как предоставляет ему возможность решать, какое действие ему хотелось бы, чтобы программа выполнила в первую очередь.
Перечень ссылок:
М. Эллис, Б. Строуструп. Справочное руководство по языку C++ с комментариями: Пер. с англ. - Москва: Мир, 1992. 445с.
Г. Шилдт. Самоучитель C++: Пер. с англ. - Санкт-Петербург: BHV-Санкт-Петербург, 1998. 620с.
Х. Дейтел, П. Дейтел. Как программировать на C++: Пер. с англ. - Москва: ЗАО "Издательство БИНОМ", 1998. 1024с.
Приложение Б. Описание программы.
Б.1 Общие сведения.
Выполненная в результате курсовой работы программа имеет слаженную модульную структуру и состоит из файла isx_tabl.
Б.2 Функциональное значение
Программа написана с целью выполнения определенных классов задач. Всего она может выполнить их 15.
Список классов задач, успешно выполняемых программой: -загрузка данных из внешнего файла;
-вывод всей таблицы;
-сохранение данных во внешнем файле;
-добавление строки таблицы;
-удаление строки таблицы;
-редактирование строки таблицы;
-поиск минимума в определенном столбце;
-поиск максимума в определенном столбце;
-вывод среднего значения по определенному столбцу;
-вывод всех возможных элементов больше некоторого значения, вводимого пользователем;
-вывод всех возможных элементов меньше некоторого значения, вводимого пользователем;
-сортировка определенного столбца таблицы по возрастанию;
-сортировка и вывод определенных колонок таблицы в алфавитном порядке;
-сортировка и вывод определенных колонок таблицы в обратном порядке;
-выход.
Б.3 Описание логической структуры
Взаимосвязь модулей программы описана в пункте 2.2. Графически это изображено на рис.2.2.
Основные элементы программы описаны в пункте 3.1 в таблице 3.2.
Алгоритм выполнения основной по значимости части программы описан в пункте 2.2.3 на рис.2.3.
Алгоритмы всех остальных функций представлены в пункте 3.2. Их описание находится в таблице 2.1.
Б.4. Использованные технические средства
Для корректной работы программы необходимы элементарные технические средства, такие как: мышь, клавиатура и монитор. Именно они и были использованы при написании программы. Ничего более.
Б.5. Вызов и загрузка
Для того, чтобы программа начала работу, требуется открыть файл tkan_filtr.exe. Вторым главным условием корректной работы программы является наличие файла с исходными данными «isx.txt» и файла, в который будет записываться результат «rez.txt». Если данные файлы не существуют, программа не сможет корректно функционировать, возможен сбой в работе. Программа не закроется автоматически, но и работать не сможет.
Б.6. Входные данные
Входными данными является исходная таблица, описанная ранее в пункте 1.1. на рис.1.1.
Б.7 Выходные данные
Выходными данными будет являться файл, с записанным в него результатом работы некоторой функции, выбранной пользователем.
Приложение В. Руководство программиста.
В.1 Программа была написана с целью выполнения курсовой работы и более глубокого изучения возможностей языка С\С++. Вероятно, написанная справочная система может быть полезной людям, занимающимся изучением проблемы применения тканевых фильтров в промышленности.
В.2 Для корректной работы программы необходимо иметь элементарные технические средства ПК: мышь, клавиатуру и монитор, а также операционную систему Windows.
В.3 Для запуска программы необходимо открыть файл tkan_filtr.exe.
В.4 В процессе выполнения определенных задач пользователю будут время от времени выводиться сообщения. При некорректном вводе данных пользователем сообщения об ошибке не выводятся. Это было прописано выше в пункте 3.3.
А при корректной работе программы и успешном завершении выполнения некоторых функций пользователю будут выводиться сообщения такого плана:
Рис.В.18 – «Результат работы функции write(f1,f2)»
Рис.В.19 – «Результат работы функции average()»
Рис.В.20 – «Завершение работы программы»
Приложение Д. Руководство пользователя.
Для корректной работы данной программы необходимо иметь элементарные технические средства ПК: мышь, клавиатуру и монитор, а также иметь в качестве операционной системы – Windows. Версия Windows особого значения не имеет.
Ниже будут приведены скриншоты корректной работы программы - результаты выполнения необходимых функций.
Рис.Д.21 – «Результат работы функции read(FILE*f1)»
Рис.Д.22 – «Результат работы функции del_str()»
Рис.Д.23 – «Результат работы функции add_string()»
Рис.Д.24 – «Результат работы функции redact()»
Рис.Д.25 – «Результат работы функции find_max()»
Рис.Д.26 – «Результат работы функции find_min()»
Рис.Д.27 – «Результат работы функции average()»
Рис.Д.28 – «Результат работы функции show_all_less() при значении элемента, вводимого пользователем, 2»
Рис.Д.29 – «Результат работы функции show_all_more() при значении элемента, вводимого пользователем, 2»
Рис.Д.30 – «Результат работы функции sort_in_right()»
Рис.Д.31 – «Результат работы функции field_use_right()»
Рис.Д.32 – «Результат работы функции full_name_back()»
Приложение Е. Текст программы.
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <locale.h>
#define N 32
struct tkan
{char field_use[50];
char full_name [50];
float conts_in;
float conts_out;
char type_speed_filtr[15];
float quant_d_l51;
float quant_d_l52;
};
FILE* f1; /*Входящая таблица*/
FILE* f2; /*Выходящий файл*/
struct tkan isx_tabl[N];
int i,n;
char probel1[59]="-----------------";
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"");
void read(FILE*);
void print();
void write();
void shapka();
void del_str();
void add_string();
void redact();
void find_max();
void find_min();
void find_average();
void show_all_less();
void show_all_more();
void sort_in_right();
void field_use_right();
void full_name_back();
void menu();
menu();
_getch();
return 0;
}
void read(FILE*f1) /*Функция чтения входящего файла*/
{
f1=fopen("isx.txt", "r");
i=0;
while (fscanf (f1,"%s %s %f %f %s %f %f",isx_tabl[i].field_use,isx_tabl[i].full_name,&isx_tabl[i].conts_in,&isx_tabl[i].conts_out,isx_tabl[i].type_speed_filtr,&isx_tabl[i].quant_d_l51,&isx_tabl[i].quant_d_l52)!=EOF)
i++;
n=i;
}
void print() /*Функция вывода на экран начальной таблицы*/
{
for (i=0;i<n;i++)
printf("!%d!%35s! %45s! %9.3f! %9.4f !%20s! %10.1f! %10.1f!\n",i+1,
isx_tabl[i].field_use,
isx_tabl[i].full_name,
isx_tabl[i].conts_in,
isx_tabl[i].conts_out,
isx_tabl[i].type_speed_filtr,
isx_tabl[i].quant_d_l51,
isx_tabl[i].quant_d_l52);
printf("", probel1);
}
void write(FILE*f1, FILE*f2) /*Функция записи в файл*/
{
f2=fopen("rez.txt","w");
for (i=0;i<n;i++)
fprintf(f2,"%s %s %f %f %s %f %f\n",
isx_tabl[i].field_use,
isx_tabl[i].full_name,
isx_tabl[i].conts_in,
isx_tabl[i].conts_out,
isx_tabl[i].type_speed_filtr,
isx_tabl[i].quant_d_l51,
isx_tabl[i].quant_d_l52);
}
void shapka()
{ printf("%s\n",probel1);
printf(" !Область применения! !Название !!Конц.вход!!Конц.выход!!Тип,скорость ф-ции!!Кол.пыли min!!Кол.пыли max! \n");
printf("%s\n",probel1);
}
void del_str(FILE*f1) /*Функция удаления строк*/
{
int k;
k=0;
printf("\nВведите номер строки, которую необходимо удалить:\n");
printf("Ввод:");
scanf("%d", &k);
shapka();
for(i=0;i<k-1;i++)
{printf("!%d!%29s!%41s! %9.3f! %9.4f !%20s! %10.1f! %10.1f!\n",i+1,
isx_tabl[i].field_use,
isx_tabl[i].full_name,
isx_tabl[i].conts_in,
isx_tabl[i].conts_out,
isx_tabl[i].type_speed_filtr,
isx_tabl[i].quant_d_l51,
isx_tabl[i].quant_d_l52);
for (i=k-1;i<n-1;i++)
{printf("!%d!%29s!%41s! %9.3f! %9.4f !%20s! %10.1f! %10.1f!\n",i+1,
strcpy(isx_tabl[i].field_use,isx_tabl[i+1].field_use),
strcpy(isx_tabl[i].full_name,isx_tabl[i+1].full_name),
isx_tabl[i].conts_in=isx_tabl[i+1].conts_in,
isx_tabl[i].conts_out=isx_tabl[i+1].conts_out,
strcpy(isx_tabl[i].type_speed_filtr,isx_tabl[i+1].type_speed_filtr),
isx_tabl[i].quant_d_l51=isx_tabl[i+1].quant_d_l51,
isx_tabl[i].quant_d_l52=isx_tabl[i+1].quant_d_l52);
}
}
n--;
print();
}
void add_string()
{char obl[50];
char name1[50];
float vhod;
float vyhod;
char type_skor[15];
float kol_min;
float kol_max;
printf("Введите область применения!\n");
scanf("%s", obl);
printf("Введите наименование!\n");
scanf("%s", name1);
printf("Введите концентрацию на входе!\n");
scanf("%f", &vhod);
printf("Введите концентрацию на выходе!\n");
scanf("%f", &vyhod);
printf("Введите тип фильтра и скорость фильтрации!\n");
scanf("%s", type_skor);
printf("Введите минимальное количество пыли меньше 5мкм!\n");
scanf("%f", &kol_min);
printf("Введите максимальное количество пыли меньше 5 мкм!\n");
scanf("%f", &kol_max);
strcpy(isx_tabl[n].field_use,obl);
strcpy(isx_tabl[n].full_name, name1);
isx_tabl[n].conts_in=vhod;
isx_tabl[n].conts_out=vyhod;
strcpy(isx_tabl[n].type_speed_filtr, type_skor);
isx_tabl[n].quant_d_l51=kol_min;
isx_tabl[n].quant_d_l52=kol_max;
n++;
print();
}
void redact()
{ int k,k1;
char obl[50];
char name1[50];
float vhod;
float vyhod;
char type_skor[15];
float kol_min;
float kol_max;
printf("Введите номер строки для редактирования");
scanf("%d",&k);
printf("Введите номер столбца для редактирования!\n");
scanf("%d",&k1);
if(k1==1)
{ printf("Введите новую область применения!");
scanf("%s", obl);
strcpy(isx_tabl[k-1].field_use,obl);
}
else
if(k1==2)
{printf("Введите новое наименование!");
scanf("%s",name1);
strcpy(isx_tabl[k-1].full_name,name1);
}
else
if(k1==3)
{ printf("Введите новую концентрацию на входе!");
scanf("%f", &vhod);
isx_tabl[k-1].conts_in=vhod;
}
else
if(k1==4)
{printf("Введите новую концентрацию на выходе!\n");
scanf("%f", &vyhod);
isx_tabl[k-1].conts_out=vyhod;
}
else
if(k1==5)
{printf("Введите новый тип фильтра и скорость фильтрации!");
scanf("%s", type_skor);
strcpy(isx_tabl[k-1].type_speed_filtr, type_skor);
}
else
if(k1==6)
{printf("Введите новое минимальное количество пыли меньше 5мкм!");
scanf("%f", &kol_min);
isx_tabl[k-1].quant_d_l51=kol_min;
}
else
if(k1==7)
{printf("Введите новое максимальное количество пыли меньше 5 мкм!\n");
scanf("%f", &kol_max);
isx_tabl[k-1].quant_d_l52=kol_max;
}
}
void find_max()
{
char field1[50];
char name1 [50];
float conts_max;
//read(f1);
conts_max=isx_tabl[0].conts_in;
for (i=1; i<n; i++)
if(isx_tabl[i].conts_in>conts_max)
{conts_max=isx_tabl[i].conts_in;
strcpy(field1, isx_tabl[i].field_use);
strcpy(name1, isx_tabl[i].full_name);
}
printf("%25s!%25s!%5.2f!", field1, name1, conts_max);
}
void shapka_max()
{ printf("%s\n",probel1);
printf("!Область применения! Название! Максимальная концентрация пыли на входе! \n");
printf("%s\n",probel1);
}
void find_min()
{
char field2 [50];
char name2 [50];
float conts_min;
conts_min=isx_tabl[0].conts_out;
for (i=1; i<n; i++)
if(isx_tabl[i].conts_out<conts_min)
{conts_min=isx_tabl[i].conts_out;
strcpy(field2, isx_tabl[i].field_use);
strcpy(name2, isx_tabl[i].full_name);
}
printf("%35s!%35s!%7.5f!", field2, name2, conts_min);
}
void shapka_min()
{ printf("%s\n",probel1);
printf("!Область применения! Название! Максимальная концентрация пыли на выходе! \n");
printf("%s\n",probel1);
}
void find_average()
{float summary;
char* tekst;
float r_n;
tekst="Среднее значение для столбца 'Количество пыли меньше 5 мкм' равно";
r_n=2*n;
for (i=0; i<n; i++)
{summary=(isx_tabl[i].quant_d_l51 + isx_tabl[i].quant_d_l52)/r_n;
}
printf("%s %7.5f", tekst, summary);
}
void show_all_less()
{int el;
int p;
printf("Введите значение!\n");
scanf("%d", &el);
for(i=0; i<n; i++)
{if(isx_tabl[i].conts_in<el)
printf("%40s!%45s!%7.4f!\n", isx_tabl[i].field_use, isx_tabl[i].full_name, isx_tabl[i].conts_in);
}
}
void show_all_more()
{int el;
int p;
printf("Введите значение!\n");
scanf("%d", &el);
for(i=0; i<n; i++)
{if(isx_tabl[i].conts_in>el)
printf("%40s!%45s!%7.4f!\n", isx_tabl[i].field_use, isx_tabl[i].full_name, isx_tabl[i].conts_out);
}
}
void sort_in_right()
{int j;
float temp;
char vr1[50];
char vr2[50];
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
{if (isx_tabl[i].conts_in>isx_tabl[j].conts_in)
{temp=isx_tabl[i].conts_in;
isx_tabl[i].conts_in=isx_tabl[j].conts_in;
isx_tabl[j].conts_in=temp;
strcpy(vr1,isx_tabl[i].field_use);
strcpy(isx_tabl[i].field_use, isx_tabl[j].field_use);
strcpy(isx_tabl[j].field_use, vr1);
strcpy(vr2,isx_tabl[i].full_name);
strcpy(isx_tabl[i].full_name, isx_tabl[j].full_name);
strcpy(isx_tabl[j].full_name, vr2);
}
}
for (j=0;j<n;j++)
printf("!%35s! %45s! %9.3f!\n",
isx_tabl[j].field_use,
isx_tabl[j].full_name,
isx_tabl[j].conts_in);
printf("", probel1);
}
void full_name_back()
{
int j;
char temp2[50];
char name2[50];
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
{if (strcmp(isx_tabl[i].full_name,isx_tabl[j].full_name)<0)
{strcpy (temp2,isx_tabl[i].full_name);
strcpy(isx_tabl[i].full_name,isx_tabl[j].full_name);
strcpy(isx_tabl[j].full_name,temp2);
strcpy (name2,isx_tabl[i].field_use);
strcpy(isx_tabl[i].field_use,isx_tabl[j].field_use);
strcpy(isx_tabl[j].field_use,name2);
}
}
for (j=0;j<n;j++)
printf("!%35s! %35s!\n",
isx_tabl[j].field_use,
isx_tabl[j].full_name
);
printf("", probel1);
}
void field_use_right()
{
int j;
char temp[50];
char name1[50];
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
{if (strcmp(isx_tabl[i].field_use,isx_tabl[j].field_use)>0)
{strcpy (temp,isx_tabl[i].field_use);
strcpy(isx_tabl[i].field_use,isx_tabl[j].field_use);
strcpy(isx_tabl[j].field_use,temp);
strcpy (name1,isx_tabl[i].full_name);
strcpy(isx_tabl[i].full_name,isx_tabl[j].full_name);
strcpy(isx_tabl[j].full_name,name1);
}
}
for (j=0;j<n;j++)
printf("!%35s! %35s!\n",
isx_tabl[j].field_use,
isx_tabl[j].full_name
);
printf("", probel1);
}
void menu()
{ int J; /*Переменная для выбора пользователем действия в меню*/
do
{
printf("============================================================================================================================================================================\n");
printf("Меню программы\n");
printf("------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
printf("Выберите операцию:\n\n");
printf("1 - Открыть и вывести на экран начальную таблицу\n\n");
printf("2 - Записать таблицу в файл\n\n");
printf("3 - Удалить выбранную строку\n\n");
printf("4 - Добавить запись\n\n");
printf("5 - Редактировать\n\n");
printf("6 - Посмотреть, что получилось\n\n");
printf("7 - Выполнить задачу №1. Найти максимальное значение в столбце 'Концентрация на входе'\n\n");
printf("8 - Выполнить задачу №2. Найти минимальное значение в столбце 'Концентрация на выходе'\n\n");
printf("9 - Выполнить задачу №3. Найти среднее значение в столбце 'Количество пыли меньше 5 мкм'\n\n");
printf("10 - Выполнить задачу №4. Выписать все элементы меньше заданного в столбце 'Концентрация на входе'\n\n");
printf("11 - Выполнить задачу №5. Выписать все элементы больше заданного в столбце 'Концентрация на выходе'\n\n");
printf("12 - Выполнить задачу №6. Упорядочить элементы по возрастанию в столбце 'Концентрация на входе'\n\n");
printf("13 - Выполнить задачу №7. Вывести элементы в алфавитном порядке по столбцу 'Область применения'\n\n");
printf("14 - Выполнить задачу №8. Вывести элементы в обратном порядке по столбцу 'Наименование'\n\n");
printf("15 - Выход из программы\n\n");
printf("------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
printf("Ввод:");
scanf("%d",&J);
printf("============================================================================================================================================================================\n");
if (J==1)
{ shapka();
read(f1);
print();
}
if (J==2)
{
write(f1,f2);
printf("Запись в файл rez.txt выполнена успешно!\n");
}
if (J==3)
{
del_str(f1);
}
if(J==4)
{add_string();
}
if(J==5)
{redact();
}
if(J==6)
{print();
}
if (J==7)
{find_max();
}
if (J==8)
{find_min();
}
if (J==9)
{find_average();
}
if (J==10)
{show_all_less();
}
if (J==11)
{show_all_more();
}
if (J==12)
{sort_in_right();
}
if (J==13)
{field_use_right();
}
if (J==14)
{full_name_back();
}
}
while (J!=15);
printf("Нажмите любую кнопку для выхода из программы\n");
}