C# ile proje örneği önerisi

Garip Gamerr

Hectopat
Katılım
28 Haziran 2020
Mesajlar
224
Çözümler
1
Dönem projemiz bu ve örnek proje arıyoruz. Yardımcı olabilecek var mı?
 

Dosya Ekleri

  • Ekran Görüntüsü (31).png
    Ekran Görüntüsü (31).png
    204,5 KB · Görüntüleme: 70
  • Ekran Görüntüsü (32).png
    Ekran Görüntüsü (32).png
    179,6 KB · Görüntüleme: 62
  • Ekran Görüntüsü (33).png
    Ekran Görüntüsü (33).png
    195 KB · Görüntüleme: 64
Son düzenleyen: Moderatör:
Ornege ihtiyaciniz oldugunu dusunmuyorum. Daha basit bir sey veremezmis istesede.

Bilmen gereken yapilar bile oldukca basit. List<T>, Dictionary<TKey, TValue>, bir kac tane de proje icin kendi yazdigin sinif ile butun projeyi yaparsin.

Malzeme Ekle/Cikar dedigi basit liste operasyonlari. "Malzeme" diye bir sinif olusturmalisin ki nesneleri takip etmek kolay olsun.
Mesela;
C#:
class Malzeme {
    string adi;
    DateTime sonKullanmaTarihi;
    uint adet;
}

Su tarz seyleri kendi kendinize kesfedebiliyor olmaniz lazim ornege ihtiyac duymadan. Donem sonuna gelmissin, hocan anlatmis belli ki bu konseptleri.
 
Projede "tarif" taniminin nasil yapilacagi yazilmamis. Kafaniza gore siz mi tarif ekleyeceksiniz bu kisim net degil. Binlerce tarif eklenebilir, bunun da bir normu olmali. Odevdeki menemen tarifinde sogan yok, ben yazsaydim olurdu ve beklenen output'u vermezdi :)

Ayrica eklenen ayni isimdeki 2 malzeme farkli SKT ye sahip olabilir. Buna da dikkat etmelisiniz yaparken. Tuzakli input'lar girilecektir.

Zip'lemek yerine github a eklemenizi isteseydi hoca daha ogretici olurdu bence. Onun disinda @TheAny cok dogru soylemis, ornege ihtiyaciniz yok basit data structure ve input validasyonu yeterli yapmak icin.
 
Ornege ihtiyaciniz oldugunu dusunmuyorum. Daha basit bir sey veremezmis istesede.

Bilmen gereken yapilar bile oldukca basit. List<T>, Dictionary<TKey, TValue>, bir kac tane de proje icin kendi yazdigin sinif ile butun projeyi yaparsin.

Malzeme Ekle/Cikar dedigi basit liste operasyonlari. "Malzeme" diye bir sinif olusturmalisin ki nesneleri takip etmek kolay olsun.
Mesela;
C#:
class Malzeme {
    string adi;
    DateTime sonKullanmaTarihi;
    uint adet;
}

Su tarz seyleri kendi kendinize kesfedebiliyor olmaniz lazim ornege ihtiyac duymadan. Donem sonuna gelmissin, hocan anlatmis belli ki bu konseptleri.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char isimler[30]; // Malzeme isimleri
int sayaclar[50]; // Malzeme adetleri
int son_kullanma_tarihi[50]; // Son kullanma tarihleri
int malzeme_sayac ; // Malzeme sayısı

// Malzeme ekleme fonksiyonu
void malzeme_ekle() {
char isim; // Malzeme ismi
int sayac, sonkullanmatarihi;

printf("Malzeme Adi: ");
scanf(" %s", &isim); // Malzeme ismini al
printf("Adet: ");
scanf("%d", &sayac); // Adet bilgisini al
printf("Son Kullanma Tarihi: ");
scanf("%d", &sonkullanmatarihi);
int i; // Son kullanma tarihini al

// Daha önce eklenmiş bir malzeme varsa, adet bilgisini arttır
for ( i = 0; i < malzeme_sayac; i++) {
if (isimler == isim) {
sayaclar += sayac; // Adet arttırılır
if (son_kullanma_tarihi < sonkullanmatarihi) {
son_kullanma_tarihi = sonkullanmatarihi; // Son kullanma tarihi güncellenir
}
printf("Malzeme sayisi degistirildi.\n");
return;
}
}

// Yeni malzeme ekleme
isimler[malzeme_sayac] = isim; // Yeni malzeme ismini kaydederiz
sayaclar[malzeme_sayac] = sayac; // Adet eklenir
son_kullanma_tarihi[malzeme_sayac] = sonkullanmatarihi; // Son kullanma tarihi eklenir
malzeme_sayac++; // Malzeme sayacını arttırır
printf("Malzeme eklendi.\n");
}

// Malzeme çıkarma fonksiyonu
void malzeme_cikar() {
char isim; // Malzeme ismini tutacak değişken
int sayac;

printf("Cikarilacak Malzeme: ");
scanf(" %s", &isim); // Malzeme ismini al
printf("Cikarilacak Malzeme Sayisi: ");
scanf("%d", &sayac);
int i; // Çıkarılacak adet

for ( i = 0; i < malzeme_sayac; i++) {
if (isimler == isim) {
if (sayaclar >= sayac) {
sayaclar -= sayac; // Adet çıkarılır
printf("Malzeme sayisi degistirildi.\n");
int i,j;
if (sayaclar == 0) {
// Malzeme bitmişse, onu listeden çıkar
for ( j = i; j < malzeme_sayac - 1; j++) {
isimler[j] = isimler[j + 1]; // İsim kaydırılır
sayaclar[j] = sayaclar[j + 1]; // Adet kaydırılır
son_kullanma_tarihi[j] = son_kullanma_tarihi[j + 1]; // Son kullanma tarihi kaydırılır
}
malzeme_sayac--; // Malzeme sayacı azaltılır
}
} else {
printf("Malzeme yeterli degil.\n");
}
return;
}
}
printf("Malzeme bulunamadi.\n");
}

// Malzemeleri listeleme fonksiyonu
void malzemeleri_listele() {
int i;
for ( i = 0; i < malzeme_sayac; i++) {
printf("Malzeme İsmi: %s, Adedi: %d, Son Kullanma Tarihi: %d\n",
isimler, sayaclar, son_kullanma_tarihi);
}
}

int main() {
int sec;
do {
printf("MALZEME YONETIMI\n");
printf("1. Malzeme Ekle\n2. Malzeme Cikar\n3. Malzeme Listele\n4. Cikis\nSeciminizi yapiniz (1-4): ");
scanf("%d", &sec);

switch (sec) {
case 1:
malzeme_ekle();
break;
case 2:
malzeme_cikar();
break;
case 3:
malzemeleri_listele();
break;
case 4:
printf("Cikis\n");
break;
default:
printf("Gecersiz secim.\n");
}
} while (sec != 4);

return 0;
}


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char isimler[30]; // Malzeme isimleri
int sayaclar[50]; // Malzeme adetleri
int son_kullanma_tarihi[50]; // Son kullanma tarihleri
int malzeme_sayac ; // Malzeme sayısı

// Malzeme ekleme fonksiyonu
void malzeme_ekle() {
char isim; // Malzeme ismi
int sayac, sonkullanmatarihi;

printf("Malzeme Adi: ");
scanf(" %s", &isim); // Malzeme ismini al
printf("Adet: ");
scanf("%d", &sayac); // Adet bilgisini al
printf("Son Kullanma Tarihi: ");
scanf("%d", &sonkullanmatarihi);
int i; // Son kullanma tarihini al

// Daha önce eklenmiş bir malzeme varsa, adet bilgisini arttır
for ( i = 0; i < malzeme_sayac; i++) {
if (isimler == isim) {
sayaclar += sayac; // Adet arttırılır
if (son_kullanma_tarihi < sonkullanmatarihi) {
son_kullanma_tarihi = sonkullanmatarihi; // Son kullanma tarihi güncellenir
}
printf("Malzeme sayisi degistirildi.\n");
return;
}
}

// Yeni malzeme ekleme
isimler[malzeme_sayac] = isim; // Yeni malzeme ismini kaydederiz
sayaclar[malzeme_sayac] = sayac; // Adet eklenir
son_kullanma_tarihi[malzeme_sayac] = sonkullanmatarihi; // Son kullanma tarihi eklenir
malzeme_sayac++; // Malzeme sayacını arttırır
printf("Malzeme eklendi.\n");
}

// Malzeme çıkarma fonksiyonu
void malzeme_cikar() {
char isim; // Malzeme ismini tutacak değişken
int sayac;

printf("Cikarilacak Malzeme: ");
scanf(" %s", &isim); // Malzeme ismini al
printf("Cikarilacak Malzeme Sayisi: ");
scanf("%d", &sayac);
int i; // Çıkarılacak adet

for ( i = 0; i < malzeme_sayac; i++) {
if (isimler == isim) {
if (sayaclar >= sayac) {
sayaclar -= sayac; // Adet çıkarılır
printf("Malzeme sayisi degistirildi.\n");
int i,j;
if (sayaclar == 0) {
// Malzeme bitmişse, onu listeden çıkar
for ( j = i; j < malzeme_sayac - 1; j++) {
isimler[j] = isimler[j + 1]; // İsim kaydırılır
sayaclar[j] = sayaclar[j + 1]; // Adet kaydırılır
son_kullanma_tarihi[j] = son_kullanma_tarihi[j + 1]; // Son kullanma tarihi kaydırılır
}
malzeme_sayac--; // Malzeme sayacı azaltılır
}
} else {
printf("Malzeme yeterli degil.\n");
}
return;
}
}
printf("Malzeme bulunamadi.\n");
}

// Malzemeleri listeleme fonksiyonu
void malzemeleri_listele() {
int i;
for ( i = 0; i < malzeme_sayac; i++) {
printf("Malzeme İsmi: %s, Adedi: %d, Son Kullanma Tarihi: %d\n",
isimler, sayaclar, son_kullanma_tarihi);
}
}

int main() {
int sec;
do {
printf("MALZEME YONETIMI\n");
printf("1. Malzeme Ekle\n2. Malzeme Cikar\n3. Malzeme Listele\n4. Cikis\nSeciminizi yapiniz (1-4): ");
scanf("%d", &sec);

switch (sec) {
case 1:
malzeme_ekle();
break;
case 2:
malzeme_cikar();
break;
case 3:
malzemeleri_listele();
break;
case 4:
printf("Cikis\n");
break;
default:
printf("Gecersiz secim.\n");
}
} while (sec != 4);

return 0;
}
şöyle bir kod yazdık lakin malzeme ekledikten sonra malzeme görüntüle dediğinde atıyor ve sorunu çözemiyoruz
 
Bir tane hazırladım. Input validasyonu gibi şeyler yapmadım, kullanacaksanız onları eklersiniz zaten. Bir de İngilizce yaptım, onu da gerekliyse çevirirsiniz. ReSharper'da Product isimli kayıtlı objem olduğu için bu uygulamada TProduct yaptım tür ismini. Yanlış anlaşılmaya sebep olabilir o yüzden siz tekrar Product olarak düzeltebilirsiniz isterseniz.

C#:
using System.Security.Cryptography;

var productManager = new ProductManager();
productManager.AddProduct(new TProduct { Id = 1, Name = "Apple", Price = 10, Description = "Just an apple." });

var menu = new ConsoleMenu();
menu.AddCommand(new ClearCommand());
menu.AddCommand(new AddProductCommand(productManager));
menu.AddCommand(new ListProductsCommand(productManager));
menu.AddCommand(new RemoveProductCommand(productManager));
menu.AddCommand(new ExitCommand());


Console.WriteLine("Please enter command to continue.");
Console.WriteLine();
menu.ShowMenu();
Console.WriteLine();

while (true)
{
    var input = Console.ReadLine();
    menu.Run(input);
    Console.WriteLine();
}

interface IConsoleMenu
{
    void ShowMenu();
    void Run(string input);
    void AddCommand(IConsoleCommand command);
    void SetCommandList(List<IConsoleCommand> commands);
}

interface IConsoleCommand
{
    string Name { get; }
    string HelpText { get; }
    void Execute(params string[] parameters);
}

class ConsoleMenu : IConsoleMenu
{
    private List<IConsoleCommand> _commands = new List<IConsoleCommand>();
    public void ShowMenu()
    {
        foreach (var command in _commands)
        {
            Console.WriteLine($"[{command.Name}] {command.HelpText}");
        }
    }

    public void Run(string input)
    {
        var inputArgs = input.Split(' ');
        var commandName = inputArgs[0];
        var arguments = inputArgs.Skip(1).ToArray();
        var command = _commands.FirstOrDefault(x=>x.Name.ToLower() == commandName.ToLower());
        
        if (command == null)
        {
            Console.WriteLine("No such command found!");
            return;
        }
        
        command.Execute(arguments);
    }

    public void AddCommand(IConsoleCommand command)
    {
        _commands.Add(command);
    }

    public void SetCommandList(List<IConsoleCommand> commands)
    {
        _commands = commands;
    }
}

class TProduct
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public uint Price { get; set; }
}

class ProductManager
{
    public List<TProduct> Products { get; set; } = new List<TProduct>();

    public void AddProduct(TProduct product)
    {
        Products.Add(product);
    }

    public void DeleteProduct(TProduct product)
    {
        Products.Remove(product);
    }

    public IEnumerable<TProduct> GetProducts()
    {
        return Products;
    }

    public TProduct? GetProductById(int id)
    {
        return Products.FirstOrDefault(x => x.Id == id);
    }

    public void UpdateProduct(TProduct product)
    {
        var productOld = Products.FirstOrDefault(x => x.Id == product.Id);
        Products.Remove(productOld);
        Products.Add(product);
    }
}

class ListProductsCommand(ProductManager productManager) : IConsoleCommand
{
    public string Name { get; } = "list-products";
    public string HelpText { get; } = "Lists all products.";
    private readonly ProductManager _productManager = productManager;

    public void Execute(params string[] parameters)
    {
        foreach (var product in _productManager.GetProducts())
        {
            Console.WriteLine($"-> [Id: {product.Id}] {product.Name}, {product.Price}, {product.Description}");   
        }
    }
}

class AddProductCommand(ProductManager productManager) : IConsoleCommand
{
    public string Name { get; } = "add-product";
    public string HelpText { get; } = "Usage: add-product <name> <price> <description>";
    public void Execute(params string[] parameters)
    {
        var arguments = parameters;
        productManager.AddProduct(new TProduct { Id = RandomNumberGenerator.GetInt32(1,59124), Name = arguments[0], Price = Convert.ToUInt32(arguments[1]), Description = string.Join(" ", arguments.Skip(2)) });
        Console.WriteLine("Product added successfully!");
    }
}

class ClearCommand : IConsoleCommand
{
    public string Name { get; } = "clear";
    public string HelpText { get; } = "Clears the console.";
    public void Execute(params string[] parameters)
    {
        Console.Clear();
    }
}

class ExitCommand : IConsoleCommand
{
    public string Name { get; } = "exit";
    public string HelpText { get; } = "Exit the program.";
    public void Execute(params string[] parameters)
    {
        Console.WriteLine("Bye!");
        Environment.Exit(0);
    }
}

class RemoveProductCommand(ProductManager productManager) : IConsoleCommand
{
    public string Name { get; } = "remove-product";
    public string HelpText { get; } = "Usage : remove-product <id>";
    public void Execute(params string[] parameters)
    {
        try
        {
            var id = int.Parse(parameters[0]);
            var productToDelete = productManager.GetProductById(id);

            if (productToDelete == null)
            {
                Console.WriteLine("Product with specified id does not exist!");
                return;
            }
            
            productManager.DeleteProduct(productToDelete);
            Console.WriteLine("Product removed successfully!");
        }
        catch
        {
            Console.WriteLine("Failed!");
        }
        
    }
}
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char isimler[30]; // Malzeme isimleri
int sayaclar[50]; // Malzeme adetleri
int son_kullanma_tarihi[50]; // Son kullanma tarihleri
int malzeme_sayac ; // Malzeme sayısı

// Malzeme ekleme fonksiyonu
void malzeme_ekle() {
char isim; // Malzeme ismi
int sayac, sonkullanmatarihi;

printf("Malzeme Adi: ");
scanf(" %s", &isim); // Malzeme ismini al
printf("Adet: ");
scanf("%d", &sayac); // Adet bilgisini al
printf("Son Kullanma Tarihi: ");
scanf("%d", &sonkullanmatarihi);
int i; // Son kullanma tarihini al

// Daha önce eklenmiş bir malzeme varsa, adet bilgisini arttır
for ( i = 0; i < malzeme_sayac; i++) {
if (isimler == isim) {
sayaclar += sayac; // Adet arttırılır
if (son_kullanma_tarihi < sonkullanmatarihi) {
son_kullanma_tarihi = sonkullanmatarihi; // Son kullanma tarihi güncellenir
}
printf("Malzeme sayisi degistirildi.\n");
return;
}
}

// Yeni malzeme ekleme
isimler[malzeme_sayac] = isim; // Yeni malzeme ismini kaydederiz
sayaclar[malzeme_sayac] = sayac; // Adet eklenir
son_kullanma_tarihi[malzeme_sayac] = sonkullanmatarihi; // Son kullanma tarihi eklenir
malzeme_sayac++; // Malzeme sayacını arttırır
printf("Malzeme eklendi.\n");
}

// Malzeme çıkarma fonksiyonu
void malzeme_cikar() {
char isim; // Malzeme ismini tutacak değişken
int sayac;

printf("Cikarilacak Malzeme: ");
scanf(" %s", &isim); // Malzeme ismini al
printf("Cikarilacak Malzeme Sayisi: ");
scanf("%d", &sayac);
int i; // Çıkarılacak adet

for ( i = 0; i < malzeme_sayac; i++) {
if (isimler == isim) {
if (sayaclar >= sayac) {
sayaclar -= sayac; // Adet çıkarılır
printf("Malzeme sayisi degistirildi.\n");
int i,j;
if (sayaclar == 0) {
// Malzeme bitmişse, onu listeden çıkar
for ( j = i; j < malzeme_sayac - 1; j++) {
isimler[j] = isimler[j + 1]; // İsim kaydırılır
sayaclar[j] = sayaclar[j + 1]; // Adet kaydırılır
son_kullanma_tarihi[j] = son_kullanma_tarihi[j + 1]; // Son kullanma tarihi kaydırılır
}
malzeme_sayac--; // Malzeme sayacı azaltılır
}
} else {
printf("Malzeme yeterli degil.\n");
}
return;
}
}
printf("Malzeme bulunamadi.\n");
}

// Malzemeleri listeleme fonksiyonu
void malzemeleri_listele() {
int i;
for ( i = 0; i < malzeme_sayac; i++) {
printf("Malzeme İsmi: %s, Adedi: %d, Son Kullanma Tarihi: %d\n",
isimler, sayaclar, son_kullanma_tarihi);
}
}

int main() {
int sec;
do {
printf("MALZEME YONETIMI\n");
printf("1. Malzeme Ekle\n2. Malzeme Cikar\n3. Malzeme Listele\n4. Cikis\nSeciminizi yapiniz (1-4): ");
scanf("%d", &sec);

switch (sec) {
case 1:
malzeme_ekle();
break;
case 2:
malzeme_cikar();
break;
case 3:
malzemeleri_listele();
break;
case 4:
printf("Cikis\n");
break;
default:
printf("Gecersiz secim.\n");
}
} while (sec != 4);

return 0;
}



şöyle bir kod yazdık lakin malzeme ekledikten sonra malzeme görüntüle dediğinde atıyor ve sorunu çözemiyoruz
Kod paylasmak icin ozel bir tus var bak. Onu kullanarak paylas. Bu sekilde attiginda ortaya cikan problemlerden dolayi hem kodu okuyamiyorum, hem kopyala yapistir yapamiyorum. Ugrasmam gerekiyor ekstra. Sosyal'de nasıl kod paylaşılır?
 
Neden VS Code yasak onu sorgulamayacağım bile. Bahsettiğimiz tuş Technopat'ın özelliği. Onu kullanarak kodu atmanızı istedik. Ayrıca bu C# değil C++. Konuda olması gerektigi gibi olan herhangi bir şey yok.
 
Kod:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char isimler[30];                // Malzeme isimleri
int sayaclar[50];                // Malzeme adetleri
int son_kullanma_tarihi[50];     // Son kullanma tarihleri
int malzeme_sayac ;           // Malzeme sayısı

// Malzeme ekleme fonksiyonu
void malzeme_ekle() {
    char isim;                    // Malzeme ismi
    int sayac, sonkullanmatarihi;

    printf("Malzeme Adi: ");
    scanf(" %s", &isim);  // Malzeme ismini al
    printf("Adet: ");
    scanf("%d", &sayac);  // Adet bilgisini al
    printf("Son Kullanma Tarihi: ");
    scanf("%d", &sonkullanmatarihi);
    int i; // Son kullanma tarihini al

    // Daha önce eklenmiş bir malzeme varsa, adet bilgisini arttır
    for ( i = 0; i < malzeme_sayac; i++) {
        if (isimler[i] == isim) {
            sayaclar[i] += sayac;  // Adet arttırılır
            if (son_kullanma_tarihi[i] < sonkullanmatarihi) {
                son_kullanma_tarihi[i] = sonkullanmatarihi;  // Son kullanma tarihi güncellenir
            }
            printf("Malzeme sayisi degistirildi.\n");
            return;
        }
    }

    // Yeni malzeme ekleme
    isimler[malzeme_sayac] = isim;  // Yeni malzeme ismini kaydederiz
    sayaclar[malzeme_sayac] = sayac;  // Adet eklenir
    son_kullanma_tarihi[malzeme_sayac] = sonkullanmatarihi;  // Son kullanma tarihi eklenir
    malzeme_sayac++;  // Malzeme sayacını arttırır
    printf("Malzeme eklendi.\n");
}

// Malzeme çıkarma fonksiyonu
void malzeme_cikar() {
    char isim;  // Malzeme ismini tutacak değişken
    int sayac;

    printf("Cikarilacak Malzeme: ");
    scanf(" %s", &isim);  // Malzeme ismini al
    printf("Cikarilacak Malzeme Sayisi: ");
    scanf("%d", &sayac);
    int i;  // Çıkarılacak adet

    for ( i = 0; i < malzeme_sayac; i++) {
        if (isimler[i] == isim) {
            if (sayaclar[i] >= sayac) {
                sayaclar[i] -= sayac;  // Adet çıkarılır
                printf("Malzeme sayisi degistirildi.\n");
                int i,j;
                if (sayaclar[i] == 0) {
                    // Malzeme bitmişse, onu listeden çıkar
                    for ( j = i; j < malzeme_sayac - 1; j++) {
                        isimler[j] = isimler[j + 1];  // İsim kaydırılır
                        sayaclar[j] = sayaclar[j + 1];  // Adet kaydırılır
                        son_kullanma_tarihi[j] = son_kullanma_tarihi[j + 1];  // Son kullanma tarihi kaydırılır
                    }
                    malzeme_sayac--;  // Malzeme sayacı azaltılır
                }
            } else {
                printf("Malzeme yeterli degil.\n");
            }
            return;
        }
    }
    printf("Malzeme bulunamadi.\n");
}

// Malzemeleri listeleme fonksiyonu
void malzemeleri_listele() {
    int i;
    for ( i = 0; i < malzeme_sayac; i++) {
        printf("Malzeme İsmi: %s, Adedi: %d, Son Kullanma Tarihi: %d\n",
               isimler[i], sayaclar[i], son_kullanma_tarihi[i]);
    }
}

int main() {
    int sec;
    do {
        printf("*MALZEME YONETIMI*\n");
        printf("1. Malzeme Ekle\n2. Malzeme Cikar\n3. Malzeme Listele\n4. Cikis\nSeciminizi yapiniz (1-4): ");
        scanf("%d", &sec);

        switch (sec) {
            case 1:
                malzeme_ekle();
                break;
            case 2:
                malzeme_cikar();
                break;
            case 3:
                malzemeleri_listele();
                break;
            case 4:
                printf("Cikis\n");
                break;
            default:
                printf("Gecersiz secim.\n");
        }
    } while (sec != 4);

    return 0;
}
 

Technopat Haberler

Yeni konular

Geri
Yukarı