C/C++

Программа в языке Си

Структура «Сотрудник»: фамилия, имя, отчество; должность; год рождения; заработная плата.
1) Ввод массива структур
2) Вывод на экран массива структур
3) Изменение заданной структуры
4) Поиск в массиве структур по заданному параметру (одному любому)
Заранее Спасибо
[C
[* Cineman *]
156
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <conio.h>
#include <limits.h>
#define NAME_BUFFER 48
#define NPOS UINT_MAX
typedef struct {
int year;
float salary;
char name[NAME_BUFFER];
} Employee, *EMPLOYEE;
void flush() {
while (getchar() != '\n');
}
Employee create() {
Employee emp;
printf("Ф. И. О.: ");
gets_s(emp.name, NAME_BUFFER);
printf("Год рождения: ");
scanf_s("%i", &emp.year);
printf("Заработная плата: ");
scanf_s("%f", &emp.salary);
flush();
system("cls");
return emp;
}
void print(EMPLOYEE emp) {
printf("%-48s%5i%12.2f\n", emp->name, emp->year, emp->salary);
}
void show(EMPLOYEE list, size_t n) {
size_t i;
for (i = 0U; i < n; ++i) print(&list[i]);
}
void edit(EMPLOYEE emp) {
do {
puts("Чтобы отредактровать \"Ф. И. О. \" нажмите 1");
puts("Чтобы отредактровать \"Год рождения\" нажмите 2 ");
puts("Чтобы отредактровать \"Заработная плата\" нажмите 3 ");
puts("Для выхода из редактора нажимте любую клавишу... ");
switch (_getch()) {
case '1':
printf("Обновите \'Ф. И. О. \': ");
gets_s(emp->name, NAME_BUFFER);
break;
case '2':
printf("Обновите \'Год рождения\': ");
scanf_s("%i", &emp->year);
flush();
break;
case '3':
printf("Обновите \'Заработная плата\': ");
scanf_s("%f", &emp->salary);
flush();
break;
default:
return;
}
} while (true);
}
EMPLOYEE find(EMPLOYEE begin, EMPLOYEE end, int year) {
EMPLOYEE next = begin;
do if (next->year == year) return next; while (++next != end);
return end;
}
int main(void) {
size_t n, i;
int year;
EMPLOYEE iter, end;
system("chcp 1251 > nul");
printf("Размер массива: ");
scanf_s("%u", &n);
system("cls");
flush();
EMPLOYEE list = (EMPLOYEE)malloc(n * sizeof(Employee));
for (i = 0U; i < n; ++i) {
printf("\n\t= %u =\n\n", i + 1U);
list[i] = create();
}
show(list, n);
puts("");
printf("Поиск по году рождения: ");
scanf_s("%i", &year);
end = list + n;
iter = find(list, end, year);
do {
if (iter != end) {
puts("\n\tНайден:");
print(iter);
puts("");
edit(iter);
iter = find(iter, end, year);
}
} while (iter != end);
system("cls");
show(list, n);
puts("");
free(list);
system("pause > nul");
return 0;
}
Олег Малышев
Олег Малышев
74 027
Лучший ответ
Валентин Никитин с вашего позволения, Николай стырю код. Пригодится. С наступающим