程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 對應用程序結構進行組織的程序示例

對應用程序結構進行組織的程序示例

編輯:關於C語言

上面我們介紹了對應用程序結構進行組織的方法,接下來我們舉一個綜合應用的例子。程序實現的功能非常簡單,但其中用到了我們講解的各方面的知識。在程序中,我們利用名字空間把應用程序功能進行分割,並且用到了在一個名字空間中包含多個類、在一個可執行文件中調用多個動態鏈接庫的方法。程序中還用到了異常處理、類的繼承、派生類對虛方法的重載、多態性的實現等概念,希望讀者能夠在閱讀程序時認真注意這些用法,來加深對基本概念的理解。

該程序是一個小游戲,游戲中隨機產生矩形、正方形、直角三角形、等腰直角三角形四種圖形。游戲開始給每個用戶1000分,然後由用戶自行押注,根據押注的多少和隨機產生的圖形面積計算用戶贏取的分數。程序中用到了名字空間System中提供的類Random,該類提供了用於產生一個隨機數的方法。

程序清單16-3:

//MyShape.cs---源文件,用於定義圖形類,作為其它圖形的基類

using System;

namespace MyShape
{
 public class Shape
 {
   public virtual void Draw()
   {;} //虛方法,用於圖形繪制
   public virtual int GetArea(){
     return 0; //虛方法,用於計算圖形面積
   }
 }
}

//rect.cs---源文件,用於定義矩形類和正方形類

using System;

namespace MyShape
{
 public class Rectangle:Shape //定義矩形類
 {
  protected int a;
  protected int b; //矩形的邊長
  public Rectangle(int va,int vb)
  {
   a=va;
   b=vb;
  }
  public override int GetArea() //重載虛方法,計算矩形面積
  {
   int area=a*b;
   return area;
  }
  public overide void Draw() //重載虛方法,在屏幕上繪制矩形
  {
   Console.WriteLine("Rectangle:");
   Console.WriteLine("* * * * *");
   Console.WriteLine("*            *");
   Console.WriteLine("*            *");
   Console.WriteLine("* * * * *");
   }
 }

 public class Square:Rectangle //定義正方形類
 {
  public Square(int va):base(va,va)
  {;}
  public override void Draw() //重載,繪制正方形
  {
   Console.WriteLine("Square");
   Console.WriteLine("* * * * *");
   Console.WriteLine("*            *");
   Console.WriteLine("*            *");
   Console.WriteLine("*            *");
   Console.WriteLine("* * * * *");
   }
 }
}
//triangle.cs---源文件,用於三角形
using System;
namespace MyShape
{
 //定義普通三角形,作為其它三角形的基類
 public class Triangle:Shape
 {
  protected int a;
  protected int b;
  protected int c;
  public Triangle(int va,int vb,int vc)
  {
   a=va;
   b=vb;
   c=vc;
  }
  public override int GetArea()
  {
   int s=(a+b+c)/2;
   int area=(int)(Math.Sqrt(s*(s-a)*(s-b)*(s-c)));
   return area;
  }
 }
 //定義直角三角形
 public class RectTriangle:Triangle
 {
  new protected int a;
  new protected int b;
  public RectTriangle(int va,int vb):
  base(va,vb,(int)(Math.Sqrt(va*va+vb*vb)))
  {
   a=va;
   b=vb;
  }
  public override int GetArea()
  {
   int area=(int)(a*b/2);
   return area;
  }
  public override void Draw()
  {
   Console.WriteLine("RectTriangle");
   Console.WriteLine("*");
   Console.WriteLine("* *");
   Console.WriteLine("*    *");
   Console.WriteLine("*   *  *);
   }
 }
 //定義等腰直角三角形
 public class RectEqualTriangle:RectTriangle
 {
  new protected int a;
  public RectEqualTriangle(int va):base(va,va)
  {
   a=va;
  }
  public override int GetArea()
  {
   int area=(int)(a*a/2);
   return area;
  }
  public override void Draw()
  {
   Console.WriteLine("RectEqualTriangle");
   Console.WriteLine("*");
   Console.WriteLine("* *");
   Console.WriteLine("*    *");
   Console.WriteLine("*      *");
   Console.WriteLine("* * * * *");
   }
  }
}

//Mymessage.cs----源文件,用於定義程序顯示的一些信息
using System;
namespace MyMessage
{
 public class Message
 {
  public void Begin()
  {
   Console.WriteLine("***********            ***********");
   Console.WriteLine("*          *          *          *");
   Console.WriteLine("**********  *        *  **********");
   Console.WriteLine("*         *  *      *  *         *");
   Console.WriteLine("*          *  *    *  *          *");
   Console.WriteLine("*           *  *  *  *           *");
   Console.WriteLine("*            * * *  *            *");
   Console.WriteLine("*             *  * *             *");
   Console.WriteLine("*              *  *              *");
   Console.WriteLine("*               **               *");
   Console.WriteLine("*                *               *");
   Console.WriteLine("*           SHAPE GAME               *");
   Console.WriteLine("**********************************");
   }
   public bool Ask()
   {
    Console.WriteLine("Press 0 to exit the game");
    Console.WriteLine("Press any other key to continue the game");
    Console.WriteLine();
    int c=Console.Read();
    if(c==48)
        return false;
    return true;
    }
  }
}

//client.cs---客戶程序
using System;
using MyShape;
using MyMessage;
class ClIEntTest
{
 public static void Main()
 {
  int score=1000; //總分
  int win; //每一局贏取的分數
  int choice; //隨機獲得的圖形號
  int bet; //每一局下的注
  string s;
  Shape sp=new Shape();
  Random ran=new Random();
  Message msg=new Message();
  msg.Begin();
  while(true)
  {
   if(!msg.Ask())
     break;
   Console.WriteLine("Your Score:{0}",score);
   Console.WriteLine("Enter your bet:");
   Console.ReadLine();
   s=Console.ReadLine();
    //如果押注的輸入不正確,進行異常處理,並默認下注為100分
   try{
     bet=s.ToInt32();
   }
   catch{
     bet=100;
   }
   if(bet<score)
     score-=bet;
   else{
     bet=score;
     score=0;
   }
   Console.WriteLine("Remain Score:{0}",score);
   win=0;
   for(int i=0;i<3;i++)
   {
    choice=ran.Next()%4; //隨機數發生器
    switch(choice)
    {
     case 0:
       sp=new RectTriangle(5,4);
       goto end;
     case 1:
       sp=new RectEqualTriangle(5);
       goto end;
     case 2:
       sp=new Rectangle(5,4);
       goto end;
     case 3:
       sp=new Square(5);
     }
     end:
       //利用多態性,計算得分
        sp.Draw();
       win+=sp.GetArea()*(i+1)*bet/100;
       Console.WriteLine("Your win:{0}",win);
    }
     score+=win;
     Console.WriteLine("Your Score:{0}",scroe);
     if(score<100)
     {
      Console.WriteLine("Your remain score is not enough to play");
        break;
      }
     }
   }
}

對源代碼進行編譯的命令為:

csc/target:library /out:MyShape.dll MyShape.cs rect.cs triangle.cs

csc/target:library /out:MyMessage.dll MyMessage.cs

csc/reference:MyShape.dll;MyMessage.dll clIEnt.cs

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved