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

Определить структурированный тип, набор функций (в виде меню) для работы с массивом структур - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ зависает программа http://www.cyberforum.ru/cpp-beginners/thread223294.html
требуется всего лишь нарисовать график функции, но программа рисует только оси системы координат, после чего зависает, из-за чего такое может быть? //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <math.h> #include <Math.hpp>
C++ удаление пробелов между словами и буквами доброго времени суток, не могли бы вы мне помочь в создании программы которая удаляет удвоенные согласные в любом предложении, но чтоб удаляла а не заменяла на пробелк примеру чтоб было слово "удвоенное" вот так "удвоеая" а не "удвое ая", вот пример программы которую я показал учителю он утверждает что эта программа не удаляет а просто не видит эти символы: #include <iostream> #include... http://www.cyberforum.ru/cpp-beginners/thread223278.html
C++ Выбрать идущие подряд тройки цифр, упорядоченных по возрастанию. ( Не используя массивы )
Здравствуйте ! Помогите решить задание : Выбрать идущие подряд тройки цифр, упорядоченных по возрастанию. (Разрешаются только библиотеки iostream или stdio.h и не используя при этом массивы !!!) Спасибо.
Бинарное дерево C++
Здравствуйте.Прошу помощи.Никак не могу разобраться в задании.Нужно сделать бинарное дерево и с помощью дерева привести выражение к бесскобочной логике: (a*b+c)/(a-(d+a)).Что это значит?
C++ Only строки* http://www.cyberforum.ru/cpp-beginners/thread223255.html
Помогите пожалуйста с написанием программ через библиотеку <stdio.h> 1.Ввести строку и слово. Определить и вывести, сколько раз встречаются в строке буквы, перечисленные в слове. 2.Ввести строку и два слова. Вывести строку, в которой все вхождения первого слова заменены на второе слово.
C++ Найти либо максимум, либо минимум для трех задаваемых чисел Написать программу, которая находит максимум, либо минимум для трех задаваемых чисел. Вопрос: не могу понять что за минимум и максимум чисел такой!!! подробнее

Показать сообщение отдельно
snoop11
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 26
07.01.2011, 23:39  [ТС]     Определить структурированный тип, набор функций (в виде меню) для работы с массивом структур
Цитата Сообщение от st_dent Посмотреть сообщение
делал что-то подобное:
main.cpp
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
#include <cstdio>
#include <iostream>
 
#include "BOOK.h"
 
#define   stop __asm nop    
 
 
using namespace std;
 
void main()
{
    setlocale( LC_ALL,"Russian" );
 
    int enter=-1;
    bool flagExit=true;
    bool flagFirst=false;//нет элементов
    cout<<"Добро пожаловать в картотеку."<<endl;
    records rec={new BOOK[1],1};
    do
    {
        menu(enter);
        switch(enter)
        {
        case 0:
            ExitProg(rec,flagExit);break;
        case 1:
            PrintRecord(rec,flagFirst);break;
        case 6:
            SortBook(rec,flagFirst);break;
        case 5:
            ReadFile(rec,flagFirst);break;
        case 4:
            WriteFile(rec,flagFirst);break;
        case 3:
            DelBook(rec,flagFirst);break;
        case 2:
            AddBook(rec,flagFirst);break;
        }
        if(enter)enter=-1;
    } while(flagExit);
}


book.h
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
#pragma once
#define SIZE 32
 
struct BOOK
{
    char author[SIZE];
    char title[SIZE];
    char category[SIZE];
    float price;
    int year;
    
};
 
struct records
{
    BOOK* pBook;        //указатель на массив книг
    int size;   //количество книг
};
 
void PrintBook(BOOK* book);
void InitBook(BOOK* book);
void menu(int& enter);
void ExitProg(records& r,bool& flag);
void PrintRecord(records& r,bool& flag);
void ReadFile(records& r,bool& flag);
void WriteFile(records& r,bool& flag);
void DelBook(records& r,bool& flag);
void AddBook(records& r,bool& flag);
 
void SortBook(records& r,bool& flag);
void Sort(records& r, void (*Swap)(BOOK*,BOOK*), int (*Compare)(BOOK*, BOOK*));
void SwapBook(BOOK* b1, BOOK* b2);
int CmpYear(BOOK* b1, BOOK* b2);
int CmpPrice(BOOK* b1, BOOK* b2);
int CmpAuthor(BOOK* b1, BOOK* b2);
int CmpTitle(BOOK* b1, BOOK* b2);


book.cpp
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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
#include<windows.h>
#include "BOOK.h"
//#include <string.h>
#include <iostream>
 
#define RED FOREGROUND_RED|FOREGROUND_INTENSITY
#define GREEN FOREGROUND_GREEN|FOREGROUND_INTENSITY
using namespace std;
 
void PrintBook(BOOK* book)
{
    printf("\tАвтор: %s.\n\tНазвание: %s.\n\tКатегория: %s.\n\tЦена: %G.\n\tГод издания: %d.\n", 
        book->author,book->title, book->category,book->price,book->year);
}
 
void InitBook(BOOK* book)
{
    const char* category[]={"Классика","Фантастика","Детская","Нет"};
    printf("Введите автора: ");
    scanf("%31s", book->author);
    fflush(stdin);
    printf("Введите название: ");
    scanf("%31s", book->title);
    fflush(stdin);
    printf("Введите категорию: Классика(1),Фантастика(2),Детская(3),Нет(4)\n");
    int n;
    scanf("%d",&n);
    if(n>0&&n<5)
        strcpy(book->category,category[n-1]);
    else
    {
        printf("Вы ввели неверное значение. Категория не выбрана\n");
        strcpy(book->category,category[3]);
    }
    fflush(stdin);
    printf("Введите цену: ");
    float price;
    scanf("%G", &price);
    if(price<0)
    {
        printf("Цена не может быть отрицательной. Установлена в нуль\n");
        price=0;
    }
    book->price=price;
    fflush(stdin);
    int year=0;
    while(year<1500||year>2011)
    {
        printf("Введите год издания: ");
        scanf("%d", &year);
        if (year<1500||year>2011)
        {
            printf("Год издания должен быть в пределах от 1500 до 2011 гг. н.э.\nПожалуйста, повторите ввод.\n");
            fflush(stdin);
        }
    }
    book->year=year;
    fflush(stdin);
 
}
 
void menu(int&enter)
{
    HANDLE hConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);//для изменения цвета
    SetConsoleTextAttribute(hConsoleHandle, GREEN);
    cout<<"\nВыберите действие:\n"
        <<"(1)Распечатать содержимое картотеки.\n"
        <<"(2)Добавить книгу в картотеку.\n"
        <<"(3)Удалить книгу (книги) из картотеки.\n"
        <<"(4)Записать текущее содержимое картотеки в файл.\n"
        <<"(5)Считать из файла содержимое в картотеку.\n"
        <<"(6)Упорядочить книги в картотеке.\n"
        <<"(0)Выход из программы."
        <<endl;
    cin>>enter;
    SetConsoleTextAttribute(hConsoleHandle, RED);
    if(enter<0||enter>6)
        cout<<"Вы ввели неправильное значение."<<endl;
    cin.sync();     //для того,чтобы цикл
    cin.clear();    //не бегал по кругу при ошибочном вводе
    
}
 
void ExitProg(records& r,bool &flag)
{
    flag=0;     //нет элементов
    delete [] r.pBook;
    r.pBook=0;
    r.size=0;
}
 
void PrintRecord(records& r,bool& flag)
{
    if(!flag)   //если массив пуст
        cout<<"Нет книг в картотеке."<<endl;
    else
    {
        for(int i=0;i<r.size;i++)
        {
            cout<<i+1<<"ая книга:"<<endl;
            PrintBook(&r.pBook[i]);
        }
    }
}
 
void AddBook(records& r,bool& flag)
{
    if(!flag)   //если это первое добавление
    {
        InitBook(r.pBook);
        flag=1; //первое добавление уже было
    }
    else    //если книги уже есть
    {
        BOOK * tmp=new BOOK[r.size+1];  //выделили нужное кол-во памяти
        memcpy(tmp,r.pBook,r.size*sizeof(BOOK));    //переписали содержимое
        delete[] r.pBook;   //очистили уже ненужную память
        r.pBook=tmp;    //перенаправили указатель
        tmp=0;
        InitBook(&r.pBook[r.size]); //отправили адрес созданного кусочка на инициализацию 
        r.size++;   //увеличили кол-во книг
    }
}
 
void ReadFile(records& r,bool& flag)
{
    FILE *f = fopen("record.txt", "r");
    if(f)
    {
        int size=0;
        fscanf(f,"size=%d ", &size);
        records tmp = {new BOOK[size],size};
        for (int i=0;i<size;i++) 
            {
                fscanf(f,"Автор: %s Название: %s Категория: %s Цена: %G Год издания: %d\n"
                    ,tmp.pBook[i].author
                    ,tmp.pBook[i].title
                    ,tmp.pBook[i].category
                    ,tmp.pBook[i].price
                    ,tmp.pBook[i].year);
            }
        delete[] r.pBook;
        r=tmp;
        if(size)flag=1;
    }
    else
        cout<<"Невозможно открыть файл."<<endl;
    fclose(f);
}
 
void WriteFile(records& r,bool& flag)
{
    if(!flag)   //если не было первого добавления
        cout<<"Нет книг в картотеке."<<endl;
    else
    {
        FILE *f = fopen("record.txt","w");
        if(f)
        {           
            fprintf(f,"size=%d\n",r.size);
            for (int i=0;i<r.size;i++) 
            {
                BOOK* book = &r.pBook[i];
                fprintf(f,
                    "Автор: %s Название: %s Категория: %s Цена: %G Год издания: %d\n",
                    book->author,book->title, book->category,book->price,book->year
                    );
            }
            cout<<"Картотека успешно переписана в файл record.txt"<<endl;
        }
        else 
            cout<<"Невозможно открыть файл"<<endl;
        fclose(f);
    }
}
 
void DelBook(records& r,bool& flag)
{
    if(!flag)   //если нет книг
        cout<<"Нет книг в картотеке."<<endl;
    else        //если книги есть
    {
        if(r.size==1&&flag==1) //если в картотеке только 1 книга
        {
            flag=0;
            cout<<"1ая книга успешно удалена."<<endl;
        }
        else    //если книг больше 1
        {
            int  enter=0;
            while(enter<1||enter>r.size+1)  //пока не введено правильного номера
            {
                cout<<"Введите номер книги , которую хотите удалить"<<endl;
                cin>>enter;
                if(enter<1||enter>r.size+1) //если введен неправильный номер
                {
                    cout<<"Вы ввели неправильное значение."<<endl;
                    cin.sync();     //для того,чтобы цикл
                    cin.clear();    //не бегал по кругу при ошибочном вводе
                }
                else  
                {
                    BOOK * tmp=new BOOK[r.size-1];  //выделили нужное кол-во памяти
                    for(int i=0,j=0;j<r.size-1;i++,j++) //переписали содержимое
                    {
                        if(i+1==enter)i++;
                        tmp[j]=r.pBook[i];
                    }
                    delete[] r.pBook;   //очистили уже ненужную память
                    r.pBook=tmp;    //перенаправили указатель
                    tmp=0;
                    cout<<enter<<"ая книга успешно удалена."<<endl;
                    --r.size;
                }
            }
        }
    }
}
 
void SortBook(records& r,bool& flag)
{
    if(!flag)
        cout<<"Нет книг в картотеке."<<endl;
    else if(r.size==1)
        cout<<"В картотеке только 1 книга!"<<endl;
    else
    {
        cout<<"По какому полю отортировать книги?"<<endl;
        cout<<"(1)По автору.\n(2)По названию.\n(3)По цене.\n(4)По году издания."<<endl;
        int enter=0;
        while(enter<1||enter>4)
        {
            cin>>enter;
            if(enter<1||enter>4)
            {
                cout<<"Вы ввели неправильное значение.\nПовторите ввод."<<endl;
                cin.sync();
                cin.clear();
            }
        }
        switch(enter)
        {
        case 1:
            Sort(r,SwapBook,CmpAuthor);break;
        case 2:
            Sort(r,SwapBook,CmpTitle);break;
        case 3:
            Sort(r,SwapBook,CmpPrice);break;
        case 4:
            Sort(r,SwapBook,CmpYear);break;
        }
    }
}
 
void Sort(records& r, void (*Swap)(BOOK*, BOOK*), int (*Compare)(BOOK*, BOOK*))
{
    for(int i=0; i<r.size; i++)
        for(int j=r.size-1; j>=i; j--)
        {
            BOOK* pCurrent = &r.pBook[i];
            BOOK* pPrevious =&r.pBook[j];
            if((*Compare)( pPrevious, pCurrent ) > 0)//требуется переставить
                (*Swap)( pPrevious, pCurrent );
        }
}
 
void SwapBook(BOOK* b1, BOOK* b2)
{
    BOOK tmp=*b1;
    *b1=*b2;
    *b2=tmp;
}
 
int CmpYear(BOOK* b1, BOOK* b2)
{
    int nResult;
    int tmp1=b1->year;
    int tmp2=b2->year;
    (tmp1-tmp2<0)?nResult=-1:(tmp1-tmp2>0)?nResult=1:nResult=0;
    return nResult;
}
 
int CmpPrice(BOOK* b1, BOOK* b2)
{
    int nResult;
    float tmp1=b1->price;
    float tmp2=b2->price;
    (tmp1-tmp2<0)?nResult=-1:(tmp1-tmp2>0)?nResult=1:nResult=0;
    return nResult;
}
 
int CmpAuthor(BOOK* b1, BOOK* b2)
{
    return strcmp(b1->author,b2->author);
}
 
int CmpTitle(BOOK* b1, BOOK* b2)
{
    return strcmp(b1->title,b2->title);
}


Добавлено через 15 часов 55 минут


Кстати, в этом примере не удается считать данные из файла. Может кто подскажет в чем проблема?
Огромное вам спасибо. Вы мне очень помогли. Подскажите пожалуйста, немного переделал под себя но неадекватн окак-то работает. Не подскажете в чём дело? вот код:

book.cpp
Код
#include "stdafx.h"
#include<windows.h>
#include "BOOK.h"
#include <string.h>
#include <iostream>
 
#define RED FOREGROUND_RED|FOREGROUND_INTENSITY
#define GREEN FOREGROUND_GREEN|FOREGROUND_INTENSITY
using namespace std;
 
void PrintBook(BOOK* book)
{
        printf("\tАвтор: %s.\n\tНазвание: %s.\n\tКатегория: %s.\n\tпроисхождение: %G.\n\tналичие книги в данный момент: %d.\n", 
                book->author,book->title, book->category,book->origin,book->presence);
}
 
void InitBook(BOOK* book)
{
        const char* category[]={"специальная литература","хобби","домашнее хозяйство","беллетристика"};
        printf("Введите автора: ");
        scanf("%31s", book->author);
        fflush(stdin);
        printf("Введите название: ");
        scanf("%31s", book->title);
        fflush(stdin);
        printf("Введите категорию: \nспециальная литература(1),\nхобби(2),\nдомашнее хозяйство(3),\nбеллетристика(4)\n");
        int n;
        scanf("%d",&n);
        if(n>0&&n<5)
                strcpy(book->category,category[n-1]);
        else
        {
                printf("Вы ввели неверное значение. Категория не выбрана\n");
                strcpy(book->category,category[3]);
        }
        fflush(stdin);
        printf("Введите происхождение: ");
		printf("Происхождение: \nпокупка(1),\nкража(2),\nподарок(3)\n");
		float origin;
        scanf("%G", &origin);
        book->origin=origin;
        fflush(stdin);



        printf("Наличие книги: ");
		printf("Наличие: Есть в данный момент(1),Нет в данный момент(2)\n");
		float presence;
        scanf("%d", &presence);

        if(presence<0&&presence>2)
        {
                printf("Вы сделали неправильный выбор. Продолжение не возможно!\n");
                
        }
        book->presence=presence;
        fflush(stdin);





 
}
 
void menu(int&enter)
{
        HANDLE hConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);//для изменения цвета
        SetConsoleTextAttribute(hConsoleHandle, GREEN);
        cout<<"\nВыберите действие:\n"
                <<"(1)Распечатать содержимое картотеки.\n"
                <<"(2)Добавить книгу в картотеку.\n"
                <<"(3)Удалить книгу (книги) из картотеки.\n"
                <<"(4)Записать текущее содержимое картотеки в файл.\n"
                <<"(5)Считать из файла содержимое в картотеку.\n"
                <<"(6)Упорядочить книги в картотеке.\n"
                <<"(0)Выход из программы."
                <<endl;
        cin>>enter;
        SetConsoleTextAttribute(hConsoleHandle, RED);
        if(enter<0||enter>6)
                cout<<"Вы ввели неправильное значение."<<endl;
        cin.sync();             //для того,чтобы цикл
        cin.clear();    //не бегал по кругу при ошибочном вводе
        
}
 
void ExitProg(records& r,bool &flag)
{
        flag=0;         //нет элементов
        delete [] r.pBook;
        r.pBook=0;
        r.size=0;
}
 
void PrintRecord(records& r,bool& flag)
{
        if(!flag)       //если массив пуст
                cout<<"Нет книг в картотеке."<<endl;
        else
        {
                for(int i=0;i<r.size;i++)
                {
                        cout<<i+1<<"ая книга:"<<endl;
                        PrintBook(&r.pBook[i]);
                }
        }
}
 
void AddBook(records& r,bool& flag)
{
        if(!flag)       //если это первое добавление
        {
                InitBook(r.pBook);
                flag=1; //первое добавление уже было
        }
        else    //если книги уже есть
        {
                BOOK * tmp=new BOOK[r.size+1];  //выделили нужное кол-во памяти
                memcpy(tmp,r.pBook,r.size*sizeof(BOOK));        //переписали содержимое
                delete[] r.pBook;       //очистили уже ненужную память
                r.pBook=tmp;    //перенаправили указатель
                tmp=0;
                InitBook(&r.pBook[r.size]); //отправили адрес созданного кусочка на инициализацию 
                r.size++;       //увеличили кол-во книг
        }
}
 
void ReadFile(records& r,bool& flag)
{
        FILE *f = fopen("record.txt", "r");
        if(f)
        {
                int size=0;
                fscanf(f,"size=%d ", &size);
                records tmp = {new BOOK[size],size};
                for (int i=0;i<size;i++) 
                        {
                                fscanf(f,"Автор: %s Название: %s Категория: %s Происхождение: %G Наличие: %d\n"
                                        ,tmp.pBook[i].author
                                        ,tmp.pBook[i].title
                                        ,tmp.pBook[i].category
                                        ,tmp.pBook[i].origin
                                        ,tmp.pBook[i].presence);
                        }
                delete[] r.pBook;
                r=tmp;
                if(size)flag=1;
        }
        else
                cout<<"Невозможно открыть файл."<<endl;
        fclose(f);
}
 
void WriteFile(records& r,bool& flag)
{
        if(!flag)       //если не было первого добавления
                cout<<"Нет книг в картотеке."<<endl;
        else
        {
                FILE *f = fopen("record.txt","w");
                if(f)
                {                       
                        fprintf(f,"size=%d\n",r.size);
                        for (int i=0;i<r.size;i++) 
                        {
                                BOOK* book = &r.pBook[i];
                                fprintf(f,
                                        "Автор: %s Название: %s Категория: %s Происхождение: %G Наличие: %d\n",
                                        book->author,book->title, book->category,book->origin,book->presence
                                        );
                        }
                        cout<<"Картотека успешно переписана в файл record.txt"<<endl;
                }
                else 
                        cout<<"Невозможно открыть файл"<<endl;
                fclose(f);
        }
}
 
void DelBook(records& r,bool& flag)
{
        if(!flag)       //если нет книг
                cout<<"Нет книг в картотеке."<<endl;
        else            //если книги есть
        {
                if(r.size==1&&flag==1) //если в картотеке только 1 книга
                {
                        flag=0;
                        cout<<"1ая книга успешно удалена."<<endl;
                }
                else    //если книг больше 1
                {
                        int  enter=0;
                        while(enter<1||enter>r.size+1)  //пока не введено правильного номера
                        {
                                cout<<"Введите номер книги , которую хотите удалить"<<endl;
                                cin>>enter;
                                if(enter<1||enter>r.size+1)     //если введен неправильный номер
                                {
                                        cout<<"Вы ввели неправильное значение."<<endl;
                                        cin.sync();             //для того,чтобы цикл
                                        cin.clear();    //не бегал по кругу при ошибочном вводе
                                }
                                else  
                                {
                                        BOOK * tmp=new BOOK[r.size-1];  //выделили нужное кол-во памяти
                                        for(int i=0,j=0;j<r.size-1;i++,j++)     //переписали содержимое
                                        {
                                                if(i+1==enter)i++;
                                                tmp[j]=r.pBook[i];
                                        }
                                        delete[] r.pBook;       //очистили уже ненужную память
                                        r.pBook=tmp;    //перенаправили указатель
                                        tmp=0;
                                        cout<<enter<<"ая книга успешно удалена."<<endl;
                                        --r.size;
                                }
                        }
                }
        }
}
 
void SortBook(records& r,bool& flag)
{
        if(!flag)
                cout<<"Нет книг в картотеке."<<endl;
        else if(r.size==1)
                cout<<"В картотеке только 1 книга!"<<endl;
        else
        {
                cout<<"По какому полю отортировать книги?"<<endl;
                cout<<"(1)По автору.\n(2)По названию.\n(3)По происхождению.\n(4)По наличию."<<endl;
                int enter=0;
                while(enter<1||enter>4)
                {
                        cin>>enter;
                        if(enter<1||enter>4)
                        {
                                cout<<"Вы ввели неправильное значение.\nПовторите ввод."<<endl;
                                cin.sync();
                                cin.clear();
                        }
                }
                switch(enter)
                {
                case 1:
                        Sort(r,SwapBook,CmpAuthor);break;
                case 2:
                        Sort(r,SwapBook,CmpTitle);break;
                case 3:
                        Sort(r,SwapBook,CmpPresence);break;
                case 4:
                        Sort(r,SwapBook,CmpOrigin);break;
                }
        }
}
 
void Sort(records& r, void (*Swap)(BOOK*, BOOK*), int (*Compare)(BOOK*, BOOK*))
{
        for(int i=0; i<r.size; i++)
                for(int j=r.size-1; j>=i; j--)
                {
                        BOOK* pCurrent = &r.pBook[i];
                        BOOK* pPrevious =&r.pBook[j];
                        if((*Compare)( pPrevious, pCurrent ) > 0)//требуется переставить
                                (*Swap)( pPrevious, pCurrent );
                }
}
 
void SwapBook(BOOK* b1, BOOK* b2)
{
        BOOK tmp=*b1;
        *b1=*b2;
        *b2=tmp;
}
 


 
int CmpAuthor(BOOK* b1, BOOK* b2)
{
        return strcmp(b1->author,b2->author);
}

 


 int CmpPresence(BOOK* b1, BOOK* b2)
{
        int nResult;
        float tmp1=b1->presence;
        float tmp2=b2->presence;
        (tmp1-tmp2<0)?nResult=-1:(tmp1-tmp2>0)?nResult=1:nResult=0;
        return nResult;
 }


int CmpOrigin(BOOK* b1, BOOK* b2)
{
        int nResult;
        float tmp1=b1->origin;
        float tmp2=b2->origin;
        (tmp1-tmp2<0)?nResult=-1:(tmp1-tmp2>0)?nResult=1:nResult=0;
        return nResult;


}
 
int CmpTitle(BOOK* b1, BOOK* b2)
{
        return strcmp(b1->title,b2->title);
}


book.h
Код
#pragma once
#define SIZE 32
 
struct BOOK
{
        char author[SIZE];
        char title[SIZE];
        char category[SIZE];
		float presence;
        float origin;
        
};
 
struct records
{
        BOOK* pBook;            //указатель на массив книг
        int size;       //количество книг
};
 
void PrintBook(BOOK* book);
void InitBook(BOOK* book);
void menu(int& enter);
void ExitProg(records& r,bool& flag);
void PrintRecord(records& r,bool& flag);
void ReadFile(records& r,bool& flag);
void WriteFile(records& r,bool& flag);
void DelBook(records& r,bool& flag);
void AddBook(records& r,bool& flag);
 
void SortBook(records& r,bool& flag);
void Sort(records& r, void (*Swap)(BOOK*,BOOK*), int (*Compare)(BOOK*, BOOK*));
void SwapBook(BOOK* b1, BOOK* b2);
int CmpOrigin(BOOK* b1, BOOK* b2);
int CmpPresence(BOOK* b1, BOOK* b2);
int CmpAuthor(BOOK* b1, BOOK* b2);
int CmpTitle(BOOK* b1, BOOK* b2);

main.cpp
Код
#include "stdafx.h"

#include <cstdio>
#include <iostream>
 
#include "BOOK.h"
 
#define   stop __asm nop        
 
 
using namespace std;
 
void main()
{
        setlocale( LC_ALL,"Russian" );
 
        int enter=-1;
        bool flagExit=true;
        bool flagFirst=false;//нет элементов
        cout<<"Добро пожаловать в картотеку."<<endl;
        records rec={new BOOK[1],1};
        do
        {
                menu(enter);
                switch(enter)
                {
                case 0:
                        ExitProg(rec,flagExit);break;
                case 1:
                        PrintRecord(rec,flagFirst);break;
                case 6:
                        SortBook(rec,flagFirst);break;
                case 5:
                        ReadFile(rec,flagFirst);break;
                case 4:
                        WriteFile(rec,flagFirst);break;
                case 3:
                        DelBook(rec,flagFirst);break;
                case 2:
                        AddBook(rec,flagFirst);break;
                }
                if(enter)enter=-1;
        } while(flagExit);
}
// TODO. Установите ссылки на любые требующиеся дополнительные заголовки в файле STDAFX.H
// , а не в данном файле


Заранее спасибо большое за помощь.
 
Текущее время: 16:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru