Структуры и работа с файлами в Си - C (СИ)
Формулировка задачи:
Здравствуйте !
Помогите с работой на создание структур и ввод и вывод с файла
Ввести структуру СТУДЕНТ с полями ФИО, ЧИСЛО, МЕСЯЦ, ГОД РОЖДЕНИЯ.
Написать и протестировать функции
a. добавления нового студента;
b. вывода на экран списка студентов;
c. поиска студентов по году рождения
на данный момент имеется код
С добавлением нового студента кое как справился. Не получается задание с выводом на экран списка студентов и поиск студентов по году рождения
данные, которые уже содержатся в текстовом документе
Алексеева Анна Анатольевна 2 7 1998
Алиев Магомед Асламбекович 3 8 1998
Антонов Сергей Владимирович 4 8 1998
Ануфриева Диана Романовна 5 1 1998
Вислогузова Юлия Николаевна 6 1 1998
Власова Ольга Сергеевна 7 3 1998
Волков Александр Викторович 8 4 1998
Гайдаров Юрий Исламович 9 5 1998
Прошу помочь!
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #define MAX 200 struct { char FIO[30]; int ch; int mes; int god; }NEW[MAX]; int find_free(void); //инициализация массива структур void init_list(void) { register int t; for(t=0; t<MAX; ++t) NEW[t].FIO[0] = '\0'; } //вызов меню пользователя int menu_select(void) { char s[80]; int c; printf("1 - Add new student\n2 - Student list\n3 - Search students\n"); do { printf("Hello!\nSelect a category: "); gets(s); c=atoi(s); } while(c<0||c>4); return c; } //Добавление нового студента void newstudent(void) { FILE *f; if ((f=fopen("C:\\stuct\\1.txt","a+"))==NULL){ printf("not open");return; } int slot; char s[80]; slot = find_free(); if(slot==-1) { printf("\nlist full"); return; } printf("Enter FIO: "); gets(NEW[slot].FIO); fprintf(f,"%s " ,NEW[slot].FIO); printf("Enter day: "); scanf("%d",&NEW[slot].ch); fprintf(f, "%d ",NEW[slot].ch); printf("Enter month: "); scanf("%d",&NEW[slot].mes); fprintf(f,"%d ",NEW[slot].mes); printf("Enter year: "); scanf("%d",&NEW[slot].god); fprintf(f,"%d\n",NEW[slot].god); fclose(f); } /* Поиск свободной структуры. */ int find_free(void) { register int t; for(t=0; NEW[t].FIO[0] && t<MAX; ++t) ; if(t==MAX) return -1; /* свободных структур нет */ return t; } //Список студентов void list(void) { } //Поиск студентов void search(void) { } //основная функция int main(void) { char choice; //FILE *f; // if ((f=fopen("C:\Users\PandaZz\Desktop\data.txt","a+"))!=NULL) init_list(); /* инициализация массива структур */ for(;;) { choice = menu_select(); switch(choice) { case 1: newstudent(); break; case 2: list(); break; case 3: search(); break; case 4: exit(0); } } return 0; }
Решение задачи: «Структуры и работа с файлами в Си»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include<locale.h> #define MAX 200 struct student { char FIO[40]; int ch; int mes; int god; }NEW[MAX]; int find_free(void); //инициализация массива структур void init_list(void) { register int t; for(t=0; t<MAX; ++t) NEW[t].FIO[0] = '\0'; } //вызов меню пользователя int menu_select(void) { char s[80]; int c; printf("1 - Add new student\n2 - Student list\n3 - Search students\n"); do { printf("Hello!\nSelect a category: "); gets(s); c=atoi(s); } while(c<0||c>4); return c; } //Добавление нового студента void newstudent(void) { FILE *f; if((f=fopen("C:\\stuct\\1.txt","a+"))==NULL){ printf("not open");return; } int slot; char s[80]; slot = find_free(); if(slot==-1) { printf("\nlist full"); return; } printf("Enter FIO: "); gets(NEW[slot].FIO); fputs(NEW[slot].FIO,f); printf("Enter day: "); scanf("%d",&NEW[slot].ch); fprintf(f, "%d ",NEW[slot].ch); printf("Enter month: "); scanf("%d",&NEW[slot].mes); fprintf(f,"%d ",NEW[slot].mes); printf("Enter year: "); scanf("%d",&NEW[slot].god); fprintf(f,"%d\n",NEW[slot].god); fclose(f); } /* Поиск свободной структуры. */ int find_free(void) { register int t; for(t=0; NEW[t].FIO[0] && t<MAX; ++t) ; if(t==MAX) return -1; /* свободных структур нет */ return t; } //Список студентов void list(void) { FILE *f; char c; int i=0; if((f=fopen("C:\\stuct\\1.txt","r+"))==NULL) { printf("not open\n"); return; } //system("pause"); while((c=getc(f))!=EOF) { ungetc(c,f); fgets(NEW[i].FIO,sizeof(NEW[i].FIO),f); fscanf(f,"%d",&NEW[i].ch); fscanf(f,"%d",&NEW[i].mes); fscanf(f,"%d",&NEW[i].god); i++; } fclose(f); //system("pause"); for (int j=0;j<i;j++) { printf("%s ",NEW[j].FIO); system("pause"); printf("%d ",NEW[j].ch); printf("%d ",NEW[j].mes); printf("%d \n",NEW[j].god); } } //Поиск студентов void search(void) { } //основная функция int main(void) { setlocale(LC_ALL,"Russian"); char choice; //FILE *f; // if ((f=fopen("C:\Users\PandaZz\Desktop\data.txt","a+"))!=NULL) init_list(); /* инициализация массива структур */ for(;;) { choice = menu_select(); switch(choice) { case 1: newstudent(); break; case 2: list(); break; case 3: search(); break; case 4: exit(0); } } return 0; }
Объяснение кода листинга программы
- Объединение и связывание:
Код использует оператор
#include
для объединения и связывания с библиотеками, необходимыми для работы с файлами и вводом-выводом в стандартном C. - Инициализация массива структур:
Функция
init_list()
инициализирует массив структурNEW
, устанавливая каждое полеFIO
на начальный ноль. Это гарантирует, что при добавлении нового элемента в массив структурNEW
поляFIO
не будут содержать старые данные. - Ввод данных:
Функция
newstudent()
добавляет новую запись в файл, считывая данные от пользователя и записывая их в файл. ПоляFIO
,ch
,mes
иgod
структурыstudent
заполняются данными, введенными пользователем. - Поиск данных:
Функция
find_free()
ищет первую свободную структуру в массиве структурNEW
. Она перебирает все структуры в массиве, пока не найдет структуру, полеFIO
которой не содержит данных. Если такой структуры нет, функция возвращает -1. - Чтение данных:
Функция
list()
открывает файл и читает данные из него в массив структурNEW
. Она считывает поляFIO
,ch
,mes
иgod
каждой структуры из файла и выводит их на экран. - Поиск данных:
Функция
search()
пока не реализована, но, судя по всему, она должна искать конкретного студента в массиве структурNEW
на основе его имени или другой идентифицирующей информации. - Главное меню:
Функция
main()
содержит главное меню программы, которое позволяет пользователю выбирать различные операции, такие как добавление нового студента, просмотр списка студентов и поиск студентов. - Закрытие программы:
Функция
exit(0)
используется для корректного завершения программы и освобождения всех выделенных ресурсов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д