Licenta Gombos Irina, Gr 627 (1)
-
Upload
schokobananen-paula -
Category
Documents
-
view
83 -
download
1
description
Transcript of Licenta Gombos Irina, Gr 627 (1)
1
UNIVERSITATEA ROMÂNO-AMERICANĂ
FACULTATEA DE INFORMATICĂ MANAGERIALĂ
DEZVOLTAREA APLICAȚIILOR WEB UTILIZÂND CONCEPTELE
DOT.NET
“RAUGRADEBOOK”, CATALOG VIRTUAL
Coordonator științific:
Lector univ. drd. ENĂCEANU ALEXANDRU ȘERBAN
Absolvent:
GOMBOȘ ALEXANDRA IRINA
BUCUREȘTI 2012
2
CUPRINS
Introducere pagina 4
Cap. 1 STUDIUL ȘI ANALIZA SISTEMULUI EXISTENT
1.1 Prezentarea succintӑ a unitӑții economico-sociale pagina 5
1.2 Activitӑțile desfӑșurate în unitatea economicӑ (caracteristicile generale
ale sistemului economic din unitate) pagina 7
1.3 Studiul sistemului de conducere pagina 9
1.4 Studiul sistemului condus pagina 18
1.5 Studiul sistemului informațional pagina 23
1.6 Analiza criticӑ a sistemului actual și identificarea neajunsurilor
(punctelor critice) existente în funcționarea sistemului existent pagina 26
Cap. 2. PROIECTAREA DE ANSAMBLU A SISTEMULUI INFORMATIC
2.1 Obiectivele și oportunitatea aplicației informatice pagina 27
2.2 Locul aplicației informatice în sistem pagina 28
2.3 Alegerea tehnologiei de prelucrare (stabilirea platformei hardware,
software și de comunicații) pagina 29
2.4 Diagrama Entitate-Asociere pagina 32
2.5 Stabilirea colecțiilor de date pagina 33
2.6 Descrierea aplicației informatice pagina 34
2.7 Estimarea necesarului de resurse și a calendarului de realizare pagina 35
3
Cap. 3 PROIECTAREA DE DETALIU A APLICAȚIEI INFORMATICE
3.1 Definirea obiectivelor aplicației informatice pagina 38
3.2 Proiectarea logicӑ și fizicӑ a ieșirilor pagina 40
3.3 Proiectarea logicӑ și fizicӑ a intrӑrilor pagina 40
3.4 Proiectarea sistemului de codificare a datelor pagina 41
3.5 Proiectarea bazei de date pagina 43
3.6 Proiectarea interfeței aplicației pagina 49
Cap. 4. PREZENTAREA PRODUSULUI SOFTWARE pagina 57
Cap. 5. EFICIENȚA ȘI UTILITATEA APLICAȚIEI INFORMATICE pagina 119
ANEXE pagina 121
BIBLIOGRAFIE pagina 145
4
Introducere
Ingredientele unei educații eficiente pentru studenți depinde de modalitӑțile de
comunicare între toate pӑrțile implicate, atât profesori cât şi studenți. Oricine are nevoie de
o instruire corespunzӑtoare privind evoluția, respectiv provocӑrile cu care trebuie sӑ se
confrunte zilnic.
Întrucât tehnologia se dezvoltӑ din ce în ce mai mult ca un instrument util pentru profesori,
administratori, este normal sӑ devinӑ electronice și cataloagele. World Wide Web oferӑ
mediul potrivit, pe care profesorii îl pot folosi și de care sӑ beneficieze și studenții.
Pentru un profesor, cel mai mare avantaj al unui catalog online reprezintӑ administrarea
informațiilor, întrucât atribuțiile lui se vor reduce semnificativ, el centrând întreaga sa
activitate în doar câteva pagini, la care va avea acces oricând și oriunde. Datele pe care el le
va introduce vor fi reținute în baza de date, profesorul, ulterior având posibilitatea sӑ le
modifice. Practic, el are acces imediat la diferite rapoarte, fie cӑ este vorba de progresul mai
multor studenți care sunt înscriși la aceeași facultate, fie cӑ se dorește vizualizarea
progresului academic al unui student, la materiile care îi sunt predate.
Studenții pot transforma aceastӑ experiențӑ într-una pozitivӑ, întrucât au acces la evoluția
lor pe întreaga duratӑ a anului universitar, constituind un portal cӑtre catalogul
profesorilor.
Aceastӑ idee eliminӑ procesul transmiterii informației între student și profesor, alocând
timp valoros în ajutarea studenților în urmӑrirea activitӑților lor.
În momentul în care intervine lipsa de comunicare dintre pӑrțile implicate, confuzia și
neîncrederea pot apӑrea. Profitând de acest sistem online, nici o singurӑ parte nu va fi
ținutӑ departe de întregul progres al fiecӑrei grupe, fiecӑrui student sau al performanței
întregii universitӑți.
Prezenta lucrare de licența își propune sӑ elimine din neajunsurile cataloagelor standard, și
propune sӑ realizeze un sistem informatic ce va cuprinde elemente prezentate anterior și
detaliate în urmӑtoarele capitole.
5
Cap. 1 STUDIUL ȘI ANALIZA SISTEMULUI EXISTENT
1.1 Prezentarea succintӑ a unitӑții economico-sociale
Universitatea Româno-Americanӑ din București a fost înființatӑ în anul 1991, în cadrul
Fundației Româno - Americane pentru Promovarea Educației și Culturii, având drept scop
promovarea valorilor educaționale ale învӑțӑmântului superior american, pe fondul
bogatelor tradiții ale învӑțӑmântului românesc.
La întrunirea în care Prof.univ.dr. Ion Smedescu a anunțat înființarea Universitӑții Româno-
Americane, în prezența mass-media și a doamnei Agata Kooperman, atașat cultural al
Ambasadei SUA din București, doamna Kooperman a fost de acord cu înființarea și
denumirea Universitӑții, recomandând o serie de universitӑți din SUA pentru a fi contactate
și pentru a stabili relații de cooperare.
S-a pornit de la faptul cӑ în Statele Unite ale Americii învӑțӑmântul superior are ca suport
modelul general de comportament al societӑții americane bazat pe organizarea eficientӑ a
activitӑții, simțul perseverent al datoriei, cultivarea sentimentului muncii, respectul de sine
și fațӑ de ceilalți, spiritul onest al competiției întreținut de-a lungul întregii vieți, întrecerea
cu toți ceilalți și, în primul rând cu sine însuși.
Inițiativa înființӑrii Universitӑții aparține profesorului universitar dr. Ion Smedescu, care
este fondatorul și Rectorul Universitӑții, membru activ al Academiei Americane de Științe
din New York, Președintele Fundației Româno-Americane pentru Promovarea Educației și
Culturii, în activitatea cӑreia este integratӑ Universitatea.
Domnia sa este membru al Consiliului Național al Asociației Generale a Economiștilor din
România și director general adjunct al Centrului Internațional de Biografii din Cambridge.
A fost declarat de Institutul American de Biografii din SUA "Omul Anului" în 2001, 2002 și
2003; același institut i-a acordat "Medalia de Onoare Americanӑ". De asemenea, a fost
distins cu "Medalia de aur a Academiei de Științe a Braziliei". În luna ianuarie 2004,
apreciind contribuția deosebitӑ la promovarea și dezvoltarea învӑțӑmântului românesc și
întreaga sa activitate didacticӑ și de cercetare, profesorului univ.dr. Ion Smedescu i s-a
6
conferit, prin Decret Prezidențial, Ordinul Național Serviciul Credincios în gradul de
Cavaler.
Conceputӑ ca formӑ alternativӑ și complementarӑ la învӑțӑmântul superior public,
Universitatea are în structura sa 6 facultӑți, din care 5 cu profil economic și una cu profil
juridic, respectiv: Facultatea de Relații Comerciale și Financiar Bancare Interne și
Internaționale, Facultatea de Management-Marketing, Facultatea de Economia Turismului
Intern și Internațional, Facultatea de Informaticӑ Managerialӑ, Facultatea de Studii ale
Integrӑrii Economice Europene, Facultatea de Drept.
În contextul reformei impuse de Procesul Bologna, Universitatea a urmӑrit creșterea
gradului de compatibilizare a ofertei sale educaționale cu învӑțӑmântul european și a
realizat totodatӑ, prin intermediul acțiunilor întreprinse, trecerea la învӑțӑmântul integrat
(licența - masterat - doctorat).
Pentru realizarea misiunii și obiectivelor sale, Universitatea Româno-Americanӑ din
București se sprijinӑ pe o colaborare fructuoasӑ cu universitӑți americane, din rândul
cӑrora se detașeazӑ JAMES MADISON UNIVERSITY, din statul Virginia, AMERICAN
UNIVERSITY din Washington D.C., UNIVERSITATEA de NORD - TEXAS, UNIVERSITATEA
BARRY - Florida, UNIVERSITATEA DE SALLES - Pennsylvania, cu acestea fiind încheiate
acorduri de lungӑ duratӑ, precum și universitӑți și instituții din Europa, America de Sud
(Brazilia). Numeroși studenți au beneficiat de burse de studiu în SUA, inclusiv pentru
Masterat, o parte din aceștia rӑmânând în cadrul corpului profesoral al Universitӑții.
7
1.2 Activitӑțile desfӑșurate în unitatea economicӑ (caracteristicile generale ale sistemului
economic din unitate)
Pe baza acordului de cooperare pe termen lung încheiat cu James Madison University,
Universitatea Româno-Americanӑ beneficiazӑ de prezența și contribuția unor cadre
didactice americane de prestigiu, de manuale și materiale de studiu, de burse pentru
studenți; organizeazӑ vizite ale unor studenți americani în zone istorice și turistice ale
României, în scopul cunoașterii de cӑtre aceștia a țӑrii noastre; organizeazӑ în comun
simpozioane științifice educaționale, schimb de experiențӑ între cadrele didactice, etc.
Cancelarul Universitӑții James Madison, din statul Virginia, profesorul Ronald Carrier a dat
curs, în mai multe rânduri, invitației de a vizita Universitatea Româno Americanӑ din
București pentru a cunoaște direct, la fața locului, preocupӑrile studenților și ale
profesorilor noștri. Pentru spirjinul acordat Universitӑții Româno-Americane, domnul
Ronald Carrier, în calitate de Rector al James Madison University a fost ales președinte de
onoare al Fundației Româno-Americane pentru Promovarea Educației și Culturii.
Menționӑm, de asemenea, contribuțiile domnilor prof. dr. Stephen Bowers și prof.univ.dr.
Bijan Saadatmand, care au contribuit fundamental la punerea bazelor și la dezvoltarea
permanenta a cooperӑrii între cele douӑ instituții de invӑțӑmânt superior. Aceasta
fructuasӑ cooperare dintre cele douӑ universitӑți a cӑpӑtat, în timp, noi valențe și datoritӑ
sprijinului primit, în mod constant, de la Dl. Linwood Rose, actualul Președinte al James
Madison University și al D-nei. Lee Sternberger, Directorul pentru Relații Internaționale. În
acest fel s-au putut realiza în permanențӑ schimburi de profesori și studenți, asigurându-se
o mai mare deschidere a Universitӑții Româno-Americane cӑtre mediul academic american.
Acreditarea Universitӑții a permis introducerea unei gândiri noi și a unei abordӑri
strategice menite sӑ consolideze capacitӑțile de cercetare existente și sӑ relanseze aceastӑ
activitate prin implicarea mai activӑ a cadrelor didactice și a studenților în Programe și
Grant-uri interne și Internaționale. În cei 15 ani de activitate, Universitatea Româno-
Americanӑ s-a afirmat ca un furnizor de educație oferind societӑții românești peste 12.000
8
de licențiați pe care îi întâlnim în majoritatea structurilor administrației, în diverse firme,
bӑnci și instituții social-culturale.
În favoarea ideii de reformӑ curricularӑ, derulatӑ în cadrul Universitӑții au pledat
permanent o serie de argumente fundamentale precum:
• performanța,
• egalitatea de șanse,
• compatibilizarea cu sistemele european și american de învӑțӑmânt,
• asigurarea unei succesiuni logice a disciplinelor pe ani de studii,
• consolidarea sistemului de credite transferabile, etc.
Pentru creșterea performanțelor cadrelor didactice, Senatul Universitӑții a stabilit criterii
de evaluare anualӑ, ținându-se seama de calitatea cursurilor, a seminariilor și a lucrӑrilor
aplicative, de activitatea de cercetare științificӑ și fidelitatea fațӑ de Universitate. La
evaluarea cadrelor didactice participӑ și studenții. Promovarea unei atitudini de
parteneriat între cadrele didactice și studenți conduce la realizarea unui învӑțӑmânt
participativ, performant și pragmatic, bazat pe cunoaștere, înțelegere și demnitate, pe
respectarea și încurajarea personalitӑții fiecӑrui student. Astfel, se acordӑ o atenție
deosebitӑ dezvoltӑrii creativitӑții studenților, stimulӑrii exprimӑrii opiniilor, formӑrii
atitudinilor și convingerilor bazate pe promovarea valorilor naționale și internaționale.
Prin tot ceea ce a înfӑptuit pânӑ în prezent Universitatea Româno-Americanӑ și-a
consolidat poziția în sistemul național de învӑțӑmânt, iar activitatea sa a cӑpӑtat valențe
noi, necesare în condițiile unei acerbe competiții și concurențe pe piața forței de munca
înalt calificate din România și din lume. Realizarea obiectivelor și misiunii sale au
contribuit la creșterea prestigiului în rândul universitӑților din România, dovedindu-se
viabilӑ ideea de alternativӑ la învӑțӑmântul universitar public.
9
1.3 Studiul sistemului de conducere
Universitatea Româno-Americanӑ din București are un sistem de conducere care respectӑ
reglementӑrile legale în vigoare, principiile managementului modern și bunele practici
promovate în sistemele educaționale ale țӑrilor din Uniunea Europeanӑ. Toate
compartimentele de suport academic și serviciile administrative din cadrul URA sunt
încadrate cu personal corespunzator din punct de vedere al calificӑrii profesionale și
condițiilor cerute pentru ocuparea posturilor respective.
Mai jos voi enumera câteva dintre principalele funcții de conducere din cadrul Universitӑții:
DIRECTOR GENERAL
Atribuții:
o Stabilește obiectivele de dezvoltare ale firmei, în concordanțӑ cu strategia elaboratӑ
de Consiliul de Administrație: comunicӑ obiectivele și urmӑrește ca acestea sӑ fie
comunicate întregului personal; monitorizeazӑ trimestrial/semestrial/anual gradul
de realizare a obiectivelor; stabilește obiective personale și pentru top-management
în strictӑ concordanțӑ cu obiectivele firmei.
o Aprobӑ bugetul și rectificӑrile acestuia: participӑ la elaborarea bugetului, analizeazӑ
propunerile înaintate, opereazӑ corecțiile necesare și aprobӑ bugetul final; aprobӑ
sistemul de raportare folosit pentru urmӑrirea realizӑrii bugetului.
o Identificӑ oportunitӑți de afaceri: monitorizeazӑ piața și identificӑ tendințele de
dezvoltare; analizeazӑ oportunitӑțile/constrângerile de ordin legislativ, financiar,
tehnologic și social; identificӑ modalitӑți de dezvoltare a serviciilor oferite de firma
în concordanțӑ cu tendințele pieței; identificӑ și atrage resursele necesare pentru
implementarea noilor idei de afaceri.
o Reprezintӑ firma în relațiile protocolare cu furnizorii, clienții și alte
organisme/organizații cu impact real/potențial asupra rezultatelor firmei: asigurӑ o
bunӑ imagine a firmei pe piațӑ; participӑ la întâlniri de afaceri cu furnizori, clienți,
10
organisme financiare și instituții guvernamentale din țarӑ și din strӑinӑtate;
dezvoltӑ relații pozitive cu persoane-cheie în vederea întӑririi poziției firmei.
o Asigurӑ managementul firmei: comunicӑ managementului valorile și obiectivele
strategice ale firmei; stabilește obiectivele managerilor din subordine, termenele-
limitӑ și modalitӑțile de mӑsurare a gradului de realizare a obiectivelor; aprobӑ
procedurile de interes general ale firmei (aprovizionare, vânzare, distribuție,
financiare, service, resurse umane); participӑ la elaborarea și implementarea
sistemelor de raportare și a sistemului de calitate; dezvoltӑ mijloace de motivare a
personalului din subordine; asigurӑ un climat de comunicare și încurajare a
inițiativei care sӑ contribuie la atingerea obiectivelor stabilite; identificӑ nevoile de
recrutare și participӑ la selecția, integrarea și dezvoltarea managementului firmei;
participӑ la programele de elaborare și actualizare a fișelor de post ale managerilor
din subordine; evalueazӑ periodic activitatea managerilor din subordine; negociazӑ
și conciliazӑ situațiile conflictuale apӑrute în relațiile interpersonale; aprobӑ
planificarea concediilor de odihnӑ pentru angajații din subordine; asigurӑ
respectarea normelor interne de funcționare de cӑtre personalul din subordine;
stabilește mӑsuri de eficientizare a activitӑții personalului din subordine.
o Asigurӑ rețeaua de relații necesarӑ dezvoltӑrii activitӑții firmei: evalueazӑ potențialul
furnizorilor și al clienților; stabilește posibile cӑi de colaborare și decide asupra
parteneriatelor strategice: elaboreazӑ planuri de afaceri și le implementeazӑ;
dezvoltӑ relații pozitive cu personalul firmei în vederea motivӑrii și a creșterii
gradului de implicare în activitatea firmei.
DIRECTOR ECONOMIC
Atribuții:
o Asigurӑ buna gestionare a patrimoniului: asigurӑ condițiile necesare pentru
întocmirea documentelor justificative privind operațiile patrimoniale; asigurӑ
controlul operațiunilor patrimoniale efectuate la nivelul firmei, procedeele de
11
prelucrare utilizate, precum și exactitatea datelor contabile furnizate; organizeazӑ
inventarierea patrimoniului și valorificarea rezultatelor inventarierii; asigurӑ
analiza periodicӑ a utilizӑrii și stӑrii mijloacelor fixe; asigurӑ disponibilitӑțile
necesare și menținerea în permanențӑ a capacitӑții de platӑ a societӑții; asigurӑ
plata la termen a sumelor ce sunt obligația firmei fațӑ de bugetul de stat, alte
obligații fațӑ de terți; asigurӑ efectuarea corectӑ și la timp a calculului privind
drepturile salariale ale personalului; propune mӑsuri concrete și eficiente pentru
înlӑturarea unor situații nefavorabile în domeniul stocurilor; desfӑșoarӑ activitate
de documentare în probleme economico-financiare.
o Asigurӑ respectarea legislației fiscale la nivel de firmӑ: se documenteazӑ la zi cu
privire la legislația din domeniul financiar-contabil și asigurӑ desfӑșurarea activitӑții
financiar-contabile în conformitate cu legislația de specialitate; asigurӑ respectarea
regulilor de întocmire a bilanțului contabil, depunerea la termen la organele de
drept și publicarea acestuia în Monitorul Oficial; asigurӑ pӑstrarea documentelor
justificative, a registrelor și a bilanțurilor contabile; urmӑrește respectarea
legislației fiscal; urmӑrește constituirea fondurilor și utilizarea acestora cu
respectarea dispozițiilor legale; exercitӑ controlul financiar preventiv privind
legalitatea operațiunilor.
o Întocmește bugetul general al societӑții, informeazӑ și face propuneri de corecție:
realizeazӑ proiectul de buget semestrial și anual, defalcat; analizeazӑ indicatorii de
afaceri și își exprimӑ punctul de vedere în legaturӑ cu aceștia; sprijinӑ
departamentele firmei în analiza indicatorilor proprii.
o Raporteazӑ rezultatele financiare ale firmei: asigurӑ înregistrarea sistematicӑ și
cronologicӑ, prelucrarea, publicarea și pӑstrarea informațiilor cu privire la situația
patrimonialӑ și la rezultatele economice ale firmei; asigurӑ întocmirea tuturor
raportӑrilor solicitate de organele Administrației financiare și de control, bancare,
statistice; prezintӑ Directorului General rapoarte conținând rezultatele financiare
ale firmei.
12
o Elaboreazӑ și implementeazӑ sistemul general de evidențӑ a gestiunii firmei:
stabilește proceduri de lucru generale sau specifice care sӑ asigure evidența de
gestiune; stabilește principiile de organizare a sistemului informațional.
o Conduce și organizeazӑ activitatea departamentului: stabilește sarcinile salariaților
din subordine și prioritӑțile în executarea acestor sarcini; participӑ la programele de
elaborare și actualizare a fișelor de post ale salariaților din subordine; evalueazӑ
periodic activitatea salariaților din subordine; negociazӑ și conciliazӑ situațiile
conflictuale apӑrute în relațiile interpersonale; propune
recompensarea/sancționarea personalului din subordine conform normativelor
interne; aprobӑ planificarea concediilor de odihnӑ pentru angajații din subordine;
asigurӑ respectarea normelor interne de funcționare de cӑtre personalul din
subordine.
DECAN
Atribuții:
o asigurӑ conducerea operativӑ a facultӑții pe durata mandatului;
o urmӑrește îndeplinirea și derularea corespunzӑtoare a programului managerial
propus și validat de cӑtre Consiliul Profesoral;
o promoveazӑ în mod constant mӑsuri care sӑ conducӑ la menținerea și creșterea
prestigiului profesional al facultӑții în raport cu alte unitӑți similare de profil din țarӑ
și strӑinӑtate;
o urmӑrește promovarea de noi specializӑri pe forme de învӑțӑmânt, în acord cu
cerințele pieței economice și ale forței de muncӑ;
o responsabil cu activitatea didacticӑ desfӑșuratӑ și probleme resurse umane;
o urmӑrește și coordoneazӑ activitatea de promovare a cadrelor didactice la nivel
13
de facultate în condițiile respectӑrii prevederilor legale;
o definește și redefinește obiectivele facultӑții;
o organizeazӑ, coordoneazӑ și controleazӑ activitatea didacticӑ din facultate;
o aprobӑ la începutul fiecӑrui an universitar planurile de învӑțӑmânt și bugetul facultӑții;
o coordoneazӑ și organizeazӑ accesarea proiectelor de cercetare științificӑ;
o coordoneazӑ acțiunile de autorizare și acreditare a specializӑrilor facultӑții pe
forme de învӑțӑmânt;
o coordoneazӑ și decide, în conformitate cu prevederile legale și cu respectarea
Cartei Universitӑții, în toate problemele didactice, științifice, financiare, administrative
sau de altӑ naturӑ ale facultӑții în vederea la îndeplinirea planului managerial propus
și validat;
o aprobӑ convențiile de colaborare încheiate în numele facultӑții cu alte insituții de
învӑțӑmânt, cercetare, proiectare, din mediul socio-economic, etc:
o aprobӑ regulamentele de organizare a activitӑții profesionale și științifice la
nivelul facultӑții;
o convoacӑ ori de câte ori este necesar și conduce ședințele de Birou și Consiliu
Profesoral;
14
PRODECAN
Atribuții:
o coordoneazӑ activitatea de asigurare a calitӑții procesului de învӑțӑmânt ;
o urmӑrește îndeplinirea cerințelor referitoare la sistemul de evaluare a studenților ;
o avizeazӑ reactualizarea de câte ori este nevoie a Regulamentului studentului ;
o urmӑrește desfӑșurarea procesului de învӑțӑmânt și propune spre analizӑ
Consiliului Profesoral problemele rezultate din controlul direct sau din analizele
efectuate la nivelul catedrelor și departamentelor ;
o propune din partea facultӑții acordarea titlului de doctor în urma îndeplinirii
procedurilor legale în vigoare ;
o supune aprobӑrii Consiliului Profesoral scoaterea la concurs a posturilor didactice
în funcție de strategia de dezvoltare și de posibilitӑțile financiare ale facultӑții, în
urma analizelor efectuate la nivel de catedrӑ ;
o coordoneazӑ activitatea de întocmire a dosarelor de evaluare a programelor de
studiu acreditare;
o coordoneazӑ activitӑțile didactice de formare continuӑ ;
o asigurӑ buna desfӑșurare a concursurilor în Consiliul Facultӑții (promovare,
angajare, burse, etc.) referitoare la cadrele didactice ;
o coordoneazӑ activitӑțile de întocmire a planurilor de învӑțӑmânt;
o coordoneazӑ activitatea de întocmire a statelor de funcțiuni ale catedrelor ;
15
o coordoneazӑ activitatea didactica susținutӑ în facultate de cӑtre cadre didactice ale
altor facultӑți/catedre ;
o coordoneazӑ susținerea examenelor de licențӑ și absolvire (elaborarea și
repartizarea temelor) ;
o coordoneazӑ planificarea examenelor de an;
o coordoneazӑ stabilirea și planificarea examenelor de diferențӑ;
o asigurӑ urmӑrirea și implementarea sistemului de credite transferabile;
o urmӑrește editarea de materiale didactice (planul editorial al facultӑții).
o controleazӑ modul de desfӑșurare a activitӑților didactice;
o organizeazӑ concursurile de admitere;
o avizeazӑ stabilirea decanilor de ani și a tutorilor ;
o coordoneazӑ activitatea de întocmire a orarului pe facultate ;
o urmӑrește îndeplinirea cerințelor referitoare la formarea deprinderilor și
aptitudinilor adecvate profesiei pentru care se pregӑtește studentul ;
o organizeazӑ activitӑți consacrate promovӑrii imaginii facultӑții și recrutӑrii de
candidați.
RECTOR
Atribuții:
o coordoneazӑ, supervizeazӑ și controleazӑ întreaga activitate din universitate și este
responsabil de calitatea și eficiența acesteia. Rectorul poate delega din atribuțiile
16
sale prorectorilor și secretarului științific. El poate, de asemenea, retrage aceste
atribuții în cazul în care considerӑ cӑ delegarea lor nu mai este motivatӑ;
o este președintele Senatului, al Biroului Senatului și al Consiliului de Administrație al
Universitӑții. Rectorul supune întreaga sa activitate analizei Senatului Universitӑții;
o coordoneazӑ strategia evoluției Universitӑții pe termen scurt, mediu și lung. El
propune Senatului direcțiile prioritare de acțiune pentru realizarea obiectivelor
strategice;
o coordoneazӑ activitatea Departamentului de Cercetare Științificӑ, Departamentului
de Asigurarea Calitӑții, Biblioteca Centralӑ Universitarӑ, Biroul Audit Intern,
Serviciul Resurse Umane și Baze de Date, Oficiul Juridic, Departamentul de Protocol;
o reprezintӑ universitatea în relațiile cu persoane fizice sau juridice din afara
Universitӑții;
o asigurӑ prin întreaga sa activitate menținerea echilibrului congruent între facultӑți,
departamente și diversele componente administrative din universitate. El este
garantul existenței unui climat universitar caracterizat de echitate și transparențӑ;
o asigurӑ organizarea, în cele mai bune condiții, a controlului financiar preventiv, a
controlului operativ curent, a controlului financiar și a altor forme de control pe
care le considerӑ necesare pentru desfӑșurarea fӑrӑ obturații a întregii activitӑți
universitare.
o coordoneazӑ și supervizeazӑ procesul de reformӑ universitarӑ;
o reprezintӑ universitatea, direct sau prin delegat, în relațiile cu universitӑți sau
instituții non-academice, pe plan național și internațional.
o dispune de toate atribuțiile ce-i sunt conferite de legile și regulamentele în vigoare
(ordonator de credite, încadrӑri și eliberӑri de personal, înmatriculӑri/
exmatriculӑri, numirea comisiilor de concurs, numirea comisiilor de doctorat).
17
SECRETAR ȘTIINȚIFIC
Atribuții:
o avizeazӑ prezentarea în fața Consiliului Profesoral de cӑtre prodecanul de resort a
rezultatelor obținute în activitatea de evaluare a cadrelor didactice;
o se implicӑ în activitatea de promovare a imaginii facultӑții;
o avizeazӑ publicarea de ghiduri, pliante, etc. pentru promovarea imaginii
Universitӑții;
o urmӑrește și avizeazӑ activitatea de colaborare cu Biblioteca Universitӑții;
o pregӑtește reuniunile Consiliului Profesoral al facultӑții;
o stabilește sub conducerea decanului, activitӑțile Consiliului și Biroului Consiliului
Facultӑții și urmӑrește aplicarea hotӑrârilor acestora;
o supune dezbaterii Consiliului Profesoral propunerile catedrelor, departamentelor,
Centrelor de Cercetare, serviciului administrativ;
o verificӑ respectarea reglementӑrilor în hotӑrârile catedrelor, departamentelor,
centrelor de cercetare, înaintate Consiliului Facultӑții;
o organizeazӑ alegerile organismelor de conducere din facultate în conformitate cu
prevederile regulamentului alegerilor, ale Cartei Universitӑții și supune aprobӑrii CP
modul de organizare;
o asigurӑ desfӑșurarea concursurilor pentru ocuparea posturilor didactice;
o înainteazӑ propunerile Consiliului Facultӑții la Senatul Universitӑții și Rectorat;
o transmite hotӑrârile Consiliului Facultӑții catedrelor, departemantelor și Centrelor
de Cercetare;
o asigurӑ funcționarea regulamentarӑ a Consiliului Profesoral;
18
o coordoneazӑ activitatea de creștere a vizibilitӑții facultӑții în plan național și
internațional;
o stabilește sub conducerea decanului activitӑțile Consiliului și Biroului Consiliului
Facultӑții și urmӑrește aplicarea hotӑrârilor acestora;
o asigurӑ buna funcționare a comisiilor Consiliului Facultӑții prin programarea
tematicilor, convocarea membrilor comisiei în ședințe de lucru și prezentarea
rezultatelor în fața Consiliului Facultӑții;
1.4 Studiul sistemului condus
Facultatea reprezintӑ unitatea funcționala de bazӑ a instituției de învӑțӑmânt superior și are
în componențӑ una sau mai multe secții de specialitate. Facultatea este organizatӑ pe
departamente și catedre.
Departamentele Universitӑții Româno-Americane sunt urmӑtoarele: Departament Limbi
Strӑine, Departament Cercetare, Departament Relații Internaționale, Centrul de Studii
Româno-Japoneze, Centrul de Consiliere și Orientare în Carierӑ, Biroul de Programe
Comunitare, Departament IT, Centrul de Studii și Documentare Europeanӑ, Biroul Acte de
Studii, Centrul de Economie Politicӑ și Afaceri ”Murray Rothbard”.
Mai jos voi enumera atribuțiile câtorva departamente din cadrul Universitӑții :
Departament Limbi Strӑine:
o desfӑșurarea la standarde înalte și de calitate a procesului didactic de predare a
limbilor strӑine;
o elaborarea programelor analitice la limbile strӑine;
o elaborarea și editarea cursurilor necesare predӑrii limbilor strӑine în Universitate;
o participarea la evaluarea activitӑții cadrelor didactice care predau limbi strӑine;
19
o asigurarea perfecționӑrii continue a metodelor de predare a limbilor strӑine,
precum și a pregӑtirii profesionale a cadrelor didactice care predau limbile strӑine;
o sprijinirea realizӑrii activitӑții de cercetare științificӑ înscrisӑ în programele de
cercetare ale catedrelor, facultӑților și ale Universitӑții;
o organizarea de cursuri intensive de predare a limbilor strӑine pentru studenții și
personalul administrativ din Universitate, la solicitarea acestora;
o controlul la cursurile și seminariile de predare a limbilor strӑine;
o analiza rezultatelor obținute la examenele de limbi strӑine;
o efectuarea consultațiilor la disciplinele de limbi strӑine;
o participarea în comisiile de selectare și de concurs ale studenților pentru bursele de
studii în strӑinӑtate;
o participarea la acțiunile organizate de Universitate și de cӑtre facultӑțile de care
aparțin cadrele didactice din componența Departamentului de Limbi Strӑine;
o participarea la asigurarea bazei materiale a Departamentului de Limbi Strӑine (prin
sponsorizӑri, donații, contribuții personale);
o prezentarea de rapoarte, informӑri, programe cu privire la activitatea
Departamentului de Limbi Strӑine cӑtre conducerile facultӑților și Universitӑții;
o asigurarea legaturilor de colaborare cu instituții și organisme specializate în
promovarea excelenței în limbile strӑine, din țarӑ și strӑinӑtate (British Council,
Institutul Cervantes etc.);
o participarea la programe Internaționale și europene de realizare a excelenței în
limbile strӑine și de colaborare în acest scop, cu universitӑți indigene și strӑine.
20
Departament IT:
Membrii acestui serviciu asigurӑ funcționarea unei infrastructuri IT extinse, ce cuprinde în
ansamblul sӑu o multitudine de elemente:
o întreținerea, supravegherea și dezvoltarea conform necesitӑților funcționale ale
unei rețele de calculatoare cu câteva sute de stații interconectate
o conexiune la internet prin fibrӑ opticӑ
o managementul accesului și traficului atât în cadrul rețelei intranet cât și prin
conexiunea la internet
o întreținerea și modernizarea infrastructurii hardware a laboratoarelor de
Informaticӑ din cadrul Universitӑții
o instalarea, configurarea și întreținerea aplicațiilor software utilizate în cadrul
procesului de învӑțӑmânt
o întreținerea și dezvoltarea infrastructurii hardware din cadrul serviciilor
administrative ale Universitӑții
o dezvoltarea și realizarea de materiale promoționale și informative privind
activitatea Universitӑții
o întreținerea și exploatarea mijloacelor multimedia din cadrul spațiilor de
învӑțӑmânt
o asigurarea de suport tehnic permanent în ceea ce privește utilizarea echipamentelor
hardware și a aplicațiilor software pentru toate serviciile funcționale ale
Universitӑții
o întreținerea, managementul și dezvoltarea permanenta a rețelei de comunicații
telefonice
o expertiza și consilierea tehnicӑ în cazurile achizițiilor de echipamente din sfera IT
21
o realizarea, editarea și utilizarea materialelor foto-video privind evenimentele și
activitӑțile din cadrul Universitӑții
o dezvoltarea și utilizarea de aplicații software proprii pentru rezolvarea și
automatizarea punctualӑ a unor sarcini ale diferitelor servicii funcționale ale
Universitӑții
o instalarea, întreținerea și dezvoltarea sistemelor de securitate utilizate în cadrul
campusului universitar.
Centrul de Studii și Documentare Europeanӑ:
o urmӑrirea, evaluarea și achiziționarea de materiale de specialitate din România și
din strӑinӑtate, necesare pentru derularea activitӑții de cercetare sau procesului
didactic în cadrul Universitӑții Româno-Americane;
o realizarea de studii și analize în domeniul integrӑrii economice europene; (proiecte
de cercetare finanțate din programele naționale și internaționale, contracte cu
companii, articole de specialitate etc.)
o organizarea de manifestӑri științifice: simpozioane, conferințe, mese rotunde,
dezbateri;
o realizarea de contacte cu potențiali parteneri din strӑinӑtate: Universitӑți, Centre de
Cercetare, Instituții Europene, Centre de formare etc.
o realizarea de demersuri pentru întӑrirea legaturilor cu instituții de profil din
România în vederea realizӑrii activitӑților de cercetare și organizare de evenimente
dedicate integrӑrii economice europene; (Institutul de Economie Mondiala și cu
Institutul European din România)
o editarea revistei Universitӑții în limba englezӑ (Romanian Economic and Business
Review);
22
o organizarea de activitӑți științifice în cadrul proiectelor cu finanțare Europeanӑ
pentru a facilita buna derulare a acestora dar și un grad de diseminare a rezultatelor
cât mai ridicat.
Organigrama conducerii academice şi administrative a universităţii
23
Organigrama facultӑții
1.5 Studiul sistemului informațional
Sistemul informațional al managementului universitar reprezintӑ ansamblul informațiilor,
fluxurilor informaționale, procedurilor și mijloacelor de tratare a informațiilor, menite sӑ
contribuie la realizarea obiectivelor Universitӑții. Din definiție rezultӑ cӑ sistemul
informațional al managementului universitar este alcӑtuit din mai multe elemente corelate
între ele: date și informații, fluxuri informaționale, proceduri și mijloace de tratare
(prelucrare) a informațiilor.
Tabelul de mai jos ar putea fi considerat un punct de plecare în analiza sistemului actual al
universitӑții, sistem informațional relevant pentru tema acestei lucrӑri.
24
Descrierea funcției - fișa personalӑ a studentului
- situația școlarӑ pe fiecare semestru
- situația la examene
Furnizorii de date - studenții – fișa personalӑ
- licee – foaia matricolӑ
- cadru didactic – situația școlarӑ
- secretariat – rezultat examene
Beneficiarii datelor - cadre didactice
- studenți
- compartiment secretariat, contabilitate
- decanat, facultate
Tipuri de date necesare
realizӑrii funcției
a. Date personale
- nume și prenume
- data înscrierii
- unitatea de învӑțӑmânt de la care provine –
pentru evidența unitӑților care furnizeazӑ
studenți la înscriere, prognoza dinamicii
numӑrului de studenți și posturi didactice
- documente prezentate la înscriere – pentru
evidența actelor de studii și întocmirea fișei
personale
- media de absolvire a liceului
- limbi strӑine studiate
- numӑr matricol
- data și locul nașterii, sex, evidența militarӑ,
situații statistice, examene
- act identitate – evidența militarӑ etc.
- naționalitate
- cetӑțenie
-domiciliu stabil/flotant
- telefon
- pӑrinți –nume și prenume-, profesie, loc de
25
muncӑ
- starea sӑnӑtӑții
- observații
b. Situația școlarӑ
- numӑr matricol/legitimație informatizatӑ
- facultatea
- an de studii
- grupa
- semestrul- disciplina
- media
- media semestrialӑ și anualӑ
- situația școlarӑ: promovat, repetent,
exmatriculat, situație neîncheiata
- numӑr absențe
- bursier (tip bursa, perioada acordatӑ, suma)
- evidențieri și sancțiuni
c. Situația la examene
- tip examen
- sesiune
- tip probӑ
- disciplina
- media/nota obținutӑ
Mod de folosire a datelor
- pentru construirea grupelor și seriilor
- activitatea cadrului didactic
- calcularea bugetului
- adeverințe studenți
- evidența militarӑ
- organizare examene
- evidența burselor
- evidența studenților strӑini
- situații statistice
- evidențӑ acte studii
26
- evidența rezultatelor la examene
- comunicӑri oficiale
- evaluare a instituției de învӑțӑmânt
Mod de colectare a datelor
- foaia matricolӑ
- fișa personalӑ
- catalog
Frecvența efectuӑrii funcției La înscrierea studenților și de câte ori apar
modificӑri
1.6 Analiza criticӑ a sistemului existent
În sistemul actual, Universitatea Româno-Americanӑ ne oferӑ acces la diferite informații ale
acesteia prin site-ul existent (www.rau.ro), deasemenea la datele studenților înscriși la
facultӑțile din cadrul Universitӑții printr-un catalog online. Aceasta idee de vizualizare a
progresului academic al studenților este una inovativa, dar ca orice concept nou existӑ atât
avantaje, cât și dezavantaje.
În momentul în care un student dorește sa fie direcționat cӑtre pagina respectivӑ, este
rugat sӑ sӑ aleagӑ departamentul din care face parte si sӑ introducӑ un cod numeric
personal ; ulterior se va deschide o paginӑ cu întreaga bazӑ de date a studenților înscriși la
facultatea respectivӑ. În dreptul fiecӑrui student este afișat anul universitar, grupa,
disciplina și notele. Dacӑ studentul dorește sӑ vizualizeze performanțele sale, este obligat
sӑ navigheze pe întreaga paginӑ, acest proces fiind unul destul de anevoios. Un alt aspect
care nu ar trebui neglijat este și faptul cӑ studentul poate observa atât notele lui cât și ale
celorlalți, lucru ce ar putea fi remediat prin crearea unei securizӑri, astfel încât studentul sӑ
poatӑ accesa numai informațiile sale. Prin aceastӑ lucrare se propun câteva modificӑri ale
sistemului actual.
27
Cap. 2. PROIECTAREA DE ANSAMBLU A SISTEMULUI INFORMATIC
2.1 Obiectivele și oportunitatea aplicației informatice
Proiectarea web ca disciplinӑ științificӑ este influențatӑ de dezvoltarea aplicațiilor web, ele
reprezentând un nou domeniu de aplicații cu propriile sale provocӑri asupra dezvoltӑrii
software-ului.
World Wide Web are o influențӑ enormӑ și permanentӑ asupra vieții noastre. Economia,
industria, educația, sӑnӑtatea, administrația publicӑ și distracția reprezintӑ componente ale
vieții noastre care nu au fost pӑtrunse de World Wide Web. Motivul acestei omniprezențe
constӑ în special în natura web-ului, caracterizatӑ prin disponibilitatea globalӑ și
permanentӑ dar și prin accesul omogen la informațiile distribuite la nivel global produse de
indivizi sub forma paginilor web.
Inițial, web-ul a fost proiectat ca un mediu pur informațional, în prezent evoluând într-un
mediu al aplicației. Aplicațiile web de astӑzi sunt rapide și reprezintӑ sisteme software
complexe care oferӑ servicii interactive și personabilizabile accesibile prin intermediul
diferitelor dispozitive; ele oferӑ posibilitatea realizӑrii tranzacțiilor între utilizatori și de
obicei stocheazӑ datele într-o bazӑ de date. Aplicațiile web sunt soluții specializate, cu
funcționalitӑți ridicate și atractive. Ele asigurӑ o mai bunӑ relație și interactivitate cu
clienții. Marele avantaj al aplicațiilor online este integritatea și posibilitatea de a le ajusta
în funcție de particularitӑțile și nevoile clientului. Totodatӑ ele pot foarte ușor fi combinate,
funcționând simultan, pentru a spori eficiența.
“RAUGradebook” este o aplicație care poate fi dezvoltatӑ în orice organizație, atât într-o
companie de succes cât și într-o întreprindere noua pe piața economicӑ. Crearea acesteia
ajutӑ la dezvoltarea acestei întreprinderi și este relativ ușor de proiectat. Permite
utilizatorilor un acces mai ușor și mai sigur la o bazӑ de date, dar și la anumite informații pe
care serverul le permite, de la orice calculator.
28
2.2 Locul aplicației informatice în sistem
Oricine are nevoie de informații precise privind progresul studenților. Tehnologia
interactivӑ modernӑ este o componentӑ vitalӑ în ajutarea studenților și a profesorilor sӑ fie
informați și ținuți la curent cu toate aceste evoluții. Acest lucru poate fi realizat folosind un
catalog online.
Un catalog online este o metodӑ rapidӑ și eficientӑ atât pentru studenți cât și pentru
profesori în vederea interacționӑrii acestora, pentru obținerea unei experiențe
educaționale pozitive. Profesorii înregistreazӑ note, urmând ca studenții sӑ vizualizeze
rezultatele finale. Toate pӑrțile sunt implicate și informate în legӑturӑ cu starea curentӑ a
mediului de lucru și a întregului progres.
Aplicația pe care am dezvoltat-o aduce o altӑ perspectivӑ în ceea ce privește evaluarea
studenților. Prin aceasta se faciliteazӑ sarcina profesorilor, întrucât li-i se pune la dispoziție
o aplicație ușor de manevrat și care ar putea fi accesatӑ de oriunde, indiferent unde te afli la
momentul respectiv. Catalogul oferӑ studenților un feedback rapid al progresului lor
academic, iar profesorii au, practic, acces la un raport imediat al evoluției fiecӑrui student.
Aplicația dezvoltatӑ are atât avantaje cât și dezavantaje. Printre avantaje s-ar numӑra
urmӑtoarele: securitate, întrucât fiecare student/profesor și administrator beneficiazӑ de
propriul user-name și parolӑ, așadar un student nu ar putea accesa alte pagini decât cele
care îi sunt permise, nu ar avea drept de modificare asupra notelor sale, flexibilitate, pentru
cӑ oricine poate accesa site-ul oriunde și oricând, accesul este permis simultan de pe mai
multe calculatoare, informațiile sunt mereu actualizate, administratorul fiind cel care
întreține aplicația, gestioneazӑ studenții, profesorii, precum și alte date ale acestora, dar și
simplitate, aplicația nu este una complexӑ și poate fi utilizatӑ de orice persoanӑ, indiferent
de gradul de cunoaștere al funcționӑrii calculatorului, internet-ului.
29
Imbunӑtӑțiri în ceea ce privește aplicația pe care am dezvoltat-o ar putea fi aduse, întrucât
ar putea exista o modalitate prin care studenții și profesorii sӑ poatӑ comunica ( chat ), ar
putea fi postate de cӑtre profesori și temele studenților, ei putând sa acceseze o anumitӑ
paginӑ a grupului lor unde s-ar putea observa cerințele temei respective. Deasemenea, o
astfel de aplicație ar putea prezenta un anumit risc, în sensul cӑ un hacker ar avea multiple
posibilitӑți de spargere a codului aplicației dezvoltate, rezultatul acesta ducând la
consecințe, întrucât va putea fi realizatӑ modificarea oricӑrei informații de pe orice paginӑ.
Din cauza faptului cӑ este o aplicație simplӑ, nu are integrate foarte multe elemente, dar ea
se va putea transforma într-o aplicație mult mai complexӑ în viitor.
2.3 Alegerea tehnologiei de prelucrare (stabilirea platformei hardware, software și de
comunicatii)
Pentru aplicație am folosit SQL Server Management Studio 2008, prin intermediul cӑruia am
creat o bazӑ de date numitӑ “RAUDatabase”, în care am definit tabelele de care aveam
nevoie pentru implementarea lor în aplicație, “RAUGradebook”, stabilind cheile primare și
legӑturile aferente. Tabele au fost populate cu informații legate de studenți, profesori,
materii și note. Studenților și profesorilor le-am atribuit coduri de utilizator și roluri,
pentru a stabili diferite privilegii pentru fiecare client, care dorește sӑ se autentifice în
aplicație.
Folosind Microsoft Visual Web Developer 2008 am realizat interfața paginilor web, prin care
user-ul comunicӑ cu server-ul, trimițând instrucțiuni pentru crearea, vizualizarea,
modificarea sau ștergerea datelor din baza de date existentӑ.
Platforma .NET este o platformӑ pe care se vor crea noile generații de soft. Microsoftul a
investit foarte mult capital în dezvoltarea lui și în adoptarea unui nou standard. În aceastӑ
platformӑ se pot dezvolta numeroase tipuri de aplicații, pornind de la cele Consola, la XML
Web services, Web Forms și aplicații bazate pe HTML, Windows Forms , Windows services,
Component library.
30
Microsoft .NET Framework este o colecție cuprinzӑtoare de clase, care furnizeazӑ
programatorilor aproape tot ce le trebuie pentru a scrie aplicații pentru internet, web și
Windows. .NET se adreseazӑ cu predilecție domeniului programӑrii pentru web.
Clasele definite în .NET Framework sunt neutre fațӑ de limbaj. Microsoft a lansat noi
versiuni de C++ și Visual Basic, care pot utiliza aceste clase, precum și noul limbaj de
programare C#.
SQL Server Management Studio 2008
Microsoft SQL Server 2008 Management Studio Express (SSMSE) este un mediu integrat
pentru accesarea, configurarea, gestionarea, administrarea și dezvoltarea tuturor
componentelor SQL Server. SQL Server 2008 Management Studio Express combinӑ un
grup larg de instrumente grafice, cu un numӑr de editori bogat pentru a oferi acces la SQL
Server pentru dezvoltatorii și administratorii de toate nivelurile de calificare. SQL Server
poate stoca cantitӑți mari de date a unor useri simultani, prin aceasta distingându-se de
Microsoft Access, creat ca o bazӑ de date pentru un user individual.
Visual Basic și C#
Atât Visual Basic cât și C# sunt axate pe componenta de interfațӑ a programului,
programatorul putând realiza cu ușurințӑ interfețe standardizate de tip Windows (ferestre,
butoane, liste etc.) fӑrӑ a fi nevoie de scrierea de cod pentru acest lucru. Dețin o bibliotecӑ
de componente vizuale (liste, calendare, meniuri etc.) a cӑror componente (graficӑ și
funcționalӑ) sunt deja implementate, având posibilitatea ca programatorul sӑ introducӑ și
sa foloseascӑ componente proprii sau realizate de alți programatori.
Visual Basic este un limbaj orientat pe obiecte, având deja implementatӑ o listӑ de clase cu
utilizare generalӑ. Odatӑ cu apariția versiunii 7, adicӑ odatӑ cu apariția tehnologiei .NET,
31
VB poate utiliza și crea și componente .NET cu toate avantajele pe care acestea le aduc. VB
este un limbaj de nivel înalt având implementate mai multe niveluri de abstractizare a
dezvoltӑrii unei aplicații dar și posibilitatea de compilare în formatul Windows EXE sau
DLL de 16 și 32 biti.
VB este un limbaj interpretat, adicӑ orice cod scris în limbajul VB trebuie mai intâi tradus
într-un limbaj de nivel inferior și dupӑ aceea executat. Acest lucru are avantaje (cum ar fi
rularea fӑrӑ compilare sau portabilitatea între platforme) dar și dezavantaje. Unul dintre
punctele forte ale limbajului VB este acela cӑ se pot realiza într-un timp relativ scurt
aplicații complexe și se pot utiliza relativ simplu sisteme informatice dedicate (cum ar fi
bazele de date- VB poate utiliza toate sistemele de gestiune a bazelor de date cunoscute,
direct sau prin intermediul ODBC).
C # este un limbaj de programare relativ nou și este important cel puțin sub douӑ aspecte :
- este în mod deosebit proiectat și orientat pentru a fi folosit împreuna cu Microsoft .
Net Framework ( o viitoare platformӑ de dezvoltare și execuție a aplicațiilor distribuite);
- este un limbaj bazat pe metodologia modernӑ orientatӑ obiect și când a fost
proiectatӑ Microsoft a învӑțat învӑțat din experiența tuturor celorlalte limbaje similare care
au fost folosite de când a apӑrut programarea orientatӑ pe obiecte.
C# a fost proiectat pentru a genera cod pentru mediu .Net și nu este parte componentӑ a
acestuia .
Utilizarea acestor limbaje este una generalӑ, putând fi folosite la crearea de programe
simple, educaționale dar și la crearea de aplicații complexe. Teoretic oricine (mai mult sau
mai puțin experimentat) poate utiliza VB sau C#, pentru cӑ sunt limbaje de programare
simple.
32
2.4 Modelarea datelor și modelarea prelucrӑrilor
O ramurӑ foarte importantӑ în proiectarea unei aplicații o reprezintӑ modelarea datelor și a
felului în care ele relaționeazӑ între ele. Tehnologia de specialitate a stabilit mai multe
modalitӑți prin care se pot determina structura tipurilor de date cu care se va lucra.
Proiectarea și realizarea unui sistem informatic care presupune prelucrarea automata a
datelor necesitӑ, pe lângӑ activitӑțile legate de formularea problemei,
de analiza acesteia în vederea gӑsirii algoritmului de rezolvare și o altӑ activitate, deosebit
de importantӑ, legatӑ de organizarea datelor, în concordanțӑ atât cu caracteristicile
tehnice ale echipamentelor de calcul, cât și cu cerințele de prelucrare. Acestea trebuie sӑ fie
structurate astfel încât prin codificarea și apoi memorarea lor pe suporți tehnici sӑ permitӑ
prelucrӑrile necesare, stocarea și regӑsirea ulterioarӑ a datelor dupӑ criteriile stabilite.
Legӑturile și relațiile dintre date pot fi stabilite prin Modelarea Conceptualӑ a Datelor,
aceastӑ modalitate fiind reprezentatӑ prin modelul Entitate Asociere (Diagrama Entitate -
Asociere).
Modelarea conceptualӑ a datelor definește reprezentarea modului de organizare a datelor
independent de tehnologiile deprelucrare a acestora și fӑrӑ a acorda o atenție deosebitӑ
calitӑții modelului datelor. Modelul conceptual este prezentat prin intermediul
diagramelor Entitate Asociere și evidențiazӑ reprezentarea logicӑ, detaliatӑ a entitӑților, a
asocierilor și a datelor elementare din cadrul sistemului obiect. Procesul de modelare
logicӑ a datelor se desfӑșoarӑ în paralel cu celelalte activitӑți de proiectare, cum sunt
proiectarea rapoartelor, a machetelor de introducere a datelor, a interfeței.
33
2.5 Diagrama Entitate-Asociere
Baza de date pe care am implementat-o se numește RAUDatabase, pe care am creat-o în
SQL Server 2008 și conține patru tabele: Students, Professors, Subjects și Marks.
Capatele liniilor indicӑ dacӑ relația este one-to-one sau one-to-many. Dacӑ relația are o
cheie într-un capӑt și forma de 8 în celӑlalt capӑt, relația este one-to-many. Dacӑ linia are o
cheie în ambele capete atunci relația este one-to-one.
34
2.6 Stabilirea colecțiilor de date
Cheia primarӑ a tabelului “Students” o reprezintӑ “Student_ID”, numӑrul de înmatriculare al
fiecӑrui student. Câmpul “User_Name” va face legӑtura cu baza de date a user-ilor
(ASPNETDB).
Cheia primarӑ a tabelului “Professors” o constituie “Professor_ID”, reprezentând un cod
unic pentru fiecare profesor. Câmpul “User_Name” va face legӑtura cu baza de date a user-
ilor (ASPNETDB).
Cheia primarӑ a tabelului “Subjects” este “Subject_ID”. “ Professor_ID” este o cheie strӑinӑ și
se referӑ la cheia primarӑ a tabelului “Professors”. Relația pe care am stabilit-o este de One-
to-One, întrucât un profesor nu poate sa predea decât o singurӑ materie, iar materia nu
poate fi predatӑ decât de un singur profesor.
În tabelul “Marks” nu existӑ o cheie primarӑ, dar perechea (Student_ID, Subject_ID) este
considerat un index primar, care are proprietatea de a nu ignora duplicarea perechilor în
momentul în care se modificӑ datele. Din cauza aceasta pot sӑ inlocuiascӑ cu succes o cheie
primarӑ.
Tabelul are urmӑtoarele chei:
- cheie strӑinӑ, definind o relație One-to-Many între “Student_ID” și cheia primarӑ a
tabelului “Students”;
- cheie strӑinӑ, definind o relație One-to-Many între “Subject_ID” și cheia primarӑ a
tabelului “Subjects”.
35
2.7 Estimarea necesarului de resurse și a calendarului de realizare
Dezvoltarea directӑ de sisteme informatice se dovedește o întreprindere riscantӑ dacӑ nu
este precedatӑ de activitӑți care au menirea de a impune o echipӑ, o tehnologie unitarӑ de
analizӑ, design, dezvoltare, implementare, exploatare și mentenanța, aspecte care trebuie
luate în considerare la efectuarea unui audit de sistem informatic. Sistemele informatice
sunt construcții complexe necesitând:
- fonduri mari, uriașe în anumite cazuri;
- echipe complexe și stabile de analiști, designeri, programatori și personal care se ocupӑ de
testare, implementare și mentenanțӑ;
- stabilirea obiectivelor;
- definirea unei strategii de dezvoltare, exploatare și mentenanțӑ;
- achiziționarea de echipamente, instrumente necesare realizӑrii de prelucrӑri, de
conexiuni și dezvoltӑrii fluxurilor cu exteriorul;
- calificarea personalului pentru utilizarea corectӑ și eficientӑ a sistemului.
Pentru implementarea produsului program prezentat anterior, am considerat resursele
enumerate mai jos :
Resurse Hardware : pentru a accelera procesul de proiectare va fi nevoie de douӑ
calculatoare dotate cu procesor de ultimӑ generație, Intel Core 2 Duo sau echivalent, 1GB
Ram și 100 GB HDD. În acest fel procesul va fi unul mai rapid. (Preț : 2 X 1.500 RON = 3.000
RON)
Resurse software : ca și resursӑ software este necesar ca sistem de operare Microsoft
Windows XP/7 (deoarece aplicația va fi proiectatӑ pentru platforma Windows), alӑturi de
Microsoft SQL Server 2008 și de Microsoft Visual Web Developer 2008 Express Edition.
(întrucât cele douӑ programe se pot achiziționa gratuit am considerat doar prețul licenței
de Windows - Preț : 2 X 705 RON (200 $) = 1.410 RON)
36
Resurse umane : un inginer proiectant pentru Baza de Date, pentru punerea la punct a
ieșirilor/intrӑrilor, un programator pentru modulele aplicației, realizarea aplicației ; acesta
va administra întregul sistem lunar, atât cât va fi necesar, pentru eventuale noi
îmbunӑtӑțiri etc. (Preț : 1780 RON (400 euro) + 2670 RON (600 euro) + între 130 – 900
RON (30 – 200 euro) pentru administrare lunara, trimestrialӑ sau punctual)
Resurse financiare : se estimează o sumӑ de proiectare / programare / implementare de
aproximativ 10.000 RON
Calendarul de realizare al sistemului informatic :
Se estimeazӑ un total de aproximativ 64 de zile.
Complexitatea sistemelor informatice și durata, relativ mare, de realizare a acestora pot
genera o serie de probleme care trebuie luate în considerare și soluționate astfel încât, în
final, sӑ se obținӑ rezultatele scontate. Dar în timp ce toate procesele implicate se deruleazӑ
concomitent, obiectivul stabilit inițial, acela de a realiza un sistem informatic pentru
managementul companiei, rӑmâne nemodificat. Sunt situații în care chiar condițiile privind
termenele de predare rӑmân neschimbate. În cazul în care noile cerințe conduc la creșterea
semnificativa a complexitӑții produsului final – sistemul informatic pentru management -
se impune creșterea volumului investiției pentru a suplimenta resursele necesare
37
dezvoltӑrii unui volum mai mare de activitӑți. Creșterea volumului de activitӑți care se
deruleazӑ în paralel impune noi abordӑri la nivelul concepției sistemului informatic.
Realizarea unui sistem informatic are menirea de a sprijini actul decizional la toate
nivelurile. Sporul de informație, calitatea acesteia, promptitudinea cu care se obține sunt
argumente puternice pentru a determina saltul calitativ pe care îl presupune societatea
bazatӑ pe cunoaștere.
Din aceste considerente, implementarea unui sistem informatic trebuie sӑ genereze efecte
pozitive atât pentru utilizatorii sӑi, cât mai ales, pentru beneficiarii direcți ai informației
prelucrate. Pentru a se obține acest deziderat, în procesul de elaborare este necesarӑ
aplicarea tuturor cerințelor privind managementul calitӑții sistemului informatic. De
asemenea, este necesar sӑ se realizeze auditul sistemului informatic pentru a se obține
garanția cӑ acesta realizeazӑ corect și complet prelucrӑrile pentru care a fost proiectat, iar
orice combinație de date, alta decât cea corectӑ și completӑ, este semnalatӑ și nu este
generatoare de efecte colaterale pe termen mediu și lung.
38
Cap. 3. PROIECTAREA DE DETALIU A APLICAȚIEI INFORMATICE
3.1 Definirea obiectivelor aplicației informatice
În acest capitol voi descrie funcționalitatea aplicației din punctul de vedere al user-ului.
Prima pagina a aplicației “RAUGradebook” poate fi vizualizatӑ de oricine acceseazӑ site-ul.
Conține informații menite sӑ ajute user-ul sӑ se logheze: douӑ câmpuri, unul în care se
introduce user-ul persoanei care dorește sӑ se autentifice în aplicație, respectiv parola
acestuia. La început, user-ii au aceeași parolӑ ca user name-ul lor.
În momentul în care un user s-a autentificat cu succes, informația care va fi afișatӑ, va fi în
funcție de rolul pe care l-am atribuit în baza de date (Student, Professor, Administrator). El
va fi direcționat cӑtre o altӑ paginӑ dupӑ cum urmeazӑ:
Pagina Studentului
Dupӑ logarea studentului în aplicație, el este direcționat cӑtre o paginӑ, în care vor fi
explicate modificӑrile pe care le poate efectua, precum și informațiile la care are acces.
Pagina va afișa user name-ul studentului pe toatӑ durata logӑrii lui în aplicație, indiferent
pe ce paginӑ va naviga.
Dacӑ studentul alege sӑ își vizualizeze notele, va fi direcționat cӑtre pagina respectivӑ, unde
va fi afișat un tabel, care va conține numele materiei la care este înscris, profesorul care o
predӑ, respectiv departamentul din care face parte și nota studentului. Ultimul câmp poate
sa fie gol, dacӑ profesorul nu a dorit sa completeze. Exista o altӑ paginӑ, pe care studentul o
poate accesa, și anume pagina cu datele sale personale, date pe care le poate modifica
ulterior.
39
Studentul își poate schimba parola. Pentru ca acest lucru sӑ se poatӑ întâmpla, el va fi
direcționat cӑtre un formular, pe care îl va completa cu parola lui inițialӑ, iar apoi cu noua
sa parolӑ, urmând sӑ o confirme.
Pagina Profesorului
Asemӑnӑtor studentului, în momentul în care un profesor se va loga în aplicație, va fi
direcționat cӑtre o paginӑ în care îi vor fi explicate drepturile sale. User name-ul va rӑmâne
afișat pânӑ în momentul delogӑrii sale.
Profesorul va avea posibilitatea sӑ selecteze un student dintr-o listӑ predefinitӑ, cӑruia îi va
putea modifica sau adӑuga o notӑ la materia predatӑ. Dacӑ se dorește schimbarea parolei,
profesorul va avea și el acces la o nouӑ paginӑ, în care va fi necesar sa completeze cu parola
sa inițialӑ și, ulterior, cu noua sa parolӑ.
Pagina Administratorului
Administratorul va avea mai multe drepturi, spre deosebire de un student sau un profesor,
singurul lucru comun fiind modificarea parolei inițiale.
Administratorul, accesând pagina studenților, are posiblitatea sӑ vizualizeze o listӑ a
studenților care sunt înscriși la Universitatea Româno Americanӑ, precum și grupa din care
fac parte. El are dreptul sӑ adauge sau sӑ șteargӑ un student, dar și sӑ modifice informații
personale.
Spre deosebire de student, administratorul va putea sӑ modifice, pe lângӑ datele sale
precum adresa, numӑr de telefon etc, numele sau anul universitar. În momentul în care va
dori sӑ adauge un student nou, va fi direcționat cӑtre o nouӑ paginӑ. El va fi rugat sӑ
introducӑ informațiile acestuia, câmpurile fiind obligatorii sau opționale. Dupӑ ce va
completa datele respective, un nou student va fi creat, cu toate privilegiile unui student
40
deja existent în baza de date. Aceleași modificӑri le poate aduce și unui profesor, el având la
dispoziție o listӑ actualizatӑ a profesorilor și posibilitatea sӑ adauge sau sӑ șteargӑ
informații personale, precum și sӑ schimbe materia pe care o predӑ la momentul actual,
respectiv departamentul acestuia. El va putea sӑ acceseze și pagina studenților, unde va
avea drept de modificare a notelor acestora.
3.2 Proiectarea logicӑ și fizicӑ a ieșirilor. 3.3 Proiectarea logicӑ și fizicӑ a intrӑrilor
Sistemul informațional al managementului universitar reprezintӑ ansamblul informațiilor,
fluxurilor informaționale, procedurilor și mijloacelor de tratare a informațiilor, menite sӑ
contribuie la realizarea obiectivelor universitӑții. Din definiție rezultӑ cӑ sistemul
informațional al managementului universitar este alcӑtuit din mai multe elemente corelate
între ele: date și informații; fluxuri informaționale; proceduri și mijloace de tratare
(prelucrare) a informațiilor.
Sistemul informațional universitar poate contribui la realizarea obiectivelor
învӑțӑmântului superior numai în condițiile în care sunt îndeplinite funcțiile specifice
spațiului universitar.
Având în vedere importanța acestor funcții specifice sistemului informațional am prezentat
o propunere de modelare care ar putea fi consideratӑ punct de plecare în analiza stadiului
existent al sistemului informațional al universitӑții.
Datele de intrare reprezintӑ documentele primare care circulӑ în cadrul fluxului
informațional al universitӑții. Studenții, furnizorii de date, se înscriu la Universitatea
Româno-Americanӑ prezentându-se cu anumite documente prin care atestӑ competențele
lor în anii anteriori: fișa personalӑ în care sunt afișate datele personale ale fiecӑrui student
în parte, aceasta servindu-i pentru identificare, fișa matricolӑ din care se poate observa
întreaga situație școlarӑ din anii precedenți, rezultatele distribuite pe ani școlari,
rezultatele la examenele susținute pânӑ în momentul actual.
41
În urma unei analize a fișei studentului, datele lui personale sunt salvate într-o bazӑ de
date, el urmând sa fie repartizat într-o serie, respectiv grupӑ în cadrul unei facultӑți alese
de el. Datele stocate în acea bazӑ de date vor putea fi utilizate pe parcursul anilor astfel: ele
vor putea fi integrate în ansamblul de rapoarte, liste, situații cu rezultate pe care le
furnizeazӑ sistemul informațional compartimentelor de conducere: organizarea
examenelor, adeverințele pentru studenți, evidența burselor, a rezultatelor examenelor
ș.a.m.d. Aceste date finale, pe care universitatea le folosește, reprezintӑ datele de ieșire, iar
catalogul pe care îl propun în aceastӑ lucrare va reprezenta, asemeni foii matricole,
respectiv fișei personale a studentului, un mod de colectare a datelor pentru eventualele
statistici din cadrul întregii universitӑți.
3.4 Proiectarea sistemului de codificare a datelor
SQL Server 2008 este o soluție completӑ de management pentru analiza datelor și oferӑ o
platformӑ de Business Intelligence care faciliteazӑ utilizarea aplicațiilor departamentale.
SQL Server este un produs software cunoscut sub denumirea genericӑ de SGBD(sistem de
gestiune a bazelor de date), conceput dupӑ modelul client – server, format din douӑ
entitӑți:
entitatea server care cuprinde baza de date și utilitarele SQL Server;
entitatea client formatӑ din stațiile de lucru, de unde sunt lansate interogӑri, care se
proceseazӑ pe server, iar de aici se returneazӑ numai informațiile cerute.
Baza de date
SQL Server ajutӑ la stocarea, organizarea și extragerea informațiilor din cadrul unui volum
practic infinit de date.
42
Bazele de date create în SQL Server pot fi integrate ușor cu alte tehnologii, cum ar fi C#,
ASP.Net sau chiar și tehnologii non-Microsoft. Ele reprezintӑ un ansamblu structurat de
date legate funcțional între ele. Sunt structuri omogene în care se pӑstreazӑ datele.
Din punct de vedere fizic, baza de date este o colecție de obiecte: tabele, diagrame, view-uri,
proceduri memorate etc.
SGBD (Sistemul de Gestiune a Bazelor de Date) este un ansamblu de programe
care asigurӑ interfața dintre utilizator și baza de date. Prin aceastӑ interfața se
realizeazӑ operațiile de creare, actualizare și consultare (adӑugare, ștergere,
modificare) a bazei de date.
ASP.NET
Lucrul cu baze de date reprezintӑ o componentӑ fundamentalӑ a oricӑrui astfel de mediu de
programare. În acest sens noua tehnologie ASP se bazeazӑ integral pe noua platformӑ .NET,
beneficiind astfel de toate avantajele care derivӑ din aceasta: un set nou de limbaje de
programare care pot fi folosite, un model arhitectural simplificat și în același timp
eficientizat bazat pe noi clase și obiecte, o nouӑ strategie de abordare a aplicațiilor web
care au ca nivel back-end o bazӑ de date, etc.
Mediul ASP.NET oferӑ dezvoltatorilor de aplicații web un set complet de controale pentru
afișarea informației. Complexitatea acestora derivӑ atât din numӑrul impresionant de
atribute pe care le posedӑ cât și din modul în care sunt integrate în platforma .NET. Din
punct de vedere al dificultӑții în utilizare, am putea spune cӑ este relativӑ, în sensul cӑ
variazӑ de la un nivel care nu implicӑ un volum mare de cod pânӑ la configurarea totalӑ a
acestora de cӑtre programator, în cazul aplicațiilor complexe.
Aspectul cel mai important al mediului ASP.NET îl reprezintӑ integrarea conceptelor și
tehnicilor folosite într-un model de programare. Astfel realizarea unei aplicații web, bazatӑ
43
pe formulare web implicӑ folosirea acelorași concepte valabile și în cazul programelor
windows standard.
3.5 Proiectarea bazei de date
Prima bazӑ de date implementatӑ a fost RAUDatabase, creatӑ cu ajutorul SQL Server. Ea
conține patru tabele: Students, Professors, Subjects și Marks.
Crearea tabelei Students
USE [RAUDatabase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Students](
[Student_ID] [numeric](4, 0) IDENTITY(1,1) NOT NULL,
[Last_Name] [varchar](20) NOT NULL,
[Fathers_Initial] [varchar](4) NOT NULL,
[First_Name] [varchar](20) NOT NULL,
[Academic_Year] [numeric](1, 0) NOT NULL,
[Group_Name] [varchar](5) NOT NULL,
[Address] [varchar](max) NULL,
[City] [varchar](20) NULL,
44
[Phone_Number] [varchar](10) NULL,
[User_Name] [varchar](50) NOT NULL,
CONSTRAINT [PK_Students] PRIMARY KEY CLUSTERED
(
[Student_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
Tabelul Students conține o cheie primarӑ, “Student_ID”, acest câmp reprezentând numӑrul
de înmatriculare, și de fiecare datӑ când un student va fi adӑugat, valoarea câmpului
Student_ID se va calcula dupӑ formula MAX(Student_ID)+1.
45
Crearea tabelei Professors
USE [RAUDatabase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Professors](
[Professor_ID] [numeric](4, 0) NOT NULL,
[Last_Name] [varchar](20) NOT NULL,
[First_Name] [varchar](20) NOT NULL,
[Department] [varchar](30) NOT NULL,
[User_Name] [varchar](50) NOT NULL,
CONSTRAINT [PK_Professors] PRIMARY KEY CLUSTERED
(
[Professor_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
Tabelul Professors conține o cheie primarӑ, “Professor_ID”, acest câmp reprezentând un
numӑr unic al fiecӑrui profesor. De fiecare datӑ când un profesor va fi adӑugat, valoarea
46
câmpului Professor_ID nu va lua automat urmӑtoarea valoare, ci va trebui introdusӑ
manual.
Crearea tabelei Subjects
USE [RAUDatabase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Subjects](
[Subject_ID] [varchar](10) NOT NULL,
[Name] [varchar](50) NOT NULL,
[Department] [varchar](30) NOT NULL,
[Group_Name] [varchar](5) NOT NULL,
[Professor_ID] [numeric](4, 0) NOT NULL,
CONSTRAINT [PK_Subjects] PRIMARY KEY CLUSTERED
(
[Subject_ID] ASC
47
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Subjects] WITH CHECK ADD CONSTRAINT [FK_Subjects_Professors_ID] FOREIGN
KEY([Professor_ID])
REFERENCES [dbo].[Professors] ([Professor_ID])
GO
ALTER TABLE [dbo].[Subjects] CHECK CONSTRAINT [FK_Subjects_Professors_ID]
GO
Tabelul Subjects are o cheie primarӑ, “Subject_ID”, și asemeni cheii primare a tabelului
Professors valoarea acesteia va trebui introdusӑ manual de la tastaturӑ. Existӑ și o cheie
strӑinӑ denumitӑ “Professor_ID” care face legӑtura cu tabelul Professors, tabel ce are cheie
primarӑ câmpul “Professor_ID”.
48
Crearea tabelei Marks
USE [RAUDatabase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Marks](
[Student_ID] [numeric](4, 0) NOT NULL,
[Subject_ID] [varchar](10) NOT NULL,
[Mark] [numeric](2, 0) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Marks] WITH CHECK ADD CONSTRAINT [FK_Marks_Students_ID] FOREIGN
KEY([Student_ID])
REFERENCES [dbo].[Students] ([Student_ID])
GO
ALTER TABLE [dbo].[Marks] CHECK CONSTRAINT [FK_Marks_Students_ID]
GO
ALTER TABLE [dbo].[Marks] WITH CHECK ADD CONSTRAINT [FK_Marks_Subjects_ID] FOREIGN
KEY([Subject_ID])
49
REFERENCES [dbo].[Subjects] ([Subject_ID])
GO
ALTER TABLE [dbo].[Marks] CHECK CONSTRAINT [FK_Marks_Subjects_ID]
GO
În acest tabel nu existӑ o cheie primarӑ, dar perechea (Student_ID; Subject_ID) poate fi
consideratӑ un index unic și înlocuiește cu succes o cheie primarӑ.
Tabelul conține urmӑtoarele chei:
- cheie strӑinӑ, ce definește o relație One-To-Many între “Student_ID” și cheia primarӑ
a tabelului Students, “Student_ID”;
- cheie strӑinӑ, ce definește o relație One-To-Many între “Subject_ID” și cheia primarӑ
a tabelului Subjects, “Subject_ID”;
3.6 Proiectarea interfeței aplicației
Multe aplicații distribuite salveazӑ, prezintӑ și proceseazӑ date și informații utilizând baze
de date. În acest sens .NET Framework are propria tehnologie de acces la date, numitӑ
ADO.NET, ce constӑ într-un set de clase managed prin intermediul cӑrora aplicațiile .NET se
pot conecta la bazele de date sau surse de date (baze de date aflate pe servere sau fișiere
locale), pot executa comenzi (în regim normal sau tranzacțional) sau gestiona și procesa
date în mod deconectat (local în aplicație).
50
ADO.NET folosește o arhitecturӑ structuratӑ pe mai multe nivele pentru a integra diferitele
tipuri de baze și surse de date. În acest scop se folosește modelul furnizorului de date (sau
data provider).
Un data provider reprezintӑ un set clase ADO.NET ce permit accesul la tip de baza de date,
conectarea la baza de date, execuția de comenzi SQL și a prelua rezulatele comenzilor. Cu
alte cuvinte, un provider oferӑ o interfațӑ între sursa de date și aplicație.
În .NET Framework sunt oferiți urmӑtorii provideri:
• SQL Server
• OLE DB
• Oracle
• ODBC
Modelul simplificat al arhitecturii ADO.NET poate fi urmӑrit în figura urmӑtoare:
51
În momentul în care vrem sӑ utilizӑm o anumitӑ sursӑ de date pentru o aplicație este
important sa utilizӑm provider-ul potrivit. În primul rând trebuie gӑsit un provider nativ
.NET care sӑ suporte baza de date; Oracle și SQL Server sunt deja suportate de .NET
Framework.
Provider-ii SQL includ SqlMembershipProvider, SqlRoleProvider, SqlProfileProvider,
SqlSessionStateStore, SqlWebEventProvider și SqlPersonalizationProvider. Fiecare din ei
stocheazӑ o schemӑ predefinitӑ. Funcția Aspnet_regsql.exe care vine odatӑ cu ASP.NET
creazӑ o bazӑ de date cu o schemӑ compatibilӑ. Aceastӑ bazӑ de date numitӑ la început
aspnetdb, face referire la baza de date provider.
Pentru aplicația mea “RAU Gradebook” am folosit aspnetdb pentru crearea rolurilor
Student, Professor, Secretary, dar și pentru:
· Crearea și ștergerea user-ilor cu un rol specific;
· Afișarea user name-ului și statusul de logare;
· Schimbarea parolei user-ului.
Conexiunea dintre baza de date și RAUDatabase este realizatӑ prin user name-uri (câmpul
User_Name) cu rolurile de Student și Professor, care vor avea aceeași valoare din câmpul
User-Name din tabelele Students și Professors.
52
Diagrama care reprezintӑ principalele tabele din ASPNETDB folosite în aplicație este:
CREAREA ROLURILOR: Student, Professor, Administrator
Pentru a reduce munca din cauza implementӑrii conturilor, versiunea ASP.NET 1.0 include
suport pentru șablonurile de tip autentificare, precum și capacitatea de a specifica reguli de
autorizare din pagina web.config. Formularele de tip logare sunt eficiente întrucât
stocheazӑ un cookie în browser-ul user-ului, reținând statusul celui ce s-a logat pe durata
navigӑrii pe alte pagini. Clasa FormsAuthentication oferӑ metode pentru crearea unor astfel
de cookie-uri pentru logarea în aplicație, dar și ștergerea acestora, pentru delogare.
Șabloanele pentru autentificare țintesc spre o abordare standardizatӑ în realizarea celor
douӑ misiuni pentru implementarea conturilor. Programatorului, însӑ, îi rӑmâne în
continuare sarcina de a dispune în serie informațiile conturilor, de a crea pagina de logare
și de scriere a codului folosind clasa FormsAuthentication, de a crea pagina de delogare din
53
aplicație, o nouӑ paginӑ pentru crearea unui cont nou, pentru administrarea conturilor
ș.a.m.d.
Pentru crearea de roluri în aplicația mea “RAU Gradebook”, am utilizat și Web
Administration Tool : Menu : Website -> ASP.NET Configuration sau
http://localhost:52865/asp.netwebadminfiles/security/security.aspx
Am selectat tipul de autentificare:
Dupӑ ce am selectat opțiunea pentru folosirea internetului, urmӑtoarea linie a fost
adӑugatӑ în pagina web.config:
<authentication mode="Forms" />
54
SQLMembershipProvider stocheazӑ informații ale conturilor în douӑ tabele:
aspnet_Users – conține o înregistrare pentru fiecare user în parte, stocând esențialul;
coloana UserId identificӑ în mod unic fiecare user din sistem și este înregistrat ca un
identificator unic (GUID).
aspnet_Membership – are o coloanӑ numitӑ UserId care leagӑ fiecare înregistrare cu o
înregistrare anume din aspnet_Users . Tabela aspnet_Membership cuprinde datele
esențiale asociate cu fiecare user: email, parolӑ, o întrebare și un rӑspuns de
securitare etc.
Dupӑ validarea rolurilor (codul <roleManager enabled="true" /> a fost adӑugat în pagina
web.config), am creat rolurile pentru student, profesor și administrator.
55
DESGIN-UL APLICAȚIEI
Pentru crearea interfeței aplicației am împӑrțit paginile web în patru pӑrți: Default,
Student, Professor, Administrator, ele fiind astfel structurate pentru o mai bunӑ organizare.
Pagina principalӑ conține date despre studenți, profesori și user name-urile lor. Pagina are
ca scop autentificarea user-ilor.
Student conține:
· Student’s Page.aspx : informeazӑ studentul cu privire la drepturile sale;
· Student’s Marks.aspx : afișeazӑ notele studentului logat;
· Student’s Info.aspx : afișeazӑ datele personale ale studentului și permite modificarea
anumitor câmpuri;
· Student’s Change Password.aspx : pagina destinatӑ schimbӑrii parolei;
Professor conține :
· Professor’s Page.aspx : informeazӑ profesorul în legӑtura cu drepturile sale;
· Professor’s Marks.aspx: permite adӑugarea sau modificarea notelor studenților care
urmeazӑ un curs predat de el;
· My Marks.aspx: permite vizualizarea studenților, inclusiv a notelor lor, din anul,
respectiv grupele care urmeazӑ un curs predat de el, profesorul putând sӑ exporte
informațiile și într-un Excel;
· Professor’s Change Password.aspx : pagina destinatӑ schimbӑrii parolei;
Adminstrator conține :
· Administrator’s Page.aspx : informeazӑ administratorul despre drepturile sale;
· Administrator Students.aspx : afișeazӑ datele studenților, care fac parte dintr-o grupӑ
anumitӑ și redirecționeazӑ administratorul cӑtre urmӑtoarele pagini:
56
- Add Student.aspx : permite user-ului sӑ adauge un nou student în catalog și se creeazӑ
un user cu rolul de student;
- Edit Student.aspx : permite modificarea datelor personale ale studenților;
- Delete Student.aspx : permite ștergerea unui student și odatӑ cu acesta și user-ul cu rolul
de student;
- Year II III.aspx : permite transferul studenților într-un an superior.
· Administrator Professors.aspx : afișeazӑ datele profesorilor structurați pe
departamente și redirecționeazӑ administratorul cӑtre urmӑtoarele pagini:
- Add Professor.aspx : permite user-ului sӑ adauge un nou profesor în catalog cu rolul de
profesor;
- Edit Professor.aspx : permite modificarea datelor personale ale profesorilor;
- Delete Professor.aspx : permite ștergerea unui profesor și odatӑ cu acesta și user-ul cu
rolul de profesor;
· Administrator Subjects.aspx : afișeazӑ date privind materiile studiate, ele fiind
structurate pe grupe și redirecționeazӑ administratorul cӑtre urmӑtoarele pagini:
- Add Subject.aspx : permite user-ului sӑ adauge o materie în catalog și o atribuie
studenților care fac parte dintr-un anumit grup;
- Edit Subject.aspx : permite user-ului sӑ editeze materia selectatӑ;
- Delete Subject.aspx : permite user-ului sӑ șteargӑ o materie din catalog ;
· Administrator Change Password.aspx : pagina destinatӑ schimbӑrii parolei;
57
Cap. 4. PREZENTAREA PRODUSULUI SOFTWARE
The Home Page – Default.aspx
O sӑ încep prin a descrie cum am denumit pagina și ce am folosit pentru a o crea.
<title>Home Page</title>
Toate informațiile sunt conținute în mai multe “div”-uri (<div></div>)
Am inserat:
- logo-ul facultӑții,
<img alt="" src="sigla.jpg" style="width: 87px; height: 92px; text-align:
center;" />
- o imagine a facultӑții
<img alt="" src="facultatea.jpg" style="width: 478px; height: 230px; float:
left;" />
58
Și câteva stiluri pentru fiecare titlu și linii orizontale pentru un efect mai bun.
<hr style="background-color: #4B788B; border: thin solid #4B788B" />
Am creat un control pentru logare pentru care am definit și un stil:
User-ul este rugat sa își Parola este ascunsӑ și user-ul are
introducӑ user name-ul și parola. posibilitatea sa fie reținut la logare.
Câmpurile sunt obligatorii. Dacӑ user name-ul sau parola sunt greșite,
un mesaj de eroare va fi afișat.
Codul din spatele controlului este:
<asp:Login ID="Login1" runat="server" BackColor="#F7F6F3"
BorderColor="#E6E2D8"
BorderPadding="4" BorderStyle="Solid" BorderWidth="1px"
Font-Names="Verdana" Font-Size="0.8em" ForeColor="#000000"
style="text-align: left; margin-left: 0px; font-family: Cambria;
font-size: medium;"
Width="242px" Height="131px" onloggedin="Login1_LoggedIn">
59
<TextBoxStyle Font-Size="1em" Height="20px" Width="120px" Font-
Names="Verdana"/>
<LoginButtonStyle BackColor="#FFFBFF" BorderColor="#CCCCCC"
BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana" Font-Size="1em"
ForeColor="#284775" />
<InstructionTextStyle Font-Italic="True" ForeColor="Black" />
<TitleTextStyle BackColor="#4B788B" Font-Bold="True" Font-
Size="0.9em" ForeColor="White" />
</asp:Login>
Dacӑ datele introduse sunt corecte, înseamnӑ cӑ user-ul s-a autentificat cu succes și
proprietatea onloggedin="Login1_LoggedIn" va apela urmӑtoarea funcție:
protected void Login1_LoggedIn(object sender, EventArgs e)
{
If (System.Web.Security.Roles.IsUserInRole(Login1.UserName,
"Student"))
{
Response.Redirect(string.Format("~/Student/Student's
Page.aspx?STUD={0}", Login1.UserName));
}
if (System.Web.Security.Roles.IsUserInRole(Login1.UserName,
"Professor"))
{
Response.Redirect(string.Format("~/Professor/Professor's
Page.aspx?PROF={0}", Login1.UserName));
}
if (System.Web.Security.Roles.IsUserInRole(Login1.UserName,
"Secretary"))
{
Response.Redirect(string.Format("~/Administrator/Administrator's
Page.aspx?SECR={0}", Login1.UserName));
}
}
60
Aceastӑ procedurӑ verificӑ rolul atribuit user-ului pentru a îl direcționa cӑtre pagina
respectivӑ.
Pagina conține un SQLDataSource care este asociat cu o listӑ, din care user-ul are
posibilitatea sӑ aleagӑ dintr-o listӑ de grupe una anume:
<asp:DropDownList ID="DropDownList1" runat="server" Width="52px"
DataSourceID="GroupDataSource" DatâtextField="Group_Name"
DataValueField="Group_Name" style="font-family: Verdana; font-size: small">
</asp:DropDownList>
<asp:SqlDataSource ID="GroupDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:RAUdatabaseConnectionString %>"
SelectCommand="SELECT DISTINCT [Group_Name] FROM [Students]">
</asp:SqlDataSource>
Am adӑugat un control de tip “Repeater” cu douӑ coloane, numele complet și user-ul
studentului/profesorului, depinzând de alegerea utilizatorului. În cadrul tag-ului
<HeaderTemplate> am definit numele celor douӑ coloane (Name și User Name). În cadrul
tag-ului <ItemTemplate> am concatenat douӑ câmpuri, Last_Name și First_Name, pentru cӑ
utilizatorul este interesat sӑ vadӑ numele complet decât separat pe douӑ coloane. Tag-ul
<AlternatingItemTemplate> conține aceleași informații ca tag-ul <ItemTemplate> doar
cӑ este caracterizat printr-un stil diferit, stil aplicat din douӑ în douӑ rânduri.
<asp:Repeater ID="StudentsRepeater" runat="server">
<HeaderTemplate>
<table class="style1" width = "450px">
<tr>
<th style="background-color:#4B788B">
<asp:Label ID="Label1" Text="Name" runat="server"></asp:Label>
</th>
<th style="background-color:#4B788B">
<asp:Label ID="Label2" Text="User Name" runat="server"></asp:Label>
</th>
</tr>
61
</HeaderTemplate>
<AlternatingItemTemplate>
<tr>
<td style="background-color:#EFF3FB" class="syle4" >
<%# DataBinder.Eval(Container.DataItem,"Last_Name") %>
<%# DataBinder.Eval(Container.DataItem,"First_Name") %> 
</td>
<td style="background-color:#EFF3FB" class="syle4" >
<%# DataBinder.Eval(Container.DataItem,"User_Name") %>
</td>
</tr>
</AlternatingItemTemplate>
<ItemTemplate>
<tr>
<td class="syle4">
<%# DataBinder.Eval(Container.DataItem,"Last_Name") %>
<%# DataBinder.Eval(Container.DataItem,"First_Name") %> 
</td>
<td class="syle4">
<%# DataBinder.Eval(Container.DataItem, "User_Name")%>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
Din moment ce tabelul pe care l-am creat îmi permite paginarea, am inclus și douӑ butoane
pentru navigare, înainte și înapoi, și un control de tip “Label” pentru a permite user-ului sӑ
vizualizeze numӑrul paginii pe care navigheazӑ.
<td align="center" bgcolor="#4B788B" style="font-weight: bold;
color:#000000" class = "syle4">
<asp:button id="cmdPrev" runat="server" text=" << "
62
onclick="cmdPrev_Click"></asp:button>
<asp:label id="lblCurrentPage" runat="server"
ForeColor="White"></asp:label>
<asp:button id="cmdNext" runat="server" text=" >> "
onclick="cmdNext_Click"></asp:button>
</td>
Funcțiile apelate sunt:
public void cmdPrev_Click(object sender, System.EventArgs e)
{
CurrentPage -= 1;
bindData(t);
}
public void cmdNext_Click(object sender, System.EventArgs e)
{
CurrentPage += 1;
bindData(t);
}
Cele douӑ butoane, “Display Students” și “Display Professors” vor apela funcțiile
“protected void Button_DisplayStudents_Click” și “protected void
Button_DisplayProfessors_Click”.
În primul rând am definit o variabilӑ staticӑ t, care are rolul de a reține opțiunea user-ului
de a alege vizualizarea studenților sau a profesorilor. I se va atribui valoarea 1 dacӑ user-ul
alege sӑ afișeze studenții și 2 pentru afișarea profesorilor.
protected void Button_DisplayStudents_Click(object sender, EventArgs e)
{
t = 1;
CurrentPage = 0;
bindData(t);
}
protected void Button_DisplayProfessors_Click(object sender, EventArgs e)
{
t = 2;
63
CurrentPage = 0;
bindData(t);
}
CurrentPage reprezintӑ indexul paginii care este afișatӑ de fiecare datӑ, iar bindData(t) va
popula și actualiza controlul de tip “Repeater”.
public int CurrentPage
{
get
{
// look for current page în ViewState
object o = this.ViewState["_CurrentPage"];
if (o == null)
return 0; // default to showing the first page
else
return (int)o;
}
set
{
this.ViewState["_CurrentPage"] = value;
}
}
protected void bindData(int t)
{
string val_Group = DropDownList1.SelectedValue;
String strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
SqlConnection dbConn = new SqlConnection(strConnection);
Datâtable dtTable = new Datâtable();
dbConn.Open();
string strSQL;
if(t==1) strSQL = "SELECT * FROM Students WHERE Group_Name=@Group";
else strSQL = "SELECT * FROM Professors";
SqlCommand command = new SqlCommand(strSQL, dbConn);
64
command.Parameters.Add("@Group", SqlDbType.VarChar).Value =
val_Group;
SqlDataAdapter da = new SqlDataAdapter(command);
da.Fill(dtTable);
PagedDataSource pds = new PagedDataSource();
pds.DataSource = dtTable.DefaultView;
pds.AllowPaging = true;
pds.PageSize = 5;
StudentsRepeater.DataSource = pds;
pds.CurrentPageIndex = CurrentPage;
lblCurrentPage.Text = "Page: " + (CurrentPage + 1).ToString() + " of
" + pds.PageCount.ToString();
// Disable Prev or Next buttons if necessary
cmdPrev.Enabled = !pds.IsFirstPage;
cmdNext.Enabled = !pds.IsLastPage;
StudentsRepeater.DataBind();
dbConn.Close();
}
Funcția “protected void bindData(int t)” face urmӑtoarele:
-preia valoarea selectatӑ din “DropDownList1.SelectedValue” și o atribuie variabilei
“val_Group”;
-stabilește conexiunea cu baza de date “RAUDatabase”;
-definește un obiect de tip “Datatable” care va stoca informațiile extrase din baza de date;
-depinzând de variabila “t” se va defini o comanda SQL care va selecta fie studenții dintr-o
grupӑ anume, fie profesorii;
-va popula tabelul definit mai sus cu informațiile rezultate din comanda SQL;
-definește un obiect de tip “PagedDataSource” și îl populeazӑ cu date din tabel;
-populeazӑ controlul de tip “Repeater” cu date din obiectul de tip “PagedDataSource”;
-închide conexiunea stabilitӑ cu “RAUDatabase”;
65
Paginile studentului
Înainte de a crea paginile, am creat fișierul “web.config” în care am permis accesul
studenților, dar l-am restricționat profesorilor și administratorului.
<configuration>
<system.web>
<authorization>
<allow roles="Student" />
<deny roles="Professor" />
<deny roles="Secretary" />
</authorization>
</system.web>
</configuration>
În momentul în care studentul se logheazӑ pagina “Student’s Page” ,
66
care conține un control de tip “Label”,
<asp:Label ID="Label1" runat="server" style="font-family: 'Engravers MT';
color: #003366; font-weight: 700; font-size: small;" Text="Label"
Width="242px"></asp:Label>
în care va fi afișat numele studentului care s-a logat (funcția de mai jos este apelatӑ în
momentul în care se încarcӑ pagina),
protected void Page_Load(object sender, EventArgs e)
{
if (User.Identity.IsAuthenticâted)
Label1.Text = User.Identity.Name;
else
Label1.Text = "No user identity available.";
}
un “Header”, care conține o imagine și un meniu de navigare, link-uri care vor direcționa
studentul cӑtre restul paginilor (acest control numit “Student's_Header.ascx” va fi folosit pe
toate paginile studentului) și o prezentare a ceea ce i-i se permite studentului.
Pe pagina “Student's Marks.aspx” studentul poate sa își vizualizeze notele la fiecare materie
predatӑ în anul în care a studiat/studiazӑ, inclusiv numele profesorului care predӑ materia
respectivӑ.
67
În controlul de tip “Gridview” existӑ patru coloane, fiecare coloanӑ va fi populatӑ cu
informații din baza de date. Legӑtura se face între urmӑtoarele tabele, iar codul generat
este urmӑtorul:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333"
GridLines="None" style="font-family: Verdana; font-size: small"
68
Width="744px" AllowSorting="True">
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<Columns>
<asp:BoundField DataField="Student's Name'" HeaderText="Student's
Name"
SortExpression="Student's Name'" ReadOnly="True"
Visible="False" >
</asp:BoundField>
<asp:BoundField DataField="Academic_Year" HeaderText="Year"
SortExpression="Academic_Year" />
<asp:BoundField DataField="Name" HeaderText="Name"
SortExpression="Name" >
</asp:BoundField>
<asp:BoundField DataField="Mark" HeaderText="Mark"
SortExpression="Mark" />
<asp:BoundField DataField="Professor" HeaderText="Professor"
ReadOnly="True"
SortExpression="Professor" >
</asp:BoundField>
<asp:BoundField DataField="User_Name" HeaderText="User_Name"
SortExpression="User_Name" Visible="False" />
</Columns>
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"
/>
<PagerStyle BackColor="#284775" ForeColor="White"
HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True"
ForeColor="#333333" />
<HeaderStyle BackColor="#4B788B" Font-Bold="True" ForeColor="White"
/>
<EditRowStyle BackColor="#999999" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:RAUdatabaseConnectionString %>"
69
SelectCommand="SELECT Marks.Mark, Students.Last_Name + ' ' +
Students.Fathers_Initial + ' ' + Students.First_Name AS [Student's
Name'], Subjects.Name, Professors.Last_Name + ' ' +
Professors.First_Name AS Professor, Students.User_Name,
Subjects.Academic_Year FROM Marks INNER JOIN Students ON
Marks.Student_ID = Students.Student_ID INNER JOIN Subjects ON
Marks.Subject_ID = Subjects.Subject_ID INNER JOIN Professors ON
Subjects.Professor_ID = Professors.Professor_ID WHERE
(Students.User_Name = @User_Name)">
<SelectParameters>
<asp:ControlParameter ControlID="UserLabel" Name="User_Name"
PropertyName="Text" />
</SelectParameters>
</asp:SqlDataSource>
Pe pagina “Student's Info.aspx” studentul poate sa își vizualizeze informațiile și posibilitatea
sӑ modifice datele lui personale, anume adresa, localitatea și numӑrul de telefon.
În momentul în care pagina se încarcӑ, datele studentului logat vor fi afișate într-un tabel
pentru care am creat controale de tip “Label” și “Textbox”, apelându-se funcția urmӑtoare:
70
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (User.Identity.IsAuthenticâted)
UserLabel2.Text = User.Identity.Name;
else
UserLabel2.Text = "No user identity available.";
string user_name = UserLabel2.Text.ToString();
string strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
SqlConnection dbConn = new SqlConnection(strConnection);
dbConn.Open();
string strSQL = "SELECT * FROM Students WHERE User_Name = @user";
SqlCommand command = new SqlCommand();
command.CommandText = strSQL;
command.Connection = dbConn;
command.Parameters.Add(new SqlParameter("@user", user_name));
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
LastName.Text = reader.GetString(1);
FathersInitial.Text = reader.GetString(2);
FirstName.Text = reader.GetString(3);
AcademicYear.Text = reader.GetDecimal(4).ToString();
Group.Text = reader.GetDecimal(5).ToString();
if (reader.IsDBNull(6))
Address.Text = "";
else Address.Text = reader.GetString(6);
if (reader.IsDBNull(7))
Locality.Text = "";
else Locality.Text = reader.GetString(7);
71
if (reader.IsDBNull(8))
PhoneNumber.Text = "";
else PhoneNumber.Text = reader.GetString(8);
}
}
reader.Close();
}
protected void UpdateButton_Click(object sender, EventArgs e)
{
insertNewData();
Response.Redirect("~/Student/Student's Page.aspx");
}
public void insertNewData()
{
string user_name = UserLabel2.Text.ToString();
string newAddress = Address.Text.ToString();
string newLocality = Locality.Text.ToString();
string newPhoneNumber = PhoneNumber.Text.ToString();
string strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
SqlConnection dbConn = new SqlConnection(strConnection);
dbConn.Open();
SqlCommand command = new SqlCommand();
string strSQL = "UPDATE Students set Address=@address,
Locality=@locality, Phone_Number = @phoneno WHERE User_Name = @user";
command.CommandText = strSQL;
command.Parameters.Add(new SqlParameter("@address", newAddress));
command.Parameters.Add(new SqlParameter("@locality", newLocality));
command.Parameters.Add(new SqlParameter("@phoneno",
newPhoneNumber));
command.Parameters.Add(new SqlParameter("@user", user_name));
command.Connection = dbConn;
command.ExecuteNonQuery();
72
dbConn.Close();
}
Funcția de mai jos direcționeazӑ studentul cӑtre pagina inițialӑ, nesalvându-se datele din
câmpurile modificate.
protected void CancelButton_Click(object sender, EventArgs e)
{
Response.Redirect("~/Student/Student's Info.aspx");
}
Pe pagina “Student's Change Password.aspx” studentul are dreptul sӑ își schimbe parola.
User-ul este obligat sӑ completeze toate câmpurile, iar parola trebuie sӑ fie de minim 7
caractere și sӑ conținӑ cel puțin un caracter alpha numeric.
<asp:ChangePassword ID="ChangePassword1" runat="server" BackColor="#EFF3FB"
BorderColor="#B5C7DE" BorderPadding="4" BorderStyle="Solid"
BorderWidth="1px"
Font-Names="Verdana" Font-Size="0.8em"
style="font-size: large; font-family: Calibri"
ContinueDestinationPageUrl="~/Default.aspx"
DisplayUserName="False"
Height="156px" Width="600px">
73
<CancelButtonStyle BackColor="White" BorderColor="#507CD1"
BorderStyle="Solid"
BorderWidth="1px" Font-Names="Verdana" Font-Size="0.8em"
ForeColor="#284E98" />
<PasswordHintStyle Font-Italic="True" ForeColor="#507CD1" />
<ContinueButtonStyle BackColor="White" BorderColor="#507CD1"
BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana" Font-
Size="0.8em"
ForeColor="#284E98" />
<ChangePasswordButtonStyle BackColor="White" BorderColor="#507CD1"
BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana" Font-
Size="0.8em"
ForeColor="#284E98" />
<TitleTextStyle BackColor="#507CD1" Font-Bold="True" Font-
Size="0.9em"
ForeColor="White" />
<TextBoxStyle Font-Size="0.8em" />
<InstructionTextStyle Font-Italic="True" ForeColor="Black" />
</asp:ChangePassword>
Paginile profesorului
Înainte de a crea paginile, am creat fișierul “web.config” în care am permis accesul
profesorilor, dar l-am restricționat studenților și administratorului.
<configuration>
<system.web>
<authorization>
<allow roles="Professor" />
<deny roles="Student" />
<deny roles="Secretary" />
</authorization>
</system.web>
</configuration>
74
Pagina “Professor's Page.aspx” conține asemeni paginii studenților un control de tip “Label”
în care îmi va fi afișat numele profesorului logat,
<asp:Label ID="Label1" runat="server" style="font-family: 'Engravers MT';
font-size: small; font-weight: 700; color: #003366"
Text="Label"></asp:Label>
un “Header” numit “Professor's_Header.ascx”, care conține o imagine și un meniu de
navigare, link-uri care vor direcționa studentul cӑtre restul paginilor (acest header va fi
folosit pe toate paginile profesorului) și o prezentare a ceea ce i-i se permite profesorului.
Pagina “Professor's Marks.aspx” conține date legate de materiile predate de profesor logat
precum și grupele la care acesta predӑ, dar și studenții care participӑ la cursurile lui și care
aparțin de o anumitӑ grupӑ.
75
Am creat douӑ controale de tip “DropDownList”, unul care îmi va afișa materiile și altul
grupele.
<asp:DropDownList ID="DropDownList1" runat="server"
DataSourceID="SubjectsDataSource" DatâtextField="Name"
DataValueField="Name" Height="22px" style="margin-left: 0px; "
Width="300px" CssClass="style13" AutoPostBack="True">
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server"
DataSourceID="GroupsDataSource" DatâtextField="Group_Name"
DataValueField="Group_Name" CssClass="style13">
</asp:DropDownList>
Am asociat urmӑtoarele surse cu controalele de mai sus:
<asp:SqlDataSource ID="SubjectsDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:RAUdatabaseConnectionString %>"
DeleteCommand="DELETE FROM [Subjects] WHERE [Subject_ID] = @Subject_ID"
InsertCommand="INSERT INTO [Subjects] ([Subject_ID], [Name], [Department],
[Academic_Year], [Professor_ID]) VALUES (@Subject_ID, @Name, @Department,
@Academic_Year, @Professor_ID)" ProviderName="<%$
ConnectionStrings:RAUdatabaseConnectionString.ProviderName %>"
SelectCommand="SELECT DISTINCT Name FROM Subjects WHERE Professor_ID =
(SELECT Professor_ID FROM Professors WHERE User_Name = @user_name)"
76
UpdateCommand="UPDATE [Subjects] SET [Name] = @Name, [Department] =
@Department, [Academic_Year] = @Academic_Year, [Professor_ID] = @Professor_ID
WHERE [Subject_ID] = @Subject_ID">
<SelectParameters>
<asp:ControlParameter ControlID="UserLabel" Name="User_Name"
PropertyName="Text" />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name="Subject_ID" Type="String" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="Subject_ID" Type="String" />
<asp:Parameter Name="Name" Type="String" />
<asp:Parameter Name="Department" Type="String" />
<asp:Parameter Name="Academic_Year" Type="Decimal" />
<asp:Parameter Name="Professor_ID" Type="Decimal" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="Name" Type="String" />
<asp:Parameter Name="Department" Type="String" />
<asp:Parameter Name="Academic_Year" Type="Decimal" />
<asp:Parameter Name="Professor_ID" Type="Decimal" />
<asp:Parameter Name="Subject_ID" Type="String" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="GroupsDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:RAUdatabaseConnectionString %>"
SelectCommand="SELECT DISTINCT Students.Group_Name FROM Subjects INNER JOIN
Professors ON Subjects.Professor_ID = Professors.Professor_ID INNER JOIN
Students ON Subjects.Academic_Year = Students.Academic_Year AND
Subjects.Academic_Year = Students.Academic_Year WHERE (Subjects.Name =
@Name)">
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList1" Name="Name"
PropertyName="SelectedValue" />
</SelectParameters>
77
</asp:SqlDataSource>
În tabelul de tip “Gridview” vor fi afișați studenții care au în programӑ materia selectatӑ și
care aparțin de grupa selectatӑ. Altfel nu se va afișa nimic.
<asp:GridView ID="MarksGridView" runat="server" AutoGenerateColumns="False"
Width="680px" OnRowCancelingEdit="MarksGridView_RowCancelingEdit"
OnRowEditing="MarksGridView_RowEditing"
OnRowUpdating="MarksGridView_RowUpdating" CellPadding="4"
ForeColor="#333333" GridLines="None" HorizontalAlign="Center"
AllowPaging="True" OnPageIndexChanging="MarksGridView_SelectedIndexChanging"
AllowSorting="True" OnSorting="MarksGridView_Sorting" style="font-family:
Verdana; font-size: small">
<RowStyle BackColor="#EFF3FB" />
<Columns>
<asp:BoundField DataField="Student_ID" HeaderText="ID"
ReadOnly="True" />
<asp:TemplateField HeaderText="Student's Name">
<EditItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%#
Bind("Last_Name")%>'></asp:Label>
<asp:Label ID="Label2" runat="server" Text='<%#
Bind("First_Name")%>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%#
Bind("Last_Name")%>'></asp:Label>
<asp:Label ID="Label2" runat="server" Text='<%#
Bind("First_Name")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Group_Name" HeaderText="Group"
ReadOnly="True"/>
<asp:TemplateField HeaderText="Mark">
<EditItemTemplate>
<asp:TextBox ID="TextBox_newMark" runat="server"
Width="50px"></asp:TextBox>
78
<asp:RangeValidator ID="RangeValidator1" runat="server"
ControlToValidate="TextBox_newMark" ErrorMessage="Invalid Mark"
MaximumValue="10" MinimumValue="1" Type="Integer"> </asp:RangeValidator>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server"
Text='<%#Bind("Mark")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="True" />
</Columns>
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White"
/>
<PagerStyle BackColor="#4B788B" ForeColor="White"
HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True"
ForeColor="#333333" />
<HeaderStyle BackColor="#4B788B" Font-Bold="True" ForeColor="White"
/>
<EditRowStyle BackColor="#4B788B" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
Controlul de tip “Gridview” va fi populat în momentul în care va fi apӑsat butonul “Display
Data” .
protected void Button2_Click(object sender, EventArgs e)
{
bindData();
}
public void bindData()
{
string user_name = Membership.GetUser().UserName.ToString();
string value_Subject = DropDownList1.SelectedValue;
string value_Group = DropDownList2.SelectedValue;
79
String strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
SqlConnection dbConn = new SqlConnection(strConnection);
Datâtable dtTable = new Datâtable();
dbConn.Open();
string strSQL = @"SELECT Students.Student_ID, Students.Last_Name,
Students.Fathers_Initial, Students.First_Name, Students.Academic_Year,
Students.Group_Name, Marks.Mark, Subjects.Subject_ID FROM Subjects INNER
JOIN Marks ON Subjects.Subject_ID = Marks.Subject_ID INNER JOIN
Professors ON Subjects.Professor_ID = Professors.Professor_ID INNER JOIN
Students ON Marks.Student_ID = Students.Student_ID WHERE
(Subjects.Professor_ID = (SELECT Professor_ID FROM Professors AS
Professors_1 WHERE (User_Name = @User_Name))) AND (Subjects.Name = @Name)
AND (Students.Group_Name = @Group) ORDER BY Students.Last_Name";
SqlCommand command = new SqlCommand(strSQL, dbConn);
command.Parameters.Add("@Name", SqlDbType.VarChar).Value =
value_Subject;
command.Parameters.Add("@User_Name", SqlDbType.VarChar).Value =
user_name;
command.Parameters.Add("@Group", SqlDbType.VarChar).Value =
value_Group;
SqlDataAdapter da = new SqlDataAdapter(command);
da.Fill(dtTable);
MarksGridView.DataSource = dtTable;
MarksGridView.DataBind();
dbConn.Close();
}
80
Pentru editarea rândurilor tabelului “MarksGridView” vor fi apelate urmӑtoarele funcții în
momentul în care vom apӑsa butonul “Edit”.
protected void MarksGridView_RowEditing(object sender, GridViewEditEventArgs
e)
{
// establish the row to be eddited
MarksGridView.EditIndex = e.NewEditIndex;
bindData();
}
protected void MarksGridView_RowCancelingEdit(object sender,
GridViewCancelEditEventArgs e)
{
//return to the displaying of data
MarksGridView.EditIndex = -1;
bindData();
}
protected void MarksGridView_RowUpdating(object sender,
GridViewUpdateEventArgs e)
{
int ID =
Convert.ToInt32(MarksGridView.Rows[e.RowIndex].Cells[0].Text);
string subject = DropDownList1.SelectedValue;
int val_mark =
Convert.ToInt32(((TextBox)MarksGridView.Rows[e.RowIndex].Cells[3].FindControl
("TextBox_newMark")).Text);
81
string user_name = Membership.GetUser().UserName.ToString();
String strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
SqlConnection dbConn = new SqlConnection(strConnection);
dbConn.Open();
string strSQL = @"UPDATE Marks SET Mark=@mark WHERE
Subject_ID=(SELECT Subject_ID FROM Subjects WHERE Name=@subject AND
Professor_ID=(SELECT Professor_ID FROM Professors WHERE User_Name=@user))AND
Student_ID=@id";
SqlCommand command = new SqlCommand();
command.CommandText = strSQL;
command.Parameters.Add("@id", SqlDbType.Int).Value = ID;
command.Parameters.Add("@subject", SqlDbType.Char).Value = subject;
command.Parameters.Add("@mark", SqlDbType.Int).Value = val_mark;
command.Parameters.Add("@user", SqlDbType.Char).Value = user_name;
command.Connection = dbConn;
command.ExecuteNonQuery();
dbConn.Close();
//we return to the displaying of data
MarksGridView.EditIndex = -1;
bindData();
}
Pagina “My Marks.aspx” va afișa toate notele studenților care participӑ la cursurile lui și
care aparțin de o anumitӑ grupӑ/an. El va putea sӑ exporte apoi aceste date în Excel.
82
Am creat douӑ controale care îmi vor prelua anii și grupele la care profesorul predӑ:
Controlul pentru afișarea anilor:
<asp:DropDownList ID="DropDownList2" runat="server"
DataSourceID="YearsDataSource" DatâtextField="Academic_Year"
DataValueField="Academic_Year" style="font-family: Verdana"
AutoPostBack="True" AppendDataBoundItems="True">
<asp:ListItem></asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="YearsDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:RAUdatabaseConnectionString %>"
SelectCommand="SELECT DISTINCT Subjects.Academic_Year FROM Professors INNER
JOIN Subjects ON Professors.Professor_ID = Subjects.Professor_ID INNER JOIN
Students ON Subjects.Academic_Year = Students.Academic_Year WHERE
(Professors.User_Name = @User_Name)">
<SelectParameters>
<asp:ControlParameter ControlID="Label1" Name="User_Name"
PropertyName="Text" />
</SelectParameters>
</asp:SqlDataSource>
Și controlul pentru afișarea grupelor.
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
DataSourceID="GroupsDataSource" DatâtextField="Group_Name"
DataValueField="Group_Name" style="font-family: Verdana">
</asp:DropDownList>
<asp:SqlDataSource ID="GroupsDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:RAUdatabaseConnectionString %>"
SelectCommand="SELECT DISTINCT Students.Group_Name, Students.Academic_Year
FROM Subjects INNER JOIN Professors ON Subjects.Professor_ID =
Professors.Professor_ID INNER JOIN Students ON Subjects.Academic_Year =
Students.Academic_Year WHERE (Professors.User_Name = @User_Name) AND
(Students.Academic_Year = @Academic_Year) ORDER BY Students.Group_Name">
<SelectParameters>
83
<asp:ControlParameter ControlID="Label1" Name="User_Name"
PropertyName="Text" />
<asp:ControlParameter ControlID="DropDownList2"
Name="Academic_Year"
PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
Pentru exportarea în Excel se va apela urmӑtoarea funcție,
protected void BtnExportGrid_Click(object sender, EventArgs args)
{
// pass the grid that for exporting ...
GridViewExportUtil.Export("MyMarks.xls", this.gv);
}
funcție care la rândul ei va folosi urmӑtorul cod:
public class GridViewExportUtil
{
/// <summary>
///
/// </summary>
84
/// <param name="fileName"></param>
/// <param name="gv"></param>
public static void Export(string fileName, GridView gv)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("content-disposition",
string.Format("attachment; filename={0}", fileName));
HttpContext.Current.Response.ContentType = "applicâtion/ms-excel";
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
// Create a form to contain the grid
Table table = new Table();
// add the header row to the table
if (gv.HeaderRow != null)
{
GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
table.Rows.Add(gv.HeaderRow);
}
// add each of the data rows to the table
foreach (GridViewRow row în gv.Rows)
{
GridViewExportUtil.PrepareControlForExport(row);
table.Rows.Add(row);
}
// add the footer row to the table
if (gv.FooterRow != null)
{
GridViewExportUtil.PrepareControlForExport(gv.FooterRow);
table.Rows.Add(gv.FooterRow);
}
85
// render the table into the htmlwriter
table.RenderControl(htw);
// render the htmlwriter into the response
HttpContext.Current.Response.Write(sw.ToString());
HttpContext.Current.Response.End();
}
}
}
/// <summary>
/// Replace any of the contained controls with literals
/// </summary>
/// <param name="control"></param>
private static void PrepareControlForExport(Control control)
{
for (int i = 0; i < control.Controls.Count; i++)
{
Control current = control.Controls[i];
if (current is LinkButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as
LinkButton).Text));
}
else if (current is ImageButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as
ImageButton).AlternateText));
}
else if (current is HyperLink)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as
HyperLink).Text));
}
86
else if (current is DropDownList)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as
DropDownList).SelectedItem.Text));
}
else if (current is CheckBox)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as
CheckBox).Checked ? "True" : "False"));
}
if (current.HasControls())
{
GridViewExportUtil.PrepareControlForExport(current);
}
}
}
}
87
Pentru schimbarea parolei, profesorul are acceeași opțiune ca a studentului. El trebuie doar
sӑ acceseze pagina “Professor's Change Password.aspx”. Va fi rugat sa introducӑ parola
actualӑ, noua parolӑ pe care o dorește și confirmarea acesteia.
Paginile Administratorului
Am început prin configurarea paginii “web.config” permițând accesul numai
administratorului.
<configuration>
<system.web>
<authorization>
<allow roles="Secretary" />
<deny roles="Professor" />
<deny roles="Student" />
</authorization>
</system.web>
</configuration>
Prima pagina care se încarcӑ este “Administrator's Page.aspx”, paginӑ care conține un
control de tip “Label”,
<asp:Label ID="Label1" runat="server" Text="Label" style="font-family:
'Engravers MT'; font-size: small; font-weight: 700; color:
#003366"></asp:Label>
un “Header” , care conține o imagine și un meniu de navigare (header-ul numit
“Administrator's_Header.ascx” va fi folosit pe toate paginile pe care are voie sӑ le acceseze
administratorul) și o descriere a drepturilor lui.
88
Pagina dedicatӑ studenților, “Administrator Students.aspx”, îi permite administratorului sӑ
vizualizeze studenții dintr-o grupӑ selectatӑ, sӑ le modifice datele personale, sӑ adauge și sӑ
șteargӑ un student din baza de date.
Am folosit un “DropdownList” pentru a putea selecta grupa
<asp:DropDownList ID="DropDownList1" runat="server" Font-Names="Cambria"
89
DataSourceID="SqlDataSource2" DatâtextField="Group_Name"
DataValueField="Group_Name" style="font-size: medium">
</asp:DropDownList>
și un control de tip “Repeater” numit “Repeater1” care conține patru coloane definite în tag-
ul <HeaderTemplate> : Student’s Name, Delete Student, Edit Student și Transfer to Year
II/III.
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
<HeaderTemplate>
<table width = "700px">
<tr>
<th style="background-color:#4B788B; color:White" >
<asp:Label ID="Label4" Text="Student's Name"
runat="server"></asp:Label>
</th>
<th style="background-color:#4B788B; color:White" >
<asp:Label ID="Label5" Text="Delete Student"
runat="server"></asp:Label>
</th>
<th style="background-color:#4B788B; color:White" >
<asp:Label ID="Label3" Text="Edit Student"
runat="server"></asp:Label>
</th>
<th style="background-color:#4B788B; color:White" >
<asp:Label ID="Label6" Text="Transfer to Year II/III"
runat="server"></asp:Label>
</th>
</tr>
</HeaderTemplate>
<AlternatingItemTemplate>
<tr align = "left">
<td style="background-color:#EFF3FB">
<%# DataBinder.Eval(Container.DataItem,"Last_Name") %>
90
<%# DataBinder.Eval(Container.DataItem,"Fathers_Initial") %>
<%# DataBinder.Eval(Container.DataItem,"First_Name") %> 
</td>
<td style="background-color:#EFF3FB" align ="center" >
<a href='Delete Student.aspx?id=<%# Eval("Student_ID")%>&user=<%#
Eval("User_Name") %>' class = "style9">Delete</a>
</td>
<td style="background-color:#EFF3FB" align ="center" >
<a href='Edit Student.aspx?id=<%# Eval("Student_ID")
%>&group=<%#Eval("Group_Name") %>' class = "style9">Edit</a>
</td>
<td style="background-color:#EFF3FB" align ="center" >
<a href='Year II III.aspx?id=<%# Eval("Student_ID")
%>&group=<%#Eval("Group_Name") %>' class = "style9">Transfer to Year
II/III</a>
</td>
</tr>
</AlternatingItemTemplate>
<ItemTemplate>
<tr align = "left">
<td>
<%# DataBinder.Eval(Container.DataItem,"Last_Name") %>
<%# DataBinder.Eval(Container.DataItem,"Fathers_Initial") %>
<%# DataBinder.Eval(Container.DataItem,"First_Name") %> 
</td>
<td align ="center" >
<a href='Delete Student.aspx?id=<%# Eval("Student_ID")%>&user=<%#
Eval("User_Name") %>' class = "style9">Delete</a>
</td>
<td align ="center" >
<a href='Edit Student.aspx?id=<%# Eval("Student_ID")
%>&group=<%#Eval("Group_Name") %>' class = "style9">Edit</a>
</td>
<td align ="center" >
91
<a href='Year II III.aspx?id=<%# Eval("Student_ID")
%>&group=<%#Eval("Group_Name") %>' class = "style9">Transfer to Year
II/III</a>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
Pentru prima coloanӑ “Student’s Name” am concatenat primele coloanele ale tabelului
“Students”, Last_Name, Fathers_Initial și First_Name.
Pentru a doua coloanӑ am adӑugat urmӑtoarele în tag-ul <ItemTemplate>:
<a href='Delete Student.aspx?id=<%# Eval("Student_ID")%>&user=<%#
Eval("User_Name") %>'>Delete</a>
care va adӑuga textul “Delete” în coloanӑ, mӑ va direcționa cӑtre pagina “Delete
Student.aspx” și va transmite urmӑtorii parametrii:
- id : Student_ID al studentului afișat pe rândul respectiv (id=<%# Eval("Student_ID")%>);
- user : User_Name-ul al studentului afișat pe rândul respectiv (user=<%#
Eval("User_Name") %> ) ;
Pentru a treia coloanӑ am adӑugat în tag-ul <ItemTemplate>:
<a href='Edit Student.aspx?id=<%# Eval("Student_ID")
%>&group=<%#Eval("Group_Name") %>'>Edit</a>
92
care va adӑuga textul “Edit” în coloanӑ, mӑ va direcționa cӑtre pagina “Edit Student.aspx” și
va transmite urmӑtorii parametrii:
- id : Student_ID al studentului afișat pe rândul respectiv (id=<%# Eval("Student_ID")%>);
- user : Group_Name al studentului afișat pe rândul respectiv (user=<%#
Eval("Group_Name") %> ) ;
Pentru a patra coloanӑ am adӑugat în tag-ul <ItemTemplate>:
<a href='Year II III.aspx?id=<%# Eval("Student_ID")
%>&group=<%#Eval("Group_Name") %>' class = "style9">Transfer to Year
II/III</a>
care va adӑuga textul “Transfer to Year II/III” în coloanӑ și mӑ va direcționa cӑtre pagina
“Year II III.aspx” și va transmite urmӑtorii parametrii:
- id : Student_ID al studentului afișat pe rândul respectiv (id=<%# Eval("Student_ID")%>);
- user : Group_Name al studentului afișat pe rândul respectiv (user=<%#
Eval("Group_Name") %> ) ;
Controlul de tip “Repeater” va fi populat în momentul în care butonul “Display Students” va
fi apӑsat.
Prin apӑsarea butonului “Edit” vom fi direcționați cӑtre pagina “Edit Student.aspx”
populatӑ cu datele studentului. Butonul “Edit”, acum pe pagina de editare, modificӑ
datele personale ale studentului:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
int idStudent = Convert.ToInt32(Request.QueryString["id"]);
93
if (idStudent != 0)
{
String strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
SqlConnection dbConn = new SqlConnection(strConnection);
dbConn.Open();
string strSQL = "SELECT * FROM Students WHERE Student_ID=" +
idStudent;
SqlCommand command = new SqlCommand();
command.CommandText = strSQL;
command.Connection = dbConn;
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
LastNameTextbox.Text = reader.GetString(1);
FathersInitialTextbox.Text = reader.GetString(2);
FirstNameTextbox.Text = reader.GetString(3);
AcademicYearTextbox.Text =
reader.GetDecimal(4).ToString();
if (reader.IsDBNull(6))
AddressTextbox.Text = "";
else
AddressTextbox.Text = reader.GetString(6);
if (reader.IsDBNull(7))
LocalityTextbox.Text = "";
else
LocalityTextbox.Text = reader.GetString(7);
if (reader.IsDBNull(8))
PhoneNumberTextbox.Text = "";
else
PhoneNumberTextbox.Text = reader.GetString(8);
}
}
reader.Close();
94
}
}
}
protected void editStudent_Click(object sender, EventArgs e)
{
int idStudent = Convert.ToInt32(Request.QueryString["id"]);
string new_LastName = LastNameTextbox.Text;
string new_FathersInitial = FathersInitialTextbox.Text;
string new_FirstName = FirstNameTextbox.Text;
int new_AcademicYear = Convert.ToInt32(AcademicYearTextbox.Text);
string new_Address = AddressTextbox.Text;
string new_Locality = LocalityTextbox.Text;
string new_PhoneNumber = PhoneNumberTextbox.Text;
String strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
SqlConnection dbConn = new SqlConnection(strConnection);
dbConn.Open();
SqlCommand command = new SqlCommand();
string strSQL = @"UPDATE Students SET Last_Name=@last_name,
Fathers_Initial=@Fathers_Initial, First_Name=@first_name,
Academic_Year=@academic_year, Address=@address, Locality=@locality,
Phone_Number=@phone_number WHERE Student_ID=@idStudent";
command.CommandText = strSQL;
command.Parameters.Add(new SqlParameter("@last_name",new_LastName));
command.Parameters.Add(new
SqlParameter("@Fathers_Initial",new_FathersInitial));
command.Parameters.Add(new
SqlParameter("@first_name",new_FirstName));
command.Parameters.Add(new
SqlParameter("@academic_year",new_AcademicYear));
command.Parameters.Add(new SqlParameter("@address",new_Address));
command.Parameters.Add(new SqlParameter("@locality",new_Locality));
command.Parameters.Add(new
SqlParameter("@phone_number",new_PhoneNumber));
command.Parameters.Add(new SqlParameter("@idStudent",idStudent));
command.Connection = dbConn;
95
command.ExecuteNonQuery();
dbConn.Close();
Response.Redirect("~/Administrator/Administrator Students.aspx");
}
protected void Cancel_Click(object sender, EventArgs e)
{
Response.Redirect("~/Administrator/Administrator Students.aspx");
}
Pentru a ne întoarce pe pagina inițialӑ trebuie sӑ apӑsӑm butonul “Cancel”.
Butonul “Delete” încarcӑ pagina “Delete Student” și urmӑtorul cod face posibilӑ
ștergerea unui student:
protected void Page_Load(object sender, EventArgs e)
{
int studentID = Convert.ToInt32(Request.QueryString["id"]);
string studentUser = Request.QueryString["user"];
SqlConnection dbConn;
String strConnection;
strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
dbConn = new SqlConnection(strConnection);
dbConn.Open();
String strSQL1 = "DELETE FROM Students WHERE Student_ID=" +
studentID;
SqlCommand command1 = new SqlCommand(strSQL1, dbConn);
String strSQL2 = "DELETE FROM Marks WHERE Student_ID=" + studentID;
SqlCommand command2 = new SqlCommand(strSQL2, dbConn);
command2.ExecuteNonQuery();
command1.ExecuteNonQuery();
dbConn.Close();
Membership.DeleteUser(studentUser);
Response.Redirect("~/Administrator/Administrator Students.aspx");
}
96
Butonul “Add Student” ne permite sӑ adӑugӑm un nou student în baza de date. Astfel,
vom fi direcționați cӑtre pagina “Add Student.aspx”, se vor completa toate datele
noului student și pentru a se finaliza procesul va trebui apӑsat butonul “Add
Student”. Codul din spatele acțiunii este urmӑtorul:
protected void AddStudent_Click(object sender, EventArgs e)
{
MembershipCreateStatus createStatus;
MembershipUser newUser = Membership.CreateUser( UserNameTextbox.Text,
PasswordTextbox.Text, EmailTextbox.Text, SecurityQTextbox.Text,
SecurityATextbox.Text, true, out createStatus);
switch (createStatus)
{
case MembershipCreateStatus.Success:
Roles.AddUserToRole(UserNameTextbox.Text, "Student");
LabelCreateAccountResults.Text = "Account successfuly created !";
InsertStudent();
break;
case MembershipCreateStatus.DuplicateUserName:
LabelCreateAccountResults.Text = "The username în not
available.";
break;
case MembershipCreateStatus.DuplicateEmail:
LabelCreateAccountResults.Text = "E-mail already exists.";
break;
case MembershipCreateStatus.InvalidEmail:
LabelCreateAccountResults.Text = "Invalid e-mail address.";
break;
case MembershipCreateStatus.InvalidAnswer:
LabelCreateAccountResults.Text = "Invalid Security Question
answer.";
break;
case MembershipCreateStatus.InvalidPassword:
LabelCreateAccountResults.Text = "Invalid Password. (Password
must have at least 7 characters and at least one nonalphanumeric)";
97
break;
default:
LabelCreateAccountResults.Text = "Unknown Error. The account has NOT
been created";
break;
}
}
public void InsertStudent()
{
string new_LastName = LastNameTextbox.Text;
string new_FathersInitial = FathersInitialTextbox.Text;
string new_FirstName = FirstNameTextbox.Text;
int new_AcademicYear = Convert.ToInt32(AcademicYearTextbox.Text);
int new_GroupName = Convert.ToInt32(GroupTextbox.Text);
string new_Address = AddressTextbox.Text;
string new_Locality = LocalityTextbox.Text;
string new_PhoneNumber = PhoneNumberTextbox.Text;
string new_UserName = UserNameTextbox.Text;
String strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
SqlConnection dbConn = new SqlConnection(strConnection);
dbConn.Open();
string strSQL = @"INSERT INTO Students(Last_Name, Fathers_Initial,
First_Name, Academic_Year, Group_Name, Address, Locality, Phone_Number,
User_Name) VALUES (@Last_Name, @Fathers_Initial, @First_Name, @Academic_Year,
@Group_Name, @Address, @Locality, @Phone_Number, @User_Name)";
SqlCommand command = new SqlCommand();
command.CommandText = strSQL;
command.Connection = dbConn;
command.Parameters.Add(new SqlParameter("@Last_Name", new_LastName));
command.Parameters.Add(new SqlParameter("@Fathers_Initial",
new_FathersInitial));
command.Parameters.Add(new SqlParameter("@First_Name",
new_FirstName));
98
command.Parameters.Add(new SqlParameter("@Academic_Year",
new_AcademicYear));
command.Parameters.Add(new SqlParameter("@Group_Name",
new_GroupName));
command.Parameters.Add(new SqlParameter("@Address", new_Address));
command.Parameters.Add(new SqlParameter("@Locality", new_Locality));
command.Parameters.Add(new SqlParameter("@Phone_Number",
new_PhoneNumber));
command.Parameters.Add(new SqlParameter("@User_Name", new_UserName));
command.ExecuteNonQuery();
string strSQL2 = @"INSERT INTO Marks (Subject_ID, Student_ID)
SELECT Subject_ID,Student_ID FROM Subjects,Students WHERE
Student_ID=(SELECT Student_ID FROM Students WHERE User_Name=@user) AND
Subjects.Academic_Year=Students.Academic_Year";
SqlCommand command2 = new SqlCommand();
command2.CommandText = strSQL2;
command2.Connection = dbConn;
command2.Parameters.Add("@user", SqlDbType.VarChar).Value =
new_UserName;
command2.ExecuteNonQuery();
dbConn.Close();
LastNameTextbox.Text = "";
FathersInitialTextbox.Text = "";
FirstNameTextbox.Text = "";
AcademicYearTextbox.Text = "";
GroupTextbox.Text = "";
AddressTextbox.Text = "";
LocalityTextbox.Text = "";
PhoneNumberTextbox.Text = "";
UserNameTextbox.Text = "";
PasswordTextbox.Text = "";
EmailTextbox.Text = "";
SecurityQTextbox.Text = "";
SecurityATextbox.Text = "";
99
Response.Redirect("~/Administrator/Administrator Students.aspx"); ;
}
protected void Cancel_Click(object sender, EventArgs e)
{
Response.Redirect("~/Administrator/Administrator Students.aspx");
}
Butonul “Transfer to Year II/III” ne permite transferarea studenților într-un an
superior. Astfel, vom fi direcționați cӑtre pagina “Year II III.aspx”, se vor completa
câmpurile necesare transferului și pentru a se finaliza procesul, va trebui apӑsat
butonul “Transfer”. Codul din spatele acțiunii este urmӑtorul:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
int idStudent = Convert.ToInt32(Request.QueryString["id"]);
if (idStudent != 0)
{
String strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
SqlConnection dbConn = new SqlConnection(strConnection);
dbConn.Open();
string strSQL = "SELECT * FROM Students WHERE Student_ID=" +
idStudent;
SqlCommand command = new SqlCommand();
command.CommandText = strSQL;
command.Connection = dbConn;
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
LastNameTextbox.Text = reader.GetString(1);
FathersInitialTextbox.Text = reader.GetString(2);
100
FirstNameTextbox.Text = reader.GetString(3);
AcademicYearTextbox.Text =
reader.GetDecimal(4).ToString();
GroupTextbox.Text = reader.GetDecimal(5).ToString();
IDTextbox.Text = reader.GetDecimal(0).ToString();
}
}
reader.Close();
}
}
}
protected void TransferButton_Click(object sender, EventArgs e)
{
string idStudent = IDTextbox.Text;
string LastName = LastNameTextbox.Text;
string FathersInitial = FathersInitialTextbox.Text;
string FirstName = FirstNameTextbox.Text;
int new_AcademicYear = Convert.ToInt32(AcademicYearTextbox.Text);
int new_Group = Convert.ToInt32(GroupTextbox.Text);
String strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
SqlConnection dbConn = new SqlConnection(strConnection);
dbConn.Open();
SqlCommand command = new SqlCommand();
string strSQL = @"UPDATE Students SET Academic_Year=@academic_year,
Group_Name=@group_name WHERE Student_ID=@idStudent";
command.CommandText = strSQL;
command.Parameters.Add(new SqlParameter("@academic_year",
new_AcademicYear));
command.Parameters.Add(new SqlParameter("@group_name", new_Group));
command.Parameters.Add(new SqlParameter("@idStudent", idStudent));
command.Connection = dbConn;
101
command.ExecuteNonQuery();
string strSQL2 = @"INSERT INTO Marks (Subject_ID, Student_ID)
SELECT Subject_ID,Student_ID FROM Subjects,Students WHERE
Student_ID= @idStudent AND
Subjects.Academic_Year=Students.Academic_Year";
SqlCommand command2 = new SqlCommand();
command2.CommandText = strSQL2;
command2.Connection = dbConn;
command2.Parameters.Add("@idStudent", SqlDbType.VarChar).Value =
idStudent;
command2.ExecuteNonQuery();
dbConn.Close();
LastNameTextbox.Text = "";
FathersInitialTextbox.Text = "";
FirstNameTextbox.Text = "";
AcademicYearTextbox.Text = "";
GroupTextbox.Text = "";
IDTextbox.Text = "";
Response.Redirect("~/Administrator/Administrator Students.aspx");
}
Prin apӑsarea butonului “Cancel” vom fi direcționați cӑtre pagina inițialӑ.
protected void Cancel_Click(object sender, EventArgs e)
{
Response.Redirect("~/Administrator/Administrator Students.aspx");
}
Pagina dedicatӑ profesorilor “Administrator Professors.aspx” îi permite administratorului sӑ
vizualizeze toți profesorii dintr-un departament anume, sӑ le modifice datele personale, sӑ
adauge și sӑ șteargӑ un profesor din baza de date.
102
Am folosit un control de tip “Repeater” numit “Repeater1” care conține trei coloane definite
în tag-ul <HeaderTemplate> : Professor’s Name, Delete Professor și Edit Professor.
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource2">
<HeaderTemplate>
<table width = 600px>
<tr>
<th style="background-color:#4B788B" >
<asp:Label ID="Label1" Text="Professor's Name"
runat="server"></asp:Label>
</th>
<th style="background-color:#4B788B">
103
<asp:Label ID="Label2" Text="Delete Professor"
runat="server"></asp:Label>
</th>
<th style="background-color:#4B788B" >
<asp:Label ID="Label3" Text="Edit Professor"
runat="server"></asp:Label>
</th>
</tr>
</HeaderTemplate>
<AlternatingItemTemplate>
<tr>
<td style="background-color:#EFF3FB">
<%# DataBinder.Eval(Container.DataItem,"Last_Name") %>
<%# DataBinder.Eval(Container.DataItem,"First_Name") %> 
</td>
<td style="background-color:#EFF3FB">
<a href='Delete Professor.aspx?id=<%# Eval("Professor_ID")%>&user=<%#
Eval("User_Name") %>'>Delete</a>
</td>
<td style="background-color:#EFF3FB">
<a href='Edit Professor.aspx?id=<%# Eval("Professor_ID")%>'>Edit</a>
</td>
</tr>
</AlternatingItemTemplate>
<ItemTemplate>
<tr>
<td>
<%# DataBinder.Eval(Container.DataItem,"Last_Name") %>
<%# DataBinder.Eval(Container.DataItem,"First_Name") %> 
</td>
<td>
<a href='Delete Professor.aspx?id=<%# Eval("Professor_ID")%>&user=<%#
Eval("User_Name") %>'>Delete</a>
</td>
<td>
<a href='Edit Professor.aspx?id=<%# Eval("Professor_ID")%>'>Edit</a>
104
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
Pentru prima coloanӑ “Professor’s Name” am concatenat primele coloanele ale tabelului
“Professors”, Last_Name și First_Name.
Pentru a doua coloanӑ am adӑugat urmӑtoarele în tag-ul <ItemTemplate>:
<a href='Delete Professor.aspx?id=<%# Eval("Professor_ID")%>&user=<%#
Eval("User_Name") %>'>Delete</a>
care va adӑuga textul “Delete” în coloanӑ, mӑ va direcționa cӑtre pagina “Delete
Professor.aspx” și va transmite urmӑtorii parametrii:
- id : Professor_ID al profesorului afișat pe rândul respectiv (id=<%#
Eval("Professor_ID")%> );
- user : User_Name al profesorului afișat pe rândul respectiv (user=<%# Eval("User_Name")
%>) ;
Pentru a treia coloanӑ am adӑugat în tag-ul <ItemTemplate>:
<a href='Edit Professor.aspx?id=<%# Eval("Professor_ID")%>'>Edit</a>
care va adӑuga textul “Edit” în coloanӑ, mӑ va direcționa cӑtre pagina “Edit Professor.aspx”
și va transmite urmӑtorii parametrii:
105
- id : Student Professor_ID al profesorului afișat pe rândul respectiv (id=<%#
Eval("Professor_ID")%> );
Prin apӑsarea butonului “Edit” vom fi direcționați cӑtre pagina “Edit Professor.aspx”
populatӑ cu datele profesorului. Butonul “Edit”, acum pe pagina de editare, modificӑ
datele personale ale acestuia:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
int idProf = Convert.ToInt32(Request.QueryString["id"]);
if (idProf != 0)
{
String strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
SqlConnection dbConn = new SqlConnection(strConnection);
dbConn.Open();
string strSQL = "SELECT * FROM Professors WHERE
Professor_ID=" + idProf;
SqlCommand command = new SqlCommand();
command.CommandText = strSQL;
command.Connection = dbConn;
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
LastNameTextbox.Text = reader.GetString(1);
FirstNameTextbox.Text = reader.GetString(2);
DepartmentTextbox.Text = reader.GetString(3);
}
}
106
reader.Close();
}
}
}
protected void EditButton_Click(object sender, EventArgs e)
{
{
insertNewData();
Response.Redirect("~/Administrator/Administrator
Professors.aspx");
}
}
public void insertNewData()
{
int idProf = Convert.ToInt32(Request.QueryString["id"]);
string new_LastName = LastNameTextbox.Text;
string new_FirstName = FirstNameTextbox.Text;
string new_Department = DepartmentTextbox.Text;
String strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
SqlConnection dbConn = new SqlConnection(strConnection);
dbConn.Open();
string strSQL = "UPDATE Professors SET
Last_Name=@last_name,First_Name=@first_name, Department=@department WHERE
Professor_ID=@idProf";
SqlCommand command = new SqlCommand();
command.CommandText = strSQL;
command.Parameters.Add(new SqlParameter("@last_name", new_LastName));
command.Parameters.Add(new SqlParameter("@first_name",
new_FirstName));
command.Parameters.Add(new SqlParameter("@department",
new_Department));
command.Parameters.Add(new SqlParameter("@idProf", idProf));
command.Connection = dbConn;
107
command.ExecuteNonQuery();
dbConn.Close();
}
protected void CancelButton_Click(object sender, EventArgs e)
{
Response.Redirect("~/Administrator/Administrator Professors.aspx");
}
Pentru a ne întoarce pe pagina inițialӑ trebuie sa apӑsӑm butonul “Cancel”.
Butonul “Delete” încarcӑ pagina “Delete Professor” și urmӑtorul cod face posibilӑ
ștergerea unui profesor:
protected void Page_Load(object sender, EventArgs e)
{
int profID = Convert.ToInt32(Request.QueryString["id"]);
string profUser = Request.QueryString["user"];
SqlConnection dbConn;
String strConnection;
strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
dbConn = new SqlConnection(strConnection);
dbConn.Open();
String strSQL1 = "DELETE FROM Professors WHERE Professor_ID=" +
profID;
SqlCommand command1 = new SqlCommand(strSQL1, dbConn);
String strSQL2 = "DELETE FROM Subjects WHERE Professor_ID=" + profID;
SqlCommand command2 = new SqlCommand(strSQL2, dbConn);
String strSQL3 = "DELETE FROM Marks WHERE Subject_ID=(SELECT
Subject_ID FROM Subjects WHERE Professor_ID=" + profID + ")";
SqlCommand command3 = new SqlCommand(strSQL3, dbConn);
command3.ExecuteNonQuery();
command2.ExecuteNonQuery();
command1.ExecuteNonQuery();
108
dbConn.Close();
Membership.DeleteUser(profUser);
Response.Redirect("~/Administrator/Administrator Professors.aspx");
}
Butonul “Add Professor” ne permite sa adӑugӑm un nou profesor în baza de date.
Astfel, vom fi direcționați cӑtre pagina “Add Professor.aspx”, se vor completa toate
datele noului profesor și pentru a se finaliza procesul, va trebui apӑsat butonul “Add
Professor”. Codul din spatele acțiunii este urmӑtorul:
protected void AddButton_Click(object sender, EventArgs e)
{
MembershipCreateStatus createStatus;
MembershipUser newUser = Membership.CreateUser(UNTextbox.Text,
PTextbox.Text, EMTextbox.Text, SQTextbox.Text, SATextbox.Text, true, out
createStatus);
switch (createStatus)
{
case MembershipCreateStatus.Success:
Roles.AddUserToRole(UNTextbox.Text, "Professor");
LabelCreateAccountResults.Text = "Account successfuly created
!";
InsertProfessor();
break;
case MembershipCreateStatus.DuplicâteUserName:
LabelCreateAccountResults.Text = "The username is not available.";
break;
case MembershipCreateStatus.DuplicâteEmail:
LabelCreateAccountResults.Text = "E-mail already exists.";
break;
case MembershipCreateStatus.InvalidEmail:
LabelCreateAccountResults.Text = "Invalid e-mail address.";
break;
case MembershipCreateStatus.InvalidAnswer:
LabelCreateAccountResults.Text = "Invalid Security Question answer.";
break;
109
case MembershipCreateStatus.InvalidPassword:
LabelCreateAccountResults.Text = "Invalid Password.(Password must have at
least 7 characters and at least one nonalphanumeric)";
break;
default:
LabelCreateAccountResults.Text = "Unknown Error. The account
has NOT been created";
break;
}
}
public void InsertProfessor()
{
string new_LastName = LNTextbox.Text;
string new_FirstName = FNTextbox.Text;
string new_Department = DTextbox.Text;
string new_UserName = UNTextbox.Text;
String strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
SqlConnection dbConn = new SqlConnection(strConnection);
dbConn.Open();
string strSQL = @"INSERT INTO Professors(Last_Name, First_Name,
Department, User_Name) VALUES (@Last_Name, @First_Name,
@Department, @User_Name)";
SqlCommand command = new SqlCommand();
command.CommandText = strSQL;
command.Connection = dbConn;
command.Parameters.Add(new SqlParameter("@Last_Name", new_LastName));
command.Parameters.Add(new SqlParameter("@First_Name",
new_FirstName));
command.Parameters.Add(new SqlParameter("@Department",
new_Department));
command.Parameters.Add(new SqlParameter("@User_Name", new_UserName));
command.ExecuteNonQuery();
dbConn.Close();
LNTextbox.Text = "";
FNTextbox.Text = "";
110
DTextbox.Text = "";
UNTextbox.Text = "";
PTextbox.Text = "";
EMTextbox.Text = "";
SQTextbox.Text = "";
SATextbox.Text = "";
Response.Redirect("~/Administrator/Administrator Professors.aspx");
}
Prin apӑsarea butonului “Cancel” vom fi direcționați cӑtre pagina inițialӑ.
protected void CancelButton_Click(object sender, EventArgs e)
{
Response.Redirect("~/Administrator/Administrator Professors.aspx");
}
Pagina dedicatӑ profesorilor “Administrator Subjects.aspx” îi permite administratorului sӑ
vizualizeze toate materiile predate dintr-un an, sӑ adauge și sӑ șteargӑ o materie din baza
de date.
Am folosit un control de tip “Repeater” care conține cinci coloane: Subject’s Name,
Professor, Department, Delete Subject și Edit Subject.
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
111
<table width = "900px">
<tr>
<th style="background-color:#4B788B" class="style9">
<asp:Label ID="Label1" Text="Subject's Name"
runat="server"></asp:Label>
</th>
<th style="background-color:#4B788B" class="style9">
<asp:Label ID="Label2" Text="Professor" runat="server"></asp:Label>
</th>
<th style="background-color:#4B788B" class="style9">
<asp:Label ID="Label4" Text="Department" runat="server"></asp:Label>
</th>
<th style="background-color:#4B788B" class="style9">
<asp:Label ID="Label5" Text="Delete Subject"
runat="server"></asp:Label>
</th>
<th style="background-color:#4B788B" class="style9">
<asp:Label ID="Label3" Text="Edit Subject"
runat="server"></asp:Label>
</th>
</tr>
</HeaderTemplate>
<AlternatingItemTemplate>
<tr>
<td align = "left" style="background-color:#EFF3FB" class =
"style10">
<%# DataBinder.Eval(Container.DataItem,"Name") %>
</td>
<td align = "left" style="background-color:#EFF3FB" class =
"style10">
<%# DataBinder.Eval(Container.DataItem,"Prof_Last_Name") %>
<%# DataBinder.Eval(Container.DataItem,"Prof_First_Name") %>
</td>
<td align = "left" style="background-color:#EFF3FB" class =
"style10">
<%# DataBinder.Eval(Container.DataItem,"Department") %>
112
</td>
<td style="background-color:#EFF3FB">
<a href='DeleteSubject.aspx?id=<%# Eval("Subject_ID")%>' class =
"style10">Delete</a>
</td>
<td style="background-color:#EFF3FB">
<a href='EditSubject.aspx?id=<%# Eval("Subject_ID") %>' class =
"style10">Edit</a>
</td>
</tr>
</AlternatingItemTemplate>
<ItemTemplate>
<tr>
<td align = "left" class = "style10">
<%# DataBinder.Eval(Container.DataItem,"Name") %>
</td>
<td align = "left" class = "style10">
<%# DataBinder.Eval(Container.DataItem,"Prof_Last_Name") %>
<%# DataBinder.Eval(Container.DataItem,"Prof_First_Name") %>
</td>
<td align = "left" class = "style10">
<%# DataBinder.Eval(Container.DataItem,"Department") %>
</td>
<td>
<a href='DeleteSubject.aspx?id=<%# Eval("Subject_ID")%>' class =
"style10">Delete</a>
</td>
<td>
<a href='EditSubject.aspx?id=<%# Eval("Subject_ID") %>' class =
"style10">Edit</a>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
113
</asp:Repeater>
Pentru a patra coloanӑ “Delete Subject” am adӑugat urmӑtorul cod în tag-ul
<ItemTemplate>:
<a href='DeleteSubject.aspx?id=<%# Eval("Subject_ID")%>' class =
"style10">Delete</a>
care va adӑuga textul Delete pe fiecare rând și va direcționa user-ul cӑtre pagina “Delete
Subject.aspx” cӑreia îi va transmite urmӑtorii parametrii:
- id : Subject_ID al materiei afișate pe rândul respectiv (id=<%# Eval("Subject_ID")%>);
Pentru a cincea coloanӑ “Edit Subject” am adӑugat urmӑtorul cod în tag-ul
<ItemTemplate>:
<a href='EditSubject.aspx?id=<%# Eval("Subject_ID") %>' class =
"style10">Edit</a>
care va adӑuga textul Edit pe fiecare rând și va direcționa user-ul cӑtre pagina “Edit
Subject.aspx” cӑreia îi va transmite urmӑtorii parametrii:
- id : Subject_ID al materiei afișate pe rândul respectiv (id=<%# Eval("Subject_ID")%>);
Pentru ștergerea unei materii, administratorul trebuie sӑ apese butonul “Delete”.
protected void Page_Load(object sender, EventArgs e)
{
string subjectID = Request.QueryString["id"];
SqlConnection dbConn;
String strConnection;
strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
dbConn = new SqlConnection(strConnection);
114
dbConn.Open();
String strSQL1 = "DELETE FROM Subjects WHERE Subject_ID=@subjectID";
SqlCommand command1 = new SqlCommand(strSQL1, dbConn);
command1.Parameters.Add("@subjectID",
SqlDbType.Char).Value=subjectID;
String strSQL2 = "DELETE FROM Marks WHERE Subject_ID=@subjectID";
SqlCommand command2 = new SqlCommand(strSQL2, dbConn);
command2.Parameters.Add("@subjectID",
SqlDbType.Char).Value=subjectID;
command2.ExecuteNonQuery();
command1.ExecuteNonQuery();
dbConn.Close();
Response.Redirect("~/Administrator/Administrator Subjects.aspx");
}
Pentru editarea unei materii, administratorul trebuie sӑ apese butonul “Edit”.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string idSubject = Request.QueryString["id"];
if (idSubject != "")
{
String strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
SqlConnection dbConn = new SqlConnection(strConnection);
dbConn.Open();
string strSQL = "SELECT * FROM Subjects WHERE
Subject_ID=@idSubject";
SqlCommand command = new SqlCommand();
command.CommandText = strSQL;
command.Connection = dbConn;
command.Parameters.Add("@idSubject", SqlDbType.Char).Value =
idSubject;
115
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
SubjectNameTextBox.Text = reader.GetString(1);
DepartmentTextBox.Text = reader.GetString(2);
YearTextBox.Text = reader.GetDecimal(3).ToString();
ProfessorIDTextBox.Text =
reader.GetDecimal(4).ToString();
}
}
reader.Close();
}
}
}
protected void editsubject_Click(object sender, EventArgs e)
{
string idSubject = Request.QueryString["id"];
string new_subjectName = SubjectNameTextBox.Text;
int new_professorID = Convert.ToInt32(ProfessorIDTextBox.Text);
string new_Department = DepartmentTextBox.Text;
String strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
SqlConnection dbConn = new SqlConnection(strConnection);
dbConn.Open();
string strSQL = "UPDATE Subjects SET
Name=@name,Department=@department, Professor_ID=@profID WHERE
Subject_ID=@idSubject";
SqlCommand command = new SqlCommand();
command.CommandText = strSQL;
command.Parameters.Add(new SqlParameter("@name", new_subjectName));
command.Parameters.Add(new SqlParameter("@profID", new_professorID));
command.Parameters.Add(new SqlParameter("@department",
new_Department));
116
command.Parameters.Add(new SqlParameter("@idSubject", idSubject));
command.Connection = dbConn;
command.ExecuteNonQuery();
dbConn.Close();
Response.Redirect("~/Administrator/Administrator Subjects.aspx");
}
Butonul “Add Subject” ne permite sӑ adӑugӑm o nouӑ materie în baza de date. Astfel,
vom fi direcționați cӑtre pagina “Add Subject.aspx”, se vor completa toate datele și
pentru a se finaliza procesul, va trebui apӑsat butonul “Add Subject”. Codul din
spatele acțiunii este urmӑtorul:
protected void AddButton_Click(object sender, EventArgs e)
{
string new_subjectID = SubjectIDTextBox.Text;
string new_subjectName = SubjectNameTextBox.Text;
string new_Department = DepartmentTextBox.Text;
int new_Professor =
Convert.ToInt32(DropDownList1.SelectedValue.ToString());
string new_Year = YearTextBox.Text;
String strConnection =
ConfigurationManager.ConnectionStrings["RAUDatabaseConnectionString"].Connect
ionString;
SqlConnection dbConn = new SqlConnection(strConnection);
dbConn.Open();
string strSQL = @"INSERT INTO Subjects(Subject_ID, Name, Department,
Academic_Year, Professor_ID) VALUES(@Subject_ID, @Name, @Department,
@Academic_Year, @Professor_ID)";
SqlCommand command = new SqlCommand();
command.CommandText = strSQL;
command.Connection = dbConn;
command.Parameters.Add(new SqlParameter("@Subject_ID",
new_subjectID));
command.Parameters.Add(new SqlParameter("@Name", new_subjectName));
117
command.Parameters.Add(new SqlParameter("@Department",
new_Department));
command.Parameters.Add(new SqlParameter("@Academic_Year", new_Year));
command.Parameters.Add(new SqlParameter("@Professor_ID",
new_Professor));
command.ExecuteNonQuery();
string strSQL2 = @"INSERT INTO Marks (Subject_ID, Student_ID)
SELECT a.Subject_ID, b.Student_ID FROM Subjects a, Students b WHERE
a.Academic_Year=@Academic_Year AND a.Academic_Year=b.Academic_Year
AND a.Subject_ID=@Subject_ID AND b.Student_ID NOT ÎN (SELECT Student_ID FROM
Marks WHERE Subject_ID=@Subject_ID)";
SqlCommand command2 = new SqlCommand();
command2.CommandText = strSQL2;
command2.Connection = dbConn;
command2.Parameters.Add("@Academic_Year", SqlDbType.Char).Value =
new_Year;
command2.Parameters.Add("@Subject_ID", SqlDbType.Char).Value =
new_subjectID;
command2.ExecuteNonQuery();
dbConn.Close();
SubjectIDTextBox.Text = "";
SubjectNameTextBox.Text = "";
DepartmentTextBox.Text = "";
YearTextBox.Text = "";
Response.Redirect("~/Admnistrator/Administrator Subjects.aspx");
}
Prin apӑsarea butonului “Cancel” vom fi direcționați cӑtre pagina inițialӑ.
protected void CancelButton_Click(object sender, EventArgs e)
{
Response.Redirect("~/Admnistrator/Administrator Subjects.aspx");
}
118
Pentru schimbarea parolei, profesorul are acceeași opțiune ca a studentului. El trebuie doar
sӑ acceseze pagina “Change Password.aspx”. Va fi rugat sӑ introducӑ parola actualӑ, noua
parolӑ pe care o dorește și confirmarea acesteia.
119
Cap. 5. EFICIENȚA ȘI UTILITATEA APLICAȚIEI INFORMATICE
Un prim criteriu în vederea eficienței, utilitӑții aplicației informatice este cel al atingerii
obiectivelor stabilite, adicӑ a obținerii ieșirilor avute în plan. Din acest punct de vedere,
sistemul informatic pe care l-am realizat a îndeplinit aceste condiții, cu ajutorul acestui
sistem, prin crearea unei baze de date, obținându-se diferite rapoarte utile atât studenților,
cât și profesorilor sau administratorului, având posibilitatea vizualizӑrii tuturor
informațiilor necesare. Totodatӑ, prelucrӑrile care se pot efectua cu acest sistem,
modificӑri, actualizӑri, ștergeri, adӑugӑri, se înscriu și ele în aceste condiții.
Un alt criteriu este ușurința în utilizare, întrucât sistemul realizat crește flexibilitatea și
ușurința în utilizarea datelor, dar și pentru utilizator, aceastӑ aplicație având un design
simplu, o structurӑ deloc complicatӑ, fiind la îndemâna oricui.
Utilitatea acestei aplicații constӑ în faptul cӑ poate fi întrebuințatӑ atât de studenți, ei având
acces exact la datele care le sunt necesare, notele din cadrul anilor universitari, dar și a
datelor personale, cât și de profesori, având acces rapid la actualizarea notelor studenților,
dar și la rapoarte pentru o mai bunӑ evidențӑ a acestora. Acest lucru nu poate decât sӑ
sporeascӑ calitatea și precizia activitӑții universitӑții.
Viteza de lucru este un alt aspect care trebuie luat în considerare. Majoritatea situațiilor și
prelucrӑrilor pe care sistemul informatic realizat le efectueazӑ se bazeazӑ pe tehnica SQL,
fiind constituite pe baza interogӑrilor asupra bazei de date. Întrucât între mediul de
programare în care a fost realizat sistemul (Microsoft Visual Web Developer) și sistemul de
operare sub care a fost proiectat sӑ ruleze (Windows) existӑ o compatibilitate maximӑ,
interogarea bazei de date se face foarte ușor, rezultatele obținându-se rapid.
În ceea ce privește securitatea sistemului informatic, au fost luate mӑsuri prin intermediul
programului ca sӑ se evite încercӑrile de fraudare. Un element de protecție este
restricționarea accesului la program, prin existența unui user-name și a unei parole care, în
cazul în care nu este introdusӑ corect, nu permite accesul în program. Protecția poate
consta și în faptul cӑ utilizatorii pot fi diferențiați, astfel încât un student nu poate fi
120
direcționat decât cӑtre anumite pagini; același lucru este valabil și pentru profesori și
pentru administrator, administratorul având access la întreaga bazӑ de date.
În concluzie, se poate spune cӑ sistemul informatic realizat este unul eficient, dar și
util, atât din punct de vedere al necesitӑților informaționale, cât și din punctul de vedere al
securitӑții și ușurinței în exploatare.
121
ANEXE
Anexa 1
Mediul de lucru Visual Web Developer Express 2008
De ce Visual Web Developer?
este simplu de înteles și de utilizat
conține un editor vizual
conține un editor performant de cod C#/HTML
conține suport pentru depanarea aplicațiilor Web
conține ultima versiune a colecției de clase necesare pentru a putea crea pagini
web folosind funcții implementate
conține un Web Server propriu ce poate rula paginile Web create
are integrat SQL Server Express, un mediu vizual pentru editarea bazelor de date
conține facilitӑți ca Master Page
1.1. Mediul de lucru
Visual Web Developer este un mediu de lucru dezvoltat de Microsoft, specializat pe
realizarea site-urilor. Editia Express este proiectatӑ special pentru amatorii care vor sӑ
învețe sӑ foloseascӑ Visual Web Developer și tehnologii asemӑnӑtoare, fӑrӑ sӑ aibӑ
îndemânӑri în utilizarea instrumentelor folosite de programatorii profesioniști; ea conține
instrumente de dezvoltare moderne, ușor de înteles și ușor de folosit, de dimensiuni mici,
cu interfețe de lucru simplificate dar în același timp beneficiare ale trӑsӑturilor clasice ale
Visual Studio și ale noilor funcționalitӑți implementate în .NET Framework .
Visual Web Developer se lanseazӑ printr-un simplu click pe butonul Start și alegerea
opțiunii Visual Web Developer 2008 Express Edition din All Programs.
122
În figurӑ pot fi vizualizate urmӑtoarele panouri:
Toolbox: când se deschide o paginӑ sau alt item pentru editare, Toolbox oferӑ
instrumentele ce permit adӑugarea de noi componente paginii.
Design Surface: este panoul de editare a paginilor .
Solution Explorer/Database Explorer: fiecare site Web creat este organizat ca un
grup de foldere care apare în Solution Explorer. Orice bazӑ de date creatӑ pentru
aplicație apare în Database Explorer. Pentru comutarea între cele douӑ programe
Explorer se folosește tabul din josul panoului.
Properties: afișeazӑ proprietӑțile asociate obiectului sau paginii cu care se lucreazӑ.
123
1.2. Compilarea dinamicӑ a site-ului
Începand cu ASP.NET 2.0, existӑ posibilitatea de a crea site-uri web în care compilarea se
face dinamic pentru o paginӑ, atunci când pagina respectivӑ este cerutӑ de utilizator.
Cealaltӑ opțiune ar fi de a avea un assembly (un .dll). Pagina compilatӑ ține cont de un
timestamp asociat fișierului sursӑ, astfel încât dupӑ fiecare modificare a acestuia, pagina se
recompileazӑ la prima cerere. Avantajele acestei opțiuni de instalare a site-urilor ASP.NET
sunt:
Nu este nevoie sa recompilӑm întreaga aplicație atunci când se modificӑ doar o
pagina a acesteia.
Paginile care conțin erori de compilare nu opresc execuția întregului site cum s-ar
întâmpla dacӑ în loc de pagini compilate dinamic am avea un assembly.
1.3. Servere Web (Un calculator conectat la Internet care furnizeazӑ clienților, la cerere,
diverse resurse web) în Visual Web Developer.
Pentru a testa și a rula o aplicație Web ASP.NET, este nevoie de un server Web.
Serverul Web pentru sistemele de operare Windows este IIS, care include serverul FTP,
serverul de e-mail SMTP și alte facilitӑți.
În Windows 2000 Server și în versiuni anterioare, IIS este instalat ca o parte a sistemului
de operare. În Windows XP și Windows Server 2003, IIS trebuie instalat separat; acest
lucru se poate face folosind opțiunea Add/Remove Windows Components→Add or Remove
Programs din Control Panel.
1.4. ASP.NET Development Server
Dacӑ nu se poate folosi IIS ca server web, paginile ASP.NET pot fi testate folosind ASP.NET
Development Server. ASP.NET Development Server este integrat în Visual Web Developer
și este un server Web care ruleazӑ local pe sistemele de operare Windows, incluzând
Windows XP Home Edition. ASP.NET Development Server pune la dispoziție o metodӑ
simplӑ de a testa paginile local înainte de a le publica și a le pune pe un server IIS.
124
ASP.NET Development Server funcționeazӑ numai cu pagini individuale și nu include toate
facilitӑțile IIS. De exemplu, ASP.NET Development Server nu suportӑ un server de mail
SMTP. Dacӑ o aplicație Web include trimiterea de mesaje e-mail, trebuie sӑ existe acces la
serverul virtual IIS SMTP pentru a testa e-mail, deoarece ASP.NET Development Server nu
poate trimite mesaje e-mail.
1.5. Securitate în ASP.NET Development Server
O diferențӑ importantӑ între ASP.NET Development Server și IIS o reprezintӑ securitatea în
fiecare dintre cele douӑ servere.
Atunci când o pagina este rulatӑ folosind ASP.NET Development Server, pagina ruleazӑ în
contextul de securitate a contului de utilizator folosit. De exemplu, când o pagina este
rulatӑ cu ajutorul ASP.NET Development Server folosind un cont de utilizator cu nivel de
administrator și pagina va avea privilegii de administrator.
În IIS, ASP.NET ruleazӑ implicit în contextul userului special (ASPNET sau NETWORK
SERVICES) care are privilegii limitate, ceea ce restrânge accesul la resursele de pe alt
calculator.
Dacӑ este rulat un cod dintr-o paginӑ simplӑ ASP.NET, diferența nu este foarte importantӑ.
Diferențele apar atunci când:
sunt accesate resurse cum ar fi: fișiere care nu sunt pagini Web, registri Windows
etc.,
este accesatӑ o bazӑ de date,
sunt accesate resurse protejate.
125
Anexa 2
Limbajul de scripting server-side ASP.NET
1. Structura unei pagini ASP.NET
Orice paginӑ ASP.NET presupune douӑ componente: partea de interfațӑ (controalele care
vor fi vizualizate de cӑtre utilizator) și codul .NET care va fi executat pe server atunci când
se face o cerere cӑtre pagina respectivӑ. Codul poate fi scris folosind limbajul C# sau Visual
Basic .NET.
Script-urile ASP.NET sunt fișiere text cu extensia .aspx, care conțin controale HTML sau
ASP. Codul C# sau VB.NET asociat paginii sau obiectelor din paginӑ poate fi plasat direct în
fișierul cu extensia .aspx, sau într-un fișier separat <nume_pagina>.aspx.cs (pentru C#) sau
<nume_pagina>.aspx.vb (pentru VB.NET).
Orice paginӑ web .aspx conține o secțiune de directive, care descrie modul în care pagina
este procesatӑ de cӑtre server. Aceastӑ secțiune este cuprinsӑ între tag-urile <%@ și %> și
precizeazӑ limbajul utilizat pentru scrierea codului și numele fișierului în care este reținut
codul (atunci când este cazul):
<%@ Page Language="C#" CodeFile="first.aspx.cs" Inherits="_first"%>
1.1. Controale ASP.NET
Pentru a realiza layout-ul unei pagini web, ASP.NET pune la dispoziția programatorului o
serie de controale predefinite, precum și posibilitatea definirii unor controale proprii.
Controalele ASP.NET se mai numesc și controale server deoarece pot fi programate, prin
intermediul unui cod server-side, sӑ rӑspundӑ la anumite evenimente din paginӑ. Pentru a
putea fi accesate prin intermediul codului, aceste controale trebuie sӑ conținӑ atributele id
și runat=”server”.
Exista douӑ tipuri de controale server: Web și Html. Controalele server HTML corespund
controalelor standard HTML, și pot fi create prin adӑugarea atributului runat=”server” unui
126
tag HTML. Pentru a putea identifica un control Html în codul server-side, trebuie sa-i
atașӑm atributul „id”: <p id = "output" runat="server"/>.
Controalele server Web oferӑ mai multe funcționalitӑți programabile decât cele HTML.
Aceste controale pot corespunde mai multor tag-uri HTML, și pot include cod javascript.
Sunt cuprinse între tag-urile <asp> </asp>. De exemplu, un control Web pentru
introducerea datelor de cӑtre utilizator este textbox: <asp:TextBox ID="TextBox1"
runat="server"></asp:TextBox>.
1.2. Ciclul de viațӑ al unei pagini web.
Paginile ASP.NET ruleazӑ pe server-ul web Microsoft IIS. În urma prelucrӑrii pe server,
rezultӑ o paginӑ web Html, care este trimisӑ cӑtre browser.
Ciclul de viațӑ al unei pagini web are urmӑtorii pași:
1. User-ul scrie adresa unei pagini web. Acest lucru înseamnӑ o cerere a browser-ului web
cӑtre server, prin intermediul metodei HTTP GET. Pe server, pagina ruleazӑ pentru prima
data, executându-se și codul C# existent.
2. Rezultatul este o paginӑ Html care este trimisӑ browser-ului.
3. User-ul poate introduce date sau apӑsa un buton, și pagina este trimisӑ înapoi server-
ului.
Dacӑ utilizatorul acceseazӑ un link, se încarcӑ o altӑ paginӑ, și nici o prelucrare nu este
efectuatӑ de pagina inițialӑ.
4. Pagina este trimisӑ cӑtre browser prin intermediul metodei HTTP POST. În ASP.NET
aceastӑ acțiune se numește PostBack.
5. Pe server-ul web, pagina ruleazӑ din nou, și sunt prelucrate informațiile introduse de
cӑtre utilizator în browser.
6. Rezultatul este trimis browser-ului, și astfel se reia ciclul.
127
Procesul de prelucrare a paginii web de cӑtre server este împӑrțit în mai multe etape.
Fiecare etapӑ corespunde unui eveniment asociat paginii. Printre cele mai importante
evenimente asociate paginii sunt:
Init – se inițializeazӑ fiecare control server
Load – se executӑ la fiecare cerere a paginii
Render – se genereazӑ codul html ce va fi trimis browser-ului
UnLoad – sunt eliberate resursele folosite.
2. Limbajul C#
Limbajul C# este un limbaj nou de programare, apӑrut odatӑ cu platforma .NET.
Ideea centralӑ a limbajului C# este programarea orientatӑ pe obiecte (OOP). O aplicație C#
este formatӑ din una sau mai multe clase, grupate în spații de nume (namespaces).
O clasӑ reprezintӑ un șablon care definește forma unui obiect. Este un tip de date
abstract, care definește atât datele cât și codul care va prelucra acele date. Obiectele sunt
instante, particularizӑri ale claselor. Datele din cadrul clasei se mai numesc proprietӑți, iar
funcțiile mai poartӑ numele de metode.
Simplificând mult lucrurile, puteți sa vӑ imaginați o clasӑ ca o extindere a tipului
structurӑ din C sau înregistrare din Pascal. Într-o structurӑ se pot defini date de tipuri
diferite.
Într-o clasӑ, pe lângӑ aceste date existӑ și funcțiile care le prelucreazӑ. La fel cum se pot
defini variabile de tip structurӑ, se pot defini variabile de tip clasӑ (numite obiecte). Accesul
la câmpurile unei structuri se realizeazӑ prin nume_variabila_structura . nume_câmp.
128
Analog, accesul la datele și funcțiile membre ale unei clase se realizeazӑ prin obiect .
proprietate sau obiect . metodӑ.
Un spațiu de nume reprezintӑ o schemӑ logicӑ pentru denumirea tipurilor de date
înrudite. Spațiile de nume pot fi asemӑnӑtoare cu structura de directoare
și fișiere din Windows. La fel cum într-un folder sunt salvate fișiere înrudite, într-un spațiu
de nume se gӑsesc obiecte de tipuri asemӑnӑtoare.
Rӑdӑcina acestei ierarhii de spații de nume este System. Spațiile de nume pot
conține la rândul lor alte spații de nume. De exemplu, System conține spațiile de nume
System.Data (unde se gӑsesc clase pentru conectarea la diverse surse de date) și
System.Web (unde se gӑsesc toate clasele pentru dezvoltarea unei aplicații web).
Controalele server Html sunt incluse în spațiul de nume System.Web.UI.HtmlControls, iar
controalele server Web în spațiul System.Web.UI.WebControls. Pentru a avea acces la
clasele dintr-un anumit spațiu de nume, acesta trebuie inclus în aplicație folosind
instrucțiunea using:
129
Anexa 3
Cookies
Un cookies este o secvențӑ de text care este salvatӑ pe calculatorul user-ului.
Valorile din cookie sunt perechi de formӑ cheie/valoare. De obicei, cookie-urile sunt
folosite pentru a reține informații despre un user, la vizitarea unei pagini web. Când user-ul
revine pe un site, informațiile din cookie sunt citite, ajutând la identificarea rapidӑ a
utilizatorului. Pe lângӑ valori, pentru un cookie se poate stabili durata de viațӑ în
calculatorul clientului.
Pentru a adӑuga un cookie, se folosește proprietatea Cookies a obiectului Response.
Aceastӑ proprietate este un vector asociativ, de tip cheie/valoare:
Response.Cookies["cheie"].Value = valoare
Timpul de viațӑ al cookie-ului se stabilește prin intermediul proprietӑții Expires.
Avantajul folosirii cookie-urilor este acela cӑ informația este disponibilӑ în orice paginӑ la
revenirea userului în site, dupӑ o anumitӑ perioadӑ. Printre dezavantaje amintim:
nu sunt potrivite pentru a reține date importante
cookie-urile pot fi dezactivate din browser
sunt încӑrcate pentru fiecare cerere, ducând la creșterea traficului
Anexa 4
INTERACȚIUNEA CU BAZE DE DATE WEB
ADO.NET (ActiveX Data Objects) reprezintӑ o parte componentӑ a nucleului .NET
Framework ce permite conectarea la surse de date diverse, extragerea, manipularea și
130
actualizarea datelor. De obicei, sursa de date este o bazӑ de date, dar ar putea de asemenea
sa fie un fișier text, o foaie Excel, un fișier Access sau un fișier XML.
1. ROLUL BAZELOR DE DATE
Astӑzi, cele mai multe dintre activitӑțile zilnice necesitӑ accesarea și actualizarea
informației dintr-o bazӑ de date: consultarea unui catalog de produse, lansarea unei
comenzi, cumpӑrarea unui bilet de avion sau verificarea evidenței plӑților.
De cele mai multe ori, informațiile sunt obținute prin prelucrarea unor seturi de date
relaționate. De exemplu, o bazӑ de date tipicӑ pentru un magazin on-line conține o listӑ de
clienți, o listӑ de produse și o listӑ de vânzӑri bazatӑ pe informațiile din primele douӑ liste.
Aceste informații sunt descrise cel mai bine utilizând un model relațional, model ce
presupune divizarea informațiilor în seturi consistente și definirea relațiilor dintre aceste
seturi. Modelul relațional stӑ la baza tuturor produselor moderne axate pe baze de date,
incluzând aici SQL Server, Oracle,MySQL și chiar Microsoft Access.
Din punct de vedere tehnic este posibilӑ organizarea datelor în tabele și pӑstrarea acestei
tabele pe hard disc în unul sau mai multe fișiere (eventual folosind un standard XML).
Aceastӑ abordare nu este însӑ foarte flexibilӑ.
O aplicație web are nevoie de un sistem complet de gestionare a bazelor de date (RDBMS)
cum ar fi SQL Server, care sӑ asigure gestionarea infrastructurii, performanțӑ și
fiabilitate. De exemplu, un astfel de sistem poate furniza date pentru mai mulți
utilizatori simultan, elimina datele incorecte și poate executa la un moment dat un
grup de comenzi care sunt vӑzute ca o singurӑ unitate.
131
2. ACCESAREA BAZELOR DE DATE WEB
Accesarea unei baze de date într-o aplicație web are un scenariu complet diferit fațӑ de
accesarea unei baze de date prin intermediul unei aplicații desktop client-server.
În aplicațiile tradiționale cu baze de date, clienții stabilesc o conexiune cu baza de date și
mențin aceastӑ conexiune deschisӑ pânӑ la încheierea executӑrii aplicației. Conexiunile
deschise necesitӑ alocarea de resurse sistem. Atunci când menținem mai multe conexiuni
deschise server-ul de baze de date va rӑspunde mai lent la comenzile clienților întrucât cele
mai multe baze de date permit un numӑr foarte mic de conexiuni concurente.
O aplicație Web trebuie sӑ asigure în principal furnizarea rezultatelor cӑtre mai mulți
utilizatori simultan, operație influențatӑ de resursele de memorie și de conexiunile la baza
de date. Dacӑ aplicația este proiectatӑ astfel încât sӑ menținӑ conexiunea deschisӑ chiar și
pentru câteva secunde în plus pentru un utilizator, atunci ceilalți utilizatori vor observa cu
siguranțӑ întârzierea. Concurența este una dintre problemele pe care aplicația trebuie sӑ le
gestioneze pentru cӑ modificӑrile fӑcute de utilizatorii conectați simultan pot conduce la
inconsistența datelor.
O altӑ problemӑ care trebuie rezolvatӑ de o aplicație Web care lucreazӑ cu baze de date
este cea a modului de deconectare de la Internet. HTTP este un protocol static. Atunci când
un utilizator emite o cerere printr-o aplicație ASP.NET, serverul Web proceseazӑ codul,
returneazӑ paginile HTML și închide conexiunea, astfel încât utilizatorul are senzația cӑ
lucreazӑ cu o aplicație care ruleazӑ continuu deși el beneficiazӑ doar de pagini statice.
Aplicația ASP.NET trebuie sӑ efectueze operația solicitatӑ de utilizator printr-o singurӑ
cerere.
ADO.NET permite și lucrul în stil conectat dar și lucrul în stil deconectat, aplicațiile
conectându-se la server-ul de baze de date numai pentru extragerea și actualizarea datelor.
Acest lucru permite reducerea numӑrului de conexiuni deschise simultan la sursele de
date.
132
ADO.NET oferӑ instrumentele de utilizare și reprezentare XML pentru transferul datelor
între aplicații și surse de date, furnizând o reprezentare comunӑ a datelor, ceea ce permite
accesarea datelor din diferite surse de diferite tipuri și prelucrarea lor ca entitӑți, fӑrӑ sӑ fie
necesarӑ convertirea explicitӑ a datelor în format XML sau invers.
Aceste caracteristici sunt determinante în stabilirea beneficiilor furnizate de ADO.NET:
Interoperabilitate. ADO.NET poate interacționa ușor cu orice componentӑ care
suportӑ XML.
Durabilitate. ADO.NET permite dezvoltarea arhitecturii unei aplicații datoritӑ
modului de transfer a datelor între nivelele arhitecturale.
Programabilitate. ADO.NET simplificӑ programarea pentru diferite task-uri cum ar fi
comenzile SQL, ceea ce duce la o creștere a productivitӑții și la o scӑdere a
numӑrului de erori.
Performanțӑ. Nu mai este necesarӑ conversia explicitӑ a datelor la transferul între
aplicații, fapt care duce la creșterea performanțelor acestora.
Accesibilitate. Utilizarea arhitecturii deconectate permite accesul simultan la același
set de date. Reducerea numӑrului de conexiuni deschise simultan determinӑ
utilizarea optimӑ a resurselor.
Anexa 5
Arhitectura ADO.NET
Componentele principale ale ADO.NET sunt DataSet și Data Provider. Ele au fost
proiectate pentru accesarea și manipularea datelor.
133
Furnizori de date (Data Providers)
Din cauza existenței mai multor tipuri de surse de date este necesar ca pentru fiecare tip de
protocol de comunicare sӑ se foloseascӑ o bibliotecӑ specializatӑ de clase.
.NET Framework include SQL Server.NET Data Provider pentru interacțiune cu Microsoft
SQL Server, Oracle Data Provider pentru bazele de date Oracle și OLE DB Data Provider
pentru accesarea bazelor de date ce utiliteazӑ tehnologia OLE DB pentru expunerea datelor
(de exemplu Access, Excel sau SQL Server versiune mai veche decât 7.0)
Furnizorul de date permite unei aplicații sӑ se conecteze la sursa de date, executӑ comenzi
și salveazӑ rezultate. Fiecare furnizor de date cuprinde componentele Connection,
Command, DataReader și DataAdapter :
134
Accesul direct la date prin intermediul ADO.NET
Accesul direct la date presupune construcția unei comenzi SQL, conectarea la baza de date,
executarea comenzii și deconectarea de la baza de date fӑrӑ memorarea directӑ a
rezultatelor.
Dacӑ se lucreazӑ în mod deconectat atunci se pӑstreazӑ o copie a datelor într-un obiect de
tip DataSet și acestea pot fi prelucrate și dupӑ deconectarea de la baza de date. Modelul
accesului direct la date corespunde paginilor ASP.NET unde nu este necesarӑ memorarea
datelor pentru perioade mai lungi de timp. O paginӑ ASP.NET este încӑrcatӑ la cerere și
accesul se încheie atunci când rezultatul cererii este furnizat user-ului, ceea ce înseamnӑ o
paginӑ care are de obicei o viațӑ de numai câteva secunde.
Rezultӑ așadar cӑ o interogare directӑ a datelor presupune executarea pașilor urmӑtori:
a) crearea obiectelor de tip Connection, Command și DataReader ;
b) obținerea informațiilor din baza de date cu ajutorul obiectelor de tip DataReader și
afișarea acestora într-un controler de pe un formular web;
c) închiderea conexiunii;
d) trimiterea paginii cӑtre utilizator; în acest moment nu mai avem o legӑturӑ directӑ
între ceea ce vede utilizatorul și datele din baza de date, obiectele de tip ADO.NET
fiind distruse.
Adӑugarea, ștergerea sau modificarea datelor se realizeazӑ în doi pași:
a) crearea obiectelor de tip Connection, Command;
b) executarea comenzii directe.
În figura de mai jos sunt reprezentați pașii menționați anterior.
135
Anexa 6
Securitatea aplicațiilor ASP.NET
Pentru o aplicație securizatӑ, existӑ mai multe posibilitӑți de autentificare, cele mai des
întâlnite fiind sintetizate în tabelul urmӑtor. Implementarea politicii de securitate se poate
face atât din IIS cât și din aplicația ASP.NET.
136
Windows Authentication
În acest mod de autentificare, aplicația ASP .NET are încorporate procedurile de
autentificare, dar se bazeazӑ pe sistemul de operare Windows pentru autentificarea
utilizatorului.
1. Utilizatorul solicitӑ o paginӑ securizatӑ de la aplicația Web.
2. Cererea ajunge la Serverul Web IIS care comparӑ datele de autentificare ale
utilizatorului cu cele ale aplicației (sau ale domeniului)
3. Dacӑ acestea douӑ nu corespund, IIS refuzӑ cererea utilizatorului.
4. Calculatorul clientului genereazӑ o fereastrӑ de autentificare,
5. Clientul introduce datele de autentificare, dupӑ care retrimite cererea cӑtre IIS
6. IIS verificӑ datele de autentificare, și în cazul în care sunt corecte, direcționeazӑ
cererea cӑtre aplicația Web.
137
7. Pagina securizatӑ este returnatӑ utilizatorului.
Forms-Based Authentication
Atunci când se utilizeazӑ autentificarea bazatӑ pe formulare, IIS nu realizeazӑ
autentificarea, deci este necesar ca în setӑrile acestuia sӑ fie permis accesul anonim.
1. În momentul în care un utilizator solicitӑ o paginӑ securizatӑ, IIS autentificӑ clientul ca
fiind un utilizator anonim, dupӑ care trimite cererea cӑtre ASP.NET.
2. Acesta verificӑ pe calculatorul clientului prezența unui anumit cookie.
3. Dacӑ cookie-ul nu este prezent sau este invalid, ASP.NET refuzӑ cererea clientului și
returneazӑ o paginӑ de autentificare.
4. Clientul completeazӑ informațiile cerute în pagina de autentificare și apoi trimite
informațiile.
5. Din nou, IIS autentificӑ clientul ca fiind un utilizator anonim și trimite cererea cӑtre ASP
.NET
6. ASP.NET autentificӑ clientul pe baza informațiilor furnizate. De asemenea genereazӑ și
un cookie. Cookie reprezintӑ un mic fișier text ce pӑstreazӑ diverse informații despre
utilizatorul respectiv, informații folosite la urmӑtoarea vizitӑ a sa pe site-ul respectiv, la
autentificare, sau în diverse alte scopuri.
7. Pagina securizatӑ cerutӑ și noul cookie sunt returnate clientului. Atâta timp cât acest
cookie rӑmâne valid, clientul poate solicita și vizualiza orice paginӑ securizatӑ ce utilizeazӑ
aceleași informații de autentificare.
138
Securizarea din aplicația web
Securizarea unei aplicații web presupune realizarea a douӑ obiective: (1) autentificarea
și (2) autorizarea.
1. Autentificarea presupune introducerea de cӑtre utilizator a unor credențiale, de
exemplu nume de utilizator și parolӑ, iar apoi verificarea în sistem cӑ acestea
139
existӑ și sunt valide.
2. Autorizarea este procesul prin care un utilizator autentificat primește acces pe
anumite resurse, numai pe resursele pe care are dreptul sӑ le acceseze.
Aceste obiective pot fi atinse ușor utilizând funcționalitӑțile și uneltele din
ASP.NET respectiv Visual Studio, anume clasa Membership și unealta ASP.NET
Configuration (din meniul Website al Visual Studio Web Developer Express).
Anexa 7
Pagini dinamice vs Pagini statice
Paginile Web dinamice sunt folosite atunci când se dorește modificarea dinamicӑ, a
conținutului paginilor Web. Paginile Web realizate în HTML au dezavantajul ca sunt statice,
conținutul lor neputând fi modificat odatӑ ce au fost încӑrcate pe un server decât
aducându-le înapoi pentru a fi editate. Acest lucru este o problemӑ serioasӑ având în
vedere cӑ operația este mare consumatoare de timp. În plus, lucrul cu baze de date nu este
posibil în cazul paginilor statice. Pentru un site de Web format doar din pagini HTML care
afișeazӑ notele și mediile studenților pe serii și pe grupe, dacӑ se dorește adӑugarea unui
student va trebui sӑ se modifice atât pagina grupei cât și pagina seriei precum și pe cele de
medii. Acest fapt este neplӑcut și îngreuneazӑ foarte mult munca. Soluția care se adoptӑ în
astfel de situații este plasarea informațiilor într-o bazӑ de date și accesarea lor ori de câte
ori se cere acest lucru de cineva. Mai exact, în loc sӑ se creeze 3-4 pagini Web în HTML care
sӑ fie modificate ori de câte ori intervine o schimbare, se va crea o bazӑ de date și câteva
scripturi pe partea de server prin care vor construi dinamic, paginile HTML care vor fi
afișate. Schimbӑrile se vor face doar la nivelul bazei de date ceea ce e mult mai simplu.
Paginile Web se clasificӑ în funcție de natura conținutului în pagini statice și pagini
dinamice.
140
Principalele caracteristici ale paginilor Web statice sunt:
• conțin doar elemente HTML;
• codul sursӑ vizualizat în navigator este identic cu cel al fișierului stocat pe disc;
• nu oferӑ interactivitate.
Paginile Web dinamice se caracterizeazӑ prin urmӑtoarele:
• conținutul lor este creat dinamic și poate diferi la accesӑri diferite; de exemplu la același
URL conținutul paginii poate varia în funcție de anumiți parametri cum ar fi locația
geograficӑ a utilizatorului, ora, paginile vizitate anterior, profilul utilizatorului;
• oferӑ interactivitate;
• posibilitӑți de interacțiune.
În funcție de locul în care este evidențiat caracterul dinamic al paginilor existӑ pagini
dinamice pe parte de client și pagini dinamice pe partea de server.
Pagini dinamice pe partea client
Existӑ mai multe tehnologii care permit realizarea de pagini dinamice pe partea de client.
Dintre acestea se enumerӑ:
scripturi pe partea de client (client side scripts)
DHTML (Dynamic HTML)
Applet-uri Java
Controale ActiveX
Elemente multimedia
Scripturile pe partea de client (client side scripts) sunt secvențe de program incluse în
pagina HTML care se executӑ de cӑtre navigator. Secvențele de program sunt incluse prin
141
marcatorul <SCRIPT> sau în proprietӑțile anumitor componente HTML ca rӑspuns la
diferite evenimente.
Limbajele utilizate pentru a realiza scripturi pe partea de client sunt JavaScript, Jscript și
VBScript. Secvențele de program scrise folosind aceste scripturi nu oferӑ acces la resursele
sistemului local (fișiere, rețea).
Scripturile pe partea de client sunt utilizate pentru asigurarea interactivitӑții (meniuri),
pentru validarea formularelor, pentru a crea diferite efecte, pentru efectuarea de calcule,
diverse elemente de animație etc.
DHTML (Dynamic HTML) este o tehnologie dezvoltatӑ de Microsoft care combinӑ HTML,
foi de stiluri (CSS) și script-uri pentru a realiza pagini Web dinamice sau interactive.
Permite utilizatorilor sӑ interacționeze cu pagina fӑrӑ a retrimite o cerere la serverul Web.
Applet-uri Java reprezintӑ aplicații de dimensiuni reduse, scrise în limbajul Java. Codul
binar al aplicației este descӑrcat pe mașina client de pe server și executat local, în mașina
virtualӑ Java (JVM). Aproape toate calculatoarele permit execuția applet-urilor, însӑ pentru
funcționarea acestora este necesarӑ instalarea unei mașini virtuale Java. În cadrul paginii
HTML applet-urile sunt incluse prin intermediul marcatorilor <APPLET> sau <OBJECT>.
Din applet-urile Java nu este permis accesul la sistemul local de fișiere și la rețea, astfel
riscul ca aceste aplicații sa conținӑ cod malițios sunt reduse.
Controalele ActiveX sunt componente binare incluse în paginile Web pentru a oferi
interactivitate. Sunt asemӑnӑtoare applet-urilor, însӑ spre deosebire de acestea, ruleazӑ pe
platforma Windows și au fost dezvoltate în special pentru Internet Explorer. Controalele
ActiveX sunt incluse în cadrul paginii Web prin intermediul marcatorului <OBJECT>. Spre
deosebire de scripturile pe partea de client, nu au restricții în ceea ce privește accesul la
disc, ceea ce face ca anumite componente de acest tip sa fie susceptibile de cod rӑuvoitor,
asemӑnӑtor virușilor. De aceea, în cazul în care o paginӑ conține controale ActiveX,
navigatorul printr-o fereastrӑ de dialog cere confirmarea utilizatorului pentru instalarea și
rularea acestora.
142
Elemente multimedia sunt dezvoltate în general folosind produsul Macromedia Flash.
Acestea se prezintӑ sub formӑ de fișiere SWF multimedia și sunt incluse în pagina Web prin
intermediul marcatorului <OBJECT>. Pentru a putea rula pe partea de client aceste fișiere
este necesarӑ instalarea unui plug - in denumit Macromedia Shockwave Player. Fișierele
multimedia Flash se realizeazӑ sub forma unor filme, care sunt proiectate cadru cu cadru.
Acestea oferӑ diverse efecte multimedia (animație, sunet) și permit interactivitatea cu
utilizatorul. Sunt utilizate pentru meniuri, jocuri, filme de animație etc.
Pagini dinamice generate pe partea server
Interpretorul de scripturi tip server-side are rolul de a executa scripturi la cererea
serverului de Web, de cele mai multe ori de a prelua rezultatul unor interogӑri la nivelul
bazelor de date și de a trimite spre serverul Web rezultatul execuției scripturilor sub formӑ
de conținut HTML pentru a putea fi afișat de cӑtre navigator. În momentul în care
serverului Web i se solicitӑ rularea unui script, acesta identificӑ în funcție de extensia
fișierului care din compilatoare trebuie sӑ ruleze scriptul respectiv.
143
Fiecӑrui interpretor de scripturi se asociazӑ unui limbaj de server- side scripting. Limbajele
populare ale momentului sunt: PHP (Personal Home Pages), ASP (Active Server Pages),
ASP.NETsi JSP (Java Server Pages). La acestea se mai adaugӑ și o serie de alte tehnologii de
interes mai restrâns. Caracteristicile generale ale paginilor Web dinamice generate pe
partea de server, indiferent de limbajul de scripting folosit sunt:
• necesitӑ un procesor pentru paginile dinamice sau un mediu de execuție;
• într-o paginӑ de script (ASP, JSP, PHP) pot fi îmbinate limbajul HTML și secvențe de cod;
secvențele de cod care sunt executate pe partea de server, înainte de a trimite pagina la
client;
• existӑ astfel posibilitatea de a particulariza paginile în mod dinamic;
• oferӑ posibilitatea de interacțiune cu baze de date diferite;
• au acces la toate resursele serverului Web (fișiere, rețea).
În mod uzual prin intermediul scripturilor sunt prelucrate informațiile din câmpurile
formularelor (<FORM>) din cadrul paginilor Web.
144
MODELUL ASP
Tehnologia Active Server Pages (ASP) dezvoltatӑ de Microsoft permite realizarea de
scripturi pentru server și este folositӑ pentru crearea și rularea în mod dinamic a
aplicațiilor Web server interactive. Cu ASP se pot combina pagini HTML, comenzi de script
și controale ActiveX pentru crearea de pagini Web interactive sau aplicații Web complexe.
Când serverul primește o cerere pentru un fișier ASP, prelucreazӑ scriptul conținut în fișier
pentru a construi pagina de Web care este trimisӑ apoi la navigator. ASP oferӑ totodatӑ
posibilitatea de a stoca informația dintr-un formular HTML într-o bazӑ de date, de a
personaliza site-uri Web, oferind diverse opțiuni pentru vizitatorii site-ului sau de a folosi
diferite caracteristici HTML bazate pe navigator. Pentru a prelucra un formular HTML pe
server, ar trebui utilizat limbajul Perl sau C pentru construirea unui CGI convențional. Cu
ASP se poate prelua informația dintr-un formular HTML care va fi stocat într-o bazӑ de
date, folosind numai scripturi simple înglobate în documente HTML.
ASP este proiectat independent de limbaj, deci se poate utiliza orice limbaj pentru care
existӑ instalat un compilator compatibil COM. ASP are înglobate limbajele VBSscript și
JScript., dar se pot instala și compilatoare pentru limbajele Perl, Rexx sau Python. Totodatӑ,
ASP oferӑ o cale flexibilӑ pentru a crea pagini Web și de a dezvolta aplicații Web într-un
limbaj de programare ca Visual Basic, C++ sau Java. Se poate include și o siglӑ a aplicației în
module care vor fi apelate și executate de cӑtre alte componente sau programe.
145
BIBLIOGRAFIE
Cӑrți:
Daniela Crișan, Alexandru Tӑbușcӑ
Programare Web / HTML / Javascript
Cornelia Botezatu
Proiectarea sistemelor informatice. Metode sistemice. , Editura ProUniversitaria, Buc,
2007
Ionel Iacob
ORACLE 10g – Proiectarea şi realizarea aplicaţiilor cu baze de date utilizând limbajul
SQL*PLUS, Ed. ProUniversitaria 2009
Matthew MacDonald, Mario Szpuszta
Pro ASP.NET 3.5 în C# 2008, Second Edition, Apress, 2007
Matthew MacDonald
Beginning ASP.NET 3.5 în C# 2008: From Novice to Professional, Second Edition,
Apress, 2007
Marco Bellinaso, Kevin Hoffman
ASP.NET Website Programming, C# Edition: Problem, Design, Solution, Wrox Press
Ltd., 2002
Mridula Parihar
ASP.NET Bible, Hungry Minds, 2002
146
Bill Evjen, Scott Hanselman, Devin Rader
Professional ASP.NET 3.5 SP1 Edition In C# and VB, Wiley Publishing, Inc.
William B. Sanders
ASP.NET 3.5, A Beginner’s Guide, The McGraw-Hill Companies, 2009
Cristian Darie & Wyatt Barnett
Build Your Own ASP.NET 3.5 Web Site Using C# & VB, 3rd Edition
Vince Varallo
ASP.NET 3.5 Enterprise Application Development with Visual Studio® 2008
Problem – Design – Solution, Wiley Publishing, Inc.
Paul Nielsen, with Mike White, Uttam Parui
Microsoft SQL Server 2008 Bible, Wiley Publishing, Inc., 2009
Jeff Ferguson, Brian Patterson, Jason Beres, Pierre Boutquin, and Meeta Gupta
C# Bible, Wiley Publishing (2002)
URL :
www.rau.ro
http://www.ezzylearning.com/ http://www.ezzylearning.com/tutorial.aspx?
tid=9637167
http://forums.asp.net/ http://forums.asp.net/p/956540/1177923.a
spx#1177923
http://www.codeproject.com/ http://www.codeproject.com/KB/applicatio
ns/SearchDotnet.aspx
147
http://sql-databases.blurtit.com/ http://www.blurtit.com/q499290.html
http://msdn.microsoft.com/en-us/ http://msdn.microsoft.com/en-
us/library/wtxbf3hh.aspx
http://www.w3schools.com/ http://www.w3schools.com/aspnet/prop_w
ebcontrol_textbox_autopostback.asp
http://www.w3schools.com/ http://www.w3schools.com/ASPNET/prop_
webcontrol_listcontrol_datavaluefield.asp
http://www.w3schools.com/ http://www.w3schools.com/ASPNET/prop_
webcontrol_listcontrol_datatextfield.asp
http://www.codeproject.com/ http://www.codeproject.com/KB/aspnet/IIS
7ASPNet.aspx
http://technet.microsoft.com/en-us http://technet.microsoft.com/en-
us/library/cc731252%28WS.10%29.aspx
http://www.biblioteca-
digitala.ase.ro/biblioteca/model/index2.asp
http://www.biblioteca-
digitala.ase.ro/biblioteca/carte2.asp?id=458
&idb=11
http://www.biblioteca-
digitala.ase.ro/biblioteca/model/index2.asp
http://www.biblioteca-
digitala.ase.ro/biblioteca/carte2.asp?id=432
http://www.teqcircle.com