Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пример отчета 3 и 4.doc
Скачиваний:
2
Добавлен:
10.07.2019
Размер:
121.34 Кб
Скачать

4.Тест-требования

    1. Настройка

      1. сценарий

При запуске программы проверить, что сначала появляется меню, описанное в пункте 2.1.1. При выборе пользователем одного из типов работы (выбор типа работы в меню описано в пункте 2.1.1) проверить,что появляются сообщения на экране, описанные в пункте 2.3, отвечая на которые пользователь вводит необходимую для данного типа работы информацию. Так проверить, что при выборе:

"1" – 1) появляется сообщение 2.3.1 для ввода числа с клавиатуры.

2) пользователь вводит число для обработки, описанное в пункте 2.1.2.

3) осуществляется проверка числа на правильность; в случаях ошибок появляется сообщение 2.3.5.

  1. результат выводится на экран в виде заданного числа и через тире его

буквенное представление.

"2" – 1) появляется сообщение 2.3.1 для ввода числа с клавиатуры.

2) пользователь вводит число для обработки, описанное в пункте 2.1.2.

3) осуществляется проверка числа на правильность; в случаях ошибок появляется сообщение 2.3.5.

4) выводится сообщение 2.3.3 для введения имя файла, в котором необходимо сохранить результат.

  1. если файл не существует, то он создается под заданным именем и в него

записывается результат.

"3" – 1) появляется сообщение 2.3.2 для введения файла, из которого необходимо считывать числа для обработки

2) при введении несуществующего файла появляется сообщение 2.3.4, в котором предлагается закончить или продолжить работу. При этом оканчание работы означает выход из данного цикла, а в случае продолжния работы на экран выводится сообщение 2.3.4 для повторного задания файла.

3) числа в файле проверяются на соответствие с входными данными, описанными в пункте 2.1.2.

4) в случае существования числа в файле, не соответствующего пункту 2.1.2, выводится сообщение 2.3.7, после которого начинается новый цикл работы и появляется меню, описанное в пункте 2.1.1.

  1. если числа в файле соответствуют пункту 2.1.2, то результат выводится

на экран в виде числа из файла и через тире его буквенное представление.

"4" - 1) появляется сообщение 2.3.2 для введения файла, из которого необходимо считывать числа для обработки

2) при введении несуществующего файла появляется сообщение 2.3.4, в котором предлагается закончить или продолжить работу. При этом оканчание (нажатие n+Enter) работы означает выход из данного цикла, а в случае продолжния (нажатие y+Enter) работы на экран выводится сообщение 2.3.4 для повторного задания файла.

3) числа в файле проверяются на соответствие с входными данными, описанными в пункте 2.1.2.

4) в случае существования числа в файле, не соответствующего пункту 2.1.2, выводится сообщение 2.3.7, после которого начинается новый цикл работы и появляется меню, описанное в пункте 2.1.1.

5) если числа в файле соответствуют пункту 2.1.2, выводится сообщение 2.3.3 для введения имя файла, в котором необходимо сохранить результат.

  1. если файл не существует, то он создается под заданным именем и в него

записывается результат.

"5" – 1) выводится сообщение 2.3.6, в котором предлагается закончить или продолжить работу в данном цикле. При этом оканчание (нажатие n +Enter) работы означает выход из программы, а в случае продолжения работы на экран выводится меню, описанное в пункте 2.1.1.

    1. функция обработки числа

Проверить,что соблюдается следующий формат вывода в файл и на экран: заданное число, в цифровом представлении, пробел, тире, пробел, буквенное представление числа. Каждое число записано с новой строки, причем число в цифровой записи выравнивается по левой стороне экрана и может занимать максимум 4 позиции. Следующие за этими 3 позиции предназначены для вывода пробела, тире, пробела. Буквенное представление числа начинает записываться с 8-й позиции от верхнего левого края экрана.Проверить, что выходные данные могут быть выведены на экран или в файл.

5 Реализация

#include <iostream.h>

#include <iomanip.h>

#include <stdlib.h>

#include <iostream.h>

#include <fstream.h>

#include <string.h>

#include <ctype.h>

#include <ios.h>

struct Units{ //1 2...9

char num[2];

char writenNum[10];

};

struct Ten{ //20 30...90

char num[2];

char writenNum[10];

};

struct spec{ //11 12 ...19

char num[2];

char writenNum[11];

};

char str [64];

Units arUnits[9];

Ten arTen[8];

spec arSpecUnits[9];

void fillArUnits()

{

strcpy(arUnits[0].num,"1");

strcpy(arUnits[0].writenNum,"one");

strcpy(arUnits[1].num,"2");

strcpy(arUnits[1].writenNum,"two");

strcpy(arUnits[2].num,"3");

strcpy(arUnits[2].writenNum,"three");

strcpy(arUnits[3].num,"4");

strcpy(arUnits[3].writenNum,"four");

strcpy(arUnits[4].num,"5");

strcpy(arUnits[4].writenNum,"five");

strcpy(arUnits[5].num,"6");

strcpy(arUnits[5].writenNum,"six");

strcpy(arUnits[6].num,"7");

strcpy(arUnits[6].writenNum,"seven");

strcpy(arUnits[7].num,"8");

strcpy(arUnits[7].writenNum,"eight");

strcpy(arUnits[8].num,"9");

strcpy(arUnits[8].writenNum,"nine");

}

void fillArSpecUnits()

{

strcpy(arSpecUnits[0].num,"1");

strcpy(arSpecUnits[0].writenNum," eleven");

strcpy(arSpecUnits[1].num,"2");

strcpy(arSpecUnits[1].writenNum," twelve");

strcpy(arSpecUnits[2].num,"3");

strcpy(arSpecUnits[2].writenNum," thrirteen");

strcpy(arSpecUnits[3].num,"4");

strcpy(arSpecUnits[3].writenNum," fourteen");

strcpy(arSpecUnits[4].num,"5");

strcpy(arSpecUnits[4].writenNum," fifteen");

strcpy(arSpecUnits[5].num,"6");

strcpy(arSpecUnits[5].writenNum," sixteen");

strcpy(arSpecUnits[6].num,"7");

strcpy(arSpecUnits[6].writenNum," seventeen");

strcpy(arSpecUnits[7].num,"8");

strcpy(arSpecUnits[7].writenNum," eighteen");

strcpy(arSpecUnits[8].num,"9");

strcpy(arSpecUnits[8].writenNum," nineteen");

}

void fillArTen()

{

strcpy(arTen[0].num,"2");

strcpy(arTen[0].writenNum,"twenty ");

strcpy(arTen[1].num,"3");

strcpy(arTen[1].writenNum,"thirty ");

strcpy(arTen[2].num,"4");

strcpy(arTen[2].writenNum,"fourty ");

strcpy(arTen[3].num,"5");

strcpy(arTen[3].writenNum,"fifty ");

strcpy(arTen[4].num,"6");

strcpy(arTen[4].writenNum,"sixty ");

strcpy(arTen[5].num,"7");

strcpy(arTen[5].writenNum,"seventy ");

strcpy(arTen[6].num,"8");

strcpy(arTen[6].writenNum,"eighty ");

strcpy(arTen[7].num,"9");

strcpy(arTen[7].writenNum,"ninety ");

}

bool allDigits(char *ptr)

{

int i=0;

while (*(ptr+i) && isdigit(*(ptr+i)))

i++;

return !(*(ptr+i));

}

bool enterInt()

{

int counter;

bool rightNum=true;

cin>>str;

if (allDigits(str))

{

counter=strlen(str);

if (counter<=3)

{

char prom[64]="";

if (counter==2)

strcat(prom,"0");

else

if (counter==1)

strcat(prom,"00");

strcat(prom,str);

strcpy(str,prom);

rightNum=true;

}

else

{

cout<<"Error.Numbers only with 3 digits are avaible"

<<endl;

rightNum=false;

}

}

else

{

cout<<"Error.Enter integer value"<<endl;

rightNum=false;

}

return rightNum;

}

bool checkNumInFile()

{

int counter;

bool rightNum=true;

if (allDigits(str))

{

counter=strlen(str);

if (counter<=3)

{

char prom[64]="";

if (counter==2)

strcat(prom,"0");

else

if (counter==1)

strcat(prom,"00");

strcat(prom,str);

strcpy(str,prom);

rightNum=true;

}

else

rightNum=false;

}

else

rightNum=false;

return rightNum;

}

void putNumberInFile(ofstream outNumberFile,char *result)

{

outNumberFile<<result;

}

void proccessNum(char result[80])

{

bool firstZero=false;

int i=0;

int k=0;

char *zero="0";

char *number=str;

if ((!strncmp(number,zero,1) && !strncmp(number+1,zero,1)

&& !strncmp(number+2,zero,1)))

strcat(result,"zero");

else

{

if (!strncmp(number,zero,1)) //k=0 '0**'

{

k++;

firstZero=true;

}

else

{

while ((i<9) && //k=0 'd**'

(strncmp(arUnits[i].num,number,1)))

{

i++;

};

strcat(result,arUnits[i].writenNum);

strcat(result," hundred");

k++;

}

i=0;

number+=k;

if (!strncmp(number,zero,1)) //k=1 '*0*'

{

number++; //k=2 '*0d'

while ((i<9) &&

(strncmp(arUnits[i].num,number,1)))

{

i++;

}

if (i!=9) //k=2 '*0!0'

{

if (!firstZero)

strcat(result," and ");

strcat(result,arUnits[i].writenNum);

//'*0d'

}

}

else

if (!strncmp(number,"1",1)) //k=1 '*1*'

{

number+=k; //k=2 '*1d'

while ((i<9)&&

(strncmp(arSpecUnits[i].num,number,1)))

{

i++;

}

if (i!=9) //k=2 '*1!0'

{

if (!firstZero)

strcat(result," and ");

strcat(result,arSpecUnits[i].writenNum);

}

else

strcat(result,"ten");

}

else //k=1 '*d*'

{

while ((i<8) &&

(strncmp(arTen[i].num,number,1)))

{

i++;

}

if (!firstZero)

strcat(result," and ");

strcat(result,arTen[i].writenNum);

i=0;

number+=k; //k=2 '***'

while ((i<9) &&

(strcmp(arUnits[i].num,number)))

{

i++;

}

if (i!=9) //k=2 '**!0'

strcat(result,arUnits[i].writenNum);

}

}

}

void main()

{

char ch,unvalidFileOpen;

char request[80];

char *recPointer;

char req;

char fileName[80];

ofstream outNumberFile,outSolutionFile;

ifstream inNumberFile;

fillArUnits();

fillArTen();

fillArSpecUnits();

do{

do{

cout<<"Menu"<<endl

<<"1 - input from keyboard / output on screen"<<endl

<<"2 - input from keyboard / output in file"<<endl

<<"3 - input from file / output on screen"<<endl

<<"4 - input from file / output in file"<<endl

<<"5 - exit"<<endl;

cin>>request;

if (allDigits(request) && (strlen(request)==1))

{

req=request[0];

}

else

req='5';

char result [80];

char tire[]=" - ";

switch(req){

case '1':{

char answer;

do

{

bool errorInNumber=false;

cout<<"Input integer number"<<endl;

if (enterInt())

{

strcpy(result,str);

strcat(result,tire);

proccessNum(result);

cout<<result<<endl;

cout<<"Go on(y/n)?"<<endl;

cin>>answer;

}

}

while(answer!='n');

}

break;

case '2':

{

cout<<"Enter the file name to place the result in"

<<endl;

cin>>fileName;

outNumberFile.open(fileName,ios::out);

if (!outNumberFile)

cerr<<"Can't open file"<<endl;

else

{

char answer;

do

{

cout<<"Input integer number"<<endl;

if (enterInt())

{

strcpy(result,str);

strcat(result,tire);

proccessNum(result);

putNumberInFile(outNumberFile,result);

outNumberFile<<endl;

cout<<"Go on(y/n)?"<<endl;

cin>>answer;

}

}

while(answer!='n');

outNumberFile.close();

}

}

break;

case '3':{

cout<<"Enter the file name to read from"

<<endl;

cin>>fileName;

inNumberFile.open(fileName,ios::nocreate);

if (inNumberFile.fail())

{

cerr<<"File can't be open"<<endl;

cout<<"Continue the work(y/n)?"<<endl;

cin>>unvalidFileOpen;

if (unvalidFileOpen=='y')

{

inNumberFile.clear(0);

continue;

}

else

exit(1);

}

else

{

bool errorInFile=true;

while (inNumberFile>>str)

{ if (!checkNumInFile())

errorInFile=checkNumInFile();

if (checkNumInFile())

{

strcpy(result,str);

strcat(result,tire);

proccessNum(result);

cout<<result<<endl;

}

else

cout<<str<<" - "<<endl;

}

if (!errorInFile)

cout<<"Error.File contains not proccessed values"

<<endl;

}

inNumberFile.close();

}

break;

case '4':{

cout<<"Enter the file name to read from"

<<endl;

cin>>fileName;

inNumberFile.open(fileName,ios::nocreate);

if (inNumberFile.fail())

{

cerr<<"File can't be open"<<endl;

cout<<"Continue the work(y/n)?"<<endl;

cin>>unvalidFileOpen;

if (unvalidFileOpen=='y')

{

inNumberFile.clear(0);

continue;

}

else

exit(1);

}

else

{

cout<<"Enter the file to place the result in"

<<endl;

cin>>fileName;

outNumberFile.open(fileName,ios::out);

if (!outNumberFile)

cerr<<"Can't open file"<<endl;

else

{

bool errorInFile=true;

while(inNumberFile>>str)

{

if (!checkNumInFile())

errorInFile=checkNumInFile();

if (checkNumInFile())

{

strcpy(result,str);

strcat(result,tire);

proccessNum(result);

putNumberInFile(outNumberFile,result);

outNumberFile<<endl;

}

else

{

putNumberInFile(outNumberFile,str);

putNumberInFile(outNumberFile,tire);

outNumberFile<<endl;

}

}

outNumberFile.close();

inNumberFile.close();

if (!errorInFile)

cout<<"Error.File contains not proccessed values"

<<endl;

}

}

}

break;

}

}

while (req!='5');

cout<<"Continue the work (y/n)?"<<endl;

cin>>ch;

}

while (ch!='n');

}