• 【C#】上级实验四


    1、虚方法练习

    设计一个控制台应用程序,定义一个Shape类,具体要求如下:
    
    (1)类中定义2个私有字段长度(length)、宽度(breadth)。
    
    (2)类中定义相应公有属性分别对应上述2个字段;
    
    (3)类中定义可重载的构造函数初始化上述2个字段;
    
    (4)定义1个默认构造函数;
    
    (5)类中定义公有方法输出对象的长度、宽度等详细信息;
    
    (6)类中定义虚方法Draw,输出当前图型类别。
    
    (7)在main方法中测试Shape类及方法。
    
     
    
    定义一个Box类,父类为Shape,具体要求如下:
    
    (1)类中定义3个私有字段长度(length)、宽度(breadth)、高度(height);
    
    (2)类中定义相应公有属性分别对应上述3个字段;
    
    (3)类中定义可重载的构造函数初始化上述3个字段;
    
    (4)定义1个默认构造函数;
    
    (5)类中定义公有方法输出对象的长度、宽度、高度等详细信息;
    
    (6)类中定义虚方法Draw,输出当前图型类别。
    
    (7)在main方法中测试Box类及方法;
    
    (8)在main方法中测试多态。
      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 
      6 namespace MyProject
      7 {
      8     class Program
      9     {
     10         static void Main(string[] args)
     11         {
     12             #region 测试Shape类及方法
     13             /*  1、默认构造函数 对Length,breadth进行赋值
     14              *  2、利用属性进行输出后,再利用属性进行赋值
     15              *  3、最后利用ToString 输出对应的对象信息 
     16              */
     17             #endregion
     18 
     19             Shape s1 = new Shape(1, 2);
     20             Console.WriteLine("s1->Length:{0} , breadth:{1}",s1.Length,s1.Breadth);
     21             s1.Length = 3;
     22             s1.Breadth = 4;
     23             Console.WriteLine(s1);
     24 
     25             #region 测试Box类及方法
     26             /*  1、默认构造函数 对Length,breadth,height进行赋值
     27              *  2、利用属性进行输出后,再利用属性进行赋值
     28              *  3、最后利用ToString 输出对应的对象信息 
     29              */
     30             #endregion
     31 
     32             Box b1 = new Box(1, 2, 3);
     33             Console.WriteLine("b1->Length :{0}	breadth :{1}	height :{2}",b1.Length,b1.Breadth,b1.Height);
     34             b1.Length = 3;
     35             b1.Breadth = 4;
     36             b1.Height = 5;
     37             Console.WriteLine(b1);
     38 
     39             #region 测试多态
     40             /*
     41              * 多态体现在,父指针,将子类实例化.
     42              */
     43             #endregion
     44             Shape b2 = new Box(2, 3, 4);
     45             Console.WriteLine(b2);
     46 
     47 
     48             #region 测试虚函数
     49             #endregion
     50             s1.Draw();
     51             b1.Draw();
     52         }
     53     }
     54     
     55     public class Shape
     56     {
     57         private int length;
     58         private int breadth;
     59 
     60         public int Length
     61         {
     62           get { return length; }
     63           set { length = value; }
     64         }
     65         public int Breadth
     66         {
     67           get { return breadth; }
     68           set { breadth = value; }
     69         }
     70 
     71         public Shape ( int length , int width)
     72         {
     73             this.Length = length;
     74             this.Breadth = Breadth; 
     75         }
     76         public Shape():this(0, 0) { }
     77         public override string ToString()
     78         {
     79             return string.Format("Shape -> length:{0}	 Breadth:{1}", Length, Breadth);
     80         }
     81         public virtual void Draw()
     82         {
     83             Console.WriteLine(" Draw -> Shape " + "Length :{0} , Breadth :{1} ",Length , Breadth );
     84         }
     85         #region 主要注释
     86         /*
     87          * 类中的字段属性封装
     88          * 构造函数 : 两参数,零参数
     89          * 重载ToString类
     90          */
     91         #endregion
     92     }
     93 
     94     public class Box : Shape
     95     {
     96         private int height;
     97 
     98         public int Height
     99         {
    100             get { return height; }
    101             set { height = value; }
    102         }
    103 
    104         public Box(int length, int Breadth, int height):base(length, Breadth)
    105         {
    106             this.height = height;
    107         }
    108         public Box() : this(0, 0, 0) { }
    109         public override string ToString()
    110         {
    111             return string.Format("Box -> length:{0}	 breadth:{1}	 height:{2}", Length, Breadth, Height);
    112         }
    113         public override void Draw()
    114         {
    115             Console.WriteLine(" Draw -> Shape " + "Length :{0} , Breadth :{1} , Height :{2}", Length, Breadth,Height);
    116         }
    117         #region Box类
    118         /*
    119          *  Box继承了Shape的所有结构
    120          *
    121          *  1、无法直接访问父类的字段,但可通过"属性"间接访问
    122          *  2、在重载 构造函数时,可以直接调用父类的构造函数实现部分字段的赋值
    123          *  
    124          */
    125         #endregion
    126     }
    127 }
    虚方法练习

    2IComparable接口练习

    1)定义Car类,包含两个字段:name和price;
    
    (2)Car类中包含相应的属性、构造函数及ToString方法;
    
    (3)Car类继承接口IComparable,并实现CompareTo方法;
    
    (4)在Main方法中,使用Array.Sort方法对Car数组拍序,
    拍序依据姓名和价格升序排序,
    拍序后输出当前数组所有成员。
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Myproject
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             Car[] array = new Car[5];
    14             array[0] = new Car("A", 90);
    15             array[1] = new Car("S", 100);
    16             array[2] = new Car("B", 80);
    17             array[3] = new Car("b", 80);
    18             array[4] = new Car("Z", 80);
    19 
    20             Console.WriteLine("Length {0}", array.Length);
    21 
    22             Console.WriteLine("待排序序列");
    23             foreach (var item in array)
    24             {
    25                 Console.WriteLine(item);
    26             }
    27 
    28             Array.Sort(array, 0, array.Length);
    29 
    30             Console.WriteLine("已排序序列");
    31             foreach (var item in array)
    32             {
    33                 Console.WriteLine(item);
    34             }
    35 
    36         }
    37     }
    38     public class Car : IComparable
    39     {
    40         string name;
    41         int price;
    42 
    43         public string Name
    44         {
    45             get { return name; }
    46             set { name = value; }
    47         }
    48 
    49         public int Price
    50         {
    51             get { return price; }
    52             set { price = value; }
    53         }
    54 
    55         public Car(string name, int price)
    56         {
    57             this.name = name;
    58             this.price = price;
    59         }
    60 
    61         public Car() : this("", 0) { }
    62         public override string ToString()
    63         {
    64             return string.Format("Car Name : {0} , Price : {1} ", Name, Price);
    65         }
    66 
    67         public int CompareTo(Object obj)
    68         {
    69             //1、判断
    70             if( obj == null)
    71             {
    72                 return 1;
    73             }
    74             //2、转换
    75             Car rhs = obj as Car;
    76             //3、判断
    77             int r = 0;
    78             if( rhs == null )
    79             {
    80                 throw new ArgumentException("Object is not a Car");
    81             }
    82             else
    83             {
    84                 r = this.price.CompareTo(rhs.price); 
    85                 if ( r == 0)
    86                 {
    87                     return this.name.CompareTo(rhs.name); 
    88                 }
    89                 else
    90                 {
    91                     return r;
    92                 }
    93             }
    94         }
    95     }
    96 }
    Icomparable

    3、接口练习,设计一个控制台应用程序,模拟银行存取款业务。具体要求如下:

    1)定义一个接口IBankAccount,包含4个成员,
    
    分别是
    存款方法PayIn( )、
    取款方法Withdraw( )、
    转账方法TransferTo( )和
    余额属性Banlance。
    
    (2)定义一个类CurrentAccount,继承接口IBankAccount,并实现该接口所有成员。
    
    (3)Main方法中调试并实现存款、取款、转账等操作。

     

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Myproject
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             CurrentAccount c1 = new CurrentAccount("Tom", 10000);
    14             Console.WriteLine( c1 );
    15             c1.Payln(10000);
    16             Console.WriteLine( c1 );
    17 
    18             CurrentAccount c2 = new CurrentAccount("Jerry", 0);
    19             c1.TransferTo(c2, 5000);
    20 
    21             Console.WriteLine( c1 );
    22             Console.WriteLine( c2 );
    23         }
    24     }
    25 
    26     public interface IBankAccount
    27     {
    28         decimal Balance { get; }
    29         decimal Payln(decimal x);
    30         bool Withdraw(decimal x);
    31         bool TransferTo(IBankAccount target ,decimal x);
    32     }
    33 
    34     public class CurrentAccount : IBankAccount
    35     {
    36         private string id;
    37         private decimal balance;
    38 
    39         public CurrentAccount (string id , decimal x)
    40         {
    41             this.id = id;
    42             this.balance = x;
    43         }
    44 
    45         public CurrentAccount() : this("NA", 0) { }
    46         public decimal Balance
    47         {
    48             get { return balance; }
    49         }
    50 
    51         public decimal Payln(decimal x)
    52         {
    53             balance += x ;
    54             return balance;
    55         }
    56 
    57         public bool Withdraw(decimal x)
    58         {
    59             if (balance >= x)
    60             {
    61                 balance -= x;
    62                 return true;
    63             }
    64             else return false;
    65         }
    66 
    67         public bool TransferTo(IBankAccount target , decimal x)
    68         {
    69             if( Withdraw(x))
    70             {
    71                 target.Payln(x);
    72                 return true;
    73             }
    74             else return false;
    75         }
    76 
    77         public override string ToString()
    78         {
    79             return string.Format("{0} : {1}", id, balance);
    80         }
    81 
    82     }
    83 }
    CurrentAccount类
  • 相关阅读:
    求助
    第五次作业
    第四次作业
    第三次作业
    第二次作业(四则运算)
    关于软件工程相关疑问
    小组成员名单()
    第四次作业
    第二次作业
    第一次作业
  • 原文地址:https://www.cnblogs.com/Osea/p/11730243.html
Copyright © 2020-2023  润新知