give 2 classes which are customer and appliance that satisfy the requirements below. below is the assingment with the details as well has my code. note the classes do not have to have any functionalilty but rather just be there to obtain the OOP principles marks aswell use sterlization the classes:
Assingment:
Scenario
You are contracted to develop a home appliance rental application for a local startup
company. The renting business company provides affordable rental services for people
looking to hire home electrical appliances from small to large for a minimum period of time
starting from ONE (1) month. Examples of types of appliances are TV, fridge, freezer,
washing machine, dryer, dishwasher, microwave, etc.
The application should have TWO (2) types of users which are administrator and
customer. An administrator can view, add, edit, and delete an item. A customer can create
an account with a username and password. The usernames can only contain letters and
numbers. The password must be of length between EIGHT (8) and SIXTEEN (16)
characters, and contain at least ONE (1) lowercase and ONE (1) uppercase letter. A
customer can search, view, and order an item after they successfully log in the application.
Your program should include the following requirements.
Functional Requirements:
● Customers can register.
● Customers can search appliances by type and view sorted appliances by energy
consumption (see the table below for some common appliances, or research for
your chosen appliances) or weekly cost. They can also add appliance items to a
shopping cart.
● Calculation of the total price.
● Administrators can add, edit and delete appliance items.
● Log in page for customers and administrators. Appropriately handle the situation
when a reasonable number of failed login attempts occur.
(Hutson, S. (2022). Which appliances use the most energy? Compare The
Market. https://www.comparethemarket.com/energy/content/which-appliances-use-themost-energy/)
Appliance Power usage Typical usage Estimated annual
running costs
LCD TV 0.21kWh per hour 6 hours a day
(power on)
£130
Fridge Freezer (A
spec)
408kWh per year 24 hours a day £115
Tumble Dryer 2.50kWh per cycle 148 uses a year £105
Electric hob 0.71kWh per use 424 uses a year £85
Electric oven 1.56kWh per use 135 uses per year £60
Dishwasher 1.44kWh per use (at
65⁰C)
135 uses per year £55
Kettle 0.11kWh per use
based on heating 1
litre of water
1,542 uses per year £48
 Page 3 of 4
Designing and Developing Object-Oriented Computer Programs © NCC Education Limited 2023
Non-functional Requirements:
● Set up the GUI
● Provide FIVE (5) types of appliances of your choice.
● Each type has TEN (10) appliances.
● Each appliance is rented for a monthly fee.
● Each appliance should have an appropriate description, such as brand, model,
dimensions, colour, energy consumption, monthly fee etc.
● All FIVE (5) types of appliances should have different minimum rental contract
periods starting from ONE (1) month.
● The application users are customers and administrators.
● Provide appropriate errors and help messages, and guidance for customer
Task 1 (60 Marks)
a) You need to design and implement a program (written in C#) which fulfils all the
requirements as outlined above.
(50 marks)
b) The quality of your program will be assessed in terms of program structure, OOP
principles including encapsulation, algorithms using appropriate control structures
(loops and selections), and readability including appropriate comments

--------------------------------------------------------------
My code:
form1.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.Remoting.Lifetime;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Button;

namespace ApplianceRental
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db_users.mdb");
            OleDbCommand cmd = new OleDbCommand();
            OleDbDataAdapter da = new OleDbDataAdapter();
        }
        // Connects to database
        OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db_users.mdb");
        OleDbCommand cmd = new OleDbCommand();
        OleDbDataAdapter da = new OleDbDataAdapter();
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        // Add a counter variable or class level property
        private int failedAttempts = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            string username = textBox1.Text;
            string password = textBox2.Text;
            // Max login attempts
            if (failedAttempts >= 3)
            {
                MessageBox.Show("Maximum login attempts reached. Contact the admin");
                this.Close();
            }

            con.Open();
            string login = "SELECT * FROM tbl_users WHERE username = '" + textBox1.Text + "' and password= '" + textBox2.Text + "'";
            cmd = new OleDbCommand(login, con);
            OleDbDataReader dr = cmd.ExecuteReader();
            if (dr.Read() == true)
            {
                string userType = dr["User Type"].ToString();
                con.Close();

                if (userType == "Admin")
                {
                    // Open the Admin Dashboard form
                    AdminDashboardForm adminDashboardForm = new AdminDashboardForm();
                    adminDashboardForm.Show();
                    this.Hide();
                }
                else
                {
                    new CustomerDashboardForm().Show();
                    this.Hide();
                }
            }
            else
            {
                MessageBox.Show("Invalid username or password! Please try again.");
                failedAttempts++;
            }
            con.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            new RegistrationForm().Show();
            this.Hide();
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            //snippet to unhide password if ticked
            if (checkBox1.Checked)
            {
                textBox2.PasswordChar = '\0';
            }
            else
            {
                textBox2.PasswordChar = '*';
            }
        }

        private void Form1_Load_1(object sender, EventArgs e)
        {

        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {

        }
        private void pictureBox1_Enter(object sender, EventArgs e)
        {
            pictureBox1.TabStop = false;
        }
    }
}

RegistrationForm.cs:
using static System.Windows.Forms.VisualStyles.VisualStyleElement.ListView;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
using System.Collections.Generic;
using System.Data.OleDb;
using System.Net;
using System.Windows.Forms;
using System;
using System.Linq;

namespace ApplianceRental
{
    public partial class RegistrationForm : Form
    {
        private readonly OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db_users.mdb");

        public RegistrationForm()
        {
            InitializeComponent();
        }

        private void Register_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(textBox1.Text))
            {
                MessageBox.Show("Please enter a username.");
                return;
            }

            if (string.IsNullOrEmpty(textBox2.Text))
            {
                MessageBox.Show("Please enter a password.");
                return;
            }

            if (textBox2.Text != textBox3.Text)
            {
                MessageBox.Show("Passwords do not match.");
                return;
            }

            if (string.IsNullOrEmpty(textBox4.Text))
            {
                MessageBox.Show("Please enter your full name.");
                return;
            }

            if (string.IsNullOrEmpty(textBox5.Text))
            {
                MessageBox.Show("Please enter your email address.");
                return;
            }

            if (string.IsNullOrEmpty(textBox6.Text))
            {
                MessageBox.Show("Please enter your address.");
                return;
            }

            if (textBox2.Text.Length < 8 || textBox2.Text.Length > 16)
            {
                MessageBox.Show("Password must be between 8 and 16 characters.");
                return;
            }

            if (!textBox2.Text.Any(char.IsLower) || !textBox2.Text.Any(char.IsUpper))
            {
                MessageBox.Show("Password must contain at least one lowercase and one uppercase letter.");
                return;
            }

            connection.Open();

            using (var cmd = new OleDbCommand())
            {
                cmd.Connection = connection;
                cmd.CommandText = "INSERT INTO tbl_users(username, [password], fullname, email, address, [User Type]) " +
                    "VALUES(@username, @password, @fullname, @email, @address, 'Customer')";

                cmd.Parameters.AddWithValue("@username", textBox1.Text);
                cmd.Parameters.AddWithValue("@password", textBox2.Text);
                cmd.Parameters.AddWithValue("@fullname", textBox4.Text);
                cmd.Parameters.AddWithValue("@email", textBox5.Text);
                cmd.Parameters.AddWithValue("@address", textBox6.Text);

                cmd.ExecuteNonQuery();
            }

            MessageBox.Show("Registration successful!");
            ClearFields();
            this.Hide();
            new Form1().Show();

            connection.Close();
        }

        private void ClearFields()
        {
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            textBox4.Text = "";
            textBox5.Text = "";
            textBox6.Text = "";
        }
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {
        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {
        }

        private void textBox5_TextChanged(object sender, EventArgs e)
        {
        }

        private void textBox6_TextChanged(object sender, EventArgs e)
        {
        }
    }
}

CustomerDashboardForm.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.Remoting.Lifetime;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Net.Mime.MediaTypeNames;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
using System.Text.RegularExpressions;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;

namespace ApplianceRental
{
    public partial class CustomerDashboardForm : Form
    {
        private DataTable cartItems = new DataTable();
        public CustomerDashboardForm()
        {
            InitializeComponent();
            cartItems.Columns.Add("Appliance");
            cartItems.Columns.Add("PowerUsage");
            cartItems.Columns.Add("TypicalUsage");
            cartItems.Columns.Add("AnnualCost");
            // Set dataGridViewCart DataSource
            dataGridViewCart.DataSource = cartItems;
        }

        private void CustomerDashboardForm_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'db_usersDataSet.ApplianceDBLIST' table. You can move, or remove it, as needed.
            this.applianceDBLISTTableAdapter.Fill(this.db_usersDataSet.ApplianceDBLIST);
            BindingSource bindingSource = new BindingSource();
            bindingSource.DataSource = this.db_usersDataSet.ApplianceDBLIST;
            comboBox1.DataSource = bindingSource;
            comboBox1.DisplayMember = "Appliance";  // replace “Appliance” with your actual appliance column name
            dataGridView1.DataSource = bindingSource;
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                if (dataGridView1.Rows[i].Cells[0].Value != null)  // Add this line to check for null values
                {
                    string applianceInGrid = dataGridView1.Rows[i].Cells[0].Value.ToString(); // Assuming Appliance is the first column
                    string applianceInComboBox = comboBox1.SelectedItem.ToString();

                    if (applianceInGrid == applianceInComboBox)
                    {
                        dataGridView1.ClearSelection();
                        dataGridView1.Rows[i].Selected = true;
                        dataGridView1.CurrentCell = dataGridView1.Rows[i].Cells[0];
                        break;
                    }
                }
                }
            }
        private void CalculateTotal()
        {
            decimal totalAmount = 0;

            foreach (DataRow row in cartItems.Rows)
            {
                totalAmount += Convert.ToDecimal(row["AnnualCost"]);
            }

            labelTotalAmount.Text = totalAmount.ToString("C", new System.Globalization.CultureInfo("en-GB"));
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if (comboBox1.SelectedIndex < 0)
            {
                MessageBox.Show("Please select an appliance to add to the cart.");
            }
            else
            {
                // Get the selected row in dataGridView1
                DataGridViewRow selectedRow = dataGridView1.Rows[comboBox1.SelectedIndex];

                // Create a new row for cartItems
                DataRow newRow = cartItems.NewRow();

                newRow["Appliance"] = selectedRow.Cells[0].Value; // Use the column index instead of name
                newRow["PowerUsage"] = selectedRow.Cells[1].Value; // Assuming Power Usage is the second column
                newRow["TypicalUsage"] = selectedRow.Cells[2].Value; // Assuming Typical Usage is the third column
                newRow["AnnualCost"] = selectedRow.Cells[3].Value; // Assuming Estimated Annual Costs is the fourth column

                // Add newRow to the cartItems
                cartItems.Rows.Add(newRow);

                // Calculate and display the total amount
                CalculateTotal();
            }
        }

        private void searchBox_TextChanged(object sender, EventArgs e)
        {
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(searchBox.Text))
            {
                MessageBox.Show("Please enter something to search");
            }
            else
            {
                DataView dataView = db_usersDataSet.ApplianceDBLIST.DefaultView;
                string searchExpression = Regex.Escape(searchBox.Text.Trim()).Replace("'", "''");
                dataView.RowFilter = string.Format("Appliance LIKE '%{0}%'", searchExpression);
                dataGridView1.DataSource = dataView;
            }
        }

        private void flowLayoutPanel1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void labelTotalAmount_TextChanged(object sender, EventArgs e)
        {

        }
    }
}
AdminDashboard.cs:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace ApplianceRental
{
    public partial class AdminDashboardForm : Form
    {
        OleDbDataAdapter sda;
        OleDbCommandBuilder scb;
        DataTable dt;
        OleDbConnection con;
        string connectionString = $@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source = { Path.Combine(Application.StartupPath, "db_users.mdb") }";

        public AdminDashboardForm()
        {
            InitializeComponent();
            con = new OleDbConnection(connectionString);
        }
        private void AdminDashboardForm_Load(object sender, EventArgs e)
        {
        }
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            // Code logic for the event handler
        }

        private void saveButton_Click(object sender, EventArgs e)
        {
            using (OleDbCommand insertCommand = new OleDbCommand("INSERT INTO ApplianceDBLIST ([Appliance], [Power Usage], [Typical Usage], [Estimated Annual Costs]) VALUES (?, ?, ?, ?)", con),
                              updateCommand = new OleDbCommand("UPDATE ApplianceDBLIST SET [Appliance]=?, [Power Usage]=?, [Typical Usage]=?, [Estimated Annual Costs]=? WHERE ID=?", con),
                              deleteCommand = new OleDbCommand("DELETE FROM ApplianceDBLIST WHERE ID=?", con))
            {
                sda.InsertCommand = insertCommand;
                insertCommand.Parameters.Add("@Appliance", OleDbType.VarWChar, 0, "Appliance");
                insertCommand.Parameters.Add("@Power_Usage", OleDbType.VarWChar, 0, "Power Usage");
                insertCommand.Parameters.Add("@Typical_Usage", OleDbType.VarWChar, 0, "Typical Usage");
                insertCommand.Parameters.Add("@Estimated_annual_costs", OleDbType.VarWChar, 0, "Estimated Annual Costs");

                sda.UpdateCommand = updateCommand;
                updateCommand.Parameters.Add("@Appliance", OleDbType.VarWChar, 0, "Appliance");
                updateCommand.Parameters.Add("@Power_Usage", OleDbType.VarWChar, 0, "Power Usage");
                updateCommand.Parameters.Add("@Typical_Usage", OleDbType.VarWChar, 0, "Typical Usage");
                updateCommand.Parameters.Add("@Estimated_annual_costs", OleDbType.VarWChar, 0, "Estimated Annual Costs");
                updateCommand.Parameters.Add("@ID", OleDbType.Integer, 0, "ID");
                updateCommand.UpdatedRowSource = UpdateRowSource.None;

                sda.DeleteCommand = deleteCommand;
                deleteCommand.Parameters.Add("@ID", OleDbType.Integer, 0, "ID");
                deleteCommand.UpdatedRowSource = UpdateRowSource.None;

                con.Open();
                sda.Update(dt);
                con.Close();

                // Refresh the data after updating, to display updated data in DataGridView
                dt.Clear();
                sda.Fill(dt);
            }
        }


        private void button1_Click(object sender, EventArgs e)
        {
            string query = "SELECT * FROM ApplianceDBLIST";
            sda = new OleDbDataAdapter(query, con);
            OleDbCommandBuilder cmdBuilder = new OleDbCommandBuilder(sda);

            dt = new DataTable();
            sda.Fill(dt);
            dataGridView1.DataSource = dt;
        }

        private void label7_Click(object sender, EventArgs e)
        {

        }

        private void label1_Click(object sender, EventArgs e)
        {

        }
    }
}