Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Работа с файлами


Автор: maksim112610 31.5.2019, 01:47
Парни пожалуйста переделайте код, чтобы он мог работать без cin,а всю информацию считывал из файлов.
Код

#include <conio.h> 
#include <string.h> 
#include <iostream> 
using namespace std;
struct date // дата 
{int day; 
int year; }; 
//======= class File ================= 
 
class File {
    char name[30]; //private 
    date t; 
    int obrash;
    int razmer;
public: 
    File(); 
    char *getalf();
    void setalf(char *);
    int getrazmer(); 
    int getobrash(); 
    void show(); 
};
 
File::File() {
    cout<<"Vvedite imya faila: "; cin>>name; 
    cout<<"Vvedite datu obrasheniya\n"; 
    cout<<"Den: "; cin>>t.day; 
    cout<<"God: "; cin>>t.year; 
    cout<<"Vvedite razmer: "; cin>>razmer; 
    cout<<"Vvedite kol-vo obrasheniy: "; cin>>obrash; 
    cout<<"\n";
}
 
void File::show() { 
    cout<<"Imya faila: "<<name<<endl; 
    cout<<"Data obrasheniya: "<<t.day<<'.'<<t.year<<endl; 
    cout<<"Razmer: "<<razmer<<endl; 
    cout<<"Kol-vo obrasheniy: "<<obrash<<endl; 
    cout<<"\n";
}
 
char *File::getalf() { return name; }
int File::getrazmer() { return razmer; } 
int File::getobrash() { return obrash; }
void File::setalf(char *inp_name) {
    strcpy(name, inp_name);
}
//список файлов по алфавиту
void spisalf(File spis[],int n) {
    cout<<"Spisok failov v alfavitnom poryadke:";  
    for(int i = 0; i < n; i++) {
        for(int j = n - 1; j > i; j--) {
            if(strcmp(spis[j].getalf(), spis[j - 1].getalf()) < 0) {
                char name[30];
                strcpy(name, spis[j].getalf());
                spis[j].setalf(spis[j - 1].getalf());
                spis[j - 1].setalf(name);
            }
        }
    }
}
 
//список файлов заданного размера
void spisrazmer(File spis[],int n) {
    int razm; 
    cout<<"Vvedite razmer: ";
    cin>>razm; 
    for(int i=0;i<n;i++) 
    if(spis[i].getrazmer() > razm)
        spis[i].show(); 

 
//список файлов по дате обращения
void spisobrash(File spis[],int n) {
    int obr; 
    cout<<"Vvedite kol-vo obrasheniy: "; cin>>obr; 
    for(int i=0;i<n;i++) 
        if (spis[i].getobrash()> obr)
            spis[i].show(); 

 
//========= main ================ 
int main() {
    File *spis; 
    int n; 
    cout<<"Vvedite kol-vo failov: ";
    cin>>n; 
    spis = new File [n]; 
 
    spisalf(spis,n);
    for(int i=0;i<n;i++) {
        cout<<"=============================="<<endl; 
        spis[i].show(); 
    } 
    //spisrazmer(spis,n); 
    //spisobrash(spis,n); 
    delete [] spis; 
    cout<<"Dlya prodoljeniya najmite lubyu knopku" ;
    while(!kbhit()); 
}

Автор: kapbepucm 6.6.2019, 11:32
Цитата(maksim112610 @  31.5.2019,  01:47 Найти цитируемый пост)
чтобы он мог работать без cin,а всю информацию считывал из файлов
Заменить 
Код
cin>>t.day;
на
Код
setDay(&t.day);
,где setDay чтото подобное на:
Код
void setDay(int* day)
{
  ifstream file("example.bin", ios::binary);
  if (file.is_open())
  {
    file.read((char*)day, sizeof(int));
    file.close();
  }
}
Ну и по аналогии доделать всё остальное.

Автор: bsa 6.6.2019, 12:18
maksim112610, создаешь переменную типа std::fstream, например: std::fstream file. Открываешь текстовый файл с помощью этого объекта. Все cin меняешь на file. В файле все данные должны быть на отдельных строках.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)