Dray, Ну, то есть, ты предлагаешь юзать только, фактически, badalloc?
MAKCim, Ну тут же я открываю файл и знаю, если произошла ошибка, то, скорее всего, это связано с некотрыванием файла Если я в него пишу данные, то, скорее всего, с тем, что они туда не пишутся. Не понимаю в чем выгода, хоть убей ... И что значит правильнее? Ну вот вся прога ... Я только в некоторых местах воткнул исключения и не понял, чего они мне тут дают. Говорю, писали, что преимущество в том, что ты не знаешь, какая ошибка, но ведь это можно на месте проверить в том же методе?
| Код | //albums.h #include <iostream> #include <iomanip> #include <string> #include <fstream>
const int MAX=30; using namespace std; /////////////////////////////////////////////////////// class album { private: int year; string name; string artist; string genre; int cd_num; static album* albums[]; static int n; public: static bool is_changed; class Error {}; void enter_data(); void get_data(); static void write();// static void edit_data();//Коррекция альбома static void add();//Добавление альбома static void display_all();//Отображение всех альбомов static void read(); //Чтение из файла };
|
| Код | //albums.cpp #include "albums.h"
/////////////////////////////////////////////////////// ///Статические переменные int album::n; album* album::albums[MAX]; bool album::is_changed=false; /////////////////////////////////////////////////////// ///Отображение всех альбомов void album::display_all() { if (n==0) { cout << "\nThere are no albums\n"; } else { for (int j=0;j<n;j++) { albums[j]->get_data(); } } } /////////////////////////////////////////////////////// ///Добавление альбома void album::add() { is_changed=true; albums[n]=new album; albums[n++]->enter_data(); } /////////////////////////////////////////////////////// ///Ввод данных о компакте с клавиатуры void album::enter_data() { cout << "Enter Artist: "; cin >> artist; cout << "Enter Album: "; cin >> name; cout << "Enter Album`s year "; cin >> year; cout << "Enter Genre: "; cin >> genre; } ///////////////////////////////////////////////////// ///Редактирование альбома void album::edit_data() { int i; cout << "Enter cd number: "; cin >> i; albums[i]->enter_data(); } ///////////////////////////////////////////////////// ///Вывод данных об альбоме void album::get_data() { cout << artist << " - " << name << endl; cout << "Genre: " << genre << endl; cout << "Year: " << year << endl; cout << "Cd num: " << cd_num << endl; } /////////////////////////////////////////////////////// ///Запись в файл данных из ПО void album::write() { ofstream outfile; outfile.open("collection.dat",ios::binary | ios::app); cout << "Writing to file ...\n"; if (!outfile) { throw Error(); } for (int j=0;j<n;j++) { outfile.write((char*)(albums[j]),sizeof(album)); } if (outfile.good()==1) { cout << "Completed"; } is_changed=false; } /////////////////////////////////////////////////////// ///Чтение данных из файла void album::read() { cout << "Reading file ... "; ifstream inf; inf.open("collection.dat",ios::binary); if (!inf) { throw Error(); } else { n=0; while (!inf.eof()) { albums[n]=new album; inf.read((char*)(albums[n]),sizeof(album)); if (inf.eof()) { cout << "Completed"; break; } n++; } } } ///////////////////////////////////////////////////////
|
| Код | //main.cpp #include "albums.h" #include <conio.h>
int main(int argc, char* argv[]) { int choice; do { try { cout << "\nWhat to Do? \n1)Display all albums; \n2)Display album; \n3)Add album; \n4)Edit data \n5)Read from file \n6)Save to file \n7)Exit: "; cin >> choice; switch (choice) { case 1: album::display_all(); break; case 2: cout << "Enter albums number: "; break; case 3: album::add(); break; case 4:album::edit_data(); break; case 5: album::read(); break; case 6: album::write(); break; case 7: break; default:cout << "Incorrect choice. Try again"; break; } } catch (album::Error) { cout << "Error" << endl; } }while(choice!=7); if (album::is_changed==true) { do { char choice; cout << "Yo have made changes to file. Do you want to save them? y/n "; cin >> choice; if (choice=='y' || choice=='Y') { album::write(); return false; } if (choice=='n' || choice=='N') { return false; } }while(true); } _getch(); return 0; }
|
|