Filmoteka
Radi bi hranili podatke o filmih, ki jih imamo v naši filmoteki. Zanima nas katere filme imamo, glede na lastnosti,
ki nas zanimajo.
Sestavi razred Film, ki ima naslednje lastnosti: zaporedna številka, naslov, žanr, format (oblika video zapisa),
dolžina in podnapisi (bool)
Rešitev (C#)
class Program
{
// preizkus razreda Film
public static void Main(string[] args) {
string naslov, zanr, format;
int dolzina;
bool podnapisi;
string[] zanri = {"komedija", "drama", "animirani", "akcija", "triler", "fantastika"};
Random gen = new Random();
// za preizkus ustvarimo tabelo z desetimi filmi, ki se sami naključno zgenerirajo
Film[] filmi = new Film[10];
for (int i = 0; i < 10; i++) {
// Console.Write("Vnesi naslov filma " + (i + 1) + ": ");
naslov = "NASLOV_" + (i + 1); // Console.ReadLine();
zanr = zanri[gen.Next(0, zanri.Length)];
// Console.Write("Vnesi format filma: ");
format = "DVD"; // Console.ReadLine();
dolzina = gen.Next(1, 240);
if (gen.Next(1, 5) == 1) podnapisi = false; // manj filmov naj bo brez podnapisov
else podnapisi = true;
Film film = new Film(naslov, zanr, format, dolzina, podnapisi);
filmi[i] = film;
}
// preizkus metod
Console.WriteLine("--- Izpis vseh filmov v tabeli: ---");
Film.IzpisTabeleFilmov(filmi);
Console.WriteLine();
Console.WriteLine("--- V 90 minutah si lahko ogledate sledeče filme: ---");
Film.IzpisTabeleFilmov(Film.FilmiPoCasu(filmi, 90)); // izpiši filme, ki so krajši od 100 minut
Console.WriteLine();
Console.WriteLine("--- Filmi, ki imajo podnapise (dolžina izražena v urah): ---");
Film.IzpisTabeleFilmovUre(Film.FilmiSPodnapisi(filmi)); // izpiše filme, ki imajo podnapise
Console.WriteLine();
Console.WriteLine("--- Vsi filmi določenega žanra: ---");
Console.Write("Vnesi zanr, po katerem želiš filtrirati: ");
zanr = Console.ReadLine();
Film.IzpisTabeleFilmovUre(Film.FilmiZanra(filmi, zanr));
Console.WriteLine();
Console.WriteLine("--- Filter po žanru, dolžini in podnapisih vrne naslednje filme: ---");
Console.Write("Vnesi zanr, po katerem želiš filtrirati: ");
zanr = Console.ReadLine();
Console.Write("Vnesi dolžino v minutah: ");
dolzina = int.Parse(Console.ReadLine());
// izpišemo še filme, ki imajo podnapise, so vnešenega žanra in se končajo v navedenem času
Film.IzpisTabeleFilmovUre(Film.FilmiZanra(Film.FilmiPoCasu(Film.FilmiSPodnapisi(filmi), dolzina), zanr));
Console.WriteLine();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
public class Film {
// statične spremenljivke
private static int kolikoFilmov = 0; // hranimo koliko filmov imamo v arhivu
// objektne spremenljivke
private int fZapSt; // zaporedna št. filma
private string fNaslov;
private string fZanr;
private string fFormat; // DivX, DVD, VHS
private int fDolzina; // dolžina filma v minutah
private bool fPodnapisi; // če je true, ima SLO podnapise
// konstruktorja
public Film() { // začetne vrednosti
Film.kolikoFilmov++; // ustvarili smo nov film --> nova št.
this.fZapSt = Film.kolikoFilmov;
this.fNaslov = "NEZNAN";
this.fZanr = "NEZNAN";
this.fFormat = "DivX";
this.fDolzina = 90;
this.fPodnapisi = true;
}
public Film(string naslov, string zanr, string format, int dolzina, bool podnapisi) :this() {
this.NastaviNaslov(naslov); // z metodo spremenimo privzeto vrednost
this.NastaviZanr(zanr);
this.NastaviFormat(format);
this.NastaviDolzino(dolzina);
this.fPodnapisi = podnapisi;
}
// set metode
public bool NastaviNaslov(string n) {
if (n != null) {
this.fNaslov = n;
return true;
}
return false;
}
public bool NastaviZanr(string z) {
if (z != null) {
this.fZanr = z;
return true;
}
return false;
}
public bool NastaviFormat(string f) {
if (f == "DivX" || f == "DVD" || f == "VHS") {
this.fFormat = f;
return true;
}
return false;
}
public bool NastaviDolzino(int d) {
if (1 <= d && d <= 240) {
this.fDolzina = d;
return true;
}
return false;
}
public void NastaviPodnapise(bool p) {
this.fPodnapisi = p;
}
// get metode
public int PovejZaporednoSt() {
return this.fZapSt;
}
public string PovejNaslov() {
return this.fNaslov;
}
public string PovejZanr() {
return this.fZanr;
}
public string PovejFormat() {
return this.fFormat;
}
public int PovejDolzino() {
return this.fDolzina;
}
public string PovejCeImaPodnapise() {
if (this.fPodnapisi == true) {
return "ima podnapise";
}
return "nima podnapisov";
}
// opisna metoda 1
public override string ToString() {
return "Zaporedna številka: " + this.PovejZaporednoSt() + "\nNaslov filma: " + this.PovejNaslov() +
"\nŽanr: " + this.PovejZanr() + "\nFormat: " + this.PovejFormat() +
"\nDolžina: " + this.PovejDolzino() + "\nPodnapisi: " + this.PovejCeImaPodnapise();
}
// opisna metoda 2
public string ToStringUre() {
return "Zaporedna številka: " + this.PovejZaporednoSt() + "\nNaslov filma: " + this.PovejNaslov() +
"\nŽanr: " + this.PovejZanr() + "\nFormat: " + this.PovejFormat() +
"\nDolžina: " + this.PovejDolzinoUre() + "\nPodnapisi: " + this.PovejCeImaPodnapise();
}
// metoda, ki zna pretvoriti dolžino filma iz minut v ure
public string PovejDolzinoUre() {
if (this.PovejDolzino() / 60 < 1) {
if (this.PovejDolzino() == 1) return "1 minuta";
if (this.PovejDolzino() == 2) return "2 minuti";
if (this.PovejDolzino() < 5) return "" + this.PovejDolzino() + " minute";
return "" + this.PovejDolzino() + " minut";
}
if (this.PovejDolzino() / 60 == 1) {
if (this.PovejDolzino() % 60 == 1) return "1 ura " + "1 minuta";
if (this.PovejDolzino() % 60 == 2) return "1 ura " + "2 minuti";
if (this.PovejDolzino() % 60 < 5) return "1 ura " + this.PovejDolzino() % 60 + " minute";
return "1 ura " + this.PovejDolzino() % 60 + " minut";
}
if (this.PovejDolzino() / 60 == 2) {
if (this.PovejDolzino() % 60 == 1) return "2 uri " + "1 minuta";
if (this.PovejDolzino() % 60 == 2) return "2 uri " + "2 minuti";
if (this.PovejDolzino() % 60 < 5) return "2 uri " + this.PovejDolzino() % 60 + " minute";
return "2 uri " + this.PovejDolzino() % 60 + " minut";
}
if (this.PovejDolzino() % 60 == 1) return "" + this.PovejDolzino() / 60 + " ure " + "1 minuta";
if (this.PovejDolzino() % 60 == 2) return "" + this.PovejDolzino() / 60 + " ure " + "2 minuti";
if (this.PovejDolzino() % 60 < 5) return "" + this.PovejDolzino() / 60 + " ure " + this.PovejDolzino() % 60 + " minute";
return "" + this.PovejDolzino() / 60 + " ure " + this.PovejDolzino() % 60 + " minut";
}
// metoda vrne tabelo filmov, ki se jih je moč ogledati v zahtevanem času
public static Film[] FilmiPoCasu(Film[] tabFilmov, int kolikoCasa) {
int st = 0; // najprej ugotovimo koliko je teh filmov
for (int i = 0; i < tabFilmov.Length; i++) {
if (tabFilmov[i].PovejDolzino() < kolikoCasa) {
st++;
}
}
Film[] noviFilmi = new Film[st]; // naredimo prostor zanje
int j = 0;
for (int i = 0; i < tabFilmov.Length; i++) {
if (tabFilmov[i].PovejDolzino() < kolikoCasa) {
noviFilmi[j] = tabFilmov[i]; // polnjenje nove tabele
j++;
}
}
return noviFilmi; // vrnemo novo tabelo
}
// metoda vrne tabelo filmov, ki imajo podnapise
public static Film[] FilmiSPodnapisi(Film[] tabFilmov) {
int st = 0; // najprej ugotovimo koliko je teh filmov
for (int i = 0; i < tabFilmov.Length; i++) {
if (tabFilmov[i].fPodnapisi == true) {
st++;
}
}
Film[] noviFilmi = new Film[st]; // naredimo prostor zanje
int j = 0;
for (int i = 0; i < tabFilmov.Length; i++) {
if (tabFilmov[i].fPodnapisi == true) {
noviFilmi[j] = tabFilmov[i]; // polnjenje nove tabele
j++;
}
}
return noviFilmi; // vrnemo novo tabelo
}
// metoda vrne tabelo filmov izbranega žanra
public static Film[] FilmiZanra(Film[] tabFilmov, string zanr) {
int st = 0; // najprej ugotovimo koliko je teh filmov
for (int i = 0; i < tabFilmov.Length; i++) {
if (tabFilmov[i].PovejZanr() == zanr) {
st++;
}
}
Film[] noviFilmi = new Film[st]; // naredimo prostor zanje
int j = 0;
for (int i = 0; i < tabFilmov.Length; i++) {
if (tabFilmov[i].PovejZanr() == zanr) {
noviFilmi[j] = tabFilmov[i]; // polnjenje nove tabele
j++;
}
}
return noviFilmi; // vrnemo novo tabelo
}
// metoda izpiše iz tabele filmov
public static void IzpisTabeleFilmov(Film[] tabF) {
for (int i = 0; i < tabF.Length; i++) Console.WriteLine(tabF[i].ToString() + "\n");
}
// metoda izpiše iz tabele filmov (čas v urah)
public static void IzpisTabeleFilmovUre(Film[] tabF) {
for (int i = 0; i < tabF.Length; i++) Console.WriteLine(tabF[i].ToStringUre() + "\n");
}
}