Я хотел бы поблагодарить вас за вашу большую поддержку. Я должен признать, что с ++ это весело и довольно удивительно, но иногда это становится болью в голове. Я пытался решить эту домашнюю работу ... она почти закончена, но я испытываю затруднения, пытаясь понять, как работать с двоичными файлами.
вопрос следующий:
Вы были наняты, чтобы помочь запрограммировать новую функцию телефона "Ma Bell"
Функция позволяет пользователям с «ПК» получить диск телефона
номера в дополнение к телефонной книге. Ваша задача - написать
Программа, которая позволит использовать телефонную информацию. Вы должны
разрешить добавление и просмотр информации о номере телефона.
Программа должна уметь:
1. Добавить людей в список телефонов
2. Просмотр всех людей в списке
3. Просмотр на основе только фамилии
Вы можете сделать следующие предположения:
1. There are no more than 100 phone numbers
2. No name is longer than 50 characters.
3. Only one telephone number per person.
4. The address should be broken into only
street # or PO Box
street name
zip code
код, который я написал, следующий:
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
class phonebook
{
private: char fname[25];
char lname[25];
char tel[10];
int pobox;
char street[20];
int zipcode;
int id;
public: phonebook(char[]=" ",char[]=" ",char[]=" ",int=0,char[]=" ",int=0,int=0);
void setfname(char*);
void setlname(char*);
void settel(char*);
char* getfname();
char* getlname();
char* gettel();
void setpobox(int);
void setstreet(char*);
void setzipcode(int);
int getpobox();
char* getstreet();
int getzipcode();
void setid(int);
int getid();
};
phonebook::phonebook(char* fn,char* ln, char* t,int p,char* s, int z,int i)
{
setfname(fn);
setlname(ln);
settel(t);
setpobox(p);
setstreet(s);
setzipcode(z);
setid(i);
}
void phonebook::setfname(char* fn){strcpy(fname,fn);}
void phonebook::setlname(char* ln){strcpy(lname,ln);}
void phonebook::settel(char* t){strcpy(tel,t);}
char* phonebook::getfname(){return fname;}
char* phonebook::getlname(){return lname;}
char* phonebook::gettel(){return tel;}
void phonebook::setpobox(int p){pobox=p;}
void phonebook::setstreet(char* s){strcpy(street,s);}
void phonebook::setzipcode(int z){zipcode=z;}
int phonebook::getpobox(){return pobox;}
char* phonebook::getstreet(){return street;}
int phonebook::getzipcode(){return zipcode;}
void phonebook::setid(int i){id=i;}
int phonebook::getid(){return id;}
int main()
{
phonebook pb;
fstream outfile("phonebook.dat",ios::in | ios::binary);
if(!outfile){cerr<<"file could not be created!";exit(1);}
//for(int i=0;i<100;i++)
//outfile.write(reinterpret_cast<const char*>(&pb),sizeof(phonebook));
char FN[25];
char LN[25];
char T[10];
int P;
char S[20];
int Z;
int x;
int id;
cout<<"Choose one of the following: "<<endl;
cout<<"1. Add people to the telephone list"<<endl;
cout<<"2. View all people in the list"<<endl;
cout<<"3. View based on just the last name"<<endl;
cin>>x;
switch(x)
{
case 1:
cout<<"Enter record number, first name, last name, telephone, pobox, street, zipcode: "<<endl;
cin>>id>>FN>>LN>>T>>P>>S>>Z;
pb.setid(id);
pb.setfname(FN);
pb.setlname(LN);
pb.settel(T);
pb.setpobox(P);
pb.setstreet(S);
pb.setzipcode(Z);
outfile.seekp((id-1)*sizeof(phonebook));
outfile.write(reinterpret_cast<const char*>(&pb),sizeof(pb));break;
case 2:
for(int i=0;i<100;i++){
outfile.seekg((i-1)*sizeof(phonebook));
cout<<pb.getfname()<<" "<<pb.getlname()<<" "<<pb.gettel()<<" "<<pb.getpobox()<<" "<<pb.getstreet()<<" "<<pb.getzipcode()<<endl;}break;
case 3:
cout<<"Enter last name: ";
cin>>LN;
outfile.seekp((id-1)*sizeof(phonebook));
outfile.read(reinterpret_cast<char*>(&pb),sizeof(pb));
if((strcmp(pb.getlname(),LN)==0))
cout<<pb.getfname()<<" "<<pb.getlname()<<" "<<pb.gettel()<<" "<<pb.getpobox()<<" "<<pb.getstreet()<<" "<<pb.getzipcode()<<endl;
else cout<<"name not found!"<<endl;break;
}
system("pause");
return 0;
}
когда я хочу отобразить информацию, которую я добавил в двоичный файл, она не читается Я получаю только нули. также я хотел бы знать, как сделать оператор switch, чтобы спросить меня, хочу ли я добавить больше телефонных номеров или как цикл для случаев переключения.
Кроме того, как я могу сделать программу для поиска имени внутри двоичного файла. Я старался изо всех сил, но я просто не могу заставить его работать.