база данных сотруднико it компании

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Проектирование баз данных
  • 56 56 страниц
  • 20 + 20 источников
  • Добавлена 30.05.2023
1 496 руб.
  • Содержание
  • Часть работы
  • Список литературы
СОДЕРЖАНИЕ
Введение 3
Глава 1 Постановка задачи и выбор метода решения 4
1.1 Постановка задачи 4
1.2 Описание метода решения 5
1.3 Разработка алгоритма решения задачи 9
1.4 Выбор системы программирования 13
Глава 2. Разработка программного приложения 19
2.1 Описание приложения 19
2.2 Реализация функций приложения 24
Заключение 29
Список использованных источников 30
Приложение 1 32

Фрагмент для ознакомления

Close(); }privatevoidотделыToolStripMenuItem_Click(object sender, EventArgs e) { Form DepartForm = newDepartForm(); DepartForm.Owner = this;DepartForm.ShowDialog();OutData(); }privatevoidпроектыToolStripMenuItem_Click(object sender, EventArgs e) { Form ProjectForm = newProjectForm(); ProjectForm.Owner = this;ProjectForm.ShowDialog();OutData(); }privatevoidязыкиToolStripMenuItem_Click(object sender, EventArgs e) { Form LanguageForm = newLanguageForm(); LanguageForm.Owner = this;LanguageForm.ShowDialog();OutData(); }privatevoid AddEmployerbtn_Click(object sender, EventArgs e) {idEmployer = 0; Form AddEmployerForm = newAddEmployerForm(); AddEmployerForm.Owner = this;AddEmployerForm.ShowDialog();idEmployer = 0;OutData(); }privatevoid AddEmployerToProjectbtn_Click(object sender, EventArgs e) {idEmployer = tEmployers[EmployersdGV.CurrentRow.Index].Id; Form AddEmployerToProjectForm = newAddEmployerToProjectForm(); AddEmployerToProjectForm.Owner = this;AddEmployerToProjectForm.ShowDialog();OutData(); }privatevoid AddLanguageToEmployerbtn_Click(object sender, EventArgs e) {idEmployer = tEmployers[EmployersdGV.CurrentRow.Index].Id; Form AddLanguageToEmployerForm = newAddLanguageToEmployerForm(); AddLanguageToEmployerForm.Owner = this;AddLanguageToEmployerForm.ShowDialog();OutData(); }privatevoid EmployersdGV_CellClick(object sender, DataGridViewCellEventArgs e) {idEmployer = tEmployers[EmployersdGV.CurrentRow.Index].Id;OutData(); }privatevoid DelEmployerbtn_Click(object sender, EventArgs e){// проверка, есть ли вообще записи в таблицеif (tEmployers.Count > 0) {if (EmployersdGV.CurrentRow.Index >= 0){//убираем все связанные записи из списка сотрудников, занятых на проектахint i = 0;while (i < tProjEmp.Count) { if (tProjEmp[i].IdEmployer == tEmployers[EmployersdGV.CurrentRow.Index].Id){ tProjEmp.RemoveAt(i); } i++; }//убираем все связанные записи из списка языков у сотрудниковi = 0;while (i < tEmpLang.Count) {if (tEmpLang[i].IdEmployer == tEmployers[EmployersdGV.CurrentRow.Index].Id){ tEmpLang.RemoveAt(i); } i++; }//удаляем сотрудника из спискаtEmployers.RemoveAt(EmployersdGV.CurrentRow.Index);idEmployer = 0;OutData(); }else {MessageBox.Show("Выберитесотрудникаизсписка!"); } }else {return; } }privatevoid EditEmployerbtn_Click(object sender, EventArgs e) {idEmployer = EmployersdGV.CurrentRow.Index; Form AddEmployerForm = newAddEmployerForm(); AddEmployerForm.Owner = this;AddEmployerForm.ShowDialog();idEmployer = 0;OutData(); }publicint GetProject(string name) //возврщаетпорядковыйномерпроектавспискепоегоназванию {int i = -1;foreach (ProjectCompany imp in tProjects) {i++;if (imp.NameProject == name) { return i; } }return -1; }publicint GetLanguage(string name) //возврщаетпорядковыйномерязыкавспискепоегоимени {int i = -1;foreach (Language imp in tLanguages) {i++;if (imp.Name == name) {return i; } }return -1; }privatevoid DelEmployerToProjectbtn_Click(object sender, EventArgs e){//удаляет сотрудника из проекта// проверка, есть ли вообще записи в таблицеif (tEmployers.Count > 0) {if (EmployersdGV.CurrentRow.Index >= 0 && ProjectsEmployerdGV.CurrentRow.Index >= 0) {int i = -1;int n = -1;foreach (ProjectEmployers imp in tProjEmp) {i++;if (imp.IdEmployer == tEmployers[EmployersdGV.CurrentRow.Index].Id && ProjectsEmployerdGV.Rows[ProjectsEmployerdGV.CurrentRow.Index].Cells[0].Value.ToString() == GetProject(imp.IdProject)) { n = i;break; } }tProjEmp.RemoveAt(i);idEmployer = 0;OutData(); }else {MessageBox.Show("Выберитесотрудникаипроектизсписков!"); } }else {return; } }privatevoid DelLanguageToEmployerbtn_Click(object sender, EventArgs e){//удаляет язык программирования у сотрудника// проверка, есть ли вообще записи в таблицеif (tEmployers.Count > 0) {if (EmployersdGV.CurrentRow.Index >= 0 && LanguagesToEmployerdGV.CurrentRow.Index >= 0) {int i = -1;int n = -1;foreach (EmployersLanguage imp in tEmpLang) {i++;if (imp.IdEmployer == tEmployers[EmployersdGV.CurrentRow.Index].Id && LanguagesToEmployerdGV.Rows[LanguagesToEmployerdGV.CurrentRow.Index].Cells[0].Value.ToString() == GetLanguage(imp.IdLanguage)) { n = i;break; } }tEmpLang.RemoveAt(i);idEmployer = 0;OutData(); }else {MessageBox.Show("Выберитесотрудникаипроектизсписков!"); } }else {return; } }privatevoidсуммарнаяСтоимостьПроектовToolStripMenuItem_Click(object sender, EventArgs e){//вычисляет суммарную стоимость проектовif (tProjects.Count > 0){int sum = 0;foreach (ProjectCompany imp in tProjects) {sum = sum + imp.Sum; }MessageBox.Show("Суммарнаястоимостьтекущихпроектовравна " + sum.ToString() + " руб.");}else MessageBox.Show("База данных пуста, загрузите данные!");} }}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 ITCompanyApp{publicpartialclassAddEmployerForm : Form {public Employer tmp;publicint id;publicAddEmployerForm() {InitializeComponent(); }privatevoid Cancelbtn_Click(object sender, EventArgs e) {this.Close(); }privatevoid OKbtn_Click(object sender, EventArgs e) {if (SurnametxtBox.Text != "" && FirstnametxtBox.Text != ""&&LastnametxtBox.Text != "" && BirthdaydateTimePicker.Value<=DateTime.Today&& PassporttxtBox.Text != "" && AdresstxtBox.Text != "" && PhonetxtBox.Text != "" && EmailtxtBox.Text != "" && DepartcomboBox.SelectedIndex>=0) { MainForm main = this.Owner as MainForm;if (main != null) {if (main.tEmployers.Count > 0) {id = main.tEmployers[main.tEmployers.Count - 1].Id + 1; }else { id = 1; }if (main.idEmployer != 0) {main.tEmployers[main.idEmployer].Surname= SurnametxtBox.Text;main.tEmployers[main.idEmployer].Firstname= FirstnametxtBox.Text;main.tEmployers[main.idEmployer].Lastname= LastnametxtBox.Text;main.tEmployers[main.idEmployer].Birthday= BirthdaydateTimePicker.Value;main.tEmployers[main.idEmployer].Passport= PassporttxtBox.Text;main.tEmployers[main.idEmployer].Adress= AdresstxtBox.Text;main.tEmployers[main.idEmployer].Phone= PhonetxtBox.Text;main.tEmployers[main.idEmployer].Email= EmailtxtBox.Text;main.tEmployers[main.idEmployer].IdDepart = main.tDeparts[DepartcomboBox.SelectedIndex].Id; }else { Employer tmp = newEmployer(id, SurnametxtBox.Text, FirstnametxtBox.Text, LastnametxtBox.Text, BirthdaydateTimePicker.Value, PassporttxtBox.Text, AdresstxtBox.Text, PhonetxtBox.Text, EmailtxtBox.Text, main.tDeparts[DepartcomboBox.SelectedIndex].Id);main.tEmployers.Add(tmp); } main.idEmployer = 0;this.Close(); } }else { MessageBox.Show("Не все данные заполнены или заполнены некорректно!");return; } }privatevoid AddEmployerForm_Load(object sender, EventArgs e) { MainForm main = this.Owner as MainForm;if (main != null) {if (main.tDeparts.Count > 0) {foreach (Depart imp in main.tDeparts) {string[] s = imp.GetInfo(); DepartcomboBox.Items.Add(s[1]); } }if (main.idEmployer != 0) { SurnametxtBox.Text = main.tEmployers[main.idEmployer].Surname; FirstnametxtBox.Text = main.tEmployers[main.idEmployer].Firstname; LastnametxtBox.Text = main.tEmployers[main.idEmployer].Lastname; BirthdaydateTimePicker.Value = main.tEmployers[main.idEmployer].Birthday; PassporttxtBox.Text = main.tEmployers[main.idEmployer].Passport; AdresstxtBox.Text = main.tEmployers[main.idEmployer].Adress; PhonetxtBox.Text = main.tEmployers[main.idEmployer].Phone; EmailtxtBox.Text = main.tEmployers[main.idEmployer].Email;int k = -1;string s;if (main.tDeparts.Count > 0) {foreach (Depart imp in main.tDeparts) {k++;if (imp.Id == main.tEmployers[main.idEmployer].IdDepart) { s = imp.NameDepart; DepartcomboBox.SelectedItem = s; } } } } } }privatevoid PassporttxtBox_KeyPress(object sender, KeyPressEventArgs e) {//вводтолькоцифри backspaceif (!Char.IsDigit(e.KeyChar) && e.KeyChar != Convert.ToChar(8)) { e.Handled = true; } }privatevoid PhonetxtBox_KeyPress(object sender, KeyPressEventArgs e) {//вводтолькоцифри backspaceif (!Char.IsDigit(e.KeyChar) && e.KeyChar != Convert.ToChar(8)) { e.Handled = true; } } }}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 ITCompanyApp{publicpartialclassDepartForm : Form {public Depart tmp;publicint id;publicDepartForm() {InitializeComponent(); }privatevoid OutData() { MainForm main = this.Owner as MainForm;if (main != null) {DepartdGV.Rows.Clear();int k = 0;foreach (Depart imp in main.tDeparts) {DepartdGV.Rows.Add();string[] s = imp.GetInfo(); DepartdGV.Rows[k].Cells[0].Value = s[0]; DepartdGV.Rows[k].Cells[1].Value = s[1];k++; } } }privatevoid Exitbtn_Click(object sender, EventArgs e) {this.Close(); }privatevoid DepartForm_Load(object sender, EventArgs e) { MainForm main = this.Owner as MainForm;if (main != null) {OutData(); } Savebtn.Enabled = false; }privatevoid AddDepartbtn_Click(object sender, EventArgs e) {if (NameDeparttxtBox.Text != "") { MainForm main = this.Owner as MainForm;if (main != null) {if (main.tDeparts.Count > 0) {id = main.tDeparts[main.tDeparts.Count - 1].Id + 1; }else { id = 1; } Depart tmp = newDepart(id, NameDeparttxtBox.Text);main.tDeparts.Add(tmp);OutData();} }else { MessageBox.Show("Введите название отдела!");return; } }privatevoid DelDepartbtn_Click(object sender, EventArgs e){// проверка, есть ли вообще записи в таблицеMainForm main = this.Owner as MainForm;if (main != null) {if (main.tDeparts.Count > 0) {if (DepartdGV.CurrentRow.Index >= 0) {main.tDeparts.RemoveAt(DepartdGV.CurrentRow.Index);OutData(); }else {MessageBox.Show("Выберитеотделизсписка!"); } }else {return; } } }privatevoid Savebtn_Click(object sender, EventArgs e) {if (NameDeparttxtBox.Text != "") { MainForm main = this.Owner as MainForm;if (main != null) {main.tDeparts[id].NameDepart = NameDeparttxtBox.Text;OutData(); Savebtn.Enabled = false; } }else {MessageBox.Show("Не все данные заполнены!");return; } }privatevoid EditDepartbtn_Click(object sender, EventArgs e){// проверка, есть ли вообще записи в таблицеMainForm main = this.Owner as MainForm;if (main != null) {if (DepartdGV.CurrentRow.Index >= 0) { NameDeparttxtBox.Text = main.tLanguages[DepartdGV.CurrentRow.Index].Name;id = DepartdGV.CurrentRow.Index; Savebtn.Enabled = true; } } } }}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 ITCompanyApp{publicpartialclassProjectForm : Form {public ProjectCompany tmp;publicint id;publicProjectForm() {InitializeComponent(); }privatevoid OutData() { MainForm main = this.Owner as MainForm;if (main != null) {ProjectdGV.Rows.Clear();int k = 0;foreach (ProjectCompany imp in main.tProjects) {ProjectdGV.Rows.Add();string[] s = imp.GetInfo(); ProjectdGV.Rows[k].Cells[0].Value = s[0]; ProjectdGV.Rows[k].Cells[1].Value = s[1]; ProjectdGV.Rows[k].Cells[2].Value = s[2];k++; } } }privatevoid Exitbtn_Click(object sender, EventArgs e) {this.Close(); }privatevoid AddProjectbtn_Click(object sender, EventArgs e) {if (NameProjecttxtBox.Text != "" && SumtxtBox.Text != "") { MainForm main = this.Owner as MainForm;if (main != null) {if (main.tProjects.Count > 0) {id = main.tProjects[main.tProjects.Count - 1].Id + 1; }else { id = 1; } ProjectCompany tmp = newProjectCompany(id, NameProjecttxtBox.Text, Convert.ToInt32(SumtxtBox.Text));main.tProjects.Add(tmp);OutData();} }else { MessageBox.Show("Не все данные заполнены!");return; } }privatevoid ProjectForm_Load(object sender, EventArgs e) { MainForm main = this.Owner as MainForm;if (main != null) {OutData(); } Savebtn.Enabled = false; }privatevoid SumtxtBox_KeyPress(object sender, KeyPressEventArgs e) {//вводтолькоцифри backspaceif (!Char.IsDigit(e.KeyChar) && e.KeyChar != Convert.ToChar(8)) { e.Handled = true; } }privatevoid DelProjectbtn_Click(object sender, EventArgs e){// проверка, есть ли вообще записи в таблицеMainForm main = this.Owner as MainForm;if (main != null) {if (main.tProjects.Count > 0){if (ProjectdGV.CurrentRow.Index >= 0) {//убираем все связанные записи из списка сотрудников, занятых на проектахint i = 0;while (i < main.tProjEmp.Count) {if (main.tProjEmp[i].IdProject == main.tProjects[ProjectdGV.CurrentRow.Index].Id) {main.tProjEmp.RemoveAt(i); }i++; }//убираемвыбранныйпроектmain.tProjects.RemoveAt(ProjectdGV.CurrentRow.Index);OutData(); }else { MessageBox.Show("Выберите название проекта из списка!");} }else {return; } } }privatevoid EditProjectbtn_Click(object sender, EventArgs e){// проверка, есть ли вообще записи в таблицеMainForm main = this.Owner as MainForm;if (main != null) {if (ProjectdGV.CurrentRow.Index >= 0) { NameProjecttxtBox.Text = main.tProjects[ProjectdGV.CurrentRow.Index].NameProject; SumtxtBox.Text = main.tProjects[ProjectdGV.CurrentRow.Index].Sum.ToString();id = ProjectdGV.CurrentRow.Index; Savebtn.Enabled = true; } } }privatevoid Savebtn_Click(object sender, EventArgs e) {if (NameProjecttxtBox.Text != "" && SumtxtBox.Text != "") { MainForm main = this.Owner as MainForm;if (main != null) {main.tProjects[id].NameProject = NameProjecttxtBox.Text;main.tProjects[id].Sum=Convert.ToInt32(SumtxtBox.Text);OutData(); Savebtn.Enabled = false; } }else {MessageBox.Show("Не все данные заполнены!");return; } } }}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 ITCompanyApp{publicpartialclassLanguageForm : Form {public Language tmp;publicint id;publicLanguageForm() {InitializeComponent(); }privatevoid OutData() { MainForm main = this.Owner as MainForm;if (main != null) {LanguagedGV.Rows.Clear();int k = 0;foreach (Language imp in main.tLanguages) {LanguagedGV.Rows.Add();string[] s = imp.GetInfo(); LanguagedGV.Rows[k].Cells[0].Value = s[0]; LanguagedGV.Rows[k].Cells[1].Value = s[1];k++; } } }privatevoid AddLanguagebtn_Click(object sender, EventArgs e) {if (NameLanguagetxtBox.Text != "") { MainForm main = this.Owner as MainForm;if (main != null) {if (main.tLanguages.Count > 0) {id = main.tLanguages[main.tLanguages.Count - 1].Id + 1; }else { id = 1; } Language tmp = newLanguage(id, NameLanguagetxtBox.Text);main.tLanguages.Add(tmp);OutData();} }else { MessageBox.Show("Введите название отдела!");return; } }privatevoid LanguageForm_Load(object sender, EventArgs e) { MainForm main = this.Owner as MainForm;if (main != null) {OutData(); } Savebtn.Enabled = false; }privatevoid Exitbtn_Click(object sender, EventArgs e) {this.Close(); }privatevoid DelLanguagebtn_Click(object sender, EventArgs e){// проверка, есть ли вообще записи в таблицеMainForm main = this.Owner as MainForm;if (main != null) {if (main.tLanguages.Count > 0){if (LanguagedGV.CurrentRow.Index >= 0) {//убираем все связанные записи из списка языков у сотрудниковint i = 0;while (i < main.tEmpLang.Count) {if (main.tEmpLang[i].IdLanguage == main.tLanguages[LanguagedGV.CurrentRow.Index].Id) {main.tEmpLang.RemoveAt(i); }i++; }//удаляемвыбранныйязыкmain.tLanguages.RemoveAt(LanguagedGV.CurrentRow.Index);OutData(); }else {MessageBox.Show("Выберитеязыкизсписка!");} }else {return; } } }privatevoid Savebtn_Click(object sender, EventArgs e) {if (NameLanguagetxtBox.Text != "") { MainForm main = this.Owner as MainForm;if (main != null) {main.tLanguages[id].Name = NameLanguagetxtBox.Text;OutData(); Savebtn.Enabled = false; } }else {MessageBox.Show("Не все данные заполнены!");return; } }privatevoid EditLanguagebtn_Click(object sender, EventArgs e){// проверка, есть ли вообще записи в таблицеMainForm main = this.Owner as MainForm;if (main != null) {if (LanguagedGV.CurrentRow.Index >= 0) { NameLanguagetxtBox.Text = main.tLanguages[LanguagedGV.CurrentRow.Index].Name;id = LanguagedGV.CurrentRow.Index; Savebtn.Enabled = true;} } } }}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 ITCompanyApp{publicpartialclassAddEmployerToProjectForm : Form {public ProjectEmployers tmp;publicint id;publicAddEmployerToProjectForm() {InitializeComponent(); }privatevoid Cancelbtn_Click(object sender, EventArgs e){this.Close(); }privatevoid AddEmployerToProjectForm_Load(object sender, EventArgs e) { MainForm main = this.Owner as MainForm;if (main != null) {if (main.tProjects.Count > 0) {foreach (ProjectCompany imp in main.tProjects) {string[] s = imp.GetInfo(); ProjectNamecomboBox.Items.Add(s[1]); } }if (main.tEmployers.Count > 0) { FIOtxtBox.Text = main.GetFIO(main.idEmployer); } } }privatevoid AddEmployerToProjectbtn_Click(object sender, EventArgs e) {if (ProjectNamecomboBox.SelectedIndex>=0) { MainForm main = this.Owner as MainForm;if (main != null) {if (main.tProjEmp.Count > 0) {id = main.tProjEmp[main.tProjEmp.Count - 1].Id + 1; }else { id = 1; } ProjectEmployers tmp = newProjectEmployers(id, main.tProjects[ProjectNamecomboBox.SelectedIndex].Id, main.idEmployer);main.tProjEmp.Add(tmp);this.Close();} }else { MessageBox.Show("Выберите название проекта!");return; } } }}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 ITCompanyApp{publicpartialclassAddLanguageToEmployerForm : Form {public EmployersLanguage tmp;publicint id;publicAddLanguageToEmployerForm() {InitializeComponent(); }privatevoid Cancelbtn_Click(object sender, EventArgs e) {this.Close(); }privatevoid AddLanguageToEmployerForm_Load(object sender, EventArgs e) { MainForm main = this.Owner as MainForm;if (main != null) {if (main.tLanguages.Count > 0) {foreach (Language imp in main.tLanguages) {string[] s = imp.GetInfo(); LanguagetNamecomboBox.Items.Add(s[1]); } }if (main.tEmployers.Count > 0) { FIOtxtBox.Text = main.GetFIO(main.idEmployer); } } }privatevoid AddEmployerToProjectbtn_Click(object sender, EventArgs e) {if (LanguagetNamecomboBox.SelectedIndex >= 0) { MainForm main = this.Owner as MainForm;if (main != null) {if (main.tEmpLang.Count > 0) {id = main.tEmpLang[main.tEmpLang.Count - 1].Id + 1; }else { id = 1; } EmployersLanguage tmp = newEmployersLanguage(id, main.idEmployer, main.tLanguages[LanguagetNamecomboBox.SelectedIndex].Id);main.tEmpLang.Add(tmp);this.Close();} }else { MessageBox.Show("Выберите название проекта!");return; } } }}

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. ГОСТ 19.401-78. ЕСПД. Текст программы. Требования к содержанию и оформлению. – М.: Изд-во стандартов, 1978.
2. ГОСТ 19.505-79. ЕСПД. Руководство оператора. Требования к содержанию и оформлению. – М.: Изд-во стандартов, 1977.
3. ГОСТ 19.701-90. ЕСПД. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения. – М.: Изд-во стандартов. – 1990.
4. Ilhom Buriev. Есть ли смысл изучать C# в 2021 году: карьерные перспективы новичка. [Электронный ресурс]. – Режим доступа: https://proglib.io/p/est-li-smysl-izuchat-c-v-2021-godu-karernye-perspektivy-novichka-2021-07-29 (дата обращения – 30 апреля 2023 г.)
5. Белов, В. В. Алгоритмы и структуры данных : учебник / В. В. Белов, В. И. Чистякова. – Москва : КУРС: ИНФРА-М, 2020. – 240 с.
6. Введение в Windows Forms. [Электронный ресурс]. – Режим доступа: https://metanit.com/sharp/windowsforms/1.3.php (дата обращения – 30 апреля 2023 г.)
7. Введение в сериализацию объектов. [Электронный ресурс]. – Режим доступа: https://metanit.com/sharp/tutorial/6.1.php (дата обращения – 30 апреля 2023 г.)
8. Документация по C# [Электронный ресурс]. – Режим доступа: https://docs.microsoft.com/ru-ru/dotnet/csharp/ (дата обращения – 30 апреля 2023 г.)
9. Евдокимов П.В., Дубовик Е.В. Справочник C#. Кратко, быстро, под рукой. – СПб.: Наука и Техника, 2023. – 336 с.
10. Казанский А.А. Программирование на Visual C# 2013: учеб. пособие для СПО / А.А. Казанский.- М.: Издательство Юрайт, 2019. – 191 с.
11. Как работают базы данных в IT: разбор на примерах. [Электронный ресурс] – Режим доступа: https://practicum.yandex.ru/blog/chto-takoe-bazy-dannyh/ (дата обращения – 30 апреля 2023 г.)
12. Колдаев, В. Д. Основы алгоритмизации и программирования : учебное пособие / В.Д. Колдаев ; под ред. проф. Л.Г. Гагариной. – Москва : ФОРУМ : ИНФРА-М, 2019. – 416 с.
13. Маляров, А. Н. Объектно-ориентированное программирование : учебник для технических вузов / А. Н. Маляров. – М.: Профтехобразование, 2022. – 334 c.
14. Новиков Б.А. Основы технологий баз данных: учебное пособие / Б.А. Новиков, Е.А. Горшкова, Н.Г. Графеева; под ред. Е.В. Рогова. – 2-е изд. – М.: ДМК Пресс, 2020. – 582 с.
15. Практика программирования на С# для Windows и Web в Microsoft Visual Studio. [Электронный ресурс]. – Режим доступа: http://wladm.narod.ru/C_Sharp/index.html (дата обращения – 30 апреля 2023 г.)
16. Различия между C# и другими языками программирования: яблоки, апельсины и немного C-Sharp. [Электронный ресурс]. – Режим доступа: https://habr.com/ru/companies/otus/articles/723460/ (дата обращения – 30 апреля 2023 г.)
17. Разбираемся с Сериализацией в C#. [Электронный ресурс]. – Режим доступа: https://www.nookery.ru/serialization/ (дата обращения – 30 апреля 2023 г.).
18. Список List. [Электронный ресурс]. – Режим доступа: https://metanit.com/sharp/tutorial/4.5.php (дата обращения – 30 апреля 2023 г.).
19. Тюкачев Н. А., Хлебостроев В. Г. C#. Основы программирования: Учебное пособие. – 3_е изд., стер. – СПб.: Издательство «Лань», 2018. – 272 с.
20. Язык программирования С#: история, специфика, место на рынке. [Электронный ресурс]. – Режим доступа: https://gb.ru/posts/yazyk-programmirovaniya-c-sharp-istoriya-specifika-mesto-na-rynke (дата обращения – 30 апреля 2023 г.).