Описать структуру с именем 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; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем переменные
n
иm
типа int - Объявляем структуру
Train
с полямиpn
,num
иtime
типа char и unsigned int соответственно - В функции
main
объявляем переменныеkk
,a
,buf
,i
,k
,f
иpp
- В цикле switch выбираем действие в зависимости от значения переменной
kk
- Вводим данные о поездах в массив
a
с помощью цикла for и функцийscanf
- Сортируем массив
a
по полюtime
с помощью двух вложенных циклов for и функцииstrcmp
- Ищем поезд с заданным пунктом назначения с помощью цикла for и функции
strcmp
- Выводим информацию о найденном поезде на экран
- Проверяем значение переменной
f
и выводим соответствующее сообщение
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д