我有一个系统,它会显示一个菜单选项供用户选择并执行某些操作。目前我在功能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;
}
}
}
答案 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,否则需要返回一些东西。