Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Forsak3n
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 29
#1

Вывести самолет, который вылетает позже всего - C++

14.05.2014, 22:17. Просмотров 193. Ответов 0
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include <string.h>
#include <iomanip>
#include <fstream>
 
using namespace std;
 
const int len_dest = 18;
const int len_num = 13;
struct time {
    int mes;
    int den;
};
struct aeroflot{
        char dest[len_dest];
        char num[len_num];
        char plane [len_dest];
        time t;
        };
const int size_a = sizeof(aeroflot);
const int size_p = sizeof(time);
FILE *fbin;
aeroflot elem1,elem2;
time eleme1,eleme2;
int create_file(FILE *fbin);
int print_file(FILE *fbin);
int search_dest(FILE *fbin);
int search_same(FILE *fbin);
int search_time(FILE *fbin);
 
void sort_file(){
    long i,j;
    fseek(fbin,0,SEEK_END);
    long len=ftell(fbin)/size_a;
    rewind(fbin);
    for(i=len-1;i>=1;i--)
        for(j=0;j<=i-1;j++){
            fseek(fbin,j*size_a,SEEK_SET); //указатель на j-ую запись
            fread(&elem1,size_a,1,fbin); //читаем запись j в elem1
            fread(&elem2,size_a,1,fbin); //читаем след.запись в элементе 2
                if(strcmp(elem1.num,elem2.num)>=1){ //сравниваем
 
                fseek(fbin,(-2)*size_a,SEEK_CUR); //указатель на 2 позиции назад
                //обмен
                fwrite(&elem2,size_a,1,fbin); //сначала элемент 2
                fwrite(&elem1,size_a,1,fbin); //затем элемент 1
            }
        }
}
int main(){
      char c;
      setlocale( LC_ALL,"Russian" );
      fbin = fopen("aeroflot.dat","r+b");
      if (!fbin) {
            fbin = fopen ("aeroflot.dat","w+b");
 
                   if (!fbin){
                    puts ("Не могу открыть (создать) файл\n");
                    return 1;
                   }
      }
    while (1) {
        system("cls");
        puts ("1 - Запись в файл.");
        puts ("2 - Вывод файла. ");
        puts ("3 - Поиск записей по пункту назначения.");
        puts ("4 - Поиск типов самолета с одинаковым номером рейса.");
        puts ("5 - Вывод самолета, который вылетает позже всех.");
        puts ("6 - Выход из программы.");
        puts ("_________________________________ ");
        puts ("Введите номер пункта меню\n");
        c=getch();
        switch(c) {
        case '1': create_file(fbin);break;
        case '2': print_file(fbin);break;
        case '3': search_dest(fbin);break;
        case '4': search_same(fbin);break;
        case '6': return 0;
        }
    }
}
int create_file(FILE *fbin){
    aeroflot elem;
    time eleme;
    char c;
    fseek(fbin,0,SEEK_END);
    puts("Ввод данных о рейсах");
    puts ("Для выхода нажмите 'Escape'");
    puts ("____________________________\n");
    while(1) {
        system("cls");
        cout << "Введите пункт назначения: ";
        cin >> elem.dest;
        cout << "Введите номер рейса: ";
        cin >> elem.num;
        cout << "Введите тип самолёта: ";
        cin >> elem.plane;
        cout << "Введите время отправления(число) :";
        cin >> elem.t.den;
        cout <<"Введите время отправления (месяц) :";
        cin >> elem.t.mes;
        fwrite(&elem,size_a,1,fbin);
        sort_file();
        cout << "'Enter' - следующая запись, 'Escape' - возврат в главное меню";
        c = getche();
        if (c==27) return 1;
    }
}
int print_file(FILE *fbin){
        aeroflot elem;
        time eleme;
        int n;
        system("cls");
        rewind(fbin);
        puts("._____________________________________________________________________.");
        puts("| Пункт назначения | Номер рейса |   Тип самолёта  |  Время(месяц:год)|");
        puts("|_____________________________________________________________________|");
        do {
             n=fread(&elem,size_a,1,fbin);
             if(n<1) break;
             printf("|%-18s|%-13s|%-17s|  %2i.%4i         |\n",elem.dest,elem.num,elem.plane,elem.t.den,elem.t.mes);
             puts("|_____________________________________________________________________.");
        } while(1);
        puts("Нажмите любую клавишу");
        getch();
        return 0;
}
int search_dest(FILE *fbin){
    aeroflot elem;
    int n;
    int found = 0;
    char key[len_dest];
    system("cls");
    rewind(fbin);
    puts("Поиск записей по пункту назначения.\n");
    puts("Введите пункт назначения");
    cin.getline(key,len_dest);
    puts(".___________________________________________________.");
    puts("| Пункт назначения | Номер рейса |   Тип самолёта   |");
    puts("|___________________________________________________|");
    do {
             n=fread(&elem,size_a,1,fbin);
             if(n<1) break;
             if (!strcmp(elem.dest,key)) {
                found=1;
                printf("|%-18s|%-13s|%-18s|\n",elem.dest,elem.num,elem.plane);
                puts("|___________________________________________________|");
             }
        } while(1);
    if (!found) puts("Записей не найдено");
    puts("Нажмите любую клавишу");
    getch();
    return 0;
}   
int search_time(FILE *fbin){
 
 
int search_same(FILE *fbin){
    aeroflot elem1,elem2;
    int n,p;
    int found=0;
    system("cls");
    rewind(fbin);
    puts("Поиск пунктов и типов самолета с одинаковым номером рейса.\n");
  do{
    n=fread(&elem1,size_a,1,fbin);
    p=fread(&elem2,size_a,1,fbin);
    if(!strcmp(elem1.num,elem2.num)){
        found=1;
         printf("Одинаковые рейсы:\nРейс 1: Пункт  %s,Тип  %s;  Рейс 2: Пункт  %s,Тип  %s.\n",elem1.dest,elem1.plane,elem2.dest,elem2.plane);
         break;
     }
    }while(1);
    if(!found) puts("Нет записей.");
    puts("Нажмите любую клавишу...");
    getch();
    return 0;
}
Написал все нужные мне функции,но немогу придумать как вывести самолет,который вылетает позже всего.
В структуре Time значение int менять нельзя(так бы сам поставил char и использовал функцию strcmp).

Добавлено через 1 час 57 минут
Помогите, пожалуйста

Добавлено через 1 час 20 минут
Помогите,ребята!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2014, 22:17     Вывести самолет, который вылетает позже всего
Посмотрите здесь:

Определить вес почтового груза который можно поместить в самолет - C++
Помогите пожалуууууйста с программой на c++ Пассажирский самолет может поднять груз общим весом 30т. Составить программу для определения...

Найти элемент массива, который чаще всего встречается - C++
3. Найти элемент массива, который чаще всего встречается

Поймать exception, который вылетает при доступе к элементу пустого вектора - C++
Подскажите как правильно поймать exception, который вылетает при доступе к 1 элементу пустого вектора. #include &lt;iostream&gt; #include...

В заданной строке найти символ, который повторяется чаще всего - C++
1) Найти символ который повторяется чаще всего.

Как правильно объявить константы для всего проекта, который состоит из нескольких файлов - C++
какой-нибудь Variables.h в котором будет что-то типа: #define A 50 #define B 40 или const int A 50

Дан массив вещественных чисел. Определитьпорядковый номер того из них, который ближе всего к заданному числу Х - C++
Спасибо за помощь!

Вывести на экран предложение, имеющее больше всего слов - C++
Помогите написать программу Вот условие: Нужно определить количество предложений в тексте(текст вводить самому надо).Вывести на экран...

Вывести ромб (пустой внутри) символами *, используя всего один цикл for - C++
Вывести ромб (пустой внутри) символами *, используя всего один цикл for. На вход подаётся число: сторона квадрата (ромб рисуется в...

найти среднее арифметическое и вывести элемент массива, сильнее всего отклоняющийся от ср. арифметического - C++
дан линейный массив. найти среднее арифметическое и вывести элемент массива, сильнее всего отклоняющийся от ср. арифметического пример:...

Среди цифр введенной строки вывести на экран ту которая встречалась чаще всего - C++
Среди цифр введенной строки вывести на экран ту которая встречалась чаще всего, если таких цифр несколько, то вывести ту которая попалась...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru