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

 

1. Задание


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

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

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

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

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

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

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

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


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


.1 Запуск программы


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


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


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

A.S. Nissan P990CC


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


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


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


Рис.1



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

Vveditenomermashini

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


Рис. 2


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


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


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

. faila BAZA net

. Vibirete nomer punkta menu

. marki «…» net

. Dlya vihoda v menu najmite lubyu knopky

. vvedite nomer mashini

. Nomer vveden ne pravelno

. vvedite marku mashini

. Vvidite nomer ot 1 do 5


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


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


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

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

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

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

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

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


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


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


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

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

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


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


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


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

intmain ()

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

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

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

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

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

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


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


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

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

voidPUN1 (TAB *pz, intl);


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


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

Заголовок функции:(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. Отладка программы


.1 Проектирование тестов


.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 до 532Номер пункта меню n=1Вызов функции PUN1(pz, l)13Номер пункта меню n=0Нужно вводить номера от 1 до 524Входной файл существуетМеню45Входной файл не существуетФайл «BAZA.txt» не найден56T890AAВывод информации о машине67С055PMИнформация о машина не найдена78Т5555ВНе корректно введен номер89LadaВывод информации о владельцах этой марки910KIAИнформации о владельцах этой марки нет10

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

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


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

МодульЭлементарное условиеНомера тестовИстинаЛожьmainif((n>'0')&&(n<'5'))12, 3mainif(file==NULL)54PUN2for(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,78PUN3if(strcmp(tab[j].marka,mar)==0)9,10


Литература


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

. Хохлов Д.Г. Структуры данных и комбинаторные алгоритмы. Учебное пособие. - Казань: Изд-во Казан. гос. техн. ун-та, 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 100BAZA

{fio[20];marka[10];nomer[9];

};TAB

{fio[20];marka[10];nomer[9];

};SORT (TAB *tab, int l);PUN1 (TAB *tab, int l);PUN2 (TAB *tab, int l);PUN3 (TAB *tab, int l);PUN4 (TAB *tab, int l);main()

{ FILE *f;BAZA b;TAB tab[MAX];n;l=0, i, s, nomer;((f=fopen("BAZA.txt","r"))==NULL)

{puts ("faila poezd net");();0;

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

{.fio[19]='\0';(tab[l].fio, b.fio);.marka[9]='\0';(tab[l].marka, b.marka);

b.nomer[8]='\0';(tab[l].nomer, b.nomer);

l++;

}(tab, l);

{ //clrscr();("cls");("---------------------------------------------------------------------");("Vibirete nomer punkta menu:");("1-polnaya informazia o vladelcah");("2-poisk po nomeru");("3-poisk vladelca i nomera po marke");

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

puts("5-vihod");("---------------------------------------------------------------------");=getche();(n)

{ case '1':PUN1(tab, l);break;'2':PUN2(tab, l);break;'3':PUN3(tab, l);break;'4':PUN4(tab, l);break;'5':break;:puts("Vvidite nomer ot 1 do 5");

}(n!='5')

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

}

}(n!='5');(f);1;

}PUN1 (TAB *tab, int l)

{int j=0, z=1;

{ //clrscr();("cls");("\n Familia I.O. | Marka | Nomer ");("------------------------------------------");(j;j<l; j++)

{ if (j<(10*z))("\n %s | %s | %s", tab[j].fio, tab[j].marka, tab[j].nomer);

{ z++;("\nNajmite lubyu knopky chto bi vivesti sled 10");getch();;("cls");

}

}

}(l>j);

}PUN2(TAB *tab, int l)

{int j, u=0,i,z=0;p=0;r[9];

//clrscr();("cls");("\nvvedite nomer mashini\n");(r);

//clrscr();("cls");(j=0;j<6;j++)

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

{if ((r[j]<'A')||(r[j]>'Z'))++;}((r[j]<'0')||(r[j]>'9'))++;

}(p==0)

{ puts("\n Familia I.O. | Marka | Nomer ");("------------------------------------------");(i=0; i<l; i++)

{ z=0;(j=0; j<6; j++)

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

{z++; }

}(z==6)

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

}(u==0)

{//clrscr();("cls");("Takogo nomera net");}

}("Nomer vveden ne pravelno");

}PUN3(TAB *tab, int l)

{ int i, j, z=0, t=0, n;mar[20];

// clrscr();("cls");("vvedite marky mashini");

gets(mar);=strlen(mar);

// clrscr();("cls");("\n Familia I.O. | Marka | Nomer ");("------------------------------------------");(j=0; j<l; j++, z=0)

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

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

{z++; }

}(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++;

}

}

}(t==0)

{ //clrscr();("cls");

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

}

}PUN4(TAB *tab, int l)

{mar[10];z=0,j,i,q;w=1;("cls");

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

//strcpy(mar,tab[0].marka);("\n Marka | Kolichestvo ");(j=0; j<l; j++)

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

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

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

{++;

}

}

}SORT (TAB *tab, int l)

{ int i, j;t;fio[20], mar[10], nomer [7];(i = 0 ; i < l ; i++)

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

{ for (t = 0 ; t < 10 ; t++)(strcmp(tab[j].marka,tab[j+1].marka)>0)

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

}

}

}

}


Приложение 2


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


IvanovA.P. ToyotaB540CT.S. NissanP990CC.A. NissanB571BP.A. LadaC111CC.I. HummerC777CX.A. LadaC415TO.V. DachaC789TO.Z. RenaultT894TO.I. LadaT561BE.G. LotusB565BO.B. HondaC717COI.F. Lada C556TOE.G. Opel C413EOM.A. Toyota P891XOM.D. Lada X013PXM.I. Nissan B670POT.I. Honda X518TOG.I. Lada P533TOV.A. Nissan T560TTD.R. Cherry C660TOI.A. Lada T781TPA.I. Dacha A617AEG.D. Honda A415BOP.S. Renault O819TOA.S. LotusT890AA


Приложение 3


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


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

Результат:BAZA net

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

Тест 2.


Рис.


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


Рис.


Рис.


Рис.


Тест3


Рис.


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

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


Рис.


Тест4 .


Рис.


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

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


Рис.


Тест5


Рис.


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

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


Рис.


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


Рис.


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


Рис.


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

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ