模拟内容
模拟银行的业务处理过程,银行有三个窗口,每天8点开门,12点关门,银行业务主要包括两种:存钱和取钱,每件业务的处理时间为3~5分钟。
分析银行的具体业务办理情况,通过随机数生成并模拟银行业务办理事件处理过程,分析各个窗口的排队长短,编写程序最终实现完整处理过程,建立“银行窗口模拟系统”。
1.如果程序开始运行时产生的随机时间在8-12点之间,则运行该程序,否则提示银行已关门;
2.程序开始运行时,随机产生当时银行存在的人数,及三个窗口的排列情况,并按其先后顺序排序1,2,3……;
3.随机产生每个窗口正在办理业务的情况,包括存钱和取钱,及其每个窗口正在办理业务所剩余的时间,并表示出来;
4.程序运行中随机产生每个时刻进来的人数,并进行排列;
5.假如第一个人处理完业务,则队列依次前移;
6.假如到了12点,系统提示银行停止办理业务。
模拟思路
使用数据结构中的队列存放银行的所有客户,使用c#中的random类的对象生成随机数产生随机时间,使用c#中的Datetime类进行时间与字符串之间的转换和时间的比较和运算,只有产生的随机时间在8:00-12:00之间才能进入系统,使用c#中的System.Threading.Timer线程计时器实现定时执行三个窗口的处理业务的过程,最后使用c#的StreamWriter类将业务的具体信息写入到文件。
编程实现
首先定义几个全局变量,分别为银行初始人数,初始生成的随机时间,之后的时间都在次基础上增加,直到银行的关门时间12:00,一个队列模拟银行的排队队列,一个定时器对象定时执行三个窗口的函数。
public static int peoplenum = 30;//银行初始人数
public static string time;//生成的初始随机时间
public static Queue<string> queue = new Queue<string>();//排队队列
public static Timer myTimer;//定时器对象
编些一个函数模拟银行的欢迎界面。
//欢迎界面
public static void welcome()
{
Console.WriteLine("\t\t 银行业务模拟与离散事件模拟程序系统");
Console.WriteLine("------------------------------------------------");
Console.WriteLine("温馨提示:");
Console.WriteLine("开门时间:早上8点,关门时间:早上12点");
Console.WriteLine("------------------------------------------------");
}
编写函数用于比较当前随机生成的时间是否在银行的上班时间,如果在就询问用户是否需要进入系统,如果用户选择是则开始模拟银行的业务处理流程。
//比较随机时间是否在8:00-12:00
public static void cmpTime()
{
time = getDate();
string starttime = "08:00:00";
string endtime = "12:00:00";
DateTime rantime = Convert.ToDateTime(time);
DateTime stime = Convert.ToDateTime(starttime);
DateTime etime = Convert.ToDateTime(endtime);
Console.Write("当前时间是:"+time);
if (rantime > stime && rantime < etime)
{
Console.WriteLine("是否要进入系统?(输入yes进入系统,输入其他内容退出系统)"