Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kursach_po_programmirovaniyu.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.32 Mб
Скачать

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

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

Но в этом случае код программы прописан так, что пользователь неукоснительно вводит правильные данные, руководствуясь здравым смыслом и некоторыми инструкциями.

ВЫВОДЫ:

В результате выполнения курсовой работы была разработана программа для работы с данными, представляющая собой справочную систему. Программа может нормально полноценно функционировать при условии наличия операционной системы Windows и базовых системных устройств: мыши, клавиатуры и монитора. Интерфейс программы представляет собой меню с 18 вариантами выбора действия (включая выход), что само по себе является дружественным для пользователя, так как предоставляет ему возможность решать, какое действие ему хотелось бы, чтобы программа выполнила в первую очередь.

Перечень ссылок:

  1. М. Эллис, Б. Строуструп. Справочное руководство по языку C++ с комментариями: Пер. с англ. - Москва: Мир, 1992. 445с.

  2. Г. Шилдт. Самоучитель C++: Пер. с англ. - Санкт-Петербург: BHV-Санкт-Петербург, 1998. 620с.

  3. Х. Дейтел, П. Дейтел. Как программировать на 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");

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]