Вы находитесь на странице: 1из 31

Министерство образования и науки России

Федеральное государственное бюджетное


образовательное учреждение высшего образования
«Казанский национальный исследовательский технологический
университет»
(ФГБОУ ВО «КНИТУ»)

_____________________________________________________________
Кафедра «Интеллектуальных систем и управления информационными
ресурсами»
Направление специальность: Прикладная математика и информатика
Тема курсовой работы (проекта): разработка приложения «Записная
книжка»
_____________________________________________________________

КУРСОВОЙ ПРОЕКТ

Заведующий кафедрой____________________________(Кирпичников А.П.)


Руководитель проекта ____________________________(Антонова П.В.)
Студент группы 4361-22___________________________(Байтемирова Э.К.)
Нормоконтролер__________________________________(Антонова П.В.)

Казань 2018г.
Оглавление

Введение...................................................................................................................3
З А Д А Н И Е....................................................................................................4
ЛИСТ НОРМОКОНТРОЛЕРА........................................................................5
ГЛАВА 1. ИССЛЕДОВАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ................................6
ГЛАВА 2. КОНЦЕПТУАЛЬНОЕ ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ......7
2.1. ПЕРЕЧЕНЬ СУЩНОСТЕЙ..........................................................................7
2.2 ПЕРЕЧЕНЬ АТРИБУТОВ.............................................................................7
ГЛАВА 3. ПОДКЛЮЧЕНИЕ БАЗ ДАННЫХ К VISUAL STUDIO,
СОЗДАНИЕ ПРОГРАММЫ И ФОРМ..................................................................9
ГЛАВА 4. КЛАССЫ ДЛЯ СОЗДАНИЯ, УДАЛЕНИЯ, ПОИСКА ДАННЫХ 16
СПИСОК ЛИТЕРАТУРЫ..................................................................................31
Введение
На данный момент в мире все большее распространение получают
компьютерные технологии, с их распространением все больше предприятий
нуждаются в информатизации своих данных.
Целью данной курсовой работы является разработка приложения
«Записная книжка» с помощью полученных знаний при изучении курса
«Визуальное программирование». А также, обучение навыкам
самостоятельной работы для создания сложных программных комплексов.
Интерфейс программы должен быть понятен. Основная функция
программы должна заключается в том, чтобы пользователь программы мог
легко работать с базой персон, обновлять, добавлять, искать необходимые
ему контакты, удалять данные в базе записей.
Перед началом процесса создания проекта были поставлены
следующие задачи:
• проанализировать предметную область;
• создать приложение с использованием Windows Form;
• создать таблицы в sql-сервере, хранимые процедуры для добавления,
удаления, изменения, поиска данных
• изучить возможность подключения sql-сервер к Visual Studio и
работать над кодом.

3
ЗАДАНИЕ
На курсовую работу (проект) студенту кафедры
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
Тема курсовой работы(проекта):
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
Исходные данные к проекту:
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
Содержание расчетно-пояснительной записки (включая перечень
подлежащих разработке вопросов, включая вопросы стандартизации и
контроля качества)
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
Перечень графического материала (схемной документации)
__________________________________________________________________
__________________________________________________________________
Консультанты по проекту (с указанием относящихся к ним разделов)
__________________________________________________________________
__________________________________________________________________
Дата выдачи задания «_____»__________________20___г.
Руководитель проекта _________________(______________________)

4
ЛИСТ НОРМОКОНТРОЛЕРА
1. Лист является обязательным приложением к пояснительной записке
дипломного (курсового) проекта.
2. Нормоконтролер имеет право возвращать документацию без
рассмотрения в случаях:
- нарушения установленной комплектности,
- отсутствия обязательных подписей,
- нечеткого выполнения текстового и графического материала.
3. Устранение ошибок, указанных нормоконтролером, обязательно
Перечень
замечаний и предложений нормоконтролера по дипломному (курсовому)
проекту, студента
__________________________________________________________________
(группа, инициалы, фамилия)
Лист Условное Содержание замечаний и предложений со
(страница) обозначение ссылкой на нормативный документ,
(код ошибок) стандарт или типовую документацию

Дата «____»_________20___г.
Нормоконтролер __________________ _____________________
(подпись) (инициалы, фамилия)

5
ГЛАВА 1. ИССЛЕДОВАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ
Для того что бы компания могла конкурировать с другими, она должна
иметь собственную информационную систему.
Основная задача данного курсового проекта – это сделать работу
пользователей удобнее, а также создать понятный и простой интерфейс для
успешного использования пользователями.
Работа программы устроена следующим образом: в базе данных
хранятся данные о пользователях. С помощью Windows Form мы можем
просматривать данные, а также изменять их, удалять и добавлять. Так же с
помощью приложения можно легко найти информацию о конкретном
человеке по номеру телефона или фамилии.

6
ГЛАВА 2. КОНЦЕПТУАЛЬНОЕ ПРОЕКТИРОВАНИЕ БАЗЫ
ДАННЫХ
Концептуальное проектирование технических систем — построение
семантической модели предметной области, то есть информационной
модели, наиболее высокого уровня абстракции.
При концептуальном проектировании нужно определить информацию,
которая должна храниться в базе данных. Входные данные для нашего
проекта:
• Информация о контактах;
• Информация о типах группы.

2.1. ПЕРЕЧЕНЬ СУЩНОСТЕЙ


Сущность — это собирательное понятие, некоторая абстракция реально
существующего объекта, процесса, явления или некоторого представления об
объекте, информацию о котором требуется хранить в базе данных. В
контактах будет храниться фамилия и имя человека, его адрес электронной
почты, два номера телефона и домашний адрес.
В данной базе данных имеются следующие сущности:
1.Contact
2.TypeContact

2.2 ПЕРЕЧЕНЬ АТРИБУТОВ


Атрибутами называются записи об определенных параметрах
сущностей.
Список атрибутов данной Базы данных:
1. В таблицу Contact входят:
- idContact
-LastName
-FirstName
-Email
7
-phone1
-phone2
-Address
-TypeContact
-FriendContact
-FamilyContact
-BusinessContact

2. В таблицу TypeContact входят:


-id
-TypeName
Результат диаграммы (ER-модель) можно увидеть на рисунке 1.

Рисунок 2 – ER-модель

8
ГЛАВА 3. ПОДКЛЮЧЕНИЕ БАЗ ДАННЫХ К VISUAL STUDIO,
СОЗДАНИЕ ПРОГРАММЫ И ФОРМ

После создания базы данных, нужно создать программу в Visual Studio.


Чтобы подключить SQL - server к Visual Studio, следует прописать ссылку на
доступ к базе данных и обязательно открыть, и закрыть доступ к ней. Код для
теста соединения можно увидеть на рисунке 3.

Рисунок 3- соединение базы данных с Visual Studio

Для того чтобы работа была практичной и легкой в использовании мы


создаем Windows Form. Forms-представляет окно или диалоговое окно,
которое составляет пользовательский интерфейс приложения. Windows Form
форма является видимой поверхностью, на которой отображается
информация для пользователя. Обычно приложение Windows Form строится
путем помещения элементов управления на форму и написанием кода для
реагирования на действия пользователя, такие как щелчки мыши или
нажатия клавиш. User Control- панель, на которой группируются другие
элементы. Как пример, контрол поиска, состоящий из текстового поля,

9
подписи и кнопки, чтобы не копировать и не менять потом по всему проекту
какую-либо настройку мы создаем UserControl и уже его используем везде.
В данном приложении созданы следующие формы и User Control :

Рисунок 3 – Form1

На первой форме есть центральная панель, которая занимает большую


часть формы. Ее основные свойства:

BackColor: Control – цвет фона

Font: Microsoft Sans Serif; 8,25pt – шрифт

Size: 993; 586 – размер панели

BorderStyle: none; - отображает сведения о стиле границы элементы


управления

Dock: fill; - заполняет всю форму

Name: panelcenter; - имя

Modifiers: Private; - модификаторы


10
Далее идет описание панели слева, на которой расположены списки
групп:

BackColor: White;

Dock: left; - заполняет форму слева

Size: 195; 586

Tabindex: 4; - задает последовательность перехода между элементами

Name: panel2;

На этой панели есть кнопки button, нажимая на каждую из них можно


увидеть список лиц, которые попадают в ту или иную группу. Основные
свойства кнопки AllContact:

BlackColor: White;

FlatStyle: flat; - задает плоский вид для кнопки

Image: ContactForm.Properties.Resources.crowd1; - иконки

ImageAlign: MiddleLeft; - позиционирование иконок слева

Text: AllContact;

TextAlign: MiddleLeft; - позиционирование слева;

Size: 189; 57;

Name: btnAll.

11
Рисунок 4- Form2

Основные свойства Form2:

BlackColor: Control

Font: Microsoft Sans Serif; 8,25pt

FormBorderStyle: none; - задает стили границ формы

Text: form2;

Size: 455; 499

12
StartPosition: CenterScreen; - задает начальное положение формы, в этом
случае она будет находится относительно центральной части экрана

Name: form2;

ControlIBox: true; - отображение кнопки оконного меню в строке


заголовка формы

На второй форме существуют Lable: Add Contact, Last Name :, First


Name :, Email: и так далее. Рядом с ними TextBox, туда нужно вводить
соответствующую информацию. В самом низу можно увидеть группы, они
созданы с помощью ChexBox, а кнопка Save с помощью Button.

Рисунок 5- User Control

Свойства User Control:

BlackColor: Control;

13
AutoScaleMode: Font; - масштаб элементов управления будет
изменяться в соответствии с размеров шрифта, который используется в
классах.

Size: 843; 496;

BorderStyle: none;

На UserConrol можно увидеть белую часть, на которой отображаются:


No, LastName, FirestName и так далее. Это DataGridView - отображение
данных в табличном формате. Его основные свойства:

BlackColor: white;

BorderStyle: none;

CellBorderStyle: single; - стиль границы: одинарная граница

Anchor: Top, Bottom, Left, Right; - свойство определяет расстояние


между одной из сторон элемента и стороной контейнера

AutoSizeColumnsMode: Fill; - задает значение, которое указывает как


определяется ширина

Size: 822; 324;

На верху можно увидеть TextBox и кнопки Button Research, Add и


Delete.

На рисунке 6 можно увидеть, как ведет себя программа при запуске:

14
Рисунок 6 - вид формы при запуске

В программе уже есть некоторые данные о пользователях. Как их


внести, удалить и произвести еще какие-либо действия показано во Главе 4.

15
ГЛАВА 4. КЛАССЫ ДЛЯ СОЗДАНИЯ, УДАЛЕНИЯ, ПОИСКА
ДАННЫХ

Для того, чтобы пользователь мог удалять, изменять, добавлять и


находить данные в записной книжке, нужно создать хранимые процедуры в
базе данных и классы в Visual Studio. Хранимая процедура — объект базы
данных, представляющий собой набор SQL-инструкций, который
компилируется один раз и хранится на сервере.
Например, на рисунке 7 можно увидеть хранимую процедуру для
добавления данных, а также класс на рисунке 8, который необходим для
работы данной функции.

Рисунок 7 – хранимая процедура для добавления данных

16
Рисунок 8 – класс для добавления новых данных.
На рисунке 9 и 10 показана работа класса AddContact:

Рисунок 9- заполнение данных

17
Рисунок 10- Результат работы программы

Алгоритм работы класса AddContact: создаем переменную типа bool,


которая отвечает за добавление данных в таблицу. Далее устанавливаем связь
с базой данных и вызываем хранимую процедуру из неё, которую можно
увидеть на рисунке 7. После этого происходит создание параметров lastName,
firstName, email, phone1, phone2, address, friendContact, familyContact,
businessContact. Чтобы передать информацию, которая хранится в базе
данных, нужно чтобы параметры совпадали. Такой алгоритм будет
действовать во всех классах.
Далее создаем еще одну переменную типа int, в которой будет
храниться результат. Проверяем условие и, если оно истинно, добавляем
новые данные в таблицу и после этого обязательно происходит очистка
параметров и обрыв связи.
Второй класс - UpdateContact. Этот класс нужен для обновления
данных. Например, после удаления или добавления новых. На рисунке 9
показана хранимая процедура для обновления, а на рисунке 10 класс.
Алгоритм работы класса UpdateContact идентичен с классом AddContact.

18
Рисунок 11 - хранимая процедура для обновления данных

Рисунок 12 - класс UpdateContact

Для обновления данных применяется событие CellDoubleClick


(двойное нажатие). Если нажать на строку два раза, пользователь будет
обновлять данные. Всплывает окно уточнения «Вы хотите обновить?»
(Рисунок 11)

19
Рисунок 13- окно уточнения
Нажав на кнопку «Yes», можно увидеть успешное обновление данных,
которое показано на рисунке 12.

Рисунок 14 – обновление

20
Третий класс – Delete (удаление данных). На рисунке 13 показана
хранимая процедура для удаления записи, а на рисунке 14 класс Delete.

Рисунок 15 - хранимая процедура

Рисунок 16 - класс Delete

Для того, чтобы удалить данные достаточно выбрать контакт и нажать


на кнопку Delete. Далее всплывает окно уточнения «Вы хотите удалить?»
Нажав на кнопку YES, контакт будет успешно удален. Всплывает окно

21
Successful. (Успешно удалено). Посмотреть, как работает программа можно
на рисунке 16 и 17.

Рисунок 17 - работа программы с уточнением

Рисунок 18 - удаление

Также существует класс для группировки данных. Он нужен для


удобства поиска и сортировки информации. Если в записной книжке много
контактов, то для быстрого поиска гораздо удобнее группировать данные.

22
Рассмотрим пример группировки для группы «Семья». На рисунке 18
показана хранимая процедура, а на 19 рисунке класс displayfamily.

Рисунок 19 - хранимая процедура

Рисунок 20 - класс displayfamily

23
На рисунке 20 можно увидеть, что в группе Family сохранены
отдельные контакты:

Рисунок 21 – группировка данных

24
ЗАКЛЮЧЕНИЕ

Подводя итоги курсового проектирования, можно сделать выводы о


том, что поставленные цели и задачи были успешно выполнены.
При подготовке этого курсового проекта были укреплены знания,
полученные на уроках и учебной практике, и усовершенствованы навыки
программирования на языке Visual Studio и MS SQL Server.
Пользователь может легко управлять интерфейсом и работать с базой
данных: просматривать, удалять и добавлять данные, которые ему
необходимы.
Таким образом можно сделать вывод о том, что созданная программа
будет иметь хороший успех у обычных пользователей для повседневного
использования.

25
ПРИЛОЖЕНИЕ
Класс Connection
namespace ContactForm.Class
{
class DataConnetion
{
protected SqlConnection con = new SqlConnection(); //сылка на доступ к БД
protected SqlDataAdapter da; //получить данные из БД
protected SqlCommand cmd = new SqlCommand(); // добавление, удаление

public void Connecter() // открыть доступ к БД


{
if (con.State==ConnectionState.Closed || con.State==ConnectionState.Broken)
{
con.ConnectionString = @" Data Source=KPVX-PC ;DataBase=CONTACT;
integrated security=true";
con.Open();
}
}

public void Disconecte() // закрыть доступ к БД


{
if (con.State==ConnectionState.Open)
{
con.Close();
}
}
}
}
Класс Profram.cs
namespace ContactForm
{
static class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
Класс Contact
namespace ContactForm.Class
{
class Contact:DataConnetion
{
//idContact int identity(1,1) primary key,
public string lastName {get;set;} //переменные
public string firstName {get;set;}
public string email {get;set;}
public string phone1 {get;set;}
public string phone2 {get;set;}
public string adress {get;set;}
public bool friendContact {get;set;}
public bool familyContact {get;set;}
26
public bool businessContact { get; set; }

// contructeur

public Contact() { }

public Contact(string lastName, string firstName, string email, string phone1,


string phone2, string adress, bool friendContact, bool familyContact, bool
businessContact)
{
this.lastName = lastName;
this.firstName = firstName;
this.email = email;
this.phone1 = phone1;
this.phone2 = phone2;
this.adress = adress;
this.friendContact = friendContact;
this.familyContact = familyContact;
this.businessContact = businessContact;
}

public DataTable Display() // метод который возвращает все элементы, которые есть
в бд
{
DataTable dt = new DataTable();

Connecter(); //связь
cmd.Connection = con;
cmd.CommandText = "DisplayContact"; //вызываем процедуру из БД
cmd.CommandType = CommandType.StoredProcedure;// указали тип
da = new SqlDataAdapter(cmd); // загрузили в да которые
da.Fill(dt); // в data table зрузятся элементы из data adapter
Disconecte(); //закрыли связь
return dt;
}

public bool AddContact() //добавление


{
bool res = false;
Connecter(); //связь с бд
cmd.Connection = con;
cmd.CommandText = "AddContact"; //вызываем процедуру из БД
cmd.CommandType = CommandType.StoredProcedure;// тип
cmd.Parameters.AddWithValue("@lastName", lastName); //создание параметров
cmd.Parameters.AddWithValue("@firstName", firstName);
cmd.Parameters.AddWithValue("@email", email);
cmd.Parameters.AddWithValue("@phone1", phone1);
cmd.Parameters.AddWithValue("@phone2", phone2);
cmd.Parameters.AddWithValue("@adress", adress);
cmd.Parameters.AddWithValue("@friendContact", friendContact);
cmd.Parameters.AddWithValue("@familyContact", familyContact);
cmd.Parameters.AddWithValue("@businessContact", businessContact);
int k = cmd.ExecuteNonQuery(); //результат

if (k>0)
{
res = true;
}
cmd.Parameters.Clear();// очистка параметров
Disconecte(); // оборвали связь

27
return res;

public bool Delete(int id) //удаление


{
bool res = false;
Connecter(); //связь
cmd.Connection = con;
cmd.CommandText = "SPDELETECONTACT"; //вызов процедуры из бд
cmd.CommandType = CommandType.StoredProcedure;//тип
cmd.Parameters.AddWithValue("@ID", id); // параметры

int k = cmd.ExecuteNonQuery();
if (k > 0)
{
res = true;
}
cmd.Parameters.Clear();// очистка параметров
Disconecte();

return res;

public bool UpdateContact(int id) //обновление


{
bool res = false;
Connecter(); //связь
cmd.Connection = con;
cmd.CommandText = "UpdateContact"; //вызов процедуры из БД
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@idContact", id);
cmd.Parameters.AddWithValue("@lastName", lastName);
cmd.Parameters.AddWithValue("@firstName", firstName);
cmd.Parameters.AddWithValue("@email", email);
cmd.Parameters.AddWithValue("@phone1", phone1);
cmd.Parameters.AddWithValue("@phone2", phone2);
cmd.Parameters.AddWithValue("@adress", adress);

int k = cmd.ExecuteNonQuery(); //результат

if (k > 0)
{
res = true;
}
cmd.Parameters.Clear();
Disconecte();

return res;

public DataTable Research(string var,DataGridView dg) //поиск


{
//bool res = false;
Connecter(); //связь
DataTable dt = new DataTable();
cmd.Connection = con;
cmd.CommandText = "reseachContact"; //вызов процедуры из БД
cmd.CommandType = CommandType.StoredProcedure;// указание типа

28
cmd.Parameters.AddWithValue("@phone1", var);

da = new SqlDataAdapter(cmd);
da.Fill(dt); // в data table грузятся элементы из data adapter
dg.Rows.Clear();
foreach (DataRow item in dt.Rows) // прогрузка значений в таблице
{
dg.Rows.Add(item["idContact"].ToString(),
item["lastName"].ToString(), item["firstName"].ToString(), item["email"].ToString(),
item["phone1"].ToString(), item["phone2"].ToString(), item["adress"].ToString());
}

cmd.Parameters.Clear();// очистка параметров


Disconecte();
return dt;

public void displayTy(DataGridView dg)


{
Connecter(); //связь
DataTable dt = new DataTable();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;// указали тип
cmd.CommandText = "spDisplayFriends"; //вызываем процедуру из БД

da = new SqlDataAdapter(cmd); // загрузили в да которые


da.Fill(dt); // в data table зрузятся элементы из data adapter
dg.Rows.Clear();
foreach (DataRow item in dt.Rows) // прогрузили наши значения в таблице
{
dg.Rows.Add(item["idContact"].ToString(), item["lastName"].ToString(),
item["firstName"].ToString(), item["email"].ToString(), item["phone1"].ToString(),
item["phone2"].ToString(), item["adress"].ToString());
}
Disconecte(); // оборвали связь

}
public void displayfamily(DataGridView dg) // групировка данных (семья)
{
Connecter(); //связь
DataTable dt = new DataTable();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "spDisplayFamily";

da = new SqlDataAdapter(cmd);
da.Fill(dt);
dg.Rows.Clear();
foreach (DataRow item in dt.Rows)
{
dg.Rows.Add(item["idContact"].ToString(), item["lastName"].ToString(),
item["firstName"].ToString(), item["email"].ToString(), item["phone1"].ToString(),
item["phone2"].ToString(), item["adress"].ToString());
}
Disconecte(); // оборвали связь

public void displayBusiness(DataGridView dg)


{
29
Connecter(); //связь
DataTable dt = new DataTable();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;// указали тип
cmd.CommandText = "spDisplayBusiness"; //вызываем процедуру из БД

da = new SqlDataAdapter(cmd); // загрузили в да которые


da.Fill(dt); // в data table зрузятся элементы из data adapter
dg.Rows.Clear();
foreach (DataRow item in dt.Rows) // прогрузили наши значения в таблице
{
dg.Rows.Add(item["idContact"].ToString(), item["lastName"].ToString(),
item["firstName"].ToString(), item["email"].ToString(), item["phone1"].ToString(),
item["phone2"].ToString(), item["adress"].ToString());
}
Disconecte(); // оборвали связь

}
}

30
СПИСОК ЛИТЕРАТУРЫ
1. В.В. Кирилов, Г.Ю.Громов. Введение в реляционные базы
данных, Санкт-Петербург «БХВ-Петербург», 2009 -37 с.
2. К. Дж. Дейт. SQL и реляционная теория. Как грамотно писать код
на SQL: Символ-плюс, 2010 – 127с.
3. Еригель Ф. SQL. Библия производителя: Вильямс, 2010 - 116с.
4. Разработка Windows- приложений на основе Visual C#: Ч. А.
Кариев – Москва, 2007 г. – 768с.;
5. С# и платформа .NET – Питер, 2004г. – 782с.;
6. Введение в .NET 4.0 и VisualStudio 2010 для профессионалов:
Алекс Макки – Москва, Вильямс, 2010 г. – 416 с.

31