Documente Academic
Documente Profesional
Documente Cultură
ASACHI” IAŞI
PROIECT
Programare Windows
2
I. SIMULAREA FUNCTIONARII UNUI ATM
3
A. Modelarea Use Case
• Determină cum se pot obţine anumite rezultate folosind produsul ce trebuie creat,
fără a interesa ordinea.
• Prezintă informaţiile sub forma diagramelor Use Case şi a scenariilor asociate.
Diagrama Use Case descrie ce face un program sau subprogram dar nu precizează nimic
despre cum este realizată o funcţionalitate.
4
2. Intre actorul bancomat si Use Case-urile EliberareCard, AfiseazaMeniu,
VerificaPin, BlocareCard si VerificarePozitieCard exista o relatie de asociere,
pentru a putea exprima interactiunea intre obiectele pe care le uneste
(Bancomatul si functiile acestuia).
3. Intre Use Case-urile VerificaPozitieCard si IntroduceCard exista o relatie de tip
include, pentru a explica dependenta Use Case-ului IntroduceCard de functiile
Use Case-ul VerificaPozitieCard.
4. Intre Use Case-urile IntroducePin si AfiseazaMeniu exista o relatie de tip include,
pentru a explica dependenta Use Case-ului IntroducePin de functiile Use Case-ul
AfiseazaMeniu.
5. Intre Use Case-ul VerificaPin(E) si Use Case-urile PlatesteFurnizor,
AfiseazaOperatiuni, RetrageNumerar, InterogheazaSold(A,B,C,D) exista o relatie
de tip include pentru a explica dependenta dintre A, B, C, D si use case-ul E.
6. Intre Use Case-ul VerificaPin (A) si BlocareCard(B) exista o relatie de tip extend,
prin care use case-ul A controleaza daca B va fi executat sau nu.
7. Intre Use Case-ul AfiseazaInformatiiTranzactii (A) si EfectueazaTranzactii(B)
exista o relatie de tip extend, prin care use case-ul A controleaza daca B va fi
executat sau nu.
8. Intre Use Case-ul AfiseazaInformatiiTranzactii (A) si ElibereazaChitanta(B)
exista o relatie de tip extend, prin care use case-ul A controleaza daca B va fi
executat sau nu.
9. Intre Use Case-ul EfectueazaTranzactii (A) si VerificaPin(B) exista o relatie de
tip extend, prin care use case-ul A controleaza daca B va fi executat sau nu.
10. Intre Use Case-ul AfiseazaMeniu(A) siUse Case-urile InterogheazaSold,
RetrageNumerar, AfiseazaOperatiuni, PlatesteFurnizori (B1,B2,B3,B4) exista o
relatie de tip generalizare, in care case-urile derivate B1, B2, B3, B4 controleaza
ce se executa si ce se modifica din case-ul de baza.
Efectuarea Tranzactiilor:
5
B. Diagrama de clasa:
Diagrama de clase este folosită pentru a modela structura (viziunea statică asupra)
unui sistem. O astfel de diagramă conţine clase / interfeţe, obiecte şi relaţii care se
stabilesc între acestea.
Clasa ATM:
Caracteristici:
- atribute: ID-ul, Adresa, Banca;
- metode: elibereaza chitanta, elibereaza bani;
Atm-ul poate elibera bani si chitanta, daca a fost solicitata.
Clasa Tranzactie:
Caracteristici:
- atribute: cont, pin;
- metode: tranzactie, retragere numerar, plata catre furnizori,
ultimele 10 tranzactii, interogare sold.
Responsabilitati:
6
- Permite clientului sa-si aleaga tranzactia dorita;
- Efectueaza retragerea de numerar solicitata;
- Efectueaza platile catre furnizori;
- Memoreaza ultimele 10 operatiuni efectuate de client;
- Permite interogarea soldului.
Clasa Client:
Caracteristici:
- atribute: cont, data_expirarii, nume, prenume, pin, suma;
- metode: client, getDate, get Prenume, getCont, getSuma,
getPin;
Responsabilitati:
- Preia informatiile legate de contul clientului;
- Retine suma solicitata de client.
Clasa Meniu:
Caracteristici:
- atribute: idLimba;
- metode: meniu, listeaza optiuni, getOptiuni;
Responsabilitati:
- Afiseaza Meniul;
- Afiseaza lista cu otiunile posibile;
- Permite selectarea unei optiuni.
Clasa Verifica:
Caracteristici:
- atribute: cont, pin;
- metode: verificare Pin, Verificare Card, verificare Suma.
Responsabilitati:
- Verifica daca PIN-ul introdus este cel corect;
- Verifica daca suma de bani din cont.
Clasa Limba:
Caracteristici:
- atribute: idLimba;
- metode: limba, get id limba.
Responsabilitati:
- Permite selectarea limbii in care se va dori dialogarea cu ATM-
ul;
- Retine optiunea selectata.
7
C. Diagrama de stare
Diagrama de stare este folosită pentru a modela comportamentul unui singur
obiect. Diagrama de stări specifică o secvenţă de stări prin care trece un obiect de-a
lungul vieţii sale ca răspuns la evenimente împreună cu răspunsul la aceste evenimente.
8
D. Diagrama de activitati:
Diagramea de activitati scoate în evidenţă controlul execuţiei de la o activitate la
alta.
9
E. Diagrama de secventa:
Diagrama de secvenţă pune accentul pe aspectul temporal (ordonarea în timp a
mesajelor).
Mesajele trimise de la un obiect la altul sunt de tip sincron deoarece controlul
executiei revine la obiectul – “expeditor” dupa ce obiectul – “destinatar” isi va
termina executia.
10
F. Diagrama de colaborare:
Diagrama de colaborare este o diagramă de interacţiuni care pune accentul pe
organizarea structurală a obiectelor care participă la interacţiune.
11
I.2. CODUL PROGRAMULUI:
Clase:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OleDb;
using System.Data;
using System.Windows.Forms;
namespace Bancomat.Clases
{
class ATM
{
string ID;
string Adresa;
string Banca;
double SumaBani;
public ATM()
{
}
public ATM(string _ID, string _adresa, string _banca, double
_sumaBani)
{
this.ID = _ID;
this.Adresa = _adresa;
this.Banca = _banca;
this.SumaBani = _sumaBani;
}
12
+ " Va MULTUMIM " + '\r' + '\n'
+ "*********************"; ;
return text;
}
try
{
connection.ConnectionString =
Bancomat.Properties.Settings.Default.db1ConnectionString;
connection.Open();
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OleDb;
using System.Windows.Forms;
namespace Bancomat.Clases
{
class Client
{
int ID;
string nume;
string prenume;
string cont;
string exp_date;
double suma;
int pin;
public Client()
{
}
public Client(string cont)
{
13
this.cont = cont;
}
try
{
connection.ConnectionString =
Bancomat.Properties.Settings.Default.db1ConnectionString;
connection.Open();
OleDbDataReader dataReader;
dataReader = command.ExecuteReader();
while (dataReader.Read())
{
this.ID =
Convert.ToInt16(dataReader["Id"].ToString());
this.nume = dataReader["Nume"].ToString();
this.prenume = dataReader["Prenume"].ToString();
this.cont = dataReader["Cont"].ToString();
this.exp_date = dataReader["ExpDate"].ToString();
this.suma =
Convert.ToDouble(dataReader["Suma"].ToString());
this.pin =
Convert.ToInt16(dataReader["PIN"].ToString());
}
dataReader.Close();
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
}
public int getId()
{
return this.ID;
}
public string getNume()
{
return this.nume;
}
public string getPrenume()
{
return this.prenume;
14
}
public string getCont()
{
return this.cont;
}
public string getExpDate()
{
return this.exp_date;
}
public double getSuma()
{
return this.suma;
}
public int getPin()
{
return this.pin;
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Bancomat.Clases
{
class Meniu
{
int idLimba;
public Meniu()
{
}
15
{
string cont;
int pin;
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
chitanta = "*********************" + '\r' + '\n'
+ "BRD - Groupe Societe Generale " + '\r' +
'\n'
+ "*********************" + '\r' + '\n'
+ DateTime.Now + '\r' + '\n'
+ "Retragere numerar"+ '\r' + '\n'
+ "Suma: RON " + suma.ToString() + '\r' + '\n'
+ "*********************" + '\r' + '\n'
+ " Va MULTUMIM " + '\r' + '\n'
+ "*********************";
return chitanta;
}
public string PlatesteFurnizori(double suma,string furnizor)
{
string chitanta;
OleDbConnection connection = new OleDbConnection();
try
{
connection.ConnectionString =
Bancomat.Properties.Settings.Default.db1ConnectionString;
16
connection.Open();
}
public void Ultimele10Operatiuni()
{
//TableAdapter cu DataSet implementat pe loc in Formul
SimulareATM, query-ul (interogarea SQL) fiind atasat pe DataSet.
}
try
{
connection.ConnectionString =
Bancomat.Properties.Settings.Default.db1ConnectionString;
connection.Open();
OleDbDataReader dataReader;
dataReader = command.ExecuteReader();
while (dataReader.Read())
{
17
suma =
Convert.ToDouble(dataReader["Suma"].ToString());
}
dataReader.Close();
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
return suma;
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OleDb;
using System.Windows.Forms;
namespace Bancomat.Clases
{
class Verifica
{
string cont;
int pin;
try
{
connection.ConnectionString =
Bancomat.Properties.Settings.Default.db1ConnectionString;
connection.Open();
OleDbDataReader dataReader;
dataReader = command.ExecuteReader();
18
while (dataReader.Read())
{
sold =
Convert.ToDouble(dataReader["Suma"].ToString());
}
dataReader.Close();
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
return sold>suma;
}
}
}
Form: SimulareATM
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Bancomat.Clases;
namespace Bancomat
{
public partial class SimulareATM : Form
{
private string cont;
private int pin;
private int ID;
public SimulareATM()
{
InitializeComponent();
}
this.operatiuniTableAdapter.Fill(this.db1DataSet.operatiuni);
this.label4.Text = "";
this.LoginPanel.Visible = false;
this.MeniuPanel.Visible = false;
this.SoldPanel.Visible = false;
this.OperatiuniPanel.Visible = false;
this.FurnizoriPanel.Visible = false;
this.retragerePanel.Visible = false;
}
19
private void button4_Click(object sender, EventArgs e)
{
this.LimbaPanel.Visible = false;
this.LoginPanel.Visible = true;
}
if (client.getCont() != null)
{
cont = client.getCont();
pin = client.getPin();
ID = client.getId();
this.LoginPanel.Visible = false;
this.MeniuPanel.Visible = true;
this.toolStripStatusLabel1.Text = "Conected";
}
else
{
MessageBox.Show("Incorrect login");
}
if (result == DialogResult.No)
{
this.label3.Text = "Aveti in cont: " + sold + "RON";
}
else
{
this.label3.Text = "Aveti in cont: " + sold + "RON";
this.textBox1.Text = atm.ElibereazaChitanta(sold);
}
20
this.SoldPanel.Visible = false;
}
this.MeniuPanel.Visible = false;
this.OperatiuniPanel.Visible = true;
this.operatiuniTableAdapter.SelectTOP10(this.db1DataSet.operatiuni,
ID);
}
21
MessageBox.Show("Insuficienti bani in cont", "ATM",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
if (result == DialogResult.No)
{
}
else
{
this.textBox1.Text = chitanta;
}
this.MeniuPanel.Visible = true;
this.FurnizoriPanel.Visible = false;
DialogResult result;
ATM atm = new ATM();
Verifica verifica = new Verifica(cont, pin);
Tranzactie tranzactie = new Tranzactie(cont, pin);
bool OK =
verifica.Sold(Convert.ToDouble(this.Vod_textBox5.Text));
this.MeniuPanel.Visible = false;
if (result == DialogResult.No)
{
}
else
{
this.textBox1.Text = chitanta;
22
}
this.MeniuPanel.Visible = true;
this.FurnizoriPanel.Visible = false;
}
if (result == DialogResult.No)
{
}
else
{
this.textBox1.Text = chitanta;
}
this.MeniuPanel.Visible = true;
this.FurnizoriPanel.Visible = false;
}
23
}
bool OK =
verifica.Sold(Convert.ToDouble(this.textBox3.Text));
if (OK)
{
chitanta =
tranzactie.RetragereNumerar(Convert.ToDouble(this.textBox3.Text));
atm.InregistreazaOperatiune("Retragere numerar",
ID);
this.label4.Text = this.textBox3.Text;
}
else
{
MessageBox.Show("Insuficienti bani in cont", "ATM",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
if (result == DialogResult.No)
{
}
else
{
this.textBox1.Text = chitanta;
}
this.label4.Visible = true;
this.MeniuPanel.Visible = true;
this.retragerePanel.Visible = false;
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
24
using System.Windows.Forms;
namespace Bancomat
{
public partial class EditareUtilizatori : Form
{
public EditareUtilizatori()
{
InitializeComponent();
}
}
}
}
Form: Inregistrare
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace Bancomat
{
public partial class Inregistrare : Form
25
{
public Inregistrare()
{
InitializeComponent();
}
private bool check()
{
bool ret = true;
if (this.textBox1.Text.Length == 0 ||
this.textBox2.Text.Length == 0 ||
this.maskedTextBox1.Text.Length == 0 ||
this.textBox4.Text.Length == 0 ) ret = false;
return ret;
}
private void button1_Click(object sender, EventArgs e)
{
if (!check())
{
MessageBox.Show("Completati toate campurile");
}
else
{
int nr;
OleDbConnection scon = new
OleDbConnection(Bancomat.Properties.Settings.Default.db1ConnectionStrin
g);
scon.Open();
string scommand = "SELECT Count(Cont) FROM users WHERE
Cont = '" + this.maskedTextBox1.Text + "'";
OleDbCommand scmd = new OleDbCommand(scommand, scon);
nr = (int)scmd.ExecuteScalar();
scon.Close();
if (nr != 0)
{
MessageBox.Show("Exista acest cont!", "ATM",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
this.textBox1.Clear();
this.textBox2.Clear();
this.textBox3.Clear();
this.maskedTextBox1.Clear();
this.textBox4.Clear();
this.toolStripStatusLabel1.Text = "Introduceti
datele";
this.toolStripStatusLabel1.ForeColor =
System.Drawing.Color.Blue;
}
else
{
26
+ this.textBox2.Text + "','"
+ this.maskedTextBox1.Text + "','"
+ this.textBox4.Text + "','"
+ this.textBox3.Text + "')";
OleDbCommand cmd = new OleDbCommand(command, con);
cmd.ExecuteNonQuery();
con.Close();
this.toolStripStatusLabel1.Text = "Utlizatorul a
fost adaugat cu succes";
this.toolStripStatusLabel1.ForeColor =
System.Drawing.Color.Red;
}
}
}
}
}
FORM: Main
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Bancomat.Clases;
namespace Bancomat
{
public partial class Main : Form
{
public Main()
{
InitializeComponent();
}
27
{
Close();
}
private void
inregistrareUtilizatorToolStripMenuItem_Click_1(object sender,
EventArgs e)
{
Inregistrare inreg = new Inregistrare();
inreg.MdiParent = this;
inreg.Show();
}
namespace Bancomat.Clases
{
class Meniu
{
int idLimba;
28
public Meniu()
{
}
namespace Bancomat
{
public partial class OperatiuniUtilizator : Form
{
public OperatiuniUtilizator()
{
InitializeComponent();
}
this.operatiuniTableAdapter.Fill(this.db1DataSet.operatiuni);
this.operatiuniTableAdapter.FillByUserID(this.db1DataSet.operatiuni,
new
29
System.Nullable<int>(((int)(System.Convert.ChangeType(userIdToolStripTe
xtBox.Text, typeof(int))))));
}
catch (System.Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
}
}
FORM: ToateOperatiuni
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Bancomat
{
public partial class ToateOperatiunile : Form
{
public ToateOperatiunile()
{
InitializeComponent();
}
this.operatiuniTableAdapter.Fill(this.db1DataSet.operatiuni);
}
}
}
FORM: VizualizareUtilizatori
using System;
30
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Bancomat
{
public partial class Vizualizare : Form
{
public Vizualizare()
{
InitializeComponent();
}
}
}
}
31