Evidenta Studentilor
LUCRARE DE LICENȚĂ
EVIDENȚA STUDENȚILOR
Cuprins
Introducere
Prima rețea de calculatoare interconectate înre ele a fost realizată în anul 1965 de către DARPA – Agenția pentru Proiecte de Cercetare Înaintate de Apărare – a Ministerului Apărării SUA, care a pornit de la conectarea a trei terminale. Extinderea permanentă a acestei rețele inițiale, numite ARPAnet, a dat naștere super-rețelei internet din zilele noastre, având o creștere impresionantă datorită necesității comunicării și schimbului de informații. Termenul internet s-a format prin alăturarea a două cuvinte englezești: interconnected (interconectat) și network (rețea). După lansarea primelor servere publice, cu sopul de centralizare, structurare și promovarea informațiilor, Internetul a ajuns să facă parte din viața noastră cotidiană, fiind principal metodă de comunicare cu acoperire mondială.
În prezent Internetul este folosit în mai multe scopuri, având suport pentru comerț, mediatizare, comunicație, divertisment și informare. Neavând limite a suportului fizic (precum un ziar sau o revistă) și a distanței, Internetul permite vizualizarea informațiilor în timp real, cu costuri relative infirme, unui număr infinit de utilizatori. Potrivit unui comunicat de presă al fundației ECDL (European Computer Driving Licence), în anul 2011 numărul conexiunilor la internet a crescut la nivelul Uniunii Europene la 73%.
Prin internediul internetului există mai multe metode de acces la informația stocată pe un calculator:
FTP (File Transfer Protocol) – serviciul pentru transferul fișierelor;
Telnet – serviciul pentru accesul de la distanță la resursele unui calculator;
Electronic Mail – serviciul de mesagerie electronică;
News – serviciul de știri;
World Wide Web – serviciu de acces la informația de pe un calculator aflat oriunde în lume.
World Wide Web, în traducere “pânză de păianjen întinsă în întreaga lume”, evidențează clar schimbul de informații cu caracter planetar. World Wide Web, prescurtat WWW, utilizează tehnologia client-server, care urmează șase pași esențiali:
clientul formulează o cerere;
cererea este expediată unui server;
cererea parcurge un mediu până la server;
serverul analizează cererea, o execută, formulează răspunsul și îl expediază clientului;
răspunsul parcurge mediul înapoi;
clientul recepționează răspunsul primit.
Figura 1 – Tehnologia client-server
Explozia internetului este un rezultat colectiv datorat fiecărui agent comercial sau persoanelor fizice care au ales să facă parte a rețelei globale, fiecare individ având o contribuție proprie, prin aducerea de informații în sistemul acesta public. Pentru comunicarea între două calculatoare se folosește un sistem de reguli, ce se numește protocol. Principalul protocol utilizat în tehnologia client-server este HTTP (HiperText Transfer Protocol). Hipertext-ul presupune un text îmbogățit prin texte obișnuite, etichete de formatare a textului și încapsularea altor tipuri de informații, precum sunete, imagini, filme, link-uri. Rețeaua internet este guvernată de aceleași protocoale (TCP/IP), necesare la dirijarea pachetelor (IP – Internet Protocol) și la corecția erorilor de transmitere a pachetelor lansate în mediul internet (TCP – Transfer Control Protocol), pentru ca acestea să ajungă la destinațiile potrivite. Precum o scrisoare expediată prin intermediul poștei și pachetele virtuale conțin adresa expeditorului și adresa destinatarului.
O pagină de internet (Website) este o mulțime organizată de pagini Web, scris într-un limbaj specific care permite stocarea oricăror tip de informații într-un suport digital, ce pot conține texte, imagini, sunete, filmări, animații, legături către alte pagini Web, aplicații. În mod uzual prima pagină accesată dintr-un Site Web este Home Page (pagina gazdă), care prezintă site-ul și de pe care se poate explora ușor toate paginile web aferende. Paginile Web au avantajul de a fi interactive, răspunzând prompt cererilor utilizatorului și de a fi independente de platformele software și hardware, putând fi vizualizate la fel de pe orice calculator, prin orice sistem de operare și prin orice browser.
Etapele necesare în elaborarea unei pagini de internet:
pregătirea, structurarea și definitivarea informației ce urmează publicarea;
design-ul – partea cea mai creativă, pentru captarea atenției utilizatorului;
machetarea – procesul de asamblare a benzilor textuale și materialului graphic;
programarea – etapa directă de lucru cu codul viitorului site;
completarea paginilor cu informația necesară;
publicarea site-ului.
Optimizarea și promovarea unei pagini web
Oricare utilizator care a conceput o pagină Web dorește ca după publicarea acesteia, să fie cunoscută și găsită cât mai repede. Pentru acest scop au fost concepute motoarele de căutare, care sunt niște servere ce accesează, clasifică și stochează informațiile de pe paginile Web, urmărind legăturile dintre acestea, în mod automat, servind utilizatorilor liste de Website-uri ce corespund criteriilor de căutare. Cele mai cunoscute motoare de căutare sunt Google, Yahoo, Baidu, Bing etc.).
Prin optimizarea unui site se dorește afișarea acesteia pe o poziție cât mai bună în lista rezultată de motorul de căutare, numai dacă importanța calculată (Ranking-ul) este corect citită de către motor. De asemenea, întreg ansamblul de pagini trebuie să fie conceput pentru a avea o dimensiune cât mai mică, să permită afișarea corectă a informațiilor indiferend de monitorul sau de browserul folosit.
Motivație
Tema acestei lucrări reprezintă aplicația în sine concepută din ideea existenței unei pagini din cadrul site-ului Universității „Ioan Slavici” Timișoara, dedicată studenților. Dorința acestei pagini este de a oferi în mod simplu și ușor accesul studenților la informațiile cu privire la facultate (orare, anunțuri), cât și despre activitățile fiecărui student (notele examenelor), informații despre fiecare (an, grupă).
Capitolul I. Prezentare a lucrării și a a plicației
I.1 Specificații. Proiectarea bazelor de date
Primul pas în realizarea unei aplicații de baze de date este analiza datelor și realizarea unei scheme conceptuale al acestor date. Este crucial proiectarea corectă, în scopul obținerii unei aplicații de înaltă performanță, altfel aceasta nu va putea fi folosită cu maxim de eficiență. În această etapă sunt analizate natura și modul de utilizare a datelor. Sunt identificate datele care vor trebui memorate și procesate, se împart aceste date în grupuri logice și se identifică relațiile care există între aceste grupuri.
Pe lângă performanță mai apare problema întreținerii. În mod normal o bază de date se întreține ușor, dacă sunt stocate cât mai puține informații redundant sau chiar niciuna. Totuși dacă există date redundante, iar unul dintre acestea se modifică, acea modificare ar trebui aplicată peste tot unde apare acel element, incetinind astfel performanțele bazei de date. Este necesară crearea unei tabele a valorilor posibile și folosirea unei chei pentru crearea referințelor spre acele valori, pentru a elimina înregistrările duble.
Proiectarea corectă a unei baze de date ar trebui să parcurgă următorii pași:
analiza cererilor și strângerea de informații referitoare la aplicație;
proiectarea conceptual a bazei de date;
alegerea unui system de gestiune al bazelor de date;
proiectarea logică a bazei de date;
proiectarea fizică a bazei de date;
implementarea bazei de date și a aplicației.
Dacă baza de date este planificată și proiectată corect, beneficiile vor fi numeroase, pentru că efortul enorm depus la început, la proiectarea acesteia, va fi pus în balanță cu munca ce va urma la întreținere, care va presupune mai puțin de lucrat. Atenția trebuie sporită în tmpul proiectării, deoarece aplicația odată lansată, costurile vor fi mari pentru modificarea proiectului bazei de date.
Această aplicație va fi lansată on-line, pentru ca utilizatorii, mai exact studenții, vor putea accesa date despre activitățile acestora, printre opțiunile lor numărându-se crearea unui cont pe această pagină. Logarea utilizatorului va permite accesul la informații personale, care nu sunt accesibile utilizatorilor anonimi (guest). Prin de-logare utilizatorul nu va mai putea vizualiza informațiile, fiind un simplu vizitator, totodată se distruge sesiunea creată la logare, până la procesul de autentificare.
Aplicația, fiind creată pe platform Microsoft SQL Server, are suportul pe două baze de date:
ASPNETDB – baza de date creată de ASP.NET, în care sunt stocate informații despre utilizatori și drepturile acestora;
Database – baza de date unde vor fi stocate informații despre studenți și notele, fiind împărțită în două tabele: “Studenți” și “Note”.
I.2 Obiective
Prin prisma activităților desfășurate într-un sistem de învățământ, obiectivele urmărite de această aplicație sunt:
crearea unei baze de date;
conectarea la baza de date;
crearea unui cont nou;
introducerea datelor în baza de date;
modificarea datelor din baza de date;
posibilitatea căutării informațiilor printr-un criteriu (nume).
I.3 Mediul de dezvoltare al aplicației
Microsoft Visual Studio este un mediu de dezvoltare integrat (integrated development environment – IDE) produs de firma Microsoft. Include un set complet de instrumente pentru generarea de aplicații ASP.NET, Servicii Web XML, aplicații desktop și aplicații mobile. Aplicațiile dezvoltate prin utilizarea acestuia variază:
aplicații tip consolă;
cu interfață grafică (Windows Forms);
pagini web;
aplicații web;
servicii web.
Microsoft Visual Studio oferă editor, compilator/debugger și mediu de proiectare (designer) pentru mai multe limbaje de programare, prin servicii lingvistice, cum ar fi: Microsoft Visual C++, Microsoft Visual C#, Microsoft Visual Basic, Microsoft Visual Web Developer, Team Foundation Server, fiind suportate de editorul de cod și de depanator. De asemenea Microsoft Visual Studio oferă suport și pentru limbajele M, Python, Ruby, Chrome, F#, la care serviciile lingvistice trebuie instalate separate. Visual Studio vine și în sprijin pentru XML / XSLT, HTML / XHTML, JavaScript și CSS. Versiunile specifice unui limbaj sunt în pachete individuale, numite Microsoft Visual Basic, Visual J#, Visual C# și Visual C++.
Editorul de cod suportă IntelliSense, o implementare Microsoft de autocompletare a codului, iar depanatorul integrat lucrează la ambele nivele de sursă și de mașină. Aplicațiile cu interfață grafică pot fi reprezentate în cod nativ împreună cu cod “managed” pentru platformele Windows: Microsoft Windows, Windows Mobile, Windows CE, .NET Framework, Microsoft Silverlight. De asemenea pentru aceste aplicații este inclus un GUI designer, un web designer, designer de clase și de baze de date.
Programul Microsoft DreamSpark pune la dispoziția studenților descărcarea gratuită a edițiilor Visual Studio 2005 și 2008, împreună cu versiunile specific unui limbaj de programare (Visual Basic, C++, C#, J#). Ultima versiune Microsofr Visual Studio 2010 a fost lansată pe 12 aprilie 2010, alături de .NET Framework 4, având un editor nou care utilizează WPF (Windows Presentation Foundation).
Unul dintre limbajele puternice de scriptare server-side reprezintă ASP.NET, un set de tehnologii ce permite crearea aplicațiilor web. Este succesorul lui ASP (Microsoft Active Server Pages), beneficiind de suportul platformei de la Microsoft .NET. Având avantajul timpului redus necesar dezvoltării aplicațiilor web, ASP.NET a evoluat neîncetat, răspunzând criteriilor pieței dinamice a plicațiilor cu baze de date. Tehnologia ASP.NET nu este limitată doar la platform sistemului de operare Windows, devenind portabil cu avantajele .NET Framework pentru platformele Linux și Mac OS X.
Chiar dacă ASP.NET a fost gândit pentru aplicațiile web foarte complexe, pentru aplicațiile mici este extreme de simplu de folosit, scriind cantitate minimă de cod, ideal pentru magazine online, aplicații “front-end” pentru baze de date sau pentru pagini p pagini personale. Pentru o persoană / companie care dorește o aplicație ASP.NET, după dezvoltarea ei, trebuie instalată undeva. Dacă a fost dezvoltată pentru .NET, aplicația are nevoie de un server web Microsoft IIS (Internet Informations Services), acesta fiind cel mai mult apreciat decât orice alte servere web. Printre marile companii de success care utilizează tehnologia ASP.NET se numără:
Microsoft;
Dell;
HP;
Sony;
Samsung;
Exxon Mobil.
Capitolul II. XHTML
II.1 Introducere
XHTML (eXtensible HyperText Markup Language) este un limbaj de marcare, având aceleași capabilități expressive ca și HTML (HyperText Markup Language), dar cu sintaxa mai strict, a lui XML (Extensible Markup Language). Într-un mod mai simplu, XHTML poate fi privit ca o încruțișare dintre HTML și XML.
HTML este un limbaj foarte flexibil, a fost definit ca o aplicație a SGMML (Standard Generalized Markup Language), fiind un format text proiectat pentru a putea fi citit și editat de oameni utilizând un editor de text simplu. Practic XHTML este un înlocuitor modern al mai vechiului limbaj HTML, fiind aproape identic cu standardul HTML 4.01, o versiune îmbunătățită, mult mai strictă și mai curată a standardului HTML 4.0. Totuși, adevăratele documente XHTML permit prelucrări automate utilizând instrumente standard XML., în schimb HTML necesită un process relativ complex, în general personalizat.
XML este un limbaj de marcare pentru nașterea altor limbaje de marcare, cum ar fi: XHTML, RDF, RSS, MathML, SVG etc., acestea formând familia de limbaje XML. XHTML versiunea 1.0 a devenit o recomandare a W3C (World Wide Web Consortium) în data de 26 ianuarie 2000, iar versiunea 1.1 a devenit recomandare în anul 2001.
II.2 Prezentare generală
XHTML 1.0 respectă standardele stricte ale limbajului XML, reprezentând o reformulare a HTML 4.01. XHTML este de fapt varianta standard a lui HTML dar mai strictă și mai curată, aceste două termene fiind des folosite interschimbabil. W3C continuă să mențină specificațiile lui HTML 4.01. Cu avansarea modulelor XHTML definite în Modularizarea XHTML-ului, W3C a eliminat suportul pentru elementele si atributele depășite din familia XML.
W3C afirmă despre familia XHTML că “va fi pasul următor în evoluția Internetului”. Dezvoltatorii vor intra în lumea XML beneficiind de facilitățile sale având siguranța încrederii pentru compatibilitatea conținutului cu versiunile anterioare și viitoare.
II.3 Motivare
La sârșitul anilor 1990 se considera viitorul HTML ca o nouă versiune de aderare la regulile de sintaxă a XML. Versiunea curentă de atunci HTML 4 nu a avut nicio recomandare comform specificațiilor complexe a SGML (Standard Generalized Markup Language), chiar dacă era în aparență o aplicație a acesteia. S-a trecut la schimbarea bazei SGML cu XML, astfel HTML a devenit compatibil cu instrumentele commune XML. Pentru telefoanele mobile, și nu numai, conținutul va putea fi transformat datorită serverelor și proxy-urilor.
Un avantaj cheie constă în extensibilitate, prin faptul ca XHTML poate include fragmente din alte limbaje din familia XML, ca de ex. MathML sau Scalable Vector Graphics (SGV), prin utilizarea de namespaces. Astfel oferă oportunitatea de a curăța părțile murdare din limbajul HTML și de a-l diviza în component refolosibile, prin XHTML Modularization.
II.4 Relația cu HTML
HTML a apărut ca un răspuns al necesității de a descrie un set de informații într-un document, delimitând anumite secțiuni precum: titluri, paragrafe, liste, imagini etc. Spre deosebire de HTML cu care browserele afișează lejer interpretarea codului, chiar și erorile pe care le afișează adesea acceptabil sau chiar corect, ceea ce a condus în prezent la numeroase pagini web cu conținut eronat, XHTML a apărut pentru a contracara acest fenomen. Spre deosebire de ultimele versiuni de HTML, XHTML ca și standard de limbaj are reguli stricte. Cea mai importantă cerință este ca documentul să fie bine structurat, iar elementele trebuie să fie închise, după cum se solictă în XML. Toate numele și atributele din XML sunt case-sensitive, astfel încât prin abordarea XHTML, numele tag-urilor să definite prin litere mici.
În HTML bazat pe SGML era opțional închiderea valorilor atributelor, în schimb în XHTML este obligatoriu închiderea explicită a elementelor, fie prin ghilimele simple (‘) sau duble (”), fie prin adăugarea tastei slash (/). Recomandarea XHTML 1.0 are dedicat o secțiune pentru diferențele dintre HTML și XHTML, iar unele elemente HTML nu apar în Document Object Model (DOM), fiind opționale în modelul de conținut, doar dacă acestea sunt specificate în mod explicit.
HTML este probabil cel mai de success limbaj de creare al documentelor din lume. Dar când a apărut XML, o întâlnire care a durat două zile a fost organizată pentra a evalua necesitatea creării unei noi versiuni a HTML pentru a asigura compatibilitate cu XML. Opinia generală a fost în favoare pentru un HTML bazat pe XML. De asemenea, s-a profitat de ocazia oferită de acest re-design pentru a elimina anumite elemente nedorite care s-au strecurat în HTML și de a adăuga mai multă funcționalitate, spre exemplu formulare mai bune.
Dacă documentul este XHTML 1.0, fără să includă alte limbaje de markup, atunci nu se observă o diferență prea mare. Totuși, cum din ce în ce mai multe unelte XML devin disponibile, se va observa avantajele XHTML. XForms, un exemplu, va permite editarea documentelor XHTML, sau orice alt document XML, foarte ușor, într-un mod controlabil. Dacă documentul e mai mult decât XHTML 1.0, dacă include MathML, SMIL, sau SVG, atunci avantajele sunt immediate, cîci acestea nu se găsesc pentru HTML.
II.5 Adoptarea
Din cauza asemănărilor dintre HTML 4.01 și XHTML 1.0, mulți dezvoltatori web au adoptat XHTML, datorită recomandării W3C. Au fost puse la dispoziția acestora de către W3C, ghiduri pentru a-i ajuta în publicarea documentelor XHTML, într-o manieră compatibilă cu HTML și pentru browsere care nu au fost concepute pentru XHTML.
Cea mai ușoară metodă de convertire a documentelor HTML în documente XHTML este proiectul HTML Tidy, care permite transformarea oricărui document HTML într-unul XHTML. Amaya este un browser/editor care poate salva documentele HTML ca XHTML.
Browserele sunt pretențioase când e vorba de XML, acest lucru fiind intenționat. Browserele HTML acceptă orice input, corect sau incorect, și incearcă să îl interpreteze cum pot mai bine. Acest mecanism de reparare a erorilor face browserele greu de construit, în special că toate browserele ar trebui să repare erorile în modalități asemănătoare. Aceasta a rezultat că un număr foarte mare de documente HTML au fost făcute incorect, deoarece ele apar bine în browser, iar autorul nu și-a dat seama că există erori. Această slabă calitate a majorității paginilor web înseamnă o dificultate prea mare în crearea unui nou browser.
II.6 Critici
De ce autorii web au adoptat saltul la recomandarea XHTML era o întrebare pe care mulți dezvoltatori web o arătau la începutul anilor 2000. Alții spun că problem XHTML apar din două surse: producerea de documente invalide și lipsa de support pentru XHTML din Internet Explorer 6. Dezvoltatorii au continuat cu descrierea beneficiilor documentlor web bazate pe platforma XML, cu privire la indexare, căutare și analizare.
Primele mutări au fost făcute de companii mari care s-au bucurat apoi de avantajele unui sistem bine format. Se știa la vremea aceea că nu se poate face trecerea de la un suport la altul de către toată lumea odată. În acest scop, inventatorul HTML și fondatorul W3C a introdus un efort major pentru dezvoltarea noilor specificații pentru HTML 5 și XHTML 5, în octombrie anul 2006. Planul consta în crearea unui nou grup HTML, în definirea clară a conformităților criteriilor de “user agents” și actualizarea HTM-ului pentru îndepărtarea problemelor apărute în ultimii ani.
Grupul nou HTML 5 a funcționat inițial independent de W3C, fiind creat de un grup de dezvoltatori de browsere web și alte părți interesate numite WHATWG (Web Hypertext Application Tehnology Working Group).
Grupul a avut ca sprijin companiile Mozilla Foundation și Opera Software care, alăturându-se lui Apple, au cerut în anul 2007 adoptarea de către W3C munca noului grup HTML Working Group (HTML 5). Problema s-a rezolvat într-o lună, iar primul proiect public al grupului HTML 5 de la W3C a apărut în anul 2008.
II.7 Documente XHTML valide
Un document XHTML este valid dacă este în conformitate cu specificațiile XHTML. Valabilitatea documentului asigură consistența codului, facilitând prelucrarea, dar nu asigură neapărat consistent redarea în browser. Un serviciu oferit de W3C pentru validarea tehnologiilor folosite în site-ul web este W3C Markup Validation Service, cu care se poate testa un document dacă este sau nu valid. Alte verificări ale codului sunt furnizate de majoritatea programelor de dezvoltare web, bazate pe standardele W3C.
II.8 Elemente XHTML
Toate documentele XHTML trebuie să aibe o declarație DOCTYPE și elementele html, head, title și body. Declarația DOCTYPE este o etichetă HTML, motiv pentru care nu trebuie închisă cu simbolul “/“ ca în XHTML.
Exemple de declarații DOCTYPE:
declarația XHTML DOCTYPE transitional;
declarația XHTML DOCTYPE strict;
declarația XHTML DOCTYPE frameset.
Declarația XHTML DOCTYPE transitional
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Declarația XHTML DOCTYPE strict
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>
Declarația XHTML DOCTYPE frameset
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
Eticheta html – în HTML această etichetă nu avea atribute. În XHTML are atributul xmlns (XML NameSpace), cu valoarea adresei URL unde sunt prezentate specificațiile W3C.
<html xmlns="http://www.w3.org/1999/xhtml">
Declarația DOCTYPE și eticheta html informează browserul și validatoarele asupra tipului documentului, pentru o corectă interpretare.
Structura standard unei pagini XHTML este:
<!DOCTYPE html PUBLIC … >
<html xmlns="http://www.w3.org/1999/xhtml"> <head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Titlul paginii XHTML</title> </head>
<body>
Continutul pagini XHTML </body>
</html>
Elementul <head> – trebuie introdus între html și body pentru ca totul să funcționeze corect. Head nu are nici o funcție vizibilă, el poate oferi browserului informații foarte utile. Se pot insera printre altele coduri Javascrip sau CSS.
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
</html>
Elementul <title> – tag-ul title trebuie pus înăuntrul celui lui head. Ceea ce este scris între cele două tag-uri title (<title> și </title>) va putea fi vizualizat în browser ca și titlul acelei pagini web.
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Titlul paginii XHTML</title>
</head>
</html>
Elementul <body> – este cel care definește începerea conținutului paginii propriu-zise. Conținutul poate fi orice de la paragrafe, imagini, link-uri, muzică, video.
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Titlul paginii XHTML</title>
</head>
<body>
Continutul pagini XHTML
</body>
</html>
II.9 Tag-uri XHTML
Într-un document HTML absolute tot ceea ce este scris va fi citit și interpretat de browser. La găsirea unui tag de-a lungul documentului, browserul va trata tag-ul ca atare și îl va reda, de ex. Un paragraf, un titlu, un tabel, orice apare între tag-uri. Deschidere, conținut și închidere constituie cele trei părți ale unui tag. Tag-urile se scriu cu litere mici, fiind impus acest lucru de standardul de scriere din XHTML și Dynamic HTML.
…
<body>
Acționează ca o capsulă asupra conținutului..
<p>Paragraf</p>.
<h2>Titlu (heading)</h2> .
<strong>Ingrosat (bold)</strong>.
<em>Inclinat (italic)</em>.
</body>
…
Cele mai uzuale tag-uri XHTML:
II.10 Atribute XHTML
Atributele sunt definite ca fiind proprietăți ale tag-urilor. Atributele trebuie introduse doar în tag-ul de început. În cazul în care un tag nu are niciun atribut, browser-ul va lua în considerare valorile implicite pentru acel tag.
Lista cu cele mai folosite atribute:
“class” – cel mai folosit pentru a indica o clasă din CSS, de asemenea poate fi utilizată și de un JavaScript (prin intermediul HTML DOM) pentru a schimba elemente HTML cu o clasă specificată;
“id” – indică un id unic pentru un element. Atributul id poate fi utilizat de către un javascript (prin intermediul HTML DOM) sau de CSS pentru a face modificări sau stil de element cu ID-ul specificat;
“style” – specifică un stil inline pentru element. Atributul style suprascrie orice alt stil global. Ex. Stiluri din tag-ul <style> sau un stil extern;
“title” – specifică informații suplimentare despre un element. Informația este afișată de cele mai multe ori sub forma unui tooltip text, atunci când mouse-ul se află deasupra elementului;
“dir” – specfică direcția conținutului unui element;
“xml:lang” – specifică codul limbii pentru conținutul elementului în documentele XHTML;
“accesskey” – specifică o tastatură de comenzi rapide pentru a accesa un element;
“tabindex” – specifică ordinea într-un element.
Capitolul III. ASP.NET
ASP.NET este un set de tehnologii, un framework, pentru dezvoltarea aplicațiilor web, comercializat de firma Microsoft. ASP.NET reprezintă evoluția de la Microsoft Active Server Pages (ASP), beneficiind de suportul platformei de la Microsoft .NET. Permite programatorilor construirea site-urilor dinamice, aplicații și servicii web, totodată aceștia reușind să scrie cod ASP.NET folosind orice limbaj suportat de .NET. Este construit pe Common Language Runtime (CLR), prima versiune fiind lansată deodată cu .NET versiunea 1.0 framework în ianuarie 2002.
Spre deosebire de celelalte tehnologii, realizarea aplicațiilor web în ASP.NET aduce o serie de avantaje importante. Aplicațiile pot fi scrise utilizând toate facilitățile unor limbaje și medii de programare dezvoltate. Cele mai obișnuite tehnici de scriptare este cea bazată pe limbajul Java Script și cea bazată pe PHP. În primul caz, scriptarea se face la client, tehnica fiind numită „client-side-scripting”, iar în cel de-al doilea caz, scriptarea se face la nivelul server-ului, numită „server-side-scripting”. Față de tehnicile uzuale de server-side-scripting, ASP.NET introduce noțiunea de „server-side-controls”. În mod obișnuit, controalele sunt implementate manual, programatorul trebuind să aibe grijă la implementarea modului de manifestare al acestora la acțiunile utilizatorului, problema aceasta fiind complexă în realitate, indiferent de locația de la care se face scriptarea. Se pot implementa variabile care să rețină conținutul de moment al controalelor și comportamentul acestora. Problema majoră constă în implementarea diferită a JavaScript și este destul de dificil scrierea runtime care să funcționeze similar pe toate browserele. O alternativă este de a scrie cod HTML simplu pentru controale, apoi retrimiterea paginii spre server pentru refacerea ei în noul context.
Problema aceasta este rezolvată de ASP.NET prin intermediul controalelor pe server, controale care scriptează codul HTML necesar afișării controlului în browser. Totodată, generează funcțiile JavaScript și codul HTML ascuns care păstrează starea controlului. În momentul acționării asupra controlului de către utilizator, informația este furnizatp înapoi server-ului, iar controlul procesează automat informația, alterând codul HTML, astfel încât afișarea să fie făcută în noul context. Probabil cel mai mare avantaj al ASP.NET este posibilitatea creării de servicii web. ASP .NET are un set larg de componente, bazate pe XML, oferind astfel un model de programare orientat obiect (OOP). ASP.NET rulează cod compilat, ceea ce crește performanțele aplictiei web. Codul sursă poate fi separat în două fișiere, unul pentru codul executabil, iar altul pentru conținutul paginii (codul HTML și textul din pagină).
III.1 Istoric
Pentru rezolvarea reclamațiilor comune, în special cu privire la separarea prezentării de conținut și posibilitatea scrierii de cod „curat”, Microsoft a început cercetarea unor noi posibilități pentru modele de aplicații web în anul 1997, după lansarea lui Internet Information Services 4.0 (IIS). Mark Anders, un manager al echipei IIS, și Scott Guthrie, care s-a alăturat lui Microsoft în 1997 după absolvirea de la Duke University, au avut sarcina de a determina cum va arăta acel model. Proiectarea inițială a fost dezvoltată în decursul a două luni de Anders și Guthrie, Guthrie scriind prototipele inițiale în timpul sărbătorilor de Crăciun în 1997.
Prototipul inițial, numit XSP, a fost efectuat cu Java, urmând ca platforma să fie construită pe CLR (Common Language Runtime), oferind în acest mod un mediu de programare pe obiecte și alte caracteristici care nu erau suportate de platforma Microsoft Component Object Model. În acel timp, atât CLR cât și XSP erau în fază incipientă de dezvoltare, așa că Guthrie a riscat cu platforma web realizată, fiind legată de succesul a CLR. Intenționând a oferi o cale ușoară de migrare pentru dezvoltatorii ASP, odată cu trecerea la Common Language Runtime, XSP a fost reimplementat în C#, redenumit apoi în ASP+, astfel noua platformă fiind văzută ca succesorul lui Active Server Pages.
În a doua jumătate a anului 2000, brand-ul „.NET” a fost stabilit, fiind decisă redenumirea lui ASP+ la ASP.NET. Mark Anders a explicat în anul 2000, în apariția la The MSDN Show: „Initiativa .NET este legată de un număr mare de factori, de furnizarea soft-ului ca și serviciu, despre XML și serviciile web și consolidarea Internetului în termeni de ce se poate face… am vrut să aducem numele în conformitate cu restul platformelor care alcătuiesc .NET Framework.”
Prima versiune ASP.NET 1.0 a fost lansată în data de 5 ianuarie 2002, ca parte a versiunii 1.0 a .NET Framework, după patru ani de muncă în dezvoltarea acesteia. Microsoft a promovat-o foarte mult, a inclus-o în platforma lor de servicii web, zeci de cărți s-au scris despre ASP.NET. Guthrie a devenit Product Manager al ASP.NET, iar ritmul dezvoltării și-a urmat cursul cu versiunea 1.1 în data de 24 aprilie 2003, făcând parte a Windows Server 2003. Versiunea aceasta s-a axat pe îmbunătățirea suportului pentru dispozitivele mobile.
ASP.NET are calitatea important a timpului redus necesar dezvoltării aplicațiilor web. Prin tehnologia în sine și prin uneltele de dezvoltare de aplicații de la Microsoft (de ex. Visual Web Developer Express – VWD) reduc considerabil timpul de lucru față de alte tehnologii, având un limbaj de programare “managed” simplu, de genul C#, Visual Basic .NET, prin colecția bogată de biblioteci de clase și controale .NET, oferind multă funcționalitate “out of the box”.
III.2 Paginile
Paginile .NET, cunoscute oficial sub numele “web forms”, sunt blocul principal pentru dezvoltarea aplicațiilor. Formularele web sunt conținute în fișiere cu extensia “.aspx” și de obicei conțin marcaje statice (X)HTML și marcaje de definire server-side a Web Controls și a User Controls, unde dezvoltatorii pun codul static și dinamic necesar pentru o pagina web. În plus, codul dinamic ce rulează pe server poate fi pus în pagina într-un bloc <% – cod dinamic –%> care este similar cu alte tehnologii web ca și PHP, JSP și ASP, dar această practică este în general descurajată cu excepția propunerilor de “data biding” care solicită mai multe apeluri când redă pagina.
Exemplul acesta folosește cod “inline” și nu “code behind”:
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToLongDateString();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">
<title>Sample page</title> </head>
<body>
<form id="form1" runat="server"> <div>
The current time is: <asp:Label runat="server" id="Label1" /> </div>
</form>
</body>
</html>
ASP.NET cuprinde toate tehnologiile necesare pentru a dezvolta o aplicație web, scriind cantitatea minimă de cod. Pentru a crea aplicații ASP.NET pot fi utilizate o serie de limbaje de programare suportate de platform .NET, Visual Basic .NET sau C#, iar o caracteristică importantă a acestor limbaje, pe lângă faptul că sunt de tip “managed”, au fost create având în vedere paradigma programării orientată pe obiecte. Totul din .NET și ASP.NET este un obiect.
Există două variante de a găzdui o aplicație ASP.NET:
intern, pe serverele proprii;
extern, la o firmă care oferă servicii de găzduire (hosting).
Orice pagină ASP.NET presupune două componente:
partea de interfață (partea vizuală) – controalele propriu-zise care vor fi vizualizate de către utilizator;
codul .NET care va fi executat pe server atunci când se face o cerere către respectiva pagină (numit code-behind).
Deși putem alege modul în care se stochează pe hard-disc cele două componente (un singur fișier sau unul pentru fiecare componentă), este recomandat să alegem varianta a două, cea în care pentru fiecare pagină ASP.NET se crează un fișier de tipul <nume_pagină>.aspx și unul de tipul <nume_pagină>.aspx.cs (dacă proiectul nostru este dezvoltat cu C#) sau <nume_pagină>.aspx.vb (pentru Visual Basic .NET). Se consideră că este mai bine să separăm partea vizuală a aplicației, cea care conține controalele, de cea ”de logică”, unde este descrisă funcționalitatea.
III.3 Modelul Code-behind
În lucrul cu un program dynamic, Microsoft recomandă folosirea modelului cod-behind, deoarece acest cod va fi pus într-un fișier separate sau într-un script tag special proiectat. Fișiere ce conțin code-behind au numele de regulă MyPage.aspx sau MyPage.aspx.vb bazat pe numele fișierului ASPX (practica aceasta fiind automată în Microsoft Visual Studio și în alte IDE-uri). La folosirea acestui stil de programare, dezvoltatorul va scrie acest cod pentru a reacționa la diferite evenimente, de ex. când pagina se încarcă sau un click este dat asupra unui control.
Prin modelul code-behind se marchează plecarea de la clasicul ASP, unde se încuraja dezvoltatorii să construiască aplicații cu separarea în minte a prezentării și a conținutului. Prin această teorie, designer-ului îi este dat voie să se concentreze asupra proiectării site-ului cu un potențial mai scăzut de problemele distribuirii codului care îl conduce.
Exemplu:
<%@ Page Language="C#" CodeFile="SampleCodeBehind.aspx.cs"
Inherits="Website.SampleCodeBehind"
AutoEventWireup="true" %>
Tag-ul de mai sus este situat la începutul fișierului ASPX. Proprietatea CodeFile al directivei @ Page specifică fișierul (.cs sau .vb) care are rolul de code-behind în timp ce proprietatea “Inherits“ (moștenește) specifică clasa de pagini din care derivă. În exemplul prezentat, directive @ Page este inclusă în SampleCodeBehind.aspx, și atunci SampleCodeBehind.aspx.cs acționează ca code-behind pentru această pagină.
using System;
namespace Website
{
public partial class SampleCodeBehind : System.Web.UI.Page
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
}
}
}
În cazul acesta, metoda Page_Load() este apelată de fiecare dată când pagina ASPX este accesată. Programatorul poate să implenteze mai multe “event handlers” în mai multe stagii în procesul de execuție a paginii pentru a efectua procesul de prelucrare.
III.4 Controalele utilizatorului
ASP.NET, ca oricarea altă tehnologie modern pentru dezvoltarea aplicațiilor web, cuprinde o serie de controale, de la cele simple cum sunt butoane, liste de selecție, până la controalele avansate, cum e autentificarea. Pe lângă setul foarte complet de controale, ASP.NET permite programatorului să dezvolte propriile sale controale, pornind de la cele existente. În principiu, programatorul poate să încapsuleze într-un control propriu absolut orice funcționalitate permisă de o aplicație web.
ASP.NET suportă crearea componentelor refolosibile prin crearea a “User Controls”. Un “User Control” urmărește aceași structură a unui formular web, cu excepția că unele controale sunt derivate din clasa System.UI.UserControls, și sunt stocate în fișierele ASCX. Ca și fișierele ASPX, fișierele SCX conțin marcaj static HTML sau XHTML, dar și marcaje de definire a “Web Controls” și alte “User Controls”. Poate fi folosit modelul code-behind.
Programatorii pot adaugă proprietățile, metodele și “event handlers” proprii. Ei mai pot construi controale customizate pentru aplicațiile ASP.NET, unde controalele sunt compilate în fișiere DLL, și folosind directive Register ei pot folosi controalele din DLL.
III.5 Tehnica de interpretare
Tehnica de interpretare folosită de ASP.NET este “visited composites”. În timpul compilării, fișierul template (.aspx) este compilat în cod de inițializare care contruiește un control tree (the composite) reprezentând template-ul original.
Solicitările reale ale paginii sunt prelucrate printr-un număr de pași. Prima dată, prin pașii de inițializare, clasa paginii este instanțiată, iar codul de inițializare este executat. Acesta produce “control tree-ul (arbore)” inițial care este manipulat de metodele paginii în etapele următoare. Fiecare nod din arbore reprezintă un control afișat ca o instanță a unei clase, codul putând schimba structura arborelui și putând manipula proprietățile și metodele nodurilor individuale. După procesarea cererii, se înlătură instanța clasă a paginii împreună cu întregul “control tree”.
III.6 Managementul stărilor
Aplicațiile ASP.NET sunt găzduite de un server web și sunt accesate prin protocolul HTTP fără stări. Dacă sunt folosite stări de interacțiune de către aplicație, atunci trebuie implementat managementul stărilor. ASP.NET oferă diverse funcționalități în managementul stărilor în aplicații:
Application state – este o colecție de variabile definite de utilizator care participă într-o aplicație ASP.net. Acestea sunt setate și inițializate atunci când evenimentul Application_OnStart este lansat în încărcarea primei instanțe a aplicației și sunt disponibile până la ieșirea ultimei instante. Variabilele sunt accesate folosind colecția Applications, care oferă un înveliș pentru variabile.
Session state – este o colecție de variabile definite de utilizator care persistă doar în sesiunea utilizatorului. Aceste variabile unice pentru diferitele instanțe ale sesiuni unui utilizator și sunt accesate folosind colectia Session. Variabilele sesiunii pot fi setate să fie distruse automat după un timp definit de neactivitate, chiar dacă sesiunea nu a luat sfârșit. Pe partea clientului, o sesiune de utilizator este identificat fie de un cookie sau de un ID codat in URL.
View state – se referă la mecanismul managementului stărilor al paginii, care este folosit de paginile HTML, emise de aplicațiile ASP.NET pentru a menține starea controalelor web. Starea controalelor este codificată și trimisă la server la fiecare transmisie într-un câmp ascuns cunoscut ca __VIEWSTATE. Servereul trimite înapoi variabile ca atunci când pagina este reilustrată, controalele să fie ilustate la ultima stare. Pe partea serverului, aplicația poate schimba viewstate-ul, dacă procesul rezultă în actualizarea stări unui control. Stările controalelor individuale sunt decodată pe server și sunt disponibile pentru folosință în ASP.NET folosind colecția ViewState.
III.7 Structura directoarelor
Structura de directoare din ASP.NET se poate determina în general după preferințele fiecărui dezvoltator. Pe lângă câteva dintre directoarele rezervate, numărul directoarelor din cadrul unui site este nelimitat. Structura este reflectată de obicei direct în URL-uri. Deși ASP.NET oferă mijloace de interceptarea cererii, în orice punct al prelucrării, dezvoltatorul nu este obligat să treacă cererile prin intermediul unei pâlnii al unei aplicații centrale.
Directoarele speciale prezente la versiunea ASP.NET 2.0 sunt:
App_Browsers – directorul conține fișiere de definiții pentru browser specifice site-ului;
App_Code – directorul conține codul sursă;
App_Data – directorul implicit pentru bazele de date;
App_LocalResources – conține fișiere de resurse localizate pentru pagini individuale ale site-ului;
App_GlobalResources – conține fișiere resx cu resurse localizate pentru fiecare pagina a site-ului;
App_Themes – conține teme alternative ale site-ului;
App_WebReferences – conține fișiere WSDL (Web Service Description Language) pentru referințe la servicii web;
Bin – conține codul compilat (fisiere *.dll).
III.8 Compilarea
Performanța ASP.NET țintește spre beneficiile acestui framework, care sunt superioare altor limbaje de script, trecând inclusiv peste ASP clasic. Partea de server este compilată într-unul sau mai multe fișiere .dll pe server-ul web. În momentul accesării de către un utilizator, a unei pagini dintr-un website creat cu ASP.NET, respectiva cerere va fi trimisă de IIS (Internet Information Services), adică de server-ul web de la Microsoft, către ASP.NET pentru a fi procesată. Pagina respectivă va fi compilată în format Microsoft Intermediate Language (MSIL), după care va fi procesat de către Common Language Runtime, component din .NET cu responsabilitatea execuției codului. La cereri succesive către aceeași pagină, aceasta nu va mai fi compilată din nou, ci va fi executat direct codul în format MSIL.
III.9 Execuția și performanța
Codul ASP.NET este rulat într-un singur proces (w3wp.exe în IIS6). Cererile către server sunt introduse într-o coadă de așteptare și sunt executate pe fire de execuție diferite, folosindu-se un mecanism de ”thread pooling”, adică de reutilizare a firelor de execuție pentru a nu reduce semnificativ performanța cu timpii relativ lungi de a crea câte un fir pentru fiecare cerere.
Mecanismul de Garbage Collection (GC) adusă de platforma Microsoft .NET, are rolul de a distruge acele obiecte care au fost create și nu au mai fost folosite de un timp îndelungat, timp care este ambiguu. Mecanismul dispus de Garbage Collection poate clasifica obiecte în funcție de momentul în care au fost create și de durata față de ultimul acces la acestea. GC distruge obiectele vechi, neaccesate demult, crescând ca importanță (și prin urmare scăzând timpul maxim permis pentru un obiect să stea în memorie după ultimul acces) pe măsură ce memoria este folosită mai intens.
GC în aplicațiile ASP.NET îngheață (blochează) toate firele de execuție care au menirea de a procesa cereri, până termină de curățat obiectele vechi, acest lucru petrecându-se folosind niște fire de execuție speciale, cu prioritate ridicată.
ASP.NET a fost gândit ca o extensie ISAPI (Internet Server API) pentru IIS5 și IIS6, iar în IIS7 poate să ruleze și în modul Integrated Pipeline. Internet Server API (Application Programming Interface) este elaborat de Microsoft în scopul de a înlocui “batrânul” CGI (Common Gateway Interface), care a devenit lent și greu de utilizat în condițiile unor cereri HTTP multe și intense. Fiind orientat pe partea de server, spre deosebire de Java, ActiveX și VBScript care sunt tehnologii web pe partea client, ISAPI este o îmbunătățire adusă CGI-ului, care este ineficient deoarece startează un proces de fiecare dată cât este apelat, ceea ce duce la costuri ridicate în Windows NT. Pe de alta parte, CGI-ul este dificil pentru dezvoltarea de aplicații mari client/server și profesionale. Cadrul de lucru al ISAPI constă în definirea unei metode DLL care va fi pusă pe server-ul IIS (Internet Information Server).
Extensia ISAPI, un DLL ce exportă funcții specifice în concordanța cu specificațiileISAPI, este de două tipuri:
aplicatii ISAPI – din punct de vedere conceptual au loc în interiorul proceselor și pot fi folosite pentru îmbunătățirea paginilor HTML și furnizarea de date dinamice (cum ar fi CGI);
filtre ISAPI – din punct de vedere conceptual sunt situate între serverul HTTP și socket-ul HTTP, pot fi utilizate pentru adăugarea de noi scheme de autentificare, suport pentru noi metode de criptare sau compresie, schimbarea conținutului paginii clientului sau a unor scheme de autentificare, furnizarea unui istoric avansat al login-urilor etc.
După ce o cerere pentru un site ASP.NET venită de la utilizator, trece prin IIS și este trimisă către aspnet_isapi.dll, intră în joc un pipeline de ASP.NET. Astfel, cererea este trecută printr-o serie de module HTTP (cum sunt Session, Output Cache, Authentication, etc), iar în final cererea ajunge la handlerul HTTP specific cererii. Handler-ul HTTP este cel care în cele din urmă interpretează cererea, și este ales pe baza extensiei fișierului adresat. De exemplu, .aspx reprezintă o pagină ASP.NET și declanșează handlerul specific paginilor, .asmx reprezintă un serviciu web și declanșează un alt handler, etc. În final, după procesarea specifică handler-ului, rezultatul este retrimis către server și în cele din urmă către utilizator sub formă de HTML.
Din cauza acestei integrări, IIS7 și ASP.NET pot să folosească aceleași configurări pentru modulele și handlerele HTTP. De asemenea, se pot unifica funcționalități ca: tracing, erori customizate, cache la nivel de pagini.
III.10 Caching
ASP.NET permite caching-ul pe mai multe nivele. În primul rând, la nivel de pagini. Dacă avem pagini cu conținut static, deci care nu se modifică în timpul execuției, are sens să luăm în considerare opțiunea de a salva conținutul acestora pe server, pentru a fi servite direct, fără procesarea request-ului. Chiar mai mult, avem opțiunea de a efectua ”partial cache” în situațiile în care doar anumite componente ale unei pagini sunt statice, iar restul sunt dinamice.
ASP.NET ne oferă posibilitatea de a salva date / stare de obiecte la nivelul memoriei IIS. De exemplu, atunci când citim din baza de date o listă de elemente, și lista respectivă este mai mult sau mai puțin constantă în timpul execuției, are sens să o salvăm in cache-ul ASP.NET pentru ca la cereri succesive să fie luată de acolo fără a mai interoga sursa de date (server de baze de date, fișier, serviciu web, etc.).
III.11 Lucrul cu baze de date
Chiar dacă acest subiect ține mai degrabă de componenta ADO.NET, este destul de uzual ca în aplicațiile web ASP.NET să se lucreze cu baze de date, și de aceea vom aloca un episod acestui subiect. Până atunci, legat de performanță menționăm funcționalitatea numită ”connection pooling” care are abilitatea de a reutiliza conexiuni la baza de date. Cu alte cuvinte, dacă avem 100 de utilizatori simultan conectați la aplicație, și fiecare cerere din cele 100 fac la un moment dat un apel la baza de date, asta nu înseamnă că se vor deschide 100 de conexiuni la serverul de baze de date, ci mult mai puține.
III.12 Interoperabilitatea
ASP.NET face parte din platforma Microsoft .NET și deci poate să ruleze pe sistemele de operare pe care aceasta poate să ruleze. Acestea sunt toate versiunile de Windows de la 2000 încoace.
În ceea ce privește alte sisteme de operare, există opțini și acolo. Datorită faptului că Microsoft .NET reprezintă implementarea de la Microsoft pentru niște standarde deschise, asta a permis ca alte implementări să fie realizate, cea mai cunoscută dintre ele fiind Mono (http://www.mono-project.com/Main_Page ). În mare parte, aplicațiile .NET care au fost dezvoltate folosind C# / .NET / Visual Studio / Windows, pot fi compilate Mono pentru sisteme de operare altele decât Windows. Spunem ”în mare parte”, pentru că există unele zone în care diferențele dintre sistemele de operare sunt majore (de exemplu modul în care au fost implementate interfețele grafice în sisteme de operare diferite).
Capitolul IV. Microsoft SQL Server
Microsoft SQL Server este un sistem de gestionare, un server de baze de date model relațional. Limbajele primare de interogare sunt T-SQL și ANSI SQL. Suportă versiunea companiei Microsoft de SQL (Structured Query Language), însemnând un limbaj structurat pe interogări, și reprezintă cel mai răspândit limbaj pentru baze de date. A fost conceput special pentru compani mari sau intreprinderi, programul suportând baze de date de dimensiuni foarte mari. O bază de date este constituită dintr-un ansamblu structurat de date evolutive, organizate pentru a fi exploatate de diferite programe (aplicații).
SQ este un limbaj standard pentru accesarea și manipularea bazelor de date, fiind un standard ANSI (American National Standards Institute). Cu toate că SQL este standard ANSI, există mai multe versiuni ale limbajului SQL, totuși, cel puțin comenzile principale (SELECT, UPDATE, INSERT, DELETE) sunt permise într-un mod aproape unitar de toate implementările, pentru compatibilitate.
Ce poate face limbajul SQL pe scurt:
poate executa interogări la baza de date;
poate extrage date din baza de date;
poate insera înregistrări în baza de date;
poate actualiza înregistrări în baza de date;
poate șterge înregistrări în baza de date;
poate crea noi baze de date;
poate crea noi tabele în baza de date;
poate crea proceduri stocate, funcții, triggere;
poate crea vizualizări în baza de date;
poate stabili permisiuni asupra entităților din baza de date.
IV.1 Istoric
Când vine vorba despre stocarea informațiilor, pentru unii acest termen înseamnă o agenda veche în care sunt trecute toate datele importante de care au nevoie: adrese, numere de telefon, informații financiare etc. Pentru cei din domeniul IT și nu numai, înseamnă sisteme dedicate special stocării datelor importante.
Primele baze de date erau dezvoltate pe sisteme mainframe și erau manipulate de oameni special pregătiți pentru a gestiona aceste sisteme. Aceste baze de date erau simple Sisteme de Gestiune a Bazelor de Date (SGBD). Primul Sistem de Baze de Date Relaționale (SGBDR) a fost lansat de Oracle Corporation si folosea limbajul de interogare SQL. Deși versiunea originală a fost dezvoltată pentru sisteme VAX/VMS, Oracle a fost unul dintre primii furnizori care a lansat o versiune si pentru sistemele PC pe sistemul de operare DOS.
Împotriva lui Oracle a venit principala concurență Microsoft SQL Server, când Microsoft a intrat în piața bazelor de date, la nivel de intreprinderi, concurând nu numai lui Oracle, ci și lui IBM și Sybase. Proveniența codului de bază al SQL Server (înainte de versiunea 7.0) își are originile de la Sybase SQL Server. Echipa formată din Microsoft Sybase și Asthon – Tate a creat pentru a scoate pe piață prima versiune SQL Server 1.0 pentru sistemul de operare OS/2, în anul 1989, având același mod de lucru cu Sybase SQL Server 3.0 pentru Unix. Mai târziu Microsoft a negociat pentru drepturi de exclusivitate la toate versiunile de SQL Server scrise pentru sistemele de operare Microsoft. Sybase și-a schimbat ulterior numele în Adaptive Server Enterprise pentru a se evita confuzia cu Microsoft SQL Server. SQL Server 7.0 a fost primul server de baze de date bazat pe GUI. O variantă de SQL Server 2000 a fost prima variantă comercială pentru arhitectura Intel. Microsoft SQL Sever folosește o variantă de SQL numită T-SQL, sau Transact-SQL, o implementare de SQL-92 (standardul ISO pentru SQL) cu unele extensii. T-SQL în principal adăuga sintaxa adițională pentru procedurile stocate și pentru tranzacții. Standardele SQL necesita ACID – patru condiții pentru orice tranzacție, sintetizate prin acronimul ACID: atomicitate, consistentă, izolare, durabilitate. MS SQL Server suportă ODBC (Open Database Connectivity).
Odată cu versiunea 2005 (nume de cod Yukon), ieșită pe piață în octombrie 2005 și care este succesorul versiunii SQL Server 2000, Microsoft aduce o serie de îmbunătățiri precum suport pentru gestionarea de date XML, în plus față de date relaționale. Metode de indexare specializate au fost puse la dispoziția datelor XML, iar interogarea lor se face folosind XQuery. Sql Server 2005 adăuga unele extensii limbajului T-SQL precum funcții de eroare a manipulării și suport pentru interogările recursive. Permisiunile și controlul accesului au mai multă granularitate. Alături de T-SQL, această versiune introduce și CLR (SQL Common Language Runtime) pentru o mai bună integrare cu .NET Framework.
Versiunea SQL Server 2008, lansată pe 6 august 2008 cu nume de cod Katmai aduce și ea, așa cum era de așteptat, alte îmbunătățiri. Acum oferă suport pentru stocarea datelor multimedia și adaugă noi tipuri de date (geometry, geography, hierarchy și mult așteptatul date fără datetime). În data de 6 martie 2012 s-a lansat versiunea MS SQL Server 2012, iar ultima versiune apărută este Microsoft SQL Server 2014, în data de 18 martie 2014.
IV.2 Arhitectura
“Protocol layer” implementează o inferfață externă a SQL Server. Toate operațiile care pot fi invocate pe SQL Server sunt comunicate prin intermediul unui format de definiție Microsoft, numit Tabular Data Stream (TDS). TDS este folosit pentru a transfera date între sever și client. Inițial a fost dezvoltat de către Sybase pentru produsul lor Sybase SQL Server și anume motorul de baze relaționale în anul 1984, și mai târziu de către Microsoft în Microsoft SQL Server. Pachetele TDS puteau fi incapsulate în alte transportoare fizice putând fi transmise prin intermediul mai multor protocoale, inclusive TPC/IP. În final accesul la SQL Server era posibil prin aceste protocoale, în plus SQL Server API a fost expus și câtora servicii web.
IV.3 Stocarea datelor
O colecție de tabele, o bază de date, constituie principala unitate de stocare a datelor. MS SQL Server suportă diferite tipuri de date, incluzând tipurile primare de date Integer, Float, Decimal, Char (inclusive șiruri de caractere), Varchar, binary, text și altele. De asemenea mai permite tipuri compozite (composite types) definite de utilizator (UDT) pentru a fi definite și utilizate. SQL Server de asemenea crează statistici fiind disponibile ca tabele virtuale și Dynamic Management Views (DMV). O bază de date poate să conțină și alte obiecte inclusiv : DMVs, proceduri stocate, index-uri în adiție tebelelor împreună cu un log de tranzacție. O bază de date SQL Server poată să conțină un maxim de 231 obiecte și se poate întinde pe mai multe sisteme de operare la nivel de imagini cu o dimensiune maximă a fișierului de 220 TB. Datele din bazele de date sunt stocate în fișierele de date primare cu extensia “.mdf”, cele secundare cu extensia “.ndf” sunt folosite pentru metadata, iar fișierele de log sunt cu extensia “.ldf”.
Spațiul de stocare alocat unei baze de date este impărțit secvențial în pagini, fiecare cu dimensiunea de 8 KB. O pagină este unitatea de bază într-o operație SQL Server de I/O (input/output; intrare/ieșire). O pagină este marcată cu un antet de 96-byte care stochează metadata paginii, inclusiv numărul paginii, tipul paginii, spațiul liber din pagina și ID-ul obiectului pe care îl deține. Tipul paginii definește datele care sunt conținute de pagina – datele stocate în baza de date, indexul, harta alocării care conține informații despre cum sunt alocate paginile la tabele și indexuri, harta de schimbări care conține informații despre schimbările altor pagini de la ultimul backup sau ultima logare, sau conțin tipuri de date mari cum sunt imaginile sau textul. Atâta timp cât pagina va fi unitatea de bază a unei operații I/O, spațiul este gestionat în termeni de măsură, care este gestionat în 8 pagini.
Un obiect din baza de date poate acoperii toate cele 8 paginii într-o măsură (“uniform extent” – masură uniformă) sau poate împărți această măsură cu până la alte 7 obiecte (“mixed extent” – măsură mixtă). Un rând într-o bază de date nu se poate acoperii mai mult de o pagină, deci este limitat la dimensiunea de 8 KB. Cu toate acestea, dacă datele depășesc limita de 8 KB și rândul conține date de tip Varchar sau Varbinary, datele din acele coloane sunt mutate într-o nouă pagină (sau posibil o succesiune de pagini numite “Allocation Unit”) și este înlocuită cu un pointer la acea dată.
Pentru stocarea fizică a tabelelor, rândurile lui sunt impărțite într-o serie de partiții (numerotate de la 1 la n). Mărimea partiților este definite de utilizator; de obicei toate rândurile sunt într-o singură partiție. Un tabel este împărțit în mai multe partiții, pentru a răspândii baza de date peste un clușter (un grup de calculatoare). Rândurile din fiecare partiție sunt stocate fie în arbori de tip B fie într-o structură HEAP. Dacă tabelul are un index asociat, pentru o extragere rapidă a rândurilor, rândurile sunt stocate în ordine după indice (index) în arbori de tip B.
Putem spune despre Microsoft SQL Server că este o soluție integrată de management și analiză a datelor, care ajută organizațiile de orice dimensiune să:
dezvolte, implementeze și administreze aplicații la nivel de întreprindere mai sigure, scalabile și fiabile;
maximizeze productivitatea IT prin reducerea complexității creării, implementării și administrării aplicațiilor pentru baze de date;
partajeze date pe mai multe platforme, aplicații și dispozitive pentru a facilita conectarea sistemelor interne și externe;
controleze costurile fără a sacrifica performanța, disponibilitatea, scalabilitatea sau securitatea.
IV.4 SQL Server
Microsoft SQL Server este un sistem de gestionare de baze de date relaționale (RDBMS), produs de compania americană Microsoft. Microsoft SQL Sever foloseste o variantă de SQL numită Transact-SQL (T-SQL), care este o implementare de SQL-92 cu unele extensii pentru procedurile stocate și tranzacții. Se ocupă cu stocarea și gestionarea resurselor, a datelor pentru sisteme mari de procesare a datelor și a site-urilor comerciale Web, furnizând și servicii destocare a datelor pentru afaceri individuale sau mai mici. SQL Server este o soluție flexibilă și adaptativă la diversele categorii de clienți, răspunzând la o serie de nevoi precum: un nivel ridicat de scalabilitate, performanță și siguranță în exploatare.
Caracteristicile cele mai importante ale acestui sistem sunt următoarele:
Scalabilitate și performanța – Prin noțiunea de sistem scalabil se întelege acel tip de sistem care pune la dispoziția designer-ilor posibilitatea de a porni de la sisteme mici și de a crește în funcție de necesități. Microsoft SQL Server este conceput pentru a suporta baze de date și aplicații uriașe, cum ar fi baze de date “multiterabyte” folosite de milioane de persoane. Acest lucru este atins prin caracteristică numită scalabilitate care permite userilor să adauge procesoare, memorii și rețele pentru construirea unui singur nod mare, permițând ca o bază de date imensă să fie partiționată într-o grupă de servere. Baza de date este considerată în continuare ca o singură entitate.
Integrarea – SQL Server prezintă un nivel ridicat de integrabilitate cu alte servere sau alte aplicații.
Simplitate în administrare – oferă instrumente grafice de configurație și experți wizard pentru realizarea diverselor operații de configurare și administrare a bazelor de date.
Optimizări dinamice – SQL Server poate fi configurat să optimizeze dinamic parametri bazei de date pentru a răspunde la schimbarea caracteristicilor de utilizare. Pentru utilizatorii la nivel de întreprindere, SQL Server se integrează facil în majoritatea mediilor de management al întreprinderii
Securitatea ridicată a datelor.
Se adaptează foarte bine la cerințele utilizatorilor acest lucru fiind demonstrate prin numărul mare de ediții la număr, permițând integrarea MS SQL Serverului pe o gama variată de echipamente. Sunt oferite spre dispoziția clientului tool-uri (client tools) care permit un acces ușor la informațiile din baza de date. Cele mai importante două tool-uri ssunt: Enterprise Manager și Querz Analyzer. Există o diferență mare între cele două tool-uri. Enterprise Manager este un tool graphic pentru administrarea server-ului, în timp ce Query Analyzer este un “command-line tool”, realizat în scopul rulării interogărilor. Alte tool-uri mai există, de asemenea “osql” și “sqlcmd”. Acestea se numesc “operating-szstem command tools”, sunt capabile să acceseze direct server-ul de la linia de comandă.
Un sistem SQL Server poate fi implementat ca și un sistem client-server sau ca și sistem desktop “stand-alone”. Tipul sistemului ce urmează a fi proiectat depinde de numărul de useri care accesează baza de date simultan și de operațiile pe care le efectuează.
IV.5 Sistemul client-server
Sistemul client-server este o arhitectură de rețea în care fiecare calculator sau proces din rețea este un client sau un server. În mod normal, această arhitectură împarte o aplicație în trei componente de bază: clientul, infrastructura rețelei (marcată prin caracterul slash) și server-ul, fiind o arhitectură stratificată. Din punct de vedere al arhitecturii client/server, un client este un calculator personal (PC) sau o stație de lucru (workstation) pe care utilizatorul rulează diverse aplicații și care cere server-ului efectuarea unor operații. Server-ele sunt calculatoare puternice sau procese dedicate să administreze: unitățile de disc (file server), imprimante (print server), traficul pe rețea (network server) etc.
Calculatorul client este acela care interacționează cu un utilizator și care în majoritatea tipurilor de arhitecturi client/server are două sarcini: logica prezentării (interfața cu utilizatorul) și logica aplicației (afacerii). Într-o aplicație tradițională client-server, clientul conține partea de prezentare (afișarea, folosind o interfață prietenoasă), lucrul efectuat de aplicație (calcule, algoritmi) și manipularea datelor (conectivitatea cu bazele de date).
Calculatorul server poate fi orice calculator de birou puternic, superservere specializate bazate pe microprocesoare Intel, minicalculatoare, calculatoare mainframe sau chiar supercalculatoare și al cărui rol într-o rețea este acela de a furniza servicii și resurse utilizatorilor. Funcția de bază a acestuia este responsabilitatea administrării accesului la baza de date: sortarea datelor, selectarea acelora de care are nevoie clientul, asigurarea că alți clienți nu încearcă modificarea unor înregistrări pe care alți clienți le vizualizează etc.
Arhitectura tradițională client-server pe „două etaje (straturi)“ presupune:
client-ul – responsabil, în primul rând, de prezentarea datelor către client;
server-ul – responsabil, în primul rând, de furnizarea serviciilor către client.
În cadrul acestei arhitecturi interfața de sistem cu utilizatorului (logica prezentării) este plasată în mod exclusiv în mediul de lucru al utilizatorului (clientul) și serviciile de gestiune a bazei de date (logica accesului la baza de date) sunt plasate pe un server care este cel mai puternic calculator care deservește rețeaua. Administrarea prelucrării este împărțită între client și server, prin crearea celor două niveluri: un nivel corespunzător aplicației (logica afacerii – reprezintă partea programului care implementează condițiile în care se desfășoară afacerea) și un nivel corespunzător bazei de date (validarea din partea server-ului).
Arhitectura client-server pe „trei etaje“ presupune trei straturi, fiecare fiind rulat, potențial, pe o platformă diferită.
stratul (client) format din interfața cu utilizatorul, care este rulat pe calculatorul utilizatorului final;
stratul (server de aplicație), ce manevrează logica aplicațiilor și prelucrării datelor, și care poate servi mai mulți clienți (conectarela celelalte două straturi se face prin rețele locale LAN sau de mare suprafață WAN);
stratul (server-ul de baze de date), care se ocupă cu validarea datelor și accesarea bazei de date (stochează date necesare stratului din mijloc).
Arhitectura client-server pe trei niveluri este utilizată atunci când noua aplicație client-server distribuită trebuie să permită (comparativ cu arhitectura pe două niveluri) performanțe mai bune, flexibilitate, mentenabilitate (întreținere), reutilizabilitate, și scalabilitate, în timp ce se ascunde complexitatea prelucrării distribuite față de utilizator. Aceste caracteristici fac din arhitectura client-server pe trei niveluri o alegere des întâlnită pentru aplicațiile Internet și pentru sistemele informatice axate pe rețea (net-centric information systems).
O primă diferență între aplicațiile pe două și pe trei niveluri este dată de prezența unui nivel software suplimentar pe server. Dacă aplicațiile client-server pe două niveluri tind să pună logica afacerii fie pe partea client și trecerea înregistrărilor (datele) în baza de date (model cu client subțire), sau trecerea înregistrărilor în baza de date unde proceduri stocate și declanșatoare (trigger-e) implementează logica aplicației (model cu client gras), aplicațiile pe trei niveluri tind să treacă mesaje între porțiunile client și server ai codului aplicației. Porțiunea de server îndeplinește logica aplicației, apoi trimite tranzacții către baza de date. În comunitatea client-server logica aplicației este numită regulile afacerii (business rules). Beneficiile aduse de arhitectura client-server pe trei niveluri includ: scalabilitate, un trafic de rețea în general redus și flexibilitate.
IV.6 Sistemul desktop
Microsoft SQL Server poate fi folosit ca și server de baze de date “stand-alone” care rulează pe un calculator desktop sau un laptop. Aplicația clientului rulează pe același calculator pe care se stochează motorul SQL Server și bazele de date. În sistem este implicat doar un singur calculator, clientul conectându-se local la serverul bazei de date. Sistemul desktop este folositor în cazul în care un singur utilizator accesează baza de date sau mai mulți utilizatori care folosesc calculatorul accesează baza de date în momente diferite de timp.
Fiecare instanță a SQL Server deține patru baze de date sistem: master, model, tempdb și msdb și una sau mai multe baze dedate utilizator. Unele organizații au doar o bază de date utilizator care conține toate datele; altele au baze de date diferite pentru fiecare grup din organizație, iar uneori o bază de date este utilizată doar de o singură aplicație. Nu este necesară rularea mai multor copii a motorului bazei de date pentru a permite mai multor utilizatori să acceseze baza de date pe un server. O instanță a versiunii SQL Server Standard sau Enterprise Edition poate face față miilor de utilizatori care lucrează în baze de date multiple simultan. Fiecare instanță a SQL Server face disponibile toate bazele de date din instanță tuturor utilizatorilor care se conectează la instanță, în conformitate cu permisiunile de securitate definite.
La conectarea la o instanță SQL Server, conexiunea este asociată unei anumite baze de date de pe server. Această bază de date se numește bază de date curentă. De obicei, conexiunea se face la baza de date definită ca implicită de către administratorul de sistem, dar se poate specifica o altă bază de date la opțiunile conexiunii. Trecerea de la o bază de date la alta se poate face prin statement-ul Transact-SQL USE database_name sau printr-o funcție API care modifică contextul curent al bazei de date.
SQL Server permite detașarea bazelor de date de la o instanță SQL Server și reatașarea lor la altă instanță sau chiar la aceeași instanță. Dacă avem un fișier de baze de date SQL Server putem specifica la conectare, să se atașeze acel fișier la un anumit nume de bază de date.
IV.7 Limbajul SQL
SQL (Structured Query Language) este în prezent, unul din cele mai puternice limbaje structurate pentru interogarea bazelor de date relaționale, folosit intensiv, care oferă mijloace de manipulare a datelor (stocare, primire, update și stergere) precum și de creare a bazelor de date.
Este un limbaj neprocedural și declarativ, deoarece utilizatorul descrie ce date vrea să obțină, fără a fi nevoie să stabilească modalitățile de a ajunge la datele respective. Nu poate fi considerat un limbaj de programare sau unul de system, ci mai degrabă face parte din categoria limbajelor de aplicații, fiind orientat pe mulțimi. Foarte frecvent, este utilizat în administrarea bazelor de date client-server, aplicația client fiind cea care generează instrucțiunile SQL.
Pentru că există o standardizare a limbajului SQL, aproape toate sistemele de management a bazelor de date relaționale, cum ar fi Microsoft SQL, Microsoft Access, MSDE, Oracle, DB2 , Sybase, Mysql, Postgres și Informix folosesc SQL ca limbaj de baze de date standard, sisteme de management ce folosesc “dialecte” diferite ale acestuia (de ex. MS SQL Server folosește T-SQL, Oracle are versiunea PL/SQL).
Baza oricărui sistem de management al bazelor de date tranzacționale o reprezintă un tabel. Fiecare bază de date este alcătuită din una sau mai multe tabele care stochează informația din baza de date. Fiecare tabel are un nume unic și este alcătuit din coloane și linii. Coloanele tabelului bazei de date , care mai sunt numite și câmpuri, au fiecare un numar unic și un tip predefinit de date. Coloanele tabelului pot avea atribute diferite. Atributul definește funcționalitatea coloanei. În timp ce coloanele tabelului descriu tipul de date, liniile conțin datele efective ale coloanelor.
Exemplu SQL în Microsoft SQL Server, cu execuția următoarelor script-uri:
crearea tabelei Produse:
CREATE TABLE Produse (DenumireProdus NVARCHAR(100) PRIMARY KEY)
crearea tabelei Tranzacții:
CREATE TABLE Tranzacții
(
CodTranzacție INT PRIMARY KEY IDENTITY,
Produs NVARCHAR(100) REFERENCES Produse(DenumireProdus),
Pret MONEY,
Cantitate FLOAT,
Data DATETIME
)
inserarea înregistrărilor în tabela Produse:
INSERT INTO Produse VALUES ('Produs1')
INSERT INTO Produse VALUES ('Produs2')
vizualizarea înregistrărilor din tabela Produse:
SELECT * FROM Produse
inserarea înregistrărilor în tabela Tranzacții:
INSERT INTO Tranzacții VALUES ('Produs 1', 100, 1, '3/22/2009')
INSERT INTO Tranzacții VALUES ('Produs 2', 80, 1, '4/23/2009')
INSERT INTO Tranzacții VALUES ('Produs 3', 4, 1, '4/22/2009')
vizualizarea înregistrărilor din tabela Tranzacții:
SELECT * FROM Tranzacții
interogarea bazei de date pentru a obține valorile cheltuite pe produse:
SELECT Produse.DenumireProdus, Valoare = Sum([Preț]*[Cantitate])
FROM Produse
INNER JOIN Tranzactii ON Produse.DenumireProdus = Tranzacții.Produs
GROUP BY Produse.DenumireProdus
Capitolul V. Aplicația
V.1 Specificații
Capitolul despre aplicație va prezenta principille de funcționare ale acestei aplicații. Aplicația „Evidența Studenților” reprezintă un proiect ce are ca obiectiv servirea unui utilizator, mai exact unui student, informații despre acesta, despre colegii săi, orarele școlare și noutățile apărute din cadrul universității.
Aplicația are mai multe opțiuni, însă una dintre funcționalitățile de bază care stau la dispoziția utilizatorului este posibilitatea de a-și crea un cont pe acest site. Prin logarea în contul personal, utilizatorul poate accesa date și informații personale, informații care nu sunt disponibile unui utilizator care nu este logat, adică unui vizitator. Astfel vizitatorilor paginii web nu le va fi permis vizualizarea situațiilor examenelor sau a notelor de exemplu.
Utilizarea acestei aplicații implică necesarea existenței unui user și a unei parole. La autentificarea în contul personal, vor trebui introduse username-ul și parola, precum și căutarea și confirmarea existenței acestora în baza de date. După introducerea corectă a user-ului și a parolei, utilizatorul, odată logat, va avea acces la secțiunea destinată lui, în funcție de tipul de utilizator.
Aplicația are în momentul de față doi utilizatori:
admin (profesorul)
Utilizator : admin
Parola : admin1234*
user (student)
Utilizator : user
Parola : user1234*
Modulul profesorului:
Permite introducerea unui nou student în baza de date;
Ștergerea unui student din baza de date ;
Editarea unui student din baza de date (nume, an, grupă);
Introducerea notelor în baza de date;
Ștergerea notelor din baza de date;
Editarea notelor din baza de date.
Întregul sistem este bazat pe o bază de date care păstrează informațiile esențiale din sistem. Baza de date cuprinde două tabele păstrate pe un server de baze de date Microsoft SQL Server.
V.2 Scheletul bazei de date
Aplicația conține o bază de date denumită “Database.mdf”, care înglobează informațiile necesare dezvoltării acestui site.
Tabela “studenti” cuprinde mai multe câmpuri unde sunt stocate informații despre student. În acest sens, pentru fiecare înregistrare din va fi asociată unui student și are câmpurile: “id”, “Nume”, “An” si “Grupa”. Structura tabelei este :
id – indicele tabelei, număr întreg;
Nume – numele complet al studentului, șir de caractere, maxim 40 de caractere;
An – anul de studiu, număr întreg mic;
Grupa – grupa de studiu, număr întreg mic.
Figura 2 – Tabela studenți
Pentru gestionarea informațiilor referitoare la situația examenelor a fiecărui student am folosit tabela “note”. Fiecare înregistrare va fi asociată unui student din tabela anterioară.
Câmpurile acestei tabele sunt: “id”, “idd”, “materie” și “nota”, unde câmpul “id” este indicele tabelei. Structura tabelei este :
id – indicele tabelei, număr întreg;
idd – referința la studentul căruia îi aparține nota, număr întreg;
materie – numele materiei, șir de caractere, maxim 20 de caractere;
nota – nota obținută, număr întreg mic.
Figura 3 – Tabela note
Între câmpul “id” al tabelei “studenți” și câmpul “idd” al tabelei “note” există o relație de legătură, în vederea asocierii notei cu studentul căruia îi aparține. Astfel putem adăuga mai multe note unui singur student și anume să aibe același câmp “idd”.
V.3 Utilizarea aplicației
Paginile sunt create cu ajutorul unui MasterPage. MasterPage-ul este un concept de sabloane și a fost introdus în ASP.NET odată cu versiunea 2.0.
Realizarea aplicației se bazează pe ajutorul acestui concept. Masterpage-ul este moștenit de toate paginile web noi create pe baza acestuia, ușurând astfel munca de a crea același lucru pentru fiecare pagină nouă. Acest lucru este folositor și atunci când apar schimbări deoarece cu o singură schimbare în masterpage aceasta va fi reflectată în toate paginile ce o moștenesc, nefiind nevoie să se facă schimbarea în fiecare site.
La încărcarea paginii “Default.aspx” va apărea formatul din figura de mai jos:
Figura 4 – Pagina Home
Figura 5 – Admitere
Înregistrarea utilizatorilor se face de pe această pagina. Pe această pagină se ajunge din pagina Home prin intermediul unui link. De aici utilizatorii își pot face cont pentru a putea accesa informațiile despre note.
Figura 6 – Înregistrare
Autentificarea permite utilizatorului să acceseze informațiile acestei aplicații:
Figura 7 – Autentificare
Se face o distincție clară între cele două tipuri de utilizatori: admin (profesor) și user (student). Administratorului îi este permisă introducerea datelor în baza de date, ștergerea acestor date și modificarea lor. Utilizatorul nu are acces la partea de administrare, în rest îi sunt premise aceleași opțiuni ca și profesorului. În ceea ce urmează sunt expemplificate cele două tipuri de operații premise în funcție de tipul utilizatorului:
Pentru profesor:
butonul “Edit” – permite editarea datelor din baza de date;
butonul “Delete” – permite ștergerea datelor din baza de date;
butonul “New” – permite inserarea datelor în baza de date.
Figura 8 – Situație
Pentru utilizator:
informații student;
situația generală a studențiilor.
Figura 9 – Informații
Concluzii
Societatea contemporană, caracterizată prin afluxul fără precedent de informație de diferite tipuri și pe diverse canale, necesită strategii și instrumente din ce în ce mai complexe pentru stocare, procesare și, mai ales, interpretare. În acest context, se pune problema transformării informației în date și organizarea acestora într-o asemenea manieră încât în orice moment să poată fi extrase, cu promptitudine și exactitate, datele favorabile realizării unui scop specific.
Metoda clasică de gestionare a informațiilor presupune creșterea continuu a spațiului fizic de stocare al datelor. Din această cauză, accesul la informații a devenit un drum anevoios, iar costurile de întreținere vor fi din ce în ce mai mari. Prin această aplicație se îmbunătățește cu mult accesul la informațiile dorite, în același timp aducând avantaje la viteza de accesare a datelor și la costurile de întreținere.
Aplicația aceasta este foarte ușor de folosit, datorită design-ului simplist și foarte intuitiv. Poate fi folosită la orice oră, din orice colț al lumii, printr-o simplă accesare a unei pagini web, fiind construită pe principiul client-server.
Având o compatibilitate ridicată cu sistemele de operare oferite de Microsoft, limbajele de programare folosite au fost ASP.NET, Microsoft SQL Server, prin mediul de dezvoltare Microsoft Visual Studio 2010.
Pentru următoarea versiune a acestei aplicații, ca și deviză de viitor, se dorește implementarea unui modul adițional, prin care să se facă o comunicare cu bazele de date ale altor secții a facultății, cu scopul de centralizare a datelor a tuturor studenților din cadrul universității.
Bibliografie
Ken Cox (2008) ASP.NET 3.5 for Dummies
Paul Nilsen (2009) SQL Server 2008 Bible, Ed. Wiley Publishing, Inc.
Mike Snell, Lars Powers (2010) Microsoft Visual Studio 2010 Unleashed, Ed. Sams
Tony Northrup (2009) Microsoft .NET Framework – Application Development Foundation, Ed. Microsoft Press
Chris Hart, John Kauffman, David Sussman, Chris Ullman (2006) Beginning ASP.NET 2.0 with C#
Ed Blankenship, Martin Woodward, Grant Holliday, Brian Keller (2011) Professional Team Foundation Server 2010, Ed. Wrox
Geoffrey T Leblond, Michael A Kittel (2005) ASP.Net 2.0 Cookbook
Matthew MacDonald (2010) Pro ASP.NET 4 in C# 2010, Ed. Apress
Jesse Liberty, Dan Hurwitz (2005) Programming ASP.NET
Dusan Petkovic (2005) Microsoft SQL Server 2005: A Beginner''s Guide
Ray Rankins, Paul Bertucci, Chris Gallelli și Alex T. Silverstein (2006) Microsoft SQL Server 2005 Unleashed
Steven Sanderson (2010) Pro ASP.NET MVC V2 Framework, Ed. Apress
Adriana Olteanu, Magdalena Anghel, Radu Nicolae Pietraru (2005) Baze de date și Utilizarea acestora
Andrew Stellman, Jennifer Greene (2010) Head First C#, 2E: A Learner's Guide to Real-World Programming with Visual C# and .NET, Ed. O’Reilly
Alex Mackey (2009) Introducing .NET 4.0: With Visual Studio 2010, Ed. Apress
C.J. Date (2009) SQL and Relational Theory, 1st Edition, Ed. O'Reilly Media, Inc.
Microsoft Corp. (2009) Programarea Web cu ASP.NET
World Wide Web Consortium – www.w3.org
W3Schools Online Tutorials – www.w3schools.com
Wikipedia – www.wikipedia.org
Anexe
“Masterpage.master”
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Master Language="C#" %>
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<link rel="stylesheet" href="style.css" type="text/css"
charset="utf-8"/>
<link rel="icon" type="image/vnd.microsoft.icon" href="img/favicon.ico" />
<asp:ContentPlaceHolder id="head" runat="server"> </asp:ContentPlaceHolder>
<style type="text/css">
a:visited {
color: #0000FF;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<center id="meniu">
<div id="meniu" class="meniu">
<a href="/Licenta/Default.aspx">Home </a> |
<a href="/Licenta/Admitere.aspx">Admitere </a>|
<a
href="/Licenta/loggedin/user/Informatie.aspx">Informatii </a>|
<a
href="/Licenta/loggedin/admin/Situatie.aspx">Situatie </a>|
<asp:LoginStatus ID="LoginStatus1" runat="server" />
<asp:LoginName ID="LoginName1" runat="server" />
<hr />
</div>
</center>
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder>
<hr />
<center>
<div id="footer" class="meniu">
<p>Evidenta Studentilor – Portan Razvan-Cosmin © 2014</p>
</div>
</center>
</form>
</body>
</html>
“Default.aspx”
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Evidenta Studentilor" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<div id="content">
<img src="img/Slavici.jpg" alt="Ioan Slavici" style="position:relative; top:10px; left:45%; " />
<p class="title">Evidenta Studentilor</p>
<p class="content" style="text-align: center;"> Universitatea Ioan Slavici, Timisoara.</p>
<p class="content" style="text-align: center;"> Facultatea de Inginerie</p>
</div>
<div id="inregistrare" class="minicontent" style="text-align: center;">
<a href="Inregistrare.aspx">Inregistrare</a>
</div>
</asp:Content>
“Admitere.aspx”
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Admitere.aspx.cs" Inherits="Catedra" Title="Informatii despre admiterea la Facultate" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<p class="title">Universitatea "Ioan Slavici"</p> <div id="address" class="minicontent">
<center>
<address>Timisoara, Aurel podeanu nr. 144, Tel/fax. 0256-213108</address>
<address>Universitatea "IOAN SLAVICI" este mentionata in Monitorul Oficial nr.313/13.05.2002</address>
</center>
</div>
<p class="minicontent">Taxa anuala: 390 euro achitabila in trei rate</p>
<p class="minicontent">NU SE DA EXAMEN DE ADMITERE, ADMITEREA SE FACE IN ORDINEA INSCRIERILOR !<br/> NU SE APLICA NICI UN FEL DE PENALIZARE SAU TAXE SUPLIMENTARE PENTRU INTARZIERI SAU RESTANTE !</p>
<p></p>
<center>
<hr style="width: 600px"/>
<table class="minicontent" >
<tr>
<th >Facultatea de Inginerie</th>
<th >Facultatea de Stiinte Economice</th>
</tr>
<tr>
<td>Singura unitate de invatamanat particular cu pregarire<br/> inginereasca in specializare</td>
<td>Specializare : </td>
</tr>
<tr>
<td>Calculatorea (Hardware + Software)</td> <td>Contabilitate, Finante si Informatica de Gestiune</td>
</tr>
<tr>
<td>150 de locuri</td> <td>200 de locuri</td>
</tr>
</table>
<hr style="width: 600px"/>
</center>
<p class="content">Dosarul necesar pentru inscriere trebuie sa contina :</p>
<ul class="minicontent">
<li>dosar plic</li>
<li>Diploma BAC – original + copie</li>
<li>certificat de nastere – copie legalizata</li>
<li>adeverinta medicala</li>
<li>Taxa de inscriere de 80 Ron</li>
<li>2 poze tip buletin</li>
<li>buletin / carte de identitate – copie</li>
<li>certificat de casatorie (daca e cazul)</li>
</ul>
</asp:Content>
“Informatie.aspx”
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Informatie.aspx.cs" Inherits="Informatie" Title="Informatii" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<div id="Content" class="minicontent">
<p class="content">Informatii student:</p>
<center>
<asp:TextBox ID="TextBox1" runat="server" Width="161px"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Cauta" onclick="Button1_Click"
Width="74px" />
<asp:FormView ID="FormView1" runat="server" DataKeyNames="Expr1"
DataSourceID="SqlDataSource1" AllowPaging="True"
Width="170px">
<EditItemTemplate>
Nume:
<asp:TextBox ID="NumeTextBox" runat="server" Text='<%# Bind("Nume") %>' />
<br /> An:
<asp:TextBox ID="AnTextBox" runat="server" Text='<%# Bind("An") %>' />
<br /> Grupa:
<asp:TextBox ID="GrupaTextBox" runat="server" Text='<%# Bind("Grupa") %>' />
<br /> materie:
<asp:TextBox ID="materieTextBox" runat="server" Text='<%# Bind("materie") %>' />
<br />
nota:
<asp:TextBox ID="notaTextBox" runat="server" Text='<%# Bind("nota") %>' />
<br />
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True"
CommandName="Update" Text="Update" /> <asp:LinkButton ID="UpdateCancelButton"
runat="server"
CausesValidation="False" CommandName="Cancel"
Text="Cancel" /> </EditItemTemplate> <InsertItemTemplate>
Nume:
<asp:TextBox ID="NumeTextBox" runat="server" Text='<%# Bind("Nume") %>' />
<br /> An:
<asp:TextBox ID="AnTextBox" runat="server" Text='<%# Bind("An") %>' />
<br /> Grupa:
<asp:TextBox ID="GrupaTextBox" runat="server" Text='<%# Bind("Grupa") %>' />
<br /> materie:
<asp:TextBox ID="materieTextBox" runat="server" Text='<%# Bind("materie") %>' />
<br /> nota:
<asp:TextBox ID="notaTextBox" runat="server" Text='<%# Bind("nota") %>' />
<br />
<asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True"
CommandName="Insert" Text="Insert" /> <asp:LinkButton ID="InsertCancelButton"
runat="server"
CausesValidation="False" CommandName="Cancel"
Text="Cancel" />
</InsertItemTemplate>
<ItemTemplate>
Nume:
<asp:Label ID="NumeLabel" runat="server" Text='<%# Bind("Nume") %>' />
<br /> An:
<asp:Label ID="AnLabel" runat="server" Text='<%# Bind("An") %>' />
<br /> Grupa:
<asp:Label ID="GrupaLabel" runat="server" Text='<%# Bind("Grupa") %>' />
<br /> materie:
<asp:Label ID="materieLabel" runat="server" Text='<%# Bind("materie") %>' />
<br /> nota:
<asp:Label ID="notaLabel" runat="server" Text='<%# Bind("nota") %>' />
<br />
</ItemTemplate>
</asp:FormView>
</center> <hr />
<p class ="content">Situatie generala:</p> <center>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AllowSorting="True" AutoGenerateColumns="False"
DataKeyNames="id,id1"
DataSourceID="SqlDataSource2" Width="550px"> <Columns>
<asp:BoundField DataField="Nume" HeaderText="Nume" SortExpression="Nume" />
<asp:BoundField DataField="An" HeaderText="An" SortExpression="An" />
<asp:BoundField DataField="Grupa" HeaderText="Grupa" SortExpression="Grupa" />
<asp:BoundField DataField="materie" HeaderText="materie"
SortExpression="materie" />
<asp:BoundField DataField="nota" HeaderText="nota" SortExpression="nota" />
</Columns>
</asp:GridView>
</center>
</div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT studenti.Nume, studenti.An, studenti.Grupa, note.materie, note.nota, studenti.id AS Expr1 FROM note INNER JOIN studenti ON note.idd = studenti.id WHERE (studenti.Nume = @Nume)">
<SelectParameters>
<asp:ControlParameter ControlID="TextBox1" Name="Nume" PropertyName="Text" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM note INNER JOIN studenti ON
note.idd = studenti.id WHERE ([idd]=studenti.id)
">
</asp:SqlDataSource>
</asp:Content>
“Situatie.aspx”
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Situatie.aspx.cs" Inherits="Situatie" Title="Situatie" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<div id="Content" class="minicontent">
<p class="content">Studenti:</p>
<div id="studenti"> <center>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AllowSorting="True" AutoGenerateColumns="False"
DataKeyNames="id"
DataSourceID="SqlDataSource1"
EnableModelValidation="True"
onselectedindexchanged="GridView1_SelectedIndexChanged" Width="400px"> <Columns>
<asp:CommandField ShowSelectButton="True" />
<asp:BoundField DataField="id" HeaderText="id"
InsertVisible="False"
ReadOnly="True" SortExpression="id" /> <asp:BoundField DataField="nume"
HeaderText="nume" SortExpression="nume" />
<asp:BoundField DataField="an" HeaderText="an"
SortExpression="an" />
<asp:BoundField DataField="grupa" HeaderText="grupa" SortExpression="grupa" />
</Columns>
</asp:GridView>
<br/>
<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="200px"
DataSourceID="SqlDataSource1" > <Fields>
<asp:CommandField ShowDeleteButton="True"
ShowEditButton="True"
ShowInsertButton="True" /> </Fields>
</asp:DetailsView>
</center>
</div>
<hr />
<p class="content">Note:</p> <div id="note">
<center>
<asp:GridView ID="GridView2" runat="server" AllowPaging="True"
AllowSorting="True" AutoGenerateColumns="False"
DataKeyNames="id"
DataSourceID="SqlDataSource2"
onselectedindexchanged="GridView2_SelectedIndexChanged" Width="400px"> <Columns>
<asp:CommandField ShowSelectButton="True" /> <asp:BoundField DataField="id" HeaderText="id"
InsertVisible="False"
ReadOnly="True" SortExpression="id" />
<asp:BoundField DataField="idd" HeaderText="idd" SortExpression="idd" />
<asp:BoundField DataField="materie"
HeaderText="materie"
SortExpression="materie" />
<asp:BoundField DataField="nota" HeaderText="nota" SortExpression="nota" />
</Columns>
</asp:GridView> <br />
<asp:DetailsView ID="DetailsView2" runat="server" Height="50px" Width="200px"
AllowPaging="True" AutoGenerateRows="False"
DataKeyNames="id"
DataSourceID="SqlDataSource2">
<Fields>
<asp:BoundField DataField="id" HeaderText="id" InsertVisible="False"
ReadOnly="True" SortExpression="id" /> <asp:BoundField DataField="idd" HeaderText="idd"
SortExpression="idd" />
<asp:BoundField DataField="materie"
HeaderText="materie"
SortExpression="materie" />
<asp:BoundField DataField="nota" HeaderText="nota" SortExpression="nota" />
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True"
ShowInsertButton="True" /> </Fields>
</asp:DetailsView>
</center>
</div>
<hr style="width:500px;"/>
<p>Editarea utilizatorilor:</p> <div id="editareaUtilizatorilor">
<center>
<asp:GridView ID="GridView3" runat="server"> </asp:GridView>
</center>
</div>
</div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues" ConnectionString="<%$
ConnectionStrings:ConnectionString %>"
DeleteCommand="DELETE FROM [studenti] WHERE [id] = @original_id AND [nume] = @original_nume AND (([an] = @original_an) OR ([an] IS NULL AND @original_an IS NULL)) AND (([grupa] = @original_grupa) OR ([grupa] IS NULL AND @original_grupa IS NULL))"
InsertCommand="INSERT INTO [studenti] ([nume], [an], [grupa]) VALUES (@nume, @an, @grupa)"
OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT * FROM [studenti]" UpdateCommand="UPDATE [studenti] SET [nume] = @nume,
[an] = @an, [grupa] = @grupa WHERE [id] = @original_id AND [nume] = @original_nume AND (([an] = @original_an) OR ([an] IS NULL AND @original_an IS NULL)) AND (([grupa] = @original_grupa) OR ([grupa] IS NULL AND @original_grupa IS NULL))">
<DeleteParameters>
<asp:Parameter Name="original_id" Type="Int32" /> <asp:Parameter Name="original_nume" Type="String"
/>
<asp:Parameter Name="original_an" Type="String" /> <asp:Parameter Name="original_grupa" Type="String"
/>
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="nume" Type="String" /> <asp:Parameter Name="an" Type="String" /> <asp:Parameter Name="grupa" Type="String" /> <asp:Parameter Name="original_id" Type="Int32" /> <asp:Parameter Name="original_nume" Type="String"
/>
<asp:Parameter Name="original_an" Type="String" /> <asp:Parameter Name="original_grupa" Type="String"
/>
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="nume" Type="String" /> <asp:Parameter Name="an" Type="String" /> <asp:Parameter Name="grupa" Type="String" />
</InsertParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$
ConnectionStrings:ConnectionString %>" OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT * FROM [note]"
ConflictDetection="CompareAllValues"
DeleteCommand="DELETE FROM [note] WHERE [id] = @original_id AND [idd] = @original_idd AND (([materie] = @original_materie) OR ([materie] IS NULL AND @original_materie IS NULL)) AND (([nota] = @original_nota) OR ([nota] IS NULL AND @original_nota IS NULL))"
InsertCommand="INSERT INTO [note] ([idd], [materie], [nota]) VALUES (@idd, @materie, @nota)"
UpdateCommand="UPDATE [note] SET [idd] = @idd, [materie] = @materie, [nota] = @nota WHERE [id] = @original_id AND [idd] = @original_idd AND (([materie] = @original_materie) OR ([materie] IS
NULL AND @original_materie IS NULL)) AND (([nota] = @original_nota) OR ([nota] IS NULL AND @original_nota IS NULL))">
<DeleteParameters>
<asp:Parameter Name="original_id" Type="Int32" /> <asp:Parameter Name="original_idd" Type="Int32" /> <asp:Parameter Name="original_materie" Type="String" /> <asp:Parameter Name="original_nota" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="idd" Type="Int32" /> <asp:Parameter Name="materie" Type="String" /> <asp:Parameter Name="nota" Type="Int32" /> <asp:Parameter Name="original_id" Type="Int32" /> <asp:Parameter Name="original_idd" Type="Int32" /> <asp:Parameter Name="original_materie" Type="String" /> <asp:Parameter Name="original_nota" Type="Int32" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="idd" Type="Int32" /> <asp:Parameter Name="materie" Type="String" /> <asp:Parameter Name="nota" Type="Int32" />
</InsertParameters>
</asp:SqlDataSource>
</asp:Content>
“Login.aspx”
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="login.aspx.cs" Inherits="login" Title="Logare" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<center id="login"> <div id="Login">
<br/>
<asp:Login ID="Login1" runat="server" BackColor="White" BorderColor="Black" BorderWidth="0px" Font-Size="9pt" CssClass="content" Height="132px" LoginButtonText="Autentificare" PasswordLabelText="Parola : " RememberMeText="Tine-ma minte…" TitleText="Autentificare" UserNameLabelText="Nume utilizator : " Width="266px" PasswordRequiredErrorMessage="Parola este necesara." UserNameRequiredErrorMessage="Numele utilizatorului este necesar.">
<TitleTextStyle BackColor="#6B696B" Font-Bold="True" ForeColor="#FFFFFF" />
</asp:Login>
</div>
</center>
</asp:Content>
“Inregistrare.aspx”
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Inregistrare.aspx.cs" Inherits="Inregistrare" Title="Inregistrare utilizatori" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<div id="creareUser" class="minicontent"> <center>
<asp:CreateUserWizard runat="server" id="CreateUserWizard1"> <WizardSteps> <asp:CreateUserWizardStep runat="server"/> <asp:CompleteWizardStep runat="server"/> </WizardSteps> </asp:CreateUserWizard>
</center>
</div>
</asp:Content>
DECLARAȚIE DE AUTENTICITATE
A
LUCRĂRII DE FINALIZARE A STUDIILOR
Titlul lucrării ________________________________________________________
____________________________________________________________________
____________________________________________________________________
Autorul lucrării _____________________________________________
Lucrarea de finalizare a studiilor este elaborată în vederea susținerii examenului de finalizare a studiilor organizat de către Facultatea _________________________________________ din cadrul Universității din Oradea, sesiunea_______________________ a anului universitar ______________.
Prin prezenta, subsemnatul (nume, prenume, CNP)_____________________
___________________________________________________________________
___________________________________________________________________,
declar pe proprie răspundere că această lucrare a fost scrisă de către mine, fără nici un ajutor neautorizat și că nici o parte a lucrării nu conține aplicații sau studii de caz publicate de alți autori.
Declar, de asemenea, că în lucrare nu există idei, tabele, grafice, hărți sau alte surse folosite fără respectarea legii române și a convențiilor internaționale privind drepturile de autor.
Oradea,
Data Semnătura
Bibliografie
Ken Cox (2008) ASP.NET 3.5 for Dummies
Paul Nilsen (2009) SQL Server 2008 Bible, Ed. Wiley Publishing, Inc.
Mike Snell, Lars Powers (2010) Microsoft Visual Studio 2010 Unleashed, Ed. Sams
Tony Northrup (2009) Microsoft .NET Framework – Application Development Foundation, Ed. Microsoft Press
Chris Hart, John Kauffman, David Sussman, Chris Ullman (2006) Beginning ASP.NET 2.0 with C#
Ed Blankenship, Martin Woodward, Grant Holliday, Brian Keller (2011) Professional Team Foundation Server 2010, Ed. Wrox
Geoffrey T Leblond, Michael A Kittel (2005) ASP.Net 2.0 Cookbook
Matthew MacDonald (2010) Pro ASP.NET 4 in C# 2010, Ed. Apress
Jesse Liberty, Dan Hurwitz (2005) Programming ASP.NET
Dusan Petkovic (2005) Microsoft SQL Server 2005: A Beginner''s Guide
Ray Rankins, Paul Bertucci, Chris Gallelli și Alex T. Silverstein (2006) Microsoft SQL Server 2005 Unleashed
Steven Sanderson (2010) Pro ASP.NET MVC V2 Framework, Ed. Apress
Adriana Olteanu, Magdalena Anghel, Radu Nicolae Pietraru (2005) Baze de date și Utilizarea acestora
Andrew Stellman, Jennifer Greene (2010) Head First C#, 2E: A Learner's Guide to Real-World Programming with Visual C# and .NET, Ed. O’Reilly
Alex Mackey (2009) Introducing .NET 4.0: With Visual Studio 2010, Ed. Apress
C.J. Date (2009) SQL and Relational Theory, 1st Edition, Ed. O'Reilly Media, Inc.
Microsoft Corp. (2009) Programarea Web cu ASP.NET
World Wide Web Consortium – www.w3.org
W3Schools Online Tutorials – www.w3schools.com
Wikipedia – www.wikipedia.org
Anexe
“Masterpage.master”
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Master Language="C#" %>
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<link rel="stylesheet" href="style.css" type="text/css"
charset="utf-8"/>
<link rel="icon" type="image/vnd.microsoft.icon" href="img/favicon.ico" />
<asp:ContentPlaceHolder id="head" runat="server"> </asp:ContentPlaceHolder>
<style type="text/css">
a:visited {
color: #0000FF;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<center id="meniu">
<div id="meniu" class="meniu">
<a href="/Licenta/Default.aspx">Home </a> |
<a href="/Licenta/Admitere.aspx">Admitere </a>|
<a
href="/Licenta/loggedin/user/Informatie.aspx">Informatii </a>|
<a
href="/Licenta/loggedin/admin/Situatie.aspx">Situatie </a>|
<asp:LoginStatus ID="LoginStatus1" runat="server" />
<asp:LoginName ID="LoginName1" runat="server" />
<hr />
</div>
</center>
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder>
<hr />
<center>
<div id="footer" class="meniu">
<p>Evidenta Studentilor – Portan Razvan-Cosmin © 2014</p>
</div>
</center>
</form>
</body>
</html>
“Default.aspx”
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Evidenta Studentilor" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<div id="content">
<img src="img/Slavici.jpg" alt="Ioan Slavici" style="position:relative; top:10px; left:45%; " />
<p class="title">Evidenta Studentilor</p>
<p class="content" style="text-align: center;"> Universitatea Ioan Slavici, Timisoara.</p>
<p class="content" style="text-align: center;"> Facultatea de Inginerie</p>
</div>
<div id="inregistrare" class="minicontent" style="text-align: center;">
<a href="Inregistrare.aspx">Inregistrare</a>
</div>
</asp:Content>
“Admitere.aspx”
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Admitere.aspx.cs" Inherits="Catedra" Title="Informatii despre admiterea la Facultate" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<p class="title">Universitatea "Ioan Slavici"</p> <div id="address" class="minicontent">
<center>
<address>Timisoara, Aurel podeanu nr. 144, Tel/fax. 0256-213108</address>
<address>Universitatea "IOAN SLAVICI" este mentionata in Monitorul Oficial nr.313/13.05.2002</address>
</center>
</div>
<p class="minicontent">Taxa anuala: 390 euro achitabila in trei rate</p>
<p class="minicontent">NU SE DA EXAMEN DE ADMITERE, ADMITEREA SE FACE IN ORDINEA INSCRIERILOR !<br/> NU SE APLICA NICI UN FEL DE PENALIZARE SAU TAXE SUPLIMENTARE PENTRU INTARZIERI SAU RESTANTE !</p>
<p></p>
<center>
<hr style="width: 600px"/>
<table class="minicontent" >
<tr>
<th >Facultatea de Inginerie</th>
<th >Facultatea de Stiinte Economice</th>
</tr>
<tr>
<td>Singura unitate de invatamanat particular cu pregarire<br/> inginereasca in specializare</td>
<td>Specializare : </td>
</tr>
<tr>
<td>Calculatorea (Hardware + Software)</td> <td>Contabilitate, Finante si Informatica de Gestiune</td>
</tr>
<tr>
<td>150 de locuri</td> <td>200 de locuri</td>
</tr>
</table>
<hr style="width: 600px"/>
</center>
<p class="content">Dosarul necesar pentru inscriere trebuie sa contina :</p>
<ul class="minicontent">
<li>dosar plic</li>
<li>Diploma BAC – original + copie</li>
<li>certificat de nastere – copie legalizata</li>
<li>adeverinta medicala</li>
<li>Taxa de inscriere de 80 Ron</li>
<li>2 poze tip buletin</li>
<li>buletin / carte de identitate – copie</li>
<li>certificat de casatorie (daca e cazul)</li>
</ul>
</asp:Content>
“Informatie.aspx”
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Informatie.aspx.cs" Inherits="Informatie" Title="Informatii" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<div id="Content" class="minicontent">
<p class="content">Informatii student:</p>
<center>
<asp:TextBox ID="TextBox1" runat="server" Width="161px"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Cauta" onclick="Button1_Click"
Width="74px" />
<asp:FormView ID="FormView1" runat="server" DataKeyNames="Expr1"
DataSourceID="SqlDataSource1" AllowPaging="True"
Width="170px">
<EditItemTemplate>
Nume:
<asp:TextBox ID="NumeTextBox" runat="server" Text='<%# Bind("Nume") %>' />
<br /> An:
<asp:TextBox ID="AnTextBox" runat="server" Text='<%# Bind("An") %>' />
<br /> Grupa:
<asp:TextBox ID="GrupaTextBox" runat="server" Text='<%# Bind("Grupa") %>' />
<br /> materie:
<asp:TextBox ID="materieTextBox" runat="server" Text='<%# Bind("materie") %>' />
<br />
nota:
<asp:TextBox ID="notaTextBox" runat="server" Text='<%# Bind("nota") %>' />
<br />
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True"
CommandName="Update" Text="Update" /> <asp:LinkButton ID="UpdateCancelButton"
runat="server"
CausesValidation="False" CommandName="Cancel"
Text="Cancel" /> </EditItemTemplate> <InsertItemTemplate>
Nume:
<asp:TextBox ID="NumeTextBox" runat="server" Text='<%# Bind("Nume") %>' />
<br /> An:
<asp:TextBox ID="AnTextBox" runat="server" Text='<%# Bind("An") %>' />
<br /> Grupa:
<asp:TextBox ID="GrupaTextBox" runat="server" Text='<%# Bind("Grupa") %>' />
<br /> materie:
<asp:TextBox ID="materieTextBox" runat="server" Text='<%# Bind("materie") %>' />
<br /> nota:
<asp:TextBox ID="notaTextBox" runat="server" Text='<%# Bind("nota") %>' />
<br />
<asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True"
CommandName="Insert" Text="Insert" /> <asp:LinkButton ID="InsertCancelButton"
runat="server"
CausesValidation="False" CommandName="Cancel"
Text="Cancel" />
</InsertItemTemplate>
<ItemTemplate>
Nume:
<asp:Label ID="NumeLabel" runat="server" Text='<%# Bind("Nume") %>' />
<br /> An:
<asp:Label ID="AnLabel" runat="server" Text='<%# Bind("An") %>' />
<br /> Grupa:
<asp:Label ID="GrupaLabel" runat="server" Text='<%# Bind("Grupa") %>' />
<br /> materie:
<asp:Label ID="materieLabel" runat="server" Text='<%# Bind("materie") %>' />
<br /> nota:
<asp:Label ID="notaLabel" runat="server" Text='<%# Bind("nota") %>' />
<br />
</ItemTemplate>
</asp:FormView>
</center> <hr />
<p class ="content">Situatie generala:</p> <center>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AllowSorting="True" AutoGenerateColumns="False"
DataKeyNames="id,id1"
DataSourceID="SqlDataSource2" Width="550px"> <Columns>
<asp:BoundField DataField="Nume" HeaderText="Nume" SortExpression="Nume" />
<asp:BoundField DataField="An" HeaderText="An" SortExpression="An" />
<asp:BoundField DataField="Grupa" HeaderText="Grupa" SortExpression="Grupa" />
<asp:BoundField DataField="materie" HeaderText="materie"
SortExpression="materie" />
<asp:BoundField DataField="nota" HeaderText="nota" SortExpression="nota" />
</Columns>
</asp:GridView>
</center>
</div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT studenti.Nume, studenti.An, studenti.Grupa, note.materie, note.nota, studenti.id AS Expr1 FROM note INNER JOIN studenti ON note.idd = studenti.id WHERE (studenti.Nume = @Nume)">
<SelectParameters>
<asp:ControlParameter ControlID="TextBox1" Name="Nume" PropertyName="Text" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM note INNER JOIN studenti ON
note.idd = studenti.id WHERE ([idd]=studenti.id)
">
</asp:SqlDataSource>
</asp:Content>
“Situatie.aspx”
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Situatie.aspx.cs" Inherits="Situatie" Title="Situatie" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<div id="Content" class="minicontent">
<p class="content">Studenti:</p>
<div id="studenti"> <center>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AllowSorting="True" AutoGenerateColumns="False"
DataKeyNames="id"
DataSourceID="SqlDataSource1"
EnableModelValidation="True"
onselectedindexchanged="GridView1_SelectedIndexChanged" Width="400px"> <Columns>
<asp:CommandField ShowSelectButton="True" />
<asp:BoundField DataField="id" HeaderText="id"
InsertVisible="False"
ReadOnly="True" SortExpression="id" /> <asp:BoundField DataField="nume"
HeaderText="nume" SortExpression="nume" />
<asp:BoundField DataField="an" HeaderText="an"
SortExpression="an" />
<asp:BoundField DataField="grupa" HeaderText="grupa" SortExpression="grupa" />
</Columns>
</asp:GridView>
<br/>
<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="200px"
DataSourceID="SqlDataSource1" > <Fields>
<asp:CommandField ShowDeleteButton="True"
ShowEditButton="True"
ShowInsertButton="True" /> </Fields>
</asp:DetailsView>
</center>
</div>
<hr />
<p class="content">Note:</p> <div id="note">
<center>
<asp:GridView ID="GridView2" runat="server" AllowPaging="True"
AllowSorting="True" AutoGenerateColumns="False"
DataKeyNames="id"
DataSourceID="SqlDataSource2"
onselectedindexchanged="GridView2_SelectedIndexChanged" Width="400px"> <Columns>
<asp:CommandField ShowSelectButton="True" /> <asp:BoundField DataField="id" HeaderText="id"
InsertVisible="False"
ReadOnly="True" SortExpression="id" />
<asp:BoundField DataField="idd" HeaderText="idd" SortExpression="idd" />
<asp:BoundField DataField="materie"
HeaderText="materie"
SortExpression="materie" />
<asp:BoundField DataField="nota" HeaderText="nota" SortExpression="nota" />
</Columns>
</asp:GridView> <br />
<asp:DetailsView ID="DetailsView2" runat="server" Height="50px" Width="200px"
AllowPaging="True" AutoGenerateRows="False"
DataKeyNames="id"
DataSourceID="SqlDataSource2">
<Fields>
<asp:BoundField DataField="id" HeaderText="id" InsertVisible="False"
ReadOnly="True" SortExpression="id" /> <asp:BoundField DataField="idd" HeaderText="idd"
SortExpression="idd" />
<asp:BoundField DataField="materie"
HeaderText="materie"
SortExpression="materie" />
<asp:BoundField DataField="nota" HeaderText="nota" SortExpression="nota" />
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True"
ShowInsertButton="True" /> </Fields>
</asp:DetailsView>
</center>
</div>
<hr style="width:500px;"/>
<p>Editarea utilizatorilor:</p> <div id="editareaUtilizatorilor">
<center>
<asp:GridView ID="GridView3" runat="server"> </asp:GridView>
</center>
</div>
</div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues" ConnectionString="<%$
ConnectionStrings:ConnectionString %>"
DeleteCommand="DELETE FROM [studenti] WHERE [id] = @original_id AND [nume] = @original_nume AND (([an] = @original_an) OR ([an] IS NULL AND @original_an IS NULL)) AND (([grupa] = @original_grupa) OR ([grupa] IS NULL AND @original_grupa IS NULL))"
InsertCommand="INSERT INTO [studenti] ([nume], [an], [grupa]) VALUES (@nume, @an, @grupa)"
OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT * FROM [studenti]" UpdateCommand="UPDATE [studenti] SET [nume] = @nume,
[an] = @an, [grupa] = @grupa WHERE [id] = @original_id AND [nume] = @original_nume AND (([an] = @original_an) OR ([an] IS NULL AND @original_an IS NULL)) AND (([grupa] = @original_grupa) OR ([grupa] IS NULL AND @original_grupa IS NULL))">
<DeleteParameters>
<asp:Parameter Name="original_id" Type="Int32" /> <asp:Parameter Name="original_nume" Type="String"
/>
<asp:Parameter Name="original_an" Type="String" /> <asp:Parameter Name="original_grupa" Type="String"
/>
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="nume" Type="String" /> <asp:Parameter Name="an" Type="String" /> <asp:Parameter Name="grupa" Type="String" /> <asp:Parameter Name="original_id" Type="Int32" /> <asp:Parameter Name="original_nume" Type="String"
/>
<asp:Parameter Name="original_an" Type="String" /> <asp:Parameter Name="original_grupa" Type="String"
/>
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="nume" Type="String" /> <asp:Parameter Name="an" Type="String" /> <asp:Parameter Name="grupa" Type="String" />
</InsertParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$
ConnectionStrings:ConnectionString %>" OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT * FROM [note]"
ConflictDetection="CompareAllValues"
DeleteCommand="DELETE FROM [note] WHERE [id] = @original_id AND [idd] = @original_idd AND (([materie] = @original_materie) OR ([materie] IS NULL AND @original_materie IS NULL)) AND (([nota] = @original_nota) OR ([nota] IS NULL AND @original_nota IS NULL))"
InsertCommand="INSERT INTO [note] ([idd], [materie], [nota]) VALUES (@idd, @materie, @nota)"
UpdateCommand="UPDATE [note] SET [idd] = @idd, [materie] = @materie, [nota] = @nota WHERE [id] = @original_id AND [idd] = @original_idd AND (([materie] = @original_materie) OR ([materie] IS
NULL AND @original_materie IS NULL)) AND (([nota] = @original_nota) OR ([nota] IS NULL AND @original_nota IS NULL))">
<DeleteParameters>
<asp:Parameter Name="original_id" Type="Int32" /> <asp:Parameter Name="original_idd" Type="Int32" /> <asp:Parameter Name="original_materie" Type="String" /> <asp:Parameter Name="original_nota" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="idd" Type="Int32" /> <asp:Parameter Name="materie" Type="String" /> <asp:Parameter Name="nota" Type="Int32" /> <asp:Parameter Name="original_id" Type="Int32" /> <asp:Parameter Name="original_idd" Type="Int32" /> <asp:Parameter Name="original_materie" Type="String" /> <asp:Parameter Name="original_nota" Type="Int32" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="idd" Type="Int32" /> <asp:Parameter Name="materie" Type="String" /> <asp:Parameter Name="nota" Type="Int32" />
</InsertParameters>
</asp:SqlDataSource>
</asp:Content>
“Login.aspx”
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="login.aspx.cs" Inherits="login" Title="Logare" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<center id="login"> <div id="Login">
<br/>
<asp:Login ID="Login1" runat="server" BackColor="White" BorderColor="Black" BorderWidth="0px" Font-Size="9pt" CssClass="content" Height="132px" LoginButtonText="Autentificare" PasswordLabelText="Parola : " RememberMeText="Tine-ma minte…" TitleText="Autentificare" UserNameLabelText="Nume utilizator : " Width="266px" PasswordRequiredErrorMessage="Parola este necesara." UserNameRequiredErrorMessage="Numele utilizatorului este necesar.">
<TitleTextStyle BackColor="#6B696B" Font-Bold="True" ForeColor="#FFFFFF" />
</asp:Login>
</div>
</center>
</asp:Content>
“Inregistrare.aspx”
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Inregistrare.aspx.cs" Inherits="Inregistrare" Title="Inregistrare utilizatori" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<div id="creareUser" class="minicontent"> <center>
<asp:CreateUserWizard runat="server" id="CreateUserWizard1"> <WizardSteps> <asp:CreateUserWizardStep runat="server"/> <asp:CompleteWizardStep runat="server"/> </WizardSteps> </asp:CreateUserWizard>
</center>
</div>
</asp:Content>
DECLARAȚIE DE AUTENTICITATE
A
LUCRĂRII DE FINALIZARE A STUDIILOR
Titlul lucrării ________________________________________________________
____________________________________________________________________
____________________________________________________________________
Autorul lucrării _____________________________________________
Lucrarea de finalizare a studiilor este elaborată în vederea susținerii examenului de finalizare a studiilor organizat de către Facultatea _________________________________________ din cadrul Universității din Oradea, sesiunea_______________________ a anului universitar ______________.
Prin prezenta, subsemnatul (nume, prenume, CNP)_____________________
___________________________________________________________________
___________________________________________________________________,
declar pe proprie răspundere că această lucrare a fost scrisă de către mine, fără nici un ajutor neautorizat și că nici o parte a lucrării nu conține aplicații sau studii de caz publicate de alți autori.
Declar, de asemenea, că în lucrare nu există idei, tabele, grafice, hărți sau alte surse folosite fără respectarea legii române și a convențiilor internaționale privind drepturile de autor.
Oradea,
Data Semnătura
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Evidenta Studentilor (ID: 121132)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
