当前位置:编程学习 > C#/ASP.NET >>

一个调水问题,本人菜鸟,求高手帮助.

南水北调工程东线江苏江阴至山东济宁之间,地势北高南低,沿途需要建立一系列大型抽水泵站进行梯级抽水。通常每两个泵站之间需要一座水库作为中转。低处泵站将水抽到中转水库,再由高处泵站向更高的中转水库抽水。设有泵站A,B和中转水库C,泵站设有一定数量的抽水机,水库有一定容量,当水位高于允许最高水位,禁止低处泵站注水;当水位低于允许最低水位,禁止高处泵站抽水。其中设水库容量为V,泵站抽水速度为a
请用C#语言设计一个仿真程序,要求:
1, 两座泵站在随机时间,以随机时间长度抽水或注水。
2, 水库根据自身容量允许或禁止泵站抽水,以保证自身处于安全水位。
3, 泵站即使在水库允许抽水/注水条件下,依然可以根据自身状态(如高/低处水库水位情况)选择抽水/注水。由于只考虑两个泵站一个水库,此功能可由随机数实现。
--------------------编程问答-------------------- 1.用一个Timer时间计时器控件,设定好时间间隔
2.写一个抽水/注水的方法,里面可以这样设计:写两个模块模拟A和B的抽水/注水动作,再用2个变量定死水库C的最高水位和最低水位,然后用3个变量表示A,B和C的当前水位,通过判断C的水位,再决定AB两个水库水位的增减。
3.最后,在时间计时器里调用这个方法,也就是说程序会按照你设定的时间间隔去调用2里你写的方法,去调整AB的水位。
--------------------编程问答-------------------- 可以写一下具体的代码吗? --------------------编程问答--------------------

using System;

namespace 抽水
{
    class Program
    {
        //C水库容量
        static void Main(string[] args)
        {

            A aPump = new A(10);
            B bPump = new B(10);
            C cRes = new C();
            cRes.MaxV = 500;
            cRes.MinV = 100;
            cRes.V = 200;
            Random r = new Random();
            while (true)
            {
                //界面
                Console.WriteLine("当前C容量为{0} (允许容量为{1}-{2})", cRes.V, cRes.MinV, cRes.MaxV);
                Console.WriteLine("当前A状态为 {0}", aPump.Open ? "减水" : "关");
                Console.WriteLine("当前B状态为 {0}", bPump.Open ? "加水" : "关");
                //A B 状态随机变化
                aPump.Open = (r.Next(2) == 0);
                bPump.Open = (r.Next(2) == 0);
                //检查最低水位 没问题则允许水泵A抽水
                if (cRes.MinV <= cRes.V - aPump.a)
                {
                    aPump.SubtractWater(ref cRes.V);
                }
                else
                {
                    Console.WriteLine("最低水位报警 不允许减水");
                }
                //检查最高水位 没问题则允许水泵B抽水
                if (cRes.MaxV >= cRes.V + bPump.a)
                {
                    bPump.AddWater(ref cRes.V);
                }
                else
                {
                    Console.WriteLine("最高水位报警 不允许加水");
                }
                System.Threading.Thread.Sleep(1000);
                Console.Clear();
            }
        }
    }
    //水库C 
    public class C
    {
        //当前容量为
        public int V;
        //允许容量为
        public int MaxV;
        public int MinV;
    }

    //泵
    public class Pump
    {
        //状态 true=打开 false=关闭
        private bool open = false;

        public bool Open
        {
            get { return open; }
            set { open = value; }
        }

        //抽水速度 设为5 只读
        private int _a;

        public int a
        {
            get { return _a; }
            set { _a = value; }
        }
    }
    //泵A
    public class A : Pump
    {
        /// <summary>
        /// 抽走水
        /// </summary>
        /// <param name="v">抽水前水库C的容量</param>
        /// <returns>抽水后水库C的容量</returns>
        public void SubtractWater(ref int v)
        {
            if (this.Open)
            {
                v -= this.a;  
            }
        }
        /// <summary>
        /// 泵
        /// </summary>
        /// <param name="runoff">流量 抽水速度</param>
        public A(int runoff)
        {
            a = runoff;
        }
    }
    //泵B
    public class B : Pump
    {
        /// <summary>
        /// 抽来水
        /// </summary>
        /// <param name="v">抽水前水库C的容量</param>
        /// <returns>抽水后水库C的容量</returns>
        public void AddWater(ref int v)
        {
            if (this.Open)
            {
                v += this.a;
            }
        }
        /// <summary>
        /// 泵
        /// </summary>
        /// <param name="runoff">流量 抽水速度</param>
        public B(int runoff)
        {
            a = runoff;
        }
    }
}


自己写了一下 不知道LZ是不是这个意思
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,