Программирование на языке высокого уровня

Особенности вывода на экран содержимого файла BAZA.txt. Анализ функций вывода информации о количестве каждой марки машин. Рассмотрение способов проектирования тестов программы методами черного ящика. Проблемы программирования на языке высокого уровня.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 04.01.2015
Размер файла 1,6 M

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

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

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

1. Задание

Дан файл, состоящий сведения о владельцах автомобилей. Структура записи файла:

· Фамилия и инициалы владельца

· Марка автомобиля

· Номер автомобиля

Написать программу, которая печатает

ь Фамилию владельца автомобиля с заданным номером

ь Фамилии владельцев и номера автомобиля данной марки (в алфавитном порядке)

ь Количество автомобилей каждой марки

2. Описание применения

2.1 Запуск программы

Запуск программы (файл proga.cpp) можно выполнить из среды TurboC 3.0 (или Dev-Cpp) либо из командной строки MSDOS, введя proga.exe

2.2 Входные данные

Входные данные программы находятся в созданном файле. Число строк в файле - произвольное. Каждая строка содержит информацию о владельцах(до 17 символов), марку автомобилей (до 7 символов), номера автомобилей(6 символов). Пример строки файла:

Ignatev A.S. Nissan P990CC

Пример входного файла приведен в приложении 2. По запросу программы с клавиатуры необходимо ввести номер пункта меню (см. раздел 2.3).

2.3 Выходные данные

Программа выводит на экран меню, представленное на рисунке 1 :

Рис.1

Привыборепункта2наэкранвыводитсясообщение:

Vveditenomermashini

После ввода номера машины например P990CC выводится результат представленный на рисунке 2 :

Рис. 2

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

2.4 Сообщения программы

Ниже приводится перечень возможных сообщений программы:

1. faila BAZA net

2. Vibirete nomer punkta menu

3. marki «…» net

4. Dlya vihoda v menu najmite lubyu knopky

5. vvedite nomer mashini

6. Nomer vveden ne pravelno

7. vvedite marku mashini

8. Vvidite nomer ot 1 do 5

3. Описание программы

3.1 Метод решения задачи

Задачу можно разбить на четыре отдельные подзадачи:

Вывод на экран содержимого файла BAZA.txt

Поиск по номерам

Поиск владельца и номера по марке

Количество автомобилей каждой марки

Чтобы пользователь мог выбирать, какие подзадачи решать и в каком порядке, программа выводит на экран меню (см. Рис. 1).

3.2 Структура программы

Рис.3. Функциональная структура программы

Программа состоит из шести функций: главной функции main и пяти подпрограмм:

SORT - сортировка файла по времени отправления

PUN1 - функция вывода файла по десять строк

PUN2 - функция вывода информации о владельце и марке

PUN3 - функция вывода информации о владельце и номере

PUN4 - функция вывода информации о количестве каждой марки машин

3.3 Описание функций

3.3.1 main - главная функция

Заголовок функции:

intmain ()

Значение функции:

0 - в если входной файл не найден;

1 - в случае успешного завершения

Рабочие данные:

f - указатель на структуру с информацией о входном файле;

n - номер пункта меню.

Рис.4. Блок-схема функции main()

3.3.2 PUN1- функция вывода файла по десять строк

Заголовокфункции:

voidPUN1 (TAB *pz, intl);

Рис.5. Блок-схема функцииPUN1 (TAB *tab, intl)

3.3.3 PUN2 - функция вывода информации о владельце и марке

Заголовок функции:

voidPUN2 (TAB *tab, intl)

Рабочие данные:

r-введенный номер

i,j,p,u-счетчики

Рис.6. Блок-схема функции PUN2 (TAB *tab, intl)

3.3.4 PUN3 - функция вывода информации о владельце и номере

Заголовок функции:

voidPUN3(TAB *tab, intl)

Рабочие данные:

i, j, z, t-счетчик

mar[]-введенная марка машины

Рис.7. Блок-схема функции PUN3 (TAB *tab, intl)

3.3.5 PUN4 - функция вывода информации о количестве каждой марки машин

Заголовок функции:

voidPUN4(TAB *tab, intl)

Рабочие данные:

w-количество машин

z,j - счетчики

Рис.8. Блок-схема функции PUN5(TAB *tab, intl)

3.3.6 SORT - сортировка файла

Заголовок функции:

void SORT (TAB *pz, int l)

Рис.9. Блок-схема функции SORT (TAB *pz, int l)

4. Отладка программы

4.1 Проектирование тестов

4.1.1 Тесты черного ящика

Для проектирования тестов программы методами черного ящика [1] с помощью эквивалентного разбиения входных/выходных данных на области (классы) эквивалентности составлен список ситуаций, каждая из которых должна создаваться хотя бы одним тестом. Тестовые ситуации приведены в табл. 4.1, в скобках указаны их номера.

Таблица 4.1 Области входных/выходных данных тестов программы

Входное/выходное условие (значение)

"Правильные" классы эквивалентности

"Неправильные" ¦ классы эквивалентности

Номер пункта меню

1..5(1)

<1 (2), >5 (3)

Входной файл

существует (4),

не существует (5)

Номер машины

существует (6), не найден(7)

Введен не правильно(8)

Марка машины

существует (9), не найдена

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

файл программирование черный ящик

Таблица 4.2. Тесты черного ящика для отладки программы

Вход

Выход

Осн. сит.

1

Номер пункта меню n=9

Нужно вводить номера от 1 до 5

3

2

Номер пункта меню n=1

Вызов функции PUN1(pz, l)

1

3

Номер пункта меню n=0

Нужно вводить номера от 1 до 5

2

4

Входной файл существует

Меню

4

5

Входной файл не существует

Файл «BAZA.txt» не найден

5

6

T890AA

Вывод информации о машине

6

7

С055PM

Информация о машина не найдена

7

8

Т5555В

Не корректно введен номер

8

9

Lada

Вывод информации о владельцах этой марки

9

10

KIA

Информации о владельцах этой марки нет

10

4.1.2 Тесты белого ящика

Разработанные тесты проверены методами белого ящика [1] по критериям охвата основных путей выполнения алгоритмов модулей. В программе имеются составные условия. Поэтому использован критерий комбинаторного покрытия условий (см. табл. 4.3).

Таблица 4.3. Комбинаторное покрытие условий тестами черного ящика

Модуль

Элементарное условие

Номера тестов

Истина

Ложь

main

if((n>'0')&&(n<'5'))

1

2, 3

main

if(file==NULL)

5

4

PUN2

for(j=0;j<6;j++)

{if ((j==0)||(j==4)||(j==5))

{if ((r[j]<'A')||(r[j]>'Z'))

p++;}

else

if ((r[j]<'0')||(r[j]>'9'))

p++; }

6,7

8

PUN3

if(strcmp(tab[j].marka,mar)==0)

9,10

Литература

1. Хохлов Д.Г. Основы технологии модульного программирования. Учебное пособие. - Казань. Изд-во Казан. гос. техн. ун-та , 2005. - 63 с.

2. Хохлов Д.Г. Структуры данных и комбинаторные алгоритмы. Учебное пособие. - Казань: Изд-во Казан. гос. техн. ун-та, 2005. - 102 с.

3. Хохлов Д.Г., Захарова З.Х. Практикум по структурам данных и комбинаторным алгоритмам: Учебное пособие.- Казань: Изд-во Казан. гос. техн. ун-та, 2005. - 48 с.

4. Бикмурзина А.Р. Лабораторный практикум по программированию. - Казань: Изд-во Казан. гос. техн. ун-та, 2000г.

Приложение 1

Текст программы

#include<stdio.h>

#include <conio.h>

#include <string.h>

#include <stdlib.h>

#include <math.h>

#define MAX 100

struct BAZA

{

char fio[20];

char marka[10];

char nomer[9];

};

struct TAB

{

char fio[20];

char marka[10];

char nomer[9];

};

void SORT (TAB *tab, int l);

void PUN1 (TAB *tab, int l);

void PUN2 (TAB *tab, int l);

void PUN3 (TAB *tab, int l);

void PUN4 (TAB *tab, int l);

int main()

{ FILE *f;

struct BAZA b;

struct TAB tab[MAX];

char n;

int l=0, i, s, nomer;

if ((f=fopen("BAZA.txt","r"))==NULL)

{puts ("faila poezd net");

getch();

return 0;

}

while (fgets((char*)&b,sizeof(struct BAZA),f)!=NULL)

{

b.fio[19]='\0';

strcpy(tab[l].fio, b.fio);

b.marka[9]='\0';

strcpy(tab[l].marka, b.marka);

b.nomer[8]='\0';

strcpy(tab[l].nomer, b.nomer);

l++;

}

SORT (tab, l);

do

{ //clrscr();

system("cls");

puts("---------------------------------------------------------------------");

puts("Vibirete nomer punkta menu:");

puts("1-polnaya informazia o vladelcah");

puts("2-poisk po nomeru");

puts("3-poisk vladelca i nomera po marke");

puts("4-kolichestvo avtomobilei kajdoi marki");

puts("5-vihod");

puts("---------------------------------------------------------------------");

n=getche();

switch(n)

{ case '1':PUN1(tab, l);break;

case '2':PUN2(tab, l);break;

case '3':PUN3(tab, l);break;

case '4':PUN4(tab, l);break;

case '5':break;

default:puts("Vvidite nomer ot 1 do 5");

}

if(n!='5')

{puts("\n\n\n Dlya vihoda v menu najmite lubyu knopky");

getch();

}

}

while(n!='5');

fclose(f);

return 1;

}

void PUN1 (TAB *tab, int l)

{int j=0, z=1;

do

{ //clrscr();

system("cls");

puts("\n Familia I.O. | Marka | Nomer ");

puts("------------------------------------------");

for (j;j<l; j++)

{ if (j<(10*z))

printf ("\n %s | %s | %s", tab[j].fio, tab[j].marka, tab[j].nomer);

else

{ z++;

puts("\nNajmite lubyu knopky chto bi vivesti sled 10");getch();

break;

system("cls");

}

}

}

while (l>j);

}

void PUN2(TAB *tab, int l)

{int j, u=0,i,z=0;

double p=0;

char r[9];

//clrscr();

system("cls");

puts("\nvvedite nomer mashini\n");

gets(r);

//clrscr();

system("cls");

for(j=0;j<6;j++)

{

if ((j==0)||(j==4)||(j==5))

{if ((r[j]<'A')||(r[j]>'Z'))

p++;}

else

if ((r[j]<'0')||(r[j]>'9'))

p++;

}

if (p==0)

{ puts("\n Familia I.O. | Marka | Nomer ");

puts("------------------------------------------");

for (i=0; i<l; i++)

{ z=0;

for (j=0; j<6; j++)

{if (tab[i].nomer[j]==r[j])

{z++; }

}

if (z==6)

{ printf ("\n %s | %s | %s", tab[i].fio, tab[i].marka, tab[i].nomer);u++;}

}

if (u==0)

{//clrscr();

system("cls");

puts("Takogo nomera net");}

}

else

puts("Nomer vveden ne pravelno");

}

void PUN3(TAB *tab, int l)

{ int i, j, z=0, t=0, n;

char mar[20];

// clrscr();

system("cls");

puts ("vvedite marky mashini");

gets(mar);

n=strlen(mar);

// clrscr();

system("cls");

puts("\n Familia I.O. | Marka | Nomer ");

puts("------------------------------------------");

for (j=0; j<l; j++, z=0)

{ for (i=0; i<n; i++)

{if (tab[j].marka[i]==mar[i])

{z++; }

}

if (tab[j].marka[i]==' ' || tab[j].marka[i]=='\0')

{ if (z==n)

{ printf ("\n %s | %s | %s", tab[j].fio, tab[j].marka, tab[j].nomer);

t++;

}

}

}

if (t==0)

{ //clrscr();

system("cls");

printf ("\nmarki %s net", mar);

}

}

void PUN4(TAB *tab, int l)

{

char mar[10];

int z=0,j,i,q;

double w=1;

system("cls");

//q=strlen(tab[0].marka);

//strcpy(mar,tab[0].marka);

puts("\n Marka | Kolichestvo ");

for (j=0; j<l; j++)

{ if(strcmp(tab[j+1].marka,tab[j].marka)>0)

{printf("\n %s | %.0f", tab[j].marka, w);

w=1;

/*strcpy(mar,tab[j].marka);

j--*/}

else

{

w++;

}

}

}

void SORT (TAB *tab, int l)

{ int i, j;

double t;

char fio[20], mar[10], nomer [7];

for(i = 0 ; i < l ; i++)

{ for(j = 0 ; j < l - i - 1 ; j++)

{ for (t = 0 ; t < 10 ; t++)

if (strcmp(tab[j].marka,tab[j+1].marka)>0)

{

strcpy(fio,tab[j].fio); strcpy(tab[j].fio,tab[j+1].fio); strcpy(tab[j+1].fio,fio);

strcpy(mar,tab[j].marka); strcpy(tab[j].marka,tab[j+1].marka); strcpy(tab[j+1].marka,mar);

strcpy(nomer,tab[j].nomer); strcpy(tab[j].nomer,tab[j+1].nomer); strcpy(tab[j+1].nomer,nomer);

}

}

}

}

Приложение 2

Пример входного файла poezd.txt

IvanovA.P. ToyotaB540CT

IgnatevA.S. NissanP990CC

SamigullinA.A. NissanB571BP

PetrovA.A. LadaC111CC

SimonovI.I. HummerC777CX

AbramovA.A. LadaC415TO

HaritonovA.V. DachaC789TO

HafizovA.Z. RenaultT894TO

IvanovA.I. LadaT561BE

HaritinovI.G. LotusB565BO

GaliyllinT.B. HondaC717CO

Nyrmyhametiv I.F. Lada C556TO

Antipova E.G. Opel C413EO

Valieva M.A. Toyota P891XO

Ivanov M.D. Lada X013PX

Haliyllin M.I. Nissan B670PO

Haliyllin T.I. Honda X518TO

Grigorev G.I. Lada P533TO

Garimov V.A. Nissan T560TT

Vasileva D.R. Cherry C660TO

Talov I.A. Lada T781TP

Pogylov A.I. Dacha A617AE

Hasaeva G.D. Honda A415BO

Ignatev P.S. Renault O819TO

Alternov A.S. LotusT890AA

Приложение 3

Результаты тестирования программы

Тест 1. Входного файла нет в текущем каталоге.

Результат:

faila BAZA net

В следующих тестах используется файл из приложения 2.

Тест 2.

Рис.

Выбираем пункт 1:

Рис.

Рис.

Рис.

Тест3

Рис.

Выбираем пункт 2:

Номер машини Р990СС

Рис.

Тест4 .

Рис.

Выбираем пункт 3:

Название марки автомобиля: Nissan

Рис.

Тест5

Рис.

Выбираем пункт 4:

Количество автомобилей каждой марки

Рис.

Тест 6 . Неверно выбран номер пункта меню

Рис.

Выбираем не существующий пункт, к примеру 6

Рис.

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


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

  • Методы численного интегрирования. Характеристика основных составляющих структурного программирования. Решение задания на языке высокого уровня Паскаль. Построение графического решения задачи в пакете Matlab. Решение задания на языке высокого уровня C.

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

  • Входные данные программы в файле "School.txt". Метод решения задачи и функциональная структура программы. Main – главная функция, формирование таблицы данных из файла. Блок-схема функции вывода фамилии победителей, занявших первые три призовых места.

    курсовая работа [68,4 K], добавлен 17.06.2012

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

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

  • Информационные технологии и защиты данных. Методы защиты информации. Виды информационной безопасности и умышленные угрозы. Программирование на языке Turbo Pascal. Типы числовых данных. Функции ввода и вывода. Логические операторы, символьные переменные.

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

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

    курсовая работа [336,2 K], добавлен 27.06.2015

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

    реферат [2,1 M], добавлен 16.09.2011

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

    контрольная работа [103,9 K], добавлен 21.08.2013

  • Методы языка программирования C#. Алгоритмизация и программирование задач на языке высокого уровня C#. Внутренний цикл, ветвление, внешний цикл, вложенные друг в друга структуры ветвления. Вывод элементов массива на экран. Остальные элементы матрицы.

    курсовая работа [250,2 K], добавлен 27.02.2015

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

    курсовая работа [329,8 K], добавлен 22.06.2014

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

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

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