示例#1
0
        static void Main(string[] args)
        {
            //opretter min stack og min list
            Stack <Bog> deck       = new Stack <Bog>();
            List <Bog>  collection = new List <Bog>();

            //opretter objekter
            Bog intet  = new Bog();
            Bog Granny = new Bog();
            Bog road   = new Bog();

            //tilføjer bøger til mit library
            intet.Navn   = "intet";
            intet.Pages  = 200;
            intet.Author = "Jane teller";
            collection.Add(intet);

            Granny.Navn   = "Gangsta granny";
            Granny.Pages  = 150;
            Granny.Author = "david walliams";
            collection.Add(Granny);

            road.Navn   = "On The Road ";
            road.Author = "jack kerouac";
            road.Pages  = 50;

            collection.Add(road);

            Console.WriteLine("Velkommen til Biblioteket!");
            Console.WriteLine($"Her er de bøger du kan låne:\r\n");

            //loop til at udskrive alle mine bøger
            int tal = 1;

            foreach (Bog saml in collection)
            {
                Console.WriteLine($" {tal++} Titel: {saml.Navn}  Forfatter: {saml.Author} Sider: {saml.Pages}");
            }
            Console.WriteLine("4  færdig med at vælge");


            //switch til at håndtere user inputs fra readline
            bool power = true;

            while (power)
            {
                switch (Console.ReadLine())
                {
                case "1":
                    if (deck.Contains(intet))
                    {
                        Console.WriteLine("Du har allerede lånt denne bog vælg en anden");
                        break;
                    }

                    Console.WriteLine("Du har valgt bogen");
                    deck.Push(intet);

                    break;

                case "2":
                    if (deck.Contains(Granny))
                    {
                        Console.WriteLine("Du har allerede lånt denne bog vælg en anden");
                        break;
                    }
                    Console.WriteLine("Du har lånt bogen");
                    deck.Push(Granny);
                    break;

                case "3":
                    if (deck.Contains(road))
                    {
                        Console.WriteLine("Du har allerede lånt denne bog vælg en anden");
                        break;
                    }

                    Console.WriteLine("Du har lånt bogen");
                    deck.Push(road);
                    break;

                case "4":
                    Console.WriteLine("Du skal nu låne bøgerne");
                    power = false;
                    break;
                }
            }
            Console.WriteLine("");

            //Udskriver hvor mange bøger der er valgt
            Console.WriteLine(deck.Count());

            //udskriver mine bøger
            foreach (Bog result in deck)
            {
                Console.WriteLine(result.Navn);
            }

            //laver mellemrum og laver en variable til count
            Console.WriteLine("");

            int counts = deck.Count;

            //For loop til at poppe
            for (int i = 0; i < counts; i++)
            {
                Bog popper = deck.Pop();

                Console.WriteLine(popper.Navn);
            }

            Console.ReadKey();
        }
示例#2
0
        static void Main(string[] args)
        {
            #region User priming. Fluff.
            Console.Write("Running initialization test. Please wait.");
            WaitTimer();

            Console.WriteLine();
            Console.Write("Making meat-bags wait so they think I'm an advanced program.");
            WaitTimer();

            Console.WriteLine();
            Console.Write("Running sanity checks. Please wait.");
            WaitTimer();
            Console.WriteLine();
            #endregion

            #region Test-run
            // Del 1 Test
            Console.WriteLine("\n***** Del 1 udskrifts resultat *****");
            Laaner test = new Laaner(1, "test");
            Console.WriteLine(test.HentLaaner());
            Console.WriteLine("-------------------------------------");

            // Del 2 Test

            List <Laaner> listLaaner = new List <Laaner>();
            listLaaner.Add(new Laaner(2, "Sønderborg"));
            listLaaner.Add(new Laaner(3, "Tønder"));
            listLaaner.Add(new Laaner(666, "Herlev"));
            Console.WriteLine("\n***** Del 2 udskrifts resultat *****");
            Laaner.UdskrivLaanere(listLaaner);

            // Del 3 Test
            Console.WriteLine("\n***** Del 3 udskrifts resultat *****");
            listLaaner[2].Navn  = "Karsten Karstensen";
            listLaaner[2].Email = "*****@*****.**";
            Laaner.UdskrivLaanere(listLaaner);
            #endregion

            #region Selvstændig tilføjelse (Validation):

            /*
             * listLaaner[2].Navn = "K4rsten Karstensen"; // Ville fejle da der er valideringstjek ift om navn-strengen indeholder tal.
             * listLaaner[2].Email = "hej"; // Ville ligeledes fejle, da der tjekkes om strengen indeholder et '@', og hvis ikke, om den er sat til den hårdkodede "mangler" kode ("Ikke Angivet")
             */
            #endregion

            #region Valgfri del (Find):
            Console.WriteLine("###### OPTIONAL ######");
            Console.WriteLine("FindLaanere(666):");
            FindLaanere(666);

            void FindLaanere(int laanerNummer)
            {
                Console.WriteLine(listLaaner.Find(x => x.LaanerNummer == laanerNummer).HentLaaner());
            }

            #endregion

            #region Valgfri del (Bog):
            List <Bog> bogListe = new List <Bog>();
            bogListe.Add(new Bog("En hest i modvind", "Karsten Karstensen", "12345"));
            bogListe.Add(new Bog("En kæphest i C#", "Ivana Humpalot", "23456"));

            // Metoden til at udleje en bog kaldes, og derefter kaldes oversigten over lånere igen, for at vise, at det er registrere.
            UdlaanBog("12345", 3);
            UdlaanBog("23456", 3);
            Console.WriteLine("\n\n\n**** VALGFRI: BOG ****");
            Laaner.UdskrivLaanere(listLaaner);


            #endregion

            #region Metode til at udleje/reservere en bog.
            /// <summary>
            /// Method for renting out/reserving a given book. The method finds the renter via their membernummber (laanerNummer), and the book via its ISBN number.
            /// If the book in question isn't rented nor reserved, the book is added to the rentees list of rented books, and registers the date and time as well as rented status
            /// on the book itself.
            /// Otherwise, if the book is rented out, the user is asked if they wish to reserve it. If they agree, the books entry in the bogListe Collection is registered as reserved,
            /// and the reservation deadline is set to 1 month in the future.
            /// </summary>
            void UdlaanBog(string ISBN, int laanerNummer)
            {
                int idLaaner = listLaaner.FindIndex(x => x.LaanerNummer == laanerNummer);
                int idBog    = bogListe.FindIndex(x => x.ISBN == ISBN);

                if (bogListe[idBog].Udlaant == false && bogListe[idBog].Reserveret == false)
                {
                    listLaaner[idLaaner].laanteBoeger.Add(bogListe[idBog]);
                    bogListe[idBog].Udlaansdato = DateTime.Now;
                    bogListe[idBog].Udlaant     = true;
                }
                else if (bogListe[idBog].Udlaant == true && bogListe[idBog].Reserveret == false)
                {
                    Console.WriteLine("Bogen er desværre udlånt. Vil du reservere den? [Y/N]");
                    if (Console.ReadLine() == "Y")
                    {
                        bogListe[idBog].ReservDato = DateTime.Now.AddMonths(1);
                        bogListe[idBog].Reserveret = true;
                    }
                }
            }

            #endregion

            #region Valgfri/Selvstændig (Forsinket aflevering)
            // Bare for at oprette et eksempel:
            Console.WriteLine("\n***** Eks 1: Forsinket Aflevering ******");
            bogListe[1].Udlaansdato = DateTime.Now.AddDays(10);
            Laaner.UdskrivLaanere(listLaaner);

            // Reservation
            Console.WriteLine("\n***** Eks 2: Reservation ******");
            UdlaanBog("12345", 3);
            Laaner.UdskrivLaanere(listLaaner);
            #endregion

            #region Menu (efter endt gennemkørsel af ovenstående tests)
            bool contMenu = true;

            // do-while løkken sikrer at menuen gentages indtil brugeren manuelt vælger at afslutte den.
            do
            {
                Console.WriteLine("\n\nVælg venligst en mulighed:");
                Console.WriteLine("\n> Brugere:");
                Console.WriteLine(">> [a]: Angiv ny Låner");
                Console.WriteLine(">> [e]: Vis en enkelt bruger");
                Console.WriteLine(">> [f]: Vise alle brugere");
                Console.WriteLine("\n> Bøger:");
                Console.WriteLine(">> [b]: Vis alle bøger");
                Console.WriteLine(">> [u]: Udlån Bog");
                Console.WriteLine("\n> Funktionelt:");
                Console.WriteLine(">> [q]: Gem og Afslut");
                Console.WriteLine(">> [i]: Indlæs data");



                switch (Console.ReadLine())
                {
                case "a":
                    Laaner.OpretLaaner(listLaaner);
                    break;

                case "q":
                    contMenu = false;
                    Gem();
                    break;

                case "i":
                    Laes();
                    break;

                case "e":
                    Console.WriteLine($"Der er i alt {listLaaner.Count} brugere.");
                    Console.WriteLine("Angiv indekset på den bruger du gerne vil se:");
                    int bruger = int.Parse(Console.ReadLine());
                    try
                    {
                        Laaner.UdskrivLaaner(listLaaner, bruger);
                    }
                    catch (IndexOutOfRangeException)
                    {
                        Console.WriteLine("Brugeren kunne ikke findes. Bemærk venligst at der bedes om indeks nummmer, og ikke Låner ID");
                    }
                    finally
                    {
                        contMenu = true;
                    }
                    break;

                case "f":
                    foreach (Laaner p in listLaaner)
                    {
                        string saveLaaner = $"{p.LaanerNummer};{p.Navn};{p.Email};{p.Bibliotek}";
                        foreach (Bog laantBog in p.laanteBoeger)
                        {
                            saveLaaner += $";{laantBog.ISBN}";
                        }
                        Console.WriteLine(saveLaaner);
                    }
                    break;

                case "u":
                    Console.WriteLine("Angiv ISBN-nummer på bogen du gerne vil udlåne (f.eks. 12345):");
                    string uISBN = Console.ReadLine();
                    Console.WriteLine("Angiv Låner-nummeret på den person der vil låne bogen (f.eks. 666):");
                    int uLaaner = int.Parse(Console.ReadLine());
                    UdlaanBog(uISBN, uLaaner);
                    break;

                case "b":
                    Bog.GetBoeger(bogListe);
                    break;
                }
            } while (contMenu == true);



            #endregion

            #region Gem og Læs metode
            /// <summary>
            /// Method for saving the list of rentees. It uses a default path (Desktop\test.txt) to store the string, but also includes exception handling in case the path doesn't exist.
            /// </summary>
            void Gem()
            {
                // Der angives her en dynamisk sti, den noget lettere men langt mere rigid hårdkodning, eftersom jeg ikke kan forvente, at programmet har adgang til at gemme
                // direkte på C:\ drevet hver gang, og endnu mindre, at vedkommendes lokale brugernavn er det samme som mit.
                string        sti   = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.txt");
                List <string> tekst = new List <string>();

                foreach (Laaner p in listLaaner)
                {
                    string saveLaaner = $"{p.LaanerNummer};{p.Navn};{p.Email};{p.Bibliotek}";
                    foreach (Bog laantBog in p.laanteBoeger)
                    {
                        saveLaaner += $";{laantBog.ISBN}";
                    }
                    tekst.Add(saveLaaner);
                }
                // Try-Catch i tilfælde af at ovennævnte sti ikke kan skrives til
                try
                {
                    File.WriteAllLines(sti, tekst, Encoding.UTF8);
                }
                catch (UnauthorizedAccessException)
                {
                    Console.WriteLine("Du har ikke tilladelse til at gemme filen i den pågældende sti.");
                }
                catch (DirectoryNotFoundException)
                {
                    Console.WriteLine("Den pågældende sti eksisterer ikke.");
                }
            }

            /// <summary>
            /// Method for loading data from a txt-file. Each line is read in sequence, and split by each ';' to be stored in a string array.
            /// Each index then corresponds to a certain field (as save and load have been standardized), so each index of the array can
            /// be safely assigned to a given field in the listLaaner collection.
            /// Finally, any books already rented by new entries are added directly to the laanteBoege collection, to avoid
            /// confounding data - such as date of rent, etc.
            /// </summary>
            void Laes()
            {
                string sti = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.txt");

                try
                {
                    // Hver linje fra tekstfilen indlæses som hver sit element i en string array:
                    string[] tekst = File.ReadAllLines(sti, Encoding.UTF8);
                    foreach (string s in tekst)
                    {
                        // Hvert element opdeles ved hver ';':
                        string[] data = s.Split(';');
                        if (listLaaner.Any(x => x.LaanerNummer == int.Parse(data[0])) == false)    // Der tjekkes om låneren allerede eksisterer i systemet. Her bruges ID og ikke Index
                        {
                            int laanID = listLaaner.Count + 1;                                     // Nyt ID oprettes ud fra størrelsen på listLaaner collectionen.
                            listLaaner.Add(new Laaner(laanID));                                    // Låneren tilføjes via de nye ID
                            int laanIDIndex = listLaaner.FindIndex(x => x.LaanerNummer == laanID); // Og det nye entrys index lokaliseres

                            // Hvorefter vi kan bruge set til at angive værdierne lagret i arrayet, ud fra et standardiseret format (ID;Navn;Email;Bibliotek;Bog;Bog;Bog;[...])
                            listLaaner[laanIDIndex].Navn      = data[1];
                            listLaaner[laanIDIndex].Email     = data[2];
                            listLaaner[laanIDIndex].Bibliotek = data[3];

                            // For hvert element udover det fjerde (dvs for hver bog), bruges værdien til at registrere den pågælden bog som udlejet til låneren
                            for (int i = 0; i < (data.Length - 4); i++)
                            {
                                int idBog = bogListe.FindIndex(x => x.ISBN == data[i + 4]);
                                listLaaner[laanIDIndex].laanteBoeger.Add(bogListe[idBog]);
                            }
                        }
                    }
                }
                catch (FileNotFoundException)
                {
                    Console.WriteLine("Tjek venligst din sti, eftersom der ikke kunnne findes nogen fil med det navn.");
                }


                Console.WriteLine("################################  Data loaded.  ##############################################");
            }

            #endregion
        }