using System;
using System.Collections.Generic;
using System.Text;namespace A
{
    class BCard
    {
        public string num;
        public string psw;
        public float balance;
        public BCard(string n, string p)
        {
            num = n;
            psw = p;
            //balance = 0;
        }
        public void Inguing(float c)
        {
            balance = c;
            Console.WriteLine("您卡上余额:{0}",balance);
        }
        public void Saving(float d)
        {
            Console.WriteLine("您现存款:{0}",d);
        }
        public void Withdrawal(float e)
        {
            balance -= e;
            Console.WriteLine("您现取款:{0},还剩余额:{1}",e,balance);
        }
       // public float Transfer()
        //{ }
    }
    class ICard : BCard
    {
        public void Transfer(float f)
        {            balance -= (f += 2%f);
            Console.WriteLine("您已转账:{0},还剩余额:{1}",f,balance);               
        }
    }
    class GCard : BCard
    {
        public new void Saving(float d)
        {
            balance += (d-=2%d);
            Console.WriteLine("您现在存款:{0}",balance);
        }
        public new void Withdrawal(float e)
        {
            balance -=(e += 5%e);
            Console.WriteLine("您现在取款:{0},还剩余额:{1}",e,balance);
        }
    }
    class M
    {
        public static void Main()
        {
            int a = Convert.ToInt32(Console.ReadLine());
            if (a == 1)
            {
                Console.WriteLine("这是一张本地卡");
                Console.WriteLine("请输入你的密码:");
                Console.WriteLine("请输入你的卡号:");
                ICard w = new ICard("123", "456");
                w.Inguing(1000);
                w.Saving(100);
                w.Withdrawal(100);
                w.Transfer(100);
                Console.ReadLine();
            }
            else
            {
                if (a == 2)
                {
                    Console.WriteLine("这是一张外地卡");
                    Console.WriteLine("请输入你的密码:");
                    Console.WriteLine("请输入你的卡号:");
                    GCard s = new GCard();
                    s.Inguing(2000);
                    s.Saving(200);
                    s.Withdrawal(200);
                    Console.ReadLine();
                }
                else
                {
                    Console.WriteLine("您的输入有错误,请输入1或2");
                }
            }
                    }
    }
}
请问:
这个程序为什么运行不了呢 
谢谢

解决方案 »

  1.   

    编译了一下,是构造函数定义错误。
    这是我修改后的代码,有几个地方:
    1)ICard和GCard均继承自BCard。BCard中定义了一个构造函数,这时编译器不会自动构造一个无参构造函数。而在ICard和GCard中均没有定义与ICard参数相对应的构造函数,使得ICard和GCard的基类无法构造。因此我添加了两个构造函数:
    public ICard(string n, string p) : base(n, p) { }
    public GCard(string n, string p) : base(n, p) { }
    2)你的主程序是GCard的构造过程错误。按照我的方案修改后,GCard同样也没有无参构造函数,因此需要添加参数。
    我修改为
    GCard s = new GCard("123","456");
    现在程序可编译,运行结果我没测试。
    using System;
    using System.Collections.Generic;
    using System.Text;namespace A
    {
        class BCard
        {
            public string num;
            public string psw;
            public float balance;
            public BCard(string n, string p)
            {
                num = n;
                psw = p;
                //balance   =   0; 
            }
            public void Inguing(float c)
            {
                balance = c;
                Console.WriteLine("您卡上余额:{0}", balance);
            }
            public void Saving(float d)
            {
                Console.WriteLine("您现存款:{0}", d);
            }
            public void Withdrawal(float e)
            {
                balance -= e;
                Console.WriteLine("您现取款:{0},还剩余额:{1}", e, balance);
            }
            //   public   float   Transfer() 
            //{   } 
        }
        class ICard : BCard
        {
            public ICard(string n, string p) : base(n, p) { }        public void Transfer(float f)
            {            balance -= (f += 2 % f);
                Console.WriteLine("您已转账:{0},还剩余额:{1}", f, balance);
            }
        }
        class GCard : BCard
        {
            public GCard(string n, string p) : base(n, p) { }        public new void Saving(float d)
            {
                balance += (d -= 2 % d);
                Console.WriteLine("您现在存款:{0}", balance);
            }
            public new void Withdrawal(float e)
            {
                balance -= (e += 5 % e);
                Console.WriteLine("您现在取款:{0},还剩余额:{1}", e, balance);
            }
        }
        class M
        {
            public static void Main()
            {
                int a = Convert.ToInt32(Console.ReadLine());
                if (a == 1)
                {
                    Console.WriteLine("这是一张本地卡");
                    Console.WriteLine("请输入你的密码:");
                    Console.WriteLine("请输入你的卡号:");
                    ICard w = new ICard("123", "456");
                    w.Inguing(1000);
                    w.Saving(100);
                    w.Withdrawal(100);
                    w.Transfer(100);
                    Console.ReadLine();
                }
                else
                {
                    if (a == 2)
                    {
                        Console.WriteLine("这是一张外地卡");
                        Console.WriteLine("请输入你的密码:");
                        Console.WriteLine("请输入你的卡号:");
                        GCard s = new GCard("123","456");
                        s.Inguing(2000);
                        s.Saving(200);
                        s.Withdrawal(200);
                        Console.ReadLine();
                    }
                    else
                    {
                        Console.WriteLine("您的输入有错误,请输入1或2");
                    }
                }
            }
        }
    }
      

  2.   

    另外,可以提醒一下楼主其实可以用虚函数来实现,还有基类的Saving函数似乎没有存进钱啊,嘿嘿。别人要找你的……