Presentation is loading. Please wait.

Presentation is loading. Please wait.

CSCI 4230 Homework #3 Group Three Samer Al Jefri * Kevin Odom * David Hood * JD Wells * Philippe Gambling.

Similar presentations


Presentation on theme: "CSCI 4230 Homework #3 Group Three Samer Al Jefri * Kevin Odom * David Hood * JD Wells * Philippe Gambling."— Presentation transcript:

1 CSCI 4230 Homework #3 Group Three Samer Al Jefri * Kevin Odom * David Hood * JD Wells * Philippe Gambling

2 Agenda 1.Site Walkthrough 2.User Interface Design 3.Site Requirements & Code Implementation 4.Collaboration & Development Tools 5.Conclusion – Q&A

3 Samer Al Jefri User Sign-in Validation Ordering a book Order Lookup Site Demonstration

4 JD Wells User Interface and Page Styling

5 Kevin Odom Sign-in Page * Details Page * Shipping Page * Input Validation

6 Sign-in Page Sign-in Components Use Valid E-mail Address Store Info In Session Initiate Shopping Session Return To Previous Page

7 Input Field Validation Controls <asp:RegularExpressionValidator ID="loginRegExValidator" runat="server" ControlToValidate="txtUserName" ErrorMessage="Please, enter a valid email address." ValidationExpression="^\w+[\w\.]*\@(\w+\.)+((com)|(net)|(org)|(edu))$" /> Submission Button

8 protected void cmdLogin_Click(object sender, EventArgs e) { //Clear session for new user Session.Clear(); //Save the user id to the Session Session["userID"] = txtUserName.Text; // Goto default page unless a different path is requested string path = "Default.aspx"; if (Request.Params["returnTo"] != null) { path = Request.Params["returnTo"]; } Response.Redirect(path); }

9 Details Page Detail Components Receive ISBN Display the following: Title Author Price Publication Date Description

10 Database Connection <asp:SqlDataSource ID="BookDetails" runat="server" ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\db.mdb;Persist Security Info=False" ProviderName="System.Data.OleDb" SelectCommand="SELECT * FROM [Books] WHERE ([ISBN] = ?)">

11 Shipping Page Shipping Components Remove Leading & Trailing Whitespace Reject Invalid Characters From Input Ensure Input Length is Reasonable Use Server-side Code For Field Validation

12 Input Field Validation Controls <asp:RequiredFieldValidator ID="nameRequiredFieldValidator" runat="server" ErrorMessage="Required“ ControlToValidate="txtName“ Display="Dynamic"/> <asp:RegularExpressionValidator ID="nameRegExValidator" runat="server" ErrorMessage="Please only enter letters, numbers, spaces, or periods." ControlToValidate="txtName“ ValidationExpression="\s*[a-zA-Z\s\.]+\s*" Display="Dynamic" /> <asp:RegularExpressionValidator ID="nameRegExFirstLast" runat="server" Display="Dynamic" ErrorMessage="Please enter a first and last name, no middle names" ControlToValidate="txtName“ ValidationExpression="\s*[A-Za-z]+\s+[A-Za-z]+\s*" />

13 <asp:RegularExpressionValidator ID="street1RegExValidator" runat="server" ErrorMessage="Please enter a street number and name“ ControlToValidate="txtStreet1“ ValidationExpression="^\d+\s+[A-Za-z\s\.]+“ Display="Dynamic" /> <asp:RequiredFieldValidator ID="zipRequiredFieldValidator" runat="server“ ErrorMessage="Required“ ControlToValidate="txtZip“ Display="Dynamic" /> <asp:RegularExpressionValidator ID="zipRegExValidator" runat="server" ErrorMessage="Please enter in the form of #####.“ ControlToValidate="txtZip“ ValidationExpression="^\d{5}\s*$“ Display="Dynamic" />

14 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Page.Form.DefaultFocus = txtName.ClientID; Page.Form.DefaultButton = cmdShipFormSubmit.UniqueID; // Populate fields with existing shipping info if (Session["ShippingData"] != null) { ShippingData shipping = (ShippingData)Session["ShippingData"]; txtName.Text = shipping.FullName; txtStreet1.Text = shipping.Street1; txtStreet2.Text = shipping.Street2; txtCity.Text = shipping.City; ddState.SelectedValue = shipping.State; txtZip.Text = shipping.Zip; }}}

15 protected void cmdShipFormSubmit_Click(object sender, EventArgs e) { //check for valid page if (!Page.IsValid) { return; } ShippingData shipping = new ShippingData(); shipping.FullName = txtName.Text.ToString(); shipping.Street1 = txtStreet1.Text.ToString(); shipping.Street2 = txtStreet2.Text.ToString(); shipping.City = txtCity.Text.ToString(); shipping.State = ddState.SelectedValue.ToString(); shipping.Zip = txtZip.Text.ToString(); Session["ShippingData"] = shipping; Response.Redirect("Checkout.aspx"); }

16 Invalid Submission

17 David Hood Default Page * Shopping Cart * CartData class

18 The CartData Class Static Methods –getCartFromSession() –saveCartToSession() Public Methods –addItem() –removeItem() –reset() –setQuantity() –getTotal() –exists() –getCartTable()

19 Default Page User Not Logged In User Logged in

20 Default Page Login Restriction Returns Boolean value indicating if user is logged in.

21 Default Page Adding an item to the cart

22 The Shopping Cart

23 Cart GridView control binding

24 Philippe Gambling Checkout Page * Collaboration tools

25 Checkout - Features Ensures user entered shipping information and has items in shopping cart. Creates new order record in the database. Clears shopping cart data. Passes the new order id to the Thank You page.

26 Checkout - Features A user who tries to checkout with an empty shopping cart only has the options to “Continue Shopping” or “Edit Address”

27 Checkout - Code Examples from Page_Load function for Checkout.aspx Redirecting user to sign-in page or shipping form: if (!Master.CheckLogin()) { Server.Transfer("Login.aspx?returnTo=Checkout.aspx"); } else if (Session["ShippingData"] == null) { // Get shipping info first if not already in session Server.Transfer("Shipping.aspx"); } Used GridView control to display order contents: <asp:GridView ID="cartGridView" runat="server" AutoGenerateColumns="False" EmptyDataText="Your shopping cart is empty. Please select some items before placing your order." CssClass="table"> –GridView DataSource set in Page_Load: cartGridView.DataSource = this.cart.getCartTable(); Hiding specific checkout elements if the shopping cart is empty: // Allow the user to see total price, edit cart, and place order if the cart isn't empty. bool completeOrder = cartGridView.Rows.Count > 0; lblLabelTotal.Visible = completeOrder; lblTotal.Visible = completeOrder; cmdEditCart.Visible = completeOrder; cmdPlaceOrder.Visible = completeOrder;

28 Checkout – New Order Record private int createOrderInDB(string userId, ShippingData address) { // Define DB objects string connectionString = ConfigurationManager.ConnectionStrings["BooksDataSet"].ConnectionString; string insertSQL = "INSERT INTO Orders ("; insertSQL += "UserName, FirstName, LastName, Address, Address2,"; insertSQL += "City, State, Zip, TransactionDate)"; insertSQL += "VALUES ("; insertSQL += "@UserName, @FirstName, @LastName, @Address, @Address2,"; insertSQL += "@City, @State, @Zip, @TransactionDate)"; OleDbConnection conn = new OleDbConnection(connectionString); OleDbCommand cmd = new OleDbCommand(insertSQL, conn); cmd.Parameters.AddWithValue("@UserName", userId); /* OMIITTED SEVERAL cmd.Parameters.AddWithValue for brevity */ cmd.Parameters.AddWithValue("@TransactionDate", DateTime.Now.Date); int orderId = 0; try { conn.Open(); cmd.ExecuteNonQuery(); cmd.CommandText = "SELECT @@Identity"; // Get the new OrderID orderId = (int)cmd.ExecuteScalar(); } catch (Exception err) { lblStatus.Text = "Error creating order record."; lblStatus.Text += err.Message; } finally { conn.Close(); } return orderId; }

29 Collaboration Tools

30 Yahoo Discussion Board Created a “CSCI4230_Group3” board on Yahoo groups. Allowed the team to meet virtually outside of class. Tracked team ideas, questions, and concerns.

31 Google Code Project Hosting Created a project on Google Code. Google provides free hosting for open source projects Services Include: –Version control via Subversion (SVN) –Issue Tracking –Wiki Pages –Source code browsing –Downloads page Our team primarily used the version control and issue tracking features. See http://code.google.com/hosting for more information.http://code.google.com/hosting

32 Team Workflow 1.Discussed tasks on Yahoo board. 2.Used Subversion to share files and updates. –SVN workflow: check out->modify->update->commit –Team can work on all files concurrently. SVN merges all the file updates for you. 3.Published files to DCM server. –SVN always has the latest files, so we could safely overwrite anything on DCM.

33 Conclusion

34 Thank you! Questions?


Download ppt "CSCI 4230 Homework #3 Group Three Samer Al Jefri * Kevin Odom * David Hood * JD Wells * Philippe Gambling."

Similar presentations


Ads by Google