Homework I2

From Cmsc434_s10
Jump to: navigation, search

Implementation 2 (Due date: 3/1, 2pm)

Your mission is to implement a web application called Virtual STAMP food court using Flex. This application consists of four components: an ordering form for users to enter basic information, a menu that displays food items users can order, a view component that displays a particular food item in details, and a cart component that keeps a list of items users intend to order.

This implementation homework consists of four parts. In each part you will build a component for the application. Each part is further divided into a series of smaller steps. Each step is designed for you to learn a particular Flex programming concept and technique as indicated by the heading. Your task is to make an incremental improvement to the application. Each improvement includes a set of features motivated by some fictional but reasonable user requirements. Before you attempt to implement these features, you should watch the tutorial video or read the article listed under the Learning section. The video and/or article will teach you what you need to implement the desired features. You can also find additional hints under the Implementation section. This homework is designed in the way that each part depends on what you have learned in the previous parts. So it is important to proceed sequentially.

Part 1: Order form (20 points)

Layout

I2-0-0.png

Requirements

  • Users should be able to enter the name of the food and the location to deliver the food to.
  • Users should be able to tell the application to submit the order.

Learning

  • You should have learned the basic layout techniques in the previous implementation homework.

Implementation

  • Create a new Flex application file named stamp.mxml.
  • Add TextInput controls for entering the food name and delivery location.
  • Add a Button control for submitting the order.

Style

I2-0-1.png

Requirements

  • Users should find the UI visually pleasing.

Learning

Implementation

  • Use the Style Explorer to choose a background color you like for your application. Set the backgroundColor attribute of the <mx:Application> tag to the color you choose.
  • Add a <mx:Style> block and set the style for various controls in the application to make them look nicer. For example, you can add some padding, change the font, change the color...etc.

Data binding

I2-0-2.png

Requirements

  • Users should be able to choose from a list of popular delivery locations.
  • Users should be able to see the delivery location input field is automatically populated with the name of the location they select from the list.

Learning

Implementation

  • Add a ComboBox to the form with at least two locations (AVW and CSIC).
  • Bind the text property of the TextInput control to the text property of the ComboBox control.

Handling user events

I2-0-3.png I2-0-3a.png

Requirements

  • Users should be able to specify they are only interested in a pickup order.
  • Users should not be distracted by the input controls related to the delivery location.

Learning

Implementation

  • Add a CheckBox control for users to specify this order is for pickup only.
  • Add a Box container to group all the components related to the delivery location.
  • Assign an event handler function to the click event of the CheckBox control.
  • Add the handler function in ActionScript in the <mx:Script> block.
  • In the handler function, manipulate the visible property to show or hide the box container depending on the value of the CheckBox control. Manipulate the height property to shrink the box when it is hidden. Store the original height of the box in its data property so that you can restore its height when it is shown again. You will need to coerce the data to int type using (int), which is similar to Java typecasting.

Part 2: Menu (20 points)

HTTPService

I2-2-0.png

Requirements

  • Users should be able to read the menu of a restaurant.
  • Users should be able to see the name and price of each item on the menu.

Learning

Implementation

  • Add a Panel container with the title 'menu'.
  • Add a DataGrid control.
  • Add a HTTPService component and name it as menuService to retrieve menu information from an XML file at the url http://cmsc434.appspot.com/McDonald.xml.
  • Add an initialization function called init() and set it to handle the creationComplete event of the main Application component. In this function, call the send() method of menuService to retrieve the XML file. This ensures the menu data is being retrieved when the application is initialized.
  • Add a handler function to handle the result event of menuService to process the retrieved information.
  • Implement the handler function in the <mx:Script> block. In the function, bind the retrieval result (accessible via event.result.menuItems.menuItem) to the DataGrid.

DataGrid

I2-2-1.png

Requirements

  • Users should not need to see the internal system data such as the ID of each food item.

Learning

Implementation

  • Add two DataGridColumn components to the DataGrid.
  • Customize the way each data field is displayed by setting the headerText and dataField property to appropriate values.

Custom MXML components

I2-2-2.png

Requirements

  • Users want to see multiple copies of the same menu (at least for the purpose of this homework).

Learning

Implementation

  • Create a new MXML component file menu.mxml based on a Panel container.
  • Move the DataGrid component from stamp.mxml to menu.mxml.
  • Move the HTTPService component to menu.mxml.
  • Move the result event handler to the <mx:Script> block in menu.mxml.
  • Move the action script statements responsible for retrieving menu information to menu.mxml.
  • In stamp.mxml, add three instances of the custom menu component (i.e., <comp:menu />) to see if the component is implemented correctly.

Passing data into custom MXML components

I2-2-3.png

Requirements

Implementation

  • In menu.mxml, add a public variable restaurantName and make this variable Bindable.
  • In stamp.mxml, set the restaurantName attribute of each menu component to a different restaurant name (passing data into the component).
  • In menu.mxml, bind the title attribute of the Panel container to restaurantName.
  • Also, change the url attribute of the HTTPService component to a dynamic string based on restaurantName. This dynamic string should form the URL to the corresponding XML file.

Value Object Classes

I2-2-4.png

Requirements

  • Users want to see the name of restaurant displayed in each row.

Learning

Implementation

  • Create a new value object class called MenuItem. This class should have three public and bindable attributes: name, price, and restaurantName.
  • In menu.mxml, create an ArrayCollection called menuItems to store a list of MenuItem objects converted from XML data. For each instance of MenuItem, set its restaurantName to the restaurantName of the menu component (passed in by the main application).
  • Also in menu.mxml, make sure the DataGrid component displays the content of menuItems. Instead of two columns, there should be three columns.

Part 3: Item details (30 points)

Passing data out of custom MXML components

I2-3-0.png

Requirements

  • Users want to see the details of an item in the menu when they click on the item.

Learning

Implementation

  • Create a new event class called MenuItemEvent that can include a MenuItem object. The file should be named MenuItemEvent.as and stored in the events subfolder.
  • In stamp.mxml, add a new Panel container for showing details of a MenuItem object. Use a Label to display each property of the object.
  • Add a bindable variable selectedMenuItem of type MenuItem and bind it to the labels in the details panel.
  • In menu.mxml, declare a custom event in <mx:Metadata> block. Name this event selectedMenuItemEvent of the type events.MenuItemEvent.
  • Implement a function to handle the itemClick event of the DataGrid component. This handler function should create and dispatch a custom event named selectedMenuItemEvent of the type MenuItemEvent that contains the selected MenuItem object.
  • In stmp.mxml, write a function to handle the custom selectedMenuItemEvent dispatched by the menu component. This function should assign the MenuItem object selected by the user to the variable selectedMenuItem, so that the details panel can display the object's content.

Displaying images

I2-3-1.png

Requirements

  • Users want to see an image of each food item in the details view.

Implementation

  • The format of the image url for each food item is: http: //cmsc434.appspot.com/[name].png (case-sensitive).
  • In stamp.mxml, add an Image component to display the image of food item. Set the max and min height and width attributes so that the images are displayed properly.

Item renderer

I2-3-2.png

Requirements

  • Users want to see a thumbnail image of each food item in the menu view.

Learning

Implementation

  • Create a new component file MenuItemRenderer.mxml to act as the renderer for MenuItem objects.
  • In menu.mxml, modify the DataGrid to use the render.

Part 4: Cart (30 points)

Creating custom MXML components revisited

I2-4-0.png

Requirements

  • Users want to see multiple images of the same food for pleasure.

Implementation

  • Create a new component file called menuItemDetails.mxml for the details panel.
  • Move all the necessary code from stamp.mxml to the component file.
  • Create several instances of the component to test if the component is properly coded.

Creating UI controls dynamically

I2-4-1.png

Requirements

  • Users want to order multiple items in one order.
  • Users should be able to see a shopping cart. When they click on an item in the menu, the name of the item should be added to the cart.

Implementation

  • Add a shopping cart component based on Panel. Save the file as cart.mxml.
  • In cart.mxml, create a public function called addMenuItem that takes a MenuItem object as an input argument. In this function, create a new Label control using the new operator. Set the text attribute of this label to the name of MenuItem object. Call the addChild method on the this pointer (that points to the component itself) to add the newly created Label to the Panel.
  • In stamp.mxml, add a cart component in the proper position and give it an ID cart.
  • In the handler function for the selectItemEvent, call cart.addMenuItem function with the selected MenuItem object as the input argument to add this item to the cart.

Creating compound UI controls dynamically

I2-4-2.png

Requirements

  • Users want to see more information about each item in the cart including the price and restaurant name.

Implementation

  • In cart.mxml, modify the function addMenuItem. Instead of using a single Label for each item, use a HBox that groups three Label controls (one for each data field).

Deleting UI controls dynamically

I2-4-3.png

Requirements

  • Users want to remove items from the cart.

Learning

Implementation

  • In cart.mxml, modify the addMenuItem function by adding a Button that reads 'remove'.
  • Call the addEventListener method of the Button to listen for the MouseEvent.CLICK and specify an event handler function.
  • Implement the handler function. A click event should originate from a particular Button control. Use the parent attribute to access the HBox control containing that button. Call the removeChild method of the this attribute to remove the particular HBox control.

Communicating between custom MXML components

I2-4-4.png

Requirements

  • Users want to add the item to the cart after reviewing the item in the details view.
  • Users want to do so by clicking an Add button.

Implementation

  • In 'menuItemDetails.mxml', make the details view component to be able to generate a custom event of the type MenuItemEvent to tell the cart component which item to add. Name this custom event addMenuItemEvent. Do this in the <mx:Metadata block.
  • Add a Button control with the label Add and write a function to handle its click event. This handler should dispatch a custom event addMenuItemEvent that contains the selected MenuItem object.
  • In 'stamp.mxml', write a function to handle the addMenuItemEvent that is now dispatched by the details component. This handler should call the addMenuItem public method of the cart component to add the selected MenuItem object indicated in the custom event.
  • Remember to modify the selectMenuItemEvent function so that it no longer add items to thte cart when users click on the menu.

Part 5: Extra Credits (max: 15 points)

Add up to three non-trivial and meaningful extensions to the interface to earn extra credits!!

Grading Key

  • Order form (20 points)
    • Layout: two TextInput and Label components, and a Button (1 pt for each)
    • Style: font and color changes (1 pt for each)
    • Data binding: ComboBox including AVW and CSIC (1 pt for each), binding with TextInput (3 pts)
    • Handling user events: CheckBox and Box controls (1 pt for each), click event changes visible/height attributes (5 pts)
  • Menu (20 points)
    • HTTPService: menu Panel, DataGrid control, HTTPService retrieves information (1 pt for each)
    • DataGrid: DataGridColumn sets headerText and dataField properties (2 pts)
    • Custom MXML components: three instances of the custom menu component (1 pt for each)
    • Passing data into custom MXML components: restaurantName title and content for three different dynamic restaurants (2 pts for each)
    • Value Object Classes: DataGrid component displays the content of MenuItem with name, price, and restaurantName attributes (2 pts for each)
  • Item details (30 points)
    • Passing data out of custom MXML components: details Panel (2 pts), three Label components display MenuItem properties (1 pt for each), itemClick event of DataGrid triggers selectedMenuItemEvent custom event whose handler function binds to selectedMenuItem of details panel (15 pts)
    • Displaying images: Image component to display food item (2 pts)
    • Item renderer: DataGrid uses MenuItemRenderer to display a thumbnail image of each food item in the menu view (5 pts), the headers are hidden (3 pts)
  • Cart (30 points)
    • Creating UI controls dynamically: cart Panel (1 pt)
    • Creating compound UI controls dynamically: HBox groups three Label controls (1 pt)
    • Deleting UI controls dynamically: remove Button (1 pt), addEventListener listens MouseEvent.CLICK events (2 pts), removeChild method removes the particular HBox control (3 pts)
    • Communicating between custom MXML components: Add to cart Button with a click event handler (5 pts), addMenuItemEvent custom event of type MenuItemEvent calls the addMenuItem of cart to add the selected MenuItem object (15 pts), selectMenuItemEvent function no longer adds items to the cart (2 pts)
  • Extra Credits (max: 15 points)
    • non-trivial and meaningful extensions (5 pts each)

Submissions

As in the previous implementation homework, add a row to the table in last name alphabetic order. After completing each part, export your application and upload the .swf file to the course wiki under the corresponding column.

Examples

Name Part 1 Part 2 Part 3 Part 4 Part 5
Tom Yeh Media:swf-I2-1.swf Media:swf-I2-2.swf Media:swf-I2-3.swf Media:swf-I2-4.swf Media:swf-I2-5.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Sureyya Tarkan Media:tarkan-I2-1.swf Media:tarkan-I2-2.swf Media:tarkan-I2-3.swf Media:tarkan-I2-4.swf Media:tarkan-I2-5.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits

A - H

Name Part 1 Part 2 Part 3 Part 4 Part 5
FirstName LastName Media:swf-I2-1.swf Media:swf-I2-2.swf Media:swf-I2-3.swf Media:swf-I2-4.swf Media:swf-I2-5.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Javed Ahamed Media:Javed_Stamp.swf Media:Javed_Stamp2.swf Media:swf-I2-3.swf Media:swf-I2-4.swf Media:swf-I2-5.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Kevin Barrett Media:Barrett_I2_1.swf Media:Barrett_I2_2.swf Media:Barrett_I2_3.swf Media:Barrett_I2_4.swf Media:Barrett_I2_EC.swf
  1. Drag-and-drop directly from menu datagrids to cart, with animations
  2. Cart total label at top of cart
  3. Instruction panel hides details panel until first selection is made
Robin Brewer Media:Stamp.swf Media:Stamp-pt2.swf Media:Robin-Stamp-pt3.swf Media:Robin-Stamp-pt4.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Frank Cannavo Media:fcannavo-I2-part1.swf Media:fcannavo-I2-part2.swf Media:fcannavo-I2-part3.swf Media:fcannavo-I2-part4.swf Media:fcannavo-I2-part5.swf
  1. Note:Link does not exist
Amit Chauhan Media:Chauhan-I2-1.swf Media:Chauhan-I2-2.swf Media:Chauhan-I2-3.swf Media:Chauhan-I2-4.swf [[]]
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Jason Covey Media:JCstamp1.swf Media:JCstamp2.swf Media:JCstamp3.swf Media:JCstamp4.swf Media:JCstamp5.swf
  1. Extension for extra credit
  2. Extension for extra credit
  3. Extension for extra credit
Ben Cwik Media:Cwik-I2-1.swf Media:Cwik-I2-2.swf Media:Cwik-I2-3.swf Media:Cwik-I2-4.swf Media:Cwik-I2-5.swf
  1. Extension for extra credit
  2. Extension for extra credit
  3. Extension for extra credit
Patrick Dattilio Media:Dattilio-I2-1.swf Media:Dattilio-I2-2.swf Media:Dattilio-I2-3.swf Media:Dattilio-I2-4.swf Media:swf-I2-5.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Nathan DeSelms Media:ndeselms-FoodCourt1.swf Media:ndeselms-FoodCourt2.swf Media:ndeselms-FoodCourt3.swf Media:ndeselms-FoodCourt4.swf Media:ndeselms-FoodCourt5.swf
  1. Extension for extra credit
  2. Extension for extra credit
  3. Extension for extra credit
Venkat Dinavahi Media:ven_stamp.swf Media:ven_stamp2.swf Media:ven_stamp3.swf Media:ven_stamp4.swf Media:ven_stamp_final.swf
  1. Cart total (see title of cart)
  2. Empty cart button
  3. Allow users to add to cart by drag-drop of food items
Mike Donovan Media:miked_stamp.swf Media:Stamp_Part2.swf Media:Stamp_Part3.swf Media:Stamp_part4.swf Media:Stamp_final.swf
  1. Confirmation before submit
  2. Payment option
  3. Special notes text area
John Fan Media:Johnfanimp2-1.swf Media:Johnfanimp2-2.swf Media:Johnfanimp2-3.swf Media:Johnfanimp2-4.swf [[Media:]]
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Andrew Ferguson Media:Ferguson-Stamp1.swf Media:Ferguson-Stamp2.swf Media:Ferguson-Stamp3.swf Media:Ferguson-Stamp4.swf Media:Ferguson-Stamp5.swf
  1. Extension for extra credit
  2. Extension for extra credit
  3. Extension for extra credit
Pedro Ferreira Media:Pedro-p2-1.swf Media:p22.swf Media:Pedro-2-3.swf Media:Pedro-2-4.swf Media:swf-I2-5.swf
  1. Extension for extra credit
  2. Extension for extra credit
  3. Extension for extra credit
David Forsythe Media:forsythe-I2-1.swf Media:forsythe-I2-2.swf Media:forsythe-I2-3.swf Media:forsythe-I2-4.swf Media:forsythe-I2-5.swf
  1. Extension for extra credit
  2. Extension for extra credit
  3. Extension for extra credit
Paul Goldin Media:pgoldin-I2-1.swf Media:pgoldin-I2-2.swf Media:pgoldin-I2-3.swf Media:pgoldin-I2-4.swf Media:pgoldin-I2-5.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Lucas Gonzalez-Fernandez Media:lgfstampone.swf Media:lgfstamptwo.swf Media:lgfstampthree.swf Media:lgfstampfour.swf Media:lgfstampfive.swf
  1. Can specify quantity to purchase
  2. Cart total is shown
  3. Can remove all items from cart
Jeff Gunzelman Media:jgunzelm stamp P1.swf Media:jgunzelm stampP2.swf Media:jgunzelm stampP3v2.swf Media:jgunzelm stampP4.swf Media:jgunzelm stampP5.swf
  1. Total Cost calculation
  2. Field for room number
  3. Extension for extra credit
Mark Heneks Media:Mheneksp1Stamp.swf Media:MheneksStamp part2.swf Media:MheneksStamp part3.swf [[Media:]] [[Media:]]
  1. Extension for extra credit
  2. Extension for extra credit
  3. Extension for extra credit
Monzer Hijazi Media:MHijazi-stamp1-f.swf Media:MHijazi-stamp2.swf Media:MHijazi-stamp33.swf Media:MHijazi-stamp44.swf Media:MHijazi-stamp5.swf
  1. Extension for extra credit
  2. Extension for extra credit
  3. Extension for extra credit

I - P

Name Part 1 Part 2 Part 3 Part 4 Part 5
FirstName LastName Media:swf-I2-1.swf Media:swf-I2-2.swf Media:swf-I2-3.swf Media:swf-I2-4.swf Media:swf-I2-5.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Joseph Isaac Media:JIsaac-I2-1.swf Media:JIsaac-I2-2.swf Media:JIsaac-I2-3.swf Media:JIsaac-I2-4.swf Media:JIsaac-I2-5.swf
  1. Added "Remove All" button to clear all items in cart.
  2. Added "Total Cost" label to calculate the sum of all costs in cart.
  3. Added "Official Website" link button to navigate user to respective company websites.
Kelly McDuffie Media:Mcduffie_l2_1.swf Media:McDuffie-I2-2.swf part 3 Media:mcduffie-4.swf Media:swf-I2-5.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Jeff Jacobs Media:Jacobs-I2-1b.swf Media:Jacobs-I2-2.swf Media:Jacobs-I2-3.swf Media:Jacobs-I2-4.swf Media:Jacobs-I2-5.swf
  1. Added cart details panel to keep track of total cost of cart.
  2. Added "Web Site" link to each menu so user can visit the web site of the restaurant.
  3. Added a "Remove all from cart" button to the cart details panel allowing the user to remove all items from their cart at once.
Asmi Joshi Media:Asmi_Part1.swf‎‎
Kashif Khan Media:Kkhan_hw2_p1.swf Media:Kkhan_hw2_p2.swf Media:Kkhan_hw2_p3.swf
Jonathan Lee Media:Jonathan-I2-1.swf Media:Jonathan-I2-2.swf Media:Jonathan-I2-3b.swf Media:Jonathan-I2-4.swf Media:Jonathan-I2-5.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Ben Li Media:BLI-I2-1.swf Media:BLI-I2-2.swf Media:BLI-I2-3b.swf Media:BLI-I2-4.swf Media:BLI-I2-5.swf
  1. Added "Remove All" button
  2. Pull list of building names from http://www.umd.edu/CampusMaps/index.cfm?sort=bld_code&compList=0 (Rehosted because of crossdomain issues)
Wen Li Media:Wen_Stamp1.swf Media:Wen_Stamp2.swf Media:Wen_Stamp3.swf Media:Wen_Stamp4.swf Media:Wen_Stamp5.swf
Justin Lindsey Media:jlindsey-I2-1.swf Media:jlindsey-I2-2.swf Media:jlindsey-I2-3.swf Media:jlindsey-I2-4.swf Media:jlindsey-I2-5.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Ran Liu Media:ran-I2-1.swf Media:ran-I2-2.swf Media:ran-I2-3.swf Media:ran-I2-5.swf Media:ran-I2-5.swf
  1. Adding a total Cost on top of the cart panel to show the total cost of the order.
  2. Adding a clear cart button on top of the cart panel to allow customer to remove all items in the cart.
  3. Adding a Preferred delivery time input in the order panel to allow user to choose best delivery time.
  4. Adding a special item panel. In the special panel the price of the special item is 20% off.
David Moore Part 1 Part 2 Part 3 Part 4
Leyla Norooz Part 1 Part 2 Part 3 Media:swf-I2-4.swf Media:swf-I2-5.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Kelly O'Neil Media:Oneil_Stamp_1.swf Media:Oneil_Stamp_2.swf Media:Oneil_Stamp_3.swf Media:Oneil_Stamp_4.swf Media:swf-I2-5.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Mihir Patel [[]] [[]] [[]] [[]] Media:mihir-i2-Stamp.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits

Q - Z

Name Part 1 Part 2 Part 3 Part 4 Part 5
FirstName LastName Media:swf-I2-1.swf Media:swf-I2-2.swf Media:swf-I2-3.swf Media:swf-I2-4.swf Media:swf-I2-5.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Brian Ramnarain Media:ramnarain_Stamp.swf Media:ramnarain_Stamp2.swf Media:ramnarain_Stamp3.swf Media:ramnarain_Stamp4.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Corey Richardson Media:richardson-I2-1.swf Media:richardson-I2-2.swf Media:richardson-I2-3.swf Media:richardson-I2-4.swf
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Luis Sanchez Stamp Part 1 Stamp Part 2 Stamp Part 3 Stamp Part 4 Extra Credit
  1. Added a remove all button
  2. Added a quantity numeric stepper so you don't have to keep clicking add
  3. Wait time display which adds 2 minutes for every item
Nidhi Sethi Stamp Part 1 Stamp Part 2 Stamp Part 3 Stamp Part 3 Stamp Part 3
  1. Extension for extra credits
  2. Extension for extra credits
  3. Extension for extra credits
Anand Shroff Media:Ashroff-I2-1.swf Media:Ashroff-I2-2.swf Media:Ashroff-I2-3.swf Media:Ashroff-I2-4.swf Media:Ashroff-I2-5.swf
  1. Total price displays in cart panel
  2. Show basic ingredients button
  3. Button that clears the cart
Cody Smith Media:csmith71_I2_stamp_1.swf Media:csmith71_I2_stamp_2.swf Media:csmith71_I2_stamp_3.swf Media:csmith71_I2_stamp_4.swf Media:csmith71_I2_stamp_5.swf
  1. Number of tems in cart and remove all with confirmation when more then 1 item.
  2. Submit button empties cart and does not allow to submit empty cart.
  3. Total cost of order tracked and reminded of at submission.
Adam Stephenson Media:gladst4-I2-Part1.swf Media:gladst4-I2-Part2.swf Media:gladst4-I2-Part3.swf Media:gladst4-I2-Part4.swf
JamesTarkenton Media:jtark_stamp_1.swf
David Thomas Media:DThom-Stamp_p1.swf Media:DThom-Project2p2.swf Media:DThom-Project2p3.swf
Mekias Yohannes Media:Yohannes-I2-1.swf Media:Mekias_I2_2.swf Media:Mekias-I2-3.swf Media:Mekias-I2-4.swf Media:Mekias-I2-5.swf
  1. Total Cost Calculator
  2. Clear Cart Option
  3. Website link to each restaurant