Оформить с использованием меню с вызовом соответствующих функций. В задачах, которые предусматривают обработку списка записей (студенты, читатели, автомобили и т.п.), предусмотреть ввод первоначальной информации из файла.
Ввести структуру СТУДЕНТ С полями ФИО, ЧИСЛО, МЕСЯЦ, ГОД РОЖДЕНИЯ. Написать и протестировать функции:
а. добавления нового студента;
b. вывода на экран списка студентов;
с. поиска студентов по году рождения
На языке Си.
Ответы
Ответ:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
// Структура, представляющая студента
struct student {
char name[50];
int day, month, year;
};
// Функция для добавления нового студента
void add_student(struct student *s) {
printf("Введите имя студента: ");
scanf("%s", s->name);
printf("Введите дату рождения студента (число месяца и год через пробел): ");
scanf("%d %d %d", &s->day, &s->month, &s->year);
}
// Функция для вывода на экран списка студентов
void display_students(struct student *s, int n) {
printf("Список студентов:\n");
for (int i = 0; i < n; i++) {
printf("%s - %d.%d.%d\n", s[i].name, s[i].day, s[i].month, s[i].year);
}
}
// Функция для поиска студентов по году рождения
void search_students(struct student *s, int n, int year) {
printf("Студенты, родившиеся в %d году:\n", year);
for (int i = 0; i < n; i++) {
if (s[i].year == year) {
printf("%s\n", s[i].name);
}
}
}
// Функция для ввода первоначальной информации о студентах из файла
void load_students(struct student *s, int *n) {
FILE *fptr;
fptr = fopen("students.txt", "r");
if (fptr == NULL) {
printf("Ошибка при открытии файла!\n");
exit(1);
}
fscanf(fptr, "%d", n);
for (int i = 0; i < *n; i++) {
fscanf(fptr, "%s %d %d %d", s[i].name, &s[i].day, &s[i].month, &s[i].year);
}
fclose(fptr);
}
// Главная функция
int main() {
int choice, year, n = 0;
struct student s[100];
load_students(s, &n);
while (1) {
printf("\nВыберите действие:\n");
printf("1. Добавить нового студента.\n");
printf("2. Вывести список студентов.\n");
printf("3. Найти студентов по году рождения.\n");
printf("4. Выйти из программы.\n");
printf("Ваш выбор: ");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student(&s[n]);
n++;
break;
case 2:
display_students(s, n);
break;
case 3:
printf("Введите год рождения: ");
scanf("%d", &year);
search_students(s, n, year);
break;
case 4:
exit(0);
break;
default:
printf("Ошибка! Введите число от 1 до 4.\n");
break;
}
}
return 0;
}
Объяснение: