Mediul de Dezvoltare Integrat (ide) Microsoft Visual Studio 2013

CUPRINS

Capitolul I. Introducere

Context

Aici se va scrie despre domeniul temei alese, despre medicina si aplicatiile informatice

Domeniul temei

Aici scri despre bolile cronice si importanta monitorizarii lor

Tema proiectului

Descrii in linii mari proiectul

Capitolul II. Studiu bibliografic

Cauti aplicatii existente si le descrii+screensoturi

La sfarsit faci o scurta comparatie intre ele

Capitolul III. Fundamentare teoretica

3.1 Limbajul C#

C# este un limbaj de programare modern, de uz general, orientat pe obiecte, fiind derivat din limbajele de programare C și C++. Este dezvoltat de către firma Microsoft, fiind aprobat de către ECMA și ISO și lansat oficial în primăvara anului 2002.

Creatorii limbajului au fost o echipă din cadrul Microsoft condusă de către Anders Hejlsberg, creândul ca un instrument de dezvoltare pentru arhitectura .NET, oferind o modalitate facilă și eficientă de a scrie programe pentru sistemul Windows, internet, componente software, etc.

Deși C# este derivat din limbajele de nivel înalt C și C + + și fiind un limbaj de programare orientată pe obiecte, este asemănător cu limbajul Java, având numeroase caracteristici puternice de programare care fac să fie îndrăgit de o multitudine de programatori din întreaga lume.

Următoarele motive fac ca C # să fie un limbaj profesional utilizat pe scară largă:

Modern, de uz general;

Orientat pe obiecte;

Orientat spre componentă;

Ușor de învățat;

Limbaj structurat;

Produce programe eficiente;

Poate fi compilată pe o varietate de platforme de calculatoare;

Parte din .Net Framework;

Caracteristici puternice de programare ale limbajului:

Condiții booleene;

Colectare Automată a “Gunoiului” (AGC);

Bibliotecă standard;

Posibilitatea integrării codului de asamblare;

Proprietăți și evenimente;

Delegați și gestionarea evenimentelor;

Generice ușor de utilizat;

Indexatori;

Compilare codiționată;

Multithreading simplu;

LINQ și expresii lambda;

Integrare cu windows;

3.2 Platforma .NET

Cadrul(Framework) .NET este un cadru de dezvoltare software de la Microsoft care gestionează cererile care vizează acest mediu. Acesta oferă un mediu de programare controlat în care software-ul poate fi dezvoltat, instalat și executat pe sisteme de operare bazate pe Windows. Se compune din motorul comun de programare sau common language runtime(CLR), care prevede gestionarea memoriei și a altor servicii de sistem, precum și o bibliotecă extinsă de clasă, care permite programatorilor să profite de cod robust și fiabil pentru toate domeniile majore de dezvoltare de aplicații.

Microsoft a început dezvoltarea cadrului .NET pe la sfârșitul anilor 90, fiind lansată prima versiune beta 1.0 la finele anului 2000, ajungându-se până în momentul de față la versiunea 4.5.

Cadrul .NET este conceput pentru a îndeplini următoarele obiective:

Pentru a oferi un mediu consistent de programare orientat pe obiecte fie că codul obiect este stocat și executat la nivel local, executat la nivel local dar distribuit pe internet, sau executat de la distanță.

Pentru a oferi un mediu pentru executarea codului, care minimizează implementarea software și conflictele între versiuni.

Pentru a oferi un mediu pentru executarea codului, care promovează executarea codului în condiții de siguranță, inclusiv codul creat de către o terță parte necunoscută sau de semi-încredere.

Pentru a oferi un mediu pentru executarea codului, care elimină problemele de performanță ale mediilor scriptate sau interpretate.

Pentru a face experiența dezvoltatorului consecventă într-o gamă variată de tipuri de aplicații, cum ar fi aplicații bazate pe Windows și aplicații bazate pe Web.

Pentru a construi toate comunicările pe standardele industriei pentru a se asigura că codul bazat pe arhitectura .NET se poate integra cu oricare alt cod.

Caracteristici ale motorului comun de programare (CLR):

Gestionează memoria, firele de execuție, executarea codului, verificarea siguranței codului, compilarea, și alte servicii de sistem. Aceste caracteristici sunt esențiale pentru codul gestionat care rulează pe CLR.

În ceea ce privește securitatea, componentelor gestionate le sunt acordate diferite grade de încredere, în funcție de o serie de factori care includ originea lor (cum ar fi internetul, rețeaua de întreprindere, sau computerul local). Acest lucru înseamnă că o componentă s-ar putea sau nu să fie capabilă de a efectua operațiuni precum accesul fișierelor, accesul regiștrilor, sau alte funcții sensibile, chiar dacă aceasta este utilizată în aceiași aplicație activă.

Impune o securitate în accesarea codului. De exemplu, utilizatorii pot avea încredere că un executabil încorporat într-o pagină Web poate juca o animație pe ecran sau cânta un cântec, dar nu pot accesa datele lor cu caracter personal, sistemul de fișiere, sau rețeaua. Caracteristicile de securitate ale motorului permit programelor legitim implementate pe internet să aibă caracteristici extrem de bogate.

Impune de asemenea, cod robust, prin implementarea unei infrastructuri de verificare strictă, numit sistemul de tip comun (CTS). CTS asigură că tot codul gestionat este de tipul ”auto descriere”. Diversele compilatoare Microsoft generează cod gestionat care este în conformitate cu CTS. Acest lucru înseamnă că codul gestionat poate consuma alte tipuri gestionate și cazuri, în timp ce aplică strict un tip de fidelitate și de siguranță.

În plus, mediul de gestionare al motorului elimină multe probleme obișnuite de program. De exemplu, motorul se ocupă în mod automat de aspectul obiectului și gestionează referințele la obiecte, eliberândule atunci când nu mai sunt utilizate. Acestă gestionare automată a memoriei rezolvă două dintre cele mai des întâlnite erori și anume, pierderi de memorie și referințe de memorie invalide.

Accelerează de asemenea, productivitatea dezvoltatorului. De exemplu, programatorii pot scrie aplicații in limbajul lor de dezvoltare, putând profita din plin de CLR, de biblioteca de clasă, și de componentele scrise în alte limbi de către alți dezvoltatori. Orice furnizor de compilator care alege să vizeze CLR-ul poate face acest lucru. Compilatoarele care vizează .NET Framework fac ca caracteristicile .NET Framework să fie disponibile pentru codul existent scris în acel limbaj, facilitând foarte mult procesul de migrare pentru aplicațiile existente.

În timp ce CLR-ul este destinat pentru software-ul de viitor, el de asemenea sprijină software-ul de azi și de ieri. Interoperabilitatea între codul gestionat și negestionat permite dezvoltatorilor să continue utilizarea componentelor COM și DLL-uri necesare.

CLR este conceput pentru a îmbunătăți performanța. Deși CLR oferă multe servicii de rulare standard, codul gestionat nu este niciodată interpretat. O caracteristică numită compilare just-in-time (JIT) permite întregului cod gestionat să ruleze în limba nativă a mașinii sistemului pe care este executat. Între timp, managerul de memorie elimină posibilitățile de memorie fragmentată și crește memoria “locație de trimitere” pentru o performanță mai ridicată pe viitor.

Și în cele din urmă, CLR poate fi găzduit de aplicații server de înaltă performanță, cum ar fi Microsoft SQL Server și Internet Information Services (IIS). Această infrastructură permite utilizarea codului gestionat pentru a scrie logica afacerii, lăsând timp pentru a savura performanța superioară ale celor mai bune servere de întreprindere din industrie care susțin găzduirea runtime.

Biblioteca de clase ale arhitecturi .NET:

Este o colecție de tipuri reutilizabile care se integrează strâns cu CLR. Biblioteca de clasă este orientată pe obiecte, oferind tipuri în care funcționalitățile pot deriva din propriul cod gestionat. Acest lucru nu numai că face tipurile cadrului .NET ușor de folosit, dar de asemenea, reduce timpul asociat cu învățarea de noi caracteristici ale .NET Framework. În plus, componentele de la terțe părți pot fi integra perfect cu clasele în .NET Framework.

De exemplu, clasele de colectare .NET pun la dispoziție un set de interfețe care pot fi folosite pentru a crea o colecție de clase proprii. Colecția de clase proprii se va imbina perfect cu clasele în .NET Framework.

Acestă bibliotecă de clase orientată pe obiecte permite realizarea unor serii de sarcini de programare cum ar fi gestionarea șirurilor, colectarea datelor, conectivitate la baze de date, și accesul la fișiere. În plus față de aceste sarcini comune, biblioteca de clase include tipurile care suportă o varietate de scenarii de dezvoltare specializate. De exemplu, puteți utiliza .NET Framework pentru a dezvolta următoarele tipuri de aplicații și servicii:

Aplicații consolă;

Aplicații Windows GUI (Windows Forms);

Aplicații WPF (Windows Presentation Foundation);

Aplicații ASP.NET;

Servicii Windows;

Aplicații orientate spre servicii, folosind WCF ( Windows Communication Foundation);

Aplicații „flux de lucru activat” utilizând Windows WF (Workflow Foundation).

3.3 Mediul de dezvoltare integrat (IDE) Microsoft Visual Studio 2013

Mediul de dezvoltare Microsoft Visual Studio dispune de instrumente specializate de proiectare, ceea ce permite crearea aplicațiilor în mod interactiv, rapid și ușor. Pentru a construi o aplicație Windows (New Project) se selectează ca template Windows Forms Application(Figura 3.3.1). O aplicație Windows conține cel puțin o fereastră (Form) în care se poate crea o interfață cu utilizatorul aplicației(Figura 3.3.2). Componentele vizuale ale aplicației pot fi prelucrate în modul Designer pentru a plasa noi obiecte, a le stabili proprietățile etc. Codul ”din spatele” unei componente vizuale este accesibil în modul Code . În fereastra Solution Explorer sunt afișate toate fișierele pe care Visual Studio.NET le-a inclus în proiect. Form1.cs este formularul creat implicit de Visual Studio.NET ca parte a proiectului. Fereastra Properties este utilizată pentru a vizualiza și eventual schimba proprietățile obiectelor. Toolbox conține controale standard drag- and-drop și componente utilizate în crearea aplicației Windows. Controalele sunt grupate în categoriile logice din imaginea alăturată. Designer, Code, Solution Explorer și celelalte se află grupate în meniul View.

Figura 3.3.1: Visual Studio 2013, fereastră pentru crearea unui nou proiect

Formulare(Forms)

Spațiul Forms ne oferă clase specializate pentru: creare de ferestre sau formulare (System.Windows.Forms.Form), elemente specifice (controale) cum ar fi butoane (System.Windows.Forms.Button), casete de text (System.Windows.Forms.TextBox) etc. Proiectarea unei ferestre are la bază un cod complex, generat automat pe măsură ce noi desemnăm componentele și comportamentul acesteia. În fapt, acest cod realizează: derivarea unei clase proprii din System.Windows.Forms.Form, clasă care este înzestrată cu o colecție de controale (inițial vidă). Constructorul ferestrei realizază instanțieri ale claselor Button, MenuStrip, Timer etc. (orice plasăm noi în fereastră) și adaugă referințele acestor obiecte la colecția de controale ale ferestrei. Dacă modelul de fereastră reprezintă ferestra principală a aplicației, atunci ea este instanțiată automat în programul principal (metoda Main). Dacă nu, trebuie să scriem noi codul ce realizează instanțierea. Clasele derivate din Form moștenesc o serie de proprietăți care determină atributele vizuale ale ferestrei (stilul marginilor, culoare de fundal, etc.), metode care implementează anumite comportamente (Show, Hide, Focus etc.) și o serie de metode specifice (handlere) de tratare a evenimentelor (Load, Click etc.). O fereastră poate fi activată cu form.Show() sau cu form.ShowDialog(), metoda a doua permițând ca revenirea în fereastra din care a fost activat noul formular să se facă numai după ce noul formular a fost inchis (spunem că formularul nou este deschis modal).

Figura 3.3.2: Visual Studio 2013, interfața mediului de dezvoltare

Cele mai uzuale proprietăți ale form-urilor sunt:

• StartPosition deter serie de proprietăți care determină atributele vizuale ale ferestrei (stilul marginilor, culoare de fundal, etc.), metode care implementează anumite comportamente (Show, Hide, Focus etc.) și o serie de metode specifice (handlere) de tratare a evenimentelor (Load, Click etc.). O fereastră poate fi activată cu form.Show() sau cu form.ShowDialog(), metoda a doua permițând ca revenirea în fereastra din care a fost activat noul formular să se facă numai după ce noul formular a fost inchis (spunem că formularul nou este deschis modal).

Figura 3.3.2: Visual Studio 2013, interfața mediului de dezvoltare

Cele mai uzuale proprietăți ale form-urilor sunt:

• StartPosition determină poziția ferestrei atunci când aceasta apare prima dată, poziție ce poate fi setată Manual sau poate fi centrată pe desktop (CenterScreen), stabilită de Windows, formularul având dimensiunile și locația stabilite de programator (WindowsDefaultLocation) sau Windows-ul va stabili dimensiunea inițială și locația pentru formular (WindowsDefaultBounds) sau, centrat pe formularul care l-a afișat (CenterParent) atunci când formularul va fi afișat modal.

• Location (X,Y) reprezintă coordonatele colțului din stânga sus al formularului relativ la colțul stânga sus al containerului. (Această propietate e ignorată dacă StartPosition = Manual). Mișcarea formularului ( și implicit schimbarea locației) poate fi tratată în evenimentele Move și LocationChanged.

• Size (Width și Height) reprezintă dimensiunea ferestrei. Când se schimbă propietățile Width și Height ale unui formular, acesta se va redimensiona automat, această redimensionare fiind tratată în evenimentele Resize sau in SizeChanged. Chiar dacă propietatea Size a formularului indică dimensiunea ferestrei, formularul nu este în totalitate responsabil pentru desenarea întregului conținut al său. Partea care este desenată de formular mai este denumită și Client Area. Marginile, titlul și scrollbar-ul sunt desenate de Windows.

• ControlBox precizează dacă fereastra conține sau nu un icon, butonul de închidere al ferestrei și meniul System (Restore,Move,Size,Maximize,Minimize,Close).

• Icon reprezintă un obiect de tip *.ico folosit ca icon pentru formular.

• Opacity indică procentul de opacitate.

Evenimentele:

Definirea unei funcții de tratare a unui eveniment asociat controlului se realizează prin selectarea grupului Events din ferestra Properties a controlului respectiv și alegerea evenimentului dorit. Dacă nu scriem nici un nume pentru funcția de tratare, ci efectuăm dublu click în căsuța respectivă, se generează automat un nume pentru această funcție, ținând cont de numele controlului și de numele evenimentului (de exemplu textbox1_TextChanged). Dacă în Designer efectuăm dublu click pe un control, se va genera automat o funcție de tratare pentru evenimentul implicit asociat controlului (pentru un buton evenimentul implicit este Click, pentru TextBox este TextChanged, pentru un formular Load etc.).

Cel mai utilizat eveniment al form-urilor este Load care apare când formularul este pentru prima data încărcat în memorie.

Controale:

Unitatea de bază a unei interfețe Windows o reprezintă un control. Acesta poate fi „găzduit” de un container ce poate fi un formular sau un alt control. Un control este o instanță a unei clase derivate din System.Windows.Forms și este reponsabil cu desenarea unei părți din container. Visual Studio .NET vine cu o serie de controale standard, disponibile în Toolbox. Aceste controale sunt:

• Button la acționare se poate executa o prelucrare. De exemplu, cel mai important eveniment pentru Button este Click.

• Label este folosit pentru plasarea de text pe un formular. Textul afișat este conținut în propietatea Text și este aliniat conform propietății TextAlign.

• TextBox permite utilizatorului să introducă un text. Prevede, prin intermediul ContextMenu-ului asociat, un set de funcționalități de bază, ca de exemplu (Cut, Copy, Paste, Delete, SelectAll).

• PictureBox permite afișarea unei imagini.

• CheckBox au propietatea Checked care indică dacă am selectat controlul.

• ListBox, ComboBox pot fi legate de un DataSet, de un ArrayList sau de orice tablou.

• DateTimePicker este un control prin care se poate selecta o dată (zi, luna, an). La click se afișează un control de tip MonthCalendar, prin care se poate selecta data dorită.

• Toolbar (ToolStrip) afișează o bară de butoane în partea de sus a unui formular. Se pot introduce vizual butoane (printr-un designer, direct din Visual Studio.NET IDE), la care se pot seta atât textul afișat sau imaginea. Evenimentul cel mai util al acestui control este ButtonClick (care are ca parametru un obiect de tip ToolBarButtonClickEventArgs, prin care programatorul are acces la butonul care a fost apasat).

• GroupBox este un control ce pot conține alte controale.

Capitolul IV. Specificațiile aplicației

4.1 Schema bloc

Acest sistem a fost realizat în proporție de 99% cu ajutorul următoarelor tool-uri de la Microsoft:

Visual Studio Ultimate 2013;

SQL Server 2014 Standard Edition.

Figura 4.1.1: Diagramă Sistem

4.2 Descrierea aplicației

4.2.1 Logare

Punctul de start al aplicației îl reprezintă form-ul Cabinet, încărcânduse în programul principal prin codul: “Application.Run(new Cabinet());”. Form-ul de Logare este fiul form-ului părinte Cabinet.

Form-ul de Logare este declanșat primul deoarece este apelat la încărcarea form-ului Cabinet prin codul: “ Logare f = new Logare();

if (f.ShowDialog() == DialogResult.Cancel)

this.Close();”

Figura 4.2.1.1: Form Logare în prima stare

Figura 4.2.1.2: Form Logare în starea a doua (login cu succes)

Componentele form-ului sunt:

GroupBox “Autentificare”, care conține: – Label’s(etichete): – ”Medic:”

– “Parola:”

– ComboBox

– Textbox

– Button’s: – OK

– Cancel

PictureBox

Button “Vizualizare Medici”

ProgressBar

Timer

Imagine background personalizată.

ComboBox-ul are setat DropDownStyle pe DropDownList astfel inserarea datelor se poate face doar prin cod, nefiind posibilă introducerea de date prin intermediul tastaturei. Inserarea datelor se face din baza de date, iar codul aferent este:

SqlConnection con = new SqlConnection("Data Source=DARIUS; Initial Catalog=MedDB; Integrated Security=True");

SqlCommand cmd= new SqlCommand("SELECT Nume FROM Medici", con);

SqlDataAdapter da = new SqlDataAdapter(cmd);

DataTable dt = new DataTable();

da.Fill(dt);

foreach (DataRow dr in dt.Rows)

{

comboBoxMedici.Items.Add(dr["Nume"]);

}

Form-ul trece în starea doi, doar dacă datele din ComboBox și TextBox coincid cu datele tabelei “Medici” din baza de date. Această verificare se face printr-o comandă SQL, care este:

“"Select Nume from Medici where Nume='" + comboBoxMedici.Text + "' AND " + "Parola='" + textBoxParola.Text + "'"”.

Dacă datele sunt corecte form-ul trece în starea doi pentru cinci secunde, timp în care GroupBox-ul este dezactivat, butonul “Vizualizare medici” este invizibil, imaginea din PictureBox se schimbă, iar componenta ProgressBar se “umple” progresiv de la stânga la dreapta cu o culoare verde și cu viteza de umplere de 15%/secundă. Această umplere se face în event-ul timer-ului prin codul: “if(progressBar1.Value < progressBar1.Maximum)

progressBar1.Value++;”

După ce se scurg cele cinci secunde, form-ul Logare se închide, iar încărcarea form-ului Cabinet ajunge în punctul final, afișânduse pe ecran. Tot în event-ul timer-ului se realizează această procedură prin codul: “timer1.Stop();

this.DialogResult = DialogResult.OK;

this.Close();”

Dacă datele sunt incorecte se emite o fereastră de eroare prin codul:

MessageBox.Show("Datele sunt greșite!");

Butonul “Vizualizare Medici” face posibilă accesarea form-ului VizualizareMedici, unde anumite date ale medicilor se pot vizualiza de către orice utilizator, și unde administratorul poate gestioana toate datele medicilor.

4.2.2 Cabinet

Form-ul Cabinet este punctul de start al programului și centrul aplicației.

Figura 4.2.2.1: Form Cabinet

Componentele form-ului sunt:

ToolStrip, cu un delimitator și opt butoane: -Înapoi

-Reîmprospătare

-Adăugare pacient

-Șterge pacient

-Adaugă consultație

-Fișă pacient

-Căutare pacient

-Programări

Label’s: -PACIENTI:

-Medic:

-Nume medic

ComboBox

TextBox

DataGridView

Imagine background personalizată.

ComboBox-ul și TextBox-ul sunt setate implicit pe invizibil pentru a facilita modul de căutare a pacienților.

Datele sunt încărcate în DataGridView în eventul Load al form-ului prin codul:

DataTable dt = new DataTable();

SqlDataAdapter da = new SqlDataAdapter("SELECT Nume, Prenume, CNP, Data_nasterii, Sex ,Judet, Oras, Strada, Numar, Bloc, Scara, Apartament, Alergii FROM ListaPacienti WHERE Medic='" + label2.Text + "'", con);

da.Fill(dt);

dataGridView1.DataSource = dt.DefaultView;

Tot în eventul Load, textul label-ului „Nume medic” este modificat printr-o clasă care conține o variabilă statică și publică, care se regăsește în form-ul Logare cu rolul de a memora textul câmpului selectat din ComBox-ul form-ului de Logare. Codul care modifică textul label-ului este: “label2.Text = Logare.login.medic;”

Butonul “Înapoi” are rolul de a restarta aplicația prin codul: ”Application.Restart();”, astfel se revine la form-ul Logare.

Butoanele “Adaugă pacient”, ”Adaugă consultație”, ”Vizualizare fișă”, ”Programări” fac posibilă accesarea altor form-uri care sunt fii form-ului părinte Cabinet.

Butoanele “Reîmprospătare”, ”Șterge pacient”, ”Căutare pacient” operează direct pe form-ul Cabinet astfel:

Reîmprospătare: Apelează funcția de încărcare date, care este apelată și în event-ul Load al form-ului.

Șterge pacient: Șterge toate datele aferente pacientul din baza de date care se regăsesc în tabelele ListaPacienti, Consultatii, ConsulatiiViitoare, Retetele, printr-un click pe datele pacientului din DataGridView și cu ajutorul comenzilor SQL:

“"DELETE FROM ListaPacienti WHERE CNP='" + CNP + "'";

"DELETE FROM Consultatii WHERE CNP='" + CNP + "'";

"DELETE FROM ConsultatiiViitoare WHERE CNP='" + CNP + "'";

"DELETE FROM Retetele WHERE CNP='" + CNP + "'";”,

iar apoi apelează funcția de încărcare date.

Căutare pacient: Prin event-ul Click al butonului, form-ul Cabinet suferă o schimbare vizuală și anume:

Culoare de fundal al butonului se schimbă din transparent în argintiu prin codul: “toolStripButton3.BackColor = Color.Silver;”

Textul label-ul “PACIENTI:” devine “Căutare după pacient:” prin codul :

“label3.Text = "Căutare pacient după:";”

ComboBox-ul și TextBox-ul sunt setate pe vizibil prin codul:

“comboBoxModFiltrare.Visible = true;

textSearch.Visible = true;”

Această schimbare se poate vedea în figura de mai jos (Figura 2.2).

Pentru ca aspectul form-ului să revină la starea lui normală precum putem vedea în Figura 2.1, în event-ul Click al butonului “Căutare pacient” este implementată o condiție care este tradusă astfel: Dacă restul împărțiri dintre numărul de click-uri pe butonul “Căutare pacient”și numărul natural doi este zero, atunci Figura 2.2 altfel Figura 2.1, altfel spus:

“if (clicks % 2 == 0)

{ Figura 2.2 } else { Figura 2.1 }”

Figura 4.2.2.2: Form Cabinet, mod căutare

Modul de căutare în DataGridView se face printr-un filtru care citește cod SQL compus din cuvântului cheie inserat în TextBox și criteriului selectat din ComboBox, codul întregii proceduri fiind:

“BindingSource bs = new BindingSource();

bs.DataSource = dataGridView1.DataSource;

if (comboBoxModFiltrare.SelectedItem.ToString() == "Nume")

{

bs.Filter = "NUME like '%" + textSearch.Text + "%'";

dataGridView1.DataSource = bs;

}

else if(comboBoxModFiltrare.SelectedItem.ToString()=="Prenume")

{

bs.Filter = "PRENUME like '%" + textSearch.Text + "%'";

dataGridView1.DataSource = bs;

}

else

{

bs.Filter = "CNP like '%" + textSearch.Text + "%'";

dataGridView1.DataSource = bs;

}”

Pentru a transmite form-urilor copii, datele pacientului selectat în DataGridView, sa creat o clasă cu variabile publice și statice care memorează datele din fiecare celulă a componentei DataGridView prin intermediul event-ul CellContentClick a componentei. Astfel, pentru memorarea numelui pacientului codul este:

“Pacient.nume = Convert.ToString(selectedRow.Cells["Nume"].Value).Trim();”.

4.2.3 Adăugare pacient

Acest form are rolul de a adăuga toate datele aferente unui pacient în tabela ListaPacienti din baza de date prin comanda SQL, activată de butonul “Adaugă pacient”:

“INSERT INTO ListaPacienti (ID,CNP,Nume,Prenume,Sex,Nume_mama,Prenume_mama,Nume_tata,Prenume_tata,Data_nasterii,LoculNasterii,Judet,Oras,Strada,Numar,Bloc,Scara,Apartament,Medic,Alergii,Poza) values ('" + nrinreg.Text + "','" + cnp.Text + "','" + nume.Text + "','" + prenume.Text + "','" + sex.Text + "','" + numem.Text + "','" + prenumem.Text + "','" + numet.Text + "','" + prenumet.Text + "','" + dateTimePicker1.Value.Date + "','" + locnasterii.Text + "','" + judet.Text + "','" + localitate.Text + "','" + strada.Text + "','" + numar.Text + "','" + bloc.Text + "','" + scara.Text + "','" + apartament.Text + "','" + medicfamilie.Text + "','" + cmbAlergii.Text + "','" + poza + "')" ;

Figura 4.2.3.1: Form Adăugare pacient

Componentele form-ului sunt:

-GroupBox “Introducere date personale”:

– 19 label’s, fiecare reprezentând numele câmpului din tabelă;

– 14 textbox-uri;

– 4 combobox-uri;

– 1 datetimepicker;

– 1 linklabel;

– 1 picturebox.

– Button’s:

– “ ”

– “Adaugă pacient”

– Label’s:

– “Medic:”

– numele medicului, la fel ca în form-ul Cabinet, acest label se modifică în eventul Load al form-ului prin comanda:

“medicfamilie.Text = Logare.login.medic;”

Cele patru combobox-uri au setată proprietatea DropDownStyle pe DropDownList astfel trei dintre ele au elementele setate astfel:

-combobox sex: “ masculin

feminin”

-combobox alergii: ” –

Alune

Alcool

Antibiotice

Analgezice

Anestezice

Animale

Coloranti

Praf

Polen

Soia”

-combobox judete: “

Alba

Arad

Argeș

Bacău

Bihor

Bistrița-Năsăud

Botoșani

Brașov

Brăila

București

Buzău

Caraș-Severin

Călărași

Cluj

Constanța

Covasna

Dâmbovița

Dolj

Galați

Giurgiu

Gorj

Harghita

Hunedoara

Ialomița

Iași

Ilfov

Maramureș

Mehedinți

Mureș

Neamț

Olt

Prahova

Satu Mare

Sălaj

Sibiu

Suceava

Teleorman

Timiș

Tulcea

Vaslui

Vâlcea

Vrancea ”

În al 4-lea combobox, adică combobox localitate, elementele sunt inserate din tabela Localitati a bazei de date prin următoare funcție, apelată în event-ul SelectedIndexChanged a combobox-ului judet :

public void Incarcare_Localitati()

{

localitate.Items.Clear();

SqlCommand cmd1 = new SqlCommand("SELECT * FROM Localitati where Judet='" + judet.Text.Trim() + "'", con);

SqlDataAdapter daa = new SqlDataAdapter(cmd1);

DataTable dtt = new DataTable();

daa.Fill(dtt);

foreach (DataRow drr in dtt.Rows)

{

localitate.Items.Add(drr["Localitate"]);

}

}

LinkLabel-ul „Click pentru poză” are rolul:

de a încărca poza selectata printr-un FileDialog, în picturebox, după cum se vede în figura 3.2.

de a copia imaginea în folderul poze al aplicației cu numele de forma “cnp.jpg” prin comanda “File.Copy(@locatie, poza);” a librăriei System.IO, unde @locatie este locația inițală a FileDialog-ului iar poza este locația finală.

de a reține adresa completă a pozei în memoria temporară pentru a fi inserată în câmpul Poza a tabelei ListăPacienti.

Figura 4.2.3.2: Poza

Button : Are proprietatea DialogResult setată pe Abort, astfel aplicația știe, când să închidă form-ul actual, și când să se întoarcă la form-ul părinte Cabinet, actualizându-l datorită condiției din următorul cod:

AdăugarePacient f = new AdăugarePacient();

if (f.ShowDialog() == DialogResult.Abort)

{

displayRecords();

}

4.2.4 Adăugare consultație

Acest form are rolul de a afișa detalii despre pacient, detalii despre ultima consultație și de a face posibilă adăugarea unei noi consultații.

Figura 4.2.4.1: Form Adăugare consultație

Componentele form-ului sunt:

– GroupBox “Informații generale”:

– zece label’s, din care cele cinci din dreapta se modifică în funcție de pacientul pe care l-am selecatat în DataGridView din form-ul Cabinet, printr-o clasă cu variabile statice și publice precum clasa din form-ul Logare. Codul este:

cnp.Text = Cabinet.Pacient.cnp_p; //cnp

varsta.Text = Cabinet.Pacient.varsta_p; //varsta

adresa.Text = Cabinet.Pacient.adresa_p; //adresa

alergii.Text = Cabinet.Pacient.alergii_p; //alergii

data.Text = DateTime.Now.ToString("d", System.Globalization.CultureInfo.InvariantCulture); //data

– GroupBox “Informații tratament anterior”:

– GroupBox:

conține opt label’s din care patru sunt statice reprezentând denumirea celorlalte care sunt dinamice și care reprezintă detalii despre ultima consultație, datele fiind luate din tabela Consultatii a bazei de date.

– Label + combobox cu elementele:

” –

Ameliorare

Imbunatatire

Inrautatire

Agravare

Tratare ”

– GroupBox “Consultație nouă”:

– 6 combobox-uri cu etichete(label’s) aferente;

– 2 textbox-uri cu etichete aferente;

– 1 datetimepicker cu o etichetă;

– 3 butoane;

– 3 picturebox-uri.

– Button’s :

– “Adaugă consultație”

– , același principiu ca în form-ul precedent.

– Label’s:

– „Medic:”

– nume medic, la fel ca în precedentele descrieri.

În prima fază, în groupbox-ul Consultație nouă, este activ doar primul combobox restul componentelor fiind dezactivate.

După ce se alege un element în primul combobox, prin event-ul SelectedIndexChanged al combobox-ului se activează următorul combobox. Dacă procedăm la fel se inserează codul aferent diagnosticului în textbox-ul alăturat iar butonul din imediata apropiere devine activ (figura 4.2). Dând click pe butonul activ, acesta devine inactiv, în picturebox imaginea se schimbă, iar următorul combobox devine activ. Același algoritm se aplică și următoarelor componente, ajungânduse la final la un form asemănător cu cel din figura 4.3.

Figura 4.2.4.2: Buton +

Figura 4.2.4.3: Form completat cu date

În event-ul Load al form-ului sunt apelate trei funcții care fac posibilă încărcarea combobox-urilor următoare cu date din baza de date:

– Combobox “Clasa diagnostic”: Prin comandă SQL “"SELECT * FROM GrupeBoli"” și cu ajutorului unui foreach ( foreach (DataRow dr in dt.Rows){cmbClasaDiag.Items.Add(dr["denumire_clasa"]);}) sunt adăugate elemente în combobox din tabela GrupeBoli;

– Combobox “Serviciu acordat”: Procedură asemănătoare doar că elementele sunt adăugate din tabela Proceduri;

– Combobox “Denumire comercială medicament”: Asemănător, dar cu elementele adăugate din tabela Medicamente.

În combobox-ul “Diagnostic”, elementele sunt adăugate dintr-o tabelă “A, B, …, U” pe baza elementului selectat din combobox-ul “Clasa diagnostic” astfel:

”"SELECT * FROM [" + clasa + "]"”, unde clasa este argumentul funcției cu rolul de a reține denumirea tabelei în funcție de elementul combobox-ului “Clasa diagnostic”.

Butonul “Adaugă consultație”, dacă toți pașii au fost parcurși corect, face posibilă inserarea noii consultații în tabela Consultatii, apoi emite un mesaj prin codul: MessageBox.Show(" Consultația a fost adaugată cu succes! "); și în final deschide form-ul Rețetă medicală prin codul: Rețetă f = new Rețetă();

if (f.ShowDialog() == DialogResult.Abort)

this.Close();

Dacă pașii nu au fost parcurși corect, lipsesc date, va emite un mesaj de eroare cu detaliile de vigoare prin codul: MessageBox.Show("Conexiune eșuată: " + ex.Message);, unde ex reprezintă excepția aferentă.

4.2.5 Rețetă medicală

Form-ul este fiul form-ului Adaugă consultație și face posibilă emiterea unei rețete pacientului bazată pe consultația recent adăugată.

Figura 4.2.5.1: Rețetă medicală

Componentele form-ului sunt:

– GroupBox “Informații pacient”:

– 9 textbox-uri cu etichete aferente.

– GroupBox:

– 3 textbox-uri cu etichete aferente;

– 2 butoane:

– “Trimitere rețetă”

– “Imprimare rețetă”

– Label’s:

– “Medic:”

– nume medic, la fel ca în precedentele descrieri.

– Button , același principiu ca în precedentele form-uri.

Primul groupbox are proprietatea Enabled setată pe false, astfel nu se pot face modificări în textbox-uri.

Toate informațiile din aceste groupbox-uri sunt încărcate automate prin event-ul Load al form-ului de la variabilele statice și publice a clasei din form-ului părinte.

Butonul ”Imprimare rețetă” are două funcții:

Adaugă rețeta în tabela Retetele din baza de date printr-o comandă SQL și afișează un mesaj de succes în caz că a fost inserată înregistrarea, iar în caz că sunt nereguli afișează un mesaj de eroare.

Apelează o funcție care are rolul de printare a conținutului form-ului printr-un PrintDialog, după cum se poate vedea în figura 5.2.

Butonul ”Trimitere rețetă” are rolul de a crea un fișier XML cu datele din form.

Figura 4.2.5.2 : PrintDialog

4.2.6 Fișă pacient

În acest form este posibilă doar vizualizarea informațiilor despre pacient. Poza, date despre pacient și toate consultațiile care le-a avut. Nu există funcții pentru prelucrarea datelor.

Figura 4.2.6.1: Fișă pacient

Componentele form-ului sunt:

– GroupBox:

– Picturebox, imaginea este încărcată prin comanda: “pictureBox1.Image = Image.FromFile(poza);”, unde poza este o variabilă care stochează calea spre poză, extrasă din baza de date prin comanda SQL de selectare.

– 11 etichete, din care cele șase din dreapta se modifică în funcție de pacientul selectat din tabela ListaPacienti

– DataGridView: Date sunt încărcate din tabela Consultatii prin următoare comandă SQL: “SELECT DebutBoala as[Debut Boala], Data, Diagnostic, Servicii,Tratament, Evolutie FROM Consultatii”

– Label’s:

– “Medic:”

– nume medic, la fel ca în precedentele descrieri.

– Button , același principiu ca în precedentele form-uri.

Datele sunt încărcate în funcție de CNP atât în groupbox cât și în datagridview ( WHERE CNP='" + cnp + "' ).

4.2.7 Programări

Rolul acestui form este administrarea viitoarelor consultații prin:

Adăugarea unei viitoare programare pentru consultație.

Anularea unei/unor viitoare consultații.

Vizualizarea viitoarelor consultații aferente pacientului selectat în form-ul Cabinet.

Pentru o viitoare programare în legătura unei consultații, doctor va menționa data când va avea loc consultația și analizele pe care trebuie să le facă pacientul, necesare consultației, până în acel moment.

Partea de înștințare a pacientului în legătură cu o nouă programare sau anularea unei programări este în stadiul de așteptare.

Figura 4.2.7.1: Programări

Componentele form-ului sunt:

– Button’s:

– Buton , același principiu ca în precedentele form-uri.

– Buton „+ Programare”: deschide form-ul Următoare consultație.

– Buton „X Programare”: anulează viitoarea consultație, ștergând datele din baza de date, reîncărcând datele în datagridview prin apelarea funcției de încărcare date și trimițând o înștințare pacientul.

– DataGridView: datele sunt inserate în această componentă prin event-ul Load al form-ului cu comanda SQL: “"SELECT Data as [DATA Consultatiei], Ora as [ORA], Analize as [ANALIZE] FROM ConsultatiiViitoare”, în funcție de cnp-ul pacientului “WHERE CNP='" + cnp.Text.Trim() + "'”.

– Label’s:

– nume pacient, eticheta este schimbată în funcție de pacientul selectat în form-ul Cabinet printr-o variabilă publică și statică a clasei „Cabinet.Pacient” prin codul: „pacient.Text = Cabinet.Pacient.nume_p.Trim() + " " + Cabinet.Pacient.prenume_p.Trim();”.

– „CNP:”

– cnp-ul, eticheta este modificată, ca și în cazul etichetei nume pacient, dar prin codul: “cnp.Text = Cabinet.Pacient.cnp_p.Trim();”.

– “Medic:”

– medicul, eticheta este modificată cu același principiu ca în anterioarele etichete, dar datele sunt preluate din form-ul Logare prin codul: “medic.Text = Logare.login.medic.Trim();”. În concluzie, la fel ca în celelalte form-uri.

4.2.8 Următoare consultație

Acest form este fiul form-ului Programări și face posibilă adăugarea unei noi programări în tabela ConsultatiiViitoare din baza de date și înștințarea pacientului despre data și analizele necesare viitoarei consultații.

Figura 4.2.8.1: Umătoarea consultație

Componentele form-ului sunt:

– GroupBox:

– Etichetă + DateTimePicker: pentru a selecta data viitoarei consultații;

– Etichetă + ComBox: pentru a selecta ora viitoarei consultații;

– Etichetă + TextBox: pentru a scrie analizele necesare consultației.

– Buton “ Programare”: apăsând butonul, se face inserția datelor în tabela ConsultatiiViitoare și înștințarea pacientului.

– Label’s: aceleiași, precum în form-ul Programări.

– Buton , același principiu ca în precedentele form-uri.

4.2.9 Medici

Orice utilizator poate accesa acest form, el fiind fiul form-ului Logare, dar modificări poate face doar administratorul printr-un filtru. Prin event-ul Load al form-ului, datele sunt extrase din tabela Medici a bazei de date și afișate în DataGridView.

Figura 4.2.9.1: Vizualizare Medici

Componentele form-ului sunt:

– GroupBox “Admin”: doar administratorul poate accesa componentele grupului

– Buton „+Medic”: se deschide form-ul Înregistrare medic în caz că se trece de filtrul Administrator.

– Buton „Schimbă parola Medic”: se deschide form-ul ParolaMed în caz că se trece de filtrul Administrator.

– Buton „X Medic”: dacă se trece de filtrul Administrator, medicul împreună cu pacienți lui și toate datele pacienților (consultații, rețete, programări) sunt șterse din baza de date prin comenzile SQL:

“"DELETE FROM Medici WHERE Nume='" + nume.Trim() + "' AND Adresa='" + adresa + "' AND Specializare='" + specializare + "'";

"DELETE FROM ListaPacienti WHERE Medic='" + nume.Trim() + "'";

"DELETE FROM Consultatii WHERE Medic='" + nume.Trim() + "'";

"DELETE FROM ConsultatiiViitoare WHERE Medic='" + nume.Trim() + "'";

"DELETE FROM Retetele WHERE Medic='" + nume.Trim() + "'";”, iar datele din datagridview sunt reinserate prin apelul funcției încărcare date.

– DataGridView: datele sunt inserate din tabela Medici cu ajutorul comenzii SQL: “"SELECT Nume, Adresa, Specializare FROM Medici"”;

– Label “Listă medici:”

– Buton , același principiu ca în precedentele form-uri.

4.2.10 Administrator

Această parte de administrare este încorporată în form-ul VizualizareMedici prin groupbox-ul Admin după cum se poate vedea în figura 9.1. Form-ul are setată proprietatea FormBorderStyle pe None.

Filtrul Administrator îl reprezintă form-ul din figura 10.1, el fiid apelat în următorul mod:

– Buton „+Medic”: este apelat form-ul Înregistrare medic unde, în event-ul Load al form-ului este apelat form-ul Filtru.

– Buton „Schimbă parola Medic”: este apelat form-ul ParolaMed, urmând aceași procedură ca la butonul anterior.

– Buton „X Medic”: este apelat direct form-ul Filtru.

În cazul primelor butoane, form-ul Filtru este fiul form-urilor din care este apelat, iar form-urile părinți vor fi afișate doar dacă datele din cele două textbox-uri coincid cu datele din tabela Administrator a bazei de date prin comanda SQL: “"SELECT * FROM Administrator WHERE Utilizator='" + txtUser.Text + "' AND " + "Parola='" + txtPass.Text + "'"”.

Figura 4.2.10.1: Filtru

Mod de funcționare:

– event Load, form părinte: Administrator f = new Administrator();

if (f.ShowDialog() == DialogResult.Cancel)

{

this.Close();

}

– Buton “OK”, form Filtru, în caz că datele din textbox-uri coincid cu datele din tabela Administrator: this.DialogResult = DialogResult.OK; this.Close();

Odată setat this.DialogResult pe DialogResult.OK, form-ul părinte va fi afișat.

Componentele form-ului sunt:

– 3 label’s:

– “Utilizator:”

– “Parola:”

– “Date corecte!”, este setat pe invizibil, devenind vizibil doar dacă operațiunea de filtru este pozitivă.

– 2 textbox:

– txtUser

– txtPass

– 2 button’s:

– “OK”

– “ ”

– 1 timer

4.2.11 Înregistrare medic

Acest form este asemănător cu cel de Adăugare pacient, doar că aici datele sunt diferite și înserate în altă tabela, adică tabela Medici a bazei de date. Comanda SQL este:

“"INSERT INTO Medici (ID,Nume,CNP,CodParafa,Adresa,Specializare,DenumireCabinet,CasaDeAsigurari,Parola) VALUES ('" + txtid.Text + "','" + nume_prenume.Text + " " + "','" + txtcnp.Text + "','" + cod_parafa.Text + "','" + adresa.Text + "','" + specializare.Text + "','" + nume_cabinet.Text + "','" + casa_asigurari.Text + "','" + parola.Text + "')"”.

Spațiul dintre nume_prenume.Text și txtcnp.Text are un rol important într-o selecție mai optimă a medicului în datagridview.

Figura 4.2.11.1: Înregistrare medic

Componentele form-ului sunt:

– GroupBox “Introducere date medic:”

– 10 textbox-uri cu etichete aferente

– Button’s:

– “+ Adaugă”

– “ ”

Dacă parola introdusă nu coincide cu parola reintrodusa atunci se va emite un mesaj de eroare iar culoare fundalului la textbox-urile parola și reintroducere_parola va deveni roșu cu ajutorul codului: “parola.BackColor = Color.Red; reintroducere_parola.BackColor = Color.Red;”. Acest lucru se poate vedea în figura de mai jos adică 11.2.

Figura 4.2.11.2: Focalizare greșeală

4.2.12 Schimbare parolă

Acest form are setată proprietatea FormBorderStyle pe None precum form-ul Administrator.

Figura 4.2.12.1: Schimbare parolă

Componentele form-ului sunt:

– GroupBox “nume pacient”:

– 3 textbox-uri cu etichete aferente.

– Button’s:

– “ Salvare”

– Label “Schimbare parolă de acces”

În textul groupbox-ului se afișează numele medicului cu ajutorul unei variabile statice și publice a clasei “Medici” din form-ul VizualizareMedici prin codul :

“groupBox1.Text = VizualizareMedici.Medici.mednum.Trim();”

Dacă parola curentă nu coincide cu cea din baza de date atunci se va emite un mesaj de eroare prin codul: “MessageBox.Show("Parolă veche greșită!");”.

Dacă parola nouă introdusă nu coincide cu reintroducerea ei în ultimul textbox atunci se aplică același principiu precum putem vedea în figura 11.2.

Mod de funcționare:

– pentru verificare parolă curentă: “"SELECT Nume FROM Medici WHERE Nume='" + groupBox1.Text + "' AND Parola='" + parolacurenta.Text + "'"”

– pentru actualizarea parolei: “"UPDATE Medici SET Parola='" + parolanoua.Text + "' WHERE Nume='" + groupBox1.Text + "' AND Parola='" + parolacurenta.Text + "'"”.

4.2.13 Baza de date

Figura 4.2.13.1: Baza de date

Baza de date conține 31 de tabele cu următoarele tipuri de informații:

– Read only:

– denumirile claselor de boli;

– informații despre boli;

– informații despre medicamente;

– informații despre proceduri/servicii.

– denumirile localităților din România, aferente fiecărui județ.

– Read write:

– informații despre adminstrator;

– informații despre pacienți;

– informații despre doctori;

– informații despre consultații;

– informații despre viitoare consultații;

Tabela GrupeBoli conține informațiile despre clasele de boli, care are rol în mod special de a face legătura între clasele de boli și denumirile bolilor printr-un câmp numit grupa. Conține 21 de înregistrări, număr egal cu tabelele în care sunt stocate informațiile despre boli.

Tabelele A, B, …, U conțin informații despre boli, denumirile lor, grupele din care fac parte, tipul, sub clasa, etc. În toate tabelele se găsesc 28277 de înregistrări.

Tabela Medicamente conține informații despre medicamente, de la codul ATC, denumirea medicamentului, țara de producție, concetrație până la prescripție șă cantitatea lor în ambalaj. În tabelă se gasesc 1354 de înregistrări.

Tabela Proceduri conține informații despre tipurile de servicii pe care medicul le oferă pacientului. În tabelă se găsesc 5926 de înregistrări.

Tabela Localitati conține informații despre denumirile localităților din fiecare județ a țării. Sunt 13703 înregistrări, care reprenzintă denumirile a 99% din totatul localităților din România.

În tabela Administrator se găsesc date despre numele și parola administratorului.

Administratorul gestionează tabela Medici, la celelalte putând doar șterge totalul de înregistrări cu date aferente unui doctor.

Utilizatorul doctor, gestionează înregistrările aferente lui din celelalte tabele, adică tabelele Consultatii, ConsultatiiViitoare, ListaPacienti, Retetele.

Similar Posts