Skip to main content

Command Palette

Search for a command to run...

LinkedIn Learning - C#

workload => 2 hrs 39 min - instructed by Thaise Medeiros

Updated
3 min readView as Markdown
LinkedIn Learning - C#

Project link: https://github.com/ThiagoKS-7/Linkedin-Learning-CSharp1

In this LinkedIn Learning course, the main objective was not necessarily to create a system or platform, but to train the fundamentals of the language, starting with variables, their types, conditionals, loops, Arrays and collections.

After configuring my Visual Studio, creating the solution file and initializing the repo, I established a personal goal to implement each fundamental in different classes, while also trying to follow the singleton design pattern, creating a common interface between all of them. The code below shows one of these fundamental's classes:

# Condicionais.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloWorld
{
    public class Condicionais : IFundamentos
    {
        private Condicionais() { }

        private static Condicionais _instance;

        public static Condicionais GetInstance()
        {
            if (_instance == null)
            {
                _instance = new Condicionais();
            }
            return _instance;
        }

        public void run()
        {
            MostraCondicionais();
        }


        private List<String> GetTodosMeses()
        {
            List<String> meses = new List<String>();
            meses.Add("JANEIRO");
            meses.Add("FEVEREIRO");
            meses.Add("MARCO");
            meses.Add("ABRIL");
            meses.Add("MAIO");
            meses.Add("JUNHO");
            meses.Add("JULHO");
            meses.Add("AGOSTO");
            meses.Add("SETEMBRO");
            meses.Add("OUTUBRO");
            meses.Add("NOVEMBRO");
            meses.Add("DEZEMBRO");
            return meses;
        }

        private List<String> GetMesesComTrinta()
        {
            /* Criando uma lista com os meses que tem 30 dias,
            * pra dai checar se a string pega ta nesses meses
            */
            List<String> mesesComTrinta = new List<String>();
            mesesComTrinta.Add("ABRIL");
            mesesComTrinta.Add("JUNHO");
            mesesComTrinta.Add("SETEMBRO");
            mesesComTrinta.Add("NOVEMBRO");
            return mesesComTrinta;
        }

        private void ChecaNota()
        {
            const string APROVADO = "Aprovado!";
            const string REPROVADO = "Reprovado!";
            const string EM_REC = "Em Recuperação";

            Console.Write("[IF] Digite a nota: ");
            decimal nota = Convert.ToDecimal(Console.ReadLine());

            if (nota >= 7)
            {
                Console.WriteLine(APROVADO);
            }
            else if (nota >= 4 && nota < 5)
            {
                Console.WriteLine(EM_REC);
            }
            else
            {
                Console.WriteLine(REPROVADO);
            }
        }

        private void ChecaDiasDoMes()
        {
            List<String> meses = GetTodosMeses();
            List<String> mesesComTrinta = GetMesesComTrinta();
            string mes = "";

            while (!meses.Contains(mes.ToUpper()))
            {
                Console.Write("[SWITCH] Digite um mês: ");
                mes = Console.ReadLine();

            }


            bool temTrintaDias = mesesComTrinta.Contains(mes);

            switch (mes.ToUpper())
            {
                case "FEVEREIRO":
                    int CurrentYear = DateTime.Now.Year;
                    if (DateTime.IsLeapYear(CurrentYear))
                    {
                        Console.WriteLine("29 dias.");
                    }
                    else
                    {
                        Console.WriteLine("28 dias.");
                    }
                    break;
                default:
                    if (temTrintaDias)
                    {
                        Console.WriteLine("30 dias.");
                    }
                    else
                    {
                        Console.WriteLine("31 dias.");
                    }
                    break;

            }
        }

        private void MostraCondicionais()
        {
            Console.WriteLine("\n Condicionais: ");
            ChecaNota();
            ChecaDiasDoMes();
            Console.Write("\n Clique qualquer tecla para sair... ");
            Console.ReadLine();
        }
    }
}

To run it properly, I wrote the following in my interface and main classes:

# IFundamentos.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloWorld
{
    public interface IFundamentos
    {
        public void run();
    }
}
# Program.cs
using System;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloWorld
{
    public class Program
    {
        public static void Main()
        {
            // See https://aka.ms/new-console-template for more information
            Console.WriteLine("Hello, World!");

            Tipos tp = Tipos.GetInstance();
            Operadores op = Operadores.GetInstance();
            Strings st = Strings.GetInstance();
            Condicionais cd = Condicionais.GetInstance();

            tp.run();
            op.run();
            st.run();
            cd.run();
        }
    }
}

As you can see, this part is still very repetitive, so my future refactor attempt will try to create a parent class for all the fundamentals, creating an 'ArrayList<parentClass>' to store them.

This way, I'm hoping to be able to iterate in each of the 'run( )' methods of each class. If anyone has any better suggestions on how I can tweak this part, feel free to hit me up on my socials or send me a pull request on the repo.

And that's it for now, I'm still taking the course, so I hope to be able to update the status of this project later, either here or in the repo's readme. Thanks for reading and until next time!


References studied:

https://refactoring.guru/design-patterns/singleton/csharp/example

https://rb.gy/m2tvkg

https://dirask.com/posts/C-NET-get-current-year-month-day-hour-minute-second-millisecond-Kj85L1

https://www.macoratti.net/11/05/c_dlg1.htm

https://www.geeksforgeeks.org/c-sharp-how-to-check-whether-a-list-contains-a-specified-element/

https://balta.io/blog/datetime-csharp-dotnet

https://www.linkedin.com/learning/c-sharp-formacao-basica/estrutura-de-repeticao-while-e-for?autoSkip=true&autoplay=true&resume=false

More from this blog

Thiago Kasper de Souza - my blog

3 posts

My name is Thiago, I'm 21 years old, a technician in Mechanics and a bachelor's degree in Computer Science in progress. Why? I was always very curious about different areas of technology and innovation, and because of that, thanks to the incentive that my technical education school gave to scientific initiation projects, I ended up being recognized at the 2020 Mostratec, thus gaining the opportunity to do an internship at Meta, where I still work today, mainly with web development, but also some mobile development. After that, I decided to pursue my career in the IT field, now always willing to learn new and challenging things!