Sunteți pe pagina 1din 17

A P L I C AT I I C G I / M Y S Q L I N C + +

1 TEMA SI MOTIVATIA ALEGERII

Intr-o fraza, maxim doua, se va define tema proiectului, iar in continuare, pe o


jumatate de pagina, se poate face si o prezentare o motivarii ce a condus la
alegerea temei corespunzatoare.

FORMULAREA TEMEI

Realizarea unei aplicatii web ce va utiliza tehnologia CGI si va implementa


problema gestiunii admiterii studentilor in invatamantul superior.

MOTIVAREA ALEGERII TEMEI

Acesta problemǎ poate fi rezolvata in douǎ moduri, functie de modul in care


manipulam datele, utilzand fisiere text/binare sau utilizand conectori C++
pentru acces la MySQL.

Incercand sa realizez aplicatii web am simtin nevoia de trece de la stilul static


al paginilor web in format html la un stil dinamic. O prima solutie identificata
ar fi implementarea paginilor html folosind limbajul php, dar putem aborda
aceeasi problemǎ utilizand tehnologia CGI. A douǎ varianta o consider mai
potrivita, pentru acest moment al pregatirii mele de student, din cel putin
douǎ motive:

1. Imi permite sa aprofundez in continuare limbajul C++;


2. Imi ofera o libertate in abordarea formularelor, in sensul ca pot
utiliza mai multe resusrse ale sistemului de operare decat pot
utiliza cu limbajul php;

Evident, ca existǎ si dezavantaje, cum ar fi complexitatea codului, dar acest


dezavantaj va fi compensat cu avantajele enumerate mai sus.
2 PROBLEMATICA ADMITERII

Acest capitol/subcapitol se ocupa cu problematicǎ admiterii in cadrul invatamantului


superior. In acest scop studentul va incerca sa schiteze cateva notiuni:

- Datele furnizate comisiei de admitere;


- Rapoartele de care ati beneficiat pe parcursul admiterii;
- Rezultatele finale, clasificarea pe specializari.

Dupa aceastǎ trecere in revista se va incerca o abordate teoretica a problemei


admiterii in sensul structurarii datelor deja definite la etapa anterioara.

DATELE FURNIZATE COMISIEI DE ADMITERE

In principiu vorbim despre date personale, obligatorii si optionale, functie de


specificul admiterii (licenta, masterat, doctorat, eventual continuare studii),
respective disponibilitatea candidatului (adresa email, telefon).

Deoarece problemǎ este una nu foarte simpla, dacǎ este abordata in intreaga ei
complexitate, vom merge pe o varianata mult simplificata, astfel:

- Datele personale vor cele minimale (nume, CNP, date contact);


- Date despre studiile anterioare minimale (Liceu/facultate, serie act,
rezultate obtinute);
- In cazul probelor de examen se considera ca avem un format standard ca
nr. de probe, de exemplu 2, cu ponderi egale, 50% - 50%;
- Ignoram problemǎ taxelor sau o putem lua in considerare (taxa de
inscriere si cea de inmatriculare);
- Dacǎ le luam in considerare atunci vom fi nevoiti sa luam in calcul si
problemǎ scutirilor de taxa;
- Si uite asa problema se tot complica;

Pentru a asigura un anumit grad de configurabilitate putem adopta si stilul ca


anumite informatii sa fie deja oferite prin asa numitele fisiere de configurare, de
exemplu XML. Astfel, intr-un astfel de fisier putem furniza:

- numele Facultatii si al Universitatii;


- numarul si numele probelor, precum si ponderile pentru fiecare proba;
- etc

Observatie

Asupra acestui capitol vom reveni pe parcursul analizei problemei


RAPOARTE PE PARCURSUL ADMITERII

Rapoartele minime necesare pe parcursul admiterii pot fi clasificatǎ in rapoarte


publice si rapoarte interne, dar le putem trata pe toate unitary, astfel:

- formularul de introducere a datelor la inscriere;


- formularul utilizat la inmatriculare/retragere;
- fisa de inscriere, raport ce va oferi spre imprimare un raport HTML dupǎ
un sablon anume toate datele ce au fost introduce, impreuna cu
rezultatele obtinute sip e care candidatul si le asuma;
- lista cu inscrisii si inmatriculatii zilnic;
- lista cu inmatriculatii pe bazine de recrutare;
- etc
Pentru fiecare din acest raport si formular se va face o descriere si o analiza
specifica, pe tema datelor ce vor fi introduce si analizand coerenta acestora. De
exemplu, cum rezolvam problema liceelor ce isi schimba denumirea, dar noi trebuind sa
vorbim despre aceeasi entitate. O problemǎ asemnatoare intalnim atat la Judete/orase/localitati
cat si la denumirile de strazi. Acesta problemǎ este una foarte importanta in domeniul aplicativ
al bazelor de date.
O solutie simpla ar fi sa dam libertate in introducerea numelor de orase/localitati si strazi, dar
evident, ca aceasta nu este solutia ideala, dar este o rezolvare punctuala.

REZULTATELE FINALE, CLASIFICAREA PE SPECIALIZARI

In acest caz vorbim de un singur formular, listing, in care afisam candidatii, in


ordinea descrescatoare a mediei de admitere, in care vom puncta (sublinia) douǎ
puncte importante:

- ultima medie de admitere la buget;


- ultima medie de admitere la taxa;
- capacitatea de scolarizare, stabilita prin vizetele ARACIS1.

Tinand seama de specificul admiterii in USV/FIESC, din acest an, aceste liste pot
evolua zilnic, functie de inmatricularile si retragerile curente.

Observatie

Asupra acestui capitol vom reveni pe parcursul analizei problemei

STRUCTURAREA/ORGANIZAREA DATELOR

1
ARACIS - http://www.aracis.ro/
Se va defini la nivel logic datele cu care se intra in Admitere. Aceste date vor fi
furnizate atat de candidat ( date personale, studii ) cat si de procesul de Admitere (
rezultate examene/teste ).

Organizarea datelor personale

Aici vom defini, din punct de vedere logic, datele personale, impreuna cu tipul si
dimensiunea lor, a candidatului ce se prezinta la Admitere. Tabelele ce vor fi
descries mai jos pot fi implementate, simplu, utilizand fisiere sau putem realiza o
conexiune la MySQL si astfel avem o solutie ce va conduce catre o abordare
profesionala.

tbl_date_pers_candidat

Denumire camp Tip Dimensiune Descriere


Id_candidat Intreg 1 Identificator
unic
Nume candidat Caracter 30
Nume tata Caracter 30
Nume mama Caracter 30
CNP Caracter 15
Data nastere Caracter 12 - ‘yyyy-mm-
dd’
Telefon Caracter 30
Email Caracter 30
Comentarii Caracter 50 Diverse notatii

Dupa cum se observa in tabela anterioara intervine notiune de identificator unic


(Id_candidat). Acest identificator va fi folositǎ pentru a realiza o conexiune logica
cu alte tabele din baza de date. Constrangerea de unicitate va fi asigurata prin
diferitǎ implementǎrii:

- generare aleatoare si verificarea existentei identificatorului


- utilizarea unui tabel/fisier special in care avem toti identificatorii unici din
baza de date, iar la adaugarea unei noi inregistrari, identificatorul va fi
generat, prin incrementare, pe baza acestui tabel.

Organizarea studiilor anterioare

Aici vom defini, din punct de vedere logic, studiile anterioare urmate sau absolvite
de candidat, impreuna cu tipul si dimensiunea lor, a candidatului ce se prezinta la
Admitere.

tbl_studii_ant_candidat
Denumire camp Tip Dimensiune Descriere
Id_studii_ant Intreg 1 Identificator
unic
Id_candidat Intreg 1 Foreign key
Tip_studii Caracter 15
Denumire_unitate Caracter 30
Data_absolvire Caracter 12 - ‘yyyy-mm-
dd’
Titlu_obtinut Caracter 30
Serie_act_studiu Caracter 15
Comentarii Caracter 50 Diverse notatii

Organizarea rezultatelor obtinute

Un candidat poate participa, la admitere, la mai multe specializari cu aceleasi date


personale, deja introduce, motiv pentru care trebuie sa obtinem o conexiune logica
intre candidatul virtual (atasat unei specializari0 si canditul fizic (ce a furnizat un set
de date personale). Pe parcursul admiterii se face diferenta intre candidatul fizic si
cel conventional (virtual).

Observatie

Asupra acestui capitol vom reveni pe parcursul analizei problemei

Se va incerca definirea unei organigrame la nivel de tabele logice.

Observatie

Asupra acestui capitol vom reveni pe parcursul analizei problemei

Observatie

Asupra acestui capitol vom reveni pe parcursul analizei problemei

3 PROGRAMARE WEB. LIMBAJUL HTML

Acest capitol/subcapitol se ocupa cu partea teoretica si practicǎ a tehnologiilor


folosite in cadrul proiectului. Studentul va ignora, momentan, partea de limbaj C++ si va aborda
celelalte tehnologii: programare web cu HTML si CGI. La partea de CGI se va studia problema
implementǎrii lor in C respectiv in limbajul script (bash script), eventual.
3.1 PAGINA WEB. TAG-URI HTML

Constructia unei pagini web consta in editarea unui document folosind TAG-uri
HTML2, TAG-uri ce ne permit formatarii informatiei ce urmeaza a aparea pe pagina
respectiva, astfel:

- marcarea unei zone va incepe cu un TAG, de exemplu <html>, iar sfarsitul


zonei, este marcat prin TAG-ul complementar, </html>;
- documentul dispune de doua zone distincte, neobligatorii, astfel:
o sectiunea de header <head> ... </head>, defineste informatii despre
document
 <title> ... </title>, defineste titlul paginii
 <!DOCTYPE>, tipul documentului
 etc
o sectiunea <body> ... </body>, rezervata corpului documentului
- zona marcata prin <p> ... </p>, defineste o zona paragraf;
- etc

In sectiunea de mai jos avem un exemplu de pagina web, creata cu un editor


de texte, pagina care in urma publicarii pe web produce efectul din figura
urmatoare.
<html>
<head>
<title>TITLUL PAGINII</title>
</head>
<body>
<h1>PRIMA PAGINA</h1>
<p>Primul paragraf...<br>
Acesta este un exemplu<br>de paragraf</p>
</body>
</html>

In urma copierii fisierului creat, pe server, in directorul “~/public_html/cgi”, sub


numele “first.html”, obtinem efectul de mai jos:

Evident, a fost setat cel putin dreptul de “read”, pentru “others”, pe fisierul
first.html.

2
http://www.w3schools.com/html/default.asp
3.2 PRIMA PAGINA WEB. DREPTURI SI PUBLICARE

Dupa crearea unei pagini html, similar paginii anterioare, va trebui sa realizam
urmatoarele operatii:

- salvam pagina cu extensia html, de exemplu: first.html;


- stabilim drepturile necesare publicarii sale pe web, acestea fiind: minim drept
de “read” pentru “others”;
- copierea paginii in directorul “public_html” sau intr-un alt subdirector al
acestuia.

Pentru directorul “public_html” (eventual subdirectoarele acestuia), se recomanda


a avea dreptul “execute” pentru “others”, eventual si “read”, doar ca in acest caz se
poate vedea intreg continutul directorului.

Modificare drepturilor pentru un fisier sau director, in Linux, se realizeaza prin


intermediul comenzii “chmod”, astfel.

Acesarea paginii se face prin intermediul urcarui brouser de Internet,


introducand adresa paginii, astfel:

- in cazul in care aveti pagina pe serverul Apollo ( apollo.eed.usv.ro ), iar contul


dumneavostra ar fi “popescu_ar”, continutul fisierului index.html, din
directorul Public_html va fi vizualizat daca tastam urmatoarea adresa:
o “http://apollo.eed.usv.ro/~popescu_ar” sau
o “http://apollo.eed.usv.ro/~popescu_ar/index.html”
- In cazul in care pagina cu numele “first.html” se afla in subdirectorul “cgi”,
accesarea se face astfel: “http://apollo.eed.usv.ro/~popescu_ar/cgi/first.html”.

Observatie
Dupa salvarea documentului, copierea si setarea drepturilor s-a realizat prin
intermediul scriptului “copie.sh”, descris mai jos in cadrul materialului.
4 TEHNOLOGIA CGI

Dupa realizarea primei pagini Web, constatam faptul ca informatia stocata de


aceasta este statica si simtim nevoia de dialog cu vizitarul. In principiu, am dori sa
permitem vizitatorului sa trimita un mail sau sa introducem un contor care sa
inregistreze numarul de vizitatori ai paginii Web. Pentru toate acesta, scripturile CGI
reprezinta solutia optima, ele pot realiza chiar lucruri mult mai complicate.

4.1 INTRODUCERE
C G I - C O M M O N G AT E WAY I N T E R FAC E

Este metoda prin care un server web poate sa prezinte informatia vizitatorilor
prin intermediul unui browser web, in functie de cererile acestora, interactiv,
accesand baze de date sau documente, si extragand informatia ceruta. Scripturile
CGI sunt executate în timp real, astfel încât poate afisa informatii dinamice.

De exemplu, cu ajutorul unui aplicatii CGI browserul web poate afisa în format
HTML continutul unei baze de date UNIX aflata pe server. În principiu trebuie creat
un program care sa extraga informatia din baza de date, sa le prelucreze si sa
returneze browserului web informatia dorita în format HTML, pentru vizualizare.

Principial, aplicatiile CGI sunt în formate din doua parti distincte:

- un formular HTML cu ajutorul caruia se transmit programului CGI criteriile


de cerere dupa care se va interoga baza de date si
- un program CGI care proceseaza cererile furnizate de formular,
intoregheaza baza de date, extrage informatia si prezinta rezultatele prin
intermediul browserului web sub forma unor documente HTML, completat cu
imagini si clip-uri audio.

4.2 TEHNOLOGIA CGI. PRINCIPII

CGI ofera o soluţie simplă la problema paginilor web dinamice. Protocolul


CGI defineşte o metodă standard pentru ca programele să interacţioneze cu
serverul.

Fără cunoştinţe de specialitate, se pot scrie programe în orice limbaj de


programare dorit (C, C++, shell, etc ) care comunică cu serverul web, programul
lucrand pe orice server care înţelege protocolul CGI.

Comunicaţia în CGI este rezolvată prin intrarea şi ieşirea standard, ceea ce


înseamnă că daca citim/scriem date ( de la/la consola standard), în limbajul de
programare preferat, se poate scrie o aplicaţie web. În afara interpretării intrarilor şi
ieşirilor programarea aplicaţiilor CGI este echivalentă cu scrierea oricărei alte
aplicatii.

De exemplu, daca vreţi să faceţi un program care afişează "Hello world!" veţi
utiliza funcţiile de tiparire din limbajul preferat şi formatul definit pentru programele
CGI pentru a afişa mesajul potrivit.

Deoarece CGI este o interfaţă comună nu este restricţionată utilizarea unui


anumit limbaj. Pentru a fi siguri că limbajul este potrivit pentru CGI el trebuie să
poată face următoarele:

- Tipărire la ieşirea standard


- Citire de la intrarea standard
- Citire din variabilele de mediu

Aproape toate limbajele de programare şi multe din limbajele de scripting pot


face aceasta aşa că puteţi utiliza oricare din ele.

Un limbaj compilat cum ar fi C sau C++ tinde să fie mai mic şi mai rapid, pe
când limbajele interpretate cum ar fi perl sau python trebuie să încarce un
interpretor, care poate fi destul de mare, la început. Un alt avantal al limbajelor
compilate este ca in cazul acestora se pot distribui executabile fără codul sursă.

4.3 TEHNOLOGIA CGI. PRACTIC

4.4 FORMULARE

4.5 FORMULARE SI CGI IN C++


5 INSTRUMENTE PENTRU DEZVOLTARE

5.1 SCRIPT PENTRU AUTOMATIZAREA COPIERILOR

Crearea unui script pentru copierea executabileleor CGI/paginilor web in


directoarele corespunzatoare, impreuna cu stabilirea drepturilor corespunzatoare.
Continutul fisierului script (copie.sh) este prezentat in continuare, impreuna cu
secventa de editare si de stabilire a dreptului de executie. Acest scrip poate fi creat
in orice director de lucru si va copia fisierele specificate in cele doua directoare
( public_html/cgi si public_html/cgi-bin ).

$ vi copie.sh

#!/bin/sh
## $1 = tipul fisierului ( "cgi" / "html" )
## $2 = fisierul care se copie

_CGI=~/public_html/cgi-bin
_HTML=~/public_html/cgi

if [ $1 = cgi ]; then
echo "[ `whoami` ] - copie (./$2) in $_CGI/$2"
chmod 751 ./$2
rm $_CGI/$2
cp ./$2 $_CGI/$2
ls -al $_CGI/$2
elif [ $1 = html ]; then
echo "[ `whoami` ] - copie (./$2) in $_HTML/$2"
chmod 754 $2
rm $_HTML/$2
cp ./$2 $_HTML/$2
ls -al $_HTML/$2
else
echo "[ `whoami` ] - eroare parametru ($1) !"
fi

$ chmod 700 copie.sh

5.1.1 COPIEREA UNUI FISIER “HTML”

Copierea unui fisier avand numele “first.html”, se face tastand comanda


“./copie.sh html first.html”, astfel:
Daca dorim ca directorul final sa fie altul, decat “~/public_html/cgi/”, putem
edita fisierul scrip in acest scop, modificand valoarea constantei “_HTML”.

5.1.2 COPIEREA UNUI FISIER “CGI”

Copierea unui fisier avand numele “frmwk”, se face tastand comanda


“./copie.sh cgi frmwk.cgi”, astfel:

Daca dorim ca directorul final sa fie altul, decat “~/public_html/cgi-bin/”,


putem edita fisierul scrip in acest scop, modificand valoarea constantei “_CGI”.
6 CONECTAREA LA MYSQL

6.1 INSTALAREA LIBRARIEI “MYSQLCONNECTOR-C++”

6.2 CONECTAREA LA SERVERUL MYSQL

6.3 EXECUTIA UNUI QUERY

6.4 ITERAREA REZULTATULUI UNUI QUERY


7 TEHNOLOGIA CGI. PROBLEMA REZOLVATA

7.1 TEMA PROPUSA

7.2 ABORDAREA PROBLEMEI

7.3 SOLUTIE

7.3.1 MODULUL CGI

#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <stdexcept>

#include "mysql_connection.h"

#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>

#define EXAMPLE_HOST "localhost"


#define EXAMPLE_USER "root"
#define EXAMPLE_PASS ""
#define EXAMPLE_DB "world"

using namespace std;

int main(int argc, const char **argv)


{

string url(argc >= 2 ? argv[1] : EXAMPLE_HOST);


const string user(argc >= 3 ? argv[2] : EXAMPLE_USER);
const string pass(argc >= 4 ? argv[3] : EXAMPLE_PASS);
const string database(argc >= 5 ? argv[4] : EXAMPLE_DB);
cout << "Connector/C++ tutorial framework..." << endl;
cout << endl;

try {

/* INSERT TUTORIAL CODE HERE! */

} catch (sql::SQLException &e) {


/*
The MySQL Connector/C++ throws three different exceptions:
- sql::MethodNotImplementedException (derived from
sql::SQLException)
- sql::InvalidArgumentException (derived from
sql::SQLException)
- sql::SQLException (derived from std::runtime_error)
*/
cout << "# ERR: SQLException in " << __FILE__;
cout << "("<<__FUNCTION__<< ") on line " <<__LINE__<< endl;
/* Use what() (derived from std::runtime_error)
to fetch the error message */
cout << "# ERR: " << e.what();
cout << " (MySQL error code: " << e.getErrorCode();
cout << ", SQLState: " << e.getSQLState() << " )" << endl;

return EXIT_FAILURE;
}

cout << "Done." << endl;


return EXIT_SUCCESS;
}
8 ANEXE

8.1 CONNECTOR C++ PENTRU MYSQL

Instalarea se face de catre root, utilizand instructiunile urmatoare:

http://dev.mysql.com/doc/refman/5.1/en/connector-cpp-installation-source-
unix.html

Documentatia mySQL pentru connectorul C++:

http://dev.mysql.com/doc/refman/5.1/en/connector-cpp.html

http://forge.mysql.com/wiki/Connector_C%2B%2B

g++ -o frmwk -I/usr/local/include/cppconn/ -L/usr/local/lib/ -g -Wall


frmwk.cpp -lmysqlcppconn-static -ldl

9 BIBLIOGRAFIE

ADMITERE

USV: http://www.admitere.usv.ro/

http://www.usv.ro/fisiere_utilizator/REGULAMENT_Admitere_2012-2013.pdf

FIESC: http://eed.usv.ro/html/admitere.html

http://eed.usv.ro/eed_files/admitere/2012/Metodologie_admitere_2012_revizui
t_10aprilie2012_licenta.pdf

CGI - HTML

1. http://www.gnu.org/software/cgicc/doc/index.html
2. http://www.achacha.org/freeCGI/
3. http://library.thinkquest.org/16728/content/cgi/cplusplus.html
4. http://www.yolinux.com/TUTORIALS/LinuxTutorialC++CGI.html
5. http://forge.mysql.com/wiki/Connector_C%2B%2B
6. yum install mysql-connector-c++
7. http://www.w3schools.com/html/html_forms.asp
8. http://www.roadiro.ro/site/navigate/divprog/cgigen.html
9. http://www.itim-cj.ro/~jalobean/Cursuri/Linux-ro/cgi.pdf
10.http://www.c-cultural.ro/biblioteca%20virtuala/informatica/formulare.pdf
11.http://dev.mysql.com/doc/refman/5.1/en/connector-cpp-tutorials.html
12.http://softexpert.wordpress.com/2007/10/18/how-to-connect-to-a-mysql-db-
using-c-linux/

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