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. void safe_strcpy(char* dest, const char* src, size_t dest_size) {
  20. strncpy(dest, src, dest_size - 1);
  21. dest[dest_size - 1] = '\0';
  22. }
  23.  
  24. void set_student(Student *s, const char *surname, const char *name, const char *patronymic,
  25. const char *birth_date, const char *address, const char *phone,
  26. const char *faculty, int course) {
  27. safe_strcpy(s->surname, surname, sizeof(s->surname));
  28. safe_strcpy(s->name, name, sizeof(s->name));
  29. safe_strcpy(s->patronymic, patronymic, sizeof(s->patronymic));
  30. safe_strcpy(s->birth_date, birth_date, sizeof(s->birth_date));
  31. safe_strcpy(s->address, address, sizeof(s->address));
  32. safe_strcpy(s->phone, phone, sizeof(s->phone));
  33. safe_strcpy(s->faculty, faculty, sizeof(s->faculty));
  34. s->course = course;
  35. }
  36.  
  37. void show_student(const Student *s) {
  38. printf("ФИО: %s %s %s\n", s->surname, s->name, s->patronymic);
  39. printf("Дата рождения: %s\n", s->birth_date);
  40. printf("Адрес: %s\n", s->address);
  41. printf("Телефон: %s\n", s->phone);
  42. printf("Факультет: %s\n", s->faculty);
  43. printf("Курс: %d\n", s->course);
  44. printf("-------------------------------------\n");
  45. }
  46.  
  47. int get_birth_year(const Student *s) {
  48. char year_str[5];
  49. strncpy(year_str, s->birth_date, 4);
  50. year_str[4] = '\0';
  51. return atoi(year_str);
  52. }
  53.  
  54. void print_by_faculty(const Student students[], int n, const char *faculty) {
  55. printf("\nСтуденты факультета %s:\n", faculty);
  56. for (int i = 0; i < n; i++) {
  57. if (strcmp(students[i].faculty, faculty) == 0) {
  58. show_student(&students[i]);
  59. }
  60. }
  61. }
  62.  
  63. void print_born_after_year(const Student students[], int n, int year) {
  64. printf("\nСтуденты, родившиеся после %d года:\n", year);
  65. for (int i = 0; i < n; i++) {
  66. if (get_birth_year(&students[i]) > year) {
  67. show_student(&students[i]);
  68. }
  69. }
  70. }
  71.  
  72. int main() {
  73. Student students[MAX_STUDENTS];
  74. int n = 3; // Количество студентов
  75.  
  76. set_student(&students[0], "Иванов", "Иван", "Иванович", "2002-05-14",
  77. "г. Москва", "+71234567890", "Физика", 2);
  78. set_student(&students[1], "Петров", "Петр", "Петрович", "2001-03-22",
  79. "г. Санкт-Петербург", "+79876543210", "Информатика", 3);
  80. set_student(&students[2], "Сидоров", "Сидор", "Сидорович", "2003-12-01",
  81. "г. Казань", "+79991112233", "Физика", 1);
  82.  
  83. // Выводим только студентов факультета "Физика"
  84. print_by_faculty(students, n, "Информатика");
  85.  
  86. // Выводим студентов, родившихся после 2002 года (вместо 2001)
  87. print_born_after_year(students, n, 2001);
  88.  
  89. return 0;
  90. }
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
Студенты факультета Информатика:
ФИО: Петров Петр Петрович
Дата рождения: 2001-03-22
Адрес: г. Санкт-Петербург
Телефон: +79876543210
Факультет: Информатика
Курс: 3
-------------------------------------

Студенты, родившиеся после 2001 года:
ФИО: Иванов Иван Иванович
Дата рождения: 2002-05-14
Адрес: г. Москва
Телефон: +71234567890
Факультет: Физика
Курс: 2
-------------------------------------
ФИО: Сидоров Сидор Сидорович
Дата рождения: 2003-12-01
Адрес: г. Казань
Телефон: +79991112233
Факультет: Физика
Курс: 1
-------------------------------------