using Microsoft.VisualBasic.FileIO;
using System;
using System.Linq;
using System.Numerics;
namespace OtoGaleri02
{
internal class Program
{
static Galeri G034 = new Galeri();
static void Main(string[] args)
{
Uygulama();
}
static void Uygulama()
{
SahteVeriGir();
Menu();
while (true)
{
string secim = SecimAl();
switch (secim)
{
case "1":
case "K":
ArabaKirala();
break;
case "2":
case "T":
ArabaTeslimAl();
break;
case "3":
case "R":
ArabalarıListele(DURUM.Kirada);//KiradakiArabalarıListele();
break;
case "4":
case "M":
ArabalarıListele(DURUM.Galeride);//GaleridekiArabalarıListele();
break;
case "5":
case "A":
DURUM durum = DURUM.Galeride | DURUM.Kirada;
ArabalarıListele(durum);//TümArabalarıListele();
break;
case "6":
case "I":
KiralamaIptali();
break;
case "7":
case "Y":
ArabaEkle();
break;
case "8":
case "S":
ArabaSil();
break;
case "9":
case "G":
BilgileriGoster();
break;
}
}
}
static void SahteVeriGir()
{
G034.ArabaEkle("23FGY25", "FORD", 520f, ARABATIPI.SUV);
G034.ArabaEkle("23GY257", "RENAULT", 520f, ARABATIPI.SUV);
G034.ArabaEkle("23FGY25", "TOYOTA", 520f, ARABATIPI.SUV);
G034.ArabaEkle("23FGY26", "TESLA", 520f, ARABATIPI.SUV);
G034.ArabaEkle("23FGY29", "FERRARI", 520f, ARABATIPI.SUV);
G034.ArabaEkle("23FGY21", "AUDI", 520f, ARABATIPI.SUV);
G034.ArabaEkle("23FGY20", "VOLVO", 520f, ARABATIPI.SUV);
G034.ArabaEkle("23FGY28", "FIAT", 520f, ARABATIPI.SUV);
G034.ArabaEkle("23FGY30", "RANGE ROVER", 520f, ARABATIPI.SUV);
G034.ArabaEkle("23FGY31", "LAMBORGHINI", 520f, ARABATIPI.SUV);
G034.ArabaEkle("23FGY32", "MAZDA", 520f, ARABATIPI.SUV);
G034.ArabaEkle("23FGY33", "SKODA", 520f, ARABATIPI.SUV);
}
static void Menu()
{
Console.WriteLine("Galeri Otomasyon");
Console.WriteLine("1- Araba Kirala(K)");
Console.WriteLine("2- Araba Teslim Al(T)");
Console.WriteLine("3- Kiradaki Arabaları Listele(R)");
Console.WriteLine("4- Galerideki Arabaları Listele(M)");
Console.WriteLine("5- Tüm Arabaları Listele(A)");
Console.WriteLine("6- Kiralama İptali(I)");
Console.WriteLine("7- Araba Ekle(Y)");
Console.WriteLine("8- Araba Sil(S)");
Console.WriteLine("9- Bilgileri Göster(G)");
}
static string SecimAl()
{
int hataSayaci = 0;
Console.WriteLine();
string karakterler = "123456789KTRMAIYSG";
do
{
Console.Write("Seçiminiz:");
string secim = Console.ReadLine().ToUpper();
if (karakterler.IndexOf(secim) > -1 && secim.Length == 1) //IndexOf() => Reports the zero-based index of the first occurrence of the specified string in this instance.
{
return secim;
}
if (hataSayaci == 9)
{
Console.WriteLine("Üzgünüm sizi anlayamıyorum. Program sonlandırılıyor.");
Environment.Exit(0);
}
else
{
Console.WriteLine();
Console.WriteLine("Hatalı işlem gerçekleştirildi. Tekrar deneyin." + Environment.NewLine);
hataSayaci++;
}
} while (true);
}
static void ArabaKirala()
{
Console.WriteLine();
Console.WriteLine("-Araba Kirala-" + Environment.NewLine);
bool isValid = false;
string displayMessage = string.Empty;
string plaka;
//(bool, Araba) gecerlilikVeAraba = default;
Araba aktifAraba= null;
do
{
Console.Write(displayMessage + "Kiralanacak arabanın plakası: ");
displayMessage = string.Empty;
plaka = Console.ReadLine().ToUpper();
if (!G034.PlakaKontrol(plaka))
{
displayMessage = "Bu şekilde plaka girişi yapamazsınız. Tekrar deneyin." + Environment.NewLine;
continue;
}
//gecerlilikVeAraba = G034.GalerideMi(plaka);
aktifAraba = G034.GalerideMi2(plaka);
if (aktifAraba is null) //(!gecerlilikVeAraba.Item1)
{
displayMessage = "Galeriye ait bu plakada bir araba yok." + Environment.NewLine;
continue;
}
if (aktifAraba.Durum == DURUM.Kirada)
{
displayMessage = "Araba şu anda kirada. Farklı araba seçiniz." + Environment.NewLine;
continue;
}
isValid = true;
} while (!isValid);
int sure;
do
{
Console.Write("Kiralama süresi: ");
string giris = Console.ReadLine();
if (!int.TryParse(giris, out sure))
{
Console.WriteLine("Hatalı giriş yaptınız. Lütfen tekrar deneyin."+Environment.NewLine);
isValid = false;
continue;
}
isValid = true;
} while (!isValid);
aktifAraba.Durum = DURUM.Kirada;
aktifAraba.KiralanmaSureleri.AddLast(sure);
Console.WriteLine();
Console.WriteLine(plaka + " plakalı araba " + sure + " saatliğine kiralandı.");
//G034.ArabaKiralama(plaka, sure);
}
static void ArabaTeslimAl()
{
Console.WriteLine();
Console.WriteLine("-Araba Teslim Al-" + Environment.NewLine);
Araba aktifAraba = null;
bool isValid = false;
string plaka;
do
{
Console.Write("Teslim edilecek arabanın plakası:");
plaka = Console.ReadLine().ToUpper();
if (!G034.PlakaKontrol(plaka))
{
Console.WriteLine("Bu şekilde plaka girişi yapamazsınız. Tekrar deneyin.");
continue;
}
aktifAraba = G034.GalerideMi2(plaka);
if (aktifAraba is null)
{
Console.WriteLine("Galeriye ait bu plakada bir araba yok.");
continue;
}
if (aktifAraba.Durum == DURUM.Galeride)
{
Console.WriteLine("Hatalı giriş yapıldı. Araba zaten galeride.");
continue;
}
isValid = true;
} while (!isValid);
aktifAraba.Durum = DURUM.Galeride;
Console.WriteLine();
Console.WriteLine("Araba galeride beklemeye alındı.");
//G034.ArabaTeslimAlim(plaka)
}
static void ArabalarıListele(DURUM durum)
{
string baslik = string.Empty;
string liste = G034.ArabalarListele(durum);
switch (durum)
{
case (DURUM.Kirada | DURUM.Galeride):
baslik = "-Tüm";
break;
case DURUM.Kirada:
baslik = "-Kiradaki";
break;
case DURUM.Galeride:
baslik = "-Galerideki";
break;
}
Console.WriteLine();
Console.WriteLine(baslik + " Arabalar-" + Environment.NewLine);
Console.WriteLine("Plaka".PadRight(12) + "Marka".PadRight(12) + "K.Bedeli".PadRight(14) + "Araba Tipi".PadRight(16) + "K.Sayısı".PadRight(16) + "Durum".PadRight(8));
Console.WriteLine("----------------------------------------------------------------------------------");
Console.WriteLine(liste);
}
static void KiralamaIptali()
{
Console.WriteLine();
Console.WriteLine("-Kiralama İptali-" + Environment.NewLine);
bool isValid = false;
string plaka;
Araba aktifAraba = null;
do
{
Console.Write("Kiralaması iptal edilecek arabanın plakası:");
plaka = Console.ReadLine().ToUpper();
if (!G034.PlakaKontrol(plaka))
{
Console.WriteLine("Bu şekilde plaka girişi yapamazsınız. Tekrar deneyin.");
continue;
}
aktifAraba = G034.GalerideMi2(plaka);
if (aktifAraba == null)
{
Console.WriteLine("Galeriye ait bu plakada bir araba yok.");
continue;
}
if (aktifAraba.Durum == DURUM.Galeride)
{
Console.WriteLine("Hatalı giriş yapıldı. Araba zaten galeride.");
continue;
}
isValid = true;
} while (!isValid);
aktifAraba.Durum = DURUM.Galeride;
aktifAraba.KiralanmaSureleri.RemoveLast();
Console.WriteLine();
Console.WriteLine("İptal gerçekleştirildi.");
// G034.KiralamaIptal(plaka);
}
static void ArabaEkle()
{
bool isValid = false;
string plaka;
Araba aktifAraba;
Console.WriteLine();
Console.WriteLine("-Araba Ekle-" + Environment.NewLine);
do
{
Console.Write("Plaka: ");
plaka = Console.ReadLine().ToUpper();
if (!G034.PlakaKontrol(plaka))
{
Console.WriteLine("Bu şekilde plaka girişi yapamazsınız. Tekrar deneyin.");
continue;
}
foreach (Araba araba in G034.Arabalar)
{
if (araba.Plaka == plaka)
{
Console.WriteLine("Aynı plakada araba mevcut. Girdiğiniz plakayı kontrol edin.");
}
}
//aktifAraba = G034.GalerideMi2(plaka);
//if (aktifAraba.Durum == DURUM.Galeride)
//{
// Console.WriteLine("Aynı plakada araba mevcut. Girdiğiniz plakayı kontrol edin.");
// continue;
//}
//if (aktifAraba is null)
//{}
isValid = true;
} while (!isValid);
string marka;
do
{
Console.Write("Marka: ");
marka = Console.ReadLine();
marka = marka.Substring(0, 1).ToUpper() + marka.Substring(1).ToLower();
if (!G034.HarfMi(marka))
{
Console.WriteLine("Giriş tanımlanamadı. Tekrar deneyin.");
isValid = false;
continue;
}
isValid = true;
} while (!isValid);
float kBedel;
string kiralamaBedeli;
do
{
Console.Write("Kiralama Bedeli: ");
kiralamaBedeli = Console.ReadLine();
if (G034.HarfMi(kiralamaBedeli))
{
Console.WriteLine("Giriş tanımlanamadı. Tekrar deneyin.");
isValid = false;
continue;
}
isValid = true;
} while (!isValid);
kBedel = float.Parse(kiralamaBedeli);
ARABATIPI aTip;
string secim;
Console.WriteLine("Araba Tipleri: ");
Console.WriteLine(" - SUV için 1 ");
Console.WriteLine(" - Hatchback için 2 ");
Console.WriteLine(" - Sedan için 3 ");
do
{
Console.Write("Araba Tipi: ");
secim = Console.ReadLine();
if (secim != "1" && secim != "2" && secim != "3")
{
Console.WriteLine("Giriş tanımlanamadı. Tekrar deneyin.");
isValid = false;
continue;
}
isValid = true;
} while (!isValid);
aTip = G034.ArabaTipiSecimi(secim);
G034.ArabaEkle(plaka, marka, kBedel, aTip);
Console.WriteLine();
Console.WriteLine("Araba başarılı bir şekilde eklendi.");
}
static void ArabaSil()
{
string plaka;
bool isValid = false;
Araba aktifAraba = null;
Console.WriteLine();
Console.WriteLine("-Araba Sil -" + Environment.NewLine);
do
{
Console.Write("Silmek istediğiniz arabanın plakasını giriniz: ");
plaka = Console.ReadLine().ToUpper();
if (!G034.PlakaKontrol(plaka))
{
Console.WriteLine("Bu şekilde plaka girişi yapamazsınız. Tekrar deneyin.");
continue;
}
aktifAraba = G034.GalerideMi2(plaka);
if (aktifAraba is null)
{
Console.WriteLine("Galeriye ait bu plakada bir araba yok.");
continue;
}
if (aktifAraba.Durum == DURUM.Kirada)
{
Console.WriteLine("Araba kirada olduğu için silme işlemi gerçekleştirilemedi.");
continue;
}
isValid = true;
} while (!isValid);
G034.Arabalar.Remove(aktifAraba);
//G034.ArabaSil(plaka);
Console.WriteLine();
Console.WriteLine("Araba silindi.");
Console.WriteLine();
}
static void BilgileriGoster()
{
int kiradakiAracSayisi = G034.KiradakiAracNo(0);
Console.WriteLine();
Console.WriteLine("-Galeri Bilgileri-");
Console.WriteLine("Toplam araba sayısı: " + G034.Arabalar.Count());
Console.WriteLine("Kiradaki araba sayısı: " + kiradakiAracSayisi);
Console.WriteLine("Bekleyen araba sayısı: " + (G034.Arabalar.Count()-kiradakiAracSayisi));
Console.WriteLine("Toplam araba kiralama süresi: " + G034.ToplamArabaKiralamaSuresi());
Console.WriteLine("Toplam araba kiralama adedi: " + G034.ToplamArabaKiralamaSayisi());
Console.WriteLine("Ciro: " + G034.Ciro);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OtoGaleri02
{
internal class Araba
{
public LinkedList<int> KiralanmaSureleri = new LinkedList<int>();
public string Plaka;
public string Marka;
public float KiralamaBedeli;
public ARABATIPI ArabaTipi;
public DURUM Durum = DURUM.Galeride;
public Araba(string plaka, string marka, float k_bedeli, ARABATIPI a_Tipi)
{
this.Plaka = plaka;
this.Marka = marka;
this.KiralamaBedeli = k_bedeli;
this.ArabaTipi = a_Tipi;
}
public Araba()
{
}
public int KiralamaSayisi
{
get
{
return KiralanmaSureleri.Count;
}
}
public int ToplamKiralanmaSuresi
{
get
{
int toplam = 0;
foreach (int sure in KiralanmaSureleri)
{
toplam += sure;
}
return toplam;
}
}
}
public enum ARABATIPI
{
Empty, SUV, Hatchback, Sedan
}
[Flags]
public enum DURUM
{
None = 0,
Kirada = 1,
Galeride = 2
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;
namespace OtoGaleri02
{
internal class Galeri
{
public List<Araba> Arabalar = new List<Araba>();
public void ArabaEkle(string plaka, string marka, float kBedel, ARABATIPI aTip)
{
Araba a = new Araba(plaka, marka, kBedel, aTip);
this.Arabalar.Add(a);
}
//public void ArabaKiralama(string plaka, int sure)
//{
// Araba a = null;
// foreach (Araba item in Arabalar)
// {
// if (item.Plaka == plaka)
// {
// a = item;
// }
// }
// if (a != null)
// {
// a.Durum = DURUM.Kirada;
// a.KiralanmaSureleri.Add(sure);
// }
//}
//public void ArabaTeslimAlim(string plaka)
//{
// Araba a = null;
// foreach (Araba item in Arabalar)
// {
// if (item.Plaka == plaka)
// {
// a = item;
// }
// }
// if (a != null)
// {
// a.Durum = DURUM.Galeride;
// }
//}
//public string PlakaKontrol(string text)
//{
// do
// {
// Console.Write(text);
// string plaka = Console.ReadLine().ToUpper();
// int ilkİkiKarakter;
// int sonDortKarakter;
// int ortadakiKarakter;
// bool sayiMi = int.TryParse(plaka.Substring(0, 2), out ilkİkiKarakter); //baştaki iki karakter sayı DEĞİLSE hata versin diye.
// bool sayiMi2 = int.TryParse(plaka.Substring(4, 4), out sonDortKarakter); //sondaki iki karakter sayı DEĞİLSE hata versin diye.
// bool sayiMi3 = int.TryParse(plaka.Substring(2, 2), out ortadakiKarakter); // ortadaki iki karakter sayıysa hata versin diye.
// if (plaka.Length != 8 || !sayiMi || !sayiMi2 || sayiMi3)
// {
// Console.WriteLine("Bu şekilde plaka girişi yapamazsınız. Tekrar deneyin.");
// }
// else
// {
// return plaka;
// }
// } while (true);
//}
public bool PlakaKontrol(string text) //3 4 G H T 3 4
{
if (text.Length != 7) return false;
char[] plaka = text.ToCharArray();
for (int i = 0; i < plaka.Length; i++)
{
if ((i == 0 || i == 1 || i == 5 || i == 6) && !Char.IsDigit(plaka[i]))
{
return false;
}
else if ((i == 4 && !Char.IsLetterOrDigit(plaka[i])))
{
return false;
}
else if ((i == 2 || i == 3) && !Char.IsLetter(plaka[i]))
{
return false;
}
}
return true;
}
public (bool, Araba) GalerideMi(string plaka)
{
foreach (Araba araba in Arabalar)
{
if (araba.Plaka == plaka)
{
return (true, araba);
}
}
return (false, null);
}
public Araba GalerideMi2(string plaka)
{
foreach (Araba araba in Arabalar)
{
if (araba.Plaka == plaka)
{
return araba;
}
}
return null;
}
public int KiradakiAracNo (int KiralananAraclarNo)
{
foreach (Araba araba in Arabalar)
{
if (araba.Durum == DURUM.Kirada)
{
KiralananAraclarNo++;
}
}
return KiralananAraclarNo;
}
/*public string DurumKontrol(string plaka)
{
foreach (Araba araba in Arabalar)
{
Araba a = Empty;
if (araba.Plaka != plaka)
{
}
else
{
return plaka;
}
}
}*/
public bool HarfMi(string text)
{
char[] marka = text.ToCharArray();
for (int i = 0; i < marka.Length; i++)
{
if (Char.IsLetter(marka[i]))
{
return true;
}
}
return false;
//if (int.TryParse(text, out int result))
//{
//return false;
//}
//else
//{
//return true;
//}
//bool isIntString = marka.All(char.IsDigit);
//if (isIntString)
//{
// Console.WriteLine("Giriş tanımlanamadı. Tekrar deneyin.");
//}
//else
//{
// return marka;
//}
}
public ARABATIPI ArabaTipiSecimi(string secim)
{
ARABATIPI aTip;
switch (secim)
{
case "1":
return aTip = ARABATIPI.SUV;
case "2":
return aTip = ARABATIPI.Hatchback;
case "3":
return aTip = ARABATIPI.Sedan;
default:
return aTip = ARABATIPI.Empty;
}
}
public int BedelKontrol(string text)
{
do
{
Console.Write(text);
string bedel = Console.ReadLine();
int kbedel;
if (int.TryParse(bedel, out kbedel))
{
return kbedel;
}
else
{
Console.WriteLine("Giriş tanımlanamadı. Tekrar deneyin.");
}
} while (true);
}
//public void ArabaSil(string plaka)
//{
// Araba a = null;
// foreach (Araba araba in Arabalar)
// {
// if (araba.Plaka == plaka)
// {
// a = araba;
// }
// }
// if (a != null)
// {
// if (a.Durum == DURUM.Kirada)
// {
// Console.WriteLine("Araba kirada olduğu için silme işlemi gerçekleştirilemedi.");
// }
// else if (a.Durum != DURUM.Kirada)
// {
// Arabalar.Remove(a);
// }
// }
//}
public void KiralamaIptal(string plaka) // =>>>> buraya süre bilgisi de eklemek gerekmez mi ? Ama süre bilgisini nereden bulacağız ?
{
Araba a = null;
foreach (Araba araba in Arabalar)
{
if (araba.Plaka == plaka)
{
a = araba;
}
}
if (a != null)
{
if (a.Durum == DURUM.Kirada)
{
a.Durum = DURUM.Galeride;
}
}
//public void KiralanmisArabalar()
//{
// foreach (Araba item in Arabalar)
// {
// if (item.Durum == DURUM.Kirada)
// {
// Console.WriteLine(item.Plaka + item.Marka.PadRight(12) + item.KiralamaBedeli.ToString().PadRight(14) + item.ArabaTipi.ToString().PadRight(16) + item.KiralamaSayisi.ToString().PadRight(16) + item.Durum.ToString().PadRight(8));
// }
// }
//}
//public string KiralanmisArabalar()
//{
// string arabaListesi = string.Empty;
// foreach (Araba item in Arabalar)
// {
// if (item.Durum == DURUM.Kirada)
// {
// arabaListesi += (item.Plaka + item.Marka.PadRight(12) + item.KiralamaBedeli.ToString().PadRight(14) + item.ArabaTipi.ToString().PadRight(16) + item.KiralamaSayisi.ToString().PadRight(16) + item.Durum.ToString().PadRight(8) + Environment.NewLine);
// }
// }
// return arabaListesi;
//}
//public void GaleridekiArabalar()
//{
// foreach (Araba item in Arabalar)
// {
// if (item.Durum == DURUM.Galeride)
// {
// Console.WriteLine(item.Plaka + item.Marka.PadRight(12) + item.KiralamaBedeli.ToString().PadRight(14) + item.ArabaTipi.ToString().PadRight(16) + item.KiralamaSayisi.ToString().PadRight(16) + item.Durum.ToString().PadRight(8));
// }
// }
//}
}
public string ArabalarListele(DURUM durum)
{
string arabaListesi = string.Empty;
foreach (Araba araba in Arabalar)
{
if ((araba.Durum & durum) != 0)
{
arabaListesi += (araba.Plaka.PadRight(12) + araba.Marka.PadRight(12) + araba.KiralamaBedeli.ToString().PadRight(14) + araba.ArabaTipi.ToString().PadRight(16) + araba.KiralamaSayisi.ToString().PadRight(16) + araba.Durum.ToString().PadRight(8) + Environment.NewLine);
}
}
return arabaListesi;
}
public int ToplamArabaKiralamaSayisi()
{
int toplam = 0;
foreach (Araba araba in Arabalar)
{
toplam += araba.KiralamaSayisi;
}
return toplam;
}
public int ToplamArabaKiralamaSuresi()
{
int toplamSure = 0;
foreach (Araba araba in Arabalar)
{
toplamSure += araba.ToplamKiralanmaSuresi;
}
return toplamSure;
}
/* public float Ciro // "return" doğru veriyi mi geri döndürüyor ? YANİ => Hesaplanan meblağ mı yoksa 0 mı döndürüyor ? Kontrol et!
{
get
{
float ciro = 0;
foreach (Araba araba in Arabalar)
{
if (araba.Durum == DURUM.Kirada)
{
ciro += araba.KiralamaBedeli*araba.KiralamaSayisi;
}
}
return ciro;
}
}*/
public float Ciro // "return" doğru veriyi mi geri döndürüyor ? YANİ => Hesaplanan meblağ mı yoksa 0 mı döndürüyor ? Kontrol et!
{
get
{
float ciro = 0;
foreach (Araba araba in Arabalar)
{
ciro += araba.KiralamaSayisi * araba.KiralamaBedeli;
//if (araba.Durum == DURUM.Kirada)
//{
// ciro += araba.KiralamaBedeli * araba.KiralamaSayisi;
//}
}
return ciro;
}
}
}
}