//Всё это в 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);
}
}
}