检查用户有效输入并与文本文件进行比较

时间:2015-04-19 07:28:14

标签: c++

我有一个系统,它会显示一个菜单选项供用户选择并执行某些操作。目前我在功能changepassword上遇到了问题。

当用户选择更改密码的选项时,它将读入我的文本文件并显示存储在文本文件中的所有用户。

然后提示用户输入他们想要编辑的用户ID。我能够编辑记录并存储回文本文件。但是当用户最初输入在文本文件中找不到的用户ID时,我遇到了一个问题。系统应显示错误消息并返回菜单栏。

当用户输入无效的用户ID时,removeuser()功能中的检查没问题,系统将返回菜单栏,但不会返回changepassword()

//主要功能

int main()
{
switch(option)

case 1:
.....
break;
case 2:
....
break;
case 3:
changepassword();
break;
default break;


}

//编辑用户信息

void changepassword()
{

printer.printcpheader();
displayuserid(); //display list of user ID to select
string id;
cout<<"     enter Cashier ID to edit :"; //getting input
cin>>id;
cout<<endl;

int i = getuserindex(id);
displayuserinfobyid(i); //display selected user ID information

string cashierID;
string password;


cout<<"";
getline(cin, cashierID);
cout<<"     Cashier ID         :";
getline(cin, cashierID);


cout<<"     Password      :";
getline(cin, password);


//storing to array
users[i].cashierID = cashierID;
users[i].pw = Decrypt(password);

writeUserDatabase(); 

    cout<<"\E[1;32m"<<cashierID<<" info edited !!!\E      [0m"<<endl;
}

//将值存储到txt文件

void writeUserDatabase()
{
ofstream outfile;
outfile.open ("userdatabase.txt");


if (!outfile)
{
    cout << "\E[1;31mFile opened for writing failed\E[0m" << endl;
}

for(int i=0;i<MAX-1; i++) // get the index of array to be display out
{
    if(users[i].cashierID!="")
    {
    outfile<<users[i].cashierID<<";";
    outfile<<users[i].pw<<endl;

    }
}
outfile.close();

}

//显示所有用户信息

void displayuserinfobyid(int id,int k)
{

   //printout selected id information, with highlighting
   int i=id;
   if(i!=-1)
   {
     if(k==1)
    {
      cout<<"       User ID         :\E[1;32m"<<users[i].cashierID<<"\E[0m"<<endl;

    }
    else if(k==2)
    {
      cout<<"       User ID         :"<<users[i].cashierID<<endl;

    }

}
else
{
     cout<<"    \E[1;31mNo such User ID...\E[0m"<<endl;

}
}

//从用户数组中获取索引

int getuserindex(string id)
{
int i=-1;
for(int i=0;i<MAX-1; i++) // get the index of array to be display out
{
    if(users[i].cashierID==id)
    {
    return i;
    }
}
return i;
}

//删除用户信息

   void removeuser()
   {


        printer.printruheader();
        cout<<endl;
        displayuserid(); //display list of User ID to select
        string selectedid;
        cout<<"          enter username to remove :"; //getting input
        cin>>selectedid;
        cout<<endl;

        int i = getuserindex(selectedid);
        displayuserinfobyid(i); //display selected user ID information
        if(i!=-1)
        {
        cout<<"          are you sure you want to remove (Y/N) :"; //confirmation
        char yesno;
        cin>>yesno;
        yesno = toupper(yesno);

                if(yesno=='Y')
                {
                users[i].cashierID = "";
                cout<<"          \E[1;29mUser ID "<<selectedid<<" deleted...\E[0m"<<endl;

        writeUserDatabase(); //update userdatabasefile





                }
                else
                {
                cout<<"          \E[1;31mDelete Fail...\E[0m"<<endl;
                }
        }
    }

1 个答案:

答案 0 :(得分:0)

如果问题是你想从函数&#34; changePassword&#34;在提交了错误的ID后,您可以使用return;,因为函数的返回类型无效。

请注意,有3种可能性:退货,退货或退货。 Break用于打破循环或切换。

例如:

for(int i = 0; i < 10; ++i) {
    if(i < 5)
      cout << i << endl;
    else
      break; // Will cause the loop to be executed 5 times only
}

退出可用于强制程序停止执行。 只要你想从当前函数返回,就会使用return,除非返回类型为void,否则需要返回一些东西。