I have given assignment below a try and I think I am doing pretty well. I am still missing some stuff though. In the AdminDashboard I am missing functionalities of the 3 buttons, ADD, EDIT,DELETE which controls the dataview grid that is connected to my access database. Also note I want to add another dataview grid which allows to edit the customer database. Help me to implement these functionalities also tell me if I missed any requirements. Thanks!

name of access database just incase you need it : db_users.mdb
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.

TABLE: 
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



Non-functional Requirements:
● 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
a) You need to write code (written in C#) which fulfils all the requirements as outlined above. 
b) The quality of your program will be assessed in terms of program structure, OOP principles in-cluding encapsulation, algorithms using appropriate control structures (loops and selections), and readability including appropriate comments



-----------------------------------------------------------------------------------------------------------------------------------
Form1.cs(login page):
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 OleDbConnec-tion("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 OleDbConnec-tion("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();
            }

            // Checks if user is admin if not then automatically user is assumed to be customer hence database of customer is checked
            if (username == "Admin123" && password == "stcmalta")
            {
                // Open the Admin Dashboard form
                AdminDashboardForm adminDashboardForm = new AdminDashboard-Form();
                adminDashboardForm.Show();
                this.Hide();
            }
            else
            {
                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)
                {
                    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 = '*';
            }
        }
    }
}
RegistrationForm.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.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.ListView;
using static Sys-tem.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
using System.Xml.Linq;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace ApplianceRental
{
    public partial class RegistrationForm : Form
    {
        

        public RegistrationForm() // Add Form1 loginForm as a parameter
        {
            InitializeComponent();


        }
        OleDbConnection con = new OleDbConnec-tion("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db_users.mdb");
        OleDbCommand cmd = new OleDbCommand();
        OleDbDataAdapter da = new OleDbDataAdapter();
        private void Register_Click(object sender, EventArgs e)
        {
            // Validate input fields
           

            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 charac-ters.");
                return;
            }
                else if (!textBox2.Text.Any(char.IsLower) || !text-Box2.Text.Any(char.IsUpper))
            {
                MessageBox.Show("Password must contain at least one lower-case and one uppercase letter.");
                return;
            }

            con.Open();
            string register = "INSERT INTO tbl_users VALUES ('" + text-Box1.Text + "','" + textBox2.Text + "', '" + textBox4.Text + "', '" + text-Box5.Text + "', '" + textBox6.Text + "')";
            cmd = new OleDbCommand(register, con);
            cmd.ExecuteNonQuery();
            con.Close();
            // Successful registration, do something here
            MessageBox.Show("Registration successful!");

            //emptying the fields
            textBox1.Text = "";
            textBox2.Text = "";
            textBox4.Text = "";
            textBox5.Text = "";
            textBox6.Text = "";
            textBox3.Text = "";
            
            this.Hide();
            new Form1().Show();






        }

    }
}
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, Data-GridViewCellEventArgs e)
        {

        }

        private void comboBox1_SelectedIndexChanged(object sender, Even-tArgs 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 = data-GridView1.Rows[i].Cells[0].Value.ToString(); // Assuming Appliance is the first column
                    string applianceInComboBox = com-boBox1.SelectedItem.ToString();

                    if (applianceInGrid == applianceInComboBox)
                    {
                        dataGridView1.ClearSelection();
                        dataGridView1.Rows[i].Selected = true;
                        dataGridView1.CurrentCell = data-GridView1.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");
        }
        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 = data-GridView1.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; // As-suming Power Usage is the second column
                newRow["TypicalUsage"] = selectedRow.Cells[2].Value; // As-suming Typical Usage is the third column
                newRow["AnnualCost"] = selectedRow.Cells[3].Value; // As-suming 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 = Re-gex.Escape(searchBox.Text.Trim()).Replace("'", "''");
                dataView.RowFilter = string.Format("Appliance LIKE '%{0}%'", searchExpression);
                dataGridView1.DataSource = dataView;
            }
        }
    }
}
AdminDashboardForm.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ApplianceRental
{
    public partial class AdminDashboardForm : Form
    {
        public AdminDashboardForm()
        {
            InitializeComponent();
        }

        private void dataGridView1_CellContentClick(object sender, Data-GridViewCellEventArgs e)
        {

        }

        private void Add_Click(object sender, EventArgs e)
        {

        }

        private void Edit_Click(object sender, EventArgs e)
        {

        }

        private void Delete_Click(object sender, EventArgs e)
        {

        }

        private void AdminDashboardForm_Load(object sender, EventArgs e)
        {

        }
    }
}