Описать структуру с именем TRAIN (Завершить задачу) - C (СИ)

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

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

Описать структуру с именем TRAIN, содержащую следующие поля: - название пункта назначения; - номер поезда; - время отправления. Написать программу, выполняющую следующие действия: - ввод с клавиатуры данных в массив, состоящий из шести элементов типа TRAIN; - записи должны быть упорядочены по времени отправления поезда; - вывод на экран информации о поездах, направляющихся в пункт, название которого введено с клавиатуры; - если таких поездов нет, выдать на дисплей соответствующее сообщение.
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
 
struct TRAIN {
  char point[30];
  int N;
  float T;char state[3];
  unsigned long int zip;
} TRAIN_list[MAX];
 
void init_list(void), enter(void);
void delete(void), list(void);
void load(void), save(void);
int menu_select(void), find_free(void);
 
int main(void)
{
  char choice;
 
  init_list(); /* инициализация массива структур */
  for(;;) {
    choice = menu_select();
    switch(choice) {
      case 1: enter();
        break;
      case 2: delete();
        break;
      case 3: list();
        break;
      case 4: save();
        break;
      case 5: load();
        break;
      case 6: exit(0);
    }
  }
 
  return 0;
}
 
/* Инициализация списка. */
void init_list(void)
{
  register int t;
 
  for(t=0; t<MAX; ++t) TRAIN_list[t].point[0] = '\0';
}

/* Получения значения, выбранного  в меню. */
int menu_select(void)
{
  char s[80];
  int c;
 
  printf("1. Ввести пункт назначения\n");
  printf("2. Удалить пункт назначения\n");
  printf("3. Вывести список\n");
  printf("4. Сохранить файл\n");
  printf("5. Загрузить файл\n");
  printf("6. Выход\n");
  do {
    printf("\nВведите номер нужного пункта: ");
    gets(s);
    c = atoi(s);
  } while(c<0 || c>6);
  return c;
}

/* Добавление адреса в список. */
void enter(void)
{
  int slot;
  char s[80];
 
  slot = find_free();
 
  if(slot==-1) {
    printf("\nСписок заполнен");
    return;
  }
 
  printf("Введите пункт назначения: ");
  gets(TRAIN_list[slot].name);
 
  printf("Введите номер поезда: ");
  gets(TRAIN_list[slot].N);
 
  printf("Введите время: ");
  gets(TRAIN_list[slot].T);

  TRAIN_list[slot].zip = strtoul(s, '\0', 10);
}
 
/* Поиск свободной структуры. */
int find_free(void)
{
  register int t;
 
  for(t=0; TRAIN_list[t].name[0] && t<MAX; ++t) ;
 
  if(t==MAX) return -1; /* свободных структур нет */
  return t;
}

/* Удаление адреса. */
void delete(void)
{
  register int slot;
  char s[80];
 
  printf("Введите № записи: ");
  gets(s);
  slot = atoi(s);
 
  if(slot>=0 && slot < MAX)
    TRAIN_list[slot].name[0] = '\0';
}
 
/* Вывод списка на экран. */
void list(void)
{
  register int t;
 
  for(t=0; t<MAX; ++t) {
    if(TRAIN_list[t].name[0]) {
      printf("%s\n", TRAIN_list[t].name);
      printf("%s\n", TRAIN_list[t].street);
      printf("%s\n", TRAIN_list[t].city);
      printf("%s\n", TRAIN_list[t].state);
      printf("%lu\n\n", TRAIN_list[t].zip);
    }
  }
  printf("\n\n");
}
 
/* Сохранение списка. */
void save(void)
{
  FILE  *fp;
  register int i;
 
  if((fp=fopen("maillist", "wb"))==NULL) {
    printf("Ошибка при открытии файла.\n");
    return;
  }
 
  for(i=0; i<MAX; i++)
    if(*TRAIN_list[i].name)
      if(fwrite(&TRAIN_list[i],
         sizeof(struct TRAIN), 1, fp)!=1)
           printf("Ошибка при записи файла.\n");
 
  fclose(fp);
}

/* Загрузить файл. */
void load(void)
{
  FILE  *fp;
  register int i;
 
  if((fp=fopen("maillist", "rb"))==NULL) {
    printf("Ошибка при открытии файла.\n");
    return;
  }
 
  init_list();
  for(i=0; i<MAX; i++)
    if(fread(&addr_list[i],
       sizeof(struct addr), 1, fp)!=1) {
         if(feof(fp)) break;
         printf("Ошибка при чтении файла.\n");
    }
 
  fclose(fp);
}

Решение задачи: «Описать структуру с именем TRAIN (Завершить задачу)»

textual
Листинг программы
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
 
int n = 2;
int m = 0;
 
typedef struct
{
    char pn [21];
    unsigned int num;
    char time [6];
} Train;
 
int main(void)
{
    int kk = 1;
    switch(kk)
    {
    case 1:
        puts ( "добавить поезд "); break;
    case 2:
        puts ( "найти поезд  2. "); break;
    case 3:
        puts ( "выход 3. "); break;
    default:
        puts ( "случай  default. "); break;
    }
 
    printf (" ВНОСИМ ИФНОРМАЦИЮ О ПОЕЗДАХ:\n ");
    Train a[n];
    int i = 0;
    for (i=0; i<n; i++)   //Ввод данных
    {
        printf ("Введите пункт назначения: ");
        scanf("%s", &a[i].pn);
        printf (" Введите номер поезда: ");
        scanf("%d", &a[i].num);
        printf (" Введите время отправления ");
        scanf("%s", &a[i].time);
 
    }
    Train buf;
    int k;
    for (i=0; i < n-1; i++)
        for (k=0; k < n-1; k++)
            if (strcmp (a[k].time, a[k+1].time)>0)
            {
                buf = a[k];
                a[k] = a[k+1];
                a[k+1] = buf;
            }
    char pp[21];
    printf (" ИЩЕМ ПОЕЗД\n ");
    printf ("Введите пункт назначения: ");
    scanf("%s%*c", pp);
    int f = 0;
    for (i=0; i<n; i++)
        if (strcmp (a[i].pn, pp) == 0)
            printf ("Поезд номер: %u\tВремя отправления: %s\n", a[i].num, a[i].time);
            printf("\n");
            f = 1;
 
    if (!f)
        printf ("В %s ПОЕЗДА НЕ ХОДЯТ!",pp);
    getchar();
    return 0;
}

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

  1. Включаем необходимые заголовочные файлы
  2. Объявляем переменные n и m типа int
  3. Объявляем структуру Train с полями pn, num и time типа char и unsigned int соответственно
  4. В функции main объявляем переменные kk, a, buf, i, k, f и pp
  5. В цикле switch выбираем действие в зависимости от значения переменной kk
  6. Вводим данные о поездах в массив a с помощью цикла for и функций scanf
  7. Сортируем массив a по полю time с помощью двух вложенных циклов for и функции strcmp
  8. Ищем поезд с заданным пунктом назначения с помощью цикла for и функции strcmp
  9. Выводим информацию о найденном поезде на экран
  10. Проверяем значение переменной f и выводим соответствующее сообщение

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


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

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

9   голосов , оценка 3.667 из 5