#nullable enable.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
class GelistirilmisMessenger
{
// Kullanıcı Sınıfı.
class Kullanici.
{
public required string KullaniciAdi { get; set; }
public required string Sifre { get; set; }
public required string Email { get; set; }
public DateTime KayitTarihi { get; set; }
public List<Mesaj> GelenKutusu { get; set; } = new List<Mesaj>();
public List<Mesaj> GidenKutusu { get; set; } = new List<Mesaj>();
public List<string> Arkadas { get; set; } = new List<string>();
public Dictionary<string, string> OzelNotlar { get; set; } = new Dictionary<string, string>();
public Kullanici()
{
KullaniciAdi = string.Empty;
Sifre = string.Empty;
Email = string.Empty;
}
}
// Mesaj Sınıfı.
class Mesaj.
{
public required string Gonderen { get; set; }
public required string Alici { get; set; }
public required string Icerik { get; set; }
public DateTime Zaman { get; set; }
public bool Okundu { get; set; } = false;
public bool Gizli { get; set; } = false;
public string DosyaEki { get; set; } = string.Empty;
public Mesaj()
{
Gonderen = string.Empty;
Alici = string.Empty;
Icerik = string.Empty;
}
}
// Messenger Sistemi.
class MessengerSistemi.
{
private List<Kullanici> kullanicilar = new List<Kullanici>();
private Kullanici? aktifKullanici;
private const string KULLANICI_DOSYASI = "kullanicilar.txt";
public MessengerSistemi()
{
try.
{
KullanicilariYukle();
}
catch (Exception ex)
{
HataGoster($"Kullanıcıları yüklerken hata: {ex.Message}");
}
}
private void HataGoster(string mesaj)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"HATA: {mesaj}");
Console.ResetColor();
Thread.Sleep(2000);
}
private void KullanicilariYukle()
{
if (File.Exists(KULLANICI_DOSYASI))
{
var satirlar = File.ReadAllLines(KULLANICI_DOSYASI);
foreach (var satir in satirlar)
{
try.
{
var bilgiler = satir.Split('|');
if (bilgiler.Length >= 4)
{
kullanicilar.Add(new Kullanici.
{
KullaniciAdi = bilgiler[0],
Sifre = bilgiler[1],
Email = bilgiler[2],
KayitTarihi = DateTime.Parse(bilgiler[3])
});
}
}
catch (Exception ex)
{
HataGoster($"Kullanıcı yüklenirken hata: {ex.Message}");
}
}
}
}
public void Baslat()
{
while (true)
{
Console.Clear();
Console.WriteLine("--- Gelişmiş Messenger Uygulaması ---");
Console.WriteLine("1. Giriş Yap");
Console.WriteLine("2. Yeni Kullanıcı Kaydet");
Console.WriteLine("3. Çıkış");
Console.Write("Seçiminizi yapın: ");
string? secim = Console.ReadLine();
switch (secim)
{
case "1":
GirisYap();
break;
case "2":
YeniKullaniciKaydet();
break;
case "3":
return;
}
}
}
private void GirisYap()
{
if (kullanicilar.Count == 0)
{
Console.WriteLine("Henüz kayıtlı kullanıcı yok!");
Thread.Sleep(1500);
return;
}
Console.Clear();
Console.WriteLine("--- Kullanıcı Seçimi ---");
Console.WriteLine("Ok tuşları ile seçim yapın, ENTER ile onaylayın");
int seciliIndex = 0;
while (true)
{
Console.Clear();
Console.WriteLine("--- Kullanıcı Seçimi ---");
Console.WriteLine("Ok tuşları ile seçim yapın, ENTER ile onaylayın\n");
// Kullanıcıları listele.
for (int i = 0; i < kullanicilar.Count; i++)
{
if (i == seciliIndex)
{
Console.BackgroundColor = ConsoleColor.Gray;
Console.ForegroundColor = ConsoleColor.Black;
}
Console.WriteLine($"{kullanicilar[i].KullaniciAdi}");
Console.ResetColor();
}
// Tuş girişi.
var tus = Console.ReadKey(true);
switch (tus.Key)
{
case ConsoleKey.DownArrow:
seciliIndex = (seciliIndex + 1) % kullanicilar.Count;
break;
case ConsoleKey.UpArrow:
seciliIndex = (seciliIndex - 1 + kullanicilar.Count) % kullanicilar.Count;
break;
case ConsoleKey.Enter:
// Şifre girişi.
Console.Write("\nŞifre: ");
string? sifre = Console.ReadLine();
if (sifre == kullanicilar[seciliIndex].Sifre)
{
aktifKullanici = kullanicilar[seciliIndex];
// Yeni mesaj bildirimi.
int yeniMesajSayisi = aktifKullanici.GelenKutusu.Count(m => !m.Okundu);
Console.Clear();
Console.WriteLine($"Merhaba {aktifKullanici.KullaniciAdi}!");
Console.WriteLine($"Toplam {yeniMesajSayisi} yeni mesajınız var.");
Console.WriteLine("\nDevam etmek için bir tuşa basın...");
Console.ReadKey();
AnaMenu();
return;
}
else.
{
Console.WriteLine("Hatalı şifre!");
Thread.Sleep(1500);
}
break;
case ConsoleKey.Escape:
return;
}
}
}
private void YeniKullaniciKaydet()
{
Console.Clear();
Console.WriteLine("--- Yeni Kullanıcı Kaydı ---");
Console.Write("Kullanıcı Adı (min 3 karakter): ");
string? yeniKullaniciAdi = Console.ReadLine();
// Gelişmiş Kullanıcı Adı Kontrolü.
if (string.IsNullOrWhiteSpace(yeniKullaniciAdi) || yeniKullaniciAdi.Length < 3)
{
Console.WriteLine("Kullanıcı adı çok kısa!");
Thread.Sleep(1500);
return;
}
if (kullanicilar.Any(k => k.KullaniciAdi == yeniKullaniciAdi))
{
Console.WriteLine("Bu kullanıcı adı zaten alınmış!");
Thread.Sleep(1500);
return;
}
Console.Write("Şifre (min 6 karakter, harf ve rakam içermeli): ");
string? yeniSifre = Console.ReadLine();
// Gelişmiş Şifre Kontrolü.
if (string.IsNullOrWhiteSpace(yeniSifre) ||
yeniSifre.Length < 6 ||
!yeniSifre.Any(char.IsLetter) ||
!yeniSifre.Any(char.IsDigit))
{
Console.WriteLine("Şifre güvenlik kriterlerini karşılamıyor!");
Thread.Sleep(1500);
return;
}
Console.Write("Email: ");
string? yeniEmail = Console.ReadLine();
Kullanici yeniKullanici = new Kullanici.
{
KullaniciAdi = yeniKullaniciAdi,
Sifre = yeniSifre,
Email = yeniEmail ?? string.Empty,
KayitTarihi = DateTime.Now
};
kullanicilar.Add(yeniKullanici);
Console.WriteLine("Kullanıcı başarıyla kaydedildi!");
Thread.Sleep(1500);
}
private void AnaMenu()
{
if (aktifKullanici == null) return;
while (true)
{
Console.Clear();
Console.WriteLine($"Hoş geldin, {aktifKullanici.KullaniciAdi}!");
Console.WriteLine("1. Yeni Mesaj Gönder");
Console.WriteLine("2. Gelen Kutusu");
Console.WriteLine("3. Giden Kutusu");
Console.WriteLine("4. Arkadaş Yönetimi");
Console.WriteLine("5. Profil Ayarları");
Console.WriteLine("6. Dosya Paylaşımı");
Console.WriteLine("7. Özel Notlar");
Console.WriteLine("8. Çıkış Yap");
Console.Write("Seçiminizi yapın: ");
string? secim = Console.ReadLine();
switch (secim)
{
case "1":
YeniMesajGonder();
break;
case "2":
GelenKutusuGoster();
break;
case "3":
GidenKutusuGoster();
break;
case "4":
ArkadasyoNetimi();
break;
case "5":
ProfilAyarlari();
break;
case "6":
DosyaPaylasimiYap();
break;
case "7":
OzelNotlarYonetimi();
break;
case "8":
return;
}
}
}
private void ArkadasyoNetimi()
{
if (aktifKullanici == null) return;
Console.Clear();
Console.WriteLine("--- Arkadaş Yönetimi ---");
Console.WriteLine("1. Arkadaş Ekle");
Console.WriteLine("2. Arkadaş Listesi");
Console.WriteLine("3. Geri Dön");
Console.Write("Seçiminizi yapın: ");
string? secim = Console.ReadLine();
switch (secim)
{
case "1":
Console.Write("Eklemek istediğiniz kullanıcı adı: ");
string? eklenecekArkadas = Console.ReadLine();
var arkadas = kullanicilar.FirstOrDefault(k => k.KullaniciAdi == eklenecekArkadas);
if (arkadas != null && !aktifKullanici.Arkadas.Contains(eklenecekArkadas))
{
aktifKullanici.Arkadas.Add(eklenecekArkadas);
Console.WriteLine("Arkadaş eklendi!");
}
else.
{
Console.WriteLine("Kullanıcı bulunamadı veya zaten arkadaşınız!");
}
Thread.Sleep(1500);
break;
case "2":
Console.WriteLine("Arkadaş Listesi:");
foreach (var ark in aktifKullanici.Arkadas)
{
Console.WriteLine(ark);
}
Console.ReadKey();
break;
}
}
private void ProfilAyarlari()
{
if (aktifKullanici == null) return;
Console.Clear();
Console.WriteLine("--- Profil Ayarları ---");
Console.WriteLine($"Kullanıcı Adı: {aktifKullanici.KullaniciAdi}");
Console.WriteLine($"Email: {aktifKullanici.Email}");
Console.WriteLine($"Kayıt Tarihi: {aktifKullanici.KayitTarihi}");
Console.WriteLine("\n1. Şifre Değiştir");
Console.WriteLine("2. Email Değiştir");
Console.WriteLine("3. Geri Dön");
Console.Write("Seçiminizi yapın: ");
string? secim = Console.ReadLine();
switch (secim)
{
case "1":
SifreDegistir();
break;
case "2":
EmailDegistir();
break;
}
}
private void SifreDegistir()
{
if (aktifKullanici == null) return;
Console.Write("Mevcut Şifrenizi Girin: ");
string? mevcutSifre = Console.ReadLine();
if (mevcutSifre == aktifKullanici.Sifre)
{
Console.Write("Yeni Şifre: ");
string? yeniSifre = Console.ReadLine();
Console.Write("Yeni Şifreyi Tekrar Girin: ");
string? yeniSifreTekrar = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(yeniSifre) &&
yeniSifre == yeniSifreTekrar &&
yeniSifre.Length >= 6)
{
aktifKullanici.Sifre = yeniSifre;
Console.WriteLine("Şifre başarıyla değiştirildi!");
}
else.
{
Console.WriteLine("Şifre değiştirme başarısız!");
}
}
else.
{
Console.WriteLine("Mevcut şifre yanlış!");
}
Thread.Sleep(1500);
}
private void EmailDegistir()
{
if (aktifKullanici == null) return;
Console.Write("Yeni Email: ");
string? yeniEmail = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(yeniEmail))
{
aktifKullanici.Email = yeniEmail;
Console.WriteLine("Email başarıyla değiştirildi!");
}
else.
{
Console.WriteLine("Geçersiz email!");
}
Thread.Sleep(1500);
}
private void YeniMesajGonder()
{
if (aktifKullanici == null) return;
Console.Clear();
Console.Write("Alıcı Kullanıcı Adı: ");
string? alici = Console.ReadLine();
var aliciKullanici = kullanicilar.FirstOrDefault(k => k.KullaniciAdi == alici);
if (aliciKullanici != null)
{
Console.Write("Mesaj İçeriği: ");
string? icerik = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(icerik))
{
var mesaj = new Mesaj.
{
Gonderen = aktifKullanici.KullaniciAdi,
Alici = alici,
Icerik = icerik,
Zaman = DateTime.Now
};
aktifKullanici.GidenKutusu.Add(mesaj);
aliciKullanici.GelenKutusu.Add(mesaj);
Console.WriteLine("Mesaj gönderildi!");
}
else.
{
Console.WriteLine("Mesaj içeriği boş olamaz!");
}
}
else.
{
Console.WriteLine("Kullanıcı bulunamadı!");
}
Thread.Sleep(1500);
}
private void GelenKutusuGoster()
{
if (aktifKullanici == null) return;
Console.Clear();
Console.WriteLine("--- Gelen Kutusu ---");
if (aktifKullanici.GelenKutusu.Count == 0)
{
Console.WriteLine("Gelen kutunuz boş.");
}
else.
{
for (int i = 0; i < aktifKullanici.GelenKutusu.Count; i++)
{
var mesaj = aktifKullanici.GelenKutusu[i];
Console.WriteLine($"{i + 1}. Gönderen: {mesaj.Gonderen}");
Console.WriteLine($" Tarih: {mesaj.Zaman}");
Console.WriteLine($" Mesaj: {mesaj.Icerik}");
mesaj.Okundu = true;
Console.WriteLine("-------------------");
}
}
Console.WriteLine("Devam etmek için bir tuşa basın...");
Console.ReadKey();
}
private void GidenKutusuGoster()
{
if (aktifKullanici == null) return;
Console.Clear();
Console.WriteLine("--- Giden Kutusu ---");
if (aktifKullanici.GidenKutusu.Count == 0)
{
Console.WriteLine("Giden kutunuz boş.");
}
else.
{
for (int i = 0; i < aktifKullanici.GidenKutusu.Count; i++)
{
var mesaj = aktifKullanici.GidenKutusu[i];
Console.WriteLine($"{i + 1}. Alıcı: {mesaj.Alici}");
Console.WriteLine($" Tarih: {mesaj.Zaman}");
Console.WriteLine($" Mesaj: {mesaj.Icerik}");
Console.WriteLine("-------------------");
}
}
Console.WriteLine("Devam etmek için bir tuşa basın...");
Console.ReadKey();
}
private void DosyaPaylasimiYap()
{
if (aktifKullanici == null) return;
Console.Clear();
Console.WriteLine("--- Dosya Paylaşımı ---");
Console.Write("Göndereceğiniz kullanıcı adı: ");
string? alici = Console.ReadLine();
var aliciKullanici = kullanicilar.FirstOrDefault(k => k.KullaniciAdi == alici);
if (aliciKullanici != null)
{
Console.Write("Dosya yolu: ");
string? dosyaYolu = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(dosyaYolu) && File.Exists(dosyaYolu))
{
var mesaj = new Mesaj.
{
Gonderen = aktifKullanici.KullaniciAdi,
Alici = alici,
Icerik = "Dosya Paylaşımı",
Zaman = DateTime.Now,
DosyaEki = dosyaYolu.
};
aktifKullanici.GidenKutusu.Add(mesaj);
aliciKullanici.GelenKutusu.Add(mesaj);
Console.WriteLine("Dosya paylaşıldı!");
}
else.
{
Console.WriteLine("Dosya bulunamadı!");
}
}
else.
{
Console.WriteLine("Kullanıcı bulunamadı!");
}
Thread.Sleep(1500);
}
private void OzelNotlarYonetimi()
{
if (aktifKullanici == null) return;
Console.Clear();
Console.WriteLine("--- Özel Notlar ---");
Console.WriteLine("1. Not Ekle");
Console.WriteLine("2. Notları Görüntüle");
Console.WriteLine("3. Not Sil");
Console.Write("Seçiminizi yapın: ");
string? secim = Console.ReadLine();
switch (secim)
{
case "1":
Console.Write("Not Başlığı: ");
string? baslik = Console.ReadLine();
Console.Write("Not İçeriği: ");
string? icerik = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(baslik) && !string.IsNullOrWhiteSpace(icerik))
{
aktifKullanici.OzelNotlar[baslik] = icerik;
Console.WriteLine("Not kaydedildi!");
}
else.
{
Console.WriteLine("Başlık veya içerik boş olamaz!");
}
break;
case "2":
Console.WriteLine("Notlarınız:");
foreach (var not in aktifKullanici.OzelNotlar)
{
Console.WriteLine($"{not.Key}: {not.Value}");
}
Console.ReadKey();
break;
case "3":
Console.Write("Silmek istediğiniz not başlığı: ");
string? silinecekBaslik = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(silinecekBaslik) &&
aktifKullanici.OzelNotlar.Remove(silinecekBaslik))
{
Console.WriteLine("Not silindi!");
}
else.
{
Console.WriteLine("Not bulunamadı!");
}
break;
}
Thread.Sleep(1500);
}
static void Main(string[] args)
{
try.
{
Console.OutputEncoding = Encoding.UTF8;
var messenger = new MessengerSistemi();
messenger.Baslat();
}
catch (Exception ex)
{
Console.WriteLine($"Kritik hata: {ex.Message}");
}
}
}
}