fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. #define MAX_STUDENTS 100
  6. #define MAX_STRING_LEN 50
  7.  
  8. typedef struct {
  9. char surname[MAX_STRING_LEN];
  10. char name[MAX_STRING_LEN];
  11. char patronymic[MAX_STRING_LEN];
  12. char birth_date[11]; // формат "YYYY-MM-DD"
  13. char address[100];
  14. char phone[20];
  15. char faculty[MAX_STRING_LEN];
  16. int course;
  17. } Student;
  18.  
  19. // Безопасное копирование строки с ограничением длины
  20. void safe_strcpy(char* dest, const char* src, size_t dest_size) {
  21. strncpy(dest, src, dest_size - 1);
  22. dest[dest_size - 1] = '\0';
  23. }
  24.  
  25. // Функция установки данных
  26. void set_student(Student *s, const char *surname, const char *name, const char *patronymic,
  27. const char *birth_date, const char *address, const char *phone,
  28. const char *faculty, int course) {
  29. safe_strcpy(s->surname, surname, sizeof(s->surname));
  30. safe_strcpy(s->name, name, sizeof(s->name));
  31. safe_strcpy(s->patronymic, patronymic, sizeof(s->patronymic));
  32. safe_strcpy(s->birth_date, birth_date, sizeof(s->birth_date));
  33. safe_strcpy(s->address, address, sizeof(s->address));
  34. safe_strcpy(s->phone, phone, sizeof(s->phone));
  35. safe_strcpy(s->faculty, faculty, sizeof(s->faculty));
  36. s->course = course;
  37. }
  38.  
  39. void show_student(const Student *s) {
  40. printf("ФИО: %s %s %s\n", s->surname, s->name, s->patronymic);
  41. printf("Дата рождения: %s\n", s->birth_date);
  42. printf("Адрес: %s\n", s->address);
  43. printf("Телефон: %s\n", s->phone);
  44. printf("Факультет: %s\n", s->faculty);
  45. printf("Курс: %d\n", s->course);
  46. printf("-------------------------------------\n");
  47. }
  48.  
  49. int get_birth_year(const Student *s) {
  50. char year_str[5];
  51. strncpy(year_str, s->birth_date, 4);
  52. year_str[4] = '\0';
  53. return atoi(year_str);
  54. }
  55.  
  56. void print_by_faculty(const Student students[], int n, const char *faculty) {
  57. if (n <= 0 || n > MAX_STUDENTS) {
  58. printf("Некорректное количество студентов\n");
  59. return;
  60. }
  61.  
  62. printf("\nСтуденты факультета %s:\n", faculty);
  63. for (int i = 0; i < n; i++) {
  64. if (strcmp(students[i].faculty, faculty) == 0) {
  65. show_student(&students[i]);
  66. }
  67. }
  68. }
  69.  
  70. void print_by_faculty_and_course(const Student students[], int n) {
  71. if (n <= 0 || n > MAX_STUDENTS) {
  72. printf("Некорректное количество студентов\n");
  73. return;
  74. }
  75.  
  76. printf("\nСтуденты по факультетам и курсам:\n");
  77. for (int i = 0; i < n; i++) {
  78. printf("Факультет: %s, Курс: %d\n", students[i].faculty, students[i].course);
  79. show_student(&students[i]);
  80. }
  81. }
  82.  
  83. void print_born_after_year(const Student students[], int n, int year) {
  84. if (n <= 0 || n > MAX_STUDENTS) {
  85. printf("Некорректное количество студентов\n");
  86. return;
  87. }
  88.  
  89. printf("\nСтуденты, родившиеся после %d года:\n", year);
  90. for (int i = 0; i < n; i++) {
  91. if (get_birth_year(&students[i]) > year) {
  92. show_student(&students[i]);
  93. }
  94. }
  95. }
  96.  
  97. int main() {
  98. Student students[MAX_STUDENTS];
  99. int n = 3; // Количество студентов
  100.  
  101. set_student(&students[0], "Иванов", "Иван", "Иванович", "2002-05-14",
  102. "г. Москва, ул. Ленина, д. 10", "+71234567890", "Физика", 2);
  103. set_student(&students[1], "Петров", "Петр", "Петрович", "2001-03-22",
  104. "г. Санкт-Петербург, Невский пр., д. 20", "+79876543210", "Информатика", 3);
  105. set_student(&students[2], "Сидоров", "Сидор", "Сидорович", "2003-12-01",
  106. "г. Казань, ул. Баумана, д. 5", "+79991112233", "Физика", 1);
  107.  
  108. print_by_faculty(students, n, "Физика");
  109. print_by_faculty_and_course(students, n);
  110. print_born_after_year(students, n, 2003);
  111.  
  112. return 0;
  113. }
Success #stdin #stdout 0.01s 5292KB
stdin
Standard input is empty
stdout
Студенты факультета Физика:
ФИО: Иванов Иван Иванович
Дата рождения: 2002-05-14
Адрес: г. Москва, ул. Ленина, д. 10
Телефон: +71234567890
Факультет: Физика
Курс: 2
-------------------------------------
ФИО: Сидоров Сидор Сидорович
Дата рождения: 2003-12-01
Адрес: г. Казань, ул. Баумана, д. 5
Телефон: +79991112233
Факультет: Физика
Курс: 1
-------------------------------------

Студенты по факультетам и курсам:
Факультет: Физика, Курс: 2
ФИО: Иванов Иван Иванович
Дата рождения: 2002-05-14
Адрес: г. Москва, ул. Ленина, д. 10
Телефон: +71234567890
Факультет: Физика
Курс: 2
-------------------------------------
Факультет: Информатика, Курс: 3
ФИО: Петров Петр Петрович
Дата рождения: 2001-03-22
Адрес: г. Санкт-Петербург, Невский пр., д. 20
Телефон: +79876543210
Факультет: Информатика
Курс: 3
-------------------------------------
Факультет: Физика, Курс: 1
ФИО: Сидоров Сидор Сидорович
Дата рождения: 2003-12-01
Адрес: г. Казань, ул. Баумана, д. 5
Телефон: +79991112233
Факультет: Физика
Курс: 1
-------------------------------------

Студенты, родившиеся после 2003 года: