Ім'я файлу: Музей_ру.docx Розширення: docx Розмір: 764кб. Дата: 12.11.2021 скачати Пов'язані файли: 125.docx 2020_M_BIT_Klishch.pdf Кейс_диплом.docx система відеоспостереження.docx Министерство образования и науки Российской Федерации ФГБОУ ВПО Кубанский государственный технологический университет (КубГТУ) Кафедра Информационных систем и программирования Институт Компьютерных систем и информационной безопасности ПОЯСНИТЕЛЬНАЯ ЗАПИСКА Базы данных на тему Разработка ИС "Археологический музей" 2015 г. Реферат РЕЛЯЦИОННАЯ БАЗА ДАННЫХ, VISUAL STUDIO 2015, MICROSOFT SQL SERVER 2012 Пояснительная записка курсового проекта содержит 31 стр., 11 рис., 2 табл., 5 источников. В данном курсовом проекте были рассмотрены основные понятия проектирования баз данных, изучены алгоритмы создания и редактирования баз данных, реализованы все основные методы взаимодействия с реляционными базами данных. Результатом выполнения курсовой работы явилось создание реляционной базы данных, а также создание программного продукта, который представляет собой систему учета археологического музея и демонстрирует возможности взаимодействия с созданной базой данных. СодержаниеВведение 1. Нормативные ссылки 2. Анализ предметной области и требований 2.1 Цель автоматизации 2.2 Перечень задач/процессов, подлежащих автоматизации в рамках курсового проектирования 2.3 Участники автоматизируемых процессов 2.4 Концептуальная модель БД с описанием 3. Разработка базы данных и программных приложений к ней 3.1 Логическая модель БД с описанием 3.2 ER-диаграмма с описанием 3.3 Перечень функций программы 4. Руководство пользователя Заключение Список использованных источников Приложение ВведениеВ данном курсовом проекте будут исследованы основные понятия проектирования реляционных баз данных, алгоритма создания и редактирования баз данных с помощью СУБД Microsoft SQL Server 2012. На первом этапе будет проведено исследование основного теоретического материала по данным темам, а также изучение основных алгоритмов. Эти исследования будут проводиться с помощью источников, указанных как рекомендованные. Затем для демонстрации работы алгоритмов будет написана необходимая программа на языке программирования C# в среде Visual Studio2015. По окончании сборки необходимой программы будет проведено тестирование. база данные программный музей 1. Нормативные ссылкиГОСТ Р 1.5-2004 Стандарты национальные Российской Федерации. Правила построения, изложения, оформления и обозначения ГОСТ 2.104-68 ЕСКД. Основные надписи ГОСТ 7.80-2000 СИБИД. Библиографическая запись. Заголовок. Общие требования и правила составления ГОСТ 7.82-2001 СИБИД. Библиографическая запись. Библиографическое описание электронных ресурсов. Общие требования и правила составления ГОСТ 7.9-95 СИБИД. Реферат и аннотация. Общие требования ГОСТ 19.001-77 ЕСПД. Общие положения ГОСТ 19.104-78 ЕСПД. Основные надписи ГОСТ 19.105-78 ЕСПД. Общие требования к программным документам ГОСТ 19.401-78 ЕСПД. Текст программы. Требования к содержанию и оформлению ГОСТ 19.402-78 ЕСПД. Описание программы ГОСТ 19.404-79 ЕСПД. Пояснительная записка. Требования к содержанию и оформлению 2. Анализ предметной области и требований2.1 Цель автоматизацииМузей – это учреждение, занимающееся собиранием, изучением, хранением и экспонированием предметов – памятников естественной истории, материальной и духовной культуры, а также просветительской и популяризаторской деятельностью. В настоящее время знакомство с коллекциями и изучение их отдельных экспонатов приобретает все большую популярность среди различных социальных групп общества. Музей как социально-культурное учреждение завоевывает все более крепкие позиции в системе культурного просвещения посетителей. Сейчас музей становится объединяющим звеном для совершенно различных по своим направлениям культурных интересов людей. Анализируя данную тему, можно сделать вывод, что музей продолжает занимать немаловажное место в жизни людей, то есть является актуальной темой в обществе. Он участвует в культурном развитии человека, формирует у него представление о мире, формирует его духовную сущность. В процессе изучения этой предметной области было выявлено, что пользователям и руководству требуется база данных, которая содержала бы подробную информацию об экспонатах, об археологах и о местах нахождения экземпляра. 2.2 Перечень задач/процессов, подлежащих автоматизации в рамках курсового проектированияПри проектировании системы основной задачей являлось автоматизирование следующих процессов: ведение полной базы экспонатов, находящихся в музее; ведение базы, содержащей информацию об археологах; ведение и дополнение базы университетов; возможность модификации данных в таблицах; поддержка многопользовательности; 2.3 Участники автоматизируемых процессовГлавными участниками автоматизированных процессов являются пользователь и администратор, то есть пользователи данной программы, а также администраторы, в задачи которых входит расширение и администрирование информационной базы данных. Основные варианты использования, доступные участникам автоматизируемого процесса, представлены на диаграмме (рис. 1). Рисунок 1 – Диаграмма вариантов использования Администратор может полностью редактировать базу данных, он может добавлять новые элементы или удалять их. Пользователь же может просматривать полный перечень представленных в музее экспонатов, а также видеть подробную информацию о каждом из них. 2.4 Концептуальная модель БД с описаниемТ а б л и ц а 1 – Объекты концептуальной модели
Т а б л и ц а 2 – Связи концептуальной модели
На рисунке 2 представлена концептуальная модель базы данных. Рисунок 2 – Концептуальная модель БД 3. Разработка базы данных и программных приложений к ней3.1 Логическая модель БД с описаниемНа данном этапе производится упрощение концептуальной модели, а затем ее преобразование в реляционную модель. В реляционной модели данных (РБД) связь типа "многие ко многим" не может быть представлена напрямую. Она убирается путем добавления новых таблиц. В данной реляционной базе данных все объекты изначально были спроектированы так, что не было избыточных связей и связей "многие ко многим", поэтому в данном случае логическая модель совпадает с концептуальной (рис. 3). Рисунок 3 – Логическая модель БД Основные объекты базы данных: "Archaeologist" используется для хранения данных об археологах. Данная таблица содержит идентификатор, имя и возраст археолога, а также ссылку на университет, в котором он работает. "University" содержит данные об университетах. Данная таблица содержит идентификатор, название и город, в котором находится университет. "Exhibit" используется для хранения экспонатов. Данная таблица хранит уникальный идентификатор, наименование, место нахождения, автора раскопки, тип и эпоху, к которой принадлежит экспонат. "Place" используется для хранения мест раскопок. Данная таблица хранит уникальный идентификатор и наименование места нахождения. "Era" используется для хранения эпох. Данная таблица хранит уникальный идентификатор и наименование эпохи, врем начала и конца эпохи, а также тип, к которому принадлежит. "KindOfEra" используется для хранения типов эпох. Данная таблица хранит уникальный идентификатор и наименование типа эпохи. "ExType" используется для хранения типов экспонатов. Данная таблица хранит уникальный идентификатор и наименование типа экспоната. 3.2 ER-диаграмма с описаниемНа основе расширенной концептуальной модели создаем БД "Crocodile" в Microsoft SQL Server 2012. Диаграмма БД выглядит следующим образом (рис. 4): Рисунок 4 – Реляционная модель БД 3.3 Перечень функций программыПроектируемое клиент-серверное приложение должно выполнять следующие функции: Осуществление аутентификации; Вывод всех экспонатов; Выбор нужной таблицы из всех таблиц базы; Добавление элементов в выбранную таблицу; Изменение и удаление выбранного элемента; Поиск по имени элемента. 4. Руководство пользователяПри запуске приложения пользователь видит стартовое окно, в котором представлен список всех экспонатов (рис. 5). Рисунок 5 – Стартовое окно программы Нажав на экспонат можно увидеть подробную информацию о нём (рис. 6). Рисунок 6 – Подробная информация об экспонате Для того, чтобы иметь возможность просматривать таблицы, необходимо иметь учётную запись менеджера, нажав на "Login" в правой верхней части экрана вводим логин "manager" и пароль "manager" (рис. 7). Рисунок 7 – Аутентификация Менеджер имеет привилегии только для просмотра содержимого таблиц (рис. 8). Рисунок 8 – Управление с учётной записью менеджера Для того, чтобы иметь возможность модифицировать таблицы, необходимо авторизоваться под учётной записью администратора (логин "admin" пароль "admin"), нажав на "Login" в правой верхней части экрана (рис. 9). Рисунок 9 – Окно управления Для изменения элемента необходимо нажать кнопку "Edit" (рис. 10). Рисунок 10 – Изменение элемента При попытке удаления программа просит подтверждения, после получения которого удаляет элемент из таблицы (рис. 11). Рисунок 11 – Изменение элемента ЗаключениеВ заключении хочется отметить важность использования реляционных баз данных. Благодаря существованию такого понятия, как базы данных, многие процессы могут быть легко автоматизированы, что достаточно полезно для самых различных предприятий и компаний. В современном мире сильно ощутим информационный рывок. Нас стал окружать огромный объем информации. Информация для человека играет немаловажную роль, поэтому основной из задач человечества является обработка данной информации. Для того чтобы обеспечить наиболее эффективную работу предприятий, все документы учета товара стали хранить в электронном виде. Базы данных получили широкое применение. Данная работа позволила нам еще раз убедиться в актуальности изученной темы. Список использованных источниковМалыхина М.П. Базы данных: основы, проектирование, использование: учебное пособие".-3-е изд. СПб.: БХВ-Петербург, 2007. –528 с. Роберт Уолтерс и др. SQL Server 2012: ускоренный курс для профессионалов./Пер. с англ. – М.: Издательский дом "Вильямс", 2014. –768 с. Александр Волоха. Microsoft SQL Server 2012. Новые возможности. - СПб: Питер, 2012.– 304 с. Сеппа Д. Microsoft ADO.BET/Пер. с англ.– М.; Издательско-торговый дом "Русская редакция", 2003. –640 стр. Нейгел, Кристиан, Ивьен, Билл, Глинн, Джей, Скиннер, Уотсон, Карли. C# 2005 и платформа .NET 3.0 для профессионалов.; Пер. с англ. - М.: ООО "И.Д.Вильямс", 2008.– 1376+416 (на CD) с.: ил. Приложение АЛистинг программы: Класс MainViewModel: using ArchMuseumManager.Infrastructure; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ArchMuseumManager.DAL.Entities; using System.Collections.ObjectModel; using System.Windows; using MahApps.Metro; namespace ArchMuseumManager.ViewModels { public class MainViewModel : BaseViewModel { private bool isLogging; public bool IsLogging { get { return isLogging; } set { isLogging = value; NotifyPropertyChanged(); } } private ApplicationUser currentUser; public ApplicationUser CurrentUser { get { return currentUser; } set { currentUser = value; NotifyPropertyChanged(); } } private Exhibit selectedExhibit; public Exhibit SelectedExhibit { get { return selectedExhibit; } set { selectedExhibit = value; NotifyPropertyChanged(); } } public ObservableCollection { get { return Repository.Exhibits; } set { NotifyPropertyChanged(); } } public void Login(string login, string password) { var user = Repository.Users.FirstOrDefault(u => u.Login == login && u.Password == password); if (user == null) { MessageBox.Show("Incorrect login"); return; } else { CurrentUser = user; IsLogging = false; ChangeWindowTheme(); } } private void ChangeWindowTheme() { var theme = ThemeManager.DetectAppStyle(Application.Current); if(CurrentUser != null) { ThemeManager.ChangeAppStyle(Application.Current, ThemeManager.GetAccent("Mauve"), ThemeManager.GetAppTheme("BaseLight")); } else { ThemeManager.ChangeAppStyle(Application.Current, ThemeManager.GetAccent("Olive"), ThemeManager.GetAppTheme("BaseLight")); } } private RelayCommand logOutCommand; public RelayCommand LogOutCommand { get { if (logOutCommand == null) logOutCommand = new RelayCommand(p => LogOut()); return logOutCommand; } } private void LogOut() { CurrentUser = null; ChangeWindowTheme(); } private RelayCommand readMoreCommand; public RelayCommand ReadMoreCommand { get { if (readMoreCommand == null) readMoreCommand = new RelayCommand(p => ReadMore(p)); return readMoreCommand; } } private RelayCommand closeReadMoreCommand; public RelayCommand CloseReadMoreCommand { get { if (closeReadMoreCommand == null) closeReadMoreCommand = new RelayCommand(p => SelectedExhibit = null); return closeReadMoreCommand; } } private RelayCommand openLoginDialogCommand; public RelayCommand OpenLoginDialogCommand { get { if (openLoginDialogCommand == null) openLoginDialogCommand = new RelayCommand(p => IsLogging = true, p => CurrentUser == null); return openLoginDialogCommand; } } private RelayCommand closeLoginDialogCommand; public RelayCommand CloseLoginDialogCommand { get { if (closeLoginDialogCommand == null) closeLoginDialogCommand = new RelayCommand(p => IsLogging = false, p => CurrentUser == null); return closeLoginDialogCommand; } } private RelayCommand openManageWindowCommand; public RelayCommand OpenManageWindowCommand { get { if (openManageWindowCommand == null) openManageWindowCommand = new RelayCommand(p => OpenManageWindow(), p => CurrentUser != null); return openManageWindowCommand; } } private void OpenManageWindow() { var window = new ManageWindow(); var viewModel = new ManageViewModel(); viewModel.IsAdmin = CurrentUser.Login == "admin"; window.DataContext = viewModel; window.ShowDialog(); Repository = new EFRepository(); Exhibits = Repository.Exhibits; } private void ReadMore(object p) { var exhibit = p as Exhibit; if (exhibit != null) { SelectedExhibit = exhibit; } } public MainViewModel() { //CurrentUser = Repository.Users.FirstOrDefault(u => u.Login == "admin"); ChangeWindowTheme(); } } } Класс ManageBaseViewModel: using ArchMuseumManager.DAL.Entities; using ArchMuseumManager.Infrastructure; using ArchMuseumManager.Models; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Data; using System.Windows.Input; namespace ArchMuseumManager.ViewModels { public class ManageBaseViewModel { public DefaultMapper Mapper { get; set; } = new DefaultMapper(); private T current; public T Current { get { return current; } set { current = value; NotifyPropertyChanged(); } } private ICollectionView entities; private EFRepository repository; public ICollectionView Entities { get { if (entities == null) { entities = CollectionViewSource.GetDefaultView(repository.GetDbSet entities.Filter = Search_Filter; } return entities; } set { entities = value; NotifyPropertyChanged(); } } private string searchCriteria; public string SearchCriteria { get { return searchCriteria; } set { searchCriteria = value; NotifyPropertyChanged(); Entities.Refresh(); } } private bool Search_Filter(object item) { if (item != null) { var name = (item as IEntity).Name.ToString().ToLower(); return SearchCriteria != null ? name.StartsWith(SearchCriteria.ToLower()) : true; } return false; } public ManageBaseViewModel(EFRepository repository) { this.repository = repository; } private ICommand saveCommand; public ICommand SaveCommand { get { if (saveCommand == null) { saveCommand = new RelayCommand(o => Save(), o => CanSave(o)); } return saveCommand; } } private ICommand closeFormsCommand; public ICommand CloseFormsCommand { get { if (closeFormsCommand == null) { closeFormsCommand = new RelayCommand(o => { CloseForms(); }); } return closeFormsCommand; } } private ICommand addCommand; public ICommand AddCommand { get { if (addCommand == null) { addCommand = new RelayCommand(o => { Current = new T() { ID = -1}; }); } return addCommand; } } private ICommand editCommand; public ICommand EditCommand { get { if (editCommand == null) { editCommand = new RelayCommand(o => Edit(o)); } return editCommand; } } private ICommand deleteCommand; public ICommand DeleteCommand { get { if (deleteCommand == null) { deleteCommand = new RelayCommand(o => Delete(o)); } return deleteCommand; } } private void Delete(object o) { var entity = o as T; if (entity != null) { var status = MessageBox.Show("Are you sure want to remove this item?", "Removing", MessageBoxButton.YesNo); if (status == MessageBoxResult.No) return; if (status == MessageBoxResult.Yes) { var exhibitToDelete = repository.GetDbSet repository.Delete(exhibitToDelete); } } } private void Edit(object o) { var entity = o as T; if (entity != null) { var entityCopy = new T(); Map(entity, entityCopy); Current = entityCopy; } } public void Map(T source, T destination) { var type = typeof(T); var properties = type.GetProperties(); foreach (var property in properties) { property.SetValue(destination, property.GetValue(source)); } } private void CloseForms() { Current = null; } private bool CanSave(object o) { return Current != null && Current.IsValid(); } private void Save() { if (Current.ID == -1) { repository.Create(Current); Entities.Refresh(); } else { var entity = repository.GetDbSet Map(Current, entity); //Mapper.Map(Current, entity); repository.Update(entity); } Current = null; } } } Класс ManageViewModel: using ArchMuseumManager.DAL.Entities; using ArchMuseumManager.Infrastructure; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ArchMuseumManager.ViewModels { public class ManageViewModel : BaseViewModel { #region Collections public ObservableCollection { get { return Repository.Exhibits; } set { NotifyPropertyChanged(); } } public ObservableCollection { get { return Repository.KindOfEras; } set { NotifyPropertyChanged(); } } public ObservableCollection { get { return Repository.ExTypes; } set { NotifyPropertyChanged(); } } public ObservableCollection { get { return Repository.Eras; } set { NotifyPropertyChanged(); } } public ObservableCollection { get { return Repository.Archaeologists; } set { NotifyPropertyChanged(); } } public ObservableCollection { get { return Repository.Universities; } set { NotifyPropertyChanged(); } } public ObservableCollection Places { get { return Repository.Places; } set { NotifyPropertyChanged(); } } #endregion private bool isAdmin; public bool IsAdmin { get { return isAdmin; } set { isAdmin = value; NotifyPropertyChanged(); } } #region ViewModels private ManageBaseViewModel public ManageBaseViewModel { get { return exhibitsViewModel; } set { exhibitsViewModel = value; NotifyPropertyChanged(); } } private ManageBaseViewModel public ManageBaseViewModel { get { return kindOfErasViewModel; } set { kindOfErasViewModel = value; NotifyPropertyChanged(); } } private ManageBaseViewModel public ManageBaseViewModel { get { return archaeologistsViewModel; } set { archaeologistsViewModel = value; NotifyPropertyChanged(); } } private ManageBaseViewModel public ManageBaseViewModel { get { return erasViewModel; } set { erasViewModel = value; NotifyPropertyChanged(); } } private ManageBaseViewModel public ManageBaseViewModel { get { return exTypesViewModel; } set { exTypesViewModel = value; NotifyPropertyChanged(); } } private ManageBaseViewModel placesViewModel; public ManageBaseViewModel PlacesViewModel { get { return placesViewModel; } set { placesViewModel = value; NotifyPropertyChanged(); } } private ManageBaseViewModel public ManageBaseViewModel { get { return universitiesViewModel; } set { universitiesViewModel = value; NotifyPropertyChanged(); } } #endregion public ManageViewModel() { ExhibitsViewModel = new ManageBaseViewModel KindOfErasViewModel = new ManageBaseViewModel ArchaeologistsViewModel = new ManageBaseViewModel ErasViewModel = new ManageBaseViewModel ExTypesViewModel = new ManageBaseViewModel PlacesViewModel = new ManageBaseViewModel (Repository); UniversitiesViewModel = new ManageBaseViewModel } } } Класс Exhibit: using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ArchMuseumManager.DAL.Entities { public class Exhibit: ObservableObject, IEntity { private int id; public int ID { get { return id; } set { id = value; NotifyPropertyChanged(); } } private string name; public string Name { get { return name; } set { name = value; NotifyPropertyChanged(); } } private int ageID; public int AgeID { get { return ageID; } set { ageID = value; NotifyPropertyChanged(); } } private int exTypeID; public int ExTypeID { get { return exTypeID; } set { exTypeID = value; NotifyPropertyChanged(); } } private int placeID; public int PlaceID { get { return placeID; } set { placeID = value; NotifyPropertyChanged(); } } private int archaeologistID; public int ArchaeologistID { get { return archaeologistID; } set { archaeologistID = value; NotifyPropertyChanged(); } } private Era age; public virtual Era Age { get { return age; } set { age = value; NotifyPropertyChanged(); } } private Archaeologist archaeologist; public virtual Archaeologist Archaeologist { get { return archaeologist; } set { archaeologist = value; NotifyPropertyChanged(); } } private Place place; public virtual Place Place { get { return place; } set { place = value; NotifyPropertyChanged(); } } private ExType exType; public virtual ExType ExType { get { return exType; } set { exType = value; NotifyPropertyChanged(); } } public override string ToString() { return Name; } public bool IsValid() { return !string.IsNullOrWhiteSpace(Name) && Age != null && Archaeologist != null && Place != null && ExType != null; } } } Класс ExType: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ArchMuseumManager.DAL.Entities { public class ExType : ObservableObject, IEntity { private int id; public int ID { get { return id; } set { id = value; NotifyPropertyChanged(); } } private string name; public string Name { get { return name; } set { name = value; NotifyPropertyChanged(); } } public override string ToString() { return Name; } public bool IsValid() { return !string.IsNullOrWhiteSpace(Name); } } } Реализованные транзакции: SET NOCOUNT ON; --Состояние до начала транзакции SELECT 'До транзацкии' AS "Состояние" ,ExTypeID AS "Код" ,Name AS "Имя" ,@@SPID AS "Процесс" ,@@TRANCOUNT AS "Количество транзакций" FROM ArchMuseum.DBO.Exhibits ORDER BY ExTypeID; --Начало транзакции BEGIN TRANSACTION; SELECT @@TRANCOUNT AS "Количество транзакций"; UPDATE ArchMuseum.DBO.Exhibits SET ExTypeID -= 0 WHERE Name=N'Computer'; SELECT 'До транзацкии' AS "Состояние" ,ExTypeID AS "Код" ,Name AS "Имя" ,@@SPID AS "Процесс" ,@@TRANCOUNT AS "Количество транзакций" FROM ArchMuseum.DBO.Exhibits ORDER BY ExTypeID; UPDATE ArchMuseum.DBO.Exhibits SET ExTypeID += 0 WHERE Name =N'Nature'; SELECT 'До транзацкии' AS "Состояние" ,ExTypeID AS "Код" ,Name AS "Имя" ,@@SPID AS "Процесс" ,@@TRANCOUNT AS "Количество транзакций" FROM ArchMuseum.DBO.Exhibits ORDER BY ExTypeID; |