Почему программа сохраняет входные данные на неоднозначном языке и как это исправить?
Я создал банковскую систему управления на языке C++, используя Dev C++. Программа работает без каких-либо ошибок; она сохраняет всю предоставленную ей информацию в файле с именем record.txt. Он также отображает информацию, сохраненную в файле. Единственная проблема заключается в том, что когда я вручную открываю файл record.txt; я нахожу все данные в двусмысленном языке.
//*************************************************************** // HEADER FILES USED IN PROJECT //**************************************************************** #include<iostream> #include<fstream> #include<cctype> #include<iomanip> #include<time.h> using namespace std; //*************************************************************** // CLASS USED IN PROJECT //**************************************************************** class account { int acno; char name[50]; int deposit; char type; public: void create_account(); //function to get data from user void show_account() const; //function to show data on screen void modify(); //function to add new data void dep(int); void draw(int); void report() const; int retacno() const; //function to return account number int retdeposit() const; //function to return balance amount char rettype() const; //function to return type of account }; //class ends here void account::create_account() { cout<<"Account Number: "; cin>>acno; cout<<"\nAccount Holder's Name: "; cin.ignore(); cin.getline(name,50); cout <<"\nType Of Account (C for Current and S for Saving): " ; cin >> type; type=toupper(type); while (type != 'C' && type != 'S' && type!='c' && type!='s') { cout<<"\n\nInvalid Input!"; cout<<"\nKindly Type (C for Current and S for Saving): "; cin>>type; type=toupper(type); } while (!((type=='C' || type=='c') && deposit>=1000) && !((type=='S' || type=='s') && deposit>=500)) { cout<<"\nOpening Amount >=1000 for Current and >=500 for Saving: "; cin>>deposit; if((type=='C' || type=='c') && deposit>=1000) { cout<<"\n\n\nAccount Created.."; } else if((type=='S' || type=='s') && deposit>=500) { cout<<"\n\n\nAccount Created.."; } else { cout<<"\n\nNot Valid Opening Amount!"; } } cout<<"\n\n"; cin.get(); } void account::show_account() const { cout<<"\nAccount No. : "<<acno; cout<<"\nAccount Holder Name : "; cout<<name; cout<<"\nType of Account : "<<type; cout<<"\nBalance amount : "<<deposit; } void account::modify() { cout<<"\nAccount No. : "<<acno; cout<<"\nAccount Holder's Name: "; cin.ignore(); cin.getline(name,50); cout <<"\nType Of Account (C for Current and S for Saving): " ; cin >> type; type=toupper(type); while (type != 'C' && type != 'S' && type!='c' && type!='s') { cout<<"\n\nInvalid Input!"; cout<<"\nKindly Type (C for Current and S for Saving): "; cin>>type; type=toupper(type); } while (!((type=='C' || type=='c') && deposit>=1000) && !((type=='S' || type=='s') && deposit>=500)) { cout<<"\nOpening Amount >=1000 for Current and >=500 for Saving: "; cin>>deposit; if((type=='C' || type=='c') && deposit>=1000) { cout<<"\n\n\nAccount Created.."; } else if((type=='S' || type=='s') && deposit>=500) { cout<<"\n\n\nAccount Created.."; } else { cout<<"\n\nNot Valid Opening Amount!"; } } } void account::dep(int x) { deposit+=x; } void account::draw(int x) { deposit-=x; } void account::report() const { cout<<setw(2)<<acno<<setw(13)<<name<<setw(15)<<type<<setw(12)<<deposit<<endl; } int account::retacno() const { return acno; } int account::retdeposit() const { return deposit; } char account::rettype() const { return type; } //*************************************************************** // function declaration //**************************************************************** void write_account(); void display_sp(int); void modify_account(int); //function to modify record of file void delete_account(int); //function to delete record of file void display_all(); void deposit_withdraw(int, int); void intro(); //introductory screen function int main() { srand(time(NULL)); char ch; int num; intro(); do { system("cls"); cout<<"\n\n\n\tMAIN MENU"; cout<<"\n\n\t01. NEW ACCOUNT"; cout<<"\n\n\t02. DEPOSIT AMOUNT"; cout<<"\n\n\t03. WITHDRAW AMOUNT"; cout<<"\n\n\t04. BALANCE ENQUIRY"; cout<<"\n\n\t05. ALL ACCOUNT HOLDER LIST"; cout<<"\n\n\t06. CLOSE AN ACCOUNT"; cout<<"\n\n\t07. MODIFY AN ACCOUNT"; cout<<"\n\n\t08. EXIT"; cout<<"\n\n\tSelect Your Option (1-8) "; cin>>ch; system("cls"); switch(ch) { case '1': write_account(); break; case '2': cout<<"\n\n\tEnter The account No. : "; cin>>num; deposit_withdraw(num, 1); break; case '3': cout<<"\n\n\tEnter The account No. : "; cin>>num; deposit_withdraw(num, 2); break; case '4': cout<<"\n\n\tEnter The account No. : "; cin>>num; display_sp(num); break; case '5': display_all(); break; case '6': cout<<"\n\n\tEnter The account No. : "; cin>>num; delete_account(num); break; case '7': cout<<"\n\n\tEnter The account No. : "; cin>>num; modify_account(num); break; case '8': if (rand()%2) { cout<<"\n\n\tThanks For Using Bank Managemnt System!"; } else { cout<<"\n\n\tThanks, We Are Happy To Have You As Our Customer!"; } break; default :cout<<"\a"; } cin.ignore(); cin.get(); }while(ch!='8'); return 0; } void write_account() { account ac; ofstream outFile; outFile.open("record.txt",ios::binary|ios::app); ac.create_account(); outFile.write(reinterpret_cast<char *> (&ac), sizeof(account)); outFile.close(); } void display_sp(int n) { account ac; bool flag=false; ifstream inFile; inFile.open("record.txt",ios::binary); if(!inFile) { cout<<"File could not be open !! Press any Key..."; return; } cout<<"\nBALANCE DETAILS\n"; while(inFile.read(reinterpret_cast<char *> (&ac), sizeof(account))) { if(ac.retacno()==n) { ac.show_account(); cout<<"\n\n"; flag=true; } } inFile.close(); if(flag==false) cout<<"\n\nAccount number does not exist"; } void modify_account(int n) { bool found=false; account ac; fstream File; File.open("record.txt",ios::binary|ios::in|ios::out); if(!File) { cout<<"File could not be open !! Press any Key..."; return; } while(!File.eof() && found==false) { File.read(reinterpret_cast<char *> (&ac), sizeof(account)); if(ac.retacno()==n) { ac.show_account(); cout<<"\n\nEnter The New Details of account"<<endl; ac.modify(); int pos=(-1)*static_cast<int>(sizeof(account)); File.seekp(pos,ios::cur); File.write(reinterpret_cast<char *> (&ac), sizeof(account)); cout<<"\n\n\t Record Updated"; found=true; } } File.close(); if(found==false) cout<<"\n\n Record Not Found "; } void delete_account(int n) { account ac; ifstream inFile; ofstream outFile; inFile.open("record.txt",ios::binary); if(!inFile) { cout<<"File could not be open !! Press any Key..."; return; } outFile.open("temp.txt",ios::binary); inFile.seekg(0,ios::beg); while(inFile.read(reinterpret_cast<char *> (&ac), sizeof(account))) { if(ac.retacno()!=n) { outFile.write(reinterpret_cast<char *> (&ac), sizeof(account)); } } inFile.close(); outFile.close(); remove("record.txt"); rename("temp.txt","record.txt"); cout<<"\n\n\tRecord Deleted .."; } void display_all() { account ac; ifstream inFile; inFile.open("record.txt",ios::binary); if(!inFile) { cout<<"File could not be open !! Press any Key..."; return; } cout<<"\n\n\t\tACCOUNT HOLDER LIST\n\n"; cout<<"====================================================\n"; cout<<"A/c no. NAME Type Balance\n"; cout<<"====================================================\n"; while(inFile.read(reinterpret_cast<char *> (&ac), sizeof(account))) { ac.report(); } inFile.close(); } void deposit_withdraw(int n, int option) { int amt; bool found=false; account ac; fstream File; File.open("record.txt", ios::binary|ios::in|ios::out); if(!File) { cout<<"File could not be open !! Press any Key..."; return; } while(!File.eof() && found==false) { File.read(reinterpret_cast<char *> (&ac), sizeof(account)); if(ac.retacno()==n) { ac.show_account(); if(option==1) { cout<<"\n\n\tTO DEPOSITE AMOUNT "; cout<<"\n\nEnter The amount to be deposited: "; cin>>amt; ac.dep(amt); } if(option==2) { cout<<"\n\n\tTO WITHDRAW AMOUNT "; cout<<"\n\nEnter The amount to be withdraw"; cin>>amt; int bal=ac.retdeposit()-amt; if((bal<500 && ac.rettype()=='S') || (bal<1000 && ac.rettype()=='C')) cout<<"Insufficience balance"; else ac.draw(amt); } int pos=(-1)*static_cast<int>(sizeof(ac)); File.seekp(pos,ios::cur); File.write(reinterpret_cast<char *> (&ac), sizeof(account)); cout<<"\n\n\t Record Updated"; found=true; } } File.close(); if(found==false) cout<<"\n\n Record Not Found "; } void intro() { cout<<"\n\n\t\t\t CSP GROUP PROJECT\n"; cout<<"\t\t****************************************\n"; cout<<"\n\n\n\n\n\t\t****************************************\n"; cout<<"\t\t\tBANK MANAGEMNET SYSTEM\n"; cout<<"\t\t****************************************\n\n\n\n"; cout << "\t\t Students' Name: \n"<< endl; cout<< " \t\t Instructor's Name: Sir Usman\n"<< endl; cout << "\t\t College's Name: NUST-PNEC\n"<< endl; cin.get(); }
Что я уже пробовал:
Я попытался удалить все бинарные команды ios::, но все равно, когда я вручную открываю файл, я получаю текст, написанный на нечеловеческом языке.