Найти в Дзене
Экзамен по инфе

Базовая заготовка

//Всё это в Program.cs

про using LiteDB; не забудь

internal static class Program

{

public static ILiteCollection<Avtoriz> _colAvtoriz;

public static ILiteCollection<Product> _colProduct;


[STAThread]

static void Main()

{

var database = new LiteDatabase("baza.db");
_colAvtoriz = database.GetCollection<Avtoriz>("avtoriz");
_colProduct = database.GetCollection<Product>("product");

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());

}

}

END;

//На форме1 добавить событие при загрузке юзер контролс предварительно добавив панель в конструкторе

private void Form1_Load(object sender, EventArgs e)
{
panel1.Controls.Clear();
panel1.Controls.Add(new Avtorization { });

}

END;

// Добавляем класс Авторизация и исключения под него

public int id { get; set; }
string login;
string password;
string name;

public string Login
{
get => login;
set
{
if (string.IsNullOrEmpty(value))
throw new AvtorizException("Логин не может быть пустым");
login = value;
}
}

public string Password
{
get => password;
set
{
if (string.IsNullOrEmpty(value))
throw new AvtorizException("Пароль не может быть пустым");
if (value.Length < 4)
throw new AvtorizException("Пароль не может быть меньше 4 символов");
password = value;
}
}

public string Name
{
get => name;
set
{
if (string.IsNullOrEmpty(value))
throw new AvtorizException("Имя не может быть пустым");
name = value;
}
}

END;

//Создаём пользовательские исключения для авторизации

internal class AvtorizException : Exception
{
public AvtorizException(string message)
: base(message) { }
}

END;

//Теперь создаём юзерконтролс для регистрации

2 ТекстБокса под логин и пароль соответственно

Три кнопки Вход, Регистрация и Выход

К текстБоксам добавить Лейблы

//НЕ ЗАБУДЬ ПЕРЕИМЕНОВАТЬ КНОПКИ И ТЕКСТБОКСЫ!!!

//Далее код на кнопках

private void ToRegistration_Click(object sender, EventArgs e)
{
Controls.Clear();
Controls.Add(new Registration { });
}

private void buttonVhod_Click(object sender, EventArgs e)
{
try
{
Avtoriz user = Program._colAvtoriz.FindOne(a => a.Login == textBoxLogin.Text && a.Password == textBoxPassword.Text);


if (user == null) throw new AvtorizException("Авторизация не пройдена");


MessageBox.Show($"Здравствуйте {user.Name}!");
Controls.Clear();
Controls.Add(new Menu { });
}
catch (AvtorizException ex)
{
MessageBox.Show(ex.Message);
}
}

private void buttonExit_Click(object sender, EventArgs e)
{
Application.Exit();
}

END;

//Далее юзерконтрол для регистрации

три текстБокса с лейблами для логина пароля и регистрации соответственно

две кнопки Регистрация и Выход

//Код на кнопках

private void buttonRegistration_Click(object sender, EventArgs e)
{
try
{
Avtoriz avtoriz = new Avtoriz();
avtoriz.Login = textBoxLogin.Text;
avtoriz.Password = textBoxPassword.Text;
avtoriz.Name = textBoxName.Text;
avtoriz.id = (Program._colAvtoriz.Count() > 0) ? Program._colAvtoriz.Max(a => a.id) + 1 : 1; //Одна строка с прошлой


Program._colAvtoriz.Insert(avtoriz);
MessageBox.Show("Регистрация успешна");
Controls.Clear();
Controls.Add(new Avtorization { });
} catch (AvtorizException ex)
{
MessageBox.Show(ex.Message);
}
}

private void buttonExit_Click(object sender, EventArgs e) {
Application.Exit(); }

END;

//Далее делаем юзерконтрол Меню

// Один лейбл с текстом Меню по середине и три кнопки План Выход и Авторизация

//Код на кнопки

//На Выход тоже что и в прошлый раз. На Авторизации Выкидывает к юзерконтрл со входом.

//Кнопка план переименовывается в соответствии с заданием

private void buttonPlan_Click(object sender, EventArgs e)
{
Controls.Clear();
Controls.Add(new plan11 { });
}

END;

//Далее делаем класс для задания и пользовательские исключения для него

//Пример с планом продаж

internal class Product
{
public int id { get; set; }
string name;
int count;
public string Name
{
get => name;
set
{
if (string.IsNullOrEmpty(value))
throw new ProductExeption("Название не может быть пустым");
name = value;
}
}
public int Count
{
get => count;
set
{
if (value < 1)
throw new ProductExeption("Количество не может быть меньше единицы");


count = value;
}
}
}

END;

//Пользовательское исключение

internal class ProductException : Exception
{
public ProductException (string message)
: base(message) { }

}

END;

//Самое сложное юзерконтрол для добавления, удаления, изменения и вывода

DataGridView таблица для вывода добавляем по центру

далее текстовые поля с лейблами

если есть int то используем NumericUpDown меняя инт на децимал

четыре кнопки Назад Добавить Удалить Изменить

//Код кнопок

private void buttonBack_Click(object sender, EventArgs e)
{
Controls.Clear();
Controls.Add(new Menu { });
}

private void buttonAdd_Click(object sender, EventArgs e)
{
try
{
Product product = new Product();
product.Name = textBoxName.Text;
product.Count = (int)numericUpDown1.Value;
product.id = (Program._colProduct.Count() > 0) ? Program._colProduct.Max(a => a.id) + 1 : 1;


Program._colProduct.Insert(product);
MessageBox.Show($"Продукт {product.Name} успешно добавлен!");
Plan_Load(sender, e);
} catch (ProductExeption ex)
{
MessageBox.Show(ex.Message);
}
}

enum Access
{
user = 0,
admin = 1,
}
//Метод для добавления в таблицу
private void Plan_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = Program._colProduct.FindAll().ToList();
}

private void buttonChange_Click(object sender, EventArgs e)
{
try
{
if (_product == null) return;
_product.Name = textBoxName.Text;
_product.Count = (int)numericUpDown1.Value;
Program._colProduct.Update(_product);
MessageBox.Show("Продукт был изменён");
Plan_Load(sender, e);
}
catch (ProductExeption ex)
{
MessageBox.Show(ex.Message);
}

}

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
int id = int.Parse(dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString());
_product = Program._colProduct.FindById(id);
textBoxName.Text = _product.Name;
numericUpDown1.Value = _product.Count;

}

private void buttonDelet_Click(object sender, EventArgs e)
{
try
{
if (_product == null) return;
_product.Name = textBoxName.Text;
_product.Count = (int)numericUpDown1.Value;
Program._colProduct.Delete(_product.id);
MessageBox.Show("Продукт был удалён");
Plan_Load(sender, e);
}
catch (ProductExeption ex)
{
MessageBox.Show(ex.Message);
}
}
}