1

Тема: C# задача

Зробити довідник автомобілів підприємства. В кожного автомобіля є марка, тип, колір та номерний знак. Врахувати що можуть бути абсолютно ідентичні автомобілі з різними номерними знаками. Уникнути дублювання даних. Зробити можливість додавати та видаляти як автомобілі так і їх моделі.
Ще треба зробити підключення до БД використовуючи entity framework. Так як в мене mac os, даний фреймворк використовувати стає складніше і без "танців з бубнами" нічого не вийде реалізувати. Можливо хтось стикався з подібним кейсом, підкажіть будь-ласка, як його налаштувати на mac os.
Підключення ms sql server налаштував з допомогою docker та azure data studio.
Залишається налаштувати entity framework
Є код.
Але є проблема в тому, що цей код потрібно переробити під даний кейс і він написаний на низькому рівні. Треба використати ООП. Що потрібно підправити, переробити щоб він відповідав завданню?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Авто
{
    class Program
    {
        //simple list of models
        static public List<string> Model = new List<string>();
        //structure for the car
        public struct Car
        {
            public string Number;//number off car
            public string Model;//model
            public string Color;//color
        }
        static public List<Car> Cars = new List<Car>();//list off cars
        //add new model
        static void AddModel()
        {
            string m;
            Console.Write("new model: ");
            m = Console.ReadLine().Trim().ToUpper();//removes if there are side spaces and uppercase
            foreach(string md in Model)//enumeration of existing models
                if (md == m)//this model already exists 
                {
                    Console.WriteLine("this model is already exists!");
                    return;
                }
            Model.Add(m);
        }
        //
        static void ShowModel()
        {
            if (Model.Count > 0)
                for (int i = 0; i < Model.Count; i++)//output models
                    Console.WriteLine("{0,2}) - {1}", i + 1, Model[i]);
            else Console.WriteLine("Model list is empty!\n\n");
        }
        //delete model?
        static void DelModel()
        {
            if (Model.Count > 0)//if we have some model
            {
                int i;
                Console.Write("delete model(1-{0}): ", Model.Count);
               
                int.TryParse(Console.ReadLine(), out i);
                if (i > 0 && i <= Model.Count)
                {
                    foreach(Car cr in Cars)
                        if (cr.Model == Model[i - 1])//suddenly there are cars of this model
                        {
                            Console.WriteLine("there are cars of this model!");
                            return;
                        }
                    Console.WriteLine("model {0} is deleted", Model[i - 1]);
                    Model.RemoveAt(i - 1);//deleted
                }
                else Console.WriteLine("no such model!");

            }
            else Console.WriteLine("the list off models is empty!\n\n");
        }
        //
        static void AddCar()
        {
            if (Model.Count > 0)//if there are models 
            {
                Console.Write("model(1-{0}): ", Model.Count);
                int i;
                int.TryParse(Console.ReadLine(), out i);
                if (i < 1 || i > Model.Count)
                {
                    Console.WriteLine("invalid model index!");
                    return;
                }
                Car cr;
                cr.Model = Model[i - 1];
                Console.Write("number: ");
                cr.Number = Console.ReadLine().Trim().ToUpper();//removes if there are side spaces and uppercase
                foreach(Car car in Cars)//we sort out cars
                    if (cr.Number == car.Number)//numbers matched
                    {
                        Console.WriteLine("A car with the same number already exists!");
                        return;
                    }
                Console.Write("Цвет: ");
                cr.Color = Console.ReadLine().Trim();
                Cars.Add(cr);//added new car
            }
            else Console.WriteLine("There are no car models!");
        }
        //показывает машины
        static void ShowCar()
        {
            if (Cars.Count > 0)//if there are cars
                for (int i = 0; i < Cars.Count; i++)//showed all cars
                    Console.WriteLine("{0,2}) - №:{1} model:{2} color:{3}", i + 1, Cars[i].Number, Cars[i].Model, Cars[i].Color);
            else Console.WriteLine("the list off cars is empty!\n\n");
        }
        //delete car
        static void DelCar()
        {
            if (Cars.Count > 0)//if there are some cars
            {
                int i;
                Console.Write("delete this car (1-{0}): ", Cars.Count);
                int.TryParse(Console.ReadLine(), out i);
                if (i > 0 && i <= Cars.Count)//delete this car
                {
                    Console.WriteLine("this car {0} {1} {2} deleted",
                        Cars[i - 1].Number, Cars[i - 1].Model, Cars[i - 1].Color);
                    Cars.RemoveAt(i - 1);
                }
                else Console.WriteLine("no such car!");

            }
            else Console.WriteLine("!\n\n");
        }
        //
        static void Main(string[] args)
        {
            Menu();
            ConsoleKey ck;
            do
            {
                ck = Console.ReadKey(true).Key;//if keydown
                switch (ck)
                {
                    //ConsoleKey.D1:     keydown off key 1 
                   
                    case ConsoleKey.D1:
                    case ConsoleKey.NumPad1: AddModel();
                        break;
                    case ConsoleKey.D2:
                    case ConsoleKey.NumPad2: ShowModel();
                        break;
                    case ConsoleKey.D3:
                    case ConsoleKey.NumPad3: DelModel();
                        break;
                    case ConsoleKey.D4:
                    case ConsoleKey.NumPad4: AddCar();
                        break;
                    case ConsoleKey.D5:
                    case ConsoleKey.NumPad5: ShowCar();
                        break;
                    case ConsoleKey.D6:
                    case ConsoleKey.NumPad6: DelCar();
                        break;
                    case ConsoleKey.D0:
                    case ConsoleKey.NumPad0: Menu();
                        break;
                }
            } while (ck != ConsoleKey.Escape);//while esc not pressed 
        }
        //
        static void Menu()
        {
            Console.Clear();
            Console.WriteLine(" 1  new model");
            Console.WriteLine(" 2  watch all models");
            Console.WriteLine(" 3  delete model");
            Console.WriteLine(" 4  new car");
            Console.WriteLine(" 5  watch all cars");
            Console.WriteLine(" 6  delete car");
            Console.WriteLine(" 0  clear screen");
            Console.WriteLine("Esc  exit");
        }
    }
}

2

Re: C# задача

Треба використати ООП. Що потрібно підправити, переробити щоб він відповідав завданню?

Створити кляси під кожну логічну сутність жеж - в цьому і полягає ООП підхід. якщо ви не розумієте що таке ООП, то читайте талмуди.

3

Re: C# задача

ось код
Підкажіть будь-ласка, які тут є помилки
файл car

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Авто
{
    class Car
    {
        public string Number;//number off car
        string Model;//model
        string Color;//color

        public Car(List<Car> Cars)
        {
            if (Models.Count > 0)//if there are models 
            {
                Console.Write("model(1-{0}): ", Car.Models.Count);
                int i;
                int.TryParse(Console.ReadLine(), out i);
                if (i < 1 || i > Models.Count)
                {
                    Console.WriteLine("invalid model index!");
                    Number = "";
                    return;
                }
                Model = Models[i - 1];
                Console.Write("number: ");
                Number = Console.ReadLine().Trim().ToUpper();//removes if there are side spaces and uppercase
                foreach (Car car in Cars)//we sort out cars
                    if (Number == car.Number)//numbers matched
                    {
                        Console.WriteLine("A car with the same number already exists!");
                        Number = "";
                        return;
                    }
                Console.Write("Цвет: ");
                Color = Console.ReadLine().Trim();
            }
            else
            {
                Console.WriteLine("There are no car models!");
                Number = "";
            }
        }
        //
        public bool IsNull()
        {
            return Number == "";
        }
        //
        public string Show()
        {
            return String.Format("№:{0} model:{1} color:{2}", Number, Model, Color);
        }
        //
        static public void AddCar(List<Car> Cars)
        {
            Car cr = new Car(Cars);
            if (!cr.IsNull()) Cars.Add(cr);
        }
        //
        //показывает машины
        static public void ShowCars(List<Car> Cars)
        {
            if (Cars.Count > 0)//if there are cars
                for (int i = 0; i < Cars.Count; i++)//showed all cars
                    Console.WriteLine("{0,2}) - {1}", i + 1, Cars[i].Show());
            else Console.WriteLine("the list off cars is empty!\n\n");
        }
        //
        //delete car
        static public void DelCar(List<Car> Cars)
        {
            if (Cars.Count > 0)//if there are some cars
            {
                int i;
                Console.Write("delete this car (1-{0}): ", Cars.Count);
                int.TryParse(Console.ReadLine(), out i);
                if (i > 0 && i <= Cars.Count)//delete this car
                {
                    Console.WriteLine("this car {0} deleted", Cars[i - 1].Show());
                    Cars.RemoveAt(i - 1);
                }
                else Console.WriteLine("no such car!");

            }
            else Console.WriteLine("!\n\n");
        }

        //simple list of models
        static public List<string> Models = new List<string>();
        //add new model
        static public void AddModel()
        {
            string m;
            Console.Write("new model: ");
            m = Console.ReadLine().Trim().ToUpper();//removes if there are side spaces and uppercase
            foreach (string md in Models)//enumeration of existing models
                if (md == m)//this model already exists 
                {
                    Console.WriteLine("this model is already exists!");
                    return;
                }
            Models.Add(m);
        }
        //
        static public void ShowModel()
        {
            if (Models.Count > 0)
                for (int i = 0; i < Models.Count; i++)//output models
                    Console.WriteLine("{0,2}) - {1}", i + 1, Models[i]);
            else Console.WriteLine("Model list is empty!\n\n");
        }
        //delete model?
        static public void DelModel(List<Car> Cars)
        {
            if (Models.Count > 0)//if we have some model
            {
                int i;
                Console.Write("delete model(1-{0}): ", Models.Count);

                int.TryParse(Console.ReadLine(), out i);
                if (i > 0 && i <= Models.Count)
                {
                    foreach (Car cr in Cars)
                        if (cr.Model == Models[i - 1])//suddenly there are cars of this model
                        {
                            Console.WriteLine("there are cars of this model!");
                            return;
                        }
                    Console.WriteLine("model {0} is deleted", Models[i - 1]);
                    Models.RemoveAt(i - 1);//deleted
                }
                else Console.WriteLine("no such model!");

            }
            else Console.WriteLine("the list off models is empty!\n\n");
        }

    }
}

файл program

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Авто
{
    class Program
    {
        static public List<Car> Cars = new List<Car>();//list off cars
        //
        static void Main(string[] args)
        {
            Menu();
            ConsoleKey ck;
            do
            {
                ck = Console.ReadKey(true).Key;//if keydown
                switch (ck)
                {
                    //ConsoleKey.D1:     keydown off key 1 
                   
                    case ConsoleKey.D1:
                    case ConsoleKey.NumPad1: Car.AddModel();
                        break;
                    case ConsoleKey.D2:
                    case ConsoleKey.NumPad2: Car.ShowModel();
                        break;
                    case ConsoleKey.D3:
                    case ConsoleKey.NumPad3: Car.DelModel(Cars);
                        break;
                    case ConsoleKey.D4:
                    case ConsoleKey.NumPad4: Car.AddCar(Cars);
                        break;
                    case ConsoleKey.D5:
                    case ConsoleKey.NumPad5: Car.ShowCars(Cars);
                        break;
                    case ConsoleKey.D6:
                    case ConsoleKey.NumPad6: Car.DelCar(Cars);
                        break;
                    case ConsoleKey.D0:
                    case ConsoleKey.NumPad0: Menu();
                        break;
                }
            } while (ck != ConsoleKey.Escape);//while esc not pressed 
        }
        //
        static void Menu()
        {
            Console.Clear();
            Console.WriteLine(" 1  new model");
            Console.WriteLine(" 2  watch all models");
            Console.WriteLine(" 3  delete model");
            Console.WriteLine(" 4  new car");
            Console.WriteLine(" 5  watch all cars");
            Console.WriteLine(" 6  delete car");
            Console.WriteLine(" 0  clear screen");
            Console.WriteLine("Esc  exit");
        }
    }
}

4

Re: C# задача

Ось це вже краще. Але чому ви вирішили що в цьому коді є помилки?

5

Re: C# задача

Чи може в класі Car міститись інфа про автомобілі (множество автомобілів. В даному випадку автомобілі підприємства)
Чи мають тут бути методи додавання авто в Ліст, видалення та виведення інформації про автомобіль або про всі автомобілі?
Маю на увазі чи ООП тут правильно застосовано?

6 Востаннє редагувалося lucas-kane (30.12.2021 01:17:07)

Re: C# задача

Логічно припустити що можливо але додавання та видалення їх із самого class Car, як ви це собі уявляєте?
Припустимо, коли реєструєш автомобіль при внесені в техпаспорт на вибір дається всього близько десятку кольорів, одинадцять, якщо не помиляюсь. Чому б просто не перерахувати ці кольори ENUM COLOR {...} та використати його як основною властивістю class Car. Теж саме із маркою авто ENUM BRAND { RENO, VOLVO, ... }
На С це мало б наступний вигляд:

enum Color { Black, White, Read та інші кольори };
enum Brand { VAZ, ZAZ та інші марки авто };

struct Car
{
    enum Brand brand;    // марка автомобіля
    enum Color color;    // колір автомобіля
    char reg_number[11]; // та реєстраційний номер
} car;                   // змінна для збереження відомостей про автомобіль

Або ж написати окремі класи для цих властивостей, котрі будуть ініціалізуватись наприклад, із якогось там файлу чи з таблиці в базі даних. Та створити об'єкти color і brand в class Car як його властивості.

7 Востаннє редагувалося lucas-kane (30.12.2021 00:36:29)

Re: C# задача

sasha87 написав:

Зробити довідник автомобілів підприємства.

???
Ви маєте на увазі Довідник власників (працівників, співробітників) автомобілів. (у кого воно є), котрі заїжджають на територію? Чи Довідник автомобілів якогось автопарку (автобусів, вантажівок тощо), яким володіє підприємство?

І все ж таки моя вам порада: "Не спішіть писати відразу код. Для початку на аркуші паперу намалюйте хоч якусь діаграму чи блок-схему, самі об'єкти та зв'язки між ними, їхні властивості. Якою ви бачите структуру Бази Даних. Правильно складена послідовність дій, що за чим - це вже зроблена половина справи".

Подякували: tchort1

8

Re: C# задача

довідник автомобілів працівників підпріємства - власників

9

Re: C# задача

sasha87 написав:

довідник автомобілів працівників підпріємства - власників

Ну тоді, на мою думу, краще описувати не клас автомобілів, а працівників у котрих ці авто є, чи не має. Очевидно, що це властивість працівника... і від цього відштовхуватись...

10

Re: C# задача

Та ні
Це вже буде зайвим
Працівників не треба враховувати

11

Re: C# задача

Треба ще один файл Car
Як з цього класу car перенести інформацію по автомобілю в новий клас (файл) car і зробити зв'язок між цими двома файлами?
А цей потрібно перейменувати в cars і тут описувати колекцію і працювати з нею - видаляти, додавати і так далі.

12 Востаннє редагувалося lucas-kane (30.12.2021 01:01:03)

Re: C# задача

sasha87 написав:

Треба ще один файл Car
Як з цього класу car перенести інформацію по автомобілю в новий клас (файл) car і зробити зв'язок між цими двома файлами?
А цей потрібно перейменувати в cars і тут описувати колекцію і працювати з нею - видаляти, додавати і так далі.

Від того, що ти наробиш class Car та class Cars і ще купу усіляких тому подібних класів не спростить, а ще більш заплутає тебе в подальшому. Не спіши писати код, краще розпиши покроково що тобі потрібно. ООП створено для того щоб спростити роботу у написанні коду. У цьому підході до програмування потрібно правильно виділити об'єкти та зв'язки між ними, описати його властивості.
Потрібно розуміти різницю між об'єктом і самим класом, властивостями об'єкту, котрі прописані у касі. Крім того для твоєї задачі одного class Car вистачить.

13

Re: C# задача

То що переробити в ньому? Зараз він не коректно виглядає і не логічно що клас Кар містить в собі список автомобілів

14

Re: C# задача

sasha87 написав:

То що переробити в ньому? Зараз він не коректно виглядає і не логічно що клас Кар містить в собі список автомобілів

Не ображайся, але ти не намагаєшся зрозуміти, що я тобі написав у своєму першому повідомленні і мені знову писати з початку не хочеться...

15 Востаннє редагувалося lucas-kane (30.12.2021 01:18:43)

Re: C# задача

має бути щось типу такого, бери і перекладай на C#

#include <iostream>
#include <string>

using namespace std;

constexpr auto N = 5;

enum class Color { NOCOLOR = 0, Black, White, Read };
enum class Brand { NOBRAND = 0, Volkswagen, Toyota, Ford, Honda };

struct
{
    string name;
    struct
    {
        enum class Brand brand = Brand::NOBRAND;
        enum class Color color = Color::NOCOLOR;
        string reg_number;
    } car;
} owner[N];

void init(size_t, string, enum class Brand, enum class Color, string);
void print(size_t);

int main()
{
    init(0, "koala", Brand::Volkswagen, Color::Black, "CE 1786 BA");
    init(1, "0xDADA11C7", Brand::Toyota, Color::Read, "CA 8626 BH");
    init(2, "sasha87", Brand::Toyota, Color::White, "BX 6086 BH");
    init(3, "tchort", Brand::Ford, Color::White, "BA 2586 BA");
    init(4, "leofun01", Brand::Honda, Color::Read, "BC 6040 CP");

    size_t id;
    for (id = 0; id < N; id++)
    {
        // Шукаємо власників білих тойот
        // if (owner[id].car.brand == Brand::Toyota && owner[id].car.color == Color::White)
        {
            cout << id + 1;
            print(id);
        }
    }

    return 0;
}

void init(size_t id, string name, enum class Brand brand, enum class Color color, string reg_number)
{
    owner[id].name = name;
    owner[id].car.brand = brand;
    owner[id].car.color = color;
    owner[id].car.reg_number = reg_number;
}

void print(const size_t id)
{
    cout << ' ' << owner[id].name << ' ';

    if (owner[id].car.brand == Brand::Volkswagen)
        cout << "Volkswagen";

    else if (owner[id].car.brand == Brand::Toyota)
        cout << "Toyota";

    else if (owner[id].car.brand == Brand::Ford)
        cout << "Ford";

    else if (owner[id].car.brand == Brand::Honda)
        cout << "Honda";

    else if (owner[id].car.brand == Brand::Volkswagen)
        cout << "Volkswagen";

    else
        cout << "NO BRAND!";

    cout << ' ';

    switch (owner[id].car.color)
    {
    case Color::Black:
        cout << "Black";
        break;

    case Color::White:
        cout << "White";
        break;

    case Color::Read:
        cout << "Read";
        break;

    case Color::NOCOLOR:
    default:
        cout << "NO COLOR!";
        break;
    }

    cout << ' ' << owner[id].car.reg_number << endl;
}