Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема10_Струкруры.doc
Скачиваний:
1
Добавлен:
07.09.2019
Размер:
179.2 Кб
Скачать

Int nCopies;

Int nPages;

float price;

};

const int n=5;

Book books[n] = {

{"Пиковая дама", "Пушкин", 10000, 70, 300},

{"Идиот", "Достоевский", 20000, 490, 600},

{"Мастер и Маргарита", "Булгаков", 40000, 340, 500},

{"Совершенный код", "Макконнел", 4000, 800, 900},

{"Криптография", "Смарт", 3000, 400, 550}

};

Void printBooks() {

printf("%-25s %-15s %-7s %-10s %-10s\n", "Название",

"Автор", "Тираж", "Страниц", "Цена");

for (int i=0; i<5; i++) {

printf("%-25s %-15s %-7d %-10d %-10.2f\n",

books[i].name, books[i].author,

books[i].nCopies, books[i].nPages,

books[i].price);

}

}

#define NAME 1

#define AUTHOR 2

#define N_COPIES 3

#define N_PAGES 4

#define PRICE 5

bool isGreater(Book b1, Book b2, int field) {

switch(field) {

case NAME : return strcmp(b1.name, b2.name) > 0;

case AUTHOR : return strcmp(b1.author, b2.author) > 0;

case N_COPIES : return b1.nCopies > b2.nCopies;

case N_PAGES : return b1.nPages > b2.nPages;

case PRICE : return b1.price > b2.price;

default : return true;

}

}

void sortBooks(int field) {

for (int i=0; i<n-1; i++) {

int max = i;

for (int j=i+1; j<n; j++) {

if (isGreater(books[max], books[j], field)) {

max = j;

}

}

Book temp = books[max];

books[max] = books[i];

books[i] = temp;

}

}

void intoFile() {

FILE* dataFile = fopen("books.txt", "w");

for (int i=0; i<5; i++) {

fprintf(dataFile, "%s\n%s\n%d\n%d\n%f\n",

books[i].name, books[i].author, books[i].nCopies,

books[i].nPages, books[i].price);

}

fclose(dataFile);

}

int main() {

setlocale(LC_ALL, "Russian");

while (true) {

system("cls");

printf("1 - Вывод всех книг\n");

printf("2 - Сортировка по названию\n");

printf("3 - Сортировка по автору\n");

printf("4 - Сортировка по тиражу\n");

printf("5 - Сортировка по числу страниц\n");

printf("6 - Сортировка по цене\n");

printf("7 - Запись в файл\n");

printf("0 - Выход\n");

Int choice;

cin >> choice;

switch (choice) {

case 1 : printBooks();break;

case 2 : sortBooks(NAME);break;

case 3 : sortBooks(AUTHOR);break;

case 4 : sortBooks(N_COPIES);break;

case 5 : sortBooks(N_PAGES);break;

case 6 : sortBooks(PRICE);break;

case 7 : intoFile();break;

case 0 : exit(EXIT_SUCCESS);break;

default : printf("Ошибка\n");

}

system("pause");

}

return 0;

}

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Зачем нужны структуры?

  2. Как определить новую структуру и объявить переменные-структуры?

  3. Как инициализировать структуру?

  4. Как объявить массив структур?

  5. Что такое поле структуры и как к ним обращаться?

  6. Что такое вложенные структуры?

  7. Как вывести содержимое массива структур в виде таблицы?

  8. Можно ли передавать структуры в качестве аргументов функций и возвращать структуры в качестве значений функций?