public void Test5() { var systemResources = new[] { new SystemResource(ResourceName.A, 10), new SystemResource(ResourceName.B, 9), new SystemResource(ResourceName.C, 3), }; var system = new SystemResources(systemResources, new NoOpSystemLog()); var processResources = new[] { new BankProcessResource(ResourceName.A, 1), new BankProcessResource(ResourceName.B, 2), new BankProcessResource(ResourceName.C, 1), }; var process = new BankProcess("P1", 100, processResources); system.ClaimResources(process).Should().BeTrue(); system.GetSystemSummary().Should().Be("Name A - Cur:9 Max:10 | Name B - Cur:7 Max:9 | Name C - Cur:2 Max:3"); system.RestoreResources(process); system.GetSystemSummary().Should().Be("Name A - Cur:10 Max:10 | Name B - Cur:9 Max:9 | Name C - Cur:3 Max:3"); }
public void Test3() { var systemResources = new[] { new SystemResource(ResourceName.A, 2), new SystemResource(ResourceName.B, 3), }; var system = new SystemResources(systemResources, new NoOpSystemLog()); var processResources = new[] { new BankProcessResource(ResourceName.A, 1), new BankProcessResource(ResourceName.B, 1), }; var process = new BankProcess("P1", 100, processResources); system.ClaimResources(process).Should().BeTrue(); system.GetSystemSummary().Should().Be("Name A - Cur:1 Max:2 | Name B - Cur:2 Max:3"); }
public void Test1() { var systemResources = new[] { new SystemResource(ResourceName.A, 0), new SystemResource(ResourceName.B, 0), }; var system = new SystemResources(systemResources, new NoOpSystemLog()); var processResources = new[] { new BankProcessResource(ResourceName.A, 1), new BankProcessResource(ResourceName.B, 1), }; var process = new BankProcess("P1", 100, processResources); system.ClaimResources(process).Should().BeFalse(); system.GetSystemSummary().Should().Be("Name A - Cur:0 Max:0 | Name B - Cur:0 Max:0"); }
// The logic and models depends on the file template private async void saveToDBAsync() { string templ = comboBox2?.SelectedItem?.ToString(); switch (templ) { case "Процессы банка": await Task.Run(() => { List <string> bankDepartments = new List <string>(); // patterns for process code string patternTheme = @"^\w?[0-9]+$"; // 2 hierarchy level string patternAction = @"^\w?[0-9]+\.[0-9]+$"; // 3 hierarchy level string patternProcess = @"^\w?[0-9]+\.[0-9]+\.[0-9]+$"; // 4 hierarchy level using (BankProcessContext bankProcessDB = new BankProcessContext()) { // actual models object // 1 hierarchy level BankProcType bankProcType = null; // 2 hierarchy level BankTheme bankTheme = null; // 3 hierarchy level BankAction bankAction = null; // 4 hierarchy level BankProcess bankProcess = null; // catalog BankDepartment bankDepartment = null; // file processing foreach (BankProcCSV bankProc in filesLoaded[templ]) { if (bankProc.Department == "") { if (bankProc.Id == "" && bankProcessDB.BankProcTypes.FirstOrDefault(p => p.Name == bankProc.Name) == null) { // Row to BankProcTypes (1 lvl) bankProcType = new BankProcType { Name = bankProc.Name }; bankProcessDB.BankProcTypes.Add(bankProcType); } else { if (Regex.IsMatch(bankProc.Id, patternTheme) && bankProcessDB.BankThemes.FirstOrDefault(p => p.Code == bankProc.Id) == null) { // Row to BankThemes (2 lvl) bankTheme = new BankTheme { Name = bankProc.Name, Code = bankProc.Id, BankProcType = bankProcType }; bankProcessDB.BankThemes.Add(bankTheme); } if (Regex.IsMatch(bankProc.Id, patternAction) && bankProcessDB.BankActions.FirstOrDefault(p => p.Code == bankProc.Id) == null) { // Row to BankActions (3 lvl) bankAction = new BankAction { Name = bankProc.Name, Code = bankProc.Id, BankTheme = bankTheme }; bankProcessDB.BankActions.Add(bankAction); } } } else { if (bankProc.Id != "") { if (Regex.IsMatch(bankProc.Id, patternProcess) && bankProcessDB.BankProcesses.FirstOrDefault(p => p.Code == bankProc.Id) == null) { // Row to BankProcesses (4 lvl) if (!bankDepartments.Contains(bankProc.Department)) { // Row to BankDepartments (catalog) bankDepartments.Add(bankProc.Department); bankDepartment = new BankDepartment { Name = bankProc.Department }; bankProcessDB.BankDepartments.Add(bankDepartment); } else { bankDepartment = bankProcessDB.BankDepartments.FirstOrDefault(d => d.Name == bankProc.Department); } bankProcess = new BankProcess { Name = bankProc.Name, Code = bankProc.Id, BankAction = bankAction, BankDepartment = bankDepartment }; bankProcessDB.BankProcesses.Add(bankProcess); } } else { // Logic for empty Rows from file } } bankProcessDB.SaveChanges(); } } }); comboBox1.Items.AddRange(new string[] { "BankProcTypes", "BankThemes", "BankActions", "BankProcesses", "BankDepartments" }); comboBox1.SelectedItem = "BankProcesses"; label6.Text = "Файл сохранен в БД"; break; default: label6.Text = "Укажите шаблон"; break; } }
private void Form1_Load(object sender, EventArgs e) { ptr = new BankProcess(Bank.startup); }
public static void Lab4_Bank() { const double customerDelayIn = 0.5; const double customerServiceDelay = 1; const double initialCustomerIn = 0.1; const int initialQueueForCarLines = 2; const int windowMaxQueue = 3; var q1 = new Queue <EventBase>(initialQueueForCarLines); var q2 = new Queue <EventBase>(initialQueueForCarLines); for (int i = 0; i < initialQueueForCarLines; i++) { q1.Enqueue(new EventBase { createTime = 0.0 }); q2.Enqueue(new EventBase { createTime = 0.0 }); } var creator = new Creator(customerDelayIn) { distribution = NumberGenerators.Distributions.EXPONENTIAL, tnext = initialCustomerIn }; var window1 = new BankProcess("window1", customerServiceDelay, windowMaxQueue) { //queue = initialQueueForCarLines, eventQueue = q1 //tnext = NumberGenerators.RandomNumberGenerators.Normal(1d, 0.3) }; window1.inAct(new EventBase { createTime = 0.0 }); var window2 = new BankProcess("window2", customerServiceDelay, windowMaxQueue) { //queue = initialQueueForCarLines, eventQueue = q2 //tnext = NumberGenerators.RandomNumberGenerators.Normal(1d, 0.3) }; window2.inAct(new EventBase { createTime = 0.0 }); var bankExit = new BankDesposer("exit"); var windowChoice = new BankAutoBranch(new List <(Element element, double percent)> { (window1, 0.5), (window2, 0.5) }); window1.windowsChoose = windowChoice; window2.windowsChoose = windowChoice; creator.nextElement = windowChoice; window1.nextElement = bankExit; window2.nextElement = bankExit; var model = new SimulationModel(new List <Element> { creator, window1, window2, bankExit }, SimulateTime); model.Simulate(false); model.PrintResultStatistic(); bankExit.printResult(); Console.WriteLine("Average clinets in bank: " + (window1.avgClientInBank + window2.avgClientInBank) / SimulateTime); Console.WriteLine("Number of line changes: " + windowChoice.QueueChanges); }
private void button5_Click(object sender, EventArgs e) { ptr += Bank.Backup; }
private void button6_Click(object sender, EventArgs e) { ptr = new BankProcess(Bank.startup); }
private void button4_Click(object sender, EventArgs e) { ptr += Bank.Mail; }
private void button3_Click(object sender, EventArgs e) { ptr += Bank.Powermanagement; }
private void button2_Click(object sender, EventArgs e) { ptr += Bank.Lights; }
private void button1_Click(object sender, EventArgs e) { ptr += Bank.Door; }
public void Run() { var systemResources = new[] { new SystemResource(ResourceName.A, 10), new SystemResource(ResourceName.B, 10), new SystemResource(ResourceName.C, 10), new SystemResource(ResourceName.D, 10), }; var stopwatch = new Stopwatch(); var consoleSystemLog = new ConsoleSystemLog( stopwatch); var system = new SystemResources(systemResources, consoleSystemLog); // ** var processes = new List <BankProcess>(); var resourcesSignal = new ManualResetEvent(false); var process1 = new BankProcess("P1", 500, new[] { new BankProcessResource(ResourceName.A, 5), new BankProcessResource(ResourceName.B, 5), new BankProcessResource(ResourceName.C, 6), new BankProcessResource(ResourceName.D, 5), }, resourcesSignal); processes.Add(process1); var process2 = new BankProcess("P2", 10, new[] { new BankProcessResource(ResourceName.A, 7), new BankProcessResource(ResourceName.B, 1), new BankProcessResource(ResourceName.C, 3), new BankProcessResource(ResourceName.D, 9), }, resourcesSignal); processes.Add(process2); var process3 = new BankProcess("P3", 300, new[] { new BankProcessResource(ResourceName.A, 1), new BankProcessResource(ResourceName.B, 1), new BankProcessResource(ResourceName.C, 1), new BankProcessResource(ResourceName.D, 1), }, resourcesSignal); processes.Add(process3); var tasks = new List <Task>(); stopwatch.Start(); foreach (var process in processes) { var task = Task.Run(() => { process.Start(system); }); tasks.Add(task); } foreach (var task in tasks) { task.Wait(); } stopwatch.Stop(); resourcesSignal.Dispose(); }