
- •Оглавление
- •Введение
- •Общие положения
- •Структура рабочего стола среды программирования
- •Главное окно
- •Некоторые замечания
- •О рабочем столе
- •О справочной системе Help
- •Структура программ в VC++
- •Переход к созданию консольного приложения
- •Программа с оператором while
- •Имена и типы переменных
- •Оператор while
- •Оператор for
- •Символические константы
- •Глава 2. Программы для работы с символьными данными
- •Программа копирования символьного файла. Вариант 1
- •Программа копирования символьного файла. Вариант 2
- •Подсчет символов в файле. Вариант 1
- •Подсчет символов в файле. Вариант 2
- •Подсчет количества строк в файле
- •Подсчет количества слов в файле
- •Глава 3. Работа с массивами данных
- •Одномерные массивы
- •Многомерные массивы
- •Глава 4. Создание и использование функций
- •Создание некоторых функций
- •Ввод строки с клавиатуры
- •Функция выделения подстроки из строки
- •Функция копирования строки в строку
- •Внешние и внутренние переменные
- •Область действия переменных
- •Как создать свой внешний файл
- •Атрибут static
- •Рекурсивные функции
- •Некоторые итоговые данные по изучению функций
- •Перегрузка функций
- •Использование шаблонов функций
- •Создание простого шаблона функции
- •Шаблоны, которые используют несколько типов
- •Глава 5. Функции для работы с символьными строками
- •Основные стандартные строковые функции
- •Функция sprintf()
- •Функция strcpy()
- •Функция strcmp()
- •Функция strcmpi()
- •Функция strcat()
- •Функция strlen()
- •Пример программы проверки функций
- •Новые типы переменных
- •Константы
- •Новые операции
- •Преобразование типов данных
- •Побитовые логические операции
- •Операции и выражения присваивания
- •Условное выражение
- •Операторы и блоки
- •Конструкция if-else
- •Конструкция else-if
- •Переключатель switch
- •Уточнение по работе оператора for
- •Оператор continue
- •Оператор goto и метки
- •Глава 7. Работа с указателями и структурами данных
- •Указатель
- •Указатели и массивы
- •Операции над указателями
- •Указатели и аргументы функций
- •Указатели символов и функций
- •Передача в качестве аргумента функции массивов размерности больше единицы
- •Массивы указателей
- •Указатели на функции
- •Структуры. Объявление структур
- •Обращение к элементам структур
- •Структуры и функции
- •Программы со структурами
- •Функция возвращает структуру
- •Функция возвращает указатель на структуру
- •Программа упрощенного расчета заработной платы одному работнику
- •Рекурсия в структурах
- •Битовые поля в структурах
- •Категории памяти
- •Глава 8. Классы в С++. Объектно-ориентированное программирование
- •Классы
- •Принципы построения классов
- •Инкапсуляция
- •Наследование
- •Полиморфизм
- •Примеры создания классов
- •Пример 1
- •Пример 2
- •Пример 3
- •Конструктор класса
- •Деструктор класса
- •Классы и структуры в среде CLR
- •Классы и структуры
- •Абстрактные классы
- •Статические функции и элементы данных
- •Частные и общие данные. Интерфейсные функции
- •Использование оператора глобального разрешения для элементов класса
- •Глава 9. Ввод и вывод в языках С и С++
- •Ввод и вывод в С
- •Ввод/вывод файлов
- •Основные функции для работы с файлами
- •Стандартный ввод/вывод
- •Функции стандартного ввода/вывода
- •Ввод/вывод в С++
- •Общие положения
- •Ввод/вывод с использованием разных классов
- •Пространства имен
- •Работа с классом fstream
- •Работа с классом ofstream
- •Работа с классом ifstream
- •Работа с бинарным файлом
- •Стандартный ввод/вывод в С++
- •Общие положения
- •Стандартный вывод cout
- •Стандартный ввод cin
- •Глава 10. Продолжение изучения среды Visual C++
- •Создание проекта
- •Некоторые файлы проекта
- •Окно сведений об объекте
- •Вкладка Events
- •Вкладка Property Pages
- •Работа с окном сведений об объекте
- •Контекстное меню редактора кода
- •Суфлер кода (подсказчик)
- •Настройка редактора кода
- •Управление окнами редактора
- •Изменение шрифта и цвета
- •Начало редактирования кода программного модуля
- •Компоненты среды программирования VC++
- •Класс Form
- •Дизайнер форм
- •Помещение компонента в форму
- •Другие действия с дизайнером форм
- •Контекстное меню формы
- •Добавление новых форм к проекту
- •Организация работы с множеством форм
- •Вызов формы на выполнение
- •Cвойства формы
- •События формы
- •Некоторые методы формы
- •Рисование графиков в форме
- •Глава 11. Компоненты, создающие интерфейс между пользователем и приложением
- •Пространство имен System
- •Работа с переменными некоторых типов
- •Компонент Button
- •Свойства Button
- •События Button
- •Методы Button
- •Компонент Panel
- •Некоторые свойства Panel
- •Некоторые события Panel
- •Компонент Label
- •Некоторые свойства Label
- •События Label
- •Компонент TextBox
- •Некоторые свойства TextBox
- •События TextBox
- •Некоторые методы TextBox
- •Компонент MenuStrip
- •Некоторые свойства MenuStrip
- •События MenuStrip
- •Компонент ContextMenuStrip
- •Компонент ListView
- •Некоторые свойства ListView
- •События ListView
- •Компонент WebBrowser
- •Компонент ListBox
- •Как работать с ListBox
- •Свойства ListBox
- •Как использовать ListBox
- •Как формировать список строк
- •Компонент СomboBox
- •Свойства ComboBox
- •События ComboBox
- •Некоторые методы ComboBox
- •Примеры использования ComboBox
- •Пример 1
- •Пример 2
- •Пример 3
- •Компонент MaskedTextBox
- •Свойства MaskedTextBox
- •Компонент СheckedListBox
- •Пример: домашний телефонный справочник
- •Компоненты CheckBox и RadioButton
- •Компонент GroupBox
- •Компонент LinkLabel
- •Компонент PictureBox
- •Некоторые свойства компонента PictureBox
- •Компонент DateTimePicker
- •Форматные строки даты и времени
- •Стандартное и пользовательское форматирование
- •Некоторые сведения о работе с датами
- •Компонент TabControl
- •Как задавать страницы
- •Некоторые методы TabControl
- •Некоторые свойства страницы TabPage
- •Как защитить страницу от неавторизованного доступа
- •Задача регистрации пользователя в приложении
- •Компонент Timer
- •Компонент ProgressBar
- •Компонент OpenFileDialog
- •Компонент SaveFileDialog
- •Компонент ColorDialog
- •Компонент FontDialog
- •Компонент PrintDialog
- •Компонент ToolStrip
- •Некоторые свойства ToolStrip
- •Использование ToolStrip
- •Глава 12. Работа с наборами данных. Общие сведения о базах данных
- •Проектирование баз данных
- •Модель базы данных
- •Структура проектирования базы данных
- •Идентификация сущностей и атрибутов
- •Проектирование таблиц
- •Определение неповторяющихся атрибутов
- •Набор правил при разработке таблицы
- •Определение ограничений на целостность данных
- •Принудительное обеспечение целостности данных
- •Выбор индексов
- •Язык SQL
- •Примеры оператора SELECT
- •Наборы данных (компонент DataSet)
- •Общая технология организации работы с базой данных в приложении
- •Пример работы с базой данных
- •Глава 13. Управление исключительными ситуациями
- •Операторы try, catch и throw
- •Пример 1
- •Пример 2
- •Классы типов исключений
- •Пример 3
- •Функции, выдающие исключения
- •Пример 1. Перевод строки String ^ в ASCII-строку
- •Пример 2. Перевод ASCII-строки в строку String ^
- •Пример 3. Преобразование строки String ^ в строку wchar_t
- •Пример 4. Преобразование строки wchar_t в строку String ^
- •Пример 5. Маршалинг native-структуры
- •Пример 6. Работа с массивом элементов native-структуры в managed-функции
- •Пример 7. Доступ к символам в классе System::String
- •Пример 10. Преобразование String в string
- •Пример 11. Преобразование string-строки в String-строку
- •Пример 12. Объявление дескрипторов в native-типах
- •Пример 13. Работа с дескриптором в native-функции
- •Предметный указатель
|
Глава 12. Работа с наборами данных. Общие сведения о базах данных |
417 |
|
|
|
Таблица 12.1 (окончание) |
|
|
|
|
|
|
Сущность |
Атрибуты сущности |
|
|
|
|
|
|
PROJECT (Проекты) |
Project_ID (Код проекта) |
|
|
|
|
|
|
|
Project_Name (Название проекта) |
|
|
|
|
|
|
|
Project_Description (Описание проекта) |
|
|
|
|
|
|
|
Team_Leader (Руководитель) |
|
|
|
|
|
|
|
Product (Изделие) |
|
|
|
|
|
Составляя таким способом списки сущностей и соответствующих атрибутов, удается удалить избыточные записи.
Могут ли быть таблицами сущности из составленного списка? Могут ли быть перемещены колонки из одной группы в другую? Появляется ли один и тот же атрибут в некоторых сущностях? На такие вопросы надо дать ответ.
Каждый атрибут может появляться лишь однажды, и вы должны определить, какая сущность является первичным собственником этого атрибута. Например, атрибут Dept_Head_Name (Имя руководителя) должен быть удален, т. к. Last_Name (Фамилия), First_Name (Имя), а также Emp_Num (Табельный номер) уже существуют в сущности EMPLOYEE (Работники). А для доступа к руководителю подразделения можно воспользоваться табельным номером работника (руководитель в качестве работника имеет свой табельный номер).
Посмотрим теперь, как отобразить составленный список в объекты базы данных: сущности — в таблицы, а атрибуты — в колонки.
Проектирование таблиц
В реляционной базе данных объектом, представляющим отдельную сущность, является таблица, которая является двумерной матрицей строк и столбцов. Каждый столбец матрицы представляет один атрибут. Каждая строка представляет специфический экземпляр сущности.
Например, мы проектируем таблицу Покупатели. В таком случае таблица Покупатели — это сущность, а код покупателя, его адрес, контактный телефон и т. д. являются атрибутами данной сущности. Специфические экземпляры сущности — это 1-й покупатель, 2-й покупатель и т. д. В некоторых СУБД (системах управления базами данных), например MS Access, поставляемой с русским вариантом Windows, таблицы и их атрибуты можно задавать по-русски. В большинстве же СУБД — по-английски.
После определения сущностей и атрибутов создается модель, которая служит логическим проектом структуры вашей базы данных. Модель отображает сущности и атрибуты в таблицу, в которой колонки являются детальным описанием сущностей БД.

418 Часть II. Приложения Windows Form
В табл. 12.2 показано, как сущность EMPLOYEE была преобразована из списка в таблицу.
Таблица 12.2. Таблица для сущности EMPLOYEE
Emp_Num |
Last_Name |
First_Name |
Dept_Num |
Job_Code |
Phone_Num |
Salary |
|
|
|
|
|
|
|
24 |
Smith |
John |
100 |
Eng |
4968 |
64000 |
|
|
|
|
|
|
|
48 |
Carter |
Catherine |
900 |
Sales |
4967 |
72500 |
|
|
|
|
|
|
|
36 |
Smith |
Jane |
600 |
Admin |
4800 |
37500 |
|
|
|
|
|
|
|
Каждая строка таблицы представляет одного работника.
Колонки Emp_Num, Last_Name, First_Name, Dept Num, Job_Code, Phone_Num,
Salary представляют атрибуты работника.
Когда таблица наполнена данными и строка добавляется к таблице, то каждый элемент строки — это ячейка, в которой сохраняется некая информация (например,
"Smith").
Вся строка информации по одному работнику называется просто записью. Колонки таблицы, полученные из атрибутов сущности, называют полями таблицы.
Определение неповторяющихся атрибутов
Одной из задач проектирования базы данных является обеспечение уникального определения каждого экземпляра сущности, т. е. необходимо сделать так, чтобы система могла извлечь из таблицы единственную строку. Иными словами, должна быть однозначная идентификация строки таблицы.
Одну строку от другой отличают по значениям так называемого первичного ключа.
Значения, введенные в колонку первичного ключа или во множество колонок, составляющих первичный ключ (а он может состоять и из нескольких атрибутов), являются уникальными для каждой строки. Если вы попытаетесь ввести некоторое значение в первичный ключ, которое уже существует в другой строке той же колонки, то система контроля, предусмотренная в БД, прекратит операцию и выдаст ошибку.
Например, в приведенной таблице EMPLOYEE поле Emp_Num (Табельный номер) является уникальным атрибутом. Такой атрибут может использоваться как идентификатор каждого работника в базе данных (т. е. каждой строки таблицы). Следовательно, этот реквизит можно взять в качестве первичного ключа данной таблицы. Когда вы выбираете какой-то реквизит на роль первичного ключа, проверьте, действительно ли он уникален, т. е. не встречается ли более одного раза во всех строках таблицы.
Если не существует единственной колонки, обладающей свойством неповторяемости данных в ее строках (это свойство называют еще уникальностью), то разработ-