Задание
Разработать приложение для отдела кадров и производственного отдела предприятия, с целью ведения учета сотрудников, выполненных ими работ, отработанного времени и начисления зарплаты.
Функционал программы
- Учет работ
- Учет сотрудников
- Учет рабочего времени и расчет зарплаты
- добавление / изменение / удаление данных
Использованные технологии
- язык C#
- WPF + WINFORMS
- SQL SERVER и SQLITE
- среда разработки Visual Studio 2019 / 2022
Содержание отчета к программе
- Оглавление
- Введение. 4
- 1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ.. 7
- 1.1 Информационное обеспечение задачи. 7
- 1.2. Обзор и анализ существующих программных решений. 8
- 1.3 Техническое задание на разработку приложения «Менеджмент рабочего времени» 9
- 2 АНАЛИЗ СРЕД И ЯЗЫКОВ КАК ИНСТРУМЕНТОВ РЕАЛИЗАЦИИ.. 11
- 2.1 Язык высокого уровня C#. 11
- 2.2 Windows Forms или Windows Presentation Foundation. 12
- 2.3. Выбор состава технических и программных средств. 15
- 3 РАЗРАБОТКА ПРИЛОЖЕНИЯ МЕНЕДЖМЕНТ РАБОЧЕГО ВРЕМЕНИ НА ЯЗЫКЕ C#. 21
- 3.1 Постановка задачи. 21
- 3.2 Физическая структура базы данных. 22
- 3.3 Физическая структура программы.. 27
- 3.4 Разработка пользовательского интерфейса. 32
- 3.5 Инструкция пользователя. 40
- ЗАКЛЮЧЕНИЕ. 44
- СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ. 46
- ПРИЛОЖЕНИЯ. 48
Фрагмент программного кода
using System;
using MaterialSkin;
using MaterialSkin.Controls;
using System.Windows.Forms;
using System.Configuration;
using System.Data.SqlClient;
namespace WMS.UI
{
public partial class StatementForm : MaterialForm
{
// Основные Sql параметры
SqlConnection SqlConnection;
public StatementForm()
{
InitializeComponent();
var materialSkinManager = MaterialSkinManager.Instance;
materialSkinManager.AddFormToManage(this);
materialSkinManager.Theme = MaterialSkinManager.Themes.LIGHT;
materialSkinManager.ColorScheme = new ColorScheme(Primary.BlueGrey800, Primary.BlueGrey900, Primary.BlueGrey500, Accent.LightBlue200, TextShade.WHITE);
}
private async void StatementForm_Load(object sender, EventArgs e)
{
// TODO: данная строка кода позволяет загрузить данные в таблицу "accountingWorkDBDataSet.Employees". При необходимости она может быть перемещена или удалена.
this.employeesTableAdapter.Fill(this.accountingWorkDBDataSet.Employees);
SqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["Accounting"].ConnectionString); // строка подключения
await SqlConnection.OpenAsync(); // открыли подключение к БД
SqlDataReader sqlReader = null;
SqlCommand command = new SqlCommand("SELECT * FROM [Statement] ", SqlConnection);
try
{
sqlReader = await command.ExecuteReaderAsync();
while (await sqlReader.ReadAsync())
{
listBox1.Items.Add(Convert.ToString(sqlReader["StatementId"]) + " " + Convert.ToString(sqlReader["Date"]) +
" " + Convert.ToString(sqlReader["EmployeeName"]) + " " + Convert.ToString(sqlReader["NumberHours"]) + " " + Convert.ToString(sqlReader["HourlyRate"]) +
" " + Convert.ToString(sqlReader["Salary"]));
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString(), ex.Source.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
sqlReader?.Close(); // закрыли подключение к БД
}
}
private async void ADDguna2Button1_Click(object sender, EventArgs e)
{
if (label7.Visible)
label7.Visible = false;
if (!string.IsNullOrEmpty(DatedateTimePicker1.Text) && !string.IsNullOrWhiteSpace(DatedateTimePicker1.Text) &&
!string.IsNullOrEmpty(EmployeeCb.Text) && !string.IsNullOrWhiteSpace(EmployeeCb.Text) &&
!string.IsNullOrEmpty(HoursTb.Text) && !string.IsNullOrWhiteSpace(HoursTb.Text) &&
!string.IsNullOrEmpty(RateTb.Text) && !string.IsNullOrWhiteSpace(RateTb.Text) &&
!string.IsNullOrEmpty(SalaryTb.Text) && !string.IsNullOrWhiteSpace(SalaryTb.Text))
{
SqlCommand command = new SqlCommand("INSERT INTO [Statement] (Date, EmployeeName, " +
"NumberHours, HourlyRate, Salary) " +
"VALUES(@Date, @EmployeeName, @NumberHours, @HourlyRate, @Salary)", SqlConnection);
command.Parameters.AddWithValue("Date", DatedateTimePicker1.Text);
command.Parameters.AddWithValue("EmployeeName", EmployeeCb.Text);
command.Parameters.AddWithValue("NumberHours", HoursTb.Text);
command.Parameters.AddWithValue("HourlyRate", RateTb.Text);
command.Parameters.AddWithValue("Salary", SalaryTb.Text);
await command.ExecuteNonQueryAsync();
}
else
{
label7.Visible = true;
label7.Text = "Все поля должны быть заполнены!";
}
}
private void CALCguna2Button2_Click(object sender, EventArgs e)
{
double hours;
double rate;
hours = Convert.ToDouble(HoursTb.Text);
rate = Convert.ToDouble(RateTb.Text);
switch (comboBox3.Text)
{
case "*":
SalaryTb.Text = Convert.ToString(hours * rate);
break;
}
}
private async void UpdatetoolStripButton1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
SqlDataReader sqlReader = null;
SqlCommand command = new SqlCommand("SELECT * FROM [Statement] ", SqlConnection);
try
{
sqlReader = await command.ExecuteReaderAsync();
while (await sqlReader.ReadAsync())
{
listBox1.Items.Add(Convert.ToString(sqlReader["StatementId"]) + " " + Convert.ToString(sqlReader["Date"]) +
" " + Convert.ToString(sqlReader["EmployeeName"]) + " " + Convert.ToString(sqlReader["NumberHours"]) + " " + Convert.ToString(sqlReader["HourlyRate"]) +
" " + Convert.ToString(sqlReader["Salary"]));
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString(), ex.Source.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
sqlReader?.Close(); // закрыли подключение к БД
}
}
private void WorkstoolStripButton1_Click(object sender, EventArgs e)
{
WorksWindow works = new WorksWindow();
works.Show();
}
private async void EDITguna2Button2_Click(object sender, EventArgs e)
{
if (label12.Visible)
{
label12.Visible = false;
}
if (!string.IsNullOrEmpty(IdTb.Text) && !string.IsNullOrWhiteSpace(IdTb.Text) &&
!string.IsNullOrEmpty(DatedateTimePicker.Text) && !string.IsNullOrWhiteSpace(DatedateTimePicker.Text) &&
!string.IsNullOrEmpty(EmployeecomboBox.Text) && !string.IsNullOrWhiteSpace(EmployeecomboBox.Text) &&
!string.IsNullOrEmpty(NumberHoursTb.Text) && !string.IsNullOrWhiteSpace(NumberHoursTb.Text) &&
!string.IsNullOrEmpty(HourlyRateTb.Text) && !string.IsNullOrWhiteSpace(HourlyRateTb.Text) &&
!string.IsNullOrEmpty(SalaryTextBox.Text) && !string.IsNullOrWhiteSpace(SalaryTextBox.Text))
{
SqlCommand command = new SqlCommand("UPDATE [Statement] SET [Date]=@Date, " +
"[EmployeeName]=@EmployeeName, [NumberHours]=@NumberHours, [HourlyRate]=@HourlyRate, [Salary]=@Salary " +
"WHERE [StatementId]=@Id", SqlConnection);
command.Parameters.AddWithValue("Id", IdTb.Text);
command.Parameters.AddWithValue("Date", DatedateTimePicker.Text);
command.Parameters.AddWithValue("EmployeeName", EmployeecomboBox.Text);
command.Parameters.AddWithValue("NumberHours", NumberHoursTb.Text);
command.Parameters.AddWithValue("HourlyRate", HourlyRateTb.Text);
command.Parameters.AddWithValue("Salary", SalaryTextBox.Text);
await command.ExecuteNonQueryAsync();
}
else if (!string.IsNullOrEmpty(IdTb.Text) && !string.IsNullOrWhiteSpace(IdTb.Text))
{
label12.Visible = true;
label12.Text = "Все поля должны быть заполнены!";
}
else
{
label12.Visible = true;
label12.Text = "Id должен быть заполнен!";
}
}
private void CALCULATIONguna2Button1_Click(object sender, EventArgs e)
{
double hours;
double rate;
hours = Convert.ToDouble(NumberHoursTb.Text);
rate = Convert.ToDouble(HourlyRateTb.Text);
switch (comboBox1.Text)
{
case "*":
SalaryTextBox.Text = Convert.ToString(hours * rate);
break;
}
}
private void BacktoolStripButton1_Click(object sender, EventArgs e)
{
UserPageWindow userPage = new UserPageWindow();
userPage.Show();
Hide();
}
private void ExittoolStripButton1_Click(object sender, EventArgs e)
{
Application.Exit();
}
private async void DeleteBtn_Click(object sender, EventArgs e)
{
if (label14.Visible)
label14.Visible = false;
if (!string.IsNullOrEmpty(IDTextBox.Text) && !string.IsNullOrWhiteSpace(IDTextBox.Text))
{
SqlCommand command = new SqlCommand("DELETE FROM [Statement] WHERE [StatementId]=@Id", SqlConnection); // sql комманда удаление
command.Parameters.AddWithValue("Id", IDTextBox.Text);
await command.ExecuteNonQueryAsync();
}
else
{
label14.Visible = true;
label14.Text = "Id должен быть заполнен!";
}
}
}
}
Структура проекта

Скриншот архива с проектом


Пояснения по запуску программы
Запустить среду разработки Visual Studio 2019 или же 2022, предварительно скачав ее с оффициального сайта - https://visualstudio.microsoft.com/ru/vs/community/, при установке среды выбирете рабочие нагрузки - Разработка классических приложений на C#. После установки среды разработки запустите проект, смените путь к базе данных на ваш, прописав его в файле App.config, база данных автоматически отобразится в обозревателе серверов и в программе SQL SERVER MANAGEMENT STUDIO, которую вам необходимо будет скачать и установить с оффициального сайта - https://learn.microsoft.com/ru-ru/sql/ssms/download-sql-server-management-studio-ssms?view=azure-sqldw-latest, важно! необходимо выбрать русский язык для инсталлятора.
Телеграм
-