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;
}
КОНТРОЛЬНЫЕ ВОПРОСЫ
Зачем нужны структуры?
Как определить новую структуру и объявить переменные-структуры?
Как инициализировать структуру?
Как объявить массив структур?
Что такое поле структуры и как к ним обращаться?
Что такое вложенные структуры?
Как вывести содержимое массива структур в виде таблицы?
Можно ли передавать структуры в качестве аргументов функций и возвращать структуры в качестве значений функций?