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:

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

?

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

0

1

1

1

0

1

0.25

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 ;)





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate