Задание
Разработать приложение для отдела кадров и производственного отдела предприятия, с целью ведения учета сотрудников, выполненных ими работ, отработанного времени и начисления зарплаты.
Функционал программы
- Учет работ
- Учет сотрудников
- Учет рабочего времени и расчет зарплаты
- добавление / изменение / удаление данных
Использованные технологии
- язык 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, важно! необходимо выбрать русский язык для инсталлятора.
admin