4个回答
展开全部
/// <summary>
/// 登陆帮助类
/// </summary>
/// <remark>
/// 类功能说明
/// 1.内置默认的用户
/// 2.验证用户名及密码输入
/// 3.验证用户有效性
/// </remark>
public class LoginHelper{
/// 内置的用户类
private static UserInfo _User;
/// 构造函数
static LoginHelper()
{
_User = new UserInfo{UserName = "user01",UserPwd="USER01@user01"};
}
/// 验证输入
/// 其实这里存在一个描述性的错误
/// IsEmpty是否为空,一般为空时应该为true,而非空是false
/// 如果想为空是返回false,非空时返回true,此处命名应该命名为IsNotEmpty
/// 命令一般要符合这样的规律,虽然不是必须的,但在使用上会干扰
/// 在.net中也存在相应的设计有很多
/// IsEmpty返回true时表示为空
/// IsNotEmpty返回true时表示非空
/// 大部分类中只存在两者中的一个,但也有很多例外
/// 如Assert类中同时存在IsNull/IsNotNull,AreSame/AreNotSame之类的同时出现
public static bool IsEmpty(string pName, string pPwd)
{
return string.IsNullOrEmpty(pName) ||
string.IsNullOrEmapty(pPwd);
// 注意此处使用了常规的处理方式
// 此处返回值与你描述中是相反的,因为你描述中存在一定的问题
// 如果你铁定要使用描述中的,那么语句可以使用
// return !string.IsNullOrEmpty(pName) && !string.IsNullOrEmpty(pPwd);
}
/// 验证有效性
public static bool IsValid(string pName, string pPwd)
{
return _User.UserName.ToLower() == pName?.ToLower() &&
_User.UserPwd == pPwd;
// 这里直接进行验证是否相等即可,
// 要注意的是我这里使用了一个.net 4.6的语法糖
// vs2015及其以上版本才可以编译通过的
// 就是?.这个玩意别把问号给省略了。
// pName?.ToLower()的结果就是pName为空时(null)返回null,
// 如果不为空时则返回其小写形式。
// 如果写作pName.ToLower()时,一旦pName为null则会抛出无引用的例外。
// 因为经常涉及到这样类似的判断写法,所以在.net 4.6中引入的新的语法糖
}
}
/// <summary>
/// 用户信息类
/// </summary>
public class UserInfo
{
/// 用户名
public string UserName{get;set;}
/// 密码
public string UserPwd{get;set;}
}
/// 场景代码
/// 也就是client代码
/// 你的控制台程序
/// 其它地方使用命名,我只写Entry
static void Main(string[] args)
{
// 控制输入
string pName = Console.ReadLine();
string pPwd = Console.ReadLiner();
// 验证输入
// 注意如果你按描述中说法,此处应该取反
// 注意,因为设计中LoginHelper中只判断了用户名与密码是否为空的情况
// 并没特别指名哪个为空,而提示信息中却输入了用户名或密码为空的情况
// 那就意味着这里需要重复的判断!
// 否则我们可以设计为返回-1(用户名为空)-2(密码为空)0(正常情况)
// 或者我们只需要提示用户名或用户密码不能空做为整体提示
if(LoginHelper.IsEmpty(pName, pPwd))
{
if(string.IsNullOrEmapty(pName))
Console.Write("用户名不能为空!");
if(string.IsNullOrEmpty(pPwd))
Console.Write("用户密码不能为空!");
Console.WriteLine();
return;
}
// 上文判断为空时因存在return所以只有不为空时才会进入到此处
if(LoginHelper.IsValid(pName, pPwd)
Console.WriteLine($"{pName}你好!欢迎使用本系统!");
else
Console.WriteLine("用户名不正确,用户密码不正确!");
// 注意这我里使用了一个.net 4.6中的一个特性,叫格式化文本。在VS2015
// 以前版本中无法编译通过,就是$起始的字符串中直接使用了{}引用变量名
// 如果你使用了VS2015版本中的4.0及4.5时,请使用原来的文本格式化
// Console.WriteLine("{0}你好!欢迎使用本系统!",pName);
}
你可能很奇怪为什么在UserInfo或LoginHelper中为什么没有使用Console类直接进行输入输出吧!这个以后你会慢慢知道的!现在你可以了解一下相关的面向对象基本原则。
展开全部
你疯了,这点问题求代码。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
翻翻书就懂了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自己写 你这是完全没听课的人
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询