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

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,05 Мб
  • Опубликовано:
    2015-03-31
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

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)

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

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 до 5

3

2

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

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

1

3

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

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

2

4

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

Меню

4

5

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

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

5

6

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

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




Литература

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

}

}(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.

Рис.

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

Рис.

Рис.

Рис.

Тест3

Рис.

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

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

Рис.

Тест4 .

Рис.

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

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

Рис.

Тест5

Рис.

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

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

Рис.

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

Рис.

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

Рис.

Похожие работы на - Программирование на языке высокого уровня

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!