ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 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;
}
}
//*********************************************************************************