题目:C#注册登录页面
要求能够存储多组账户,能够有试错上线
逻辑分析:
注册逻辑:
1.首先需要注册账户,先输入账户名,账户名不能重复,注册完;接下来写密码,并二次确认输入的密码;然后将账户和密码存入数据库中,以此多次使用。
登录逻辑:
2.注册完之后,既可以需要登录,登陆的时候呢,先判断是否存在已经注册完的用户名,然后进行输入密码操作,然后判断密码是否正确,同样需要输入上限,达到上线之后即重新注册。
代码:
class Program
{
public static int count = 1;
public static string[][] num = new string[100][];
public static int mistakenum = 1;
public static bool istrue = false;
static void Main(string[] args)
{
while (true)
{
login0(); //注册
landing0(); //登录
}
}
#region 1.注册页面
static void login0()
{
Console.WriteLine(" 注册账号 ");
Console.WriteLine("设置账号名");
string name = Console.ReadLine();
if (count>1) //需注意count==1的时候,数组里面没有保存内容,因此不能与储存的内容进行保存
{
if (Registeredname(name)) //要充分利用bool变量,进行判断,学会使用
{
Console.WriteLine("请输入密码");
string code = Console.ReadLine();
Console.WriteLine("请确认密码");
string code1 = Console.ReadLine();
rightcode(code, code1); //确认注册输入的是正确的密码,不正确超过次数,就重新注册
if (istrue)
{
Console.WriteLine("注册成功");
istrue = false; //公共的变量记得返回值
mistakenum = 1;
number(name, code); //注册成功导入数据库
}
}
else
{
login0();
}
}
else //这里为第一次注册需要的代码,直接运行,导入就可以
{
Console.WriteLine("请输入密码");
string code = Console.ReadLine();
Console.WriteLine("请确认密码");
string code1 = Console.ReadLine();
rightcode(code, code1);
if (istrue)
{
Console.WriteLine("注册成功");
istrue = false;
mistakenum = 1;
number(name, code);
}
else
{
login0();
}
}
}
#endregion
#region 1.1注册界面重新输入密码
static void rightcode(string code, string code1) //将注册时需要导入的两次密码传参,进行判断
{
while (mistakenum <= 5) //总共给五次试错的机会
{
if (code1 == code)
{
mistakenum = 1; //记得返回值
istrue = true; //正确就返回true。
break;
}
else if (mistakenum == 5) //超出上线,即为重新进行运行,一切重置
{
Console.WriteLine("输出错误上线");
mistakenum = 1;
login0();
break;
}
else if (code1 != code)//两次密码不相等,就要重新输入code1(即为再次输入密码),这里是一个变量,因此不用重新传参,直接改变值就可以了
{
Console.WriteLine("输入错误,请重新输入");
code1 = Console.ReadLine();
mistakenum++;
}
}
}
#endregion
#region 1.2注册页面用户名不重复。
static bool Registeredname(string name) //注册页面的判断用户名是否存在
{
for (int i = 0; i <count-1; i++) //该地方需要注意count-1这个点,这个点容易出错,公共的数组一开始内容全部没有,因此不能比较,所以说需要注意这个范围
{
if (num[i][0] == name) //当用户名重复是,运行
{
Console.WriteLine("用户名重复,请重新输入");
return false;
}
}
return true; //无重复用户名,返回true,接着输入密码
}
#endregion
#region 2.数据库
static void number(string name, string code) //数据库,存储每次输入的用户名和密码
{
num[count - 1] = new string[2]; //这里每次都需要定义一下,大函数里面包含的小函数的容量,需每次都声明,因此这里导入new string[2]
num[count - 1][0] = name; //下标要减1,因为count为记录数量,即存入的账户总量,该地方为用户名,定义大数组里面的小数组第一个为用户名
num[count - 1][1] = code; //该地方为存储密码。大数组的小数组的第二个数即为密码
count++; //每次存入count就要+1,放在这个地方逻辑上比较合理
}
#endregion
#region 3.登录页面
static void landing0()
{
while (true) //该地为死循环,因此就可以试错,错误的时候,可以再次运行
{
Console.WriteLine(" 登录: ");
Console.Write("账号:");
string id = Console.ReadLine();
string pw = getuser(id); //将用户名和密码对应,即一个用户名只能有一个密码
if (mistakenum==5) //这里是用户名试错的情况,只能五次,五次直接退出循环
{
Console.WriteLine("输入错误上线");
mistakenum = 1;
break;
}
else if (pw == "") //如果账户不存在,getuser就到处pw="",所以运行这一段
{
Console.WriteLine("账号不存在,请重新输入!");
mistakenum++;
continue; //不存在重新运行这个循环
}
Console.Write("密码:");
string code = Console.ReadLine(); //输入密码,并进行判断
if (mistakenum == 5) //试错情况五次,错误退出循环
{
Console.WriteLine("输入错误上线");
mistakenum = 1;
break;
}
else if (code==pw) //判断密码正确
{
Console.WriteLine("登陆成功!!");
break;
}
else if (code!=pw) //密码不对应时,即为重新输入密码
{
Console.WriteLine("密码错误,请重新输入!!");
mistakenum++;
}
}
}
#endregion
#region 4.获取用户名
static string getuser(string id) //获取用户名,以此来将用户名和密码对应
{
string str = "";
for (int i = 0; i < count-1; i++) //将数组里面的每一个用户名都和输入的用户名,作比较
{
if (id==num[i][0]) //当存在用户名时,即可运行
{
return num[i][1]; //返回正确的密码,进行密码的判断
}
}
return str; //不存在该用户时导出
}
#endregion
}
运行结果:
(这个地方清空数据台,清的不是很明白,如果有知道的可以私聊一下,互相交流一下,感谢🙇)
该题总结:
1. 该题创建数据库的话,需要创建一个公用的交错数组,以此来重复使用,不用使用时必须传参,简单方便。因为我使用的c#控制台,函数前面有static,所以说公用的交错数组也需要加入static。
2.该题还需要注意的地方为,所有的公用的数据,如果想重复使用的话,视情况归为原来的数字或者情况。
3.还需要注意数组里面如果没有内容的话,不能够进行比较,会报错,无法运行。所以说一定一定要注意数组内的内容需要取到的地方。
4.该题还有难点在账户名和密码对应,即一个账户名,只能有一个密码。这里的逻辑可以多看一下,这个地方我写在下面,各位有需要可以观看。
while (true) //该地为死循环,因此就可以试错,错误的时候,可以再次运行
{
Console.WriteLine(" 登录: ");
Console.Write("账号:");
string id = Console.ReadLine();
string pw = getuser(id); //将用户名和密码对应,即一个用户名只能有一个密码
if (pw == "") //如果账户不存在,getuser就到处pw="",所以运行这一段
{
Console.WriteLine("账号不存在,请重新输入!");
continue; //不存在重新运行这个循环
}
Console.Write("密码:");
string code = Console.ReadLine(); //输入密码,并进行判断
if (code==pw) //判断密码正确
{
Console.WriteLine("登陆成功!!");
break;
}
else i //密码不对应时,即为重新输入密码
{
Console.WriteLine("密码错误,请重新输入!!");
}
}
} static string getuser(string id) //获取用户名,以此来将用户名和密码对应
{
string str = "";
for (int i = 0; i < count-1; i++) //将数组里面的每一个用户名都和输入的用户名,作比较
{
if (id==num[i][0]) //当存在用户名时,即可运行
{
return num[i][1]; //返回正确的密码,进行密码的判断
}
}
return str; //不存在该用户时导出
}
5.做该题一定要先分析逻辑,一步一步写,切勿想到什么写什么,先把大面内容写完,然后一步一步完善,我写的还不够很完善,后期有时间,继续完善,如果各位看官有任何的建议,欢迎补充,一起奋斗。