Описать структуру с именем 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
и выводим соответствующее сообщение
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д