创建一个名为Person的类,该类包含以下数据:Lastname、Eirstname、Address、City、State、Zip、Phone
创建第二个名为Customer的类,该类继承Person并包含以下数据:
o可以设置的唯一字符串值。如果在创建客户时未提供,则应自动生成。)
o电子邮件地址
List(一个布尔变量,指示它们是否是邮件列表的成员)
所有的顾客都是人,但人不一定是顾客。
为这两个类编写所有适当的构造函数、访问器和mutator函数。
所有类都必须有一个空构造函数、各种各样的构造函数排列(根据需要)以及任何必要的析构函数。
创建一个名为Customer的文本文件。txt,文件的每一行都包含
个人客户的信息。各个字段应该用逗号分隔,并且您应该用至少20条记录填充文档。
使用文件流从文件中读取数据,将每行的数据存储到Customer类的单个实例中。
存储在动态分配的数组中创建的客户类的每个实例。换句话说,您应该有一个动态分配的数组,其中包含Customer类的所有实例。客户中的每一行数据都应该有一个客户类实例。txt文件。
将数组传递给函数,以便在格式良好的表中打印出所有客户信息。
Customer.txt内容如下
1000000001,1,Zhang,San,Xingfudajie 4-21,New York,Youta,aaa,123456789
1000000002,1,Zhou,San,Xingfudajie 5-21,New York,Youta,aaa,223456789
1000000003,1,Wu,San,Xingfudajie 6-21,New York,Youta,aaa,323456789
1000000004,1,Zheng,San,Xingfudajie 7-21,New York,Youta,aaa,423456789
1000000005,1,Wang,San,Xingfudajie 8-21,New York,Youta,aaa,523456789
1000000006,1,Liu,San,Xingfudajie 4-44,New York,Youta,aaa,623456789
1000000007,1,Tang,San,Xingfudajie 4-23,New York,Youta,aaa,723456789
1000000008,1,Han,San,Xingfudajie 4-18,New York,Youta,aaa,823456789
1000000009,1,Dong,San,Xingfudajie 3-22,New York,Youta,aaa,923456789
1000000010,1,Gao,Yi,Xingfudajie 7-21,New York,Youta,aaa,103456789
1000000011,1,Gao,Yang,Xingfudajie 7-21,New York,Youta,aaa,103456789
1000000012,1,Gao,Hao,Xingfudajie 7-21,New York,Youta,aaa,103456789
1000000013,1,Gao,Tian,Xingfudajie 7-21,New York,Youta,aaa,103456789
1000000014,1,Gao,Xiang,Xingfudajie 7-21,New York,Youta,aaa,103456789
1000000015,1,Gao,Mei,Xingfudajie 7-21,New York,Youta,aaa,103456789
1000000016,1,Gao,Li,Xingfudajie 7-21,New York,Youta,aaa,103456789
1000000017,1,Gao,Huan,Xingfudajie 7-21,New York,Youta,aaa,103456789
1000000018,1,Gao,Juan,Xingfudajie 7-21,New York,Youta,aaa,103456789
1000000019,1,Gao,Ya,Xingfudajie 7-21,New York,Youta,aaa,103456789
1000000020,1,Gao,Song,Xingfudajie 7-21,New York,Youta,aaa,103456789
代码如下:
#include <iostream>
#include <string>
#include <fstream>
#include <time.h>
using namespace std;
class People
{
private:
string Lastname;
string Firstname;
string Address;
string City;
string State;
string Zip;
string Phone;
public:
People(){}
People(string ln,string fn,string addr, string ct,string state,string zip,string phone)
{
Lastname = ln;
Firstname = fn;
Address = addr;
City = ct;
State = state;
Zip = zip;
Phone = phone;
}
~People(){}
//setter
void setLastName(string ln){Lastname = ln;}
void setFirstName(string fn){Firstname = fn;}
void setAddress(string a){Address = a;}
void setCity(string ct){City = ct;}
void setState(string st){State = st;}
void setZip(string zip){Zip = zip;}
void setPhone(string ph){Phone = ph;}
//getter
string getLastName(){return Lastname;}
string getFirstName(){return Firstname;}
string getAddress(){return Address;}
string getCity(){return City;}
string getState(){return State;}
string getZip(){return Zip;}
string getPhone(){return Phone;}
};
class Customer : public People
{
private:
string CustomerNmb;
bool MailList;
public:
Customer(){}
Customer(string ln,string fn,string addr, string ct,string state,string zip,string phone,string nmb,bool b):People(ln,fn,addr,ct,state,zip,phone)
{
CustomerNmb = nmb;
MailList = b;
}
~Customer(){}
//setter
void setCustomNmb(string nmb){CustomerNmb = nmb;}
void setMailList(bool b){MailList = b;}
//getter
string getCustomNmb()
{
if (CustomerNmb.empty())
{
//自动生成一个Custom Number
char buf[11]={0};
srand((unsigned int)time(0));
for (int i = 0;i<10;i++)
{
buf[i] = '0'+ rand()%10;
}
CustomerNmb = buf;
}
return CustomerNmb;
}
bool getMailist(){return MailList;}
friend istream & operator>>(istream &is,Customer &c)
{
char buf[200] = {0};
is.getline(buf,200);//读入一行数据
string s = buf;
int startpos = s.find(",",0);
if(startpos < 0) return is;
//第一个元素Custom nmb
c.setCustomNmb(s.substr(0,startpos));
//第二个元素是否在列表中
int endpos = s.find(",",startpos+1);
if(endpos < 0) return is;
startpos +=1;
string blist = s.substr(startpos,endpos - startpos);
startpos = endpos;
if (blist.compare("1")==0)
c.setMailList(true);
else
c.setMailList(false);
//第三个元素Lastname
endpos = s.find(",",startpos+1);
if(endpos < 0) return is;
startpos +=1;
c.setLastName(s.substr(startpos,endpos - startpos));
startpos = endpos;
//第四个元素
endpos = s.find(",",startpos+1);
if(endpos < 0) return is;
startpos +=1;
c.setFirstName(s.substr(startpos,endpos - startpos));
startpos = endpos;
//第五个元素address
endpos = s.find(",",startpos+1);
if(endpos < 0) return is;
startpos +=1;
c.setAddress(s.substr(startpos,endpos - startpos));
startpos = endpos;
//第六个元素city
endpos = s.find(",",startpos+1);
if(endpos < 0) return is;
startpos +=1;
c.setCity(s.substr(startpos,endpos - startpos));
startpos = endpos;
//第七个元素state
endpos = s.find(",",startpos+1);
if(endpos < 0) return is;
c.setState( s.substr(startpos,endpos - startpos));
startpos = endpos;
//第八个元素zip
endpos = s.find(",",startpos+1);
if(endpos < 0) return is;
startpos +=1;
c.setZip(s.substr(startpos,endpos - startpos));
startpos = endpos;
//第9个元素phone
startpos +=1;
endpos = s.length();
if(endpos < 0) return is;
c.setPhone(s.substr(startpos,endpos - startpos));
return is;
}
void display()
{
cout << CustomerNmb << "," << MailList << "," << getLastName() <<","<<getFirstName()<< ",";
cout << getAddress()<<"," << getCity() << "," << getState()<<"," << getZip() << "," << getPhone() << endl;
}
};
//读文件
Customer* ReadFile(const char* name,int &nmb)
{
int size= 40;
nmb = 0;
Customer* a = new Customer[size]; //申请40个空间
ifstream is(name);
if (!is.is_open())
{
cout << "文件打开失败" << endl;
return 0;
}
while(!is.eof())
{
Customer cus;
is >> cus;
if(nmb >= size)
{
size = size * 2;
Customer* pt = new Customer[size];
for (int i=0;i< nmb;i++)
{
pt[i] = a[i];
}
delete[] a;
a = pt;
}
a[nmb++] = cus;
}
is.close();
return a;
}
int main()
{
int nmb = 0;
Customer* pp = 0;
pp = ReadFile("Customer.txt",nmb); //读取文件
for (int i = 0; i< nmb;i++)
{
pp[i].display();
}
delete[] pp;
pp = 0;
system("pause");
return 0;
}
mutator函数是干啥的
各种各样的构造函数排列---排列啥意思?
#include <stdio.h>
#include <stdlib.h>
#include<String>
#include <time.h>
#include <iostream>
using namespace std;
typedef struct _PERSON_DATA
{
string Lastname;
string Firstname;
string Address;
string City;
string State;
string Zip;
string Phone;
}PERSON_DATA;
static int pnum = 0;
class Person
{
private:
PERSON_DATA data;
public:
Person() {}
Person(const PERSON_DATA &d)
{
data = d;
}
PERSON_DATA getData() {return data;};
void setData(PERSON_DATA d) {data = d;}
void print() {cout<<data.Lastname<<"\t"<<data.Firstname<<"\t"<<data.Address<<"\t"<<data.City<<"\t"<<data.State<<"\t"<<data.Zip<<"\t"<<data.Phone<<"\t";}
};
class Customer : public Person
{
private:
string num;
string mail;
int list;
public:
Customer() {char a[10];itoa(pnum,a,10);pnum++;num = a;}
Customer(string n,string m,int l,PERSON_DATA data) : Person(data)
{
num = n;
mail = m;
list = l;
}
string getnum() {return num;}
string getmail() {return mail;}
int getlist() {return list;}
void setnum(string n) {num = n;}
void setmail(string m) {mail = m;}
void setlist(int l) {list = l;}
void print() {Person::print();cout<<num<<"\t"<<mail<<"\t"<<list<<endl;}
};
Customer *pC = NULL;
int cnum = 0;
void print(Customer *p,int n)
{
cout<<"Lastname\tFirstname\tAddress\tCity\tState\tZip\tPhone\tnum\tmail\tlist"<<endl;
for(int i=0;i<n;i++)
p[i].print();
}
int main()
{
pC = new Customer[1000];
FILE *fp;
fp = fopen("Customer.txt","r");
char buf[1000] = {0};
while (fgets(buf,1000,fp))
{
PERSON_DATA data;
string num,mail;
int list;
sscanf(buf,"%s %s %s %s %s %s %s %s %s %d",data.Lastname,data.Firstname,data.Address,data.City,data.State,data.Zip,data.Phone,num,mail,&list);
pC[cnum].setData(data);
pC[cnum].setnum(num);
pC[cnum].setmail(mail);
pC[cnum].setlist(list);
cnum++;
}
fclose(fp);
print(pC,cnum);
}