Sunteți pe pagina 1din 54

UNIVERSITATEA OVIDIUS CONSTANA FACULTATEA DE MATEMATIC I INFORMATIC SPECIALIZAREA : MATEMATIC - INFORMATIC

Mediu virtual de negociere folosind tehnologia ASP / Microsoft SQL Server

Coordonator: Lector dr. Cristina Mndru

Absolvent: Slcescu Cristian


CONSTANA - 2004 -

Cuprins
1. 2. Introducere ... Prezentare ASP si Microsoft SQL Server 2000 . 2.1 Prezentare ASP .... 2.2 Prezentare Microsoft SQL Server 2000 3. Consideratii economice 3.1 Licitatie standard . 3.2 Licitatie cu pret rezervat . 3.3 Licitatie olandeza . 4. Date (data layer) ... 4.1 Diagrama tabele ... 4.2 Diagrama tabele principale si functionalitatea lor .... 4.3 Tabele .. 4.4 Views ..... 4.5 Proceduri stocate .. 4.6 Functii utilizator ... 4.7 Cod sursa reprezentativ ... 5. Logica aplicatiei (business layer) 5.1 Diagrama cazurilor de utilizare .. 5.2 Cazuri de utilizare User ... 5.2.1 Login .. 5.2.2 Inregistrare ... 5.2.3 Cautare licitatii . 5.2.4 Licitare produs . 5.2.5 Vanzare produs . 5.3 Cazuri de utilizare Administrator .. 5.3.1 Gestionare categorii . 5.3.2 Gestionare conturi 5.3.3 Gestionare contracte 5.3.4 Gestionare licitatii .... Bibliografie ... 3 4 4 4 5 5 5 6 9 9 10 10 13 13 16 17 21 21 23 23 24 27 30 35 40 40 42 47 50 54

1. Introducere
Aplicatia urmareste realizarea unui sistem prin care sa se poata vinde si licita produse. Licitarea se face folosind metodele standard sau olandeza. Licitatia standard pune in vanzare un singur articol, castigatorul licitatiei fiind cumparatorul care ofera cel mai mare pret. Licitatia olandeza este tipul de licitatie recomandat in cazul in care se doreste tranzactionarea mai multor articole de acelasi fel. Astfel se poate pune in vanzare un numar de articole de acelasi fel pentru oricare dintre articole cerandu-se un acelasi pret maxim. Pentru administrator sistemul pune la dispozitie optiuni de gestionare conturi, validare licitatii, incheiere de contracte. Aplicatia este una de intranet si se adreseaza platformei Windows. Tehnologiile folosite sunt ASP 3.0 si MS SQL Server 2000. ASP este un mediu de dezvoltare de scripturi care sa ruleze pe partea de server (server-side scripting). SQL Server 2000 este un sistem de gestiune al bazelor de date performant, prezentand un nivel ridicat de scalabilitate i posibilitati de adaptare la cerintele diverselor categorii de utilizatori.

2. Prezentare ASP si Microsoft SQL Server 2.1 Prezentare ASP

ASP este prescurtarea de la Active Server Pages care este un mediu de dezvoltare de scripturi care sa ruleze pe partea de server (server-side scripting). Motorul de scripting ASP (numit Active Server) functioneaza doar pe plat-forme Windows, cu IIS (Internet Infor-mation Server) sau PWS (Personal Web Server) ca servere web. Active Server este implementat ca un filtru ISAPI (Infor-mation Server Application Programming Interface) pentru IIS; atunci cand clientul cere o pagina ASP (un fisier cu extensia ASP), serverul de web trimite fisierul catre motorul de scripting (Active Server) pentru procesare. Rezultatul executiei scripturilor server-side este intors serverului web ca HTML, care il trimite mai departe clientului web, impreuna cu scripturile client-side, care vor fi executate local, pe masina client. Un fisier ASP este asemanator cu un fisier HTML; acesta poate contine text, tag-uri HTML si script-uri. Scripturile din fisierul ASP sunt executate pe server. Fisierele ASP au de regula extensia ".asp". Prin intermediul ASP se poate: - edita, modifica, adauga dinamic continut in pagini web, - raspunde la interogarile utilizatorilor sau datele introduse in formularele HTML, - accesa orice data sau baza de date si afiseaza rezultatele in browser, - personaliza pagina web pentru a fi accesibila utilizatorilor individuali; 2.2 Prezentare Microsoft SQL Server 2000

SQL Server 2000 este un sistem de gestiune al bazelor de date performant, prezentnd un nivel ridicat de scalabilitate i posibiliti de adaptare la cerinele diverselor categorii de utilizatori. Avnd n vedere tehnologiile i instrumentele integrate, SQL Server 2000 determin reducerea timpului necesar pentru dezvoltarea aplicaiilor care necesit integrarea suportului pentru bazele de date. n acest sens, realizarea unor arhitecturi bazate pe SQL Server simplific dezvoltarea soluiilor Web complexe, a aplicaiilor tradiionale, oferind totodat posibiliti avansate de organizare a informaiilor n depozitele de date. Implementarea acestei soluii simplific substanial procesele de administrare i ofer un nivel ridicat de securitate. Bazele de date constituie unul din elementele fundamentale ale infrastructurii IT a companiilor. Avnd n vedere importana informaiilor stocate n bazele de date pentru desfurarea proceselor de afaceri, soluiile de acest tip trebuie s asigure un nivel ridicat de scalabilitate, performan i siguran n exploatare. Ultima versiune Implementarea SQL Server 2000 determin reducerea substanial a resurselor care vor fi alocate pentru administrarea bazelor de date. n acest sens, nivelul ridicat de autoconfigurare, instrumentele grafice de administrare i numrul mare de experi tip wizard simplific substanial modul n care se realizeaz configurarea i administrarea acestui server.

3. Consideratii economice
3.1 Licitatie standard

Licitati standard este licitatia preferata de majoritatea proprietarilor, avand reguli simple care nu difera cu mult de cele ale licitatiei clasice. Se poate pune in vanzare un singur articol, castigatorul licitatiei fiind cumparatorul care ofera cel mai mare pret pe durata stabilita pentru desfasurarea licitatiei. Termeni : Pretul Blitz (de vanzare instant) Orice produs inscris pentru licitare poate avea si un pret de vanzare instant, pret la care vanzatorul este de acord sa vanda produsul direct, fara licitatie. Pretul de vanzare instant este mai mare sau cel mult egal cu pretul de start al produsului. Acest pret de vanzare instant este valabil doar inaintea primei oferte pentru produs la licitatie. Pasul de licitatie este o valoare, la alegerea vanzatorului, care ramane fixa pe toata perioada licitatiei produsului. Oferta pe care intentionati sa o faceti se stabileste astfel: pretul curent + pasul de licitatie. Puteti oferi mai mult decat acesta valoare, dar va trebui sa adaugati la pretul curent un multiplu al pasului de licitatie. Exemplu de licitatie standard Se pune in vanzare un CD-Blank la pretul de pornire de 30.000 lei si pasul de licitatie de 1000 lei. Ofertele sunt urmatoarele: 1) 30.000 lei (prima oferta poate fi egala cu pretul de pornire) 2) 31.000 lei (nu se poate oferi mai putin de 31.000 lei deoarece pasul este de 1000 lei) 3) 33.000 lei (nu se poate oferi mai putin de 32.000 lei deoarece pasul este de 1000 lei, dar se poate adauga la pretul curent orice multiplu de 1000 lei) Castigatorul este licitatorul cu oferta 3 deoarece 33.000 lei este cea mai mare oferta din perioada valida a licitatiei. 3.2 Licitatie cu pret rezervat

Licitatia cu pret rezervat este o licitatie asemanatoare cu licitatia standard, diferenta constand in faptul ca pretul minim pe care vanzatorul il cere pentru articolul sau nu este cunoscut de eventualii cumparatori. Ca si la licitatia standard se poate pune in vanzare un singur articol, castigatorul licitatiei fiind cumparatorul care ofera cel mai mare pret care depaseste pretul rezervat stabilit de vanzator. Exista posibilitatea ca la acest tip de licitatie sa nu existe nici un castigator, in cazul in care nici o oferta nu a depasit pretul rezervat. Dar la fel de bine se pot face oferte peste asteptarile vanzatorului. Exemplu de licitatie cu pret rezervat Se pune in vanzare un CD-Blank cu pretul rezervat de 35.000 lei si pasul de licitatie rezultat este de 1000 lei. Ofertele sunt urmatoarele: Oferta #1 = 25.000 lei Oferta #2 = 26.000 lei (nu se poate oferi mai putin de 26.000 lei deoarece pasul este de 1000 5

lei) Oferta #3 = 30.000 lei (nu se poate oferi mai putin de 27.000 lei deoarece pasul este de 1000 lei, dar se poate adauga la pretul curent orice multiplu de 1000 lei) Oferta #4 = 35.000 lei (nu se poate oferi mai putin de 31.000 lei deoarece pasul este de 1000 lei, dar se poate adauga la pretul curent orice multiplu de 1000 lei) Castigatorul este licitatorul 4, deoarece 35.000 lei este singura oferta cel putin egala cu pretul rezervat. Exemplu de licitatie standard cu pret blitz si pret rezervat Vanzatorul pune in vanzare o carte, face o descriere completa, stabileste pretul de pornire la $20, pretul rezervat la $25 pentru lot si pretul blitz la $40 pentru lot. Se fac urmatoarele oferte: Oferta #1 $40 Lotul este castigat la pretul blitz si licitatia se termina mai devreme. Castigatorul este ofertantul care a plasat oferta pentru $40. Asa ca el are dreptul sa cumpere lotul la $40. 3.3 Licitatie olandeza

Licitatia olandeza este tipul de licitatie recomandat in cazul in care se doreste tranzactionarea mai multor articole de acelasi fel. Astfel se poate pune in vanzare un numar (cantitate) de articole de acelasi fel pentru oricare dintre articole cerandu-se un acelasi pret maxim. La acest tip de licitatie pot exista mai multi castigatori. Castigatorii licitatiei sunt cumparatorii care au facut cele mai mari oferte iar cantitatile cerute de ei, insumate, nu depasesc cantitatea de articole oferita de vanzator. Exista posibilitatea ca pentru ultimul castigator sa ramana o cantitate mai mica decat cea ceruta, numita "cantitate partiala". Castigatorul partial are dreptul sa refuze cantitatea partiala, caz in care pierde calitatea de castigator. Pretul de vanzare este stabilit astfel: pentru fiecare castigator numim ultimul pret oferit "pret final". Pretul de vanzare este pretul final cel mai mic. Astfel, chiar daca exista castigatori care au oferit un pret mai mare decat pretul de vanzare, ei vor achizitiona articolele cu pretul de vanzare rezultat. Cumparatorul isi poate schimba oferta setand un pret mai mare sau un numar mai mare de articole fata de oferta pe care o facuse anterior. Exemple de functionare a acestui tip de licitatie: Exemplu 1 Vanzatorul pune in vanzare 5 stilouri identice, stabileste pretul de pornire la $5 si pretul rezervat la $ 4. Se fac urmatoarele oferte: Oferta #1 = $ 4,5 pentru un stilou Oferta #2 = $ 4,3 pentru 2 stilouri Oferta #3 = $ 4,2 pentru 4 stilouri Oferta #4 = $ 3 pentru un stilou Urmatoarelor oferte li se da un raspuns satisfacator la pretul ultimului castigator, oferata #3 pretul $4.2 : Ofertantul #1 are dreptul de a cumpara 1 stilou

Ofertantul #2 are dreptul de a cumpara doua stilouri Ofertantul #3 are dreptul de a cumpara doua stilouri. Articolele sunt in numar de 5 asa ca ofertantul nu poate cumpara decat doua stilouri Ofertei #4 nu i se poate da curs intrucat se situeaza sub pretul rezervat. Exemplu 2 Vanzatorul pune in vanzare 5 articole identice, pretul de pornire la $2 si pretul rezervat la $ 1. Oferta #1 = $ 1 pentru un articol Oferta #2 = $ 1 pentru un articol Oferta #3 = $ 1 pentru un articol Oferta #4 = $ 1 pentru un articol Oferta #5 = $ 1 pentru un articol Oferta #6 = $ 1.1 pentru un articol Urmatoarelor oferte li se da un raspuns satisfacator la pretul ultimului castigator, oferata #4 pretul $ 1 : Ofertantul #6 are dreptul de a cumpara 1 articol Ofertantul #1 are dreptul de a cumpara 1 articol Ofertantul #2 are dreptul de a cumpara 1 articol Ofertantul #3 are dreptul de a cumpara 1 articol Ofertantul #4 are dreptul de a cumpara 1 articol Ofertei #5 nu i se poate da curs intrucat nu mai sunt articole disponibile Chiar daca oferantul 6 a bindat mai tarziu oferta sa de $1.1 ia asigurat primul loc printre castigatori chiar daca el va cumpara articoloul tot la pretul de $1 Exemplu 3 Vanzatorul pune in vanzare 5 articole identice, pretul de pornire la $3 si pretul rezervat la $ 1. Oferta #1 = $ 1 pentru 3 articole Oferta #2 = $ 2 pentru 5 articole Oferta #3 = $ 3 pentru 2 articole Urmatoarelor oferte li se da un raspuns satisfacator la pretul ultimului castigator, oferata #2 la pretul $2 : Ofertantul #3 are dreptul de a cumpara doua articole Ofertantul #2 are dreptul de a cumpara trei articole. Articolele sunt in numar de 5 asa ca ofertantul nu poate cumpara decat trei. Ofertei #1 nu i se poate da curs intrucat nu mai sunt articole disponibile, Exemplu 4 Vanzatorul pune in vanzare 5 articole identice, pretul de pornire la $10 si pretul rezervat la $ 1. Oferta #1 = $ 1 pentru 2 articole Oferta #2 = $ 1 pentru 1 articole Oferta #3 = $ 10 pentru 2 articole Oferta #4 = $ 3 pentru 2 articole Oferta #5 = $ 4 pentru 1 articole 7

Urmatoarelor oferte li se da un raspuns satisfacator la pretul ultimului castigator, oferata #3 la pretul $3 : Ofertantul #3 are dreptul de a cumpara doua articole Ofertantul #5 are dreptul de a cumpara un articol Ofertantul #4 are dreptul de a cumpara doua articole Ofertei #1 nu i se poate da curs intrucat nu mai sunt articole disponibile, Ofertei #2 nu i se poate da curs intrucat nu mai sunt articole disponibile

4. Date (data layer) 4.1 Diagrama tabele

4.2

Diagrama tabele principale si functionalitatea lor


Folosita la sistemul de login Datele personale ale useri-lor care vand sau cumpara produse prin licitatie

Licitatii active

Strigari licitatii active

Contractele incheiate pentru licitatiile incheiate

Licitatii arhiva Licitatiile incheiate sunt mutate in arhiava Strigari licitatii arhiva

4.3

Tabele

Currencies (Monezi) Coloana currency_id currency_name currency_rate

smallint char float

NOT NULL NOT NULL NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL

cheie primara numele monedei raportul monedei fata de Leu cheie primara tip de cont(ex: user, admin) cheie primara utilizator cont parola cont tip cont (cheie straina) daca este sau nu activ

AccountTypes (Tipuri de Conturi) acctype_id smallint acctype_name varchar Accounts (Conturi) acc_id acc_name acc_pass acctype_id acc_isActive int varchar varchar smallint bit

10

AccountsDetails (Date personale utilizatori) accd_id int NOT NULL accd_email varchar NOT NULL accd_fname varchar NOT NULL accd_lname varchar NOT NULL country_code char NULL accd_city varchar NULL accd_pcode varchar NULL accd_addr varchar NULL accd_phone varchar NULL AuctionTypes (Tipuri de licitatie) auctype_id smallint auctype_name varchar auctype_desc Auctions (Licitatii) auc_id accd_id auctype_id auc_productName auc_productDesc cat_id auc_amount auc_startPrice auc_reservedPrice auc_blitzPrice auc_stepPrice currency_id auc_startDate auc_minutesNo auc_isValid text bigint int smallint varchar varchar int bigint float float float float smallint datetime smallint bit NOT NULL NOT NULL NULL NOT NULL NOT NULL NOT NULL NOT NULL NULL NOT NULL NOT NULL NOT NULL NULL NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NULL NOT NULL NOT NULL NOT NULL NULL NULL NOT NULL

cheie primara email nume prenume tara (cheie straina) oras code postal adresa telefon cheie primara tip licitatie(ex: standard, olandeza) descriere cheie primara detalii personala vanzator (cheie straina) tip licitatie (cheie straina) nume produs descriere produs categoria in care este incadrat produsul cantitatea pusa spre vanzare pret de start pret rezervat pret blitz pas de licitatie moneda (cheie straina) data la care a inceput licitatia durata licitatiei in minute daca a fost validata sau nu cheie primara detalii personale vanzator (cheie straina) tip licitatie (cheie straina) nume produs descriere produs categoria in care este incadrat produsul cantitatea pusa spre vanzare pret de start pret rezervat pret blitz pas de licitatie

AuctionsArchive (Arhiva licitatii) auc_id bigint accd_id int auctype_id auc_productName auc_productDesc cat_id auc_amount auc_startPrice auc_reservedPrice auc_blitzPrice auc_stepPrice smallint varchar varchar int bigint float float float float

11

currency_id auc_startDate auc_endDate Calls (Strigari) call_id accd_id auc_id call_price call_date call_amount

smallint datetime datetime bigint int bigint float datetime int

NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL

moneda (cheie straina) data la care a inceput licitatia data la care s-a sfarsit licitatia cheie primara detalii personale cumparatorofertant (cheie straina) licitatia (cheie straina) pretul strigarii data strigarii cantitatea care se cere prin strigare cheie primara detalii personale cumparatorofertant (cheie straina) licitatia (cheie straina) pretul strigarii data strigarii cantitatea care se cere prin strigare cheie primara Categoria codul tarii (cheie primara) Tara daca este sau nu valabila nationalitate cheie primara detalii personale vanzator (cheie straina) detalii personale cumparator (cheie straina) nume produs Cantitate Pret moneda (cheie straina) data incheierii contractului strigarea pe care s-a facut contractul

CallsArchive (Arhiva strigari) call_id bigint accd_id int auc_id call_price call_date call_amount bigint float datetime int

NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL

Categories (Categorii) cat_id int cat_name varchar Countries (Tari) country_code country_name country_inUse country_nationality char varchar bit varchar

NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NULL

SalesContracts (Contracte) sc_id Bigint sellerAcc_id Int buyerAcc_id sc_productName sc_amount sc_price currency_id sc_date callArchive_id Int Varchar Int Float Smallint Datetime Bigint

12

4.4

Views Datele din AuctionsArchive cu INNER JOINurile facute Datele din Auctions cu INNER JOIN-urile facute Datele din CallsArchive cu INNER JOIN-urile facute

AuctionsArchiveDetails AuctionsDetails CallsArchiveDetails 4.5 Proceduri stocate Descriere

Nume DELETE del_AuctionsArchiveById

Parametri @auc_id @auc_id @auc_id @auc_id @cat_id @sc_id @acc_id

sterge on inregistrare din AuctionsArchive dupa id del_AuctionsById sterge on inregistrare din Auctions dupa id del_CallsArchiveByAucId sterge on inregistrare din CallsArchive dupa id licitatie arhiva del_CallsByAucId sterge on inregistrare din Calls dupa id licitatie del_CategoriesById sterge on inregistrare din Categories dupa id del_SalesContractsById sterge on inregistrare din SalesContracts dupa id del_accountsById sterge on inregistrare din accounts dupa id Nume INSERT insUpd_Calls Descriere Parametri

insert sau update in tabela Calls ins_AccountsDetails insert in tabela AccountsDetails

ins_Auctions

insert in tabela Auctions

ins_Calls ins_Categories ins_SalesContracts

insert in tabela Calls insert in tabela Categories insert in tabela SalesContracts insert in tabela accounts

ins_accounts

@accd_id, @auc_id, @call_price, @call_amount @accd_id, @accd_email, @accd_fname, @accd_lname, @country_code, @accd_city, @accd_pcode, @accd_addr, @accd_phone @accd_id, @auctype_id, @auc_productName, @auc_productDesc, @cat_id, @auc_amount, @auc_startPrice, @auc_reservedPrice, @auc_blitzPrice, @auc_stepPrice, @currency_id, @auc_minutesNo @accd_id, @auc_id, @call_price, @call_amount @cat_name @sellerAcc_id, @buyerAcc_id, @sc_productName, @sc_amount, @sc_price, @currency_id, @callArchive_id @acc_name, @acc_pass, @acctype_id Parametri

Nume INSERT SELECT + DELETE

Descriere

13

move_AuctionsToAuctionsArchiveOnEnd muta toate licitatiile finalizate din Auctions in AutionsArchive, muta toate strigarile corespunzatoare licitatiilor finalizate din Calls in CallsArchive se executa intr-un job din minut in minut move_CallsToCallsArchiveByAucId muta strigarile unei licitatii din @auc_id Calls in arhiva CallsArchive Nume SELECT sel_AccountsDetailsById Descriere Parametri @acc_id

selecteza informatiile din tabela AccountsDetails dupa id sel_AccountsDetailsShort selecteza informatiile principale din tabela AccountsDetails pentru toate datele sel_AuctionTypes selecteaza informatiile din tabela AuctionTypes pentru toate datele sel_AuctionsArchiveById selecteza informatiile din tabela AuctionsArchive dupa id sel_AuctionsArchiveForContracts selecteaza informatiile necesare pentru Contracte din tabela AuctionsArchive pentru toate datele sel_AuctionsArchiveShortByCatId selecteza informatiile principale din tabela AuctionsArchive dupa categorie sel_AuctionsById selecteza informatiile din tabela Accounts dupa id sel_AuctionsInvalid selecteaza informatiile din tabela AuctionTypes pentru toate licitatiilor nevalidate sel_AuctionsShortByCatId selecteza informatiile principale din tabela Auctions dupa categorie sel_CallsArchiveByAucArchiveId selecteza informatiile din tabela CallsArchive dupa id licitatia din arhiva sel_CallsArchiveWinnerByAucArchiveId selecteza informatiile din tabela CallsArchive pentru strigarile castigatoare dupa id licitatia din arhiva sel_CallsArchiveWinnerByCallId selecteza informatiile castigatoare din tabela CallsArchive dupa id

@auc_id

@cat_id

@auc_id

@cat_id @aucArchive_id @aucArchive_id

@call_id

14

sel_CallsByAucId sel_Categories sel_CategoriesById sel_Countries sel_Currencies sel_CurrenciesForeign sel_SalesContracts sel_accounts sel_accountsById sel_accountsByName sel_accountsByNamePass sel_accounttypes

selecteza informatiile din tabela Calls dupa id selecteza informatiile din tabela Categories pentru toate datele selecteza informatiile din tabela Categories dupa id selecteza informatiile din tabela Countries pentru toate datele selecteza informatiile din tabela Currencies pentru toate datele selecteza informatiile din tabela Currencies pentru valuta selecteza informatiile din tabela SalesContracts pentru toate datele selecteza informatiile din tabela Accounts pentru toate datele selecteza informatiile din tabela Accounts dupa id selecteza informatiile din tabela Accounts dupa nume selecteza informatiile din tabela Accounts dupa nume si parola selecteza informatiile din tabela AccountTypes pentru toate datele Descriere

@auc_id

@cat_id

@acc_id @acc_name @acc_name, @acc_pass

Nume UPDATE upd_AccountsActivateById

Parametri @acc_id @acc_id @auc_id @call_id, @accd_id, @auc_id, @call_price, @call_amount @cat_id, @cat_name

update in tabela Accounts; activare dupa id upd_AccountsDezactivateById update in tabela Accounts; dezactivare dupa id upd_AuctionsValidateById update in tabela Auctions; validare dupa id upd_CallsById update in tabela Auctions; schimbare oferta dupa id

upd_CategoriesById

update in tabela Auctions; schimbare nume categorie dupa id

15

4.6

Functiii utilizator Descriere Returneaza bit indicand daca categoria exista sau nu; cautare dupa nume categorie Returneaza bit indicand daca categoria exista sau nu; cautare dupa nume categorie excluzand din cautare categoria cu id precizat Returneaza id licitatie pentru o strigare; cautare dupa id strigare Returneaza categoria unei licitatii din arhiva; cautare dupa id licitatie arhiva Returneaza tipul unei licitatii din arhiva; cautare dupa id licitatie arhiva Returneaza o tabela cu toate id-urile licitatiilor active care se vor termina pana la data specificata Returneaza o tabela cu idurile si cantitatea corespunzatoare pentru strigarile castigatoare ale unei licitatii din arhiva Returneaza un bit indicand daca strigarea din arhiva are sau nu contract; cautare dupa id strigare arhiva Returneaza un bit indicand daca toate strigarile unei licitaii din arhiva au sau nu contracte Returneaza numarul licitatiilor din arhiva pentru o categorie Returneaza pretul final pentru o licitatie din arhiva Returneaza numarul licitatiilor active pentru o categorie Returneaza ultimul pret Parametri @category_name

Nume CategoryExistsByName

CategoryExistsByNameExcludeCatId

@category_name, @cat_id

GetAucArchiveIdByCallArchiveId GetAuctionArchiveCategoryById GetAuctionsArchiveType GetEndedAuctionsByDate

@callArchive_id @aucArchive_id @aucArchive_id @date

GetWinnerCallsByAucArchiveId

@aucArchive_id

HasSaleContractByCallArchiveId

@callArchive_id

HaveAllCallsSaleContractByAucArch iveId getAuctionArchiveCountByCatId getAuctionArchiveWinnerPrice getAuctionCountByCatId getAuctionCurrentPrice

@aucArchive_id

@cat_id @auc_id @cat_id @auc_id

16

getCallCountByAucId getRemainAmountByCallArchiveId

isAccountUsed

isAuctionStarter

isCategoryUsed

pentru o licitatie activa Returneaza numarul strigarilor pentru o licitatie activa Returneaza cantitatea ramasa disponibila pentru o strigare din arhiva; utila in momentul in care se aleg castigatorii la licitatia olandeza; cautarea dupa id licitatie arhiva Returneaza un bit indicand daca contul respectiv a fost sau nu implicat in licitatii Returneaza bit indicand daca contul respectiv este vanzatorul unei licitatii; cautare dupa id cont si id licitatie Returneaza bit indicand daca categoria respectiva are sau nu licitatii active sau inchise

@auc_id @call_id

@acc_id

@auc_id, @acc_id

@cat_id

4.7

Cod sursa reprezentativ

Delete CREATE PROCEDURE [dbo].[del_accountsById] @acc_id int AS DELETE FROM Accounts WHERE (acc_id = @acc_id) GO Insert CREATE PROCEDURE [dbo].[ins_Auctions] @accd_id int, @auctype_id smallint, @auc_productName varchar (50) , @auc_productDesc varchar (4000) , @cat_id int, @auc_amount bigint, @auc_startPrice float, @auc_reservedPrice float, @auc_blitzPrice float, @auc_stepPrice float, @currency_id smallint, @auc_minutesNo smallint AS INSERT INTO Auctions 17

(accd_id, auctype_id, auc_productName, auc_productDesc, cat_id, auc_amount, auc_startPrice, auc_reservedPrice, auc_blitzPrice, auc_stepPrice, currency_id, auc_startDate, auc_minutesNo) VALUES (@accd_id, @auctype_id, @auc_productName, @auc_productDesc, @cat_id, @auc_amount, @auc_startPrice, @auc_reservedPrice, @auc_blitzPrice, @auc_stepPrice, @currency_id, getdate(), @auc_minutesNo) GO Insert Select CREATE PROCEDURE [dbo].[move_AuctionsToAuctionsArchiveOnEnd] AS DECLARE @date datetime SET @date = GETDATE() --insert ended auctions is AuctionsArchive INSERT INTO AuctionsArchive (auc_id, accd_id, auctype_id, auc_productName, auc_productDesc, cat_id, auc_amount, auc_startPrice, auc_reservedPrice, auc_blitzPrice, auc_stepPrice, currency_id, auc_startDate, auc_endDate) SELECT auc_id, accd_id, auctype_id, auc_productName, auc_productDesc, cat_id, auc_amount, auc_startPrice, auc_reservedPrice, auc_blitzPrice, auc_stepPrice, currency_id, auc_startDate, GETDATE() FROM Auctions WHERE auc_id IN (SELECT auc_id FROM dbo.GetEndedAuctionsByDate(@date)) --iterate throught ended auctions DECLARE @auc_id bigint DECLARE iterateCursor CURSOR FOR SELECT auc_id FROM dbo.GetEndedAuctionsByDate(@date) OPEN iterateCursor WHILE (1=1) BEGIN FETCH NEXT FROM iterateCursor INTO @auc_id IF @@fetch_status = -1 BREAK --move action calls EXEC move_CallsToCallsArchiveByAucId @auc_id END CLOSE iterateCursor DEALLOCATE iterateCursor --delete auctions DELETE FROM Auctions WHERE auc_id IN (SELECT auc_id FROM dbo.GetEndedAuctionsByDate(@date)) GO 18

Select CREATE PROCEDURE [dbo].[sel_CallsArchiveWinnerByAucArchiveId] @aucArchive_id bigint AS SELECT cad.call_id, accd_id, accd_fname, accd_lname, call_price, call_winnerAmount, currency_name, call_date FROM CallsArchiveDetails cad INNER JOIN dbo.GetWinnerCallsByAucArchiveId(@aucArchive_id) wc ON cad.call_id = wc.call_id ORDER BY call_price DESC, call_amount DESC, call_date ASC GO Update CREATE PROCEDURE [dbo].[upd_AccountsDezactivateById] @acc_id int AS UPDATE Accounts SET acc_isActive = 0 WHERE (acc_id = @acc_id) GO User Function CREATE FUNCTION [dbo].[HaveAllCallsSaleContractByAucArchiveId] ( @aucArchive_id bigint ) RETURNS bit AS BEGIN DECLARE @haveAllCallsContract bit SET @haveAllCallsContract = -1 --iterate throught winner calls DECLARE @call_id bigint DECLARE iterateCursor CURSOR FOR SELECT call_id FROM dbo.GetWinnerCallsByAucArchiveId(@aucArchive_id) OPEN iterateCursor WHILE (1=1) BEGIN FETCH NEXT FROM iterateCursor INTO @call_id IF @@fetch_status = -1 BREAK --if winner call has no contract IF dbo.HasSaleContractByCallArchiveId(@call_id) = 0 BEGIN SET @haveAllCallsContract = 0 BREAK END END

19

CLOSE iterateCursor DEALLOCATE iterateCursor RETURN @haveAllCallsContract END

20

5. Logica aplicatiei
5.1 Diagrama cazurilor de utilizare

21

22

5.2 5.2.1

Cazuri de utilizare User Login

Descriere Sistemul memoreaza in Session id-ul utilizatorului. Acest id corespunde cheiei primare din tabela Accounts si este folosit pentru a identifica persoanele care participa la licitatii. Diagrama de activitati

Imagine din aplicatie

Cod sursa reprezentativ Path = /login/default.asp Dim op, sql, acid Dim strName, strPass Dim errName, errPass op = Request.QueryString("op")

23

op = trim(op & "") If strcomp(op, "logout") = 0 Then Session("AccountId") = "" End If Select Case op Case "v" strName = Request.Form("txtUser") strPass = Request.Form("txtPass") If strcomp(strName, "")<>0 And strcomp(strPass, "")<>0 Then sql = "sel_accountsByNamePass '" & strName & "', '" & strPass & "'" accId = ScalarExecuteProcedure(sql) If Not isNull (accId) Then Session("AccountId") = accId Response.Redirect("../default.asp") Else errName = "Invalid Account" End If Else If strcomp(strName, "")=0 Then errName = "*" If strcomp(strPass, "")=0 Then errPass = "*" End If Case Else End Select

5.2.2

Inregistrare

Descriere Pentru a putea scoate la licitatie diverse produse sau servicii si pentru a cumpara produse utilizatorii trebuie sa fie inregistrati in baza de date. Inregistrarea este gratuita si se face completand un formular cu datele personale. Datele legate de cont sunt inserate in tabela Accounts iar datele personale in tabela AccountsDetails; legatura intre cele 2 tabele este de 1 la 1.

24

Diagrama de activitati

Imagine din aplicatie

25

Cod sursa reprezentativ Path = /login/register.asp op = Request.QueryString("op") op = trim(op & "") Select Case op Case "v" strUser = Request.Form("txtUser") strPass = Request.Form("txtPass") strEmail = Request.Form("txtEmail") strFName = Request.Form("txtFName") strLName = Request.Form("txtLName") strCountry = Request.Form("selCountry") strCity = Request.Form("txtCity") strPCode = Request.Form("txtPCode") strAddr = Request.Form("txaAddr") strPhone = Request.Form("txtPhone") strOptionsCountry = replace(strOptionsCountry, "value=""" & strCountry & """", "value=""" & strCountry & """ selected") blnForm = True If strcomp(trim(strUser & ""),"") = 0 Then errUser = "*" blnForm = False Else If Not isNull (ScalarExecuteProcedure("sel_accountsByName '" & strUser & "'")) Then errUser = "Contul exista" blnForm = False End If End If If strcomp(trim(strPass & "") ,"") = 0 Then errPass = "*" blnForm = False End If If strcomp(trim(strEmail & ""),"") = 0 Then errEmail = "*" blnForm = False End If If strcomp(trim(strFName & ""),"") = 0 Then errFName = "*" blnForm = False End If If strcomp(trim(strLName & ""),"") = 0 Then errLName = "*" blnForm = False End If If blnForm = True Then 'db ins_accounts sql = "ins_accounts '" & strUser & "', '" & strPass & "'" intAccId = ScalarExecuteProcedure(sql) 26

intAccId = cint(intAccId) 'ins_AccountsDetails sql = "ins_AccountsDetails " & intAccId & ",'" & strEmail & "', '" & strFName & "','" & strLName & "','" & strCountry & "','" & strCity & "','" & strPCode & "','" & strAddr & "','" & strPhone & "'" ConnExecuteProcedure(sql) Session("AccountId") = intAccId End If Case Else End Select

5.2.3

Cautare licitatii

Descriere Cautarea licitatiilor se poate face in doua moduri : dupa categoriile din care acestea fac parte sau dupa nume produs, nume vanzator si pret. Meniul categorii este generat din tabela Categories si afiseaza totodata si numarul de licitatii active/finalizate corespunzatoare. Dupa ce s-a executat o cautare sistemul afiseaza informatiile principale ale licitatiilor gasite, informatii preluate din tabela Auctions sau AuctionsArchive. Diagrama de activitati

27

Imagini din aplicatie Cautare dupa categorie

Id categorie

Cautare dupa cuvant cheie

C++

Cuvant cautat

Tip cautare

Cod sursa reprezentativ Path = /auction/default.asp blnIsIntro = False blnAllUnchecked = True strName = trim(Request.QueryString("Name") & "") strSeller = trim(Request.QueryString("Seller") & "") strPrice = trim(Request.QueryString("Price") & "") If blnAuctionIsFinalize = True Then sqlSearch = sqlSearch &_ 28

" SELECT auc_id, auc_productName, dbo.getAuctionArchiveWinnerPrice (auc_id), currency_name, auc_startDate, auc_endDate, auc_productDesc, auctype_id, dbo.HaveAllCallsSaleContractByAucArchiveId(auc_id)"&_ " FROM AuctionsArchiveDetails WHERE " Else sqlSearch = sqlSearch &_ " SELECT auc_id, auc_productName, dbo.getAuctionCurrentPrice(auc_id), currency_name, auc_startDate, EndDate, auc_productDesc, auctype_id "&_ " FROM AuctionsDetails WHERE " End If sqlClause= "" If strcomp(strName, "") <> 0 Then sqlClause = sqlClause & " OR (auc_productName LIKE '%" & strSearchText & "%') OR (auc_productDesc LIKE '%" & strSearchText & "%') " blnAllUnchecked = False End If If strcomp(strSeller, "") <> 0 Then sqlClause = sqlClause & " OR (accd_fname LIKE '%" & strSearchText & "%') OR (accd_lname LIKE '%" & strSearchText & "%') OR (accd_email LIKE '%" & strSearchText & "%') " blnAllUnchecked = False End If If strcomp(strPrice, "") <> 0 Then If isNumeric(strSearchText) = True Then sqlClause = sqlClause & " OR (dbo.getAuctionCurrentPrice(auc_id) = " & strSearchText & ") " End If blnAllUnchecked = False End If If blnAllUnchecked = True Then sqlClause = sqlClause & " OR (auc_productName LIKE '%" & strSearchText & "%') OR (auc_productDesc LIKE '%" & strSearchText & "%') " sqlClause = sqlClause & " OR (accd_fname LIKE '%" & strSearchText & "%') OR (accd_lname LIKE '%" & strSearchText & "%') OR (accd_email LIKE '%" & strSearchText & "%') " If isNumeric(strSearchText) = True Then sqlClause = sqlClause & " OR (dbo.getAuctionCurrentPrice(auc_id) = " & strSearchText & ") " End If End If sqlClause = right(sqlClause, len(sqlClause) - 4) sqlSearch = sqlSearch & sqlClause 'enables paging call enablePaging(PAGE_SIZE) arrSell = runProcedurePseudoPage(sqlSearch, PAGE_SIZE, intNrPages, intNrRecords, intPage) 29

'builds paging links call buildPagingLinks(5) SelAuctionsShort(arrSell)

5.2.4

Licitare produs

Descriere Licitarea implica totodata afisarea informatiilor despre produs : pretul curent, istoria licitatiei, detalii legate de vanzator, caracteristicile produsului, toate cu o intarziere de maxim 5 secunde(pagina are auto refresh setat la 5 secunde). Oferta user-ului se face in ticuri. Pretul se stabileste calculand pretul curent + pasul de licitatie * numar ticuri. Calculul se face atat server-side cat si client side pentru usurinta utilizatorului. Odata facuta oferta, daca aceasta se incadreaza in tiparele licitatie este inregistrata si afisata tuturor utilizatorilor cu o intarziere de maxim 5 secunde. Diagrama de activitati

30

Imagine din aplicatie

Cod sursa reprezentativ Path = /auction/product_details.asp validarea si adaugarea noi oferte Select Case op Case "v" strAmount = Trim(Request.Form("txtAmount") & "") strPrice = Trim(Request.Form("txtPrice") & "") arrSellDetail = RecordExecuteProcedure("sel_AuctionsById " & sellId) 'set ComputePrice If cint(arrSellDetail(12, 0)) = 1 Then 'standard auction If strcomp(strPrice, "") <> 0 Then dblComputePrice = CDbl(arrSellDetail(8, 0)) + (CDbl(arrSellDetail(7, 0)) * CDbl(strPrice)) End If Else 'dutch auction If strcomp(strPrice, "") <> 0 Then dblComputePrice = CDbl(arrSellDetail(6, 0)) + (CDbl(arrSellDetail(7, 0)) * CDbl(strPrice)) End If End If blnForm = True If strcomp(trim(strAmount & ""),"") = 0 Then 31

errAmount = "*" blnForm = False Else If Not IsNumeric(strAmount) Then errAmount = "Numar invalid" blnForm = False Else If cdbl(strAmount) <= 0 Then errAmount = "Trebuie sa fie mai mare decat 0" blnForm = False Else If cdbl(strAmount) > cdbl(arrSellDetail(6, 0)) Then errAmount = "Trebuie sa fie mai mica decat cantitatea pusa spre vanzare" & arrSellDetail(6, 0) blnForm = False End If End If End If End If If strcomp(trim(strPrice & ""),"") = 0 Then errPrice = "Pretul nu e setat" blnForm = False Else If Not IsNumeric(strPrice) Then errPrice = "Numar invalid" blnForm = False Else If cint(arrSellDetail(12, 0)) = 1 Then 'standard auction If cdbl(strPrice) <= 0 Then errPrice = "Pretul trebuie sa fie mai mare decat pretul curent " & arrSellDetail(8, 0) blnForm = False End If Else 'dutch auction If cdbl(strPrice) > 0 Then errPrice = "Pretul trebuie sa fie mai mic sau egal cu pretul de start " & arrSellDetail(6, 0) blnForm = False End If End If End If End If If isSellStarter = True Then blnForm = False End If If blnForm = True Then 32

If cint(arrSellDetail(12, 0)) = 1 Then 'standard auction ConnExecuteProcedure("ins_Calls " & Session("AccountId") & ", " & sellId & ", " & dblComputePrice & ", " & strAmount) Else 'dutch auction If Not CBool(ScalarExecuteProcedure("insUpd_Calls " & Session("AccountId") & ", " & sellId & ", " & dblComputePrice & ", " & strAmount)) = False Then errPrice = "Mai aveti deja o oferta, pentru a va schima oferta trebuie sa micsorati pretul sau sa mariti cantitatea" End If End If ConnExecuteProcedure("move_AuctionsToAuctionsArchiveOnEnd") 'set current price standard If cint(arrSellDetail(12, 0)) = 1 Then dblCurrentPrice = dblCurrentPrice End If 'set form fields to empty strAmount = "" strPrice = "" dblComputePrice = "" 'javascript injection Response.Write "<script>setCookie(""Price"", """");setCookie(""Amount"", """");</script>" End If Case Else End Select Path = /auction/product_details.asp citirea datelor licitatie din baza de date isSellStarter = False If cbool(ScalarExecuteProcedure("SELECT dbo.isAuctionStarter(" & sellId & ", " & Session("AccountId") & ")")) = True Then isSellStarter = True End If If blnIsIntro = False Then If blnAuctionIsFinalize = False Then arrSellDetail = RecordExecuteProcedure("sel_AuctionsById " & sellId) 'auction was ended in the middle of an auction If isNull(arrSellDetail) Then arrSellDetail = RecordExecuteProcedure("sel_AuctionsArchiveById " & sellId) Session("AcutionIsFinalize") = -1 blnAuctionIsFinalize = True End If Else arrSellDetail = RecordExecuteProcedure("sel_AuctionsArchiveById " & sellId) 33

End If 'fname 'lname 'email 'productName 'productDesc 'amount 'startPrice 'stepPrice 'AuctionCurrentPrice 'currency_name 'startDate 'EndDate 'auctype_id 'auctype_name 'cat_id

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

If Not isArray(arrSellDetail) Then blnIsIntro = True Else If IsNull(arrSellDetail(8, 0)) = True Then 'no auctions were made dblComputePrice = arrSellDetail(6, 0) dblCurrentPrice = arrSellDetail(6, 0) Else dblComputePrice = arrSellDetail(8, 0) dblCurrentPrice = arrSellDetail(8, 0) End If End If Path = /auction/product_details.asp istoria licitatie 'enables paging call enablePaging(5) If blnAuctionIsFinalize = False Then arrAuction = runProcedurePseudoPage("sel_CallsByAucId " & sellId, PAGE_SIZE, intNrPages, intNrRecords, intPage) Else arrAuction = runProcedurePseudoPage("sel_CallsArchiveByAucArchiveId " & sellId, PAGE_SIZE, intNrPages, intNrRecords, intPage) End If 'builds paging links call buildPagingLinks(5) 'a.auc_id 0 'd.accd_fname 1 'd.accd_lname 2 'a.auc_price 3 'a.auc_amount 4 'c.currency_name 5 'a.auc_date 6 34

If isArray(arrAuction) Then For jj = 0 To ubound(arrAuction, 2) strAuctionRows = strAuctionRows &_ "<tr>"&_ "<td>" & arrAuction(1, jj) & " " & arrAuction(2, jj) & "</td>"&_ "<td>" & arrAuction(4, jj) & "</td>"&_ "<td>" & FormatPrice(arrAuction(3, jj)) & " " & arrAuction(5, jj) & "</td>"&_ "<td>" & arrAuction(6, jj) & "</td>"&_ "</tr>" Next If CInt(ubound(arrAuction, 2) + 1) < CInt(PAGE_SIZE) Then For kk = 0 to (CInt(PAGE_SIZE) - CInt(ubound(arrAuction, 2)) - 2) strAuctionRows = strAuctionRows & "<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>" Next End If End If

5.2.5

Vanzare produs

Descriere Inscrierea unui produs pentru licitatie se face completand un formular cu datele produsului, tipul licitatie, pretul de pornire, pretul rezervat(obligatoriu pentru licitatia olandeza). Pentru a putea vinde un produs vanzatorul trebuie sa fie logat.

35

Diagrama de activitati

36

Imagine din aplicatie

Cod sursa reprezentativ Path = /auction/sell.asp op = Request.QueryString("op") op = trim(op & "") Select Case op Case "v" blnForm = True If strcomp(trim(strProductName & ""),"") = 0 Then errProductName = "*" blnForm = False End If If strcomp(trim(strAmount & ""),"") = 0 Then ' Else If Not IsNumeric(strAmount) Then errAmount = "Invalid number" blnForm = False Else If cdbl(strAmount) <= 0 Then errAmount = "Trebuie sa fie mai mare decat 0" blnForm = False End If End If End If If strcomp(trim(strStartPrice & ""),"") = 0 Then errStartPrice = "*" blnForm = False Else

37

If Not IsNumeric(strStartPrice) Then errStartPrice = "Numar invalid" blnForm = False Else If cdbl(strStartPrice) <= 0 Then errStartPrice = "Trebuie sa fie mai mare decat 0" blnForm = False End If End If End If If strcomp(trim(strStepPrice & ""),"") = 0 Then errStepPrice = "*" blnForm = False Else If Not IsNumeric(strStepPrice) Then errStepPrice = "Invalid number" blnForm = False Else If cdbl(strStepPrice) <= 0 Then errStepPrice = "Trebuie sa fie mai mare decat 0" blnForm = False End If End If End If If strcomp(trim(strReservedPrice & ""),"") = 0 Then ' Else If Not IsNumeric(strReservedPrice) Then errReservedPrice = "Invalid number" blnForm = False Else If cdbl(strReservedPrice) <= 0 Then errReservedPrice = "Trebuie sa fie mai mare decat 0" blnForm = False Else If cint(strAuctionType) = 1 Then 'standard auction If cdbl(strReservedPrice) <= cdbl(strStartPrice) Then errReservedPrice = "Trebuie sa fie mai mare decat pretul de pornire " & strStartPrice blnForm = False End If Else 'dutch auction If cdbl(strReservedPrice) >= cdbl(strStartPrice) Then errReservedPrice = "Trebuie sa fie mai mic decat pretul de pornire " & strStartPrice blnForm = False End If End If 38

End If End If End If If strcomp(trim(strBlitzPrice & ""),"") = 0 Then ' Else If Not IsNumeric(strBlitzPrice) Then errBlitzPrice = "Invalid number" blnForm = False Else If cdbl(strBlitzPrice) <= 0 Then errBlitzPrice = "Trebuie sa fie mai mare decat 0" blnForm = False Else If cdbl(strBlitzPrice) <= cdbl(strStartPrice) Then errBlitzPrice = "Trebuie sa fie mai mare decat pretul de pornire " & strStartPrice blnForm = False End If End If End If End If If cint(strAuctionType) = 2 Then If strcomp(trim(strReservedPrice & ""),"") = 0 Then errReservedPrice = "*" blnForm = False End If If strcomp(trim(strAmount & ""),"") = 0 Then errAmount = "*" blnForm = False End If End If If blnForm = True Then If cint(strAuctionType) = 1 Then call ins_SellsStandard Else call ins_SellsDutch End If End If Case Else strAuctionType = 1 End Select

39

5.3 5.3.1

Cazuri de utilizare Administrator Gestionare categorii

Descriere Administratorul poate adauga, edita, sterge categoriile existente. Diagrama de activitati

40

Imagine din aplicatie

Cod sursa reprezentativ Path = /common/menu_left.asp cid = Request.QueryString("cid") cop = trim(Request.QueryString("cop") & "") Select Case cop Case "ec" formAction = "?cid=" & cid & "&cop=vec" blnCForm = False strCategoryName = ScalarExecuteProcedure("sel_categoriesById " & cid) Case "vec" formAction = "?cid=" & cid & "&cop=vec" strCategoryName = Request.Form("txtCategoryName") blnCForm = True If strcomp(trim(strCategoryName & ""),"") = 0 Then errCategory = "*" blnCForm = False Else If cbool(ScalarExecuteProcedure("SELECT dbo.CategoryExistsByNameExcludeCatId('" & strCategoryName & "'," & cid & ")")) = True Then errCategory = "<br />Categoria exista" blnCForm = False End If End If If blnCForm = True Then ConnExecuteProcedure("upd_categoriesById " & cid & ",'" & strCategoryName & "'") strMessage = "Categoria a fost editata!" End If

41

Case "ac" formAction = "?cop=vac" blnCForm = False Case "vac" formAction = "?cop=vac" strCategoryName = Request.Form("txtCategoryName") blnCForm = True If strcomp(trim(strCategoryName & ""),"") = 0 Then errCategory = "*" blnCForm = False Else If cbool(ScalarExecuteProcedure("SELECT dbo.CategoryExistsByName('" & strCategoryName & "')")) = True Then errCategory = "<br />Categoria exista" blnCForm = False End If End If If blnCForm = True Then ConnExecuteProcedure("ins_categories '" & strCategoryName & "'") strMessage = "Categoria a fost creata!" End If Case "dc" If cbool(ScalarExecuteProcedure("SELECT dbo.isCategoryUsed(" & cid & ")")) = False Then ConnExecuteProcedure("del_CategoriesById " & cid) Else strMessage = "Categoria este implicata in liciatatii, nu poate fi stersa!" End If Case Else End Select

5.3.2

Gestionare conturi

Descriere Administratorul poate vizualiza detaliile conturile, crea conturi noi atat de user cat si de admin, activa, dezactiva sau sterge conturile existente.

42

Diagrama de activitati

43

Imagine din aplicatie

Cod sursa reprezentativ Path = /admin/default.asp vizualizare detalii, adaugare, activare, dezactivare, stergere conturi op = Request.QueryString("op") op = trim(op & "") id = Request.QueryString("id") Select Case op 'display account details Case "s" 'db sel accountsdetails arrRows = RecordExecuteProcedure("sel_AccountsDetailsById " & id) If isArray(arrRows) Then strUser = arrRows(0, 0) strType = arrRows(1, 0) strEmail = arrRows(4, 0) strFName = arrRows(2, 0) strLName = arrRows(3, 0) strCountry = arrRows(5, 0) strCity = arrRows(6, 0) strPCode = arrRows(7, 0) strAddr = arrRows(8, 0) strPhone = arrRows(9, 0) End If 'add account Case "aa"

44

'delete account Case "d" If cbool(ScalarExecuteProcedure("SELECT dbo.isAccountUsed(" & id & ")")) = False Then ConnExecuteProcedure("del_accountsById " & id ) Else strMessage = "Contul este implicat in liciatatii, nu poate fi sters!" End If 'activate account Case "act" ConnExecuteProcedure("upd_AccountsActivateById " & id ) strMessage = "Contul a fost activat" 'dezactivate account Case "dez" ConnExecuteProcedure("upd_AccountsDezactivateById " & id ) strMessage = "Contul a fost dezactivat" 'valid register Case "vr" strUser = Request.Form("txtUser") strPass = Request.Form("txtPass") strType = Request.Form("selAccountType") strEmail = Request.Form("txtEmail") strFName = Request.Form("txtFName") strLName = Request.Form("txtLName") strCountry = Request.Form("selCountry") strCity = Request.Form("txtCity") strPCode = Request.Form("txtPCode") strAddr = Request.Form("txaAddr") strPhone = Request.Form("txtPhone") strOptionsType = replace(strOptionsType, "value=""" & strType & """", "value=""" & strType & """ selected") strOptionsCountry = replace(strOptionsCountry, "value=""" & strCountry & """", "value=""" & strCountry & """ selected") blnForm = True If strcomp(trim(strUser & ""),"") = 0 Then errUser = "*" blnForm = False Else If Not isNull (ScalarExecuteProcedure("sel_accountsByName '" & strUser & "'")) Then errUser = "Contul exista" blnForm = False End If End If If strcomp(trim(strPass & "") ,"") = 0 Then errPass = "*" blnForm = False End If If strcomp(trim(strEmail & ""),"") = 0 Then errEmail = "*" blnForm = False 45

End If If strcomp(trim(strFName & ""),"") = 0 Then errFName = "*" blnForm = False End If If strcomp(trim(strLName & ""),"") = 0 Then errLName = "*" blnForm = False End If If blnForm = True Then 'db ins_accounts sql = "ins_accounts '" & strUser & "', '" & strPass & "', " & strType intAccId = ScalarExecuteProcedure(sql) intAccId = cint(intAccId) 'ins_AccountsDetails sql = "ins_AccountsDetails " & intAccId & ",'" & strEmail & "', '" & strFName & "','" & strLName & "','" & strCountry & "','" & strCity & "','" & strPCode & "','" & strAddr & "','" & strPhone & "'" ConnExecuteProcedure(sql) strMessage = "Contul a fost creat!" End If Case Else ' End Select Path = /admin/default.asp contruirea tabelei de conturi 'enables paging call enablePaging(PAGE_SIZE) 'db sel accounts arrRows = runProcedurePseudoPage("sel_AccountsDetailsShort", PAGE_SIZE, intNrPages, intNrRecords, intPage) 'builds paging links call buildPagingLinks(5) 'acc_id, 0 'accd_fname, 1 'accd_lname, 2 'accd_email, 3 'acc_name, 4 'acctype_name 5 'acctype_id 6 'acc_isActive 7 If isArray(arrRows) Then For i = 0 To ubound(arrRows, 2) strAccounts = strAccounts & "<tr>" If isNull(arrRows(1, i)) Then strAccounts = strAccounts & "<td>&nbsp;</td>" Else strAccounts = strAccounts & "<td><a href=""default.asp? 46

op=s&id=" & arrRows(0, i) & "&page=" & Request.QueryString("page") & """>" & arrRows(1, i) & " " & arrRows(2, i) & "</a></td>" End If If isNull(arrRows(3, i)) Then strAccounts = strAccounts & "<td>&nbsp;</td>" Else strAccounts = strAccounts & "<td>" & arrRows(3, i) & "</td>" End If strAccounts = strAccounts & "<td>" & arrRows(4, i) & "</td>" &_ "<td>" & arrRows(5, i) & "</td>" &_ "<td>" & arrRows(7, i) & "</td>" &_ "<td>"&_ "<a href=""default.asp? op=d&id=" & arrRows(0, i) & "&page=" & Request.QueryString("page") & """>delete</a>/"&_ "<a href=""default.asp? op=act&id=" & arrRows(0, i) & "&page=" & Request.QueryString("page") &""">activate</a>/"&_ "<a href=""default.asp? op=dez&id=" & arrRows(0, i) & "&page=" & Request.QueryString("page") &""">dezactivate</a> "&_ "</td>" &_ "</tr>" Next End If

5.3.3

Gestionare contracte

Descriere Administratorul poate crea contracte pentru licitatiile incheiate sau le poate sterge.

47

Diagrama de activitati

Imagini din aplicatie

48

Cod sursa reprezentativ Path = /admin/commercial_deal.asp Sub ins_SaleContract Dim objConn, objCmd, objRS Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open strConnection Set objCmd = Server.CreateObject("ADODB.Command") With objCmd .ActiveConnection = objConn .CommandType = adCmdStoredProc .CommandText = "ins_SalesContracts" .Parameters.Append .CreateParameter("@sellerAcc_id", adInteger, adParamInput, 4 , strSellerId) .Parameters.Append .CreateParameter("@buyerAcc_id", adInteger, adParamInput, 4 , strBuyer) .Parameters.Append .CreateParameter("@sc_productName", adVarchar, adParamInput, 100, strProductName) .Parameters.Append .CreateParameter("@sc_amount", adInteger, adParamInput, 4 , strAmount)

49

.Parameters.Append .CreateParameter("@sc_price", adDouble, adParamInput, 8, strPrice) .Parameters.Append .CreateParameter("@currency_id", adSmallInt, adParamInput, 2, strCurrencyId) .Parameters.Append .CreateParameter("@callArchive_id", adBigInt, adParamInput, 8, strCall) Set objRS = .Execute End With If CBool(objRs.Fields.Item(0).Value) = True Then strMessage = "<br />Contratul a fost adaugat" Else strMessage = "<br />Contratul exista deja" End If Set objCmd = Nothing objConn.close Set objConn = Nothing End Sub

5.3.4

Gestionare licitatii

Descriere Inainte ca o licitatie sa inceapa aceasta trebuie validata. Administratorul vede datale importante ale licitatiilor postate nevalidate si poate sterge sau valida licitatia respectiva.

50

Diagrama de activitati

Imagine din aplicatie

Cod sursa reprezentativ Path = /admin/ validate_auctions.asp op = Request.QueryString("op") op = trim(op & "") id = Request.QueryString("id") If isAdmin = True Then 51

Select Case op Case "del" ConnExecuteProcedure("del_AuctionsById " & id) Case "val" ConnExecuteProcedure("upd_AuctionsValidateById " & id) Case Else ' End Select End If 'enables paging call enablePaging(PAGE_SIZE) 'db sel accounts arrRows = runProcedurePseudoPage("sel_AuctionsInvalid", PAGE_SIZE, intNrPages, intNrRecords, intPage) 'builds paging links call buildPagingLinks(5) 'auc_id 0 'auctype_id 1 'accd_fname 2 'accd_lname 3 'auc_productName 4 'auc_productDesc 5 'auc_startPrice 6 'auc_stepPrice 7 'currency_name 8 'auc_startDate 9 'auc_minutesNo 10 If isArray(arrRows) Then For i = 0 To ubound(arrRows, 2) strInvalidAuctions = strInvalidAuctions & "<tr>" If CInt(arrRows(1, i)) = 1 Then strInvalidAuctions = strInvalidAuctions & "<td>S</td>" Else strInvalidAuctions = strInvalidAuctions & "<td>O</td>" End If strInvalidAuctions = strInvalidAuctions &_ "<td>" & arrRows(2, i) & " " & arrRows(3, i) & "</td>" &_ "<td>" & arrRows(4, i) & "</td>" If IsNull(arrRows(5, i)) = False AND strcomp(trim(arrRows(5, i) & ""), "") <> 0 Then strInvalidAuctions = strInvalidAuctions & "<td>" & arrRows(5, i) & "</td>" Else strInvalidAuctions = strInvalidAuctions & "<td>&nbsp;</td>" End If 52

strInvalidAuctions = strInvalidAuctions &_ "<td>" & FormatPrice(arrRows(6, i)) & " " & arrRows(8, i) & "</td>" &_ "<td>" & FormatPrice(arrRows(7, i)) & " " & arrRows(8, i) & "</td>" &_ "<td>" & FormatDateTime(arrRows(9, i)) & "</td>" &_ "<td>" & arrRows(10, i) & " minute</td>" &_ "<td><a href=""validate_auctions.asp?op=val&id=" & arrRows(0, i) & """>validate</a>/<a href=""validate_auctions.asp?op=del&id=" & arrRows(0, i) & """>delete</a></td>" &_ "</tr>" Next End If

53

Bibliografie
Cristina Mndru - note de curs Manca Christian note de curs Luca Dan erbnai note de curs Jim Conallen - Building Web Applications with UML, Addison Wesley @2002 Jim Conallen - Modelling Web Architectures with UML, Rational @2000 *** http://www.okazii.ro/help/ *** http://www.eeebid.ro/pages/help/ *** http://e-market.e-licitatie.ro/Start_Regulament.htm *** http://www.smarket.ro/help.php

54

S-ar putea să vă placă și