![]() ![]() |
|
C++习题与解析(类和对象-08) | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 14:40:48 文章录入:杜斌 责任编辑:杜斌 | |
|
|
解: #include<iostream.h> #include<string.h> class employee { protected: char name[10]; // 姓名 char street[20]; // 街道地址 char city[10]; // 市 char prov[10]; // 省 char post[7]; // 邮政编码 int no; // 记录序号 public: employee(char [],char [],char [],char [],char [],int); void changename(char str[]); void display(); }; employee::employee(char n[],char s[],char c[],char p1[],char p2[],int num) { strcpy(name,n); strcpy(street,s); strcpy(city,c); strcpy(prov,p1); strcpy(post,p2); no=num; } void employee::changename(char n[]) { strcpy(name,n); } void employee::display() { cout<<"输出记录 "<<no<<endl; cout<<" 姓名:"<<name<<endl; cout<<"街道地址:"<<street<<endl; cout<<" 市:"<<city<<endl; cout<<" 省:"<<prov<<endl; cout<<"邮政编码"<<post<<endl; } void main() { employee obj1("王华","中华路15号","武汉市","湖北省","430070",1); employee obj2("杨丽","天津路30号","南京市","江苏市","210020",2); obj1.display(); obj2.display(); } 本程序的执行结果如下: 输出记录1 姓名:王华 街道地址:中华路15号 市:武汉市 省:湖北省 邮政编码:430070 输出记录2 姓名:杨丽 街道地址:天津路30号 市:南京市 省:江苏省 邮政编码:210020
题17.修改前一题的类,将姓名构成类name,其名和姓在该类中为保护数据成员,其构造函数为接收一个指向完整姓名字符串的指针,其display()函数输出姓名。然后将employee类中的姓名成员(字符数组)换成name类对象。编制主函数如下: void main() { employee obj("王华","中华路15号"."武汉市","湖北省","430070",1); obj.display(); obj.changename("王国强"); obj.display(); } 解: #include<iostream.h> #include<string.h> class name { protected: char fname[4]; // 姓 char sname[6]; // 名 public: name(){} name(char *); void changename(char *); void display(); }; class employee { protected: name na; // 姓名 char street[20]; // 街道地址 char city[10]; // 市 char prov[10]; // 省 char post[7]; // 邮政编码 int no; // 记录序号 public: employee(char [],char [],char [],char [],char [],int); void changename(char str[]); void display(); }; name::name(char *p) { int i=0; while(*p!=’ ’) fname[i++]=*p++; fname[i]=’\0’; i=0; p++; while(*p!=’\0’) sname[i++]=*p++; sname[i]=’\0’; } void name::changename(char *p) { int i=0; while(*p!=’ ’) fname[i++]=*p++; fname[i]=’\0’; i=0; p++; while(*p!=’\0’) sname[i++]=*p++; sname[i]=’\0’; } void name::display() { cout<<fname<<sname; } employee::employee(char n[],char s[],char c[],char p1[],char p2[],int num) { changename(n); strcpy(street,s); strcpy(city,c); strcpy(prov,p1); strcpy(post,p2); no=num; } void employee::changename(char n[]) { na.changename(n); } void employee::display() { cout<<post<<"\n\n"; cout<<"\t"<<prov<<city<<street<<"\n\n"; cout<<"\t\t"; na.display(); cout<<"(收)"<<"\n\n"; } void main() { employee obj("王华","中华路15号","武汉市","湖北省","430070",1); obj.display(); obj.changename("王国强"); obj.display(); } 本程序的执行结果如下: 430070 湖北省武汉市中华路15号 王 华(收) 430070 湖北省武汉市中华路15号 王国强(收)
题18.编写一个程序,在已设置好若干个用户名/口令后,通过输入用户名,查找对应的口令,连续执行这一过程直到用户输入结束标记(“end“)为止。 解: 设计一个User类,数据成员有User和pass两个字符数组,存储用户名和口令,另有一个构造函数和getuaer()、getpass()两个成员函数,用于获取用户名和口令。在main()中设计一个对象数组ua,当用户输入一个用户名后,在ua中查找,找到后输出对应的口令,找不到时输出相应的提示信息。 本题程序如下: #include<iostream.h> #include<string.h> class User { char user[10]; char pass[7]; public: User(char [],char []); char *getuser(); char *getpass(); }; User::User(char u[],char p[]) { strcpy(user,u); strcpy(pass,p); } char *User::getuser() { return user; } char *User::getpass() { return pass; } void main() { User ua[]={User("Li","123456"),User("wang","654321"), User("Chen","213412"),User("Xu","878616"), User("Ma","876574"),User("Song","666666")}; char name[10]; while(1) { cout<<"输入用户名:"; cin>>name; if(strcmp(name,"end")==0) break; for(int i=0;i<6;i++) if(strcmp(name,ua[i].getuser())==0) { cout<<" 用户口令:"<<ua[i].getpass()<<endl; break; } if(i==6) cout<<" 用户名不存在"<<endl; } } 本程序的执行结果如下: 输入用户名: Li 用户口令:123456 输入用户名:Wang 用户口令:654321 输入用户名:He 用户名不存在 输入用户名:end |
|
![]() ![]() |