Структуры и работа с файлами в Си - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте ! Помогите с работой на создание структур и ввод и вывод с файла Ввести структуру СТУДЕНТ с полями ФИО, ЧИСЛО, МЕСЯЦ, ГОД РОЖДЕНИЯ. Написать и протестировать функции a. добавления нового студента; b. вывода на экран списка студентов; c. поиска студентов по году рождения на данный момент имеется код
#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;
}
С добавлением нового студента кое как справился. Не получается задание с выводом на экран списка студентов и поиск студентов по году рождения данные, которые уже содержатся в текстовом документе Алексеева Анна Анатольевна 2 7 1998 Алиев Магомед Асламбекович 3 8 1998 Антонов Сергей Владимирович 4 8 1998 Ануфриева Диана Романовна 5 1 1998 Вислогузова Юлия Николаевна 6 1 1998 Власова Ольга Сергеевна 7 3 1998 Волков Александр Викторович 8 4 1998 Гайдаров Юрий Исламович 9 5 1998 Прошу помочь!

Решение задачи: «Структуры и работа с файлами в Си»

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; 
}

Объяснение кода листинга программы

  1. Объединение и связывание: Код использует оператор #include для объединения и связывания с библиотеками, необходимыми для работы с файлами и вводом-выводом в стандартном C.
  2. Инициализация массива структур: Функция init_list() инициализирует массив структур NEW, устанавливая каждое поле FIO на начальный ноль. Это гарантирует, что при добавлении нового элемента в массив структур NEW поля FIO не будут содержать старые данные.
  3. Ввод данных: Функция newstudent() добавляет новую запись в файл, считывая данные от пользователя и записывая их в файл. Поля FIO, ch, mes и god структуры student заполняются данными, введенными пользователем.
  4. Поиск данных: Функция find_free() ищет первую свободную структуру в массиве структур NEW. Она перебирает все структуры в массиве, пока не найдет структуру, поле FIO которой не содержит данных. Если такой структуры нет, функция возвращает -1.
  5. Чтение данных: Функция list() открывает файл и читает данные из него в массив структур NEW. Она считывает поля FIO, ch, mes и god каждой структуры из файла и выводит их на экран.
  6. Поиск данных: Функция search() пока не реализована, но, судя по всему, она должна искать конкретного студента в массиве структур NEW на основе его имени или другой идентифицирующей информации.
  7. Главное меню: Функция main() содержит главное меню программы, которое позволяет пользователю выбирать различные операции, такие как добавление нового студента, просмотр списка студентов и поиск студентов.
  8. Закрытие программы: Функция exit(0) используется для корректного завершения программы и освобождения всех выделенных ресурсов.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы