实验5

1.

#include <iostream>
#include <vector>
#include <string>
using namespace std;
// 函数声明
void output1(vector<string> &);
void output2(vector<string> &);

int main()
{
vector<string>likes, dislikes; // 创建vector<string>对象likes和dislikes

// 为vector<string>数组对象likes添加元素值 ( favorite book, music, film, paintings,anime,sport,sportsman,etc)
likes.push_back("《刀锋》") ;
likes.push_back("烟火里的尘埃");
likes.push_back("《第九区》");
likes.push_back("愚公移山");
likes.push_back("《死神》");
likes.push_back("跑步");
likes.push_back("马龙");

cout << "-----I like these-----" << endl;
// 调用子函数输出vector<string>数组对象likes的元素值
output1(likes);


// 为vector<string>数组对象dislikes添加元素值
dislikes.push_back("many") ;
dislikes.push_back("many");
dislikes.push_back("old 3Dfilm");
dislikes.push_back("many");
dislikes.push_back("many");
dislikes.push_back("many");
dislikes.push_back("many");

cout << "-----I dislike these-----" << endl;
// 调用子函数输出vector<string>数组对象dislikes的元素值
output1(dislikes);


// 交换vector<string>对象likes和dislikes的元素值
for(int i=0;i<likes.size() ;i++){
string m;
m=likes[i];likes[i]=dislikes[i];dislikes[i]=m;
}


cout << "-----I likes these-----" << endl;
// 调用子函数输出vector<string>数组对象likes的元素值
output1(likes);

cout << "-----I dislikes these-----" << endl;
// 调用子函数输出vector<string>数组对象dislikes的元素值
output1(dislikes);


return 0;
}


// 函数实现
// 以下标方式输出vector<string>数组对象v的元素值
void output1(vector<string> &v) {
for(int i=0;i<v.size() ;i++){
cout<<v[i]<<" ";
}
cout<<endl;
}

// 函数实现
// 以迭代器方式输出vector<string>数组对象v的元素值

void output2(vector<string> &v)
{

}

2.

6-17
操作含义是对指针指向的地址赋值,但此时指针并未指向任何地址,如果这样做,可能导致指针对一些未知地址强行赋值破坏程序。这种情况要么对指针先赋予地址p=&9,要么把指针声明成空指针int *p=0/*p=NULL。
6-18
未用delete将new分配的内存释放,此类操作过度会导致内存泄露,所以应该在return *p前加上delete p.

3.

期中和动态没来及写。。

2018.5.26不好意思,之前因为时间紧迫,到今天只做了期中2,下面是编码:(写的时候忘了,dice就是user.)

//dice.h
#ifndef _DICE_H_
#define _DICE_H_
#include<string>
class Dice{
private:
static int CurrentID;
int id;
std::string name,password="111111";
public:
Dice(std::string aa):name(aa){
CurrentID++;
id=CurrentID;
}
void change_password();
void show();
};
#endif

 

//dice.cpp
#include"dice.h"
#include<iostream>
#include<string>
using namespace std;
int Dice::CurrentID=999;
void Dice::change_password(){
cout<<"OLD PASSWORD: "<<endl;
int i=3;
string c;
cin>>c;
while(c!=password&&i>=1){
cout<<"TRY AGAIN: "<<endl;
string ccc;
cin>>ccc;
c=ccc;
i--;
}
if(i>=1){
cout<<"NEW PASSWORD: "<<endl;
string cccc;
cin>>cccc;
password=cccc;
}
else{
cout<<"操作频繁,TRY AGAIN LATER."<<endl;
}
}
void Dice::show(){
cout<<"OLD PASSWORD: "<<endl;
int i=3;
string c;
cin>>c;
while(c!=password&&i>=1){
cout<<"TRY AGAIN: "<<endl;
string ccc;
cin>>ccc;
c=ccc;
i--;
}
if(i>=1){
cout<<"name:"<<name<<" "<<"id:"<<id<<" "<<"SUMid:"<<CurrentID<<" "<<"password:"<<password<<endl;
}
else{
cout<<"操作频繁,TRY AGAIN LATER."<<endl;
}
}

 

//main.cpp
#include"dice.h"
#include<iostream>
#include<string>
#include<vector>
using namespace std;

int main(){
vector<Dice>a;
vector<string>ACCOUT;
static int n=0;
cout<<"1.register 2.log in 3.quit: "<<endl;
while(n<3){
int x;cin>>x;n=x;
switch(x){
case 1:{
cout<<"new accout: ";
string m;
cin>>m;
a.push_back(m);
ACCOUT.push_back(m);
break;
}
case 2:{
cout<<"accout registered: ";
int aa=-10;
string m;
cin>>m;
for(int i=0;i<ACCOUT.size();i++){
if(m==ACCOUT[i]) aa=i;
}
if(aa>=0){
int l=0;
while(l<3){
cout<<"select: 1.change PW 2.type infor 3.log out"<<endl;
int p;cin>>p;l=p;
if(l==1)a[aa].change_password();
if(l==2)a[aa].show();
}
break;
}
else{
cout<<"wrong accout or no register"<<endl;
break;
}
}
default: break;
}
}
return 0;
}

运行结果:

自我解析:用一个类来解决记录数据的问题,此编程题可以满足多次注册,登录后才能修改密码和打印个人信息,然后退出(截图最后两个3哈哈,也许你看不懂,第一个是log out第二个是quit)。用两个vector来实现输入名字后检索对应信息。个人喜欢从简,在不缺必要内容情况下,字打印越少越看得清。

缺点:1,main函数过累赘,可以再设一个类或函数解决重复操作的问题 2,源代码中,打印函数,是类的公共成员,,可能会泄露隐私。

posted @ 2018-05-23 23:19  鳄鱼加冕  阅读(115)  评论(0编辑  收藏  举报