Home

Fundamentals of File Streaming

 

Introduction

File streaming consists of performing one of the routine operations on a file, such as creating it or opening it. This basic operation can be performed using a class called FileStream. You can use a FileStream object to get a stream ready for processing. As one of the most complete classes of file processing of the .NET Framework, FileStream is equipped with all necessary properties and methods. To use it, you must first declare a variable of it. The class is equipped with nine constructors.

One of the constructors (the second) of the FileStream class has the following syntax:

public FileStream(string path, FileMode mode);

This constructor takes as its first argument the name or the file or its path. The second argument specifies the type of operation to perform on the file. Here is an example:

using System;
using System.IO;

class Exercise
{
    static int Main()
    {
	string NameOfFile = "Persons.spr";

	FileStream fstPersons = new FileStream(NameOfFile, FileMode.Create);
	return 0;
    }
}

Practical LearningPractical Learning: Creating a Stream

  • To create a new stream, change the SaveOrder() method in the IceCream.cs file and as follows:
    using System;
    using System.IO;
    
    namespace IceCream3
    {
        . . . No Change
    
            public void SaveOrder()
            {
                string NameOfFile;
    
                Console.Write("Please enter your initials or the " +
                              "name we will use to remember your order: ");
                NameOfFile = Console.ReadLine();
                
                if( File.Exists(NameOfFile) )
                {
                    char Answer;
    
                    Console.WriteLine("The file you entered exists already.");
                    Console.Write("Do you want to replace it(y/n)?" );
                    Answer = char.Parse(Console.ReadLine());
                    
        FileStream stmIceCream = new FileStream(NameOfFile, FileMode.Create);
    		
                    if( Answer == 'y' || Answer == 'Y' )
                        Console.WriteLine("The former order with the " +
                                          "same name will be replaced");
                    else if( Answer == 'n' || Answer == 'N' )
                    {
                        Console.WriteLine("Please enter a name we will " +
                                          "use to remember this order: ");
                        NameOfFile = Console.ReadLine();
                    }
                    else
                        Console.WriteLine("Invalid Answer - We will close");
    	
    				return;
    	    }
    	    else
    		Console.WriteLine("Great");
            }
    
            public void OpenOrder()
            {
                . . . No Change
            }
        }
    }

Stream Writing

A streaming operation is typically used to create a stream. Once the stream is ready, you can write data to it. The writing operation is perform through various classes. One of these classes is BinaryWriter.

The BinaryWriter class can be used to write values of primitive data types (char, int, float, double, etc). To use a BinaryWriter value, you can first declare its variable. To do this, you would use one of the class' three constructors. One of its constructors (the second) has the following syntax:

public BinaryWriter(Stream output);

This constructor takes as argument a Stream value, which could be a FileStream variable. Here is an example:

using System;
using System.IO;

class Exercise
{
	static int Main()
	{
		string NameOfFile = "Persons.spr";

	FileStream fstPersons = new FileStream(NameOfFile, FileMode.Create);
		BinaryWriter wrtPersons = new BinaryWriter(fstPersons);

		return 0;
	}
}

Most classes that are used to add values to a stream are equipped with a method called Write. This is also the case for the BinaryWriter class. This method takes as argument the value that must be written to the stream. The method is overloaded so that there is a version for each primitive data type. Here is an example that adds strings to a newly created file:

using System;
using System.IO;

class Exercise
{
	static int Main()
	{
		string NameOfFile = "Persons.spr";

	FileStream fstPersons = new FileStream(NameOfFile, FileMode.Create);
		BinaryWriter wrtPersons = new BinaryWriter(fstPersons);

		wrtPersons.Write("James Bloch");
		wrtPersons.Write("Catherina Wallace");
		wrtPersons.Write("Bruce Lamont");
		wrtPersons.Write("Douglas Truth");

		return 0;
	}
}

Stream Closing

When you use a stream, it requests resources from the operating system and uses them while the stream is available. When you are not using the stream anymore, you should free the resources and make them available again to the operating system so that other services can use them. This is done by closing the stream.

To close a stream, you can can call the Close() method of the class(es) you were using. Here are examples:

using System;
using System.IO;

class Exercise
{
	static int Main()
	{
		string NameOfFile = "Persons.spr";

	FileStream fstPersons = new FileStream(NameOfFile, FileMode.Create);
		BinaryWriter wrtPersons = new BinaryWriter(fstPersons);

		wrtPersons.Write("James Bloch");
		wrtPersons.Write("Catherina Wallace");
		wrtPersons.Write("Bruce Lamont");
		wrtPersons.Write("Douglas Truth");
		
		wrtPersons.Close();
		fstPersons.Close();

		return 0;
	}
}

Practical LearningPractical Learning: Writing to a Stream

  1. To be able to complete a file, change the SaveOrder() method in the IceCream.cs file as follows:
    using System;
    using System.IO;
    
    namespace IceCream3
    {
            . . . No Change
    
            public void SaveOrder()
            {
                string strNameOfFile;
                
                Console.Write("Please enter your initials or the name " +
                                  "we will use to remember your order: ");
                strNameOfFile = Console.ReadLine();
                strNameOfFile = strNameOfFile + ".icr";
                
                // Find out if the user entered a name of a file 
                // that is already in the machine
                if (File.Exists(strNameOfFile))
                {
                    char answer;
                    
                    FileStream stmIceCream =
                        new FileStream(strNameOfFile, FileMode.Create);
                    BinaryWriter bnwIceCream =
                        new BinaryWriter(stmIceCream);
    
                    // If so, find out if the user wants to 
                    // replace the old file
                    Console.WriteLine("The file you entered exists already.");
                    Console.Write("Do you want to replace it(y/n)?");
                    answer = char.Parse(Console.ReadLine());
    
                    // If the customer wants to replace it...
                    if (answer == 'y' || answer == 'Y')
                    {
                        // ... do so
                        Console.WriteLine("The former order with the same " +
                                          "name will be replaced");
    
                     Console.WriteLine("\n=-= Ice Cream Vending Machine =-=");
                        Console.WriteLine(" Saving Order: {0}", strNameOfFile);
                        bnwIceCream.Write(Flavor[ChoiceFlavor - 1]);
                        bnwIceCream.Write(Container[ChoiceContainer - 1]);
                        bnwIceCream.Write(Ingredient[ChoiceIngredient - 1]);
                        bnwIceCream.Write(Scoops);
                        bnwIceCream.Write(TotalPrice);
                    }
                    // If the customer wants to save the new order with 
                    // a different name
                    else if (answer == 'n' || answer == 'N')
                    {
                        // Ask the user to enter a name to remember the order
                        Console.Write("Please enter a name we will use " +
                                      "to remember this order: ");
                        strNameOfFile = Console.ReadLine();
                        strNameOfFile = strNameOfFile + ".icr";
    
                stmIceCream = new FileStream(strNameOfFile, FileMode.Create);
                        bnwIceCream = new BinaryWriter(stmIceCream);
    
                Console.WriteLine("\n=-= Ice Cream Vending Machine =-=");
                        Console.WriteLine(" Saving Order: {0}", strNameOfFile);
                        bnwIceCream.Write(Flavor[ChoiceFlavor - 1]);
                        bnwIceCream.Write(Container[ChoiceContainer - 1]);
                        bnwIceCream.Write(Ingredient[ChoiceIngredient - 1]);
                        bnwIceCream.Write(Scoops);
                        bnwIceCream.Write(TotalPrice);
                    }
                    else
                        Console.WriteLine("Invalid Answer - We will close");
                    bnwIceCream.Close();
                    stmIceCream.Close();
                }
                else
                {
                    FileStream stmIceCream =
                        new FileStream(strNameOfFile, FileMode.Create);
                    BinaryWriter bnwIceCream =
                        new BinaryWriter(stmIceCream);
    
                    Console.WriteLine("\n=-= Ice Cream Vending Machine =-=");
                    Console.WriteLine(" Saving Order: {0}", strNameOfFile);
                    bnwIceCream.Write(Flavor[ChoiceFlavor - 1]);
                    bnwIceCream.Write(Container[ChoiceContainer - 1]);
                    bnwIceCream.Write(Ingredient[ChoiceIngredient - 1]);
                    bnwIceCream.Write(Scoops);
                    bnwIceCream.Write(TotalPrice);
    
                    bnwIceCream.Close();
                    stmIceCream.Close();
                }
            }
    
            public void OpenOrder()
            {
                . . . No Change
            }
        }
    }
  2. Execute the application and test it. Here is an example:
    =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
    Ice Cream Vending Machine
    -----------------------------------
    What type of flavor do you want?
    1 - Vanilla
    2 - Cream of Cocoa
    3 - Chocolate Chip
    4 - Organic Strawberry
    5 - Butter Pecan
    6 - Cherry Coke
    7 - Chocolate Brownies
    8 - Caramel Au Lait
    9 - Chunky Butter
    10 - Chocolate Cookie
    Your Choice? 8
    -----------------------------------
    What type of container do you want?
    1 - Cone
    2 - Cup
    3 - Bowl
    Your Choice? 2
    -----------------------------------
    Do you want an ingredient or not
    1 - No Ingredient
    2 - Peanuts
    3 - M & M
    4 - Cookies
    Your Choice? 3
    -----------------------------------
    How many scoops(1, 2, or 3)? 2
    -----------------------------------
    
    =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
    Ice Cream Order
    -----------------------------------
    Flavor:      Caramel Au Lait
    Container:   Cup
    Ingredient:  M & M
    Scoops:      2
    Total Price: $3.10
    =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
    
    Do you want us to remember this order the next time you 
    come to get your Ice Cream (y/n)? Y
    Please enter your initials or the name we will use to 
    remember your order: LS
    
    =-= Ice Cream Vending Machine =-=
     Saving Order: LS.icr
    Press any key to continue . . .
  3. Close the DOS window

Stream Reading

As opposed to writing to a stream, you may want to read existing data from it. Before doing this, you can first specify your intent to the streaming class using the FileMode enumerator. This can be done using the FileStream class as follows:

using System;
using System.IO;

class Exercise
{
	static int Main()
	{
		string NameOfFile = "Persons.spr";
/*
	FileStream fstPersons = new FileStream(NameOfFile, FileMode.Create);
		BinaryWriter wrtPersons = new BinaryWriter(fstPersons);

		wrtPersons.Write("James Bloch");
		wrtPersons.Write("Catherina Wallace");
		wrtPersons.Write("Bruce Lamont");
		wrtPersons.Write("Douglas Truth");
		
		wrtPersons.Close();
		fstPersons.Close();
*/
		FileStream fstPersons = new FileStream(NameOfFile, FileMode.Open);

		return 0;
	}
}

Once the stream is ready, you can get prepared to read data from it. To support this, you can use the BinaryReader class. This class provides two constructors. One of the constructors (the first) has the following syntax:

public BinaryReader(Stream input);

This constructor takes as argument a Stream value, which could be a FileStream object. After declaring a FileStream variable using this constructor, you can read data from it. To do this, you can call an appropriate method. This class provides an appropriate method for each primitive data type.

After using the stream, you should close it to reclaim the resources it was using. This is done by calling the Close() method.

Here is an example of using the mentioned methods:

using System;
using System.IO;

class Exercise
{
	static int Main()
	{
		string NameOfFile = "Persons.spr";
/*
	FileStream fstPersons = new FileStream(NameOfFile, FileMode.Create);
		BinaryWriter wrtPersons = new BinaryWriter(fstPersons);

		wrtPersons.Write("James Bloch");
		wrtPersons.Write("Catherina Wallace");
		wrtPersons.Write("Bruce Lamont");
		wrtPersons.Write("Douglas Truth");
		
		wrtPersons.Close();
		fstPersons.Close();
*/
	FileStream fstPersons = new FileStream(NameOfFile, FileMode.Open);
		BinaryReader rdrPersons = new BinaryReader(fstPersons);
		string strLine = null;

		strLine = rdrPersons.ReadString();
		Console.WriteLine(strLine);
		strLine = rdrPersons.ReadString();
		Console.WriteLine(strLine);
		strLine = rdrPersons.ReadString();
		Console.WriteLine(strLine);
		strLine = rdrPersons.ReadString();
		Console.WriteLine(strLine);

		rdrPersons.Close();
		fstPersons.Close();

		return 0;
	}
}

Practical LearningPractical Learning: Reading From a Stream

  1. To be able to retrieve data from an existing file, change the IceCream.cs file as follows:
     
    using System;
    using System.IO;
    
    namespace IceCream3
    {
        delegate void Request();
    
        // This class is used to create and manage an Ice Cream
        // and to process an order
        public sealed class IceCream
        {
            // This is the base price of an Ice Cream
            // Optional values may be added to it
            public const decimal BasePrice = 1.55M;
    
            // These arrays are used to build the components 
            // of various Ice Creams
            // In C#, we can allocate an array's memory in 
            // the body of the class
            private string[] Flavor;
            private string[] Container;
            private string[] Ingredient;
    
            // Additional factor used to process an Ice Cream order
            private int Scoops;
            private decimal TotalPrice;
    
            // Variables that will hold the user's choice
            // These are declared "globally" so they can be 
            // shared among methods
            int ChoiceFlavor;
            int ChoiceContainer;
            int ChoiceIngredient;
    
            // This default constructor is the best place for 
            // us to initialize the array
            public IceCream()
            {
                Flavor = new string[10];
                Flavor[0] = "Vanilla";
                Flavor[1] = "Cream of Cocoa";
                Flavor[2] = "Chocolate Chip";
                Flavor[3] = "Organic Strawberry";
                Flavor[4] = "Butter Pecan";
                Flavor[5] = "Cherry Coke";
                Flavor[6] = "Chocolate Brownies";
                Flavor[7] = "Caramel Au Lait";
                Flavor[8] = "Chunky Butter";
                Flavor[9] = "Chocolate Cookie";
    
                Ingredient = new string[4];
                Ingredient[0] = "No Ingredient";
                Ingredient[1] = "Peanuts";
                Ingredient[2] = "M & M";
                Ingredient[3] = "Cookies";
    
                Container = new string[3];
                Container[0] = "Cone";
                Container[1] = "Cup";
                Container[2] = "Bowl";
            }
    
            // This method requests a flavor from the user and
            // returns the choice
            public void ChooseFlavor()
            {
                // Make sure the user selects a valid number 
                //that represents a flavor...
                do
                {
                    // In case the user types a symbol that 
                    // is not a number
                    try
                    {
                        Console.WriteLine("What type of flavor do you want?");
                        for (int i = 0; i < Flavor.Length; i++)
                            Console.WriteLine("{0} - {1}", i + 1, Flavor[i]);
                        Console.Write("Your Choice? ");
                        ChoiceFlavor = int.Parse(Console.ReadLine());
                    }
                    catch (FormatException)	// display an appropriate message
                    {
                        Console.WriteLine("You must enter a valid number " +
                                          "and no other character!");
                    }
    
                    // If the user typed an invalid number out of the 
                    // allowed range
                    // let him or her know and provide another chance
                    if (ChoiceFlavor < 1 || ChoiceFlavor > Flavor.Length)
                        Console.WriteLine("Invalid Choice - Try Again!\n");
                } while (ChoiceFlavor < 1 || ChoiceFlavor > Flavor.Length);
            }
    
            // This method allows the user to select a container
            public void ChooseContainer()
            {
                // Make sure the user selects a valid number that 
                // represents a container
                do
                {
                    // If the user types a symbol that is not a number
                    try
                    {
                        Console.WriteLine("What type of container do you want?");
                        for (int i = 0; i < Container.Length; i++)
                            Console.WriteLine("{0} - {1}", i + 1, Container[i]);
                        Console.Write("Your Choice? ");
                        ChoiceContainer = int.Parse(Console.ReadLine());
                    }
                    catch (FormatException)	// display an appropriate message
                    {
                        Console.WriteLine("You must enter a valid " +
                                          "number and no other character!");
                    }
    
                    // If the user typed an invalid number out of the 
                    // allowed range
                    // let him or her know and provide another chance
                    if ((ChoiceContainer < 1) ||
                        (ChoiceContainer > Container.Length))
                        Console.WriteLine("Invalid Choice - Try Again!");
                } while ((ChoiceContainer < 1) ||
                         (ChoiceContainer > Container.Length));
            }
    
            public void ChooseIngredient()
            {
                do
                {
                    try
                    {
                        Console.WriteLine("Do you want an ingredient or not");
                        for (int i = 0; i < Ingredient.Length; i++)
                            Console.WriteLine("{0} - {1}",
                                              i + 1,
                                              Ingredient[i]);
                        Console.Write("Your Choice? ");
                        ChoiceIngredient = int.Parse(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
                        Console.WriteLine("You must enter a valid " +
                                          "number and no other character!");
                    }
    
                    if ((ChoiceIngredient < 1) ||
                        (ChoiceIngredient > Ingredient.Length))
                        Console.WriteLine("Invalid Choice - Try Again!");
                } while ((ChoiceIngredient < 1) ||
                         (ChoiceIngredient > Ingredient.Length));
            }
    
            public void SpecifyNumberOfScoops()
            {
                do
                {
                    try
                    {
                        Console.Write("How many scoops(1, 2, or 3)? ");
                        Scoops = int.Parse(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
                        Console.WriteLine("You must enter a valid number " +
                                          "and no other character!");
                    }
    
                    if (Scoops < 1 || Scoops > 3)
                        Console.WriteLine("Invalid Choice - Try Again!");
                } while (Scoops < 1 || Scoops > 3);
            }
    
            // This method is used to process a customer order
            // It uses the values of the above methods
            public void ProcessAnOrder()
            {
                //			int ChoiceFlavor;
                //			int ChoiceContainer;
                //			int ChoiceIngredient;
                decimal PriceIngredient, PriceScoop;
    
                // Let the user know that this is a vending machine
                Console.WriteLine("=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=");
                Console.WriteLine("Ice Cream Vending Machine");
                Console.WriteLine("-----------------------------------");
    
                // Let the user select the components of the Ice Cream
                Request Get = new Request(ChooseFlavor);
                Get();
                Console.WriteLine("-----------------------------------");
                Get = new Request(ChooseContainer);
                Get();
                Console.WriteLine("-----------------------------------");
                Get = new Request(ChooseIngredient);
                Get();
                Console.WriteLine("-----------------------------------");
                Get = new Request(SpecifyNumberOfScoops);
                Get();
                Console.WriteLine("-----------------------------------");
    
                // If the user selects an ingredient instead of "No Ingredient",
                // add $0.50 to the order
                if ((ChoiceIngredient == 2) ||
                    (ChoiceIngredient == 3) ||
                    (ChoiceIngredient == 4))
                    PriceIngredient = 0.50M;
                else
                    PriceIngredient = 0.00M;
    
                // Instead of multiplying a number scoops to a value,
                // We will use an incremental value depending on 
                // the number of scoops
                if (Scoops == 1)
                    PriceScoop = 0.65M;
                else if (Scoops == 2)
                    PriceScoop = 1.05M;
                else
                    PriceScoop = 1.55M;
    
                // Calculate the total price of the Ice Cream
                TotalPrice = BasePrice + PriceScoop + PriceIngredient;
    
                // Create the Ice Cream...
    
                // And display a receipt to the user
                DisplayReceipt();
            }
    
            // This method is used to display a receipt to the user
            public void DisplayReceipt()
            {
                Console.WriteLine("\n=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=");
                Console.WriteLine("Ice Cream Order");
                Console.WriteLine("-----------------------------------");
                Console.WriteLine("Flavor:      {0}",
                                  Flavor[ChoiceFlavor - 1]);
                Console.WriteLine("Container:   {0}",
                                  Container[ChoiceContainer - 1]);
                Console.WriteLine("Ingredient:  {0}",
                                  Ingredient[ChoiceIngredient - 1]);
                Console.WriteLine("Scoops:      {0}", Scoops);
                Console.WriteLine("Total Price: {0:C}", TotalPrice);
                Console.WriteLine("=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=\n");
            }
    
            public void SaveOrder()
            {
                string strNameOfFile;
                
                Console.Write("Please enter your initials or the name " +
                                  "we will use to remember your order: ");
                strNameOfFile = Console.ReadLine();
                strNameOfFile = strNameOfFile + ".icr";
                
                // Find out if the user entered a name of a file 
                // that is already in the machine
                if (File.Exists(strNameOfFile))
                {
                    char answer;
                    
                    FileStream stmIceCream =
                        new FileStream(strNameOfFile, FileMode.Create);
                    BinaryWriter bnwIceCream =
                        new BinaryWriter(stmIceCream);
    
                    // If so, find out if the user wants to 
                    // replace the old file
                    Console.WriteLine("The file you entered exists already.");
                    Console.Write("Do you want to replace it(y/n)?");
                    answer = char.Parse(Console.ReadLine());
    
                    // If the customer wants to replace it...
                    if (answer == 'y' || answer == 'Y')
                    {
                        // ... do so
                        Console.WriteLine("The former order with the same " +
                                          "name will be replaced");
    
                    Console.WriteLine("\n=-= Ice Cream Vending Machine =-=");
                        Console.WriteLine(" Saving Order: {0}", strNameOfFile);
                        bnwIceCream.Write(Flavor[ChoiceFlavor - 1]);
                        bnwIceCream.Write(Container[ChoiceContainer - 1]);
                        bnwIceCream.Write(Ingredient[ChoiceIngredient - 1]);
                        bnwIceCream.Write(Scoops);
                        bnwIceCream.Write(TotalPrice);
                    }
                    // If the customer wants to save the new order with 
                    // a different name
                    else if (answer == 'n' || answer == 'N')
                    {
                        // Ask the user to enter a name to remember the order
                        Console.Write("Please enter a name we will use " +
                                      "to remember this order: ");
                        strNameOfFile = Console.ReadLine();
                        strNameOfFile = strNameOfFile + ".icr";
    
                   stmIceCream = new FileStream(strNameOfFile, FileMode.Create);
                        bnwIceCream = new BinaryWriter(stmIceCream);
    
                      Console.WriteLine("\n=-= Ice Cream Vending Machine =-=");
                        Console.WriteLine(" Saving Order: {0}", strNameOfFile);
                        bnwIceCream.Write(Flavor[ChoiceFlavor - 1]);
                        bnwIceCream.Write(Container[ChoiceContainer - 1]);
                        bnwIceCream.Write(Ingredient[ChoiceIngredient - 1]);
                        bnwIceCream.Write(Scoops);
                        bnwIceCream.Write(TotalPrice);
                    }
                    else
                        Console.WriteLine("Invalid Answer - We will close");
                    bnwIceCream.Close();
                    stmIceCream.Close();
                }
                else
                {
                    FileStream stmIceCream =
                        new FileStream(strNameOfFile, FileMode.Create);
                    BinaryWriter bnwIceCream =
                        new BinaryWriter(stmIceCream);
    
                    Console.WriteLine("\n=-= Ice Cream Vending Machine =-=");
                    Console.WriteLine(" Saving Order: {0}", strNameOfFile);
                    bnwIceCream.Write(Flavor[ChoiceFlavor - 1]);
                    bnwIceCream.Write(Container[ChoiceContainer - 1]);
                    bnwIceCream.Write(Ingredient[ChoiceIngredient - 1]);
                    bnwIceCream.Write(Scoops);
                    bnwIceCream.Write(TotalPrice);
    
                    bnwIceCream.Close();
                    stmIceCream.Close();
                }
            }
    
            public void OpenOrder()
            {
                string strNameOfFile;
    		
                string SelectedFlavor;
                string SelectedContainer;
                string SelectedIngredient;
    
    	    // Ask the user to enter a name of a previously saved order
    	    Console.Write("Please enter the name you previously " +
                              "gave to remember your order: ");
    	    strNameOfFile = Console.ReadLine();
                strNameOfFile = strNameOfFile + ".icr";
    
    	    FileStream stmIceCream =
                    new FileStream(strNameOfFile, FileMode.Open);
    	    BinaryReader bnrIceCream =
                    new BinaryReader(stmIceCream);
                
                // Find out if this order was previously saved in the machine
                if (File.Exists(strNameOfFile))
                {
                    // If so, open it
                    SelectedFlavor = bnrIceCream.ReadString();
                    SelectedContainer = bnrIceCream.ReadString();
                    SelectedIngredient = bnrIceCream.ReadString();
                    Scoops = bnrIceCream.ReadInt32();
                    TotalPrice = bnrIceCream.ReadDecimal();
                    
                    // And display it to the user
                    Console.WriteLine("\n=-= Ice Cream Vending Machine =-=");
                    Console.WriteLine(" Previous Order: {0}", strNameOfFile);
                    Console.WriteLine("Flavor:      {0}", SelectedFlavor);
                    Console.WriteLine("Container:   {0}", SelectedContainer);
                    Console.WriteLine("Ingredient:  {0}", SelectedIngredient);
                    Console.WriteLine("Scoops:      {0}", Scoops);
                    Console.WriteLine("Total Price: {0:C}\n", TotalPrice);
                    
                    bnrIceCream.Close();
                    stmIceCream.Close();
                }
                else
                    Console.WriteLine("The name you entered is not " +
                                      "registered in our previous orders");
            }
        }
    }
  2. Access the Program.cs file and change it as follows:
     
    using System;
    
    namespace IceCream3
    {
        class Program
        {
            static int Main(string[] args)
            {
                char answer = 'n';
                IceCream ic = new IceCream();
                Request process = new Request(ic.ProcessAnOrder);
               
                Console.Write("Do you want to re-order a previously " +
                              "saved order(y/n)? ");
                answer = char.Parse(Console.ReadLine());
                
                if (answer == 'y' || answer == 'Y')
                    ic.OpenOrder();
                else
                {
                    process();
                    Console.Write("Do you want us to remember this " +
                                  "order the next time you come to " +
                                  "get your Ice Cream (y/n)? ");
                    answer = char.Parse(Console.ReadLine());
                    if (answer == 'y' || answer == 'Y')
                        ic.SaveOrder();
                    else
                        Console.WriteLine("\nIt was nice serving you." +
                                          "\nCome Again!!!\n");
                }
                return 0;
            }
        }
    }
  3. Execute the application and test it. Here is an example:
     
    Do you want to re-order a previously saved order(y/n)? Y
    Please enter the name you previously gave to remember your order: LS
    
    =-= Ice Cream Vending Machine =-=
     Previous Order: LS.icr
    Flavor:      Caramel Au Lait
    Container:   Cup
    Ingredient:  M & M
    Scoops:      2
    Total Price: $3.10
    
    Press any key to continue . . .
  4. Close the DOS window
  5. Execute the application again and test it. Here is an example:
     
    Do you want to re-order a previously saved order(y/n)? w
    =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
    Ice Cream Vending Machine
    -----------------------------------
    What type of flavor do you want?
    1 - Vanilla
    2 - Cream of Cocoa
    3 - Chocolate Chip
    4 - Organic Strawberry
    5 - Butter Pecan
    6 - Cherry Coke
    7 - Chocolate Brownies
    8 - Caramel Au Lait
    9 - Chunky Butter
    10 - Chocolate Cookie
    Your Choice? 5
    -----------------------------------
    What type of container do you want?
    1 - Cone
    2 - Cup
    3 - Bowl
    Your Choice? 2
    -----------------------------------
    Do you want an ingredient or not
    1 - No Ingredient
    2 - Peanuts
    3 - M & M
    4 - Cookies
    Your Choice? 1
    -----------------------------------
    How many scoops(1, 2, or 3)? 1
    -----------------------------------
    
    =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
    Ice Cream Order
    -----------------------------------
    Flavor:      Butter Pecan
    Container:   Cup
    Ingredient:  No Ingredient
    Scoops:      1
    Total Price: $2.20
    =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
    
    Do you want us to remember this order the next time 
    you come to get your Ice Cream (y/n)? y
    Please enter your initials or the name we will use 
    to remember your order: DIC
    
    =-= Ice Cream Vending Machine =-=
     Saving Order: DIC.icr
    Press any key to continue . . .
  6. Close the DOS window
  7. Execute the application again and test it. Here is an example:
     
    Do you want to re-order a previously saved order(y/n)? n
    =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
    Ice Cream Vending Machine
    -----------------------------------
    What type of flavor do you want?
    1 - Vanilla
    2 - Cream of Cocoa
    3 - Chocolate Chip
    4 - Organic Strawberry
    5 - Butter Pecan
    6 - Cherry Coke
    7 - Chocolate Brownies
    8 - Caramel Au Lait
    9 - Chunky Butter
    10 - Chocolate Cookie
    Your Choice? 9
    -----------------------------------
    What type of container do you want?
    1 - Cone
    2 - Cup
    3 - Bowl
    Your Choice? 3
    -----------------------------------
    Do you want an ingredient or not
    1 - No Ingredient
    2 - Peanuts
    3 - M & M
    4 - Cookies
    Your Choice? 4
    -----------------------------------
    How many scoops(1, 2, or 3)? 3
    -----------------------------------
    
    =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
    Ice Cream Order
    -----------------------------------
    Flavor:      Chunky Butter
    Container:   Bowl
    Ingredient:  Cookies
    Scoops:      3
    Total Price: $3.60
    =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
    
    Do you want us to remember this order the next time 
    you come to get your Ice Cream (y/n)? Y
    Please enter your initials or the name we will use 
    to remember your order: LS
    The file you entered exists already.
    Do you want to replace it(y/n)?Y
    The former order with the same name will be replaced
    
    =-= Ice Cream Vending Machine =-=
     Saving Order: LS.icr
    Press any key to continue . . .
  8. Close the DOS window
 

Previous Copyright © 2006-2010 FunctionX, Inc. Next