ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 14.06.2023

Просмотров: 438

Скачиваний: 10

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

given += ("1000 - " + count.ToString() + ", ");

count1tr = count;

}

int count5sr = sum / 500;

count = GetCountBanknotes("500");

if (count >= count5sr)

{

givenSum += count5sr * 500;

sum -= count5sr * 500; //вычислить остаток, который выдавать другими купюрами

given += ("500 - " + count5sr.ToString() + ", ");

}

else if (count < count5sr)

{

givenSum += count * 500;

sum -= count5sr * 500; //вычислить остаток, который выдавать другими купюрами

given += ("500 - " + count.ToString() + ", ");

count5sr = count;

}

int count1sr = sum / 100;

count = GetCountBanknotes("100");

if (count >= count1sr)

{

givenSum += count1sr * 100;

sum -= count1sr * 100; //вычислить остаток, который выдавать другими купюрами

given += ("100 - " + count1sr.ToString() + ", ");

}

else if (count < count1sr)

{

givenSum += count * 100;

sum -= count1sr * 100; //вычислить остаток

given += ("100 - " + count.ToString() + ", ");

count1sr = count;

}

if (sum != 0) //в итоге остаток должен стать равен 0

{ //если этого не случилось, значит в хранилище нет каких-либо купюр

MessageBox.Show("Невозможно выдать требумую сумму"); //в достаточном количестве

lPin.Visible = false;

btYes.Visible = false;

btNo.Visible = false;

}

else

{

UpdateBanknotes("5000", count5tr);

UpdateBanknotes("1000", count1tr);

UpdateBanknotes("500", count5sr);

UpdateBanknotes("100", count1sr);

server.GetCash(numAccount, givenSum);

server.InsertToHistory("", dateTransact, -givenSum, "", "getCash");

MessageBox.Show(given); //отобразить сообщение, какими купюрами в каком количестве

} //выдана данная сумма

}

else // если на балансе нет трубуемой суммы

{

lPin.Visible = true;

lPin.Text = "Недостаточно денег";

}

}

int GetCountBanknotes(string denomination)

{

int count = 0;

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OleDb.12.0;Data Source=" + Application.StartupPath.ToString() + "\\bank.accdb;Persist Security Info=False;");

conn.Open();

string sqlFindCard = "SELECT Banknotes.countBanknotes FROM Banknotes WHERE denomination=@denomination";

OleDbCommand cmd = new OleDbCommand(sqlFindCard, conn);

OleDbParameter[] prms = new OleDbParameter[1];

prms[0] = new OleDbParameter("@denomination", OleDbType.VarChar);

prms[0].Value = denomination;

cmd.Parameters.AddRange(prms);

OleDbDataReader dr = cmd.ExecuteReader();

while (dr.Read()) count = Convert.ToInt32(dr.GetValue(0));

return count;

}

void UpdateBanknotes(string denomination, int count)

{

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OleDb.12.0;Data Source=" + Application.StartupPath.ToString() + "\\bank.accdb;Persist Security Info=False;");

conn.Open();

string sqlUpdateBalance = "UPDATE Banknotes SET countBanknotes=(countBanknotes-@count) WHERE denomination=@denomination";

OleDbCommand cmd = new OleDbCommand(sqlUpdateBalance, conn);

OleDbParameter[] prms = new OleDbParameter[2];

prms[0] = new OleDbParameter("@count", OleDbType.Integer);

prms[0].Value = count;

prms[1] = new OleDbParameter("@denomination", OleDbType.VarChar);

prms[1].Value = denomination;

cmd.Parameters.AddRange(prms);

cmd.ExecuteNonQuery();

conn.Close();

conn.Dispose();

}

private void bt100r_Click(object sender, EventArgs e)

{

GetCash(100);

}

private void bt200r_Click(object sender, EventArgs e)

{

GetCash(200);

}

private void bt500r_Click(object sender, EventArgs e)

{

GetCash(500);

}

private void bt1tr_Click(object sender, EventArgs e)

{

GetCash(1000);


}

private void bt5tr_Click(object sender, EventArgs e)

{

GetCash(5000);

}

private void bt10tr_Click(object sender, EventArgs e)

{

GetCash(10000);

}

private void bt20tr_Click(object sender, EventArgs e)

{

GetCash(20000);

}

private void bt50tr_Click(object sender, EventArgs e)

{

GetCash(50000);

}

private void btYes_Click(object sender, EventArgs e) //печать чека

{

string date = DateTime.Now.ToString();

string numCard = "********" + numAccount.Substring(8); //номер карты, где отображены только последние 4 цифры

string print = "Время оперции: " + date +

"\n\nНомер счета: " + numCard + //распечать номер счета

"\nВыдано: "+givenSum+ //выданную сумму

"\nОстаток: "+server.GetBalance(numAccount).ToString(); //и остаток по карте

MessageBox.Show(print);

btNo_Click(sender, e); //отобразить элементы для выполнения новой операции

}

private void btNo_Click(object sender, EventArgs e) //не печатать чек

{

lAction.Text = "Выберите действие";

lPin.Visible = false;

gbSum.Visible = false;

btNo.Visible = false;

btYes.Visible = false;

pWireTransfer.Visible = false;

gbSum.Visible = false;

}

private void btExit_Click(object sender, EventArgs e) //выход, прекращение обслуживания

{ //отображение первоначальной формы

lAction.Text = "Вставьте карту";

lPin.Visible = false;

attempt = 3;

gbButtons.Visible = false;

pTransact.Visible = false;

pWireTransfer.Visible = false;

tbCard.Clear();

tbCardTansact.Clear();

tbSum.Clear();

mtbMobile.Clear();

pin = "";

gbDisplay.Text = "";

}

string transact = ""; //переменная для определения типа перевода

private void btTransact_Click(object sender, EventArgs e) //денежный перевод

{

lAction.Text="Денежный перевод";

lPin.Visible = false;

gbSum.Visible = false;

//отобразить панель для ввода номера карты и суммы для перевода

pTransact.Visible = true;

mtbMobile.Visible = false;

tbCardTansact.Visible = true;

lNum.Text = "Номер карты";

transact="card";

}

//выполнить перевод

private void btRunTransact_Click(object sender, EventArgs e)

{

//денежный перевод на карту

if(transact=="card")

{

string numCard = tbCardTansact.Text; //номер карты

double sum = Convert.ToDouble(tbSum.Text); //сумма

dateTransact = DateTime.Now;

access = server.CheckCard(numCard); //проверка указанной карты

if (access == true) //если карта найдена

{

if(sum<=server.GetBalance(numAccount))

{

server.GetCash(numAccount, sum);

server.Transact(numCard, sum); //зачисление средств на указанный счет

server.InsertToHistory(numAccount, dateTransact, -sum, "", "transact");

double s = server.GetBalance(numCard);

server.InsertToHistory(numCard, dateTransact, sum, "", "transact");

MessageBox.Show("Перевод успешно выполнен");

pTransact.Visible = false;

lAction.Text = "Выберите действие";

}

else

{

MessageBox.Show("Недостаточно денег на счете");

}

}

else MessageBox.Show("Номер карты не найден");

}

//оплата сотовой связи

if(transact=="tel")

{

string tel=mtbMobile.Text; //номер телефона

double sum = Convert.ToDouble(tbSum.Text); //сумма пополнения

if (sum <= server.GetBalance(numAccount))

{

server.GetCash(numAccount, sum);

server.InsertToHistory(tel, dateTransact, -sum, "", "tel");

MessageBox.Show("Пополнение счета "+tel+" успешно выполнено");


pTransact.Visible = false;

lAction.Text = "Выберите действие";

}

else

{

MessageBox.Show("Недостаточно денег на счете");

}

}

}

//оплата сотовой связи

private void btMobile_Click(object sender, EventArgs e)

{

lAction.Text = "Оплата сотовой связи";

lPin.Visible = false;

gbSum.Visible = false;

//отобразить панель для ввода номера телефона и суммы для пополнения

pTransact.Visible = true;

mtbMobile.Visible = true;

tbCardTansact.Visible = false;

lNum.Text = "Номер телефона";

transact = "tel";

}

private void btWireTransfer_Click(object sender, EventArgs e)

{

lAction.Text = "Выберите вид перевода";

lPin.Visible = false;

gbSum.Visible = false;

pWireTransfer.Visible = true;

}

private void btCommunal_Click(object sender, EventArgs e)

{

FormCommunalPaid fcp = new FormCommunalPaid();

fcp.typeTransact = "communal";

fcp.numAccount = numAccount;

fcp.Show();

}

private void button1_Click(object sender, EventArgs e)

{

FormCommunalPaid fcp = new FormCommunalPaid();

fcp.typeTransact = "energy";

fcp.numAccount = numAccount;

fcp.Show();

}

private void btHistory_Click(object sender, EventArgs e)

{

lPin.Visible = false;

gbSum.Visible = false;

pWireTransfer.Visible = false;

FormHistory fh = new FormHistory();

fh.numAccount = numAccount;

fh.Show();

}

}

}

Листинг кода класса «Сервер банка»

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.Data.OleDb;

using System.Windows.Forms;

namespace Банкомат

{

class ClassBankServer

{

OleDbDataReader dr;

int idAccount;

OleDbDataReader SqlSelectCard(string numCard) //получение информации по карте

{

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OleDb.12.0;Data Source=" + Application.StartupPath.ToString() + "\\bank.accdb;Persist Security Info=False;");

conn.Open();

string sqlFindCard = "SELECT Accounts.idAccount, Clients.nameClient, Accounts.pin, Accounts.balance " +

"FROM Accounts INNER JOIN Clients ON Accounts.idClient = Clients.idClient WHERE Accounts.numAccount=@numCard";

OleDbCommand cmd = new OleDbCommand(sqlFindCard, conn);

OleDbParameter[] prms = new OleDbParameter[1];

prms[0] = new OleDbParameter("@numCard", OleDbType.VarChar);

prms[0].Value = numCard;

cmd.Parameters.AddRange(prms);

dr = cmd.ExecuteReader();

return dr;

}

public bool CheckCard(string numCard) //проверка карты

{

bool access = false;

dr = SqlSelectCard(numCard);

while (dr.Read()) access = true;

return access;

}

public bool CheckPin(string numCard, string pin) //проверка пин-кода

{

bool access = false;

dr = SqlSelectCard(numCard);

while (dr.Read())

{

if(pin==dr.GetValue(2).ToString()) access = true;

}

return access;

}

public double GetBalance(string numCard) //проверка баланса

{

double balance=0;

dr = SqlSelectCard(numCard);

while (dr.Read())

{

balance = Convert.ToDouble(dr.GetValue(3));

idAccount = Convert.ToInt32(dr.GetValue(0));

}

return balance;

}

public void GetCash(string numCard, double sum) //выдача денег - изменение баланса по карте

{

//перезаписать данные о счете,

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OleDb.12.0;Data Source=" + Application.StartupPath.ToString() + "\\bank.accdb;Persist Security Info=False;");

conn.Open();

string sqlUpdateBalance = "UPDATE Accounts SET balance=(balance-@sum) WHERE numAccount=@numCard";

OleDbCommand cmd = new OleDbCommand(sqlUpdateBalance, conn);

OleDbParameter[] prms = new OleDbParameter[2];


prms[0] = new OleDbParameter("@sum", OleDbType.Double);

prms[0].Value = sum;

prms[1] = new OleDbParameter("@numCard", OleDbType.VarChar);

prms[1].Value = numCard;

cmd.Parameters.AddRange(prms);

cmd.ExecuteNonQuery();

conn.Close();

conn.Dispose();

}

public void Transact(string numCard, double sum) //зачисление средств на счет при денежном переводе другому клиенту

{

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OleDb.12.0;Data Source=" + Application.StartupPath.ToString() + "\\bank.accdb;Persist Security Info=False;");

conn.Open();

string sqlUpdateBalance = "UPDATE Accounts SET balance=(balance+@sum) WHERE numAccount=@numCard";

OleDbCommand cmd = new OleDbCommand(sqlUpdateBalance, conn);

OleDbParameter[] prms = new OleDbParameter[2];

prms[0] = new OleDbParameter("@sum", OleDbType.Double);

prms[0].Value = sum;

prms[1] = new OleDbParameter("@numCard", OleDbType.VarChar);

prms[1].Value = numCard;

cmd.Parameters.AddRange(prms);

cmd.ExecuteNonQuery();

conn.Close();

conn.Dispose();

}

public void InsertToHistory(string transactAccount, DateTime dateTransact, double sumTransact, string personalAccount, string typeTransact) //добавить запись об операции в историю

{

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OleDb.12.0;Data Source=" + Application.StartupPath.ToString() + "\\bank.accdb;Persist Security Info=False;");

conn.Open();

string sqlInsertHistory = "INSERT INTO History(idAccount, transactAccount, dateTransact, sumTransact, personalAccount, typeTransact) " +

"VALUES (@idAccount, @transactAccount, @dateTransact, @sumTransact, @personalAccount, @typeTransact) ";

OleDbCommand cmd = new OleDbCommand(sqlInsertHistory, conn);

OleDbParameter[] prms = new OleDbParameter[6];

prms[0] = new OleDbParameter("@idAccount", OleDbType.Integer);

prms[0].Value = idAccount;

prms[1] = new OleDbParameter("@transactAccount", OleDbType.VarChar);

prms[1].Value = transactAccount;

prms[2] = new OleDbParameter("@dateTransact", OleDbType.Date);

prms[2].Value = dateTransact;

prms[3] = new OleDbParameter("@sumTransact", OleDbType.Double);

prms[3].Value = sumTransact;

prms[4] = new OleDbParameter("@personalAccount", OleDbType.VarChar);

prms[4].Value = personalAccount;

prms[5] = new OleDbParameter("@typeTransact", OleDbType.VarChar);

prms[5].Value = typeTransact;

cmd.Parameters.AddRange(prms);

cmd.ExecuteNonQuery();

conn.Close();

conn.Dispose();

}

public OleDbDataReader History(DateTime dateStart, DateTime dateEnd) //получение истории операций по карте

{

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OleDb.12.0;Data Source=" + Application.StartupPath.ToString() + "\\bank.accdb;Persist Security Info=False;");

conn.Open();

string sqlSelectHistory = "SELECT History.dateTransact, History.transactAccount, History.sumTransact, History.typeTransact " +

"FROM History WHERE History.idAccount=@idAccount AND History.dateTransact>=@dateStart AND History.dateTransact<=@dateEnd";

OleDbCommand cmd = new OleDbCommand(sqlSelectHistory, conn);

OleDbParameter[] prms = new OleDbParameter[3];

prms[0] = new OleDbParameter("@idAccount", OleDbType.VarChar);

prms[0].Value = idAccount;

prms[1] = new OleDbParameter("@dateStart", OleDbType.Date);

prms[1].Value = dateStart;

prms[2] = new OleDbParameter("@dateEnd", OleDbType.Date);

prms[2].Value = dateEnd;

cmd.Parameters.AddRange(prms);

dr = cmd.ExecuteReader();

return dr;

}

public string GetName(string typeTransact, string transactAccount) //получение наименования владельца счета для перевода средств

{

string name = "";

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OleDb.12.0;Data Source=" + Application.StartupPath.ToString() + "\\bank.accdb;Persist Security Info=False;");

conn.Open();

string sqlSelectName = "";

if (typeTransact == "transact") //денежные переводы другому клиенту банка


{

sqlSelectName = "SELECT Clients.nameClient FROM Accounts INNER JOIN Clients ON Accounts.idClient = Clients.idClient WHERE Accounts.numAccount=@transactAccount";

}

if (typeTransact == "communal" || typeTransact == "energy") //коммунальные услуги

{

sqlSelectName = "SELECT nameProvider FROM Providers WHERE accountProvider=@transactAccount";

}

OleDbCommand cmd = new OleDbCommand(sqlSelectName, conn);

OleDbParameter[] prms = new OleDbParameter[1];

prms[0] = new OleDbParameter("@transactAccount", OleDbType.VarChar);

prms[0].Value = transactAccount;

cmd.Parameters.AddRange(prms);

try

{

dr = cmd.ExecuteReader();

while (dr.Read()) name = dr.GetValue(0).ToString();

}

catch { name = "Мобильная связь"; }

return name;

}

}

}

Листинг кода формы «Коммунальные платежи»

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Data.OleDb;

namespace Банкомат

{

public partial class FormCommunalPaid : Form

{

public FormCommunalPaid()

{

InitializeComponent();

}

public string typeTransact, numAccount; //номера текущего счета и счета для перевода

ClassProviders provider;

ClassBankServer server;

string accountProvider, personalAccount; //номер счета поставщика и лицевой счет

int idProvider;

private void FormCommunalPaid_Load(object sender, EventArgs e)

{

if (typeTransact == "communal") //при оплате коммунальныъ платежей

{

this.Text = "Оплата коммунальных услуг";

}

if (typeTransact == "energy") //при оплате электроэнергии

{

this.Text = "Оплата электроэнергии";

}

provider = new ClassProviders();

OleDbDataReader dr = provider.FillProviders(typeTransact); //получение списка поставщиков по типу предоставляемых услуг

DataTable prov = new DataTable(); //создание таблицы для связывания с ней элементов выпадащего списка

prov.Columns.Add("id"); //колонка код поставщика

prov.Columns.Add("name"); //колонка наименование

while (dr.Read())

{

prov.Rows.Add(Convert.ToInt32(dr.GetValue(0)), dr.GetValue(1).ToString()); //заполнение таблицы

}

cbProvider.DisplayMember = "name"; //отображаемые члены - наименование

cbProvider.ValueMember = "id"; //члены значений - код

cbProvider.DataSource = prov; //связывание таблицы с элементами списка

}

private void cbProvider_SelectedIndexChanged(object sender, EventArgs e) //при смене поставщика

{

idProvider = Convert.ToInt32(cbProvider.SelectedValue); //получаем код поставщика

accountProvider = provider.FindAccountProvider(idProvider); //получаем номер банковского счета этого поставщика

lAccount.Text = accountProvider; //выводим номер на фому

}

private void btCheck_Click(object sender, EventArgs e) //проверить лицевой счет клиента

{

lClient.Text = ""; //очитска полей ФИО и адреса клиента

lAddress.Text = "";

personalAccount = tbPersonalAccount.Text;

OleDbDataReader dr = provider.CheckPersonalAccount(personalAccount); //вызов метода проверки лицевого счета

while (dr.Read())

{

lClient.Text = dr.GetValue(0).ToString(); //заполнение полей ФИО и адреса клиента

lAddress.Text = dr.GetValue(1).ToString();

}

if (lClient.Text == "") MessageBox.Show("Указанный лицевой счет не найден");