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

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

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

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

14.05.2014, 22:17. Просмотров 197. Ответов 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 минут
Помогите,ребята!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2014, 22:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести самолет, который вылетает позже всего (C++):

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

Создать иерархии наследования: самолет, корабль-водный самолет или исправить ошибки - C++
a) Создать иерархии наследования: самолет, корабль - водный самолет. b) Создать иерархии наследования: транспорт - самолет, корабль -...

Самолет может поднять 750 кг, если средний вес человека 70кг. Посчитать сколько человек может поднять самолет? - C++
Напишите пожалуйста исходный код выражения задачи: Самолет может поднять 750 кг, если средний вес человека 70кг. Посчитать сколько...

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

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

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2014, 22:17
Привет! Вот еще темы с ответами:

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

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

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

Как вывести содержимое всего файла на экран, принтер, файл? - C++
В книгах уйма информации, я уже не могу ее переваривать. А практику сдавть нужно завтра. Помогите если не сложно.


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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