i.c.stars | *
April 16, 2020
Bookstore Database Case
Description
Several i.c.stars alums want to build a small online and community bookstore to sell
technology books. They would like to hire an intern who would develop a rapid prototype of
such a web-based system.
Customers may open an account with the store if they wish including a username and
password. The bookstore is planning to build a web-site that will allow the customers to
perform certain activities on-line.
Front office
The home page for the prototype should list the current books for sale and contain a link
next to each book to add it to the cart. A customer must be logged in before adding books
to their cart. If a user attempts to add a book without being logged in they should be
redirected to the login page.
When a customer adds a book to their cart, they should be taken to a page that shows the
current contents of their cart, including book title, isbn, quantity, and price. From the
shopping cart they can choose to check out, where they will be shown a receipt for their
transaction which they may print. The prototype does not need to handle payment
information. After checking out, the users shopping cart should be emptied. If the user
leaves the site without checking out, their shopping cart should remain active with its
current contents until they return.
Back office
The alums would like the prototype to show the ability to add books to the database,
including the ISBN, Title, and Price. Additionally, they would like to see two reports: the top
5 best customers showing the total amounts they have purchased, and the top 5 best
selling books based on quantity sold, not dollar amount.
Data Model
Book (ISBN, Title, Price)
Customer (FirstName, LastName, UserName, Password)
Cart (UserName, ISBN, Quantity)
CustomerOrder (OrderID, Username, Total)
OrderItem (OrderID, ISBN, Quantity, Price)
Web Forms and Components
addcustomer.aspx – form to insert new customers into the database
default.aspx – home page showing books for sale
login.aspx – login form
addbooks.aspx – form for adding books for sale to the database
addtocart.aspx – shopping cart page that can take a new isbn number to add to the cart via
querystring
receipt.aspx – the receipt page that shows the order details and total amount the customer
purchased
rptbooks.aspx – the best selling books report page
rptcust.aspx – the best customers page
Sample
You can view and play with a working sample of this case at:
http://www.icstars.org/c11bookstore/
Copyright © 2006 i.c.stars.
All Rights Reserved.
1
Bookstore Database Case
i.c.stars | *
April 16, 2020
Workplan
Monday
Setup
1. Create new VS.net project
2. Create bookstore database file in a database subfolder under the new project folder in
inetpub\wwwroot – add all the tables from above to the database
3. Add your DataAccess.vb class file and modify the default web.config file to point at the
new database file using the accessConnection string key in the web.config from a prior
project
Add customers – addcustomer.aspx
1. Create Query called – InsertUser that takes the @FirstName, @LastName, @UserName,
and @Password parameters
2. Create new webform in .net called addcustomer.aspx
3. Add 4 textboxes and a submit button. Set the IDs of the textboxes to firstTxt, lastTxt,
userTxt, and passwordTxt respectively.
4. On submit click event ExecuteNonQuery method to run the InsertUser query with
parameter values from the user interface (see below)
5. set this page as the start page by rightclicking the project icon in vs.net
6. Test – add yourself as a user
Imports System.Data.OleDb
Private Sub SubmitBtn_Click…(created by double-clicking the button on the
design view)
Create a new object called parm(3) as a OleDbParameter – this is an
array containing 4 slots for parameters
Set parm(0) equal to a new OleDbParameter and pass in “@firstname”
and the value of the first name text box
Set parm(1) equal to a new OleDbParameter and pass in “@lastname”
and the value of the last name text box
Set parm(2) equal to a new OleDbParameter and pass in “@username”
and the value of the username text box
Set parm(3) equal to a new OleDbParameter and pass in “@password”
and the value of the password text box
Call the ExecuteNonQuery method of the DataAccess.QueriesOleDb
object and pass in “InsertUser” and the parm object as the method
input parameters
Copyright © 2006 i.c.stars.
All Rights Reserved.
2
Bookstore Database Case
i.c.stars | *
April 16, 2020
Add books
1. Create Query called – InsertBook that takes @isbn, @title, and @price parameters
2. Create new webform in .net called addbooks.aspx
3. Add form elements and submit button
4. On submit click event ExecuteNonQuery method to run the InsertBook query with
parameter values from the user interface (see below)
5. set this page as the start page by rightclicking the project icon in vs.net
6. Test –add about 5 books
Imports System.Data.OleDb
Private Sub SubmitBtn_Click…(created by double-clicking the button on the
design view)
Create
Create a new object called parm(2) as a OleDbParameter – this is
database
an array containing 3 slots for parameters
parameter
object
array
Create
Set parm(0) equal to a new OleDbParameter and pass in “@isbn” and
the isbn
the value of the isbn text box
parameter
Create
Set parm(1) equal to a new OleDbParameter and pass in “@title” and
the title the value of the title text box
parameter
Create
Set parm(2) equal to a new OleDbParameter and pass in “@price” and
the price the value of the price text box
parameter
Execute
Call the ExecuteNonQuery method of the DataAccess.QueriesOleDb
the
object and pass in “InsertBook” and the parm object as the method
insert
input parameters
query to
add the
book to
the
database
Copyright © 2006 i.c.stars.
All Rights Reserved.
3
Bookstore Database Case
i.c.stars | *
April 16, 2020
Tuesday
Login
1. Create Query called – GetUserByCredentials that takes @username and @password
parameters and returns the count of users found matching those credentials
2. Create a new webform in the .net project called login.aspx
3. On submit click of the form, ExecuteScalar query with the values supplied by the user as
parameters and save the return value in a variable called count (see below)
4. If the count = 1 then save the username in a session variable and redirect the user back
to the home page
5. If the count = 0 then tell the user they have given an invalid username/password
6. If the count is anything else tell the user somehow they have more than one username
7. set this page as the start page by rightclicking the project icon in vs.net
8. Test – you should get a page not found error message when it tries to redirect you to a
page that does not yet exist
Imports System.Data.OleDb
Private Sub SubmitBtn_Click…(created by double-clicking the button on the
design view)
Declare a new integer variable called count
Create a new object called parm(1) as a OleDbParameter – this is an
array containing 2 slots for parameters
Set parm(0) equal to a new OleDbParameter and pass in “@username”
and the value of the username text box
Set parm(1) equal to a new OleDbParameter and pass in “@password”
and the value of the password text box
Call the ExecuteScalar method of the DataAccess.QueriesOleDb object
and pass in “GetUserByCredentials” and the parm object as the
method input parameters, and save the result in the count variable
If Count = 1 then
set the value of the Session(“username”) equal to the value of the
username text
Call the Redirect method of the Response object and pass
“default.aspx” as the method parameter
ElseIf count = 0 then
Call the Write method of the Response object with “Invalid username
or password” as the method parameter
Else
Call the Write method of the Response object with “Something crazy
is going on, you have more than one username” as the method
parameter
End If
Copyright © 2006 i.c.stars.
All Rights Reserved.
4
Bookstore Database Case
i.c.stars | *
April 16, 2020
Home page
1. Create Query called – GetAllBooks
2. Create new webform in .net called default.aspx and add a repeater to list ISBN, Title,
Price, and a column for “add to cart” links (see below)
3. Add a repeater to the new webform
4. Add the code on page load to execute the GetAllBooks query and bind to the repeater
5. set this page as the start page by rightclicking the project icon in vs.net
6. Test – you should see the 5 books you added to the database
<table>
<asp:Repeater id="booksRPTR" runat="server">
<HeaderTemplate>
<tr>
<td>ISBN</td>
<td>Title</td>
<td>Price</td>
<td> </td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#DataBinder.Eval (Container.DataItem, "ISBN")%></td>
<td><%#DataBinder.Eval (Container.DataItem, "Title")%></td>
<td><%#DataBinder.Eval (Container.DataItem, "Price")%></td>
<td><a href='addtocart.aspx?isbn=
<%#DataBinder.Eval (Container.DataItem, "ISBN")%>'>
add to cart</a>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
Copyright © 2006 i.c.stars.
All Rights Reserved.
5
Bookstore Database Case
i.c.stars | *
April 16, 2020
Shopping Cart
1. Create relationships in database between the Cart, Book and Customer tables
2. Create Query called – InsertCartBook
3. Create new webform in the .net project called addtocart.aspx
4. Add a repeater to the page containing ISBN, Title, Price, and Quantity columns
5. Add code on page load to check the Session variable containing the username – if none
exists, response.redirect the user to the login page
6. Add code to the page load event to check for an isbn value in the request.querystring, if
one exists, then call the ExecuteNonQuery method to run the InsertCartBook query with
username and isbn and quantity parameter values
7. Create Query called – GetCartForUser that takes a username as a parameter
8. Add code to the page load to execute the GetCartForUser query with the username
parameter and bind to the repeater
9. Test
Imports System.Data.OleDb
Private Sub Page_Load…(created automatically)
Declare a new string variable called username
Declare a new string variable called ISBN
Set the value of username equal to the value of Session(“username”)
If username = “” then
Call the Redirect method of the Response object and pass in
“login.aspx” as the method parameter
Call the End method of the Response object
End if
If (not IsPostback) then
Set the value of ISBN equal to the Request.Querystring(“isbn”)
value from the URL – this was passed in from the home page
addtocart a link
If (ISBN<>””) then
Create a 3 slot parameter array called parm of type OleDbParameter
Create a new parameter for each of the following: username, isbn,
and quantity – you can hardcode the quantity at the value 1
Call ExecuteNonQuery to add the book to the users cart
End if (isbn if)
End if (postback if)
Execute the “GetCartForUser” query and pass in parm(0) as the input
parameter to send in the “username” as the sql query parameter
discussed in step 7 above, store the result in a dataset
Bind the repeater to the dataset
Copyright © 2006 i.c.stars.
All Rights Reserved.
6
Bookstore Database Case
i.c.stars | *
April 16, 2020
Wednesday & Thursday
Checkout
1. Create relationships between the Customer, CustomerOrder, and OrderItem tables
2. Add a checkout button to the shopping cart webform
3. Build a unique orderID for this transaction - based on the number of orders this user has
placed concatenated with their username – e.g. if horopeza has placed 2 orders already
this order id would be horopeza3 – steps 3.1-3.3 describe how
3.1. DB - Create Query called GetUserOrderCount – uses sql count function and takes a
username parameter
3.2. VB - Add code in the checkout button click event to ExecuteScalar the
GetUserOrderCount query with the username from the session and store the result
in a variable called orderCount
3.3. VB - Concatenate the username and the orderCount + 1 to create the orderID
4. Create a new order in the orders table
4.1. DB - Create Query called InsertCustomerOrder that takes username and orderID as
parameters
4.2. VB - ExecuteNonQuery the InsertCustomerOrder query with the username from the
session and the orderID
5. Add the contents of the users cart to their order items
5.1. DB - Create a query called InsertOrderItems that takes username and orderID as
parameters. This query should do an insert using select statement to get the
contents of the cart for this user to add to the orderitem table
5.2. VB - ExecuteNonQuery the InsertOrderItems query with the username from the
session and the orderID from above
6. Get the total $ amount of the order
6.1. DB - Create a query called GetOrderTotal that takes orderID as a parameter – the
query will sum the price * quantity for the order
6.2. VB - ExecuteScalar the GetOrderTotal query with the orderID and save the result
7. Update the customer order record with the total amount of the order
7.1. DB - Create a query called UpdateOrderTotal that takes OrderID and OrderTotal as
parameters
7.2. VB - ExecuteNonQuery the UpdateOrderTotal query with the orderID and the
orderTotal variables
8. Clean out the users cart
8.1. DB - Create a query called DeleteCartForUser with a username parameter
8.2. VB - ExecuteNonQuery the DeleteCartForUser query with the username as
parameter
9. Redirect the user to the receipt.aspx page with the order id as a querystring parameter concatenate a string to accomplish this
Receipt
1. Create Query called – GetOrderDetails that takes an orderID as a parameter
2. Create new webform in the .net project called receipt.aspx
3. Add a repeater to the webform
4. On page load call the query and bind to the repeater using the orderid from the
querystring
Copyright © 2006 i.c.stars.
All Rights Reserved.
7
Bookstore Database Case
i.c.stars | *
April 16, 2020
Friday
Reports
Complete these on your own
Graphical Design
1. Identify design template to use from openwebdesign.org
2. Create a new webform called template.aspx
3. Incorporate html from design template into template.aspx
4. Parse out css, header and footer “include” files and revise template.aspx template to use
them
5. add menu items for home, login, shopping cart, add user, add books, report – mv
customer, report – bestselling books
6. apply the include files and css to existing pages to wrap the application in a design
Updateable quantities in the cart
Add text fields to the cart repeater and add an update quantities button to update the
quantities of books desired
Copyright © 2006 i.c.stars.
All Rights Reserved.
8
Bookstore Database Case
i.c.stars | *
April 16, 2020
Skills
ASP/HTML
Openwebdesign.org integration
Serverside includes
DB
Create tables and define relationships
Creating Composite Keys
Select count query
Multi-table selects using inner join
Transactions – multiple step processes including several queries
Concatenation to build a unique key
Update Query
Delete query
ExecuteScalar
ExecuteNonQuery
ExecuteQuery
ASP.NET
ConfigurationSettings/Web.config
Repeaters
OleDbParameter Arrays
Request.QueryString
Response.Redirect
Control Structure – IF ELSE
WebForm values
Inline ASP calls to a variable
Copyright © 2006 i.c.stars.
All Rights Reserved.
9
Bookstore Database Case