Esempio n. 1
0
        // method to rent the book, returns myTransactions value
        // this method recalls every object in itself multiple times
        // which I have actually learned not to necessarily do
        public Transactions[] RentBook()
        {
            TransactionsFile transactionsFile = new TransactionsFile("transactions.txt");

            Transactions[]      myTransactions      = transactionsFile.GetAllTransactions();
            TransactionsReports transactionsReports = new TransactionsReports(myTransactions);
            TransactionsUtility transactionsUtility = new TransactionsUtility(myTransactions);

            BooksFile booksFile = new BooksFile("books.txt");

            Books[]      myBooks      = booksFile.GetAllBooks();
            BooksReports booksReports = new BooksReports(myBooks);
            BooksUtility booksUtility = new BooksUtility(myBooks);

            string   customerNameInput  = "";
            string   customerEmailInput = "";
            string   isbnInput          = "";
            string   confirmInput       = "";
            string   defaultReturnDate  = "0/0/0000";
            double   isbnDoubleInput    = 0;
            int      searchIndex        = 0;
            int      transactionLength  = File.ReadAllLines("transactions.txt").Length;
            double   rentalId           = transactionLength + 1;
            DateTime currentDate        = DateTime.Today;

            Console.WriteLine();
            booksReports.PrintAllBooks();
            Console.WriteLine();

            Console.WriteLine("Select an ISBN to Rent:");
            Console.WriteLine("'Cancel' to Cancel");
            do
            {
                Console.Write("-- ");
                isbnInput = Console.ReadLine();
                if (isbnInput.ToUpper() == "CANCEL")
                {
                    return(myTransactions);
                }
                else if (isbnInput.Length > 10)
                {
                    Console.WriteLine($"Error: {isbnInput} is an Invalid ISBN, Try Again");
                }
                else if (isbnInput.Length < 10)
                {
                    Console.WriteLine($"Error: {isbnInput} is an Invalid ISBN, Try Again");
                }
                else if (isbnInput.Length == 10)
                {
                    isbnDoubleInput = Convert.ToDouble(isbnInput);
                    searchIndex     = booksUtility.SequentialSearch(isbnDoubleInput);
                    if (searchIndex == -1)
                    {
                        Console.WriteLine("Error: Book does not exist");
                    }
                    else
                    {
                        Console.Clear();
                    }
                }

                if (myBooks[searchIndex].GetCopies() == 0)
                {
                    Console.WriteLine("Error: There are no copies left");
                    return(myTransactions);
                }

                Console.WriteLine("Checking out:");
                Console.WriteLine($"Rental ID: {rentalId:0000}");
                Console.WriteLine($"Title: {myBooks[searchIndex].GetTitle()}");
                Console.WriteLine();

                Console.WriteLine("Enter Customer Email:");
                Console.WriteLine("'Cancel' to Cancel");
                Console.Write("-- ");
                customerEmailInput = Console.ReadLine();

                if (customerEmailInput.ToUpper() == "CANCEL")
                {
                    return(myTransactions);
                }

                string[] lines = File.ReadAllLines("transactions.txt");
                if (lines.Length != 0)
                {
                    foreach (string line in lines)
                    {
                        string[] transactionInfo = line.Split('#');
                        if (transactionInfo[3] == customerEmailInput)
                        {
                            if (transactionInfo[1] == isbnInput)
                            {
                                Console.WriteLine();
                                Console.WriteLine("Error: You already have a copy of this book");
                                return(myTransactions);
                            }
                        }
                    }
                }
            } while (isbnInput.ToUpper() != "CANCEL" && isbnInput.Length != 10);

            Console.WriteLine("Enter Customer Name:");
            Console.WriteLine("'Cancel' to Cancel");
            Console.Write("-- ");
            customerNameInput = Console.ReadLine();

            if (customerNameInput.ToUpper() == "CANCEL")
            {
                return(myTransactions);
            }

            Console.Clear();
            Console.WriteLine("Checking out:");
            Console.WriteLine($"Rental ID: {rentalId:0000}");
            Console.WriteLine($"Title: {myBooks[searchIndex].GetTitle()}");
            Console.WriteLine($"Customer Name: {customerNameInput}");
            Console.WriteLine($"Customer Email: {customerEmailInput}");
            Console.WriteLine($"Rental Date: {currentDate:d}");
            Console.WriteLine($"Return Date: {defaultReturnDate}");
            Console.WriteLine();

            Console.WriteLine("'Confirm' to Change");
            Console.WriteLine("'Cancel' to Cancel Change");
            Console.WriteLine("Enter your selection:");

            do
            {
                Console.Write("-- ");
                confirmInput = Console.ReadLine();

                switch (confirmInput.ToUpper())
                {
                case "CONFIRM":
                    int      bookFileLength = File.ReadAllLines("books.txt").Length;
                    string[] tempBooks      = File.ReadAllLines("books.txt");
                    myBooks[searchIndex].SetCopies(Convert.ToDouble(myBooks[searchIndex].GetCopies()) - 1);
                    tempBooks[searchIndex] = ($"{myBooks[searchIndex].GetIsbn()}#{myBooks[searchIndex].GetTitle()}#{myBooks[searchIndex].GetAuthor()}#{myBooks[searchIndex].GetGenre()}#{myBooks[searchIndex].GetRuntime()}#{myBooks[searchIndex].GetCopies()}");
                    File.Create("books.txt").Close();
                    using (StreamWriter sw = File.AppendText("books.txt"))
                    {
                        for (int i = 0; i != bookFileLength; i++)
                        {
                            sw.WriteLine(tempBooks[i]);
                        }
                    }
                    using (StreamWriter sw = File.AppendText("transactions.txt"))
                    {
                        sw.WriteLine($"{rentalId:0000}#{isbnInput}#{customerNameInput}#{customerEmailInput}#{currentDate:d}#{defaultReturnDate}");
                    }
                    Console.WriteLine();
                    Console.WriteLine("Transaction has been added.");
                    myBooks        = booksFile.GetAllBooks();
                    myTransactions = transactionsFile.GetAllTransactions();
                    return(myTransactions);

                case "CANCEL":
                    break;

                default:
                    Console.WriteLine("Error: Invalid Selection, Try Again");
                    break;
                }
            } while (confirmInput.ToUpper() != "CANCEL" && confirmInput.ToUpper() != "CONFIRM");

            return(myTransactions);
        }
Esempio n. 2
0
        // method to generate any particular amount of random transactions for testing
        static void PopulateTestTransactions()
        {
            // method to generate any particular amount of random transactions
            Console.WriteLine();

            int    length       = File.ReadAllLines("transactions.txt").Length;
            int    booksLength  = File.ReadAllLines("books.txt").Length;
            int    count        = File.ReadAllLines("transactions.txt").Length;
            string userInput    = "";
            int    userIntInput = 0;
            bool   runProgram   = true;
            bool   intTest      = true;
            int    num          = -1;

            do
            {
                Console.WriteLine("[Populate Test Cases - Transactions.TXT]");
                do
                {
                    Console.WriteLine("How many sample transactions would you like to add?");
                    Console.WriteLine("Enter 'Cancel' to cancel");
                    Console.Write("-- ");
                    userInput = Console.ReadLine();
                    if (userInput.ToUpper() == "CANCEL")
                    {
                        runProgram = false;
                        intTest    = false;
                        Console.WriteLine("Thank you, Goodbye!");
                        return;
                    }
                    if (!int.TryParse(userInput, out num))
                    {
                        Console.WriteLine("Error: Not a number, Try Again");
                    }
                    else
                    {
                        userIntInput = int.Parse(userInput);
                        intTest      = false;
                    }
                } while (intTest == true);

                for (int i = 0; i < userIntInput; i++)
                {
                    // specifically defined random variables to meet 10-digit isbn, 2-digit runtime, and 1-digit copies
                    Random   random          = new Random();
                    double   randomIsbn      = 0;
                    double[] randomIsbnArray = new double[booksLength];
                    for (int j = 0; j < booksLength; j++)
                    {
                        randomIsbnArray[j] = myBooks[j].GetIsbn();
                        Console.WriteLine(myBooks[j].GetIsbn());
                    }
                    int randomIsbnIndex = random.Next(0, booksLength);
                    randomIsbn = myBooks[randomIsbnIndex].GetIsbn();
                    string randomRentalId = "";
                    for (int m = 0; m < 4; m++)
                    {
                        randomRentalId += random.Next(0, 9).ToString();
                    }
                    DateTime today    = DateTime.Today;
                    var      tomorrow = today.AddDays(1);

                    using (StreamWriter writer = new StreamWriter("transactions.txt", true))
                    {
                        writer.WriteLine($"{randomRentalId}#{randomIsbn}#CustomerName{count+1}#customer{count+1}@gmail.com#{today:d}#{tomorrow:d}");
                    }
                    count++;
                    randomIsbn = 0;
                }
                Console.WriteLine("Transactions Added:");
                Console.WriteLine($"{length} length");
                runProgram = false;
            }while (runProgram != false);
            myTransactions = transactionsFile.GetAllTransactions();
            for (int l = -1; l < userIntInput - 1; l++)
            {
                Console.WriteLine(myTransactions[length].ToString());
                length++;
            }
            Console.WriteLine("Thank you, Goodbye!");
        }
Esempio n. 3
0
        // ReturnBook method which properly references and recalls objects
        // this method also properly (or semi-properly) updates everything
        // as well as returning to the main function, or Programs.cs
        public Transactions[] ReturnBook(Transactions[] myTransactions, TransactionsFile transactionsFile, TransactionsReports transactionsReports, TransactionsUtility transactionsUtility, Books[] myBooks, BooksUtility booksUtility, BooksReports booksReports)
        {
            string   customerEmailInput     = "";
            string   isbnInput              = "";
            string   confirmInput           = "";
            int      searchIndex            = 0;
            int      searchIndexTransaction = 0;
            double   doubleTest             = 0;
            int      transactionFileLength  = myTransactions.Length;
            DateTime currentTime            = DateTime.Today;

            Console.WriteLine("Enter email address:");
            Console.WriteLine("'Cancel' to Cancel");
            Console.Write("-- ");
            customerEmailInput = Console.ReadLine();

            if (customerEmailInput.ToUpper() == "CANCEL")
            {
                return(myTransactions);
            }

            int testRentalCount  = 0;
            int otherRentalCount = 0;

            Console.WriteLine();
            Console.WriteLine("Books currently checked out:");
            string[] lines = File.ReadAllLines("transactions.txt");
            if (lines.Length != 0)
            {
                foreach (string line in lines)
                {
                    string[] transactionInfo = line.Split('#');
                    if (transactionInfo[3] == customerEmailInput)
                    {
                        if (transactionInfo[5] == "0/0/0000")
                        {
                            // Console.WriteLine(Convert.ToDouble(transactionInfo[1]));
                            searchIndex = booksUtility.SequentialSearch(Convert.ToDouble(transactionInfo[1]));
                            // Console.WriteLine(searchIndex);
                            Console.WriteLine(myBooks[searchIndex]);
                            otherRentalCount++;
                            testRentalCount++;
                        }
                    }
                }
                // foreach (string line in lines)
                // {
                //     string[] transactionInfo = line.Split('#');
                //     if(transactionInfo[5] != "0/0/0000")
                //     {
                //     }
                // }
                if (testRentalCount == 0)
                {
                    Console.WriteLine("Error: There are no books that need to be returned");
                    return(myTransactions);
                }
                if (otherRentalCount == 0)
                {
                    Console.WriteLine("Error: There are no books checked out under this email");
                    return(myTransactions);
                }
            }
            else if (lines.Length == 0)
            {
                Console.WriteLine("Error: There are no books currently checked out");
            }

            Console.WriteLine();
            Console.WriteLine("Enter the ISBN");
            Console.WriteLine("'Cancel' to Cancel");
            do
            {
                Console.Write("-- ");
                isbnInput = Console.ReadLine();

                if (isbnInput.ToUpper() == "CANCEL")
                {
                    return(myTransactions);
                }



                if (!double.TryParse(isbnInput, out doubleTest))
                {
                    Console.WriteLine($"Error: {isbnInput} is not a number, Try Again:");
                }
            } while (!double.TryParse(isbnInput, out doubleTest));

            searchIndex = booksUtility.SequentialSearch(Convert.ToDouble(isbnInput));

            Console.WriteLine();
            Console.WriteLine($"Customer Email: {customerEmailInput}");
            Console.WriteLine($"Book Return: {myBooks[searchIndex].GetTitle()}");

            Console.WriteLine();
            Console.WriteLine("Would you like to return this book?");
            Console.WriteLine("'Return' to Confirm Return");
            Console.WriteLine("'Cancel' to Cancel Return");
            do
            {
                Console.Write("-- ");
                confirmInput = Console.ReadLine();
                switch (confirmInput.ToUpper())
                {
                case "RETURN":

                    string[] newLines = File.ReadAllLines("transactions.txt");
                    if (newLines.Length != 0)
                    {
                        foreach (string line in newLines)
                        {
                            string[] transactionInfo = line.Split('#');
                            if (transactionInfo[1] == isbnInput)
                            {
                                if (transactionInfo[5] == "0/0/0000")
                                {
                                    searchIndexTransaction = transactionsUtility.SequentialSearch(isbnInput);
                                    myTransactions[searchIndexTransaction].SetReturnDate(currentTime.ToString());
                                    transactionFileLength = File.ReadAllLines("transactions.txt").Length;
                                    string[] transactionFile = File.ReadAllLines("transactions.txt");
                                    transactionFile[searchIndexTransaction] = ($"{myTransactions[searchIndexTransaction].GetRentalId():0000}#{myTransactions[searchIndexTransaction].GetIsbn()}#{myTransactions[searchIndexTransaction].GetCustomerName()}#{myTransactions[searchIndexTransaction].GetCustomerEmail()}#{myTransactions[searchIndexTransaction].GetRentalDate()}#{myTransactions[searchIndexTransaction].GetReturnDate()}");
                                    File.Create("transactions.txt").Close();

                                    using (StreamWriter sw = File.AppendText("transactions.txt"))
                                    {
                                        for (int i = 0; i != transactionFileLength; i++)
                                        {
                                            sw.WriteLine(transactionFile[i]);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    Console.WriteLine();
                    Console.WriteLine("Book has been returned.");
                    Console.WriteLine($"Return Date: {myTransactions[searchIndexTransaction].GetReturnDate()}");
                    myTransactions = transactionsFile.GetAllTransactions();
                    return(myTransactions);

                case "CANCEL":
                    return(myTransactions);

                default:
                    Console.WriteLine("Error: Invalid Selection, Try Again");
                    break;
                }
            } while (confirmInput.ToUpper() != "RETURN" && confirmInput.ToUpper() != "CANCEL");

            return(myTransactions);
        }