一个调水问题,本人菜鸟,求高手帮助.
南水北调工程东线江苏江阴至山东济宁之间,地势北高南低,沿途需要建立一系列大型抽水泵站进行梯级抽水。通常每两个泵站之间需要一座水库作为中转。低处泵站将水抽到中转水库,再由高处泵站向更高的中转水库抽水。设有泵站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#