public void Withdrawl_Will_Use_Smaller_Bills_If_Needed() { //arrange ATM.ATM testDrawer = new ATM.ATM(); //act for (int i = 0; i < 6; i++) { testDrawer.Withdraw(240); } //assert for a few denominations int expected100BillCount = 0; int actual100BillCount = testDrawer.GetDenominationCount("$100"); Assert.AreEqual(expected100BillCount, actual100BillCount, "$100 Doesnt Match"); int expected50BillCount = 6; int actual50BillCount = testDrawer.GetDenominationCount("$50"); Assert.AreEqual(expected50BillCount, actual50BillCount, "$50 Doesnt Match"); int expected10BillCount = 6; int actual10BillCount = testDrawer.GetDenominationCount("$10"); Assert.AreEqual(expected10BillCount, actual10BillCount, "$10 Doesnt Match"); }
public ATM_Mainform() { InitializeComponent(); toScreen = richTextBox1; toListBox = listBox1; ATMObject = new ATM(); __thread = new Thread(new ThreadStart( StartATM ) ); __thread.IsBackground = true; __thread.Start(); }
/** * */ public CambioPIN(ATM atm, Sesion sesion, string nuevoPIN) { base.Fecha = DateTime.Now; base.Atm = atm; base.Sesion = sesion; base.getSecuencia(); this.nuevoPIN = nuevoPIN; base.Comision = 0M; base.EsImprimible = false; }
/** * */ public ConsultaSaldo(ATM atm, Sesion sesion) { base.Fecha = DateTime.Now; base.Atm = atm; base.Sesion = sesion; base.getSecuencia(); base.Comision = 15M; base.EsImprimible = true; }
/** * */ public Login(ATM atm, Sesion sesion) { base.Fecha = DateTime.Now; base.Atm = atm; base.Sesion = sesion; base.getSecuencia(); // Definimos un comportamiento menos dinamico pero correcto base.Comision = 0M; base.EsImprimible = false; }
public void Drawer_Will_Not_Overdraft() { //arrange int tooMuchMoney = 2000000; ATM.ATM testDrawer = new ATM.ATM(); //act testDrawer.Withdraw(tooMuchMoney); //assert Assert.IsTrue(testDrawer.Total > 0); }
/** * */ public Deposito(ATM atm, Sesion sesion, decimal monto) { base.Fecha = DateTime.Now; base.Atm = atm; base.Sesion = sesion; base.getSecuencia(); this.monto = monto; base.Comision = 15M; base.EsImprimible = true; }
public void Withdrawl_Updates_Drawer() { //arrange int withdrawlAmount = 217; int expected = 1643; ATM.ATM testDrawer = new ATM.ATM(); //act testDrawer.Withdraw(withdrawlAmount); //assert int actual = testDrawer.Total; Assert.AreEqual(expected, testDrawer.Total); }
//Activated to enable data racing with semaphores private void button3_Click(object sender, EventArgs e) { testingstate = 2; test = new ATM(ac, testingstate, this); test2 = new ATM(ac, testingstate, this); test.setOtherATM(test2); test2.setOtherATM(test); ThreadStart workracing1 = new ThreadStart(workThread); tester1 = new Thread(workracing1); tester1.Start(); ThreadStart workracing2 = new ThreadStart(workThread2); tester2 = new Thread(workracing2); tester2.Start(); string text = "---> TWO ATMS OPENED FOR TESTING"; mainBox.AppendText(text); mainBox.AppendText(Environment.NewLine); }
protected void Page_Load(object sender, EventArgs e) { if (Session["LoggedIn"] == null) { System.Threading.Thread.Sleep(2000); HttpContext.Current.Response.Redirect("Default.aspx"); } theAtm = Session["theAtm"] as ATM; cardNumber = Convert.ToInt32(Session["LoggedIn"]); try { LabelBalance.Text = theAtm.GetBalance(cardNumber).ToString(); } catch (Exception ex) { LabelBalance.Text = ex.Message; } }
private void UpdateATMInfo() { ATM a = ATM.GetInstance(); Cash dc = a.CashInDispenser(); Cash rc = a.CashInReceiver(); d20Label.Text = dc.Twenties.ToString(); d10Label.Text = dc.Tens.ToString(); dTotalLabel.Text = dc.Total.ToString(); r100Label.Text = rc.Hundreds.ToString(); r50Label.Text = rc.Fifties.ToString(); r5Label.Text = rc.Fives.ToString(); r1Label.Text = rc.Ones.ToString(); rTotalLabel.Text = rc.Total.ToString(); machineChecks.Items.Clear(); Check[] checks = ATM.GetInstance().CheckInfo(); foreach (Check c in checks) { machineChecks.Items.Add(c); } }
private void FillPersonInfo() { personLabel.Text = atMachine.PersonType; personName.Text = atMachine.Name; idLabel.Text = atMachine.ID; hundredLabel.Text = atMachine.Cash.Hundreds.ToString(); fiftyLabel.Text = atMachine.Cash.Fifties.ToString(); twentyLabel.Text = atMachine.Cash.Twenties.ToString(); tenLabrel.Text = atMachine.Cash.Tens.ToString(); fiveLabel.Text = atMachine.Cash.Fives.ToString(); oneLabel.Text = atMachine.Cash.Ones.ToString(); totalLabel.Text = "$" + atMachine.Cash.Total; ATM.GetInstance().AddMembership(atMachine.Member); Check[] checks = atMachine.ChecksOnHand(); personChecks.Items.Clear(); foreach (Check c in checks) { personChecks.Items.Add(c); } }
static void Main(string[] args) { //Load initial data ATM atm = new ATM(); //Weclome Message Console.WriteLine("Welcome to the Command Line ATM"); Console.WriteLine("////////////////////////////"); Console.WriteLine(""); DisplayCommands(); //Display Current Cash Register atm.DisplayContents(); //Enter Command string command = String.Empty; while (command != "Q") { Console.WriteLine("Please Enter a Command"); string[] response = Console.ReadLine().ToUpper().Split(' '); command = response[0]; switch (command) { case "R": //Restock atm.Restock(); Console.WriteLine("ATM Restocked"); atm.DisplayContents(); break; case "W": //Withdraw //convert amount string to int, break if doesnt work int withdrawAmount; try { withdrawAmount = Convert.ToInt32(response[1].Split('$')[1]); } catch (Exception) { Console.WriteLine("Invalid $ Amount, make sure you ncluded '$'"); break; } //Prevent Overdrafting if (withdrawAmount > atm.Total) { Console.WriteLine($"Withdrawl amount is more than machine total, please enter an amount smaller than ${atm.Total}"); break; } //Attempt Withdrawl var result = atm.Withdraw(withdrawAmount); if (result.success) { Console.WriteLine($"Success: Dispensed ${result.amount}"); atm.DisplayContents(); } else { Console.WriteLine($"Insufficient Funds to complete this request. Please request a new amount"); } break; case "I": //Display Denominations for (int i = 1; i < response.Length; i++) { //Use parsed string to find the denomination in the drawer string denominationName = response[i]; int count = atm.GetDenominationCount(denominationName); //If Denomination is not found, alert user if (count == -1) { Console.WriteLine($"Denomination {denominationName} was not found. Did you remember to Include '$'?"); } else // Write denomination to the console { Console.WriteLine($"{denominationName} - {count} Bills"); } } break; case "Q": //Quit Console.WriteLine("Thanks for using the ATM"); System.Threading.Thread.Sleep(2000); break; case "H": //Command list (Help) DisplayCommands(); break; default: Console.WriteLine("Invalid Command"); break; } } }
private void button_replenishment_Click(object sender, EventArgs e) { uint number_to_replenish = 0; // общее количество купюр для пополнения bool everything_is_ok = true; for (int i = 0; i < textbox_array.Length; i++) // идём по всем номиналам купюр { try { uint quantity_for_value = 0; if (textbox_array[i].Text != "") // если поле пустое - оставляем ноль, иначе ловит ошибку // здесь могут быть и буквы, поэтому это всё происходит под try: { quantity_for_value = Convert.ToUInt32(textbox_array[i].Text); } if (quantity_for_value < 0) // отрицательное значение - тоже плохо { everything_is_ok = false; label_what_to_do.Text = "Количества не могут быть отрицательными!"; } number_to_replenish += quantity_for_value; // количество купюр увеличиваем на значение из поля // проверяем, не превысит ли количество вносимых купюр установленное максимально возможное: if ((number_to_replenish + ATM.how_many_banknotes()) > ATM.get_maximum_banknotes_number()) { everything_is_ok = false; label_what_to_do.Text = "Ограничение! Общее количество не должно превышать " + (ATM.get_maximum_banknotes_number() - ATM.how_many_banknotes()); } } catch { everything_is_ok = false; label_what_to_do.Text = "Введены некорректные количества, введите корректные:"; } if (!everything_is_ok) { break; // если на каком-то поле некорректное значение или перебор по купюрам, обрываем проверку } } if (!everything_is_ok) { // красим строку сигнальным цветом, чтобы пользователь увидел, что надо исправить label_what_to_do.ForeColor = Color.Yellow; } else // everything_is_ok { uint summ_of_replenishment = 0; // считаем общую сумму, на которую пополняем var value = Banknote_values.ten_rubles; for (int i = 0; i < textbox_array.Length; i++) // опять идём по всем номиналам, полям для количеств { textbox_array[i].Visible = false; // выше было проверено, что всё ок, поэтому поля для ввода количеств больше не нужны uint quantity_for_value = 0; // количество для пополнения определённого номинала if (textbox_array[i].Text != "") // иначе не сможем конвертировать пустоту в число { quantity_for_value = Convert.ToUInt32(textbox_array[i].Text); } ATM.replenish_banknote(Banknote.get_banknote_value_by_text(value), quantity_for_value); summ_of_replenishment += (Banknote.get_banknote_value_by_text(value) * quantity_for_value); value++; } // показываем результат, прячем лишнее label_what_to_do.Text = "Успешно внесена сумма: " + summ_of_replenishment; label_what_to_do.ForeColor = Color.MediumSpringGreen; button_replenishment.Visible = false; label1.Visible = false; label2.Visible = false; label3.Visible = false; label4.Visible = false; label5.Visible = false; label6.Visible = false; label7.Visible = false; label8.Visible = false; } }
static void closeCard() { ATM.closeCard(); }
public Main_menu_form() { InitializeComponent(); // при запуске главного меню в первый раз, заполняем банкомат случайным количеством денег в рамках ограничений на количество купюр ATM.create_random_ATM_stock(); }
//Used for determining the paired ATM's public void setOtherATM(ATM other) { otherATM = other; }
protected void Page_Load(object sender, EventArgs e) { atm = new ATM(1); Session["theATM"] = atm; }
private void UpdateAccountInfo() { ATM a = ATM.GetInstance(); accountInfo.Text = $"Account# {a.CurrentAccount.Number} ${a.CurrentAccount.Balance}"; }
private void logoutButton_Click(object sender, EventArgs e) { ATM.GetInstance().Logout(); logoutButton.Visible = false; ChangeTab(ATM.GetInstance().CurrentScreen); }
private void invButton_Click(object sender, EventArgs e) { ATM.GetInstance().SelectAccount(2); ChangeTab(ATM.GetInstance().CurrentScreen); UpdateAccountInfo(); }
protected void Page_Load(object sender, EventArgs e) { atm = new ATM(1); // Testkod då databusen jävlas med mig //List<string> hej = new List<string>();//---------- //hej.Add("tja"); //---------- //hej.Add("hej");//---------- //hej.Add("hallå");//---------- //hej.Add("hejdå");//---------- //Session["PanelRecipe"] =hej; //---------- // S**t på testkoden if (Session["PanelRecipe"] != null) { Create25Recipe(); System.Threading.Thread.Sleep(500); Page.ClientScript.RegisterStartupScript(this.GetType(), "Toogle", "toggleRecipe()", true); } //// Testkod då databusen jävlas med mig //int[] nej = new int[2]; //---------- //nej[0] = 3; //---------- //nej[1] = 2; //---------- //Session["GetMoney"] = nej; //---------- //// S**t på testkoden if (Session["GetMoney"] != null) { GetMyMoney(); System.Threading.Thread.Sleep(7000); Page.ClientScript.RegisterStartupScript(this.GetType(), "Toogle", "toggleMoney()", true); } }
public static void Menu(List <Account> listOfAccounts, Account currentAccount) { int userChoice; string usernameEntry; string passwordEntry; int withdrawDepositEntry; Console.WriteLine("What would you like to do?: \n" + "[1] Register an Account \n" + "[2] Login \n"); userChoice = int.Parse(Console.ReadLine()); if (userChoice == 1) { Console.WriteLine("Enter your username \n"); usernameEntry = Console.ReadLine(); Console.WriteLine("\nEnter your password \n"); passwordEntry = Console.ReadLine(); ATM.Register(usernameEntry, passwordEntry, listOfAccounts); } else if (userChoice == 2) { Console.WriteLine("Enter your username \n"); usernameEntry = Console.ReadLine(); Console.WriteLine("\nEnter your password \n"); passwordEntry = Console.ReadLine(); currentAccount = ATM.Login(usernameEntry, passwordEntry, listOfAccounts, currentAccount); } else { Console.WriteLine("Error enter a valid selection"); Console.Clear(); } if (currentAccount.Name != null && currentAccount.Password != null) { while (currentAccount.Name != null && currentAccount.Password != null) { { Console.WriteLine("What would you like to do?: \n" + "[1] Logout \n" + "[2] Show Current Balance \n" + "[3] Deposit \n" + "[4} Withdraw \n"); userChoice = int.Parse(Console.ReadLine()); if (userChoice == 1) { Console.Clear(); currentAccount = ATM.Logout(currentAccount); } else if (userChoice == 2) { ATM.CheckBalance(currentAccount); } else if (userChoice == 3) { Console.WriteLine("How much would you like to deposit? \n"); withdrawDepositEntry = int.Parse(Console.ReadLine()); currentAccount = ATM.Deposit(withdrawDepositEntry, currentAccount); } else if (userChoice == 4) { Console.WriteLine("How much would you like to withdraw? \n"); withdrawDepositEntry = int.Parse(Console.ReadLine()); currentAccount = ATM.Withdraw(withdrawDepositEntry, currentAccount); } } } } }
// функция проверяет, можем ли мы выдать заданную сумму и заполняет массив купюр (достоинство-количество), // которыми можно выдать. Возвращает истину, если всё получилось и ложь - если нет. private bool check_and_withdrawal(bool by_large_values) { label_no_result.Visible = false; uint users_wish = 0; // в этой переменной будем хранить сумму, которую хочет получить пользователь // СНАЧАЛА ПРОВЕРЯЕМ, НОРМАЛЬНУЮ ЛИ СУММУ ХОЧЕТ ПОЛЬЗОВАТЕЛЬ try { // пытаемся получить сумму из окошка для неё, если там не число - ловим ошибку users_wish = Convert.ToUInt32(textBox_for_summ.Text); } catch { MessageBox.Show("Запрашиваемая сумма не корректна!"); } if (users_wish == 0) // 0 - нормальное число, но не в данном случае { label_no_result.Text = "Введите ненулевую и недробную сумму"; return(false); } // если пользователь хочет больше, чем есть - тоже сразу нет: uint ATM_balanсe = ATM.how_much_money(); if (users_wish > ATM_balanсe) { label_no_result.Text = "В банкомате нет столько денег!\nПроверьте баланс и попробуйте ввести сумму меньше."; return(false); } // если пользователь хочет более мелкие деньги, чем есть, то тоже нет: if (users_wish % Banknote.get_banknote_value_by_text(min_available_value()) != 0) { label_no_result.Text = "Минимальная доступная купюра: "; label_no_result.Text += Banknote.get_banknote_value_by_text(min_available_value()); label_no_result.Text += "р. Скорректируйте сумму для выдачи с учётом этого."; return(false); } // для каждой транзакции будем заполнять массив с проверочными остатками заново: banknotes_stock_for_check.Clear(); // пара сокращений: Banknote_values min_value = Banknote_values.ten_rubles; Banknote_values max_value = Banknote_values.how_many_banknotes_values; if (by_large_values) // нужна выдача крупными купюрами, о мелких не беспокоимся, просто копируем данные { for (var value = min_value; value < max_value; value++) { Banknote next_banknote = new Banknote(Banknote.get_banknote_value_by_text(value), ATM.how_many_banknotes_of(value)); banknotes_stock_for_check.Add(next_banknote); } } else // нужна выдача мелкими купюрами, тут код подлиннее, чтобы сразу понять, какими купюрами можем обойтись { // изначально полагаем максимальную мелкую купюру равной 200р Banknote_values max_small_value = Banknote_values.two_hundred_rubles; uint summ_of_small_values = 0; // будем считать сумму, которую можем выдать мелкими купюрами // копируем остатки банкомата в массив для проверки выдачи суммы, считаем сумму мелких купюр: for (var value = min_value; value < max_value; value++) { Banknote next_banknote = new Banknote(Banknote.get_banknote_value_by_text(value), ATM.how_many_banknotes_of(value)); banknotes_stock_for_check.Add(next_banknote); if (value <= max_small_value) { summ_of_small_values += next_banknote.get_summ(); // если посчитали всю сумму мелкими купюрами, и её не хватает, то добавляем к мелким следующую купюру if ((value == max_small_value) && (summ_of_small_values < users_wish)) { max_small_value++; // мы не будем проверять здесь, что значение выйдет за предел диапазона, т.к. уже проверили, что всех денег банкомата для суммы хватит } } } max_value = max_small_value; // ограничиваем максимальный номинал максимальной мелкой купюрой, которой хватит для выдачи суммы мелкими купюрами } // очистим массив снимаемых купюр, будем пополнять его по мере набора желаемой суммы try_to_withdraw.Clear(); // сумма, которую снимаем: uint total_summ_to_withdraw = 0; // ЖАДНЫЙ АЛГОРИТМ, подбираем купюры для выдачи начиная с самой крупной подходящей: while (users_wish > 0) // будем уменьшать это значение по мере подбора банкнот { // идём от наиболее больших сумм, это же проверка, так мы быстрее наберём нужную сумму Banknote_values max_enum_value = max_available_value_less_than(users_wish, max_value); var max_available_banknote_value = Banknote.get_banknote_value_by_text(max_enum_value); // максимально "доступный" номинал по факту может оказаться и не доступным: if (banknotes_stock_for_check[Convert.ToInt32(max_enum_value)].get_banknote_quantity() == 0) { // тогда мы не можем эту купюру использовать и набор суммы завершён label_no_result.Text = "Не удаётся набрать запрашиваемую сумму, не хватает каких-то купюр.\n"; label_no_result.Text += "Попробуйте ввести сумму "; label_no_result.Text += Convert.ToString(total_summ_to_withdraw); // очистим уже частично заполненный массив снимаемых купюр: try_to_withdraw.Clear(); return(false); // проверка окончена } // ИНАЧЕ продолжаем, добавляем купюру в список для снятия: banknotes_stock_for_check[Convert.ToInt32(max_enum_value)].substract_banknote(); try_to_withdraw.Add(max_available_banknote_value); total_summ_to_withdraw += max_available_banknote_value; users_wish -= max_available_banknote_value; } // дошли до сюда, значит набрали всю сумму // скрываем кнопки и поле для суммы, готовим текст о результате textBox_for_summ.Visible = false; button_by_small_value.Visible = false; button_by_large_value.Visible = false; // снимаем все подобранные банкноты по очереди, и печатаем их неповторяющиеся номиналы var used_banknote = try_to_withdraw[0]; // это для печати, сохраняем номинал первой банкноты на выдачу var number_of_used_banknotes = 0; // это тоже для печати string info_about_banknotes = "\nиспользованы купюры:\n" + used_banknote; foreach (var value in try_to_withdraw) { ATM.withdraw_banknote(value); if (value != used_banknote) // показываем количество для выданной купюры { info_about_banknotes += " x " + number_of_used_banknotes + '\n' + value; used_banknote = value; // начинаем рассматривать следующую number_of_used_banknotes = 0; } number_of_used_banknotes++; } info_about_banknotes += " x " + number_of_used_banknotes; // добавляем информацию о количестве последней выданной купюры label_for_positive_result.Text = "ВЫДАНА СУММА " + total_summ_to_withdraw; label_for_positive_result.Text += info_about_banknotes; label_for_positive_result.Visible = true; return(true); }
static void Main(string[] args) { string input = "input"; char command = 'a'; ATM atm = new ATM(); Console.WriteLine("Welcome to the ATM."); Console.WriteLine("Options:"); Console.WriteLine("1. Withdraw - Press W plus amount in the form 'W $x'"); Console.WriteLine("2. Display Balance: Press I followed by the bills that you wish to check in the format I $x $y $z"); Console.WriteLine("3. Restock the machine: Press R"); Console.WriteLine("4. Quit: Press Q"); do { input = Console.ReadLine(); try { command = input[0]; } catch (IndexOutOfRangeException) { Console.WriteLine("Error: Invalid command"); continue; } if (command.Equals('W') || command.Equals('I') || command.Equals('R') || command.Equals('Q')) { switch (command) { case 'W': string temp = input.Substring(input.IndexOf("$") + 1); int amt = 0; try { amt = int.Parse(temp); } catch (FormatException) { Console.WriteLine("Error: Invalid command"); break; } bool success = atm.Withdraw(amt); if (success) { Console.WriteLine("Success: Dispensed " + "$" + amt); Console.WriteLine(); break; } else { Console.WriteLine("Error: Insufficient Funds"); Console.WriteLine(); } break; case 'I': int i = 0; List <string> sDenominations = new List <string>(); StringBuilder d = new StringBuilder(); string s = ""; for (i = 0; i < input.Length; i++) { if (char.IsNumber(input[i])) { d.Append(input[i]); } if (input[i] == ' ') { s = d.ToString(); sDenominations.Add(s); d = new StringBuilder(); } } s = d.ToString(); sDenominations.Add(s); List <int> bills = new List <int>(); for (i = 1; i < sDenominations.Count(); i++) { try { bills.Add(int.Parse(sDenominations[i])); } catch (FormatException) { Console.WriteLine("Error: Invalid command"); } } atm.Denominations(bills); break; case 'R': atm.Restock(); Console.WriteLine("Restocked Machine"); break; } } else { Console.WriteLine("Error: Invalid command"); Console.WriteLine(); } }while (command != 'Q'); Console.WriteLine("Thank you for using the ATM. Press any key to exit."); Console.ReadKey(); }
protected void Page_Load(object sender, EventArgs e) { if (Session["LoggedIn"] == null) { System.Threading.Thread.Sleep(2000); HttpContext.Current.Response.Redirect("Default.aspx"); } cardNumber = Convert.ToInt32(Session["LoggedIn"]); theAtm = Session["theAtm"] as ATM; //if (!theAtm.IsthereHundreds()) //{ // getMoneyMessage.Text = "Det finns inga hundralappar i denna bankomat"; //} //if (!theAtm.IsthereFiveHundreds()) //{ // getMoneyMessage.Text = "Det finns inga femhundralappar i denna bankomat"; //} //if (!theAtm.IsthereFiveHundreds() && !theAtm.IsthereFiveHundreds()) //{ // getMoneyMessage.Text = "Det finns inga sedlar i denna bankomat"; //} }