Sunteți pe pagina 1din 88

MOD 1:

1. Ce este o interfata ?
Definitie :
O interfata este o colectie de metode fara implementare si declaratii de constante.
Interfetele permit, alaturi de clase, definirea unor noi tipuri de date.
O interfata Java defineste un set de metode dar nu specifica nici o implementare pentru
ele. O clasa care implementeaza o interfata trebuie obligatoriu sa specifice implementari
pentru toate metodele interfetei, supunandu-se asadar unui anumit comportament.
Implementarea unei interfete
Implementarea uneia sau mai multor interfete de catre o clasa se face prin intermediul
cuvantului cheie implements:
class NumeClasa implements NumeInterfata sau
class NumeClasa implements Interfata1, Interfata2, ...
O clasa poate implementa oricate interfete sau poate sa nu implementeze nici una.
In cazul in care o clasa implementeaza o anumita interfata, atunci trebuie obligatoriu sa
specifice cod pentru toate metodele interfetei. Din acest motiv, odata creata si folosita la
implementarea unor clase, o interfata nu mai trebuie modificata, in sensul ca adaugarea
unor metode noi sau schimbarea signaturii metodelor existente vor duce la erori in
compilarea claselor care o implementeaza. Evident, o clasa poate avea si alte metode si
variabile membre in afara de cele definite in interfata.
O interfata nu este o clasa, dar orice referinta de tip interfata poate primi ca valoare o
referinta la un obiect al unei clase ce implementeaza interfata respectiva. Din acest motiv,
interfetele pot fi privite ca tipuri de date si vom spune adesea ca un obiect are tipul X,
unde X este o interfata, dacacesta este o instanta a unei clase ce implementeaza interfata
X.
Implementarea unei interfete poate sa fie si o clasa abstracta.

2.
// Elaborati un Servlet care va sterge din
tabelul `test(id, nume, prenume, info)` al bazei
de date `TestDB`
// inregistrarea cu id-ul 10. Numele si parola
de conectare (username: root; password: 1234)

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class InsertIntoDatabase extends


HttpServlet {

public void doGet(HttpServletRequest


req, HttpServletResponse res) throws
Exception {

Class.forName("com.mysql.jdbc.Driver").new
Instance();
Connection con =
DriverManager.getConnection("jdbc:mysql://l
ocalhost:3306/TestDB", "root", "1234");

PreparedStatement statement =
con.prepareStatement("DELETE FROM test
WHERE id = ?");
statement.setString(1, "10");

statement.execute();

con.close();
}
}
3.
// Elaborati un program ce va crea o fereastra si label.setBackground(Color.red);
prin intermediul unui obiect de tip java.awt.List culori = new List(3);
va schimba culoarea fundalului culori.add(" Rosu ");
// unui obiect de tip java.awt.Label culori.add(" Verde ");
culori.add(" Albastru ");
import java.awt.Color; culori.select(3);
import java.awt.Frame; add(label);
import java.awt.GridLayout; add(culori);
import java.awt.Label; setSize(200, 200);
import java.awt.List; culori.addItemListener(this);
import java.awt.event.ItemEvent; }
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter; public void itemStateChanged(ItemEvent e) {
import java.awt.event.WindowEvent; switch (culori.getSelectedIndex())
{
class Fereastra extends Frame implements case 0:
ItemListener {
label.setBackground(Color.red);
private static final long serialVersionUID = break;
1L; case 1:

private Label label; label.setBackground(Color.green);


private List culori; break;
case 2:
public Fereastra(String titlu) {
super(titlu); label.setBackground(Color.blue);
this.addWindowListener(new }
WindowAdapter() { }
public void }
windowClosing(WindowEvent e) {
System.exit(0); public class Test {
} public static void main(String args[]) {
}); Fereastra f = new Fereastra(" List
setLayout(new GridLayout(2, ");
1)); f.setVisible(true);
label = new Label(" Alegeti }
culoarea ", Label.CENTER); }
MOD 2:
1. Ce este un fir de executie?
Definitie:
Un fir de executie este o succesiune sceventiala de instructiuni care se executa in cadrul
unui proces.

Un fir de executie este similar unui proces secvential, in sensul ca are un inceput, o
secventa de executie si un sfarsit. Diferenta dintre un fir de executie si un proces consta
in faptul ca un fir de executie nu poate rula independent ci trebuie sa ruleze in cadrul
unui proces.

Numiti si descrieti starile firelor de executie:


Asadar, un fir de executie se poate da si in una din urma toarele patru stari:
”New Thread”
”Runnable”
”Not Runnable”
”Dead”

Starea ”New Thread”


Un fir de executie se ga seste in aceasta stare imediat dupa crearea sa, cu alte cuvinte
dupa instantierea unui obiect din clasa Thread sau dintr-o subclasa a sa.

Thread fir = new Thread(obiectActiv); // fir se gaseste in starea "New Thread"

In aceasta stare firul este ”vid”, el nu are alocate nici un fel de resurse sistem si singura
operatiune pe care o putem executa asupra lui este lansarea in executie, prin metoda start.
Apelul orica rei alte metodein afara de start
nu are nici un sens si va provoca o exceptie de tipul IllegalThreadStateException.

Starea ”Runnable”
Dupa apelul metodei start un fir va trece in starea ”Runnable”, adica va fi in executie.
fir.start();
//fir se gaseste in starea "Runnable"

Un fir aflat in starea ”Runnable” nu inseamna neapa rat ca se ga seste efectiv in executie,
adica instructiunile sale sunt interpretate de procesor. Acest lucru se ıntampla din cauza
ca majoritatea calculatoarelor au un singur procesor iar acesta nu poate rula simultan
toate firele de executie care se gasesc in starea ”Runnable”. Pentru a rezolva aceasta
problema exista o planificare care sa partajeze dinamic si corect procesorul intre toate
firele de executie care sunt in starea ”Runnable”. Asadar, un fir care ”ruleaza ” poate sa
-si astepte de fapt randul la procesor.

Starea ”Not Runnable”


Un fir de executie poate ajunge in aceaata stare in una din urmatoarele situatii:
Este ”adormit” prin apelul metodei sleep;
A apelat metoda wait, asteptand ca o anumita conditie sa fie satisfacuta ;

Starea ”Dead”
Este starea in care ajunge un fir de executie la terminarea sa. Un fir nu poate fi oprit din
program printr-o anumita metoda , ci trebuie sa se termine in mod natural la incheierea
metodei run pe care o executa . Spre deosebire de versiunile curente ale limbajului Java,
in versiunile mai vechi exista metoda stop a clasei Thread care termina fortat un fir de
executie, insa aceasta a fost eliminata din motive de securitate. Asadar, un fir de executie
trebuie sa -si ”aranjeze” singur propria sa ”moarte”.

2.
// Elaborati un Servlet care va extrage din tabelul Connection con =
`test(id, nume, prenume, info)` al bazei de date DriverManager.getConnection("jdbc:mysql://loc
`TestDB` alhost:3306/TestDB", "root", "1234");
// cimpurile id si nume, si le va afisa in consola.
Numele si parola de conectare (username: root; Statement st =
password: 1234) con.createStatement();
String sql = ("SELECT * FROM
import java.io.*; log;");
import java.sql.*; ResultSet rs =
import javax.servlet.*; st.executeQuery(sql);
import javax.servlet.http.*; while(rs.next()) {

public class GetDataTable extends HttpServlet{ System.out.println(rs.getInt(1) + " " +


rs.getString(2));
public void doGet(HttpServletRequest req, }
HttpServletResponse res) throws Exception {
con.close();
}
Class.forName("com.mysql.jdbc.Driver").newInst }
ance();
3.
// Creati un program care sa afle elementul }
majoritar dintr-un array. Array-ul se va citi din }
// fisierul majoritar.in . In caz ca nu exista un
element majoritar se va afisa -1; if ( cand < 0 ) {

import java.io.File; System.out.println("-1");


import java.io.FileNotFoundException; } else {
import java.util.Scanner; int nr = 0;
for (int i = 0; i < n;
public class ElementMajoritar { i++)
if (elem[i]
public static void main(String args[]) { == cand )
Scanner sc = null; nr++;
try { if ( nr >= n / 2) {
sc = new Scanner(new
File("majoritar.in")); System.out.println(cand);
int n = sc.nextInt(); } else {
int elem[] = new int[n];
int cand = -1; int k = 0; System.out.println("-1");
for ( int i = 0; i < n; i++) }
{ }
int nr =
sc.nextInt(); } catch (FileNotFoundException e)
elem[i] = nr; {
if (k == 0) { e.printStackTrace();
cand = nr; }
k = 1;
} else if ( cand ==
nr) { }
k++;
} else { }
k--;
MOD 3:
1. Crearea unui vector presupune realizarea urma toarelor etape:

•Declararea vectorului - Pentru a putea utiliza un vector trebuie,inainte de toate, sa-l


declara m. Acest lucru se face prin expresii de forma:

Tip[] numeVector; sau


Tip numeVector[];
ca in exemplele de mai jos:
int[] intregi; String adrese[];

•Instantierea
Declararea unui vector nu implica si alocarea memoriei necesare pentru retinerea
elementelor. Operatiunea de alocare a memoriei, numita si instantierea vectorului, se
realizeaza intotdeauna prin intermediul op-eratorului new. Instantierea unui vector se va
face printr-o expresie de genul:

numeVector = new Tip[nrElemente];

•Initializarea (optional) Dupa declararea unui vector, acesta poate fi initializat, adica
elementele sale pot primi niste valori initiale, evident daca este cazul pentru asa ceva. In
acest caz instantierea nu mai trebuie facuta explicit, alocarea memoriei fa candu-se
automat in functie de numa rul de elemente cu care se initializeaza vectorul.
String culori[] = {"Rosu", "Galben", "Verde"}; int []factorial = {1, 1, 2, 6, 24, 120};
Primul indice al unui vector este 0, deci pozitiile unui vector cu n ele-mente vor fi
cuprinse intre 0 si n − 1. Nu sunt permise constructii de genul Tip
numeVector[nrElemente], alocarea memoriei fa candu-se doar prin in-termediul
opearatorului new.
int v[10]; //ilegal
int v[] = new int[10]; //correct

2.
// Elaborati un program care va afisa } catch (IOException e) {
imaginea 'test.jpg', localizata in directoria }
'C:/img/' intr-un obiect
// de tip JFrame cu dimensiunile 400x400 }
pixeli.
public void paint(Graphics g) {
import java.awt.*; g.drawImage(img, 0, 0, null);
import java.awt.image.*; }
import java.io.*;
import javax.imageio.*; public static void main(String[] args) {
import javax.swing.*;
JFrame f = new JFrame("Test");
public class LoadImage extends Component
{ f.setDefaultCloseOperation(JFrame.EXIT_ON_
CLOSE);
private static final long f.add(new LoadImage());
serialVersionUID = 1L; f.setLocationRelativeTo(null);
private BufferedImage img; f.setResizable(false);
f.setSize(new Dimension(400, 400));
public LoadImage() { f.setVisible(true);
try { }
img = ImageIO.read(new }
File("C:/img/test.jpg"));
3.
// Creati o fereastra in care sa afisati numerele frame.setLocationRelativeTo(null);
prime de la 0 la 100 intr-un aranjament de tip frame.setVisible(true);
GridLayout }

import java.awt.Color; public void findPrimNumbers() {


import java.awt.GridLayout; for (int i = 3; i < 100; i++) {
boolean prim = true;
import javax.swing.BorderFactory; for (int j = 2; j < i / 2; j++) {
import javax.swing.JFrame; if (i % j == 0) {
import javax.swing.JLabel; prim = false;
import javax.swing.JPanel; break;
}
}
public class Test { if (prim) addElement(i);
}
private JPanel pan; }
private JLabel lab;
private JFrame frame; public void addElement(int i) {
lab = new JLabel(i + " ");
public Test(String name) {
frame = new JFrame(name);
lab.setHorizontalAlignment(JLabel.CENTER);
pan = new JPanel();
pan.setLayout(new
GridLayout(2, 13)); lab.setBorder(BorderFactory.createLineBorder(Col
or.black));
addElement(2); pan.add(lab);
findPrimNumbers(); }

public static void main(String args[]) {


frame.setDefaultCloseOperation(JFrame.EXI new Test("Numerele prime");
T_ON_CLOSE); }
frame.add(pan); }
frame.pack();
MOD 4:
1. Modelul AWT
Pachetul care ofera componente AWT este java.awt.
Obiectele grafice sunt derivate din Component, cu exceptia meniurilor care descind din
clasa MenuComponent. Asadar, prin notiunea de componenta vom intelege in continuare
orice obiect care poate avea o reprezentare grafica si care poate interactiona cu
utilizatorul. Exemple de componente sunt fere-strele, butoanele, listele, bare de defilare,
etc. Toate componentele AWT sunt definte de clase proprii ce se gasesc in pachetul
java.awt, clasa Component fiind superclasa abstracta a tuturor acestor clase.
Componentele AWT
Dupa cum am spus deja, toate componentele AWT sunt definte de clase proprii ce se
gasescin pachetul java.awt, clasa Component fiind superclasa abstracta a tuturor acestor
clase.
Button - butoane cu eticheta formata dintr-un text pe o singura linie;
Canvas - suprafata pentru desenare;
Checkbox - componenta ce poate avea doua sta ri; mai multe obiecte de acest tip
pot fi grupate folosind clasa CheckBoxGroup;
Choice - liste in care doar elementul selectat este vizibil si care se deschid la apa
sarea lor;
Container - superclasa tuturor suprafetelor de afisare (vezi ”Suprafete de
afisare”);
Label - etichete simple ce pot contine o singura linie de text needitabil;
List - liste cu selectie simpla sau multipla ;
Scrollbar - bare de defilare orizontale sau verticale;
TextComponent - superclasa componentelor pentru editarea textu-lui: TextField
(pe o singura linie) si TextArea (pe mai multe linii).

2.
// Creati un applet, in cadrul caruia, odata backg = backbuffer.getGraphics();
cu apasarea click-ului sting la mouse, backg.setColor(Color.black);
pointer-ul backg.fillRect(0, 0, width, height);
// mouse-ului se va comporta ca un brush ( backg.setColor(Color.white);
va colora un cerc (10px) imprejurul
punctului in care addMouseMotionListener(this);
// se afla) }

import java.applet.Applet; public void mouseMoved(MouseEvent e) {


import java.awt.Color; }
import java.awt.Graphics;
import java.awt.Image; public void mouseDragged(MouseEvent e) {
import java.awt.event.MouseEvent; int x = e.getX();
import int y = e.getY();
java.awt.event.MouseMotionListener; backg.fillOval(x - 5, y - 5, 10, 10);
repaint();
public class BrushTest extends Applet }
implements MouseMotionListener {
public void update(Graphics g) {
int width, height; g.drawImage(backbuffer, 0, 0,
Image backbuffer; this);
Graphics backg; }

public void init() { public void paint(Graphics g) {


width = getSize().width; update(g);
height = getSize().height; }
}
backbuffer =
createImage(width, height);
3.
// Elaborati un program care va contine o metoda ce poate primi ca parametri oricite
valori de tip intreg
// si returneaza maximul dintre acesta care va fi afisat in consola.

import java.util.Arrays;

public class UnkArgsTest {


public static void main(String...args) {
System.out.println(getMax(1, -1, 8, 9, 20, 2));
}

public static int getMax(int...ints) {


Arrays.sort(ints);
return ints[ints.length - 1];
}
}

Vr.5:
1. Conceptul de desenare
Un program Java care are interfata grafica cu utilizatorul trebuie sa deseneze pe ecran
toate componentele sale care au o reprezentare vizual˘. Aceasta desenare include
componentele standard folosite in aplicatie precum si cele definite de ca tre programator.
Desenarea componentelor se face automat si este un proces care se executa in urma
toarele situatii:
la afisarea pentru prima data a unei componente;
la operatii de minimizare, maximizare, redimensionare a suprafetei de afisare;
ca ra spuns al unei solicita ri explicite a programului.

Metoda paint
Dupa cum am spus, toate desenele care trebuie sa apara pe o suprafata de afisare se
realizeaza in metoda paint a unei componente. Metoda paint este definita in superclasa
Component insa nu are nici o implementare si, din acest motiv, orice obiect grafic care
doreste sa se deseneze trebuie sa o suprade-fineasca pentru a-si crea propria sa
reprezentare. Componentele standard AWT au deja supradefinita aceasta metoda deci nu
trebuie sa ne preocupe desenarea lor, insa putem modifica reprezentarea lor grafica prin
crearea unei subclase si supradefinirea metodei paint, avand insa grija sa apela m si
metoda superclasei care se ocupa cu desenarea efectiva a componentei.

2.
// Elaborati un Servlet care va sterge din tabelul `test(id, nume, prenume, info)` al bazei
de date `TestDB`
// inregistrarea cu id-ul 10. Numele si parola de conectare (username: root; password:
1234)

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class InsertIntoDatabase extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res) throws


Exception {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/TestDB", "root", "1234");

PreparedStatement statement = con.prepareStatement("DELETE FROM


test WHERE id = ?");
statement.setString(1, "10");

statement.execute();

con.close();
}
}

3.
// Creati un program care va afisa maximul a trei numere cu ajutorul operatorului ternar.
// In caz ca numerele sunt egale se va arunca o noua exceptie (MyException) cu mesajul
"numerele sunt egale"
// Numerele se vor citi de la tastatura.

import java.util.Scanner;

class MyException extends Throwable {

private static final long serialVersionUID = 1L;

public MyException(String msg) {


super("New mesage: " + msg);
}
}

public class Test {


private static Scanner s;

public static void main(String args[]) {


try {
s = new Scanner(System.in);
int a = s.nextInt();
int b = s.nextInt();
int c = s.nextInt();

if (a == b && b == c) throw new MyException("numerele sunt


egale");

int max = (a > b) ? (a > c) ? a : (b > c) ? b : c : (b > c) ? b : c;

System.out.println(max);

} catch (MyException e) {
e.printStackTrace();
}
}

Vr.6:
1. Contextul grafic de desenare
Inainte ca utilizatorul sa poata desena, el trebuie sa obtina un context grafic de desenare
pentru suprafata ca reia ii apartine regiunea pe care se va desena. Un context grafic este,
de fapt, un obiect prin intermediul ca ruia putem controla procesul de desenare a unui
obiect. In general, desenarea se poate face:
pe o portiune de ecran, la imprimanta sau intr-o zona virtuala de memorie.

Un context grafic este specificat prin intermediul unui obiect de tip Graph-ics primit ca
parametru in metodele paint si update. In functie de dispozi-tivul fizic pe care se face
afisarea (ecran, imprimanta , plotter, etc) metodele de desenare au implementa ri interne
diferite, transparente utilizatorului.
Clasa Graphics pune la dispozitie metode pentru:
primitive grafice: desenarea de figuri geometrice, texte si imagini
stabilirea proprieta ¸ilor contextului grafic, adica stabilirea:
– culorii si fontului curente cu care se face desenarea,
– originii coordonatelor suprafetei de desenare,
– suprafetei in care sunt vizibile componentelor desenate,
– modului de desenare.
Proprieta tile contextului grafic
La orice tip de desenare parametrii legati de culoare, font, etc. vor fi specificati pentru
contextul grafic in care se face desenarea si nu vor fi trimisi ca ar-gumente metodelor
respective de desenare. In continuare, enumera m aceste proprieta ti si metodele asociate
lor din clasa Graphics.

Proprietate Metode

Culoarea de desenare Color getColor()


void setColor(Color c)

Fontul de scriere a textelor Font getFont()


void setFont(Font f)

Originea coordonatelor translate(int x, int y)

Zona de decupare Shape getClip()


(zona in care sunt vizibile desenele) void setClip(Shape s)

Modul de desenare void setXorMode(Color c)


void setPaintMode(Color c)

2.

import java.awt.Dimension;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;

class MainFrame extends JFrame {


private static final long serialVersionUID = 1L;

public MainFrame(String titlu) {


super(titlu);

InnerFrame fin1 = new InnerFrame();


InnerFrame fin2 = new InnerFrame();

fin1.setVisible(true);
fin2.setVisible(true);

JDesktopPane desktop = new JDesktopPane();

desktop.add(fin1);
desktop.add(fin2);
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(desktop);
fin2.moveToFront();
setLocationRelativeTo(null);

setVisible(true);
}
}

class InnerFrame extends JInternalFrame {


private static final long serialVersionUID = 1L;

private static int n = 0; // nr . de ferestre interne


private static final int x = 30, y = 30;

public InnerFrame() {
super(" Document # " + (++n), true, // resizable
true, // closable
true, // maximizable
true);// iconifiable
setLocation(x * n, y * n);
setSize(new Dimension(200, 100));
}
}

class InnerFrameTest {
public static void main(String args[]) {
new MainFrame(" Test ferestre interne ");
}
}
3.
// Alcatuiti un program care va calcula maximul dintr-un sir numeric. Datele se vor citi
dintr-un fisier (input.txt)
// in care pe prima pozitia va fi numarul 'n' de elemente urmat de n numere intregi.
Maximul va fi
// afisat intr-un alt fisier (output.txt).

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;

public class ArrayMaxValue {

private static Scanner s;


private static PrintWriter out;

public static void main(String args[]) throws FileNotFoundException {


s = new Scanner(new File("input.txt"));
out = new PrintWriter(new File("output.txt"));

int[] array = new int[s.nextInt()];


int max = Integer.MIN_VALUE;

for (int i = 0; i < array.length; i++) {


array[i] = s.nextInt();
if (array[i] > i) max = array[i];
System.out.println(array[i] + " " + max);
}

out.println(max);
out.close();
s.close();
}

Vr.7:
1. Folosirea imaginilor
In AWT este posibila folosirea imaginilor create extern in format gif sau jpeg. Orice
imagine va fi reprezentata ca o instanta a clasei Image. Aceasta nu este o clasa de
componente (nu extinde Component) ci implementeaza obiecte care pot fi desenate pe
suprafata unor componente cu metode specifice unui context grafic pentru componenta
respectiva (similar modului cum se deseneaza o linie sau un cerc).
Afisarea imaginilor
Afisarea unei imagini presupune realizarea urma toarilor doi pasi:
1.Crearea unui obiect de tip Image;
2.Afisarea propriu-zisa intr-un context grafic;

Crearea unui obiect de tip Image se face folosind o imagine dintr-un fisier fie aflat pe
masina pe care se lucreaza , fie aflat la o anumita adresa Web (URL). Metodele pentru
inca rcarea unei imagini dintr-un fisier se ga sesc in clasele Applet si Toolkit, avand insa
aceeasi denumire getImage si urma toarele formate:

Applet Toolkit
getImage(URL url) getImage(URL url)
getImage(URL url, String fisier) getImage(String fisier)

Afisarea unei imagini intr-un context grafic se realizeaza prin intermediul metodei
drawImage din clasa Graphics si, in general, va fi facuta in metoda paint a unei
componente. Cele mai uzuale formate ale metodei sunt:
boolean drawImage(Image img, int x, int y, ImageObserver observer) boolean
drawImage(Image img, int x, int y, Color bgcolor,
ImageObserver observer)
boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver
observer)
boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor,
ImageObserver observer)

2.
// Creati un program java care sa adauge intr-un obiect de tip JFrame 2 ferestre interne.

import java.awt.Dimension;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;

class MainFrame extends JFrame {


private static final long serialVersionUID = 1L;

public MainFrame(String titlu) {


super(titlu);

InnerFrame fin1 = new InnerFrame();


InnerFrame fin2 = new InnerFrame();

fin1.setVisible(true);
fin2.setVisible(true);

JDesktopPane desktop = new JDesktopPane();

desktop.add(fin1);
desktop.add(fin2);

setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(desktop);
fin2.moveToFront();
setLocationRelativeTo(null);

setVisible(true);
}
}
class InnerFrame extends JInternalFrame {
private static final long serialVersionUID = 1L;

private static int n = 0; // nr . de ferestre interne


private static final int x = 30, y = 30;

public InnerFrame() {
super(" Document # " + (++n), true, // resizable
true, // closable
true, // maximizable
true);// iconifiable
setLocation(x * n, y * n);
setSize(new Dimension(200, 100));
}
}

class InnerFrameTest {
public static void main(String args[]) {
new MainFrame(" Test ferestre interne ");
}
}
3.
// Elaborati un program care sa gaseasca String-ul cu cel mai mare numar de caractere si
nu contine
// cifre. Fiecare sir de caractere se va citi din fisier (input.txt) unde String-urile vor fi
plasate
// fiecare pe un rind nou. String-ul gasit va fi scris intr-un fisier (output.txt).

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;

public class ArrayMaxString {

private static BufferedReader in;


private static PrintWriter out;

public static void main(String args[]) throws IOException {


out = new PrintWriter(new File("output.txt"));

in = new BufferedReader(new FileReader("input.txt"));


String str, maxLengthStr = "";
while ((str = in.readLine()) != null) {
boolean ok = true;
for (int i = 0; i < str.length(); i++)
if (str.charAt(i) > '0' && str.charAt(i) < '9') ok = false;
if (ok && str.length() > maxLengthStr.length()) maxLengthStr =
str;
}

out.print(maxLengthStr);

out.close();
in.close();
}

Создать программу, которая считывает количество строк в файле и выводит данное


число в консоль. Использовать объект класса FileInputStream.

import java.io.;
public class LineCount {
static public void main(String args[]) throws Exception {
Change the directory where the count files are existing
File di = new File(ccount);
File fl[] = di.listFiles();
int j;
int count=0;
String str=;
String totalinfo=;

for (j=0; j fl.length; j++) {


System.out.println(+fl[j]);
FileInputStream fis = new
FileInputStream(fl[j].getCanonicalFile());
LineNumberReader l = new LineNumberReader(new
BufferedReader(new InputStreamReader(fis)));
while ((str=l.readLine())!=null) {
count = l.getLineNumber();
}
System.out.println(count);

String filename = fl[j].getName().toString();


totalinfo = filename+-------------+count;

FileOutputStream file = new FileOutputStream(cone.txt,true);


append
PrintStream printtofile = new PrintStream(file);
printtofile.println(totalinfo);
printtofile.close();
file.close();
BufferedWriter bw = new BufferedWriter(new FileWriter(cone.txt,
false));
bw.write(totalinfo);
bw.newLine();
bw.close();

}
}
}

Vr.8:
1. Folosirea ferestrelor
Pentru a fi afisate pe ecran componentele grafice ale unei aplicatii trebuie plasate pe o
suprafata de afisare (container). Fiecare componenta poate fi continuta doar intr-un
singur container, ada ugarea ei pe o suprafta noua de afisare determinand eliminarea ei
de pe vechiul container pe care fusese plasat˘. Intrucat containerele pot fi incapsulate in
alte containere, o com-ponenta va face parte la un moment dat dintr-o ierarhie. Ra da
cina acestei ierarhii trebuie sa fie un asa numit container de nivel inalt, care este
reprezen-tat de una din clasele JFrame, JDialog sau JApplet. Intrucat de appleturi ne vom
ocupa separat, vom analiza in continuare primele doua clase.
Clasa Window
Clasa Window este rar utilizata in mod direct deoarece permite doar crearea unor ferestre
care nu au chenar si nici bara de meniuri. Este utila atunci cand dorim sa afisam ferestre
care nu interactioneaza cu utilizatorul ci doar ofera anumite informatii.
Metodele mai importante ale clasei Window, care sunt de altfel mostenite de toate
subclasele sale, sunt date de mai jos:
show ; hide; isShowing ; dispose ; pack ; getFocusOwner

Clasa Frame
Este derivata a clasei Window si este folosita pentru crearea de ferestre inde-pendente si
functionale, eventual continand o bara de meniuri. Orice aplicatie cu interfata grafica
conttine cel putin o fereastra , cea mai importanta fiind numita si fereastra principal˘.
Constructorii uzuali ai clasei Frame permit crearea unei ferestre cu sau fa ra titlu, initial
invizibila . Pentru ca o fereastra sa devina vizibila se va apela metoda show definita in
superclasa Window.

2.
// Elaborati un Servlet care va introduce in tabelul `test(id, nume, prenume, info)` al bazei
de date `TestDB`
// o inregistrare. Numele si parola de conectare (username: root; password: 1234)

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class InsertIntoDatabase extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res) throws


Exception {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/TestDB", "root", "1234");

PreparedStatement statement = con.prepareStatement("INSERT INTO


test(nume, prenume, info) VALUES (?, ?, ?)");
statement.setString(1, "Nume");
statement.setString(2, "Prenume");
statement.setString(3, "Virsta");

statement.execute();

con.close();
}
}
3.
// Creati un applet care va afisa tabela inmultirii la 2 (de la 1..10). Textul va fi afisat
// in coloana printr-un ciclu while.

import java.applet.Applet;
import java.awt.Graphics;

public class TestApplet extends Applet {

private static final long serialVersionUID = 1L;

public void paint(Graphics g) {


int i = 1;
while (i <= 12) {
g.drawString("2 * " + i + " = " + (2*i), 20, 20*i);
i = i + 1;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

Vr.9:
1. Modelul AWT
Pachetul care ofera componente AWT este java.awt.
Obiectele grafice sunt derivate din Component, cu exceptia meniurilor care descind din
clasa MenuComponent. Asadar, prin notiunea de componenta vom intelege in continuare
orice obiect care poate avea o reprezentare grafica si care poate interactiona cu
utilizatorul. Exemple de componente sunt fere-strele, butoanele, listele, bare de defilare,
etc. Toate componentele AWT sunt definte de clase proprii ce se gasesc in pachetul
java.awt, clasa Component fiind superclasa abstracta a tuturor acestor clase.
Clasa Label
Un obiect de tip Label (eticheta ) reprezinta o componenta pentru plasarea unui text pe o
suprafata de afisare. O eticheta este formata dintr-o singura linie de text static ce nu
poate fi modificat de ca tre utilizator, dar poate fi modificat din program.
Clasa Button
Un obiect de tip Button reprezinta o componenta pentru plasarea unui bu-ton etichetat
pe o suprafata de afisare. Textul etichetei este format dintr-o singura linie.
2.
// Elaborati un Servlet care va extrage din tabelul `test(id, nume, prenume, info)` al bazei
de date `TestDB`
// cimpurile id si nume, si le va afisa in consola. Numele si parola de conectare
(username: root; password: 1234)

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class GetDataTable extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponse res) throws


Exception {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/TestDB", "root", "1234");

Statement st = con.createStatement();
String sql = ("SELECT * FROM log;");
ResultSet rs = st.executeQuery(sql);
while(rs.next()) {
System.out.println(rs.getInt(1) + " " + rs.getString(2));
}

con.close();
}
}

3.
// Creati o clasa care va porni 2 fire de executie, unul sa afiseze numerele pare de la 0 la
10, iar
// celalalt de cele impare de la 0 la 10.

public class ThreadTest {

public static void main(String[] args) {


Runnable nOdd = new Numbers(true);
Runnable nEven = new Numbers(false);

Thread t1 = new Thread(nOdd);


Thread t2 = new Thread(nEven);

t1.start();
t2.start();
}
}

class Numbers implements Runnable {

private boolean odd = false;

public Numbers(boolean odd) {


this.odd = odd;
}

public void run() {


for (int i =0 ; i <= 10; i++) {
if (odd) {
if (i % 2 != 0) System.out.print(i + " ");
} else {
if (i % 2 == 0) System.out.print(i + " ");
}
}
}

Vr.10:
1. S¸iruri de caractere
In Java, un sir de caractere poate fi reprezentat printr-un vector format din elemente de tip
char, un obiect de tip String sau un obiect de tip StringBuffer.
Daca un sir de caractere este constant (nu se doreste schimbarea continutului sa pe
parcursul executiei programului) atunci el va fi declarat de tipul String, altfel va fi
declarat de tip StringBuffer. Diferenta principala intre aceste clase este ca StringBuffer
pune la dispozitie metode pentru modificarea continutului sirului, cum ar fi: append,
insert, delete, reverse.
Uzual, cea mai folosita modalitate de a lucra cu siruri este prin intermediul clasei
String, care are si unele particularita ti fata de restul claselor menite sa simplifice cat
mai mult folosirea sirurilor de caractere. Clasa StringBuffer va fi utilizata predominant in
aplicatii dedicate procesa rii textelor cum ar fi editoarele de texte.
Exemple echivalente de declarare a unui sir:
String s = "abc";
String s = new String("abc"); char data[] = {’a’, ’b’, ’c’}; String s = new String(data);
Observati prima varianta de declarare a sirului s din exemplul de mai sus - de altfel,
cea mai folosita - care prezinta o particularitate a clasei String fata de restul claselor
Java referitoare la instantierea obiectelor sale.
Concatenarea sirurilor de caractere se face prin intermediul operatorului+ sau, in
cazul sirurilor de tip StringBuffer, folosind metoda append.
String s1 = "abc" + "xyz"; String s2 = "123";
String s3 = s1 + s2;
2.
// Elaborati un program care va afisa imaginea 'test.jpg', localizata in directoria 'C:/img/'
intr-un obiect
// de tip JFrame cu dimensiunile 400x400 pixeli.

import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

public class LoadImage extends Component {

private static final long serialVersionUID = 1L;


private BufferedImage img;

public LoadImage() {
try {
img = ImageIO.read(new File("C:/img/test.jpg"));
} catch (IOException e) {
}

public void paint(Graphics g) {


g.drawImage(img, 0, 0, null);
}

public static void main(String[] args) {

JFrame f = new JFrame("Test");


f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new LoadImage());
f.setLocationRelativeTo(null);
f.setResizable(false);
f.setSize(new Dimension(400, 400));
f.setVisible(true);
}
}
3.
// Elaborati un program care sa gaseasca String-ul cu cel mai mare numar de caractere si
nu contine
// cifre. Fiecare sir de caractere se va citi din fisier (input.txt) unde String-urile vor fi
plasate
// fiecare pe un rind nou. String-ul gasit va fi scris intr-un fisier (output.txt).
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;

public class ArrayMaxString {

private static BufferedReader in;


private static PrintWriter out;

public static void main(String args[]) throws IOException {


out = new PrintWriter(new File("output.txt"));

in = new BufferedReader(new FileReader("input.txt"));


String str, maxLengthStr = "";
while ((str = in.readLine()) != null) {
boolean ok = true;
for (int i = 0; i < str.length(); i++)
if (str.charAt(i) > '0' && str.charAt(i) < '9') ok = false;
if (ok && str.length() > maxLengthStr.length()) maxLengthStr =
str;
}

out.print(maxLengthStr);

out.close();
in.close();
}

Vr.11:
1. Ce este o interfata ?
Definitie :
O interfata este o colectie de metode fara implementare si declaratii de constante.
Interfetele permit, alaturi de clase, definirea unor noi tipuri de date.
O interfata Java defineste un set de metode dar nu specifica nici o implementare
pentru ele. O clasa care implementeaza o interfata trebuie obligatoriu sa specifice
implementari pentru toate metodele interfetei, supunandu-se asadar unui anumit
comportament.
Interfata FilenameFilter
Instantele claselor ce implementeaza aceasta interfata sunt folosite pentru a crea filtre
pentru fisiere si sunt primite ca argumente de metode care listeaza continutul unui
director, cum ar fi metoda list a clasei File.
Asadar, putem spune ca metoda list primeste ca argument o alta functie care specifica
daca un fisier va fi returnat sau nu (criteriul de filtrare).
Interfata FilenameFilter are o singura metoda : accept care specifica criteriul de
filtrare si anume, testeaza daca numele fisierului primit ca para-metru indeplineste
conditiile dorite de noi.
Definitia interfetei este:
public interface FilenameFilter {
public boolean accept(File dir, String numeFisier);
}
Asadar, orice clasa de specificare a unui filtru care implementeza interfata
FilenameFilter trebuie sa implementeze metoda accept a acestei interfete. Aceste clase
mai pot avea si alte metode, de exemplu un constructor care sa primeasca criteriul de
filtrare.
2.
// Elaborati un Servlet care va sterge din tabelul `test(id, nume, prenume, info)` al bazei
de date `TestDB`
// inregistrarea cu id-ul 10. Numele si parola de conectare (username: root; password:
1234)

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class InsertIntoDatabase extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res) throws


Exception {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/TestDB", "root", "1234");

PreparedStatement statement = con.prepareStatement("DELETE FROM


test WHERE id = ?");
statement.setString(1, "10");

statement.execute();

con.close();
}
}

3.
// Creati un applet care va afisa tabela inmultirii la 2 (de la 1..10). Textul va fi afisat
// in coloana printr-un ciclu while.

import java.applet.Applet;
import java.awt.Graphics;

public class TestApplet extends Applet {

private static final long serialVersionUID = 1L;

public void paint(Graphics g) {


int i = 1;
while (i <= 12) {
g.drawString("2 * " + i + " = " + (2*i), 20, 20*i);
i = i + 1;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

Vr.12:
1. Ce sunt fluxurile?
Definitii:
Un flux este un canal de comunicatie unidirectional intre doua procese.
Un proces care descrie o sursa externa de date se numeste proces produca tor. Un
proces care descrie o destinatie externa pentru date se numeste proces consumator.
Un flux care citeste date se numeste flux de intrare. Un flux care scrie date se numeste
flux de iesire.
Clasificarea fluxurilor
Exista trei tipuri de clasificare a fluxurilor:
•Dupa directia canalului de comunicatie deschis fluxurile se impart in:
– fluxuri de intrare (pentru citirea datelor)
– fluxuri de iesire (pentru scrierea datelor)

•Dupa tipul de date pe care opereaza :


– fluxuri de octeti (comunicarea seriala se realizeaza pe 8 biti)
– fluxuri de caractere (comunicarea seriala se realizeaza pe 16 biti)

•Dupa actiunea lor:


– fluxuri primare de citire/scriere a datelor (se ocupa efectiv cu citirea/scrierea datelor)
– fluxuri pentru procesarea datelor

2.

import java.awt.Dimension;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;

class MainFrame extends JFrame {


private static final long serialVersionUID = 1L;

public MainFrame(String titlu) {


super(titlu);

InnerFrame fin1 = new InnerFrame();


InnerFrame fin2 = new InnerFrame();

fin1.setVisible(true);
fin2.setVisible(true);

JDesktopPane desktop = new JDesktopPane();

desktop.add(fin1);
desktop.add(fin2);

setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(desktop);
fin2.moveToFront();
setLocationRelativeTo(null);

setVisible(true);
}
}

class InnerFrame extends JInternalFrame {


private static final long serialVersionUID = 1L;

private static int n = 0; // nr . de ferestre interne


private static final int x = 30, y = 30;

public InnerFrame() {
super(" Document # " + (++n), true, // resizable
true, // closable
true, // maximizable
true);// iconifiable
setLocation(x * n, y * n);
setSize(new Dimension(200, 100));
}
}

class InnerFrameTest {
public static void main(String args[]) {
new MainFrame(" Test ferestre interne ");
}
}
3.
// Creati un program care va afisa maximul a trei numere cu ajutorul operatorului ternar.
// In caz ca numerele sunt egale se va arunca o noua exceptie (MyException) cu mesajul
"numerele sunt egale"
// Numerele se vor citi de la tastatura.

import java.util.Scanner;

class MyException extends Throwable {

private static final long serialVersionUID = 1L;

public MyException(String msg) {


super("New mesage: " + msg);
}
}

public class Test {

private static Scanner s;

public static void main(String args[]) {


try {
s = new Scanner(System.in);
int a = s.nextInt();
int b = s.nextInt();
int c = s.nextInt();

if (a == b && b == c) throw new MyException("numerele sunt


egale");

int max = (a > b) ? (a > c) ? a : (b > c) ? b : c : (b > c) ? b : c;

System.out.println(max);

} catch (MyException e) {
e.printStackTrace();
}
}

Программа считывает данные с клавиатуры, считает количество введенных чисел и


выводит их на экран.

import java.io.;
class FileIO {

public static void main(String[] args) {

System.out.println(Enter some numbers.);


StreamTokenizer st = new StreamTokenizer(
new BufferedReader(new InputStreamReader(System.in)));
File f = new File(temp.out);
int numberCount = 0;
try {
DataOutputStream dos = new DataOutputStream(
new BufferedOutputStream(new FileOutputStream(f)));
while (st.nextToken() != st.TT_EOF) {
if (st.ttype == st.TT_NUMBER) {
dos.writeDouble(st.nval);
numberCount++;
}
}
System.out.println(numberCount= + numberCount);
dos.flush();
dos.close();
DataInputStream dis = new DataInputStream(
new BufferedInputStream(new FileInputStream(f)));
for (int i = 0; i numberCount; i++) {
System.out.println(number= + dis.readDouble());
}
dis.close();
} catch (IOException e) {
System.err.println(FileIO + e);
} finally {
f.delete();} } }
............... Example compile and run(s)
% javac file.java

% java FileIO
Enter some numbers.
123
4.4 5.5
6.67
^D
numberCount=6
number=1.0
number=2.0
number=3.0
number=4.4
number=5.5
number=6.67
... end of example run(s)
Vr.13:
1. Serializarea obiectelor
Serializarea obiectelor se realizeaza prin intermediul fluxurilor definite de clasele
ObjectOutputStream (pentru salvare) si ObjectInputStream(pentru restaurare).
Acestea sunt fluxuri de procesare, ceea ce inseamna ca vor fi folosite impreuna cu alte
fluxuri pentru scrierea/citirea efectiva a datelor pe mediul extern pe care va fi salvat, sau
de pe care va fi restaurat un obiect serializat.
Mecanismul implicit de serializare a unui obiect va salva numele clasei obiectului,
signatura clasei si valorile tuturor campurile serializabile ale obiec-tului. Referintele la
alte obiecte serializabile din cadrul obiectului curent vor duce automat la serializarea
acestora iar referintele multiple ca tre un acelasi obiect sunt codificate utilizand un
algoritm care sa poata reface ”reteaua de obiecte” la aceeasi stare ca atunci cand obiectul
original a fost salvat.
Clasele ObjectInputStream si ObjectOutputStream implementeaza interfetele
ObjectInput, respectiv ObjectOutput care extind DataInput, respectiv DataOutput, ceea
ce inseamna ca , pe langa metodele dedicate serializa rii obiectelor, vor
exista si metode pentru scrierea/citirea datelor primitive si a sirurilor de caractere.
Metodele pentru serializarea obiectelor sunt:
• writeObject, pentru scriere si
• readObject, pentru restaurare.

Clasa ObjectOutputStream
Scrierea obiectelor pe un flux de iesire este un proces extrem de simplu, secventa uzuala
fiind cea de mai jos:
ObjectOutputStream out = new ObjectOutputStream(fluxPrimitiv);
out.writeObject(referintaObiect);
out.flush();
fluxPrimitiv.close();
2.
// Creati un program java care sa adauge intr-un obiect de tip JFrame 2 ferestre interne.

import java.awt.Dimension;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;

class MainFrame extends JFrame {


private static final long serialVersionUID = 1L;

public MainFrame(String titlu) {


super(titlu);

InnerFrame fin1 = new InnerFrame();


InnerFrame fin2 = new InnerFrame();

fin1.setVisible(true);
fin2.setVisible(true);

JDesktopPane desktop = new JDesktopPane();


desktop.add(fin1);
desktop.add(fin2);

setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(desktop);
fin2.moveToFront();
setLocationRelativeTo(null);

setVisible(true);
}
}

class InnerFrame extends JInternalFrame {


private static final long serialVersionUID = 1L;

private static int n = 0; // nr . de ferestre interne


private static final int x = 30, y = 30;

public InnerFrame() {
super(" Document # " + (++n), true, // resizable
true, // closable
true, // maximizable
true);// iconifiable
setLocation(x * n, y * n);
setSize(new Dimension(200, 100));
}
}

class InnerFrameTest {
public static void main(String args[]) {
new MainFrame(" Test ferestre interne ");
}
}
3.
// Elaborati un program care va contine o metoda ce poate primi ca parametri oricite
valori de tip intreg
// si returneaza maximul dintre acesta care va fi afisat in consola.

import java.util.Arrays;

public class UnkArgsTest {


public static void main(String...args) {
System.out.println(getMax(1, -1, 8, 9, 20, 2));
}

public static int getMax(int...ints) {


Arrays.sort(ints);
return ints[ints.length - 1];
}
}

2. Написать программу, которая находит в файле строку или слово,


заменяет их и результат поиска выводит в консоли.

import java.io.;

public class BTest


{
public static void main(String args[])
{
try
{
File file = new File(file.txt);
BufferedReader reader = new BufferedReader(new
FileReader(file));
String line = , oldtext = ;
while((line = reader.readLine()) != null)
{
oldtext += line + rn;
}
reader.close();
replace a word in a file
String newtext = oldtext.replaceAll(drink,
Love);

To replace a line in a file


String newtext = oldtext.replaceAll(This is
test string 20000, blah blah blah);

FileWriter writer = new FileWriter(file.txt);


writer.write(newtext);writer.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}

file.txt
I drink Java
I sleep Java
This is test string 1
This is test string 20000
Vr.14:
1. Definitia Interfetei
O interfata este o colectie de metode fara implementare si declaratii de constante.
Interfetele permit, alaturi de clase, definirea unor noi tipuri de date.

Mostenire multipla prin interfete


Interfetele nu au nici o implementare si nu pot fi instantiate. Din acest motiv, nu
reprezinta nici o problema ca anumite clase sa implementeze mai multe interfete sau ca
o interfata sa extinda mai multe interfete (sa aiba mai multe superinterfete)
class NumeClasa implements Interfata1, Interfata2, ...
interface NumeInterfata extends Interfata1, Interfata2, ...
O interfata mosteneste atat constantele cat si declaratiile de metode de la
superinterfetele sale. O clasa mosteneste doar constantele unei interfete si
responsabilitatea implementa rii metodelor sale.
Evident, pot apa rea situatii de ambiguitate, atunci cand exista constante sau metode cu
aceleasi nume in mai multe interfete, insa acest lucru trebuie intotdeauna evitat, deoarece
scrierea unui cod care poate fi confuz este un stil prost de programare. In cazul in care
acest lucru se ıntampla , compilatorul nu va furniza eroare decat daca se incearca
referirea constantelor ambigue fa ra a le prefixa cu numele interfetei sau daca metodele
cu acelasi nume nu pot fi deosbite, cum ar fi situatia cand au aceeasi lista de argumente
dar tipuri returnate incompatibile.
2.
// Elaborati un Servlet care va introduce in tabelul `test(id, nume, prenume, info)` al bazei
de date `TestDB`
// o inregistrare. Numele si parola de conectare (username: root; password: 1234)

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class InsertIntoDatabase extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res) throws


Exception {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/TestDB", "root", "1234");

PreparedStatement statement = con.prepareStatement("INSERT INTO


test(nume, prenume, info) VALUES (?, ?, ?)");
statement.setString(1, "Nume");
statement.setString(2, "Prenume");
statement.setString(3, "Virsta");

statement.execute();

con.close();
}
}
3.
// Creati o clasa care va porni 2 fire de executie, unul sa afiseze numerele pare de la 0 la
10, iar
// celalalt de cele impare de la 0 la 10.

public class ThreadTest {

public static void main(String[] args) {


Runnable nOdd = new Numbers(true);
Runnable nEven = new Numbers(false);

Thread t1 = new Thread(nOdd);


Thread t2 = new Thread(nEven);

t1.start();
t2.start();
}
}

class Numbers implements Runnable {

private boolean odd = false;

public Numbers(boolean odd) {


this.odd = odd;
}

public void run() {


for (int i =0 ; i <= 10; i++) {
if (odd) {
if (i % 2 != 0) System.out.print(i + " ");
} else {
if (i % 2 == 0) System.out.print(i + " ");
}
}
}

Vr.15:
1. Modelul AWT
Pachetul care ofera componente AWT este java.awt.
Obiectele grafice sunt derivate din Component, cu exceptia meniurilor care descind din
clasa MenuComponent. Asadar, prin notiunea de componenta vom intelege in continuare
orice obiect care poate avea o reprezentare grafica si care poate interactiona cu
utilizatorul. Exemple de componente sunt fere-strele, butoanele, listele, bare de defilare,
etc. Toate componentele AWT sunt definte de clase proprii ce se gasesc in pachetul
java.awt, clasa Component fiind superclasa abstracta a tuturor acestor clase.
Clasa Checkbox
Un obiect de tip Checkbox (comutator) reprezinta o componenta care se poate ga si in
doua sta ri: ”selectata ” sau ”neselectata ” (on/off). Actiunea utilizatorului asupra unui
comutator il trece pe acesta in starea complemen-tara celei in care se ga sea. Este folosit
pentru a prelua o anumita optiune de la utilizator.
Clasa Choice
Un obiect de tip Choice defineste o lista de optiuni din care utilizatorul poate selecta una
singura . La un moment dat, din intreaga lista doar o sin-gura optiune este vizibila , cea
selectata in momentul curent. O componenta Choice este insotita de un buton etichetat
cu o sageata verticala la apa sarea ca ruia este afisata intreaga sa lista de elemente, pentru
ca utilizatorul sa poata selecta o anumita optiune.
2.
// Elaborati un program care va afisa imaginea 'test.jpg', localizata in directoria 'C:/img/'
intr-un obiect
// de tip JFrame cu dimensiunile 400x400 pixeli.

import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

public class LoadImage extends Component {

private static final long serialVersionUID = 1L;


private BufferedImage img;

public LoadImage() {
try {
img = ImageIO.read(new File("C:/img/test.jpg"));
} catch (IOException e) {
}

public void paint(Graphics g) {


g.drawImage(img, 0, 0, null);
}

public static void main(String[] args) {

JFrame f = new JFrame("Test");


f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new LoadImage());
f.setLocationRelativeTo(null);
f.setResizable(false);
f.setSize(new Dimension(400, 400));
f.setVisible(true);
}
}
3.
// Creati un program care va afisa maximul a trei numere cu ajutorul operatorului ternar.
// In caz ca numerele sunt egale se va arunca o noua exceptie (MyException) cu mesajul
"numerele sunt egale"
// Numerele se vor citi de la tastatura.

import java.util.Scanner;

class MyException extends Throwable {

private static final long serialVersionUID = 1L;

public MyException(String msg) {


super("New mesage: " + msg);
}
}

public class Test {

private static Scanner s;

public static void main(String args[]) {


try {
s = new Scanner(System.in);
int a = s.nextInt();
int b = s.nextInt();
int c = s.nextInt();

if (a == b && b == c) throw new MyException("numerele sunt


egale");

int max = (a > b) ? (a > c) ? a : (b > c) ? b : c : (b > c) ? b : c;

System.out.println(max);

} catch (MyException e) {
e.printStackTrace();
}
}

Vr.16:
1. Serializarea obiectelor
Serializarea obiectelor se realizeaza prin intermediul fluxurilor definite de clasele
ObjectOutputStream (pentru salvare) si ObjectInputStream(pentru restaurare).
Acestea sunt fluxuri de procesare, ceea ce inseamna ca vor fi folosite impreuna cu alte
fluxuri pentru scrierea/citirea efectiva a datelor pe mediul extern pe care va fi salvat, sau
de pe care va fi restaurat un obiect serializat.
Mecanismul implicit de serializare a unui obiect va salva numele clasei obiectului,
signatura clasei si valorile tuturor campurile serializabile ale obiec-tului. Referintele la
alte obiecte serializabile din cadrul obiectului curent vor duce automat la serializarea
acestora iar referintele multiple ca tre un acelasi obiect sunt codificate utilizand un
algoritm care sa poata reface ”reteaua de obiecte” la aceeasi stare ca atunci cand obiectul
original a fost salvat.
Clasele ObjectInputStream si ObjectOutputStream implementeaza interfetele
ObjectInput, respectiv ObjectOutput care extind DataInput, respectiv DataOutput, ceea
ce inseamna ca , pe langa metodele dedicate serializa rii obiectelor, vor
exista si metode pentru scrierea/citirea datelor primitive si a sirurilor de caractere.
Metodele pentru serializarea obiectelor sunt:
• writeObject, pentru scriere si
• readObject, pentru restaurare.

Clasa ObjectInputStream
Odata ce au fost scrise obiecte si tipuri primitive de date pe un flux, citirea acestora si
reconstruirea obiectelor salvate se va face printr-un flux de intrare de tip
ObjectInputStream. Acesta este de asemenea un flux de procesare si va trebui asociat cu
un flux pentru citirea efectiva a datelor, cum ar fi FileInputStream pentru date salvate
intr-un fisier. Secventa uzuala pentru deserializare este cea de mai jos:

ObjectInputStream in = new ObjectInputStream(fluxPrimitiv); Object obj =


in.readObject();
//sau
TipReferinta ref = (TipReferinta)in.readObject(); fluxPrimitiv.close();
2.

import java.awt.Dimension;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;

class MainFrame extends JFrame {


private static final long serialVersionUID = 1L;

public MainFrame(String titlu) {


super(titlu);

InnerFrame fin1 = new InnerFrame();


InnerFrame fin2 = new InnerFrame();

fin1.setVisible(true);
fin2.setVisible(true);
JDesktopPane desktop = new JDesktopPane();

desktop.add(fin1);
desktop.add(fin2);

setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(desktop);
fin2.moveToFront();
setLocationRelativeTo(null);

setVisible(true);
}
}

class InnerFrame extends JInternalFrame {


private static final long serialVersionUID = 1L;

private static int n = 0; // nr . de ferestre interne


private static final int x = 30, y = 30;

public InnerFrame() {
super(" Document # " + (++n), true, // resizable
true, // closable
true, // maximizable
true);// iconifiable
setLocation(x * n, y * n);
setSize(new Dimension(200, 100));
}
}

class InnerFrameTest {
public static void main(String args[]) {
new MainFrame(" Test ferestre interne ");
}
}
3.
// Creati o fereastra in care sa afisati numerele prime de la 0 la 100 intr-un aranjament de
tip GridLayout

import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Test {

private JPanel pan;


private JLabel lab;
private JFrame frame;

public Test(String name) {


frame = new JFrame(name);

pan = new JPanel();


pan.setLayout(new GridLayout(2, 13));

addElement(2);
findPrimNumbers();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(pan);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public void findPrimNumbers() {


for (int i = 3; i < 100; i++) {
boolean prim = true;
for (int j = 2; j < i / 2; j++) {
if (i % j == 0) {
prim = false;
break;
}
}
if (prim) addElement(i);
}
}

public void addElement(int i) {


lab = new JLabel(i + " ");
lab.setHorizontalAlignment(JLabel.CENTER);
lab.setBorder(BorderFactory.createLineBorder(Color.black));
pan.add(lab);
}

public static void main(String args[]) {


new Test("Numerele prime");
}
}
2. Написать программу, которая производит сериализацию объекта в
файл. Использовать класс ObjectInputStream.

import java.util.Vector;
import java.io.;

public class Queue extends Vector {

FIFO, first in first out

Queue() {
super();
}

void put(Object o) {
addElement(o);
}

Object get() {
if (isEmpty()) return null;
Object o = firstElement();
removeElement(o);
return o;
}

Object peek() {
if (isEmpty()) return null;
return firstElement();
}
}

To serialize (save the Queue state to a file)

public static void main(String args[]) {


Queue theQueue;

theQueue = new Queue();


theQueue.put(element 1);
theQueue.put(element 2);
theQueue.put(element 3);
theQueue.put(element 4);
System.out.println(theQueue.toString());

serialize the Queue


System.out.println(serializing theQueue);
try {
FileOutputStream fout = new FileOutputStream(thequeue.dat);
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(theQueue);
oos.close();
}
catch (Exception e) { e.printStackTrace(); }
}

To unserialize (to load a previously saved Queue)

public static void main(String args[]) {


Queue theQueue;

theQueue = new Queue();

unserialize the Queue


System.out.println(unserializing theQueue);
try {
FileInputStream fin = new FileInputStream(thequeue.dat);
ObjectInputStream ois = new ObjectInputStream(fin);
theQueue = (Queue) ois.readObject();
ois.close();
}
catch (Exception e) { e.printStackTrace(); }

System.out.println(theQueue.toString());
}

Vr.17:
1. Folosirea ferestrelor
Pentru a fi afisate pe ecran componentele grafice ale unei aplicatii trebuie plasate pe o
suprafata de afisare (container). Fiecare componenta poate fi continuta doar intr-un
singur container, ada ugarea ei pe o suprafta noua de afisare determinand eliminarea ei
de pe vechiul container pe care fusese plasat˘. Intrucat containerele pot fi incapsulate in
alte containere, o com-ponenta va face parte la un moment dat dintr-o ierarhie. Ra da
cina acestei ierarhii trebuie sa fie un asa numit container de nivel inalt, care este
reprezen-tat de una din clasele JFrame, JDialog sau JApplet. Intrucat de appleturi ne vom
ocupa separat, vom analiza in continuare primele doua clase.

Clasa Window
Clasa Window este rar utilizata in mod direct deoarece permite doar crearea unor ferestre
care nu au chenar si nici bara de meniuri. Este utila atunci cand dorim sa afisam ferestre
care nu interactioneaza cu utilizatorul ci doar ofera anumite informatii.
Metodele mai importante ale clasei Window, care sunt de altfel mostenite de toate
subclasele sale, sunt date de mai jos:
show ; hide; isShowing ; dispose ; pack ; getFocusOwner

Clasa Frame
Este derivata a clasei Window si este folosita pentru crearea de ferestre independente si
functionale, eventual continand o bara de meniuri. Orice aplicatie cu interfata grafica
conttine cel putin o fereastra , cea mai importanta fiind numita si fereastra principal˘.
Constructorii uzuali ai clasei Frame permit crearea unei ferestre cu sau fa ra titlu, initial
invizibila . Pentru ca o fereastra sa devina vizibila se va apela metoda show definita in
superclasa Window.

2.
// Elaborati un Servlet care va sterge din tabelul `test(id, nume, prenume, info)` al bazei
de date `TestDB`
// inregistrarea cu id-ul 10. Numele si parola de conectare (username: root; password:
1234)

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class InsertIntoDatabase extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res) throws


Exception {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/TestDB", "root", "1234");

PreparedStatement statement = con.prepareStatement("DELETE FROM


test WHERE id = ?");
statement.setString(1, "10");

statement.execute();

con.close();
}
}

3.
// Creati un applet, in cadrul caruia, odata cu apasarea click-ului sting la mouse, pointer-
ul
// mouse-ului se va comporta ca un brush ( va colora un cerc (10px) imprejurul punctului
in care
// se afla)

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

public class BrushTest extends Applet implements MouseMotionListener {

int width, height;


Image backbuffer;
Graphics backg;

public void init() {


width = getSize().width;
height = getSize().height;

backbuffer = createImage(width, height);


backg = backbuffer.getGraphics();
backg.setColor(Color.black);
backg.fillRect(0, 0, width, height);
backg.setColor(Color.white);

addMouseMotionListener(this);
}

public void mouseMoved(MouseEvent e) {


}

public void mouseDragged(MouseEvent e) {


int x = e.getX();
int y = e.getY();
backg.fillOval(x - 5, y - 5, 10, 10);
repaint();
}

public void update(Graphics g) {


g.drawImage(backbuffer, 0, 0, this);
}

public void paint(Graphics g) {


update(g);
}
}

Vr.18:
1. Folosirea imaginilor
In AWT este posibila folosirea imaginilor create extern in format gif sau jpeg. Orice
imagine va fi reprezentata ca o instanta a clasei Image. Aceasta nu este o clasa de
componente (nu extinde Component) ci implementeaza obiecte care pot fi desenate pe
suprafata unor componente cu metode specifice unui context grafic pentru componenta
respectiva (similar modului cum se deseneaza o linie sau un cerc).
Afisarea imaginilor
Afisarea unei imagini presupune realizarea urma toarilor doi pasi:
1.Crearea unui obiect de tip Image;
2.Afisarea propriu-zisa intr-un context grafic;

Crearea unui obiect de tip Image se face folosind o imagine dintr-un fisier fie aflat pe
masina pe care se lucreaza , fie aflat la o anumita adresa Web (URL). Metodele pentru
inca rcarea unei imagini dintr-un fisier se ga sesc in clasele Applet si Toolkit, avand insa
aceeasi denumire getImage si urma toarele formate:

Applet Toolkit
getImage(URL url) getImage(URL url)
getImage(URL url, String fisier) getImage(String fisier)

Afisarea unei imagini intr-un context grafic se realizeaza prin intermediul metodei
drawImage din clasa Graphics si, in general, va fi facuta in metoda paint a unei
componente. Cele mai uzuale formate ale metodei sunt:
boolean drawImage(Image img, int x, int y, ImageObserver observer) boolean
drawImage(Image img, int x, int y, Color bgcolor,
ImageObserver observer)
boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver
observer)
boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor,
ImageObserver observer)

2.
// Elaborati un Servlet care va extrage din tabelul `test(id, nume, prenume, info)` al bazei
de date `TestDB`
// cimpurile id si nume, si le va afisa in consola. Numele si parola de conectare
(username: root; password: 1234)

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class GetDataTable extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponse res) throws


Exception {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/TestDB", "root", "1234");

Statement st = con.createStatement();
String sql = ("SELECT * FROM log;");
ResultSet rs = st.executeQuery(sql);
while(rs.next()) {
System.out.println(rs.getInt(1) + " " + rs.getString(2));
}

con.close();
}
}

3.
// Elaborati un program ce va crea o fereastra si prin intermediul unui obiect de tip
java.awt.List va schimba culoarea fundalului
// unui obiect de tip java.awt.Label

import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.List;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

class Fereastra extends Frame implements ItemListener {

private static final long serialVersionUID = 1L;

private Label label;


private List culori;

public Fereastra(String titlu) {


super(titlu);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setLayout(new GridLayout(2, 1));
label = new Label(" Alegeti culoarea ", Label.CENTER);
label.setBackground(Color.red);
culori = new List(3);
culori.add(" Rosu ");
culori.add(" Verde ");
culori.add(" Albastru ");
culori.select(3);
add(label);
add(culori);
setSize(200, 200);
culori.addItemListener(this);
}

public void itemStateChanged(ItemEvent e) {


switch (culori.getSelectedIndex()) {
case 0:
label.setBackground(Color.red);
break;
case 1:
label.setBackground(Color.green);
break;
case 2:
label.setBackground(Color.blue);
}
}
}

public class Test {


public static void main(String args[]) {
Fereastra f = new Fereastra(" List ");
f.setVisible(true);
}
}

Vr.19:
1. Contextul grafic de desenare
Inainte ca utilizatorul sa poata desena, el trebuie sa obtina un context grafic de desenare
pentru suprafata ca reia ii apartine regiunea pe care se va desena. Un context grafic este,
de fapt, un obiect prin intermediul ca ruia putem controla procesul de desenare a unui
obiect. In general, desenarea se poate face:
pe o portiune de ecran, la imprimanta sau intr-o zona virtuala de memorie.

Un context grafic este specificat prin intermediul unui obiect de tip Graph-ics primit ca
parametru in metodele paint si update. In functie de dispozi-tivul fizic pe care se face
afisarea (ecran, imprimanta , plotter, etc) metodele de desenare au implementa ri interne
diferite, transparente utilizatorului.
Clasa Graphics pune la dispozitie metode pentru:
primitive grafice: desenarea de figuri geometrice, texte si imagini
stabilirea proprieta ¸ilor contextului grafic, adica stabilirea:
– culorii si fontului curente cu care se face desenarea,
– originii coordonatelor suprafetei de desenare,
– suprafetei in care sunt vizibile componentelor desenate,
– modului de desenare.
Proprieta tile contextului grafic
La orice tip de desenare parametrii legati de culoare, font, etc. vor fi specificati pentru
contextul grafic in care se face desenarea si nu vor fi trimisi ca ar-gumente metodelor
respective de desenare. In continuare, enumera m aceste proprieta ti si metodele asociate
lor din clasa Graphics.

Proprietate Metode

Culoarea de desenare Color getColor()


void setColor(Color c)

Fontul de scriere a textelor Font getFont()


void setFont(Font f)

Originea coordonatelor translate(int x, int y)


Zona de decupare Shape getClip()
(zona in care sunt vizibile desenele) void setClip(Shape s)

Modul de desenare void setXorMode(Color c)


void setPaintMode(Color c)

2.
// Elaborati un program care va afisa imaginea 'test.jpg', localizata in directoria 'C:/img/'
intr-un obiect
// de tip JFrame cu dimensiunile 400x400 pixeli.

import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

public class LoadImage extends Component {

private static final long serialVersionUID = 1L;


private BufferedImage img;

public LoadImage() {
try {
img = ImageIO.read(new File("C:/img/test.jpg"));
} catch (IOException e) {
}

public void paint(Graphics g) {


g.drawImage(img, 0, 0, null);
}

public static void main(String[] args) {

JFrame f = new JFrame("Test");


f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new LoadImage());
f.setLocationRelativeTo(null);
f.setResizable(false);
f.setSize(new Dimension(400, 400));
f.setVisible(true);
}
}
3.
// Alcatuiti un program care va calcula maximul dintr-un sir numeric. Datele se vor citi
dintr-un fisier (input.txt)
// in care pe prima pozitia va fi numarul 'n' de elemente urmat de n numere intregi.
Maximul va fi
// afisat intr-un alt fisier (output.txt).

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;

public class ArrayMaxValue {

private static Scanner s;


private static PrintWriter out;

public static void main(String args[]) throws FileNotFoundException {


s = new Scanner(new File("input.txt"));
out = new PrintWriter(new File("output.txt"));

int[] array = new int[s.nextInt()];


int max = Integer.MIN_VALUE;

for (int i = 0; i < array.length; i++) {


array[i] = s.nextInt();
if (array[i] > i) max = array[i];
System.out.println(array[i] + " " + max);
}

out.println(max);
out.close();
s.close();
}

Vr.20:
1.
Conceptul de desenare
Un program Java care are interfata grafica cu utilizatorul trebuie sa deseneze pe ecran
toate componentele sale care au o reprezentare vizual˘. Aceasta desenare include
componentele standard folosite in aplicatie precum si cele definite de ca tre programator.
Desenarea componentelor se face automat si este un proces care se executa in urma
toarele situatii:
la afisarea pentru prima data a unei componente;
la operatii de minimizare, maximizare, redimensionare a suprafetei de afisare;
ca ra spuns al unei solicita ri explicite a programului.
Metoda paint
Dupa cum am spus, toate desenele care trebuie sa apara pe o suprafata de afisare se
realizeaza in metoda paint a unei componente. Metoda paint este definita in superclasa
Component insa nu are nici o implementare si, din acest motiv, orice obiect grafic care
doreste sa se deseneze trebuie sa o suprade-fineasca pentru a-si crea propria sa
reprezentare. Componentele standard AWT au deja supradefinita aceasta metoda deci nu
trebuie sa ne preocupe desenarea lor, insa putem modifica reprezentarea lor grafica prin
crearea unei subclase si supradefinirea metodei paint, avand insa grija sa apela m si
metoda superclasei care se ocupa cu desenarea efectiva a componentei.

2.
// Creati un program care sa afle elementul majoritar dintr-un array. Array-ul se va citi
din
// fisierul majoritar.in . In caz ca nu exista un element majoritar se va afisa -1;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ElementMajoritar {

public static void main(String args[]) {


Scanner sc = null;
try {
sc = new Scanner(new File("majoritar.in"));
int n = sc.nextInt();
int elem[] = new int[n];
int cand = -1; int k = 0;
for ( int i = 0; i < n; i++) {
int nr = sc.nextInt();
elem[i] = nr;
if (k == 0) {
cand = nr;
k = 1;
} else if ( cand == nr) {
k++;
} else {
k--;
}
}

if ( cand < 0 ) {
System.out.println("-1");
} else {
int nr = 0;
for (int i = 0; i < n; i++)
if (elem[i] == cand )
nr++;
if ( nr >= n / 2) {
System.out.println(cand);
} else {
System.out.println("-1");
}
}

} catch (FileNotFoundException e) {
e.printStackTrace();
}

}
3.
// Creati o fereastra in care sa afisati numerele prime de la 0 la 100 intr-un aranjament de
tip GridLayout

import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Test {

private JPanel pan;


private JLabel lab;
private JFrame frame;

public Test(String name) {


frame = new JFrame(name);

pan = new JPanel();


pan.setLayout(new GridLayout(2, 13));

addElement(2);
findPrimNumbers();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(pan);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public void findPrimNumbers() {


for (int i = 3; i < 100; i++) {
boolean prim = true;
for (int j = 2; j < i / 2; j++) {
if (i % j == 0) {
prim = false;
break;
}
}
if (prim) addElement(i);
}
}

public void addElement(int i) {


lab = new JLabel(i + " ");
lab.setHorizontalAlignment(JLabel.CENTER);
lab.setBorder(BorderFactory.createLineBorder(Color.black));
pan.add(lab);
}

public static void main(String args[]) {


new Test("Numerele prime");
}
}

Vr.21:
1. Modelul AWT
Pachetul care ofera componente AWT este java.awt.
Obiectele grafice sunt derivate din Component, cu exceptia meniurilor care descind din
clasa MenuComponent. Asadar, prin notiunea de componenta vom intelege in continuare
orice obiect care poate avea o reprezentare grafica si care poate interactiona cu
utilizatorul. Exemple de componente sunt fere-strele, butoanele, listele, bare de defilare,
etc. Toate componentele AWT sunt definte de clase proprii ce se gasesc in pachetul
java.awt, clasa Component fiind superclasa abstracta a tuturor acestor clase.
Componentele AWT
Dupa cum am spus deja, toate componentele AWT sunt definte de clase proprii ce se
gasescin pachetul java.awt, clasa Component fiind superclasa abstracta a tuturor acestor
clase.
Button - butoane cu eticheta formata dintr-un text pe o singura linie;
Canvas - suprafata pentru desenare;
Checkbox - componenta ce poate avea doua sta ri; mai multe obiecte de acest tip
pot fi grupate folosind clasa CheckBoxGroup;
Choice - liste in care doar elementul selectat este vizibil si care se deschid la apa
sarea lor;
Container - superclasa tuturor suprafetelor de afisare (vezi ”Suprafete de
afisare”);
Label - etichete simple ce pot contine o singura linie de text needitabil;
List - liste cu selectie simpla sau multipla ;
Scrollbar - bare de defilare orizontale sau verticale;
TextComponent - superclasa componentelor pentru editarea textu-lui: TextField
(pe o singura linie) si TextArea (pe mai multe linii).

2.
// Creati un program java care sa adauge intr-un obiect de tip JFrame 2 ferestre interne.

import java.awt.Dimension;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;

class MainFrame extends JFrame {


private static final long serialVersionUID = 1L;

public MainFrame(String titlu) {


super(titlu);

InnerFrame fin1 = new InnerFrame();


InnerFrame fin2 = new InnerFrame();

fin1.setVisible(true);
fin2.setVisible(true);

JDesktopPane desktop = new JDesktopPane();

desktop.add(fin1);
desktop.add(fin2);

setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(desktop);
fin2.moveToFront();
setLocationRelativeTo(null);

setVisible(true);
}
}

class InnerFrame extends JInternalFrame {


private static final long serialVersionUID = 1L;

private static int n = 0; // nr . de ferestre interne


private static final int x = 30, y = 30;

public InnerFrame() {
super(" Document # " + (++n), true, // resizable
true, // closable
true, // maximizable
true);// iconifiable
setLocation(x * n, y * n);
setSize(new Dimension(200, 100));
}
}

class InnerFrameTest {
public static void main(String args[]) {
new MainFrame(" Test ferestre interne ");
}
}
3.
// Creati o clasa care va porni 2 fire de executie, unul sa afiseze numerele pare de la 0 la
10, iar
// celalalt de cele impare de la 0 la 10.

public class ThreadTest {

public static void main(String[] args) {


Runnable nOdd = new Numbers(true);
Runnable nEven = new Numbers(false);

Thread t1 = new Thread(nOdd);


Thread t2 = new Thread(nEven);

t1.start();
t2.start();
}
}

class Numbers implements Runnable {

private boolean odd = false;

public Numbers(boolean odd) {


this.odd = odd;
}

public void run() {


for (int i =0 ; i <= 10; i++) {
if (odd) {
if (i % 2 != 0) System.out.print(i + " ");
} else {
if (i % 2 == 0) System.out.print(i + " ");
}
}
}

}
2. Написать программу, которая выводит в консоли список файлов и
подпапок, находящихся в данной папке. Использовать в программе
метод list().

public static void main(String args[]){


try{
File dir = new File(dtemp);

String[] children = dir.list();


if (children == null) {
System.out.println(Directory does not exist or is not a Directory);
} else {
for (int i=0; i Get filename of file or directory
String filename = children[i];
System.out.println(filename);
}
}
It is also possible to filter the list of returned files.
This example does not return any files that start with `.'.
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
return !name.startsWith(.);
}
};
children = dir.list(filter);

The list of files can also be retrieved as File objects


File[] files = dir.listFiles();

This filter only returns directories


FileFilter fileFilter = new FileFilter() {
public boolean accept(File file) {
return file.isDirectory();
}
};
files = dir.listFiles(fileFilter);
}
catch (Exception ioe){
ioe.printStackTrace();
}
}

Vr.22:
1.
Crearea unui vector presupune realizarea urma toarelor etape:
•Declararea vectorului - Pentru a putea utiliza un vector trebuie,inainte de toate, sa-l
declara m. Acest lucru se face prin expresii de forma:
Tip[] numeVector; sau
Tip numeVector[];
ca in exemplele de mai jos:
int[] intregi; String adrese[];

•Instantierea
Declararea unui vector nu implica si alocarea memoriei necesare pentru retinerea
elementelor. Operatiunea de alocare a memoriei, numita si instantierea vectorului, se
realizeaza intotdeauna prin intermediul op-eratorului new. Instantierea unui vector se va
face printr-o expresie de genul:
numeVector = new Tip[nrElemente];

•Initializarea (optional) Dupa declararea unui vector, acesta poate fi initializat, adica
elementele sale pot primi niste valori initiale, evident daca este cazul pentru asa ceva. In
acest caz instantierea nu mai trebuie facuta explicit, alocarea memoriei fa candu-se
automat in functie de numa rul de elemente cu care se initializeaza vectorul.
String culori[] = {"Rosu", "Galben", "Verde"}; int []factorial = {1, 1, 2, 6, 24, 120};
Primul indice al unui vector este 0, deci pozitiile unui vector cu n ele-mente vor fi
cuprinse intre 0 si n − 1. Nu sunt permise constructii de genul Tip
numeVector[nrElemente], alocarea memoriei fa candu-se doar prin in-termediul
opearatorului new.
int v[10]; //ilegal
int v[] = new int[10]; //correct

2.

import java.awt.Dimension;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;

class MainFrame extends JFrame {


private static final long serialVersionUID = 1L;

public MainFrame(String titlu) {


super(titlu);

InnerFrame fin1 = new InnerFrame();


InnerFrame fin2 = new InnerFrame();

fin1.setVisible(true);
fin2.setVisible(true);

JDesktopPane desktop = new JDesktopPane();

desktop.add(fin1);
desktop.add(fin2);
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(desktop);
fin2.moveToFront();
setLocationRelativeTo(null);

setVisible(true);
}
}

class InnerFrame extends JInternalFrame {


private static final long serialVersionUID = 1L;

private static int n = 0; // nr . de ferestre interne


private static final int x = 30, y = 30;

public InnerFrame() {
super(" Document # " + (++n), true, // resizable
true, // closable
true, // maximizable
true);// iconifiable
setLocation(x * n, y * n);
setSize(new Dimension(200, 100));
}
}

class InnerFrameTest {
public static void main(String args[]) {
new MainFrame(" Test ferestre interne ");
}
}
3.
// Creati un applet care va afisa tabela inmultirii la 2 (de la 1..10). Textul va fi afisat
// in coloana printr-un ciclu while.

import java.applet.Applet;
import java.awt.Graphics;

public class TestApplet extends Applet {

private static final long serialVersionUID = 1L;

public void paint(Graphics g) {


int i = 1;
while (i <= 12) {
g.drawString("2 * " + i + " = " + (2*i), 20, 20*i);
i = i + 1;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

2. Написать программу, которая создает файл и делает его доступным


только для чтения. Использовать метод setReadOnly().

import java.io.;
public class ReadOnly {
public static void main(String[] a) throws IOException {

File f = new File(f);

if (!f.createNewFile()) {
System.out.println(Can't create new file.);
return;
}

if (!f.canWrite()) {
System.out.println(Can't write new file!);
return;
}

if (!f.setReadOnly()) {
System.out.println(Grrr! Can't set file read-only.);
return;
}

if (f.canWrite()) {
System.out.println(Most immutable, captain!);
System.out.println(But it still says canWrite() after setReadOnly);
return;
} else {
System.out.println(Logical, captain!);
System.out.println(canWrite() correctly returns false after setReadOnly);
}
}
}

Vr.23:
1. Ce este un fir de executie?
Definitie:
Un fir de executie este o succesiune sceventiala de instructiuni care se executa in cadrul
unui proces.
Un fir de executie este similar unui proces secvential, in sensul ca are un inceput, o
secventa de executie si un sfarsit. Diferenta dintre un fir de executie si un proces consta
in faptul ca un fir de executie nu poate rula independent ci trebuie sa ruleze in cadrul
unui proces.

Numiti si descrieti starile firelor de executie:


Asadar, un fir de executie se poate ga si in una din urma toarele patru sta ri:
”New Thread”
”Runnable”
”Not Runnable”
”Dead”

Starea ”New Thread”


Un fir de executie se ga seste in aceasta stare imediat dupa crearea sa, cu alte cuvinte
dupa instantierea unui obiect din clasa Thread sau dintr-o subclasa a sa.

Thread fir = new Thread(obiectActiv); // fir se gaseste in starea "New Thread"

In aceasta stare firul este ”vid”, el nu are alocate nici un fel de resurse sis-tem si singura
operatiune pe care o putem executa asupra lui este lansarea in executie, prin metoda start.
Apelul orica rei alte metodein afara de start
nu are nici un sens si va provoca o exceptie de tipul IllegalThreadStateException.

Starea ”Runnable”
Dupa apelul metodei start un fir va trece in starea ”Runnable”, adica va fi in executie.
fir.start();
//fir se gaseste in starea "Runnable"

Un fir aflat in starea ”Runnable” nu inseamna neapa rat ca se ga seste efectiv in executie,
adica instructiunile sale sunt interpretate de procesor. Acest lucru se ıntampla din cauza
ca majoritatea calculatoarelor au un singur procesor iar acesta nu poate rula simultan
toate firele de executie care se gasesc in starea ”Runnable”. Pentru a rezolva aceasta
problema exista o planificare care sa partajeze dinamic si corect procesorul intre toate
firele de executie care sunt in starea ”Runnable”. Asadar, un fir care ”ruleaza ” poate sa
-si astepte de fapt randul la procesor.

Starea ”Not Runnable”


Un fir de executie poate ajunge in aceaata stare in una din urma toarele situatii:
Este ”adormit” prin apelul metodei sleep;
A apelat metoda wait, asteptand ca o anumita conditie sa fie satisfa-cuta ;

Starea ”Dead”
Este starea in care ajunge un fir de executie la terminarea sa. Un fir nu poate fi oprit din
program printr-o anumita metoda , ci trebuie sa se termine in mod natural laincheierea
metodei run pe care o executa . Spre deosebire de versiunile curente ale limbajului Java,
in versiunile mai vechi exista metoda stop a clasei Thread care termina fortat un fir de
executie, insa aceasta a fost eliminata din motive de securitate. Asadar, un fir de executie
trebuie sa -si ”aranjeze” singur propria sa ”moarte”.
2.
// Creati o fereastra in care sa afisati numerele prime de la 0 la 100 intr-un aranjament de
tip GridLayout

import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Test {

private JPanel pan;


private JLabel lab;
private JFrame frame;

public Test(String name) {


frame = new JFrame(name);

pan = new JPanel();


pan.setLayout(new GridLayout(2, 13));

addElement(2);
findPrimNumbers();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(pan);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public void findPrimNumbers() {


for (int i = 3; i < 100; i++) {
boolean prim = true;
for (int j = 2; j < i / 2; j++) {
if (i % j == 0) {
prim = false;
break;
}
}
if (prim) addElement(i);
}
}

public void addElement(int i) {


lab = new JLabel(i + " ");
lab.setHorizontalAlignment(JLabel.CENTER);
lab.setBorder(BorderFactory.createLineBorder(Color.black));
pan.add(lab);
}

public static void main(String args[]) {


new Test("Numerele prime");
}
}
3.
// Elaborati un program care va contine o metoda ce poate primi ca parametri oricite
valori de tip intreg
// si returneaza maximul dintre acesta care va fi afisat in consola.

import java.util.Arrays;

public class UnkArgsTest {


public static void main(String...args) {
System.out.println(getMax(1, -1, 8, 9, 20, 2));
}

public static int getMax(int...ints) {


Arrays.sort(ints);
return ints[ints.length - 1];
}
}

Vr.24:
1. Ce este o interfata ?
Definitie :
O interfata este o colectie de metode fara implementare si declaratii de constante.
Interfetele permit, alaturi de clase, definirea unor noi tipuri de date.

O interfata Java defineste un set de metode dar nu specifica nici o implementare pentru
ele. O clasa care implementeaza o interfata trebuie obligatoriu sa specifice implementari
pentru toate metodele interfetei, supunandu-se asadar unui anumit comportament.

Implementarea unei interfete


Implementarea uneia sau mai multor interfete de catre o clasa se face prin intermediul
cuvantului cheie implements:
class NumeClasa implements NumeInterfata sau
class NumeClasa implements Interfata1, Interfata2, ...

O clasa poate implementa oricate interfete sau poate sa nu implementeze nici una.
In cazul in care o clasa implementeaza o anumita interfata, atunci trebuie obligatoriu sa
specifice cod pentru toate metodele interfetei. Din acest motiv, odata creata si folosita la
implementarea unor clase, o interfata nu mai trebuie modificata, in sensul ca adaugarea
unor metode noi sau schimbarea signaturii metodelor existente vor duce la erori in
compilarea claselor care o implementeaza. Evident, o clasa poate avea si alte metode si
variabile membre in afara de cele definite in interfata.
O interfata nu este o clasa, dar orice referinta de tip interfata poate primi ca valoare o
referinta la un obiect al unei clase ce implementeaza interfata respectiva. Din acest motiv,
interfetele pot fi privite ca tipuri de date si vom spune adesea ca un obiect are tipul X,
unde X este o interfata, dacacesta este o instanta a unei clase ce implementeaza interfata
X.
Implementarea unei interfete poate sa fie si o clasa abstracta.

2.
// Elaborati un Servlet care va introduce in tabelul `test(id, nume, prenume, info)` al bazei
de date `TestDB`
// o inregistrare. Numele si parola de conectare (username: root; password: 1234)

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class InsertIntoDatabase extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res) throws


Exception {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/TestDB", "root", "1234");

PreparedStatement statement = con.prepareStatement("INSERT INTO


test(nume, prenume, info) VALUES (?, ?, ?)");
statement.setString(1, "Nume");
statement.setString(2, "Prenume");
statement.setString(3, "Virsta");

statement.execute();

con.close();
}
}
3.
// Elaborati un program care sa gaseasca String-ul cu cel mai mare numar de caractere si
nu contine
// cifre. Fiecare sir de caractere se va citi din fisier (input.txt) unde String-urile vor fi
plasate
// fiecare pe un rind nou. String-ul gasit va fi scris intr-un fisier (output.txt).

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
public class ArrayMaxString {

private static BufferedReader in;


private static PrintWriter out;

public static void main(String args[]) throws IOException {


out = new PrintWriter(new File("output.txt"));

in = new BufferedReader(new FileReader("input.txt"));


String str, maxLengthStr = "";
while ((str = in.readLine()) != null) {
boolean ok = true;
for (int i = 0; i < str.length(); i++)
if (str.charAt(i) > '0' && str.charAt(i) < '9') ok = false;
if (ok && str.length() > maxLengthStr.length()) maxLengthStr =
str;
}

out.print(maxLengthStr);

out.close();
in.close();
}

Vr.25:
1.
Serializarea obiectelor
Serializarea obiectelor se realizeaza prin intermediul fluxurilor definite de clasele
ObjectOutputStream (pentru salvare) si ObjectInputStream(pentru restaurare).
Acestea sunt fluxuri de procesare, ceea ce inseamna ca vor fi folosite impreuna cu alte
fluxuri pentru scrierea/citirea efectiva a datelor pe mediul extern pe care va fi salvat, sau
de pe care va fi restaurat un obiect serializat.
Mecanismul implicit de serializare a unui obiect va salva numele clasei obiectului,
signatura clasei si valorile tuturor campurile serializabile ale obiec-tului. Referintele la
alte obiecte serializabile din cadrul obiectului curent vor duce automat la serializarea
acestora iar referintele multiple ca tre un acelasi obiect sunt codificate utilizand un
algoritm care sa poata reface ”reteaua de obiecte” la aceeasi stare ca atunci cand obiectul
original a fost salvat.
Clasele ObjectInputStream si ObjectOutputStream implementeaza interfetele
ObjectInput, respectiv ObjectOutput care extind DataInput, respectiv DataOutput, ceea
ce inseamna ca , pe langa metodele dedicate serializa rii obiectelor, vor
exista si metode pentru scrierea/citirea datelor primitive si a sirurilor de caractere.
Metodele pentru serializarea obiectelor sunt:
• writeObject, pentru scriere si
• readObject, pentru restaurare.

Clasa ObjectInputStream
Odata ce au fost scrise obiecte si tipuri primitive de date pe un flux, citirea acestora si
reconstruirea obiectelor salvate se va face printr-un flux de intrare de tip
ObjectInputStream. Acesta este de asemenea un flux de procesare si va trebui asociat cu
un flux pentru citirea efectiva a datelor, cum ar fi FileInputStream pentru date salvate
intr-un fisier. Secventa uzuala pentru deserializare este cea de mai jos:

ObjectInputStream in = new ObjectInputStream(fluxPrimitiv); Object obj =


in.readObject();
//sau
TipReferinta ref = (TipReferinta)in.readObject(); fluxPrimitiv.close();

2.
// Elaborati un Servlet care va extrage din tabelul `test(id, nume, prenume, info)` al bazei
de date `TestDB`
// cimpurile id si nume, si le va afisa in consola. Numele si parola de conectare
(username: root; password: 1234)

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class GetDataTable extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponse res) throws


Exception {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/TestDB", "root", "1234");

Statement st = con.createStatement();
String sql = ("SELECT * FROM log;");
ResultSet rs = st.executeQuery(sql);
while(rs.next()) {
System.out.println(rs.getInt(1) + " " + rs.getString(2));
}

con.close();
}
}

3.
// Creati un program care va afisa maximul a trei numere cu ajutorul operatorului ternar.
// In caz ca numerele sunt egale se va arunca o noua exceptie (MyException) cu mesajul
"numerele sunt egale"
// Numerele se vor citi de la tastatura.

import java.util.Scanner;

class MyException extends Throwable {


private static final long serialVersionUID = 1L;

public MyException(String msg) {


super("New mesage: " + msg);
}
}

public class Test {

private static Scanner s;

public static void main(String args[]) {


try {
s = new Scanner(System.in);
int a = s.nextInt();
int b = s.nextInt();
int c = s.nextInt();

if (a == b && b == c) throw new MyException("numerele sunt


egale");

int max = (a > b) ? (a > c) ? a : (b > c) ? b : c : (b > c) ? b : c;

System.out.println(max);

} catch (MyException e) {
e.printStackTrace();
}
}

}
Vr.26:
1.
Modelul AWT
Pachetul care ofera componente AWT este java.awt.
Obiectele grafice sunt derivate din Component, cu exceptia meniurilor care descind din
clasa MenuComponent. Asadar, prin notiunea de componenta vom intelege in continuare
orice obiect care poate avea o reprezentare grafica si care poate interactiona cu
utilizatorul. Exemple de componente sunt fere-strele, butoanele, listele, bare de defilare,
etc. Toate componentele AWT sunt definte de clase proprii ce se gasesc in pachetul
java.awt, clasa Component fiind superclasa abstracta a tuturor acestor clase.
Clasa Checkbox
Un obiect de tip Checkbox (comutator) reprezinta o componenta care se poate ga si in
doua sta ri: ”selectata ” sau ”neselectata ” (on/off). Actiunea utilizatorului asupra unui
comutator il trece pe acesta in starea complemen-tara celei in care se ga sea. Este folosit
pentru a prelua o anumita optiune de la utilizator.
Clasa Choice
Un obiect de tip Choice defineste o lista de optiuni din care utilizatorul poate selecta una
singura . La un moment dat, din intreaga lista doar o sin-gura optiune este vizibila , cea
selectata in momentul curent. O componenta Choice este insotita de un buton etichetat
cu o sageata verticala la apa sarea ca ruia este afisata intreaga sa lista de elemente, pentru
ca utilizatorul sa poata selecta o anumita optiune.

2.
// Elaborati un program care va afisa imaginea 'test.jpg', localizata in directoria 'C:/img/'
intr-un obiect
// de tip JFrame cu dimensiunile 400x400 pixeli.

import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

public class LoadImage extends Component {

private static final long serialVersionUID = 1L;


private BufferedImage img;

public LoadImage() {
try {
img = ImageIO.read(new File("C:/img/test.jpg"));
} catch (IOException e) {
}

public void paint(Graphics g) {


g.drawImage(img, 0, 0, null);
}

public static void main(String[] args) {

JFrame f = new JFrame("Test");


f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new LoadImage());
f.setLocationRelativeTo(null);
f.setResizable(false);
f.setSize(new Dimension(400, 400));
f.setVisible(true);
}
}
3.
// Creati un program care sa afle elementul majoritar dintr-un array. Array-ul se va citi
din
// fisierul majoritar.in . In caz ca nu exista un element majoritar se va afisa -1;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ElementMajoritar {

public static void main(String args[]) {


Scanner sc = null;
try {
sc = new Scanner(new File("majoritar.in"));
int n = sc.nextInt();
int elem[] = new int[n];
int cand = -1; int k = 0;
for ( int i = 0; i < n; i++) {
int nr = sc.nextInt();
elem[i] = nr;
if (k == 0) {
cand = nr;
k = 1;
} else if ( cand == nr) {
k++;
} else {
k--;
}
}

if ( cand < 0 ) {
System.out.println("-1");
} else {
int nr = 0;
for (int i = 0; i < n; i++)
if (elem[i] == cand )
nr++;
if ( nr >= n / 2) {
System.out.println(cand);
} else {
System.out.println("-1");
}
}

} catch (FileNotFoundException e) {
e.printStackTrace();
}

Vr.27:
1.
S¸iruri de caractere
In Java, un sir de caractere poate fi reprezentat printr-un vector format din elemente de tip
char, un obiect de tip String sau un obiect de tip StringBuffer.
Daca un sir de caractere este constant (nu se doreste schimbarea continutului sa pe
parcursul executiei programului) atunci el va fi declarat de tipul String, altfel va fi
declarat de tip StringBuffer. Diferenta principala intre aceste clase este ca StringBuffer
pune la dispozitie metode pentru modificarea continutului sirului, cum ar fi: append,
insert, delete, reverse.
Uzual, cea mai folosita modalitate de a lucra cu siruri este prin intermediul clasei
String, care are si unele particularita ti fata de restul claselor menite sa simplifice cat
mai mult folosirea sirurilor de caractere. Clasa StringBuffer va fi utilizata predominant in
aplicatii dedicate procesa rii textelor cum ar fi editoarele de texte.
Exemple echivalente de declarare a unui sir:
String s = "abc";
String s = new String("abc"); char data[] = {’a’, ’b’, ’c’}; String s = new String(data);
Observati prima varianta de declarare a sirului s din exemplul de mai sus - de altfel,
cea mai folosita - care prezinta o particularitate a clasei String fata de restul claselor
Java referitoare la instantierea obiectelor sale.
Concatenarea sirurilor de caractere se face prin intermediul operatorului+ sau, in
cazul sirurilor de tip StringBuffer, folosind metoda append.
String s1 = "abc" + "xyz"; String s2 = "123";
String s3 = s1 + s2;

2.
// Creati un program java care sa adauge intr-un obiect de tip JFrame 2 ferestre interne.

import java.awt.Dimension;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;

class MainFrame extends JFrame {


private static final long serialVersionUID = 1L;

public MainFrame(String titlu) {


super(titlu);

InnerFrame fin1 = new InnerFrame();


InnerFrame fin2 = new InnerFrame();

fin1.setVisible(true);
fin2.setVisible(true);

JDesktopPane desktop = new JDesktopPane();

desktop.add(fin1);
desktop.add(fin2);

setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(desktop);
fin2.moveToFront();
setLocationRelativeTo(null);

setVisible(true);
}
}

class InnerFrame extends JInternalFrame {


private static final long serialVersionUID = 1L;

private static int n = 0; // nr . de ferestre interne


private static final int x = 30, y = 30;

public InnerFrame() {
super(" Document # " + (++n), true, // resizable
true, // closable
true, // maximizable
true);// iconifiable
setLocation(x * n, y * n);
setSize(new Dimension(200, 100));
}
}

class InnerFrameTest {
public static void main(String args[]) {
new MainFrame(" Test ferestre interne ");
}
}
3.
// Creati un applet, in cadrul caruia, odata cu apasarea click-ului sting la mouse, pointer-
ul
// mouse-ului se va comporta ca un brush ( va colora un cerc (10px) imprejurul punctului
in care
// se afla)

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

public class BrushTest extends Applet implements MouseMotionListener {

int width, height;


Image backbuffer;
Graphics backg;
public void init() {
width = getSize().width;
height = getSize().height;

backbuffer = createImage(width, height);


backg = backbuffer.getGraphics();
backg.setColor(Color.black);
backg.fillRect(0, 0, width, height);
backg.setColor(Color.white);

addMouseMotionListener(this);
}

public void mouseMoved(MouseEvent e) {


}

public void mouseDragged(MouseEvent e) {


int x = e.getX();
int y = e.getY();
backg.fillOval(x - 5, y - 5, 10, 10);
repaint();
}

public void update(Graphics g) {


g.drawImage(backbuffer, 0, 0, this);
}

public void paint(Graphics g) {


update(g);
}
}

Vr.28:
1. Ce este o interfata ?
Definitie :
O interfata este o colectie de metode fara implementare si declaratii de constante.
Interfetele permit, alaturi de clase, definirea unor noi tipuri de date.
O interfata Java defineste un set de metode dar nu specifica nici o implementare
pentru ele. O clasa care implementeaza o interfata trebuie obligatoriu sa specifice
implementari pentru toate metodele interfetei, supunandu-se asadar unui anumit
comportament.
Interfata FilenameFilter
Instantele claselor ce implementeaza aceasta interfata sunt folosite pentru a crea filtre
pentru fisiere si sunt primite ca argumente de metode care listeaza continutul unui
director, cum ar fi metoda list a clasei File.
Asadar, putem spune ca metoda list primeste ca argument o alta functie care specifica
daca un fisier va fi returnat sau nu (criteriul de filtrare).
Interfata FilenameFilter are o singura metoda : accept care specifica criteriul de
filtrare si anume, testeaza daca numele fisierului primit ca para-metru indeplineste
conditiile dorite de noi.
Definitia interfetei este:
public interface FilenameFilter {
public boolean accept(File dir, String numeFisier);
}
Asadar, orice clasa de specificare a unui filtru care implementeza interfata
FilenameFilter trebuie sa implementeze metoda accept a acestei interfete. Aceste clase
mai pot avea si alte metode, de exemplu un constructor care sa primeasca criteriul de
filtrare.

2.
// Elaborati un Servlet care va introduce in tabelul `test(id, nume, prenume, info)` al bazei
de date `TestDB`
// o inregistrare. Numele si parola de conectare (username: root; password: 1234)

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class InsertIntoDatabase extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res) throws


Exception {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/TestDB", "root", "1234");

PreparedStatement statement = con.prepareStatement("INSERT INTO


test(nume, prenume, info) VALUES (?, ?, ?)");
statement.setString(1, "Nume");
statement.setString(2, "Prenume");
statement.setString(3, "Virsta");

statement.execute();

con.close();
}
}
3.
// Creati o fereastra in care sa afisati numerele prime de la 0 la 100 intr-un aranjament de
tip GridLayout

import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Test {

private JPanel pan;


private JLabel lab;
private JFrame frame;

public Test(String name) {


frame = new JFrame(name);

pan = new JPanel();


pan.setLayout(new GridLayout(2, 13));

addElement(2);
findPrimNumbers();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(pan);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public void findPrimNumbers() {


for (int i = 3; i < 100; i++) {
boolean prim = true;
for (int j = 2; j < i / 2; j++) {
if (i % j == 0) {
prim = false;
break;
}
}
if (prim) addElement(i);
}
}

public void addElement(int i) {


lab = new JLabel(i + " ");
lab.setHorizontalAlignment(JLabel.CENTER);
lab.setBorder(BorderFactory.createLineBorder(Color.black));
pan.add(lab);
}

public static void main(String args[]) {


new Test("Numerele prime");
}
}

Vr.29:
1. Ce sunt fluxurile?
Definitii:
Un flux este un canal de comunicatie unidirectional intre doua procese.
Un proces care descrie o sursa externa de date se numeste proces produca tor. Un
proces care descrie o destinatie externa pentru date se numeste proces consumator.
Un flux care citeste date se numeste flux de intrare. Un flux care scrie date se numeste
flux de iesire.
Clasificarea fluxurilor
Exista trei tipuri de clasificare a fluxurilor:
•Dupa directia canalului de comunicatie deschis fluxurile se impart in:
– fluxuri de intrare (pentru citirea datelor)
– fluxuri de iesire (pentru scrierea datelor)

•Dupa tipul de date pe care opereaza :


– fluxuri de octeti (comunicarea seriala se realizeaza pe 8 biti)
– fluxuri de caractere (comunicarea seriala se realizeaza pe 16 biti)

•Dupa actiunea lor:


– fluxuri primare de citire/scriere a datelor (se ocupa efectiv cu citirea/scrierea datelor)
– fluxuri pentru procesarea datelor

2.
// Elaborati un Servlet care va extrage din tabelul `test(id, nume, prenume, info)` al bazei
de date `TestDB`
// cimpurile id si nume, si le va afisa in consola. Numele si parola de conectare
(username: root; password: 1234)

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class GetDataTable extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponse res) throws


Exception {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/TestDB", "root", "1234");

Statement st = con.createStatement();
String sql = ("SELECT * FROM log;");
ResultSet rs = st.executeQuery(sql);
while(rs.next()) {
System.out.println(rs.getInt(1) + " " + rs.getString(2));
}

con.close();
}
}
3.
// Elaborati un program ce va crea o fereastra si prin intermediul unui obiect de tip
java.awt.List va schimba culoarea fundalului
// unui obiect de tip java.awt.Label

import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.List;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

class Fereastra extends Frame implements ItemListener {

private static final long serialVersionUID = 1L;

private Label label;


private List culori;

public Fereastra(String titlu) {


super(titlu);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setLayout(new GridLayout(2, 1));
label = new Label(" Alegeti culoarea ", Label.CENTER);
label.setBackground(Color.red);
culori = new List(3);
culori.add(" Rosu ");
culori.add(" Verde ");
culori.add(" Albastru ");
culori.select(3);
add(label);
add(culori);
setSize(200, 200);
culori.addItemListener(this);
}

public void itemStateChanged(ItemEvent e) {


switch (culori.getSelectedIndex()) {
case 0:
label.setBackground(Color.red);
break;
case 1:
label.setBackground(Color.green);
break;
case 2:
label.setBackground(Color.blue);
}
}
}

public class Test {


public static void main(String args[]) {
Fereastra f = new Fereastra(" List ");
f.setVisible(true);
}
}

MOD 30:
1. Modelul AWT
Pachetul care ofera componente AWT este java.awt.
Obiectele grafice sunt derivate din Component, cu exceptia meniurilor care descind din
clasa MenuComponent. Asadar, prin notiunea de componenta vom intelege in continuare
orice obiect care poate avea o reprezentare grafica si care poate interactiona cu
utilizatorul. Exemple de componente sunt fere-strele, butoanele, listele, bare de defilare,
etc. Toate componentele AWT sunt definte de clase proprii ce se gasesc in pachetul
java.awt, clasa Component fiind superclasa abstracta a tuturor acestor clase.
Componentele AWT
Dupa cum am spus deja, toate componentele AWT sunt definte de clase proprii ce se
gasescin pachetul java.awt, clasa Component fiind superclasa abstracta a tuturor acestor
clase.
Button - butoane cu eticheta formata dintr-un text pe o singura linie;
Canvas - suprafata pentru desenare;
Checkbox - componenta ce poate avea doua sta ri; mai multe obiecte de acest tip
pot fi grupate folosind clasa CheckBoxGroup;
Choice - liste in care doar elementul selectat este vizibil si care se deschid la apa
sarea lor;
Container - superclasa tuturor suprafetelor de afisare (vezi ”Suprafete de
afisare”);
Label - etichete simple ce pot contine o singura linie de text needitabil;
List - liste cu selectie simpla sau multipla ;
Scrollbar - bare de defilare orizontale sau verticale;
TextComponent - superclasa componentelor pentru editarea textu-lui: TextField
(pe o singura linie) si TextArea (pe mai multe linii).

2.
// Elaborati un Servlet care va sterge din tabelul `test(id, nume, prenume, info)` al bazei
de date `TestDB`
// inregistrarea cu id-ul 10. Numele si parola de conectare (username: root; password:
1234)

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class InsertIntoDatabase extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res) throws


Exception {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/TestDB", "root", "1234");

PreparedStatement statement = con.prepareStatement("DELETE FROM


test WHERE id = ?");
statement.setString(1, "10");

statement.execute();

con.close();
}
}
3.
// Creati o clasa care va porni 2 fire de executie, unul sa afiseze numerele pare de la 0 la
10, iar
// celalalt de cele impare de la 0 la 10.

public class ThreadTest {

public static void main(String[] args) {


Runnable nOdd = new Numbers(true);
Runnable nEven = new Numbers(false);

Thread t1 = new Thread(nOdd);


Thread t2 = new Thread(nEven);

t1.start();
t2.start();
}
}

class Numbers implements Runnable {

private boolean odd = false;

public Numbers(boolean odd) {


this.odd = odd;
}

public void run() {


for (int i =0 ; i <= 10; i++) {
if (odd) {
if (i % 2 != 0) System.out.print(i + " ");
} else {
if (i % 2 == 0) System.out.print(i + " ");
}
}
}

}
MOD 31
1.
Serializarea obiectelor
Serializarea obiectelor se realizeaza prin intermediul fluxurilor definite de clasele
ObjectOutputStream (pentru salvare) si ObjectInputStream(pentru restaurare).
Acestea sunt fluxuri de procesare, ceea ce inseamna ca vor fi folosite impreuna cu alte
fluxuri pentru scrierea/citirea efectiva a datelor pe mediul extern pe care va fi salvat, sau
de pe care va fi restaurat un obiect serializat.
Mecanismul implicit de serializare a unui obiect va salva numele clasei obiectului,
signatura clasei si valorile tuturor campurile serializabile ale obiec-tului. Referintele la
alte obiecte serializabile din cadrul obiectului curent vor duce automat la serializarea
acestora iar referintele multiple ca tre un acelasi obiect sunt codificate utilizand un
algoritm care sa poata reface ”reteaua de obiecte” la aceeasi stare ca atunci cand obiectul
original a fost salvat.
Clasele ObjectInputStream si ObjectOutputStream implementeaza interfetele
ObjectInput, respectiv ObjectOutput care extind DataInput, respectiv DataOutput, ceea
ce inseamna ca , pe langa metodele dedicate serializa rii obiectelor, vor
exista si metode pentru scrierea/citirea datelor primitive si a sirurilor de caractere.
Metodele pentru serializarea obiectelor sunt:
• writeObject, pentru scriere si
• readObject, pentru restaurare.

Clasa ObjectOutputStream
Scrierea obiectelor pe un flux de iesire este un proces extrem de simplu, secventa uzuala
fiind cea de mai jos:
ObjectOutputStream out = new ObjectOutputStream(fluxPrimitiv);
out.writeObject(referintaObiect);
out.flush();
fluxPrimitiv.close();

2.
// Creati un program java care sa adauge intr-un obiect de tip JFrame 2 ferestre interne.

import java.awt.Dimension;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;

class MainFrame extends JFrame {


private static final long serialVersionUID = 1L;
public MainFrame(String titlu) {
super(titlu);

InnerFrame fin1 = new InnerFrame();


InnerFrame fin2 = new InnerFrame();

fin1.setVisible(true);
fin2.setVisible(true);

JDesktopPane desktop = new JDesktopPane();

desktop.add(fin1);
desktop.add(fin2);

setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(desktop);
fin2.moveToFront();
setLocationRelativeTo(null);

setVisible(true);
}
}

class InnerFrame extends JInternalFrame {


private static final long serialVersionUID = 1L;

private static int n = 0; // nr . de ferestre interne


private static final int x = 30, y = 30;

public InnerFrame() {
super(" Document # " + (++n), true, // resizable
true, // closable
true, // maximizable
true);// iconifiable
setLocation(x * n, y * n);
setSize(new Dimension(200, 100));
}
}

class InnerFrameTest {
public static void main(String args[]) {
new MainFrame(" Test ferestre interne ");
}
}
3.
// Creati un applet care va afisa tabela inmultirii la 2 (de la 1..10). Textul va fi afisat
// in coloana printr-un ciclu while.

import java.applet.Applet;
import java.awt.Graphics;

public class TestApplet extends Applet {

private static final long serialVersionUID = 1L;

public void paint(Graphics g) {


int i = 1;
while (i <= 12) {
g.drawString("2 * " + i + " = " + (2*i), 20, 20*i);
i = i + 1;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

}
MOD 32:
1. Modelul AWT
Pachetul care ofera componente AWT este java.awt.
Obiectele grafice sunt derivate din Component, cu exceptia meniurilor care descind din
clasa MenuComponent. Asadar, prin notiunea de componenta vom intelege in continuare
orice obiect care poate avea o reprezentare grafica si care poate interactiona cu
utilizatorul. Exemple de componente sunt fere-strele, butoanele, listele, bare de defilare,
etc. Toate componentele AWT sunt definte de clase proprii ce se gasesc in pachetul
java.awt, clasa Component fiind superclasa abstracta a tuturor acestor clase.
Clasa Label
Un obiect de tip Label (eticheta ) reprezinta o componenta pentru plasarea unui text pe o
suprafata de afisare. O eticheta este formata dintr-o singura linie de text static ce nu
poate fi modificat de ca tre utilizator, dar poate fi modificat din program.
Clasa Button
Un obiect de tip Button reprezinta o componenta pentru plasarea unui bu-ton etichetat
pe o suprafata de afisare. Textul etichetei este format dintr-o singura linie.

2.
// Elaborati un Servlet care va introduce in tabelul `test(id, nume, prenume, info)` al bazei
de date `TestDB`
// o inregistrare. Numele si parola de conectare (username: root; password: 1234)

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class InsertIntoDatabase extends HttpServlet {


public void doGet(HttpServletRequest req, HttpServletResponse res) throws
Exception {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/TestDB", "root", "1234");

PreparedStatement statement = con.prepareStatement("INSERT INTO


test(nume, prenume, info) VALUES (?, ?, ?)");
statement.setString(1, "Nume");
statement.setString(2, "Prenume");
statement.setString(3, "Virsta");

statement.execute();

con.close();
}
}
3.
// Elaborati un program care va contine o metoda ce poate primi ca parametri oricite
valori de tip intreg
// si returneaza maximul dintre acesta care va fi afisat in consola.

import java.util.Arrays;

public class UnkArgsTest {


public static void main(String...args) {
System.out.println(getMax(1, -1, 8, 9, 20, 2));
}

public static int getMax(int...ints) {


Arrays.sort(ints);
return ints[ints.length - 1];
}
}

MOD 33:
1.
Definitia Interfetei
O interfata este o colectie de metode fara implementare si declaratii de constante.
Interfetele permit, alaturi de clase, definirea unor noi tipuri de date.

Mostenire multipla prin interfete


Interfetele nu au nici o implementare si nu pot fi instantiate. Din acest motiv, nu
reprezinta nici o problema ca anumite clase sa implementeze mai multe interfete sau ca
o interfata sa extinda mai multe interfete (sa aiba mai multe superinterfete)
class NumeClasa implements Interfata1, Interfata2, ...
interface NumeInterfata extends Interfata1, Interfata2, ...
O interfata mosteneste atat constantele cat si declaratiile de metode de la
superinterfetele sale. O clasa mosteneste doar constantele unei interfete si
responsabilitatea implementa rii metodelor sale.
Evident, pot apa rea situatii de ambiguitate, atunci cand exista constante sau metode cu
aceleasi nume in mai multe interfete, insa acest lucru trebuie intotdeauna evitat, deoarece
scrierea unui cod care poate fi confuz este un stil prost de programare. In cazul in care
acest lucru se ıntampla , compilatorul nu va furniza eroare decat daca se incearca
referirea constantelor ambigue fa ra a le prefixa cu numele interfetei sau daca metodele
cu acelasi nume nu pot fi deosbite, cum ar fi situatia cand au aceeasi lista de argumente
dar tipuri returnate incompatibile.

2.

import java.awt.Dimension;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;

class MainFrame extends JFrame {


private static final long serialVersionUID = 1L;

public MainFrame(String titlu) {


super(titlu);

InnerFrame fin1 = new InnerFrame();


InnerFrame fin2 = new InnerFrame();

fin1.setVisible(true);
fin2.setVisible(true);

JDesktopPane desktop = new JDesktopPane();

desktop.add(fin1);
desktop.add(fin2);

setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(desktop);
fin2.moveToFront();
setLocationRelativeTo(null);

setVisible(true);
}
}

class InnerFrame extends JInternalFrame {


private static final long serialVersionUID = 1L;

private static int n = 0; // nr . de ferestre interne


private static final int x = 30, y = 30;
public InnerFrame() {
super(" Document # " + (++n), true, // resizable
true, // closable
true, // maximizable
true);// iconifiable
setLocation(x * n, y * n);
setSize(new Dimension(200, 100));
}
}

class InnerFrameTest {
public static void main(String args[]) {
new MainFrame(" Test ferestre interne ");
}
}
3.
// Alcatuiti un program care va calcula maximul dintr-un sir numeric. Datele se vor citi
dintr-un fisier (input.txt)
// in care pe prima pozitia va fi numarul 'n' de elemente urmat de n numere intregi.
Maximul va fi
// afisat intr-un alt fisier (output.txt).

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;

public class ArrayMaxValue {

private static Scanner s;


private static PrintWriter out;

public static void main(String args[]) throws FileNotFoundException {


s = new Scanner(new File("input.txt"));
out = new PrintWriter(new File("output.txt"));

int[] array = new int[s.nextInt()];


int max = Integer.MIN_VALUE;

for (int i = 0; i < array.length; i++) {


array[i] = s.nextInt();
if (array[i] > i) max = array[i];
System.out.println(array[i] + " " + max);
}

out.println(max);
out.close();
s.close();
}
}

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

  • Laboratorul 2 PH
    Laboratorul 2 PH
    Document6 pagini
    Laboratorul 2 PH
    Tina Cris
    Încă nu există evaluări
  • Raport TV
    Raport TV
    Document9 pagini
    Raport TV
    Tina Cris
    Încă nu există evaluări
  • Ex Site1
    Ex Site1
    Document6 pagini
    Ex Site1
    Tina Cris
    Încă nu există evaluări
  • Laboratoru 1 PH
    Laboratoru 1 PH
    Document3 pagini
    Laboratoru 1 PH
    Tina Cris
    Încă nu există evaluări
  • Laboratorul 7 PH
    Laboratorul 7 PH
    Document9 pagini
    Laboratorul 7 PH
    Tina Cris
    Încă nu există evaluări
  • Index 1
    Index 1
    Document3 pagini
    Index 1
    Tina Cris
    Încă nu există evaluări
  • Conditiile Var I
    Conditiile Var I
    Document1 pagină
    Conditiile Var I
    Tina Cris
    Încă nu există evaluări
  • TVPP Laborator NR 3
    TVPP Laborator NR 3
    Document5 pagini
    TVPP Laborator NR 3
    cc target
    Încă nu există evaluări
  • Raport DB
    Raport DB
    Document54 pagini
    Raport DB
    Tina Cris
    Încă nu există evaluări
  • Raport Practica de Producție
    Raport Practica de Producție
    Document36 pagini
    Raport Practica de Producție
    Tina Cris
    Încă nu există evaluări
  • Tehnici Black Box de Testare
    Tehnici Black Box de Testare
    Document4 pagini
    Tehnici Black Box de Testare
    Mihai Șveț
    Încă nu există evaluări
  • Laboratorul 3
    Laboratorul 3
    Document12 pagini
    Laboratorul 3
    Tina Cris
    Încă nu există evaluări
  • Laborator NR 4 Testare
    Laborator NR 4 Testare
    Document5 pagini
    Laborator NR 4 Testare
    Tina Cris
    Încă nu există evaluări
  • Laboratorul 2
    Laboratorul 2
    Document15 pagini
    Laboratorul 2
    Tina Cris
    Încă nu există evaluări
  • Laboratorul 1
    Laboratorul 1
    Document9 pagini
    Laboratorul 1
    Tina Cris
    Încă nu există evaluări
  • Lfa 6
    Lfa 6
    Document4 pagini
    Lfa 6
    Tina Cris
    Încă nu există evaluări
  • GC 1
    GC 1
    Document4 pagini
    GC 1
    Tina Cris
    Încă nu există evaluări
  • Lfa 5
    Lfa 5
    Document2 pagini
    Lfa 5
    Tina Cris
    Încă nu există evaluări
  • Șabloane de Proiectare Teorie
    Șabloane de Proiectare Teorie
    Document10 pagini
    Șabloane de Proiectare Teorie
    Tina Cris
    Încă nu există evaluări
  • LFA Lucrarea Practica Nr2 AF
    LFA Lucrarea Practica Nr2 AF
    Document3 pagini
    LFA Lucrarea Practica Nr2 AF
    Ппапренр Енре
    Încă nu există evaluări
  • Grafica Pe Calculator
    Grafica Pe Calculator
    Document138 pagini
    Grafica Pe Calculator
    Gaby Gabriel
    100% (1)
  • Lfa 4
    Lfa 4
    Document4 pagini
    Lfa 4
    Tina Cris
    Încă nu există evaluări
  • Lfa 1
    Lfa 1
    Document5 pagini
    Lfa 1
    Tina Cris
    Încă nu există evaluări
  • Lfa 3
    Lfa 3
    Document2 pagini
    Lfa 3
    Tina Cris
    Încă nu există evaluări
  • Lfa 2
    Lfa 2
    Document5 pagini
    Lfa 2
    Tina Cris
    Încă nu există evaluări
  • Raport Practica de Producție
    Raport Practica de Producție
    Document36 pagini
    Raport Practica de Producție
    Tina Cris
    Încă nu există evaluări
  • Raport DB
    Raport DB
    Document54 pagini
    Raport DB
    Tina Cris
    Încă nu există evaluări