Sunteți pe pagina 1din 4

Programare orientat pe obiecte Laborator 11

Laborator 11

1) S se realizeze o aplicaie n care fereastra principal a acesteia s-i pstreze poziia i dimensiunea de la o
execuie la alta.

Soluie:

Pas 1
Definim metodele urmatoare:
void citesteFisierInitializare()
{
FileStream fs = null;
StreamReader sr = null;
try
{
fs = new FileStream("start.ini", FileMode.Open, FileAccess.Read);
sr = new StreamReader(fs);
for (; ; )
{
String linie = sr.ReadLine();
if (linie == null) break;//daca s-a citit tot
if (linie.StartsWith("Pozitie"))
{
linie = linie.Substring(linie.IndexOf("=") + 1);
this.Left = Convert.ToInt16(linie.Substring(0, linie.IndexOf(" ")));
linie = linie.Substring(linie.IndexOf("=") + 1);
this.Top = Convert.ToInt16(linie.Substring(0, linie.IndexOf(" ")));
}
if (linie.StartsWith("Dimensiune"))
{
linie = linie.Substring(linie.IndexOf("=") + 1);
this.Width = Convert.ToInt16(linie.Substring(0, linie.IndexOf(" ")));
linie = linie.Substring(linie.IndexOf("=") + 1);
this.Height = Convert.ToInt16(linie.Substring(0, linie.IndexOf(" ")));
}
if (linie.StartsWith("Nume fereastra"))
{
linie = linie.Substring(linie.IndexOf(":") + 1);
this.Text = linie.Substring(0, linie.IndexOf(" "));
}
}

}
catch (System.Exception)
{
this.Left = 100;
this.Top = 100;
this.Width = 200;

1
Programare orientat pe obiecte Laborator 11

this.Height = 150;
this.Text = "I/O";
}
finally
{
if (sr != null) sr.Close();
if (fs != null) fs.Close();
}
}

void scrieFisierInitializare()
{
FileStream fs=null;
StreamWriter sw=null;
try
{
fs = new FileStream("start.ini", FileMode.Create);
sw = new StreamWriter(fs);
sw.WriteLine("Pozitie: X={0} Y={1} //pozitia ferestrei", this.Left, this.Top);
sw.WriteLine("Dimensiune: Latime={0} Inaltime={1} //dimensiunea ferestrei",
this.Width, this.Height);
sw.WriteLine("Nume fereastra:{0} //titlul ferestrei", this.Text);

}
catch (System.Exception) { }
finally
{
if (sw != null) sw.Flush();
if (sw != null) sw.Close();
if (fs != null) fs.Close();
}
}

Pas 2
La evenimentul Load asociat formularului adugm:

citesteFisierInitializare();

Pas 3
La evenimentul FormClosing asociat formularului adugm:
scrieFisierInitializare();

2
Programare orientat pe obiecte Laborator 11

2) S se realizeze o aplicaie de tip "agenda telefonic".

Se vor implementa urmtoarele:

Introducerea n lista de contacte a unei noi persoane


Modificarea datelor pentru un contact existent
Eliminarea unei persoane din lista de contacte
Importul datelor dintr-un vCard
Exportul datelor ntr-un vCard

Detalii despre fiiere vCard se pot gsi la adresa: http://en.wikipedia.org/wiki/VCard

Interfaa aplicaiei va fi urmtoarea

Pentru codul surs (parial) click aici.

2) S se modifice programul anterior astfel nct pentru salvarea/citirea datelor din fiiere s se foloseasc
serializarea datelor.

Datele mai complexe, de exemplu obiecte ale unei clase, se pot salva sub form de iruri de octei, dar va fi
foarte greu la restaurare s mprim octeii astfel nct s recompunem obiectele salvate. Majoritatea
limbajelor de nivel nalt, inclusiv C#, implementeaz un mecnism simplu i fiabil ne salvare i restaurare a
obiectelor prin intermediul fiierelor. Acest mecanism poart denumirea de serializare.

3
Programare orientat pe obiecte Laborator 11

Orice clas ale crei obiecte pot fi salvate sau restaurate prin intermediul fiierelor, va trebui fie s fie
declarat serializabil, fie s implementeze o interfa specific, numit ISerializable.

Declararea unei clase ca fiind serializabil se face prin specificarea atributului [Serializable].

[Serializable]
public class Persoana{...}

Transformarea obiectelor n iruri de octei pentru a fi executat transferul la nivelul fiierului, se face utiliznd
formatori (Formatters). Exist 2 tipuri de formatori: BinaryFormatter i SoapFormatter. Pentru utilizarea
acestor formatoare va trebui s adugm fiierului care implementeaz forma spaiul de nume
System.Runtime.Serialization.Formatters.Binary, iar pentru a putea implementa mecanismul efectiv de
serializare, spaiul de nume System.Runtime.Serialization.

using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
...

n clasa ListaPersoane metodele pentru scriere i citire pot fi:

public void scrie(string cale)


{
Stream s = File.Open(cale, FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
for (int i = 0; i < NumarPersoane; i++)
bf.Serialize(s, persoane[i]);
s.Close();
}

public void citeste(string cale)


{
Stream s = File.Open(cale, FileMode.Open);
BinaryFormatter bf = new BinaryFormatter();
while (s.Position!=s.Length)
{
Persoana P = (Persoana)bf.Deserialize(s);
persoane.Add(P);
}
s.Close();
}

Important: n acest caz nu mai este necesar prezena metodelor de scriere i citire din clasa Persoana.

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