Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune. stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme
Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Informatica


Index » educatie » Informatica
» Descrierea designului aplicatiei - Centru de testare offline


Descrierea designului aplicatiei - Centru de testare offline


UNIVERSITATEA DE VEST TIMISOARA

FACULTATEA DE MATEMATICA SI INFORMATICA

Centru de testare offline

Descrierea designului aplicatiei

1. Introducere

1.1. Tinta documentului



         Acest document furnizeaza detaliile de design ale aplicatiei de testare offline. Publicul tinta sunt studentii Facultatii de Informatica din cadrul Universitatii de Vest Timisoara.

1.2. Abrevieri

         CLI - Command Line Interface

         GUI - Graphical User Interface

2. Arhitectura aplicatiei

         vezi pag urmatoare

2.1. Server-ul

2.1.1. Nume

         server

2.1.2. Tip

         program C

2.1.3. Descriere

         Aplicatia principala care primeste conexiuni de la diferiti clienti si rezolva cererile acestora prin intermediul comunicatiei cu o baza de date MySQL. Intotdeauna le returneaza un raspuns.

2.1.4. Functii

sigHandler

         descriere:  handler pentru semnale. Gestioneaza semnalele primite si

                              scrie in fisierul de log interpretarea semnalelor primite

         parametri:  numarul semnalului primit

         returneaza: nimic

recvtimeout

         descriere: functia care citeste datele trimise de clienti, insa nu asteapta mai mult de un anumit interval de timp

         parametri:  descriptorul de socket, un pointer la un sir de caractere in care se va depune informatia citita, numarul maxim de caractere ce se doresc a fi citite si timpul de asteptare (in secunde)

         returneaza:  un numar pozitiv  – in caz de succes (numarul de caractere

citite efectiv)

                            - 2 – in cazul in care clientul nu a trimis nimic in intervalul

precizat

                            - 1 – in cazul in care apare o eroare

scrieLog

         descriere: scrie un mesaj in fisierul de log

         parametri: mesajul de adaugat in fisierul de log

         returneaza: void

transformaComanda

         descriere: transforma comanda primita de la client (un sir de caractere) intr-un numar (pentru a fi folosit dupa aceea intr-un switch)

         parametri: mesajul primit de la client

         returneaza: - 1 in cazul in care primeste o comanda necunoscuta

                           un numar pozitiv (reprezantand tipul comenzii) in rest

stergeNewlineDinCoada

         descriere: sterge caracterul de newline de la sfarsitul unei comenzi daca exista (pentru a putea folosi si telnet-ul pe post de client)

         parametri: un sir de caractere

         returneaza: acelasi sir de carectere (fara caracterul de rand nou de la sfarsit, daca a existat)

citesteSubiectul

         descriere: citeste mesajul primit de la clientul “profesor” care contine domeniul, tipul, gradul de dificultate, raspunsul (daca e cazul) si enuntul subiectului ce se doreste adaugat in baza de date, il valideaza si daca este ok va adauga acel subiect in baza de date

         parametri: mesajul primit, un pointer la un sir de caractere care reprezinta mesajul ce va fi returnat clientului (care va fi codul subiectului nou introdus in caz de succes) si un pointer la un sir de caractere ce reprezinta mesajul care se va scrie in fisierul de log

         returneaza: 0 daca a reusit introducerea subiectului in baza de date

                       un numar pozitiv in caz de esec (care depinde de tipul de esec)

schimbaStatusulSubiectului

         descriere: citeste mesajul primit de la clientul “profesor” care contine dorinta de “activare” sau “dezactivare” a subiectului, precum si codul subiectului de modificat, il valideaza si daca este ok va incerca schimabarea status-ului subiectului respectiv

         parametri: mesajul primit, un pointer la un sir de caractere care reprezinta mesajul ce va fi returnat clientului si un pointer la un sir de caractere ce reprezinta mesajul care se va scrie in fisierul de log

         returneaza:

                     0 daca a reusit schimbarea statusului subiectului in baza de date

                     un numar pozitiv in caz de esec (care depinde de tipul de esec)

daTest

         descriere: citeste mesajul primit de la clientul “elev” care contine domeniul dorit pentru test, si numele “elevului”, il vlideaza, iar daca este ok cauta in baza de date daca gaseste un test nerezolvat pe domeniul respectiv si numele respectiv, daca il gaseste il trimite pe ala, daca nu, construieste un test care va contine urmatoarele tipuri de subiecte:

·    2 intrebari usoare de tip grila

·    2 intrebari de grad mediu de dificultate de tip grila

·    2 intrebari mai grele de tip grila

·    o intrebare usoara cu raspuns

   (raspunsul va fi un numar real)

·    o intrebare cu grad mediu de dificultate cu raspuns (raspunsul va fi un program)

·    o intrebare mai dificila cu raspuns

   (raspunsul va fi de asemenea un program)

Domeniul poate fi C sau Java.

Intrebarile se vor alege aleator din baza de date.

         parametri: mesajul primit, un pointer la un sir de caractere care reprezinta mesajul ce va fi returnat clientului (care va fi chiar testul in caz de succes) si un pointer la un sir de caractere ce reprezinta mesajul care se va scrie in fisierul de log

         returneaza: 0 daca a reusit citirea (construirea) si trimiterea testului

                       un numar pozitiv in caz de esec (care depinde de tipul de esec)

citesteRezolvarea

         descriere:  citeste mesajul primit de la clientul “elev” care contine numarul testului, numele “elevului” si rezolvarile la fiecare subiect, il valideaza, iar daca este ok cauta in baza de date raspunsurile corecte la primele 7 subiecte determina punctajul obtinut de “elev”, introduce in baza de date raspunsurile “elevului” si punctajul obtinut de acesta la fiecare subiect in parte (chiar si la subiectele 8 sau 9 daca nu a primit rezolvare la acestea, iar in cazul in care nu a primit rezolvare la niciunul din subiectele 8 si 9 ii calculeaza direct nota finala)

         parametri: mesajul primit, un pointer la un sir de caractere care reprezinta mesajul ce va fi returnat clientului (care, in caz de succes va contine raspunsurile corecte la primele 7 subiecte, raspunsurile date de “elev” precum si punctajul obinut la fiecare dintre acestea, chiar mai mult, daca nu exista rezolvare la subiectele 8 sau 9 i se da da direct punctajul (0) pe acestea, precum si nota obtinuta pana in prezent, care poate sa fie definitiva daca nu exista rezolvare la nici unul din subiectele 8 si 9 sau partiala in caz contrar) si un pointer la un sir de caractere ce reprezinta mesajul care se va scrie in fisierul de log

         returneaza: 0 daca a reusit citirea rezolvarii si acordare punctajelor

                       un numar pozitiv in caz de esec (care depinde de tipul de esec)

trimiteRezolvarea

         descriere: cauta in baza de date daca exista un test care are rezolvare la subiectele 8 si/sau 9

         parametri: un pointer la un sir de caractere care reprezinta mesajul ce va fi returnat clientului (care, in caz de succes va contine enuntul si rezolvarea problemei (problemelor) pentru care exista rezolvare si un pointer la un sir de caractere ce reprezinta mesajul care se va scrie in fisierul de log

         returneaza: 0 daca a reusit comunicarea cu baza de date (se poate sa nu existe o astfel de rezolvare)

                       un numar pozitiv in caz de esec (care depinde de tipul de esec)

citestePunctajele

         descriere: citeste mesajul primit de la clientul “profesor” care contine numarul testului, numele elevului (pentru securitate), si punctajul obtinut de acesta pentru subiectele 8 si/sau 9, il valideaza si daca este ok va testa prin intermediul bazei de date daca nu exista punctajul pe un subiect primit, sau, din contra, nu a primit puncajul pentru un subiect care nu are punctaj, iar daca este ok va introduce punctajele in baza de date si va calcula nota finala

         parametri: mesajul primit, un pointer la un sir de caractere care reprezinta mesajul ce va fi returnat clientului (care, in caz de succes va fi “ok” si un pointer la un sir de caractere ce reprezinta mesajul care se va scrie in fisierul de log

         returneaza: 0 daca a reusit acordarea notei finale

                       un numar pozitiv in caz de esec (care depinde de tipul de esec)

trimiteNota

         descriere: citeste mesajul primit de la clientul “elev” care contine numarul testului si numele “elevului” (pentru securitate) iar daca este ok cauta in baza de date testul cu datele respective, care poate sau nu sa aiba nota finala

         parametri: mesajul primit, un pointer la un sir de caractere care reprezinta mesajul ce va fi returnat clientului (care, in caz de succes va fi “NU” daca nu este calculata inca nota finala, sau nota, daca aceasta a fost calculata si un pointer la un sir de caractere ce reprezinta mesajul care se va scrie in fisierul de log

         returneaza: 0 in caz de succes

                       un numar pozitiv in caz de esec (care depinde de tipul de esec)

main

         descriere: deschide un socket si asteapta o noua conexiune. Cand apare o conexiune, preda sarcina comunicarii cu clientul unui proces copil dupa care revine la asteptarea unei noi conexiuni.

         parametri: numele si parola (daca exista) a unui utilizator al bazei de date

         returneaza: 0 in caz de succes

                 un numar pozitiv in caz de eroare (care depinde de tipul de eroare)

2.2. Administratorul de server

2.2.1. Nume

         Administrator de server

2.2.2. Tip

         program C

2.2.3. Descriere

         Aplicatia care lanseaza serverul in executie si il controleaza.

2.2.4. Functii

main

         descriere: implementeaza o interfata prietenoasa cu utilizatorul prin care acesta poate controla serverul.

         parametri: nu exista

         returneaza: 0 in caz de succes

                 un numar pozitiv in caz de eroare (care depinde de tipul de eroare)

2.3. Clientul “profesor”

2.2.1. Nume

         client “profesor”

2.2.2. Tip

         program C

2.2.3. Descriere

         Aplicatia care se conecteaza la server si poate introduce subiecte noi in baza de date, schimba status-ul unui subiect deja existent in baza de date, cere spre corectare rezolvari de teste (subiectele 8 si 9) si trimite punctajul acestora

2.2.4. Functii

readquestion

         descriere: citeste o intrebare de la tastatura

         parametri: un vector de caractere in care se va pune intrebarea pe care o citesc de la tastaura si o lungime de tipul int care reprezinta lungimea intrebarii

       returneaza: nimic

void conection(void);

         descriere: realizeaza conexiunea la server

         parametri: nu exista

       returneaza: nimic

caz_intai

         descriere: adauga un subiect in baza de date

         parametri: nici unul

       returneaza: nimic

caz_doi

         descriere: schimba statusul unui subiect, adica activeaza sau dezactiveaza un subiect din baza de date

         parametri: nici unul

       returneaza: nimic

caz_trei

         descriere: emite o cerere de corectare a unei rezolvari a unui test

       parametri: nici unul

       returneaza: nimic

caz_patru

         descriere: trimite corectarea rezolvarii unui test (punctajele obtinute)

       parametri: nici unul

       returneaza: nimic

raspuns1

         descriere: traduce raspunsul primit de la server in urma cererii de adaugare a unui nou subiect in baza de date

       parametri: nici unul

       returneaza: nimic

raspuns2

         descriere: traduce raspunsul primit de la server in urma cererii de schimbare a statusului unui subiect in baza de date

       parametri: nici unul

       returneaza: nimic

raspuns3

         descriere: traduce raspunsul primit de la server in urma cererii de corectare a unei rezolvari

       parametri: nici unul

       returneaza: nimic

raspuns4

         descriere: traduce raspunsul primit de la server in urma cererii de trimitere a punctajelor obtinute



       parametri: nici unul

       returneaza: nimic

main

         descriere: implementeaza o interfata pritenoasa cu utilizatorul prin care acesta isi poate exprima o anumita dorinta.

         parametri: IP –ul calculatorului pe care ruleaza serverul si portul  de acces

         returneaza: 0

2.4. Clientul “elev” – Unix local

         in curs de definitivare

2.5. Clientul “elev” – Unix remote

         in curs de definitivare

2.6. Clientul “elev” – Windows (remote)

         in curs de definitivare

3. Utilizare

         Toate programele au interfete grafice prietenoase utilizatorului, prin care acesta poate realiza operatiunea dorita.

4. Protocolul de comunicare

OBSERVATIE FOARTE IMPORTANTA

Peste tot in cele ce urmeaza vom considera comenzile schimbate intre server si clienti cu apostrof

(pentru lizibilitate)

NU se folosesc apostrofurile pentru comenzi

4.1. Clientul “profesor” adauga un subiect in baza de date

Clientul trimite: 'AS'  (Adauga Subiect)

Serverul trimite: 'ts'  (Trimiteti Subiectul)

si se asteapta sa primeasca inapoi un sir de caractere construit astfel:

   - primul caracter este 'C' sau 'J' (corespunzator limbajelor de programare C respectiv Java)

   - al doilea caracter: 'G' sau 'R' (subiectul este Grila sau cu Raspuns)

   - al treilea caracter: 'U', 'M' sau 'G' (corespunzator nivelului de dificultate

                                           Usor, Mediu sau Greu)

   - al patrulea caracter: '*'

   -> daca este vorba de un subiect grila urmeaza raspunsul (o litera mica)

      apoi '*'

   -> daca este vorba de un subiect cu raspuns si usor ca nivel de dificultate

      urmeaza: - o cifra care precizeaza cate cifre are partea intreaga

               - o cifra care precizeaza cate cifre are partea zecimala

               - o cifra care nu poate sa fie decat 0 sau 1 cu urmatoarea semnificatie

                     0 daca numarul care urmeaza este pozitiv

                     1 daca numarul care urmeaza este negativ (iar semnul '-' nu se foloseste)

               - '*'

               - raspunsul (de forma aaaa.bb - nu neaparat atatea cifre

                                 sau aaaa daca partea numarul de cifre a partii zecimale este 0)

                 iar prima cifra poate sa fie si '-' daca numarul e negativ

               - '*'

   - textul subiectului

   - '##' la sfarsit, pentru a fi siguri ca am primit tot mesajul de la client

ex: CGM*a*enunt_subiect##

    JRU*320*234.12*enunt_subiect##   //in acest caz raspunsul este 234.12

    CRU*321*234.12*enunt_subiect##   //in acest caz raspunsul este -234.12

    CRU*200*11*enunt_subiect##       //in acest caz raspunsul este 11

    JRU*301*321*enunt_subiect##      //in acest caz raspunsul este -321

    JRM*enunt_subiect##

    CRG*enunt_subiect##  

 

OBS:textul subiectului trebuie sa fie in format de printf (adica 'n' unde trebuie un rand nou,

't' pentru tab, etc), si sa nu aiba mai mult de 2000 de caractere (asta se mai poate modifica

pe parcurs, daca e nevoie)

Raspunsurile serverului:

Daca totul decurge bine serverul returneaza 6 caractere care reprezinta codul subiectului in baza

de date (de ex: CRM005 sau JGU012)

daca nu, astea sunt raspunsurile sale:

   - 'nl' = nu avem '##' la sfarsitul mesajului

   - 'pc' = primul caracter din mesaj nu este 'C' sau 'J'

   - 'dc' = al doilea caracter ce compune mesajul nu este 'G' sau 'R'

   - 'tc' = al treilea caracter ce compune mesajul nu este 'U', 'M' sau 'G'

   - '4*' = al patrulea caracter ce compune mesajul nu este '*' (idem pt alte nr)

   - 'n*' = pentru subiect cu raspuns, usor, nu gasim '*' dupa rezultat

   - 'rg' = al cincilea caracter ce compune mesajul nu este raspunsul la grila

   - 'pi' = al cincilea car ce compune mesajul nu este nr de cifre a partii intregi

   - 'pz' = al saselea car ce compune mesajul nu este nr de cifre a partii zecimale

   - 'nn' = al saptelea car ce compune mesajul nu este '0' sau '1'

   - 'n.' = pentru subiect cu raspuns, usor, nu gasim '.' dupa cifrele de la partea intreaga

            a rezultatului

   - 'ne' = numarul de caractere al enuntului este mai mic de 10

(acestea n-ar trebui sa apara daca clientul este bine construit)

   - 'ms' = probleme cu MySQL, reveniti mai tarziu

   - 'fl' = deja sunt 999 de subiecte de acest gen baza de date. Nu mai pot fi adaugate altele.

4.2. Clientul “profesor” doreste ca un subiect sa nu mai fomeze teste (sa il 'dezactiveze') sau reciproc, daca e 'dezactivat' sa il 'activeze'

Clientul trimite: 'SS'  (Schimba Status)

Serverul trimite: 'ct'  (Codul Testului)

si se asteapta sa primeasca inapoi un sir de caractere construit astfel:

   - primul caracter este '1' (activare) sau '0' (dezactivare)

   - urmatoarele 6 caractere reprezinta codul subiectului in baza de date

      - primul caracter 'C' sau 'J' (domeniul: C, Java)

      - urmatorul caracter 'G' sau 'R' (tipul: Grila, cu Raspuns)

      - urmatorul caracter 'U', 'M' sau 'G' (gradul de dificultate: Usor, Mediu, Greu

      - inca 3 cifre

OBS: dezactivarea unui subiect presupune ca acel subiect nu va mai intra in componenta niciunui

test construit ulterior, insa un subiect nu poate fi sters fizic din baza de date, deoarece in

baza de date testele nu contin enunturile subiectelor, ci doar referinte la acestea. De aceea

daca acel subiect a intrat in componenta a cel putin unui test, n-ar trebui sters

Raspunsurile serverului:

   - 'nl' = lungimea codului trimis nu are 7 caractere

   - 'pc' = primul caracter din mesaj nu este '0' sau '1'

   - 'dc' = al doilea caracter ce compune mesajul nu este 'C' sau 'J'

   - 'tc' = al treilea caracter ce compune mesajul nu este 'G' sau 'R'

   - 'pc' = al patrulea caracter ce compune mesajul nu este 'U', 'M' sau 'G'

   - 'cc' = al cincilea caracter ce compune mesajul nu este o cifra

   - 'sc' = al saselea caracter ce compune mesajul nu este o cifra

   - 'uc' = al saptelea (ultimul) caracter ce compune mesajul nu este o cifra

(acestea n-ar trebui sa apara daca clientul este bine construit)

   - 'ms' = probleme cu MySQL, reveniti mai tarziu

   - 'ne' = subiectul cu codul respectiv nu exista in baza de date

   - 'ee' = subiectul exista in baza de date, dar deja este activat (dazactivat)

   - 'es' = subiectul exista in baza de date si a i-a fost schimat statusul (ok)

4.3. Clientul “profesor” doreste sa corecteze rezolvarea unui test

Clientul trimite: 'CR'  (Cer Rezolvarea unui test pentru corectare)

Serverul cauta in baza de date un test care are rezolvarea la cel putin unul din subiectele

8 sau 9, dar nu are punctajul.

Daca nu gaseste un astfel de test, trimite 'NU'

Daca il gaseste, trimite un mesaj construit astfel:

nr_test*autor_test*msg##  

unde nr_test - numarul testului in baza de date

     autor_test - numele elevului (pentru verificare, la inapoierea punctajului)

     msg - reprezinta un sir de caractere ce contine enuntul subiectului/subiectelor

           precum si rezolvarea acestuia/acestora. Daca lipseste o rezolvare, nici enuntul

           acesteia nu va mai fi. Va fi preformatat, astfel incat nu trebuie decat afisat

            (dar poate avea lungimea pana in 44 000 de caractere!).

Evident ca daca sunt probleme cu conexiunea la baza de date serverul trimite mesajul 'ms'

4.4. Clientul “profesor” doreste sa trimita punctajul/punctajele obtinute in urma corectarii

Clientul trimite: 'TR'  (Trimit punctajele obtinute pentru o anumita Rezolvare)

Serverul trimite: 'tp'  (Trimite Punctajele)

si se asteapta sa primeasca inapoi un sir de caractere construit astfel:

numar_test*autor*8*punctaj_sub8*9*punctaj_sub9## (daca a avut de corectat ambele subiecte)

numar_test*autor*8*punctaj_sub8## (daca a avut de corectat numai subiectul 8)

numar_test*autor*9*punctaj_sub9## (daca a avut de corectat numai subiectul 9)

unde numar_test - numarul testului in baza de date

     autor - numele 'elevului'

        (ambele informatii sunt furnizate in momentul trimiterii rezolvarii)

     punctaj - punctajul obtinut la subiectul respectiv. Poate fi 0, 1 sau un numar subunitar

               cu maxim 2 zecimale (0.25, 0.33, 0.5 etc)

Raspunsurile serverului:

   - 'nl' = nu gasim '##' la sfarsitul mesajului

   - 'pc' = primul caracter din mesaj nu este o cifra

   - 'tl' = numarul testului are mai mult de 9 cifre (este prea lung)

   - '1*' = dupa numarul testului nu urmeaza '*'

   - 'nL' = numele 'elevului' are mai mult de 15 caractere

   - 'nn' = nu exista numele 'elevului'

   - '2*' = dupa numele 'elevului' nu urmeaza '*'

   - 'ns' = numarul unui subiect lipseste (sau nu este unde ar trebui)

   - '3*' = al treilea '*' nu se gaseste la locul sau

   - '8p' = primul caracter al punctajului de la subiectul 8 nu este '0' sau '1'

   - '8.' = punctajul la subiectul 8 este de forma '0.' dar nu urmeaza o cifra dupa

   - '4*' = al patrulea '*' nu se gaseste la locul sau (adica ne asteptam sa gasim

                                                        punctajul ambelor subiecte)

   - '5*' = al cincilea '*' nu se gaseste la locul sau (la al doilea subiect (9))

   - '9p' = primul caracter al punctajului de la subiectul 9 nu este '0' sau '1'

   - '9.' = punctajul la subiectul 9 este de forma '0.' dar nu urmeaza o cifra dupa

   - 'n#' = dupa punctajul subiectului 9 nu urmeaza '#'

   - 'pl' = avem caractere in plus la sfarsitul mesajului

   - 'tn' = testul cu codul precizat nu exista in baza de date

   - 'nt' = testul exista in baza de date, dar e pe alt nume :D

   - '8e' = testul exista in baza de date, numele e bun, dar deja are punctajul la subiectul 8

   - '9e' = testul exista in baza de date, numele e bun, dar deja are punctajul la subiectul 9

   - 'n8' = nu ati transmis punctajul la sub 8 (si nu exista in baza de date)

   - 'n9' = nu ati transmis punctajul la sub 9 (si nu exista in baza de date)

(toate aceste cazuri n-ar trebui sa apara daca clientul este bine implementat)

   - 'ms' = probleme cu MySQL, reveniti mai tarziu

   - 'ok' = notele sunt bune, a fost finalizat testul.

4.5. Clientul “elev” solicita un test

Clientul trimite: 'ct'  (Cer Test)

Serverul trimite: 'dn'  (Domeniul si Numele)

si se asteapta sa primeasca inapoi un sir de caractere construit astfel:

   - primul caracter este 'C' sau 'J' (corespunzatoare domeniului),

   - apoi '*',

   - apoi cel mult 15 litere mici(numele)

   - la sfarsit '##'

ex: 'C*popescu##'

In acest moment serverul cauta daca nu are deja construit un test pentru acel nume,

caruia nu i-a primit inca rezolvarea. Daca gaseste un astfel de test atunci il trimite pe ala,

daca nu, construieste unul luand la intamplare 2 subiecte GU, 2 GM, 2 GG, 1 RU, 1 RM, 1RG.

Raspunsurile serverului:

   - 'nl' = nu gasim '##' la sfarsitul mesajului

   - 'nd' = nu-i bun domeniul (primul caracter din mesaj nu este 'C' sau 'J')

   - 'n*' = al doilea caracter ce compune mesajul nu este '*'

   - 'pl' = numele este prea lung (are mai mult de 15 caractere)

   - 'nm' = o litera din nume nu e litera mica

(acestea n-ar trebui sa apara daca clientul este bine construit)

   - 'ms' = probleme cu MySQL, reveniti mai tarziu

   - 'np' = nu putem construi un test pe acest domeniu (in baza de date nu sunt suficiente

            subiecte din domeniul repectiv pt a face un test)

   - '*nr_testntest##' in caz de succes

         unde:   nr_test = nr testului din baza de date

                 test = enuntul testului (pana in 20 000 caractere)

4.6. Clientul “elev” trimite rezolvarea unui test

Clientul trimite: 'tt'  (doresc sa Trimit rezolvarea unui Test)

Serverul trimite: 'at'  (Astept rezolvarea Testului)

si se asteapta sa primeasca inapoi un sir de caractere construit astfel:

  nr_test*rrrrrr*rasp_7*nr_caract_rez8*rez_8*nr_caract_rez9*rez_9*nume##

      unde: nr_test = numarul testului

            r = litera mica reprezentand raspunsul la intrebarea a cata litera e 'r'

            rasp_7 = raspunsul la subiectul nr 7 (un nr real)

            nr_caract_rez8 = cate caractere contine rezolvarea subiectului 8 (poate fi si 0 in

                             cazul in care cel ce a rezolvat testul nu a facut nimic la sub 8)

             rez_8 = rezolvarea la subiectul nr 8 (un program)

             nr_caract_rez9 = idem cu nr_caract_rez8

             rez_9 = idem cu rez_8

            nume = trebuie sa fie identic cu numele dat in momentul cererii testului

ex: 23*abbdac*-1.23*7548*un-text-care-are-7548-de-caractere*0**popescu##

(in acest caz lipseste raspunsul la intrebarea nr 9)

OBS: clientul trebuie sa se asigure ca

     nr_test <= 999 999 999

     rasp_7 nu are peste 9 cifre nici la partea intreaga, nici la cea zecimala

     rez_8 si rez_9 au fiecare sub 20 000 de caractere

     nu are voie sa lipseasca nici un raspuns (daca cel care a rezolvat testul nu a dat raspunsul

       la un subiect, va fi completat automat cu 'x' (fara apostrof), exceptand raspunsurile la

       subiectele 8 si 9 unde un raspuns lipsa va fi marcat prin 0 ca nr de caractere)

    numele trebuie sa fie identic cu numele dat in momentul cererii testului

(un mesaj de eroare va fi emis in caz contrar)

Raspunsurile serverului:

   - 'nl' = ultimele 2 caractere citite nu sunt '##'

   - 'pc' = primul caracter din mesaj nu este cifra

   - 'tl' = numarul testului are mai mult de 9 cifre (este prea lung)

   - '1*' = dupa numarul testului nu urmeaza '*'

   - '1i' = raspunsul la primul subiect nu e litera mica

   - '2i' = raspunsul la al doilea subiect nu e litera mica

   - '3i' = raspunsul la al treilea subiect nu e litera mica

   - '4i' = raspunsul la al patrulea subiect nu e litera mica

   - '5i' = raspunsul la al cincilea subiect nu e litera mica

   - '6i' = raspunsul la al saselea subiect nu e litera mica

   - '2*' = dupa raspunsurile la primele 6 subiecte nu urmeaza '*'

   - '7p' = primul caracter de la raspunsul pt sub 7 nu e cifra sau '-' (sau x)

   - '7n' = raspunsul la sub 7 incepe cu '-' dar urm caracter nu e o cifra

   - '7L' = raspunsul la sub 7 are peste 9 cifre la partea intreaga

   - '7.' = raspunsul la sub 7 are si parte zecimala, dar dupa . nu urmeaza o cifra

   - '7l' = raspunsul la sub 7 are peste 9 cifre la partea zecimala

   - '3*' = dupa raspunsul la subiectul 7 nu urmeaza '*'

   - '8p' = caracterul unde ar trebui sa inceapa cate cifre are rez subiectului 8 nu e cifra

   - '8L' = numarul de caractere al rezolvarii subiectului 8 este cel putin 20 000

   - '4*' = dupa numarul de caractere de la rezolvarea subiectului 8 nu urmeaza '*'

   - '8e' = nu avem suficiente caractere in mesaj pentru a gasi rez subiectului 8 !!!!!!!!!!

   - '5*' = dupa rezolvarea subiectului 8 nu urmeaza '*'

   - '9p' = caracterul unde ar trebui sa inceapa cate cifre are rez subiectului 9 nu e cifra

   - '9L' = numarul de caractere al rezolvarii subiectului 9 este cel putin 20 000

   - '6*' = dupa numarul de caractere de la rezolvarea subiectului 9 nu urmeaza '*'

   - '9e' = nu avem suficiente caractere in mesaj pentru a gasi rez subiectului 9 !!!!!!!!!!

   - '7*' = dupa rezolvarea subiectului 9 nu urmeaza '*'

   - 'nL' = numele 'elevului' are mai mult de 15 caractere

   - 'nn' = nu exista numele 'elevului'

   - 'ng' = numele este gresit (contine si alte caractere in afara de litere mici)

   - 'nt' = testul exista in baza de date, dar e pe alt nume :D

   - 'rt' = testul exista in baza de date, numele e bun, dar deja e rezolvat

   - 'tn' = testul cu codul precizat nu exista in baza de date

(toate aceste cazuri n-ar trebui sa apara daca clientul este bine implementat)

   - 'ms' = probleme cu MySQL, reveniti mai tarziu

In cazul in care totul este ok, serverul trimite clientului un mesaj, care afisat apare cam asa:

  Var cor   Var dvs   Punctaj

1)   d          a       0

2)   b          b       1

3)   c          c       1

4)   a          b       0

5)   c          c       1

6)   d          d       1

7)   9          9       1

8)                      ?

9)                      0

                Oficiu  1

        TOTAL (partial): 6

Trebuie sa precizam ca daca 'elevul' nu scrie nimic la rezolvarea subiectelor 8 sau 9 deja i se

poate da punctajul (adica 0), rezolvarea subiectului respectiv nemaiavand nevoie sa fie corectata

de profesor :D. In exemplul de mai sus 'elevul' nu a rezolvat decat subiectul 8 (de aceea acolo

apare '?' ca punctaj, deoarece rezolvarea respectiva urmeaza sa fie corectata) iar pentru ca nu

a scris nimic la subiectul 9 primeste direct punctajul (0) pe acel subiect. In cazul in care

'elevul' nu rezolva niciunul din subiectele 8 si 9 primeste direct punctajul 0 pe acele subiecte,

iar la sfarsit o sa scrie: 'TOTAL (final):'

4.7. Clientul “elev” doreste sa stie daca i-a fost corectat testul (problemele 8 si 9)

Clientul trimite: 'nt'  (vreau Nota unui Test)

Serverul trimite: 'cn'  (Codul si Numele)

si se asteapta sa primeasca inapoi un sir de caractere construit astfel:

numar_test*autor##

unde numar_test - numarul testului in baza de date

     autor - numele 'elevului' (ca o minima securitate)

        (ambele informatii sunt furnizate in momentul trimiterii testului)

Raspunsurile serverului:

   - 'nl' = nu gasim '##' la sfarsitul mesajului

   - 'pc' = primul caracter din mesaj nu este o cifra

   - 'tl' = numarul testului are mai mult de 9 cifre (este prea lung)

   - 'n*' = dupa numarul testului nu urmeaza '*'

   - 'nL' = numele 'elevului' are mai mult de 15 caractere

   - 'nn' = nu exista numele 'elevului'

   - 'n*' = dupa numele 'elevului' nu urmeaza '#'

   - 'pl' = mesajul primit este prea lung (in sensul ca mai avem caractere la sfarsit)

   - 'tn' = testul cu codul precizat nu exista in baza de date

   - 'nt' = testul exista in baza de date, dar e pe alt nume :D

(toate aceste cazuri n-ar trebui sa apara daca clientul este bine implementat)

   - 'ms' = probleme cu MySQL, reveniti mai tarziu

   - 'NU' = testul nu este inca corectat

in caz de succes, serverul trimite un sir de caractere preformatat, care, afisat arata astfel:

4*mosmartin

1)      1

2)      0

3)      1

4)      1

5)      1

6)      0

7)      1

8)      0.25

9)      0

Oficiu: 1

Nota:   6.25

(numarul testului, numele autorului, punctajele pe fiecare subiect in parte si nota finala)

5. Bibliografie

 - Beej’s Guide to Network Programing

 - Mark Mitchell, Jeffrey Oldham, Alex Samuel: Advanced Linux Programming

 - Kurt Wall, Mark Watson, Mark Whitis: Linux Programming Unleashed

 - paginile man din Unix

 - documentatia oficiala MySql

 - www.google.ro   ;)

 







Copyright © 2017 - Toate drepturile rezervate

Informatica


Access
Adobe photoshop
Autocad
Baze de date
C
Calculatoare
Corel draw
Excel
Foxpro
Html
Internet
Java
Linux
Mathcad
Matlab
Outlook
Pascal
Php
Powerpoint
Retele calculatoare
Sql
Windows
Word


Dezvoltare formala
PRACTICI INTERNATIONALE CU PRIVIRE LA INVESTIGATIILE INFORMATICE
STEGANOGRAFIA
Aplicatie informatica in managementul energetic
Sistemele de operare MSDOS si WINDOWS
Sisteme de Management al Informatiei
Realizarea monitorizarii si controlul standului FESTO de pe un PC. De asemenea prin intermediul automatului Siemens se doreste achizitionare unor valo
UTILIZAREA INTERNET EXPLORER
Auditul financiar si auditul sistemelor informatice
Ceasul de timp real 1 (T/C1)