| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1306 人关注过本帖
标题:C#哈希表用户信息存储读取问题求解
只看楼主 加入收藏
YangJ0720
Rank: 2
来 自:广西柳州市融安县
等 级:论坛游民
帖 子:17
专家分:18
注 册:2011-5-29
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:2 
C#哈希表用户信息存储读取问题求解
YangJ.rar (45.57 KB)
          我的一个ATM取款机程序,之前只有一个用户类,这样的程序有严重不足:如果注册了一个用户之后,再注册一个用户,那么第一个用户的信息将会被覆盖。后来改进用哈希表对多个用户信息进行临时储存,发现进入登陆界面的时候,用刚注册的帐号和密码居然登陆不进去(验证未成功),程序显示我输入的帐号没有注册。 特来向大虾们求解!!!
    class Program//主函数
    {
        static void Main(string[] args)
        {
            ZhuJieMianLei zjm = new ZhuJieMianLei();
            zjm.ZhuJieMian();//直接调用主界面菜单
        }
    }
    class ZhuJieMianLei//银行主界面的菜单类
    {
        public static Hashtable Sky = new Hashtable();
        public void ZhuJieMian()//主界面的方法
        {
            Console.WriteLine("1.登陆操作\n2.注册帐户\n3.退出\n请做出选择");
            int n = Convert.ToInt32(Console.ReadLine());
            switch (n)
            {
                case 1:
                    Console.ReadKey();
                    Console.Clear();
                    DengLuLei d = new DengLuLei();//进行登录操作
                    d.DengLu();
                    break;
                case 2:
                    ZhuCeLei z = new ZhuCeLei();//进行用户注册操作
                    z.ZhuCe();
                    Sky.Add(z.Id, z);//设定哈希表的K值为Id,用Id对哈希表成员进行查找
                    break;
                case 3:
                    Console.Clear();
                    Console.WriteLine("\n\n\t\t非常感谢您对Bank的大力支持,谢谢您的使用");
                    Console.ReadKey();
                    break;
            }
        }
    }
    class ZhuCeLei//注册类(相当于用户类)
    {
        public string Name;//用户姓名
        public string Id;//帐号
        public string Pass;//密码
        public string Pass1;
        public long Money = 0;//金额
        public string ShenFenZheng;
        public void ZhuCe()//用户方法
        {
            Console.Clear();
            DengLuLei b = new DengLuLei();
        ChongShePass:
            {
                Console.Write("\t\t     请填写您的帐号:");
                Id = Console.ReadLine();
                Console.Write("\t\t     请填写您的密码:");
                Pass = Console.ReadLine();
                Console.Write("\t\t     请再次确认您的密码:");
                Pass1 = Console.ReadLine();
                if (Pass != Pass1)
                {
                    Console.WriteLine("\n\t\t\t前后两次输入的密码不相符!请认真填写");
                    goto ChongShePass;
                }
            }
            Console.Write("\t\t     请填写您的真实姓名:");
            Name = Console.ReadLine();
            Console.Write("\t\t     请填写您的身份证:");
            ShenFenZheng = Console.ReadLine();
            Console.WriteLine("\t\t     帐户注册成功!");
            Console.ReadKey();
            Console.Clear();
            b.DengLu();
        }
    }
    class DengLuLei//银行类
    {
        public static string Id0;
        public void DengLu()//银行帐户登陆的方法
        {
        FanHui:
            {
                for (int i = 3; i > 0; i--)//提供三次机会输入帐号密码
                {
                    Console.Write("\n\n\t\t请输入帐号:");
                    string Id0 = Console.ReadLine();
                    Console.Write("\n\t\t请输入密码:");
                    string Pass0 = Console.ReadLine();
                    if (ZhuJieMianLei.Sky.Count == 0)
                    {
                        Console.Write("\n\t系统监测到您尚未注册Bank银行通行证,请注册后进行登陆");
                        Console.ReadKey();
                        Console.Clear();
                        goto FanHui;
                    }
[/u]                    else if (((ZhuCeLei)ZhuJieMianLei.Sky[Id0]).Id == Id0 && ((ZhuCeLei)ZhuJieMianLei.Sky[Id0]).Pass == Pass0)//对帐号密码进行判断
                    {
                        Console.WriteLine("\n\n\t\t帐号密码确认成功!");
                        Console.ReadKey();
                        CaoZuoLei y = new CaoZuoLei();
                        y.CaoZuo(Id0);
                        break;
                    }
                    else
                    {
                        Console.WriteLine("帐号或密码错误,请重新输入!");
                        if (i == 1)
                        {
                            Console.WriteLine("您的输入次数已超限,系统已自动添加您为黑名单");
                            Console.ReadKey();
                        }
                    }
                }
            }
        }
    }
    class CaoZuoLei//用户操作类
    {
        long M_Money = 0;//供用户输入的金额,用于赋值
        public void CaoZuo(string Id0)//用户操作的方法
        {
            Console.Clear();
            CaoZuoLei y = new CaoZuoLei();
            Console.WriteLine("\n\t\t\t1.存款操作\n\t\t\t2.取款操作\n\t\t\t3.查询余额\n\t\t\t4.返回登陆界面\n\t\t\t5.返回主界面菜单");
            Console.WriteLine("请做出选择:");
            int n = Convert.ToInt32(Console.ReadLine());
            if (n == 1)
            {
                Console.Clear();//存款操作
                y.CunKuan(Id0);
                Console.ReadKey();
            }
            else if (n == 2)
            {
                Console.Clear();//取款操作
                y.QvKuan(Id0);
                Console.ReadKey();
            }
            else if (n == 3)
            {
                Console.Clear();//查询余额
                y.ChaXunYuE(Id0);
                Console.ReadKey();
            }
            else if (n == 4)
            {
                Console.Clear();//返回登录界面
                y.FanHuiDengLu();
                Console.ReadLine();
            }
            else if (n == 5)
            {
                Console.Clear();
                y.FanHuiZhuJieMian();//返回主界面
                Console.ReadKey();
            }
            else
            {
                Console.WriteLine("不合法操作,在Bank中您的不合法操作将造成严重后果!");
                Console.ReadKey();
            }
        }
        public void CunKuan(string Id0)//存款方法
        {
            Console.WriteLine("请输入存款金额:");
            M_Money = Convert.ToInt32(Console.ReadLine());
            ((ZhuCeLei)ZhuJieMianLei.Sky[Id0]).Money += M_Money;
            Console.WriteLine("存款成功!\n您的帐户余额为:{0}", ((ZhuCeLei)ZhuJieMianLei.Sky[Id0]).Money);
            Console.ReadKey();
            CaoZuoLei y = new CaoZuoLei();
            y.CaoZuo(DengLuLei.Id0);
        }
        public void QvKuan(string Id0)//取款方法
        {
            Console.WriteLine("请输入取款金额:");
            M_Money = Convert.ToInt32(Console.ReadLine());
            ((ZhuCeLei)ZhuJieMianLei.Sky[Id0]).Money -= M_Money;
            Console.WriteLine("取款成功!\n您的帐户余额为:{0}", ((ZhuCeLei)ZhuJieMianLei.Sky[Id0]).Money);
            Console.ReadKey();
            CaoZuoLei y = new CaoZuoLei();
            y.CaoZuo(DengLuLei.Id0);
        }
        public void ChaXunYuE(string Id0)//显示余额的方法
        {
            Console.WriteLine("您帐户的余额为:{0}", ((ZhuCeLei)ZhuJieMianLei.Sky[Id0]).Money);
            Console.ReadKey();
            CaoZuoLei y = new CaoZuoLei();
            y.CaoZuo(Id0);
        }
        public void FanHuiDengLu()//返回登陆界面的方法
        {
            Console.WriteLine("\n\t\t按任意键进入登陆界面菜单");
            Console.ReadKey();
            Console.Clear();
            DengLuLei b = new DengLuLei();
            b.DengLu();
        }
        public void FanHuiZhuJieMian()//返回主界面的方法
        {
            Console.WriteLine("\n\t\t按任意键进入主界面菜单");
            Console.ReadKey();
            Console.Clear();
            ZhuJieMianLei z = new ZhuJieMianLei();
            z.ZhuJieMian();
        }
    }
}
搜索更多相关主题的帖子: 用户 成功 密码 
2011-06-08 21:16
dwwwing
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:284
专家分:986
注 册:2008-10-11
收藏
得分:30 
我看了下你的代码,发现了问题。
                    ZhuCeLei z = new ZhuCeLei();//进行用户注册操作
                   z.ZhuCe();
                    Sky.Add(z.Id, z);
红色代码处,当你注册后,立马调用的 b.DengLu(); 在你登陆前,尚没执行Sky.Add 方法。所以在此刻登陆时候,你的hashtable里面是不存在你注册的键值对的。
2011-06-10 09:54
YangJ0720
Rank: 2
来 自:广西柳州市融安县
等 级:论坛游民
帖 子:17
专家分:18
注 册:2011-5-29
收藏
得分:0 
回复 2楼 dwwwing
else if (((ZhuCeLei)ZhuJieMianLei.Sky[Id0]).Id!=null)  判断 输入的 Id0在哈希表中是否存在 。如果存在 ,  往下
{
                    ZhuCeLei CunZai = new ZhuCeLei();///////         
                    CunZai = ((ZhuCeLei)ZhuJieMianLei.Sky[Id0]);///////
                    if (CunZai.Id == Id0 && CunZai.Pass == Pass0)//对帐号密码进行判断
                    {
                        Console.WriteLine("\n\n\t\t帐号密码确认成功!");

              上面打了注释的写错了。   今天老师帮我写的但是我忘了
 判断 输入的 Id0在哈希表中是否存在 。如果存在 ,  往下
  然后 哈希表 通过Id0找到我注册的那个用户帐号和密码
    跟输入的帐号和苗苗进行判断是否一致
     如果一致, 则帐号密码正确
 意思是。 将哈希表里面的那个用户帐号密码赋值给
  一个CunZai   ,然后才可以用if 判断CunZai.Id0==Id && CunZai.Pass0==Pass
    你看出我这一段程序哪里错了么?
2011-06-10 23:02
快速回复:C#哈希表用户信息存储读取问题求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019238 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved