LoginChoice.aspx

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="LoginChoice.aspx.vb" Inherits="LoginChoice" %>

<!DOCTYPE html>
<html>
<head runat="server">
    <title>Login Choice</title>
    <link rel="stylesheet" href="style.css" />
</head>
<body>
<form id="form1" runat="server">

<div class="container">
    <h2>Login As</h2>

    <asp:Button ID="btnEmployee" runat="server" Text="Employee" CssClass="btn" OnClick="btnEmployee_Click" />
    <br /><br />

    <asp:Button ID="btnCustomer" runat="server" Text="Customer" CssClass="btn" OnClick="btnCustomer_Click" />
</div>

</form>
</body>
</html>

LoginChoice.aspx.vb

Partial Class LoginChoice
 Inherits System.Web.UI.Page

    Protected Sub btnEmployee_Click(sender As Object, e As EventArgs)
  Response.Redirect("EmployeeLogin.aspx")
    End Sub

    Protected Sub btnCustomer_Click(sender As Object, e As EventArgs)
  Response.Redirect("main.aspx")
    End Sub

End Class

employee_dashboard.aspx

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="employee_dashboard.aspx.vb" Inherits="employee_dashboard" %>

<!DOCTYPE html>
<html>
<head runat="server">
    <title>Employee Dashboard</title>
    <link rel="stylesheet" href="style.css" />
</head>
<body>
    <form id="form1" runat="server">

        <header>
            <h1>Employee Dashboard</h1>
        </header>

        <nav>
            <ul>
                <li>
                    <asp:HyperLink ID="hlUpdateCatalog" runat="server" NavigateUrl="update_catalog.aspx" Text="Update Product Catalog" />
                </li>
                <li>
                    <asp:HyperLink ID="hlUpdateCustomer" runat="server" NavigateUrl="update_customer.aspx" Text="Update Customer" />
                </li>
                <li>
                    <asp:Button ID="btnLogout" runat="server" Text="Logout" CssClass="btn" OnClick="btnLogout_Click" />
                </li>
            </ul>
        </nav>

        <div class="container">
            <h2>Welcome, Employee!</h2>
            <p>Select an option from the menu above to proceed.</p>
        </div>

    </form>
</body>
</html>

employee_dashboard.aspx.vb

Imports System
Imports System.Web.UI

Partial Class employee_dashboard
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        If Session("Role") Is Nothing OrElse Session("Role").ToString() <> "Employee" Then
            Response.Redirect("EmployeeLogin.aspx")
        End If
    End Sub

    Protected Sub btnLogout_Click(sender As Object, e As EventArgs)
        Session.Clear()
        Response.Redirect("LoginChoice.aspx")
    End Sub
End Class

CustomerLogin.aspx

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="CustomerLogin.aspx.vb" Inherits="CustomerLogin" %>
<!DOCTYPE html>
<html>
<head runat="server">
    <title>Customer Login</title>
    <link rel="stylesheet" href="style.css" />
</head>
<body>
<form id="form1" runat="server">
<div class="auth-box">
    <h2>Customer Login</h2>
    <asp:TextBox ID="txtUsername" runat="server" Placeholder="Username"></asp:TextBox>
    <asp:TextBox ID="txtPassword" runat="server" TextMode="Password" Placeholder="Password"></asp:TextBox>
    <asp:Button ID="btnLogin" runat="server" Text="Login" CssClass="btn" OnClick="btnLogin_Click" />
    <br />
    <asp:Label ID="lblMsg" runat="server" ForeColor="Red"></asp:Label>
    <br />
    <a href="Register.aspx">Don't have an account? Register</a>
</div>
</form>
</body>
</html>

CustomerLogin.aspx.vb

Imports System.Configuration
Imports System.Data
Imports System.Data.SqlClient

Partial Class CustomerLogin
    Inherits System.Web.UI.Page

    Protected Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
        Dim connStr As String = ConfigurationManager.ConnectionStrings("PVFC").ConnectionString

        Dim query As String = "SELECT Customer_Id, Customer_Name FROM CUSTOMER_t WHERE Email = @email AND User_Password = @pass"

        Using conn As New SqlConnection(connStr)
            Using cmd As New SqlCommand(query, conn)
                cmd.Parameters.AddWithValue("@email", txtUsername.Text.Trim())
                cmd.Parameters.AddWithValue("@pass", txtPassword.Text.Trim())

                Try
                    conn.Open()
                    Dim reader As SqlDataReader = cmd.ExecuteReader()

                    If reader.Read() Then
                        Session("Customer_Id") = reader("Customer_Id")
                        Session("UserName") = reader("Customer_Name").ToString()
                        Session("Role") = "Customer"

                        Response.Redirect("main.aspx")
                    Else
                        lblMsg.Text = "Invalid email or password."
                    End If

                Catch ex As Exception
                    lblMsg.Text = "Database Error: " & ex.Message
                End Try
            End Using
        End Using
    End Sub
End Class

EmployeeLogin.aspx

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="EmployeeLogin.aspx.vb" Inherits="EmployeeLogin" %>
<!DOCTYPE html>
<html>
<head runat="server">
    <title>Employee Login</title>
    <link rel="stylesheet" href="style.css" />
</head>
<body>
<form id="form1" runat="server">
    <div class="auth-box">
        <h2>Employee Login</h2>
        <asp:TextBox ID="txtEmpID" runat="server" Placeholder="Employee ID"></asp:TextBox>
        <asp:TextBox ID="txtPassword" runat="server" TextMode="Password" Placeholder="Password"></asp:TextBox>
        <asp:Button ID="btnLogin" runat="server" Text="Login" CssClass="btn" OnClick="btnLogin_Click" />
        <br />
        <asp:Label ID="lblMsg" runat="server" ForeColor="Red"></asp:Label>
    </div>
</form>
</body>
</html>

EmployeeLogin.aspx.vb

Imports System.Data.SqlClient
Imports System.Configuration

Partial Class EmployeeLogin
    Inherits System.Web.UI.Page

    Dim connStr As String = ConfigurationManager.ConnectionStrings("PVFC").ConnectionString

    Protected Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
        Using conn As New SqlConnection(connStr)
            Dim query As String = "SELECT Employee_Id, Employee_Name FROM EMPLOYEE_t WHERE Employee_Id = @EmpID AND User_Password = @Password"
            Using cmd As New SqlCommand(query, conn)
                cmd.Parameters.AddWithValue("@EmpID", txtEmpID.Text.Trim())
                cmd.Parameters.AddWithValue("@Password", txtPassword.Text.Trim())

                Try
                    conn.Open()
                    Dim reader As SqlDataReader = cmd.ExecuteReader()
                    If reader.Read() Then
                        Session("Employee_Id") = reader("Employee_Id")
                        Session("Employee_Name") = reader("Employee_Name")
                        Session("Role") = "Employee"

                        Response.Redirect("employee_dashboard.aspx")
                    Else
                        lblMsg.Text = "Invalid Employee ID or Password."
                    End If
                Catch ex As Exception
                    lblMsg.Text = "Error: " & ex.Message
                End Try
            End Using
        End Using
    End Sub
End Class

main.aspx

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="main.aspx.vb" Inherits="_main" %>
<!DOCTYPE html>
<html>
<head runat="server">
    <title>Pine Valley Furniture</title>
    <link rel="stylesheet" href="style.css" />
</head>
<body>
    <form id="form1" runat="server">

        <header>
            <h1>Pine Valley Furniture</h1>
        </header>

        <nav>
            <ul>
                <li><a href="main.aspx">Home</a></li>
                <li><a href="register.aspx">Customer Registration</a></li>
                <li><a href="search.aspx">Search Products</a></li>
                <li><a href="Cart.aspx">Cart</a></li>
                <li><a href="help.aspx">Help</a></li>
                <li>
                    <asp:LinkButton ID="btnLogout" runat="server"
                        OnClick="btnLogout_Click">
                        Logout
                    </asp:LinkButton>
                </li>
            </ul>
        </nav>

        <div class="container">
            <h2>Welcome to Pine Valley Furniture</h2>

            <asp:Label ID="lblUser" runat="server" Font-Bold="True"></asp:Label>
            <br /><br />

            <asp:HyperLink ID="ShopNowLink" runat="server" NavigateUrl="search.aspx">
                <asp:Button ID="btnShopNow" runat="server"
                    Text="Shop Now"
                    CssClass="btn" />
            </asp:HyperLink>
        </div>

        <div>
            <a href="dashboard.html" class="btn">Back to lab6</a>
        </div>

        <footer>
            Contact us: 0309-5878126 | Email: pvfc@gmail.com
        </footer>

    </form>
</body>
</html>

main.aspx.vb

Partial Class _main
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load

        If Not IsPostBack Then

            If Session("Customer_Id") IsNot Nothing Then
                lblUser.Text = "Welcome, " & Session("UserName").ToString()
                btnLogout.Visible = True
            Else
                lblUser.Text = "Welcome, Guest"
                btnLogout.Visible = False
            End If

        End If

    End Sub

    Protected Sub btnLogout_Click(sender As Object, e As EventArgs)
        Session.Clear()
        Session.Abandon()
        Response.Redirect("main.aspx")
    End Sub

End Class

Register.aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Register.aspx.vb" Inherits="Register" %>

<!DOCTYPE html>
<html>
<head runat="server">
    <title>Customer Registration</title>
    <link href="style.css" rel="stylesheet" />
</head>
<body>

<form id="form1" runat="server">

<header>
    <h1>Pine Valley Furniture - Customer Registration</h1>
</header>

<nav>
    <ul>
        <li><a href="Main.aspx">Home</a></li>
        <li><a href="Register.aspx">Register</a></li>
        <li><a href="Cart.aspx">Cart</a></li>
    </ul>
</nav>

<div class="container">

    <div class="auth-box">

        <h2>New Customer</h2>

        <asp:TextBox ID="txtCustomerId" runat="server"
            CssClass="input-field" placeholder="Customer ID" />
        <br /><br />

        <asp:TextBox ID="txtEmail" runat="server"
            CssClass="input-field" placeholder="Email" />
        <br /><br />

        <asp:TextBox ID="txtPassword" runat="server"
            CssClass="input-field" placeholder="Password"
            TextMode="Password" />
        <br /><br />

        <asp:TextBox ID="txtName" runat="server"
            CssClass="input-field" placeholder="Customer Name" />
        <br /><br />

        <asp:TextBox ID="txtAddress" runat="server"
            CssClass="input-field" placeholder="Address" />
        <br /><br />

        <asp:TextBox ID="txtCity" runat="server"
            CssClass="input-field" placeholder="City" />
        <br /><br />

        <asp:TextBox ID="txtState" runat="server"
            CssClass="input-field" placeholder="State (2 letters)" />
        <br /><br />

        <asp:TextBox ID="txtPostal" runat="server"
            CssClass="input-field" placeholder="Postal Code" />
        <br /><br />

        <asp:Button ID="btnSubmit" runat="server"
            Text="Register"
            CssClass="btn"
            OnClick="btnSubmit_Click" />
        <br /><br />

        <asp:Label ID="lblMessage" runat="server" />
        <br /><br />

        <asp:LinkButton ID="lnkUpdateCustomer" runat="server" OnClick="lnkUpdateCustomer_Click" CssClass="btn">
            Update Customer Info
        </asp:LinkButton>

        <br /><br />

        <asp:Label ID="lblAccessMsg" runat="server" ForeColor="Red"></asp:Label>

    </div>

</div>

</form>
</body>
</html>

Register.aspx.vb

Imports System.Data.SqlClient
Imports System.Configuration

Partial Class Register
    Inherits System.Web.UI.Page

    Dim connStr As String = ConfigurationManager.ConnectionStrings("PVFC").ConnectionString

    Protected Sub btnSubmit_Click(sender As Object, e As EventArgs)
        Using conn As New SqlConnection(connStr)
            Dim query As String = "INSERT INTO CUSTOMER_t " &
                "(Customer_Id, Customer_Name, Customer_Address, Customer_City, Customer_State, Postal_Code, Email, User_Password, Role_Id) " &
                "VALUES (@Id, @Name, @Address, @City, @State, @Postal, @Email, @Password, 1)"

            Using cmd As New SqlCommand(query, conn)
                cmd.Parameters.AddWithValue("@Id", txtCustomerId.Text)
                cmd.Parameters.AddWithValue("@Name", txtName.Text)
                cmd.Parameters.AddWithValue("@Address", txtAddress.Text)
                cmd.Parameters.AddWithValue("@City", txtCity.Text)
                cmd.Parameters.AddWithValue("@State", txtState.Text)
                cmd.Parameters.AddWithValue("@Postal", txtPostal.Text)
                cmd.Parameters.AddWithValue("@Email", txtEmail.Text)
                cmd.Parameters.AddWithValue("@Password", txtPassword.Text)

                Try
                    conn.Open()
                    cmd.ExecuteNonQuery()

                    lblMessage.ForeColor = Drawing.Color.Green
                    lblMessage.Text = "Customer Registered Successfully!"

                Catch ex As Exception
                    lblMessage.ForeColor = Drawing.Color.Red
                    lblMessage.Text = "Error: " & ex.Message
                End Try

            End Using
        End Using
    End Sub

    Protected Sub lnkUpdateCustomer_Click(sender As Object, e As EventArgs)
        If Session("Role") IsNot Nothing AndAlso Session("Role").ToString() = "Employee" Then
            Response.Redirect("update_customer.aspx")
        Else
            lblAccessMsg.Text = "Access Denied: You need Employee login to access this page."
            Response.AddHeader("REFRESH", "3;URL=EmployeeLogin.aspx")
        End If
    End Sub

End Class

Cart.aspx

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="Cart.aspx.vb" Inherits="Cart" %>
<!DOCTYPE html>
<html>
<head runat="server">
    <title>My Cart</title>
    <link rel="stylesheet" href="style.css" />
</head>
<body>
    <form id="form1" runat="server">
        <h2>My Cart</h2>
        <asp:GridView ID="gvCart" runat="server" AutoGenerateColumns="False" CssClass="cart-table">
            <Columns>
                <asp:BoundField DataField="Product_Description" HeaderText="Product" />
                <asp:BoundField DataField="Quantity" HeaderText="Quantity" />
                <asp:BoundField DataField="Price" HeaderText="Price" DataFormatString="{0:C}" />
                <asp:BoundField DataField="Total" HeaderText="Total" DataFormatString="{0:C}" />
            </Columns>
        </asp:GridView>
        <br />
        <asp:Label ID="lblGrandTotal" runat="server" Text="" Font-Bold="True"></asp:Label>
        <br /><br />
        <asp:Button ID="btnCheckout" runat="server" Text="Proceed to Checkout" PostBackUrl="Payment.aspx" CssClass="btn" />
    </form>
</body>
</html>

Cart.aspx.vb

Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration

Partial Class Cart
    Inherits System.Web.UI.Page

    Private connStr As String = ConfigurationManager.ConnectionStrings("PVFC").ConnectionString

    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        If Not IsPostBack Then
            LoadCart()
        End If
    End Sub

    Private Sub LoadCart()

        If Session("Customer_Id") Is Nothing Then
            Response.Redirect("CustomerLogin.aspx")
            Return
        End If

        Dim customerId As Integer = Convert.ToInt32(Session("Customer_Id"))

        Using conn As New SqlConnection(connStr)

            Dim query As String = "SELECT p.Product_Description, " &
                              "ol.Ordered_Quantity AS Quantity, " &
                              "p.Standard_Price AS Price, " &
                              "(ol.Ordered_Quantity * p.Standard_Price) AS Total " &
                              "FROM ORDER_t o " &
                              "INNER JOIN Order_line_t ol ON o.Order_Id = ol.Order_Id " &
                              "INNER JOIN PRODUCT_t p ON ol.Product_Id = p.Product_Id " &
                              "WHERE o.Customer_Id = @CustomerId " &
                              "AND o.Order_Id = (" &
                              "   SELECT MAX(Order_Id) FROM ORDER_t WHERE Customer_Id = @CustomerId" &
                              ")"

            Using cmd As New SqlCommand(query, conn)
                cmd.Parameters.AddWithValue("@CustomerId", customerId)

                Dim dt As New DataTable()

                Using da As New SqlDataAdapter(cmd)
                    da.Fill(dt)
                End Using

                gvCart.DataSource = dt
                gvCart.DataBind()

                Dim grandTotal As Decimal = 0
                For Each row As DataRow In dt.Rows
                    grandTotal += Convert.ToDecimal(row("Total"))
                Next

                lblGrandTotal.Text = "Grand Total: " & grandTotal.ToString("C")
            End Using
        End Using

    End Sub

End Class

search.aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="search.aspx.vb" Inherits="search" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Search Products - Pine Valley Furniture</title>
    <link rel="stylesheet" href="style.css" />
</head>
<body>

<form id="form1" runat="server">

<header>
    <h1>Search Products</h1>
</header>

<nav>
    <ul>
        <li><a href="main.aspx">Home</a></li>
        <li><a href="Cart.aspx">Cart</a></li>
    </ul>
</nav>

<div class="container">

    <div style="margin-bottom:20px;">

        <asp:Label Text="Search Product:" runat="server" />

        <asp:TextBox 
            ID="txtSearch" 
            runat="server" 
            style="padding:8px; border-radius:6px; border:1px solid #ccc;">
        </asp:TextBox>

        <asp:Button 
            ID="btnSearch"
            runat="server"
            Text="Search"
            CssClass="btn"
            OnClick="btnSearch_Click" />

        <asp:Button 
            ID="btnShowAll"
            runat="server"
            Text="Show All"
            CssClass="btn"
            OnClick="btnShowAll_Click" />

    </div>

    <asp:Label ID="lblMessage" runat="server"></asp:Label>

    <br /><br />

    <div class="product-grid">

        <asp:Repeater ID="rptProducts" runat="server" OnItemCommand="rptProducts_ItemCommand">
            <ItemTemplate>

                <div class="product-card">

                    <div class="image-box"></div>

                    <h3><%# Eval("Product_Description") %></h3>

                    <p>Finish: <%# Eval("Product_Finish") %></p>

                    <p><strong>$ <%# Eval("Standard_Price") %></strong></p>

                    <div style="margin-top:10px;">
                        Quantity:
                        <asp:TextBox 
                            ID="txtQty" 
                            runat="server" 
                            Width="50px"
                            style="padding:5px; border-radius:6px; border:1px solid #ccc;">
                        </asp:TextBox>
                    </div>

                    <asp:Button 
                        ID="btnAdd"
                        runat="server"
                        Text="Add To Cart"
                        CssClass="btn"
                        style="margin-top:10px; width:100%;"
                        CommandName="AddToCart"
                        CommandArgument='<%# Eval("Product_Id") %>' />

                </div>

            </ItemTemplate>
        </asp:Repeater>

    </div>

</div>

</form>
</body>
</html>

search.aspx.vb

Imports System.Data.SqlClient
Imports System.Configuration

Partial Class search
    Inherits System.Web.UI.Page

    Dim connStr As String = ConfigurationManager.ConnectionStrings("PVFC").ConnectionString

    Protected Sub btnSearch_Click(sender As Object, e As EventArgs)

        Dim con As New SqlConnection(connStr)

        Dim query As String = "SELECT Product_Id, Product_Description, Product_Finish, Standard_Price " &
                              "FROM PRODUCT_t WHERE Product_Description LIKE @search"

        Dim cmd As New SqlCommand(query, con)
        cmd.Parameters.AddWithValue("@search", "%" & txtSearch.Text & "%")

        con.Open()
        Dim dr As SqlDataReader = cmd.ExecuteReader()

        rptProducts.DataSource = dr
        rptProducts.DataBind()

        con.Close()

    End Sub

    Protected Sub btnShowAll_Click(sender As Object, e As EventArgs)

        Dim con As New SqlConnection(connStr)

        Dim query As String = "SELECT Product_Id, Product_Description, Product_Finish, Standard_Price FROM PRODUCT_t"

        Dim cmd As New SqlCommand(query, con)

        con.Open()
        Dim dr As SqlDataReader = cmd.ExecuteReader()

        rptProducts.DataSource = dr
        rptProducts.DataBind()

        con.Close()

    End Sub

    Protected Sub rptProducts_ItemCommand(source As Object, e As RepeaterCommandEventArgs)

        If e.CommandName = "AddToCart" Then

            If Session("Customer_Id") Is Nothing Then
                Response.Redirect("CustomerLogin.aspx")
                Exit Sub
            End If

            Dim customerId As Integer = Convert.ToInt32(Session("Customer_Id"))

            Dim productId As Integer = Convert.ToInt32(e.CommandArgument)
            Dim txtQty As TextBox = CType(e.Item.FindControl("txtQty"), TextBox)

            If txtQty.Text = "" Then
                lblMessage.Text = "Enter quantity."
                Exit Sub
            End If

            Dim quantity As Integer = Convert.ToInt32(txtQty.Text)

            Dim con As New SqlConnection(connStr)
            con.Open()

            Dim orderId As Integer = 0

            Dim checkOrderQuery As String =
                "SELECT TOP 1 Order_Id FROM ORDER_t WHERE Customer_Id = @cid AND Order_Date = CAST(GETDATE() AS DATE)"

            Dim cmdCheckOrder As New SqlCommand(checkOrderQuery, con)
            cmdCheckOrder.Parameters.AddWithValue("@cid", customerId)

            Dim result = cmdCheckOrder.ExecuteScalar()

            If result Is Nothing Then

                Dim newIdQuery As String = "SELECT ISNULL(MAX(Order_Id),1000)+1 FROM ORDER_t"
                Dim cmdNewId As New SqlCommand(newIdQuery, con)
                orderId = Convert.ToInt32(cmdNewId.ExecuteScalar())

                Dim insertOrderQuery As String =
                    "INSERT INTO ORDER_t VALUES (@oid, @cid, CAST(GETDATE() AS DATE))"

                Dim cmdInsertOrder As New SqlCommand(insertOrderQuery, con)
                cmdInsertOrder.Parameters.AddWithValue("@oid", orderId)
                cmdInsertOrder.Parameters.AddWithValue("@cid", customerId)

                cmdInsertOrder.ExecuteNonQuery()

            Else
                orderId = Convert.ToInt32(result)
            End If

            Dim checkLineQuery As String =
                "SELECT Ordered_Quantity FROM Order_line_t WHERE Order_Id = @oid AND Product_Id = @pid"

            Dim cmdCheckLine As New SqlCommand(checkLineQuery, con)
            cmdCheckLine.Parameters.AddWithValue("@oid", orderId)
            cmdCheckLine.Parameters.AddWithValue("@pid", productId)

            Dim existingQty = cmdCheckLine.ExecuteScalar()

            If existingQty IsNot Nothing Then

                Dim newQty As Integer = Convert.ToInt32(existingQty) + quantity

                Dim updateQuery As String =
                    "UPDATE Order_line_t SET Ordered_Quantity = @qty WHERE Order_Id = @oid AND Product_Id = @pid"

                Dim cmdUpdate As New SqlCommand(updateQuery, con)
                cmdUpdate.Parameters.AddWithValue("@qty", newQty)
                cmdUpdate.Parameters.AddWithValue("@oid", orderId)
                cmdUpdate.Parameters.AddWithValue("@pid", productId)

                cmdUpdate.ExecuteNonQuery()

            Else

                Dim insertLineQuery As String =
                    "INSERT INTO Order_line_t VALUES (@oid, @pid, @qty)"

                Dim cmdInsertLine As New SqlCommand(insertLineQuery, con)
                cmdInsertLine.Parameters.AddWithValue("@oid", orderId)
                cmdInsertLine.Parameters.AddWithValue("@pid", productId)
                cmdInsertLine.Parameters.AddWithValue("@qty", quantity)

                cmdInsertLine.ExecuteNonQuery()

            End If

            con.Close()

            lblMessage.Text = "Product added to YOUR cart!"

        End If

    End Sub

End Class

update_catalog.aspx

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="update_catalog.aspx.vb" Inherits="update_catalog" %>
<!DOCTYPE html>
<html>
<head runat="server">
    <title>Update Product Catalog</title>
    <link rel="stylesheet" href="style.css" />
</head>
<body>
<form id="form1" runat="server">

<header>
    <h1>Pine Valley Furniture - Update Catalog</h1>
</header>

<nav>
    <ul>
        <li><a href="employee_dashboard.aspx">Dashboard</a></li>
        <li><a href="update_customer.aspx">Update Customer</a></li>
    </ul>
</nav> 

<div class="container">
    <h3>Search Product</h3>
    Product Description:
    <asp:TextBox ID="txtSearch" runat="server" CssClass="input-field" Placeholder="Enter product description"></asp:TextBox>
    <asp:Button ID="btnSearch" runat="server" Text="Search" CssClass="btn" OnClick="btnSearch_Click" /><br /><br />

    <h3>Edit Product</h3>
    Product ID: <asp:Label ID="lblProductID" runat="server"></asp:Label><br /><br />
    Line ID: <asp:TextBox ID="txtLineID" runat="server" CssClass="input-field"></asp:TextBox><br /><br />
    Description: <asp:TextBox ID="txtDesc" runat="server" CssClass="input-field"></asp:TextBox><br /><br />
    Finish: <asp:TextBox ID="txtFinish" runat="server" CssClass="input-field"></asp:TextBox><br /><br />
    Price: <asp:TextBox ID="txtPrice" runat="server" CssClass="input-field"></asp:TextBox><br /><br />

    <asp:Button ID="btnUpdate" runat="server" Text="Update" CssClass="btn" OnClick="btnConfirm_Click" Enabled="False" /><br /><br />

    <asp:Label ID="lblMessage" runat="server" ForeColor="Green"></asp:Label><br /><br />
</div>

</form>
</body>
</html>

update_catalog.aspx.vb

Imports System.Data
Imports System.Data.SqlClient

Partial Class update_catalog
    Inherits System.Web.UI.Page

    Dim connString As String = ConfigurationManager.ConnectionStrings("PVFC").ConnectionString

    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        If Session("Role") Is Nothing OrElse Session("Role").ToString() <> "Employee" Then
            Response.Redirect("LoginChoice.aspx")
        End If
    End Sub

    Protected Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
        If txtSearch.Text.Trim() = "" Then
            Response.Write("<script>alert('Enter a product description');</script>")
            Return
        End If

        Using conn As New SqlConnection(connString)
            Dim cmd As New SqlCommand("SELECT * FROM PRODUCT_t WHERE Product_Description LIKE @desc", conn)
            cmd.Parameters.AddWithValue("@desc", "%" & txtSearch.Text.Trim() & "%")
            conn.Open()
            Dim reader As SqlDataReader = cmd.ExecuteReader()

            If reader.Read() Then
                lblProductID.Text = reader("Product_Id").ToString()
                txtLineID.Text = reader("Product_Line_Id").ToString()
                txtDesc.Text = reader("Product_Description").ToString()
                txtFinish.Text = reader("Product_Finish").ToString()
                txtPrice.Text = reader("Standard_Price").ToString()
                btnUpdate.Enabled = True
            Else
                lblProductID.Text = ""
                txtLineID.Text = ""
                txtDesc.Text = ""
                txtFinish.Text = ""
                txtPrice.Text = ""
                btnUpdate.Enabled = False
                Response.Write("<script>alert('Product not found');</script>")
            End If
        End Using
    End Sub

    Protected Sub btnConfirm_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
        If lblProductID.Text = "" Then
            Response.Write("<script>alert('No product selected to update');</script>")
            Return
        End If

        Using conn As New SqlConnection(connString)
            Dim cmd As New SqlCommand("UPDATE PRODUCT_t SET Product_Line_Id=@lineid, Product_Description=@desc, Product_Finish=@finish, Standard_Price=@price WHERE Product_Id=@id", conn)
            cmd.Parameters.AddWithValue("@lineid", Convert.ToInt32(txtLineID.Text.Trim()))
            cmd.Parameters.AddWithValue("@desc", txtDesc.Text.Trim())
            cmd.Parameters.AddWithValue("@finish", txtFinish.Text.Trim())
            cmd.Parameters.AddWithValue("@price", Convert.ToDecimal(txtPrice.Text.Trim()))
            cmd.Parameters.AddWithValue("@id", Convert.ToInt32(lblProductID.Text))

            conn.Open()
            cmd.ExecuteNonQuery()
        End Using

        lblMessage.Text = "Product updated successfully!"
    End Sub
End Class

update_customer.aspx

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="update_customer.aspx.vb" Inherits="update_customer" %>
<!DOCTYPE html>
<html>
<head runat="server">
    <title>Update Customer</title>
    <link rel="stylesheet" href="style.css" />
</head>

<body>
<form id="form1" runat="server">

<header>
    <h1>Pine Valley Furniture - Update Customer</h1>
</header>

<nav>
    <ul>
        <li><a href="main.aspx">Home</a></li>
        <li><a href="update_catalog.aspx">Update Catalog</a></li>
    </ul>
</nav> 


<div class="container">
    <h3>Search Customer</h3>
    Customer ID:

    <asp:TextBox ID="txtCustomerId" runat="server" CssClass="input-field" Placeholder="Enter Customer ID"></asp:TextBox>
    <asp:Button ID="btnSearch" runat="server" Text="Search" CssClass="btn" OnClick="btnSearch_Click" /><br /><br />

    <h3>Edit Customer</h3>
    Name:
    <asp:TextBox ID="txtName" runat="server" CssClass="input-field"></asp:TextBox><br /><br />
    Address:
    <asp:TextBox ID="txtAddress" runat="server" CssClass="input-field"></asp:TextBox><br /><br />
    City:
    <asp:TextBox ID="txtCity" runat="server" CssClass="input-field"></asp:TextBox><br /><br />
    State:
    <asp:TextBox ID="txtState" runat="server" CssClass="input-field"></asp:TextBox><br /><br />
    Postal Code:
    <asp:TextBox ID="txtPostal" runat="server" CssClass="input-field"></asp:TextBox><br /><br />

    <asp:Button ID="btnUpdate" runat="server" Text="Update" CssClass="btn"
    OnClick="btnUpdate_Click" Enabled="False" /><br /><br />

    <asp:Label ID="lblMessage" runat="server"></asp:Label><br /><br />
    <asp:HyperLink NavigateUrl="employee_dashboard.aspx" runat="server">
        Back
    </asp:HyperLink>

</div>

</form>
</body>
</html>

update_customer.aspx.vb

Imports System.Configuration
Imports System.Data.SqlClient

Partial Class update_customer
    Inherits System.Web.UI.Page

    Dim connStr As String = ConfigurationManager.ConnectionStrings("PVFC").ConnectionString

    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        If Session("Role") Is Nothing OrElse Session("Role").ToString() <> "Employee" Then
            Response.Redirect("LoginChoice.aspx")
        End If
    End Sub

    Protected Sub btnSearch_Click(sender As Object, e As EventArgs)
        If txtCustomerId.Text = "" Then
            lblMessage.Text = "Please enter Customer ID"
            Exit Sub
        End If

        Dim conn As New SqlConnection(connStr)
        Dim query As String = "SELECT * FROM CUSTOMER_t WHERE Customer_Id = " & txtCustomerId.Text
        Dim cmd As New SqlCommand(query, conn)

        Try
            conn.Open()
            Dim reader As SqlDataReader = cmd.ExecuteReader()

            If reader.Read() Then
                txtName.Text = reader("Customer_Name").ToString()
                txtAddress.Text = reader("Customer_Address").ToString()
                txtCity.Text = reader("Customer_City").ToString()
                txtState.Text = reader("Customer_State").ToString()
                txtPostal.Text = reader("Postal_Code").ToString()

                lblMessage.Text = "Customer Found!"
                btnUpdate.Enabled = True
            Else
                lblMessage.Text = "Customer ID does not exist!"
                btnUpdate.Enabled = False
            End If

            conn.Close()
        Catch ex As Exception
            lblMessage.Text = "Error: " & ex.Message
        End Try
    End Sub

    Protected Sub btnUpdate_Click(sender As Object, e As EventArgs)
        Dim conn As New SqlConnection(connStr)
        Dim query As String = "UPDATE CUSTOMER_t SET " &
                              "Customer_Name = '" & txtName.Text & "', " &
                              "Customer_Address = '" & txtAddress.Text & "', " &
                              "Customer_City = '" & txtCity.Text & "', " &
                              "Customer_State = '" & txtState.Text & "', " &
                              "Postal_Code = '" & txtPostal.Text & "' " &
                              "WHERE Customer_Id = " & txtCustomerId.Text
        Dim cmd As New SqlCommand(query, conn)

        Try
            conn.Open()
            cmd.ExecuteNonQuery()
            lblMessage.Text = "Customer Updated Successfully!"
            conn.Close()
        Catch ex As Exception
            lblMessage.Text = "Error: " & ex.Message
        End Try
    End Sub
End Class

Help.aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Help.aspx.vb" Inherits="Help" %>

<!DOCTYPE html>
<html>
<head runat="server">
    <title>Help</title>
    <link rel="stylesheet" href="style.css" />
</head>

<body>

<form id="form1" runat="server">

<header>
    <h1>Help & User Guide</h1>
</header>

<nav>
    <ul>
        <li><a href="main.aspx">Home</a></li>
        <li><a href="Register.aspx">Register</a></li>
        <li><a href="Search.aspx">Search</a></li>
        <li><a href="Cart.aspx">Order</a></li>
    </ul>
</nav>

<div class="container">

<h3>New Customer Registration</h3>
<p>Customers can register by filling their name, address, city, state and postal code.</p>
<p><a href="Register.aspx">Go to Registration Page</a></p>

<hr />

<h3>Search Products</h3>
<p>Users can search products by description and product line.</p>
<p><a href="Search.aspx">Go to Search Page</a></p>

<hr />

<h3>Product Selection & Order Placement</h3>
<p>Customers can select products, enter quantity and place orders.</p>
<p><a href="Cart.aspx">Go to Order Page</a></p>

<hr />

<h3>Product Catalog Update</h3>
<p>Only employees can update product description, finish and price.</p>
<p><a href="Employee_Login.aspx">Employee Login</a></p>

<hr />

<h3>Payment Provision</h3>
<p>Customers can select payment method after placing order.</p>
<p><a href="Payment.aspx">Go to Payment Page</a></p>

</div>

<footer>
    Contact us: 0309-5878126 | Email: hhm@gmail.com
</footer>

</form>

</body>
</html>

Help.aspx.vb

Partial Class Help
    Inherits System.Web.UI.Page

End Class

Payment.aspx

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="payment.aspx.vb" Inherits="_payment" %>

<!DOCTYPE html>
<html>
<head runat="server">
    <title>Payment</title>
    <link rel="stylesheet" href="style.css" />
</head>

<body>
<form id="form1" runat="server">

<header>
    <h1>Payment Options</h1>
</header>

<div class="container">

    <asp:RadioButton ID="rbCash" runat="server" GroupName="Payment" Text="Cash on Delivery" /><br />
    <asp:RadioButton ID="rbCard" runat="server" GroupName="Payment" Text="Credit/Debit Card" /><br />
    <asp:RadioButton ID="rbWallet" runat="server" GroupName="Payment" Text="Other Wallet" /><br /><br />

    <asp:Button ID="btnConfirm"
        runat="server"
        Text="Confirm Payment"
        CssClass="btn"
        OnClick="btnConfirm_Click" /><br /><br />

    <asp:HyperLink ID="hlBack" runat="server" NavigateUrl="main.aspx">Back</asp:HyperLink>

</div>

</form>
</body>
</html>

payment.aspx.vb

Partial Class _payment
    Inherits System.Web.UI.Page

    Protected Sub btnConfirm_Click(sender As Object, e As EventArgs)

        If rbCash.Checked Then
            Response.Write("<script>alert('Cash on Delivery Selected');</script>")
        ElseIf rbCard.Checked Then
            Response.Write("<script>alert('Card Payment Selected');</script>")
        ElseIf rbWallet.Checked Then
            Response.Write("<script>alert('Wallet Selected');</script>")
        Else
            Response.Write("<script>alert('Please select payment method');</script>")
        End If

    End Sub

End Class

style.css

html, body {
    height: 100%;
    margin: 0;
}

body {
    font-family: Arial, sans-serif;
    display: flex;
    flex-direction: column;
    background-color: #FFF2E0;
    color: #2d2d2d;
}

form {
    flex: 1;
    display: flex;
    flex-direction: column;
}

header {
    background: #898AC4;
    color: white;
    padding: 15px;
    text-align: center;
}

nav ul {
    list-style-type: none;
    background-color: #A2AADB;
    padding: 0;
    margin: 0;
    overflow: hidden;
}

nav ul li {
    float: left;
}

nav ul li a {
    display: block;
    color: #FFF2E0;
    padding: 12px 18px;
    text-decoration: none;
}

nav ul li a:hover {
    background-color: #C0C9EE;
    color: #FFF2E0;
}

.container {
    flex: 1;
    padding: 25px;
}

button, .btn {
    padding: 10px 18px;
    background: #A2AADB;
    color: white;
    border: none;
    border-radius: 8px;
    cursor: pointer;
}

button:hover, .btn:hover {
    background: #898AC4;
}

footer {
    background-color: #C0C9EE;
    text-align: center;
    padding: 12px;
    width: 100%;
}

.product-grid {
    display: flex;
    flex-wrap: wrap;
    gap: 20px;
}

.product-card {
    background: #C0C9EE;
    padding: 15px;
    border-radius: 10px;
    width: 200px;
    text-align: center;
}

.image-box {
    width: 100%;
    height: 120px;
    background-color: #A2AADB;
    border-radius: 8px;
    margin-bottom: 10px;
}

.auth-box {
    width: 350px;
    background: white;
    padding: 25px;
    border-radius: 12px;
    box-shadow: 0px 0px 15px rgba(0,0,0,0.2);
    margin: auto;
    margin-top: 120px;
    text-align: center;
}

.auth-box input, .auth-box .btn {
    width: 100%;
    padding: 10px;
    margin-top: 10px;
}