一个初学者,用txt做数据源实现多用户的登陆注册,强大的泛型集合来完成

一个初学.net的同学才学了泛型和文件流就要做一个winform版的登陆和注册,我就用那狭隘的知识量做了一个登陆注册,来看看吧。

Mylist.txt 作为数据源,放在debug目录下。

先写一个注册页面,把数据写成

这样就可以以用户名,密码的方式保存数据了。

    private void btnMyreg_Click(object sender, EventArgs e)
        {
            if (txtPasswordA.Text.Trim() == TxtPassword.Text.Trim())
            {
                if (TxtUserName.Text.Length > 0 && txtPasswordA.Text.Length > 0)
                {
                    List<string> list = new List<string>();
                    list.Add(TxtUserName.Text.Trim());
                    list.Add(txtPasswordA.Text.Trim());
                    string[] strs = list.ToArray();
                    string str = string.Join(",", strs);
                    //小文件的读取可以用File直接读,大文件一定要用FileStream
                    string olduser = File.ReadAllText(@"Mylist.txt", Encoding.Default);
                    //下面是将读出来字符拼接起来再写进去交换行
                    File.WriteAllText(@"Mylist.txt", olduser + str + "\r\n");
                    MessageBox.Show("注册成功,系统将转到登陆页面");
                    FrmLogin frmlogin = new FrmLogin();
                    this.Hide();
                    frmlogin.Show();
                }
                else
                {
                    MessageBox.Show("用户名,密码不能为空");
                }
            }
            else
            {
                MessageBox.Show("两次输入的密码不一至");
            }
        }

 

然后我写了一个登陆页面:

以遍历键值对的方式获取相应的用户名和密码,并做出判断。

private void btnMylogin_Click(object sender, EventArgs e)
        {
            string[] strs = File.ReadAllLines(@"Mylist.txt", Encoding.Default);
            string uname = txtUserName.Text;
            string upwd = txtPassword.Text;
            Dictionary<string, string> dic = new Dictionary<string, string>();
            for (int i = 0; i < strs.Length; i++)
            {
                //将用户名,密码以键值对的方式存到字典集合中
                //dic{[key,value]}  dic[key]=value
                dic.Add(strs[i].Split(',')[0], strs[i].Split(',')[1]);
            }
            int a = 0;
            foreach (string item in dic.Keys)
            {
                //遍历集合的key,看是否存在用户名,如果存在,则key==uname,a++是考虑到用户可以有重复存在
                if (uname == item)
                {
                    a++;
                }
            }
            if (a > 0)
            {
                //用户名存在 的时候dic[key]就是对应的密码
                if (upwd == dic[uname])
                {
                    MessageBox.Show("登陆成功");
                }
                else
                {
                    MessageBox.Show("密码不正确");
                }
            }
            else
            {
                MessageBox.Show("用户名不存在");
            }
        }

 

总结:泛型集合很大的提高了程序的性能问题,比如在计算机中经常用到一些数据结构,如队列,链表等,而其中的元素以前一般这么定义:object a=new object();
这样就带来一个严重的问题,用object来表示元素没有逻辑问题,但每次拆箱、封箱就占用了大量的计算机资源,导致程序性能低下,而这部分内容恰恰一般都是程序的核心部分,如果使用object,那么程序的表现就比较糟糕。
而使用泛型则很好的解决这个问题,本质就是在编译阶段就告诉编译器,数据结构中元素的种类,既然编译器知道了元素的种类,自然就避免了拆箱、封箱的操作,从而显著提高c#程序的性能。
比如List<string>就直接使用string对象作为List的元素,而避免使用object对象带来的封箱、拆箱操作,从而提高程序性能。

 

 

test

posted @ 2012-05-18 00:56  inline  阅读(561)  评论(0编辑  收藏  举报