Файл: Курсовая работа. Матвиенко. Вариантk 018__.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.05.2024

Просмотров: 60

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

if (strlen(bufer)>0)

break;

else printf("Вы ничего не ввели. Повторите ввод.\n");

}

}

Strochka.KolRabMest=atoi(bufer);

// Ввод зарплаты с проверкой

/* Идея:

Ввод числа в текстовом формате

Условие1 (количество знаков)

Да1 (не хватает цифр, их меньше чем РублиТочкаКопКоп) – сброс цикла на переввод

Нет1 (хватает цифр)

1) Цикл с условием2 (проверка рублей)

Да2 (не все рубли цифры) – сброс цикла на переввод

Нет2 (все рубли цифры) – проверенная цифра сбрасывается в переменную Деньги

2) Условие3 (проверка выхода из предыдущего цикла по завершению всех цифр, а не по break)

Да3 (количество прошедших проверку цифр равно количеству рублей)

Условие4 (проверка точки)

Да4 (на 3-м с конца месте не точка) – сбос цикла на переввод

Нет4 (на 3-м с конца месте точка)

1)) Цикл с условием5 (проверка копеек)

Да5 (не все копейки цифры) – сброс цикла на переввод

Нет5 (все копейки цифры) – проверенная цифра сбрасывается в переменную Деньги

2)) Условие6 (проверка выхода из предыдущего цикла по завершению всех цифр, а не по break)

Да6 (количество прошедших проверку цифр равно количеству копеек)

Условие7 (проверка реальности)

Да7 (слишком большая зарплата) – сброс цикла на переввод

Нет7 (пройдены все проверки)

1))) превращение текстовых денег в числовые

2))) выход из цикла while

*/

while (1)

{

printf("Зарплата (формат: руб.коп) \t- \t");

gets(bufer);

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

dengi[i]='\0';


// Проверка, хватает ли цифр (минимум 4 – Р.КК)

if (strlen(bufer)<=3)

{

printf("Проверьте формат вводимых данных (руб.коп).\n");

continue;

}

else

{

// Начальное количество правильных знаков (цифры и точка на своих местах)

kolichestvo=0;

// Проверка цифр рублей (с 0-го символа до точки)

for (i=0; i<strlen(bufer)-3; i++)

{

if ( isdigit(bufer[i]) == 0 )

{

printf("Проверьте формат вводимых данных (руб.коп).\n");

break;

}

else

{

dengi[i]=bufer[i];

kolichestvo = kolichestvo+1;

} // "иначе" 2-го условия

}

// Проверка выхода из предыдущего цикла по завершению всех цифр, а не по break

if ( kolichestvo==strlen(bufer)-3 )

{

// Проверка точки между рублями и копейками

if (bufer[kolichestvo]!='.')

{

printf("Проверьте формат вводимых данных (руб.коп).\n");

}

else

{

kolichestvo = kolichestvo+1;

// Проверка цифр копеек (после точки 2 символа)

for (i=1; i<=2; i++)

{

if ( isdigit(bufer[kolichestvo]) == 0 )

{

printf("Проверьте формат вводимых данных (руб.коп).\n");

break;

}

else

{ dengi[kolichestvo-1]=bufer[kolichestvo];

kolichestvo = kolichestvo+1;

} // конец 5-го условия

} // конец for


// Проверка соответствия реальности

if ( kolichestvo==strlen(bufer) )

{

if ( (strlen(bufer)-3) > 4 )

{

printf("Профессии с такой зарплатой в центр занятости не попадают. Введите реальную зарплату.\n");

}

else

{

// Превращение введенной текстом зарплаты в числовую

Strochka.Zarplata=atof(dengi)*0.01;

break;

} // иначе 5-го условия

}

}; // "иначе" 4-го условия

}; // "иначе" 3-го условия

} //"иначе" 1-го условия

}

}

//*********************************************************************************

int ChtenieMassivaIzFayla()

{

// Nomer – номер выводимой записи

int i;

char temp[2], *ukazatel;

// Открываю файл базы данных baza.dat для чтения

fp = fopen("baza.dat","r");

i=1;

// Проверяю, открылся ли файл

if ( fp == NULL )

{

// Если файл не открылся, то сообщаю об этом и заканчиваю

printf("\n\nПроизошла ошибка. База данных недоступна. \nНажмите любую клавишу для продолжения работы");

_getch();

return i;

}

else

{

// Если файл открылся хорошо, то работаю с ним

while ( fgets (Baza[i].Rabotodatel, 28, fp) != NULL)

{

ukazatel = strrchr (Baza[i].Rabotodatel, '\n');

if (ukazatel != NULL)

*ukazatel = '\0';

fgets (Baza[i].Professiya, 28, fp);

ukazatel = strrchr (Baza[i].Professiya, '\n');

if (ukazatel != NULL)

*ukazatel = '\0';

fscanf (fp, "%d", &Baza[i].KolRabMest);

fscanf (fp, "%f", &Baza[i].Zarplata);


fgets (temp, 2, fp);

// Считываю переход на новую строку

i = i + 1;

}

return i-1;

// Закрываю файл базы данных

fclose(fp);

}

}

//*********************************************************************************

// Запись массива в файл

void ZapisMassivaVFayl(int N)

{

// N – количество записей в массиве (передается из места вызова, здесь не описывается)

// i – счетчик цикла

int i;

// Создаю наново файл базы данных baza.dat

fp = fopen("baza.dat","w");

for (i=1; i<=N; i++)

{

fprintf (fp, "%s\n%s\n%d\n%.2f\n", Baza[i].Rabotodatel, Baza[i].Professiya, Baza[i].KolRabMest, Baza[i].Zarplata);

}

// Закрываю файл базы данных

fclose(fp);

}

//*********************************************************************************

void Sortirovka(int Nomer, int Kolich)

{

// Nomer – номер поля, по которому нужно сортировать (передается, здесь не описывается)

// Kolich – количество структур в базе (передается, здесь не описывается)

// i – счетчик цикла

int i,j;

// bufer – временная переменная для перекладки

Zapis bufer;

switch ( Nomer )

{

// Сортировка по работодателям

case 1:

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

for (j=Kolich; j>1; j--)

if ( strcmp(Baza[j].Rabotodatel,Baza[j-1].Rabotodatel) < 0 )

{bufer=Baza[j]; Baza[j]=Baza[j-1]; Baza[j-1]=bufer;};

break;

// Сортировка по профессиям

case 2:

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

for (j=Kolich; j>1; j--)

if ( strcmp(Baza[j].Professiya,Baza[j-1].Professiya) < 0 )

{bufer=Baza[j]; Baza[j]=Baza[j-1]; Baza[j-1]=bufer;};

break;

// Сортировка по количеству рабочих мест

case 3:

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


for (j=Kolich; j>1; j--)

if ( Baza[j].KolRabMest < Baza[j-1].KolRabMest )

{bufer=Baza[j]; Baza[j]=Baza[j-1]; Baza[j-1]=bufer;};

break;

// Сортировка по средней зарплате

case 4:

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

for (j=Kolich; j>1; j--)

if ( Baza[j].Zarplata > Baza[j-1].Zarplata )

{bufer=Baza[j]; Baza[j]=Baza[j-1]; Baza[j-1]=bufer;};

break;

default: break;

}

}

//*********************************************************************************