subiect lucrare paw rezolvat

8
/* NOTA 3: Sa se creeze clasa Student ce contine atributele private: -nume - sir de caractere; -note - vector de valori intregi fara semn; -grupa valoare intreaga; -cod - valoare intreaga a carei valoare NU poate fi modificata dupa initializare * La nivelul clasei se defineste un atribut static privat, NrStudenti, ce va fi utilizat pentru a numara numarul de instante de tip Student creat si pentru a genera valori unice pentru atributul unic, cod. * Pentru a instantia clasa, sa se defineasca DOAR constructori cu parametri (forma acestuia ramane la alegerea studentului; o abordare posibila ar fi un constructor care sa primeasca numele si grupa). * In urma apelului constructorului, campul cod trebuie sa fie initializat si sa fie unic indiferent de forma aleasa pentru constructorul cu parametri (se accepta o valoare initiala nula pentru note). * Se definesc proprietati care sa permita citire/scriere (unde este cazul) pentru proprietatile: - nume; - grupa - cod - NrStudenti (atributul static) doar citire NOTA 4: * Clasa se deriveaza din ICloneable pentru a permite deep-copy intre obiecte. * Pentru a permite afisarea la Consola a unui Student se defineste interfata IAfisabil ce defineste metoda virtuala pura string Afisare(); * Clasa Student se deriveaza si din IAfisabil. NOTA 5: * Pentru a permite citirea unui Student de la tastatura se defineste metoda Citeste ce permite modificarea valorii numelui si grupei. * Folositi try-catch pentru a genera o exceptie InvalidValueException (definita de utilizator) daca grupa a fost mai mare de 9999

Upload: dana-raluca-raileanu

Post on 08-Apr-2016

36 views

Category:

Documents


4 download

DESCRIPTION

aplicatie examen paw rezolvata

TRANSCRIPT

Page 1: Subiect Lucrare paw Rezolvat

/*NOTA 3:

Sa se creeze clasa Student ce contine atributele private:-nume - sir de caractere;-note - vector de valori intregi fara semn;-grupa valoare intreaga;-cod - valoare intreaga a carei valoare NU poate fi modificata dupa initializare

* La nivelul clasei se defineste un atribut static privat, NrStudenti, ce va fi utilizat pentru a numara numarul de instante de tip Student creat si pentru a genera valori unice pentru atributul unic, cod. * Pentru a instantia clasa, sa se defineasca DOAR constructori cu parametri (forma acestuia ramane la alegerea studentului; o abordare posibila ar fi un constructor care sa primeasca numele si grupa). * In urma apelului constructorului, campul cod trebuie sa fie initializat si sa fie unic indiferent de forma aleasa pentru constructorul cu parametri (se accepta o valoare initiala nula pentru note). * Se definesc proprietati care sa permita citire/scriere (unde este cazul) pentru proprietatile: - nume; - grupa - cod - NrStudenti (atributul static) doar citire

NOTA 4: * Clasa se deriveaza din ICloneable pentru a permite deep-copy intre obiecte. * Pentru a permite afisarea la Consola a unui Student se defineste interfata IAfisabil ce defineste metoda virtuala pura string Afisare(); * Clasa Student se deriveaza si din IAfisabil.

NOTA 5: * Pentru a permite citirea unui Student de la tastatura se defineste metoda Citeste ce permite modificarea valorii numelui si grupei. * Folositi try-catch pentru a genera o exceptie InvalidValueException (definita de utilizator) daca grupa a fost mai mare de 9999

NOTA 6: * Se defineste metoda AdaugaNota care primeste vaoarea unei note si o adauga la sirul de note asociat Studentului.

NOTA 7: * Pentru a permite acces DOAR in mod scriere la nivelul atributului note se supraincarca operatorul index. * Pentru a permite adaugarea unei note la sirul de note al unui student se supraincarca operatorul + care va aduna un Student cu un intreg fara semn (atentie, + nu modifica valoarea operanzilor) * Pentru a calcula media unui Student se supraincarca operatorul cast catre double in forma explicita. NOTA 8: * In programul apelator se va crea un ArrayList ce va contine minim 3 instante de tip Student. Dupa creare, studentii vor fi afisati cu metoda Afisare.

Page 2: Subiect Lucrare paw Rezolvat

NOTA 9: * In clasa student se defineste metoda DaExamen(uint valoare_nota) ce permite adaugarea unei note cu valoarea data. * Se defineste clasa Examen ce gestioneaza un eveniment asociat sustinerii unui examen. In clasa se definesc: - atributul: nume examen - sir de caractere - constructor cu parametri (pentru nume examen) - un eveniment examen ce gestioneaza delegati catre metode ce returneaza void si primesc un int - metoda publica InregistrareExamen ce adauga handler-ul oferit de o instanta a clasei student (prin metoda DaExamen) ce doreste sa sustina acel examen. - metoda publica SustinereExamen ca starter pentru eveniment; implicit nota este 0, urmand sa o modifice la publicarea notelor. * La acest eveniment se pot abona doar studentii dintr-o grupa data de programator.

NOTA 10: * Programul trebuie sa toate cerintele si acestea trebuie testate in Main. Nu sunt acceptate erori de executie.

*/using System;using System.Collections;

namespace TestStudent{

interface IAfisabil { string Afisare(); }

class Student : ICloneable, IAfisabil { int cod; public int Cod { get { return cod; } private set { cod = value; } }

string nume; public string Nume { get { return nume; } set { nume = value; } }

//clasa pt tratarea exceptiilor invalide

Page 3: Subiect Lucrare paw Rezolvat

class InvalidValueException : Exception { public InvalidValueException(string msg) : base(msg) { } }

int grupa; //verifica daca numarul grupei este < 9999 public int Grupa { get { return grupa; } set { if (value > 9999) throw new InvalidValueException("Grupa>9999"); grupa = value; } }

//metoda de citire pana cand se introduce un numar valid < 9999 public void Citeste() { while (true) {

try { Console.WriteLine("Dati numele:"); Nume = Console.ReadLine(); Console.WriteLine("Dati grupa:"); Grupa = int.Parse(Console.ReadLine()); return; } catch (FormatException) { Console.WriteLine("Err:Numar invalid"); } catch (InvalidValueException e) { Console.WriteLine("Err:{0}", e.Message); } } }

int[] note;

static int nrStudenti = 0;

public Student(string nume, int grupa)

Page 4: Subiect Lucrare paw Rezolvat

{ nrStudenti++; this.cod = nrStudenti; this.Nume = nume; this.Grupa = grupa; this.note = new int[] { }; }

public override string ToString() { return string.Format("Cod: {0}, Nume: {1,-8}, Grupa: {2}, Note: {3,-10}, Medie: {4,5:#0.00}", cod, nume, grupa, string.Join<int>(",", note), (double)this); }

public object Clone() { Student copie = new Student(this.nume, this.grupa); copie.note = new int[this.note.Length]; Array.Copy(this.note, copie.note, this.note.Length);

return copie; }

public string Afisare() { return ToString(); }

public void AdaugaNota(int nota) { int[] note = new int[this.note.Length + 1]; this.note.CopyTo(note, 0); note[note.Length - 1] = nota; this.note = note; }

public int NumarNote { get { return note.Length; } }

public int this[int i] { get { return note[i]; } set { note[i] = value; }

Page 5: Subiect Lucrare paw Rezolvat

}

public static Student operator +(Student student, int nota) { Student nou = student.Clone() as Student; nou.AdaugaNota(nota); return nou; }

public static explicit operator double(Student student) { if (student.note.Length == 0) { return 0; }

double medie = 0; foreach (int nota in student.note) { medie += nota; }

return medie / student.note.Length; } } //delegat si eveniment -> la fiecare sustinere a unui examen tb adaugata nota studentului delegate void DelegatEx(int nota); class Examen { public string Nume { get; set; } //varianta prescurtata -> compilatorul stie ce trebuie implementat public Examen(string nume) { Nume = nume; } public event DelegatEx EvExamen; public void Inregistrare(Student s) { EvExamen += s.AdaugaNota; //abonarea la eveniment }

void s(int nota) { throw new NotImplementedException(); } public void Sustinere() { if (EvExamen != null) EvExamen(10); //sustinerea examenului

Page 6: Subiect Lucrare paw Rezolvat

} }

class Program { static void Main(string[] args) {

Student ion = new Student("Ion", 1001); Student maria = new Student("Maria", 1002);

Console.WriteLine(ion); Console.WriteLine(ion.Clone()); ion.AdaugaNota(6); ion.AdaugaNota(7); Console.WriteLine(ion); ion[1] = 8; Console.WriteLine(ion); Console.WriteLine(ion + 10); Console.WriteLine(ion);

ion.Citeste();

ArrayList studenti = new ArrayList(); studenti.Add(ion); studenti.Add(ion + 1); studenti.Add(ion + 2);

foreach (Student student in studenti) { student.Afisare(); }

Examen e = new Examen("PAW"); e.Inregistrare(ion); e.Sustinere(); Console.WriteLine(ion); } }}