Разработка программы для системы управления базами данных
Разработка сетевого ресурса для ОАО "МРСК Урала" для облегчения роботы персонала. Описание интерфейса, правил поиска и пользования документами, особенностей их редактирования и удаления. Пример создания нового документа на основе готовых шаблонов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 08.06.2017 |
Размер файла | 24,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение
Операционная компания -- компания, которой на праве собственности или ином вещном праве принадлежат активы, обеспечивающие производство, передачу, распределение или сбыт продукции. ОАО «МРСК Урала» - единая операционная компания, осуществляющая транспорт электроэнергии по электрическим сетям напряжением 0,4-220 кВ и технологическое присоединение потребителей к электросетям на территории Свердловской, Челябинской областей, а также Пермского края. На территории Свердловской области ОАО "МРСК Урала" представляет филиал "Свердловэнерго". Филиал ОАО "МРСК Урала" - "Свердловэнерго" осуществляет передачу электрической энергии по распределительным сетям 0,4-110 кВ. Основной задачей является обеспечение надежного функционирования и развития распределительного электросетевого комплекса региона, а также подключение новых потребителей к распределительным электрическим сетям компании. Всего в эксплуатации филиала "Свердловэнерго" находится 375 подстанций 35-220 кВ суммарной мощностью 7279 МВА, 7823 шт трансформаторных подстанций 10/0,4 кВ и 36 654 км воздушных и кабельных линий электропередачи классом напряжения 0,4-110 кВ. Общая численность персонала филиала "Свердловэнерго" - более 5 тысяч человек. Филиал "Свердловэнерго" осуществляет электроснабжение промышленных предприятий и населения на территории общей площадью 195 тыс. км2 с населением 4,4 млн человек. Средний радиус обслуживания в производственном отделении составляет 32 км. Для облегчения работы персонала с документацией хранимой в электроном виде, а также для размещения шаблонов для заполнения документов требуется создать ресурс с удобным интерфейсом пользователя. В него входит:
- Создание, редактирование, удаление документов и шаблонов
- Просмотр информации
- Поиск по ключевым словам или используя фильтры
Ресурс будет располагаться на локальном сервере предприятия, заранее подготовленным для работы. Таким образом доступ к ресурсу будет осуществляться только из главного офиса.
1. Постановка задачи
Разработать сетевой ресурс для предприятия ОАО «МРСК Урала».
Ресурс содержит:
- База данных «Пользователи»
- База данных «Документы»
- Редактирование баз данных
- Поиск по базе данных
- О программе
Сетевой ресурс предназначен для облегчения работы персонала. С его помощью сотрудники предприятия, не затрачивая много времени могут найти нужный им документ, отредактировать или удалить его. Также присутствует функция создания нового документа, для этого заранее созданы и размещены шаблоны для заполнения.
2. Формулировка и анализ требований
Множество лиц, действующих в предметной области
- Сотрудник
- Ответственный за документацию
- Администратор
Множество функций, выполняемых в предметной области.
- Просмотр документа
- Создание, редактирование, удаления документа
- Поиск документа в базе данных
Множество объектов и процессов, подлежащих описанию в БД.
- Данные пользователя
- Описание документа
- Добавление, редактирование
- Удаление информации о документе.
3. Выбор СУБД
SQLite - это библиотека написанная на языке C, которая предоставляет легковесную, находящуюся на диске базу данных, которой не требуется отдельный серверный процесс и которая позволяет получать доступ используя не стандартные диалекты языка SQL.Некоторые приложения могут использовать SQLite для внутреннего хранения данных. Также возможно сделать прототип приложения используя SQLite и затем перенести код для больших баз данных, таких как PostgreSQL или Oracle.
sqlite3 была написана Gerhard Hдring и предоставляет SQL интерфейс совместимый с DB-API 2.0 спецификациями описанными в PEP 249.
Значительные отличия между SQLite и другими базами данных находятся в самом движке. В отличие от других БД в SQLite нет привязки к типам; все данные сохраняются как строки оканчивающиеся символом NULL, что лучше, чем двоичное представление данных в столбцах специального типа. По причине совместимости SQLite поддерживает тип спецификации в конструкциях CREATE TABLE, например, такой как INT, CHAR, FLOAT, TEXT и тому подобные, но реально их не использует. Внутри БД, SQLite только делает различие между строковыми и целочисленными данными во время сортировки. Поэтому, если вы не собираетесь сортировать данные, вы можете обойтись без указания специального типа полей при создании таблиц в SQLite.
"Безтиповая природа" SQLite делает сортировку и сопоставление данных в некотором роде медленнее, так как каждый раз SQLite будет вынуждена определять тип данных и применять либо строковый механизм сортировки/сравнения либо числовой. SQL таблицы часто требуют автоматически присваиваемый ключ для быстрого доступа к ячейкам, подразумевая возврат ссылки на последнюю добавленную ячейку. Для SQLite этот синтаксис, мягко говоря, бесполезен. Чтобы создать такую таблицу, вам понадобится объявить поле как INTEGER PRIMARY KEY, что более удобно, чем указание специализированного типа или присваивание дополнительных свойств, которые указывают на то, что поле является автоинкрементным. сетевой интерфейс документ шаблон
4. Логическая структура данных
Описание документа
Данные пользователя
5. Физическая структура данных
Таблица 1. Описание документа
Поле |
Название |
Тип |
Размер |
Пояснение |
|
1 |
id_podrazd |
ForeignKey |
- |
Подразделение |
|
2 |
id_form |
CharField |
100 |
Форма |
|
3 |
id_typedoc |
ForeignKey |
- |
Тип документа |
|
4 |
name |
CharField |
254 |
Название |
|
5 |
n_doc |
CharField |
50 |
Номер документа |
|
6 |
vid_khraneniya |
IntegerField |
1 |
Вид хранения |
|
7 |
date_doc |
DateField |
- |
Дата создания документа |
Таблица 2 - Данные пользователя
Поле |
Название |
Тип |
Размер |
Пояснение |
|
1 |
name_user |
CharField |
150 |
Имя пользователя |
|
2 |
name |
CharField |
40 |
Имя |
|
3 |
family |
CharField |
40 |
Фамилия |
|
4 |
mail_adress |
CharField |
60 |
Адрес электронной почты |
|
5 |
Id_podrazd |
ForeignKey |
- |
Подразделение |
6. Руководство программиста
В проект входят следующие файлы:
- db.sqlite3
- manage.py
- settings.py
- urls.py
- admin.py
- apps.py
- forms.py
- models.py
- urls.py
- views.py
Работа с административной панелью Django
Для входа в систему администрирования введите в адресной строке https://albom-form.se.mrsk-urala.local/admin/ и введите выданные логин и пароль
Панель администратора предназначена для просмотра, редактирования инфрмации в базах данных, создания новых пользователей, новых документов, отделов. Для настройки панели администратора необходимо открыть файл admin.py и ввести нужные части программного кода, это позволяет создать наиболее удобный интерфейс для программиста.
Для добавления модели в группу созданного приложения необходимо открыть файл models.py, объявить название модели и описание.
Для того чтобы создать новую страницу необходимо объявить операцию в файле views.py, также создать html документ и прописать адрес данной страницы в файл urls.py
3 Инструкция пользователя
Для входа необходимо в адресной строке браузера написать адрес https://albom-form.se.mrsk-urala.local/, после чего перед вами откроется страница авторизации пользователя.
Для входа в ресурс необходимо узнать свой логин и пароль у администратора, после чего ввести информацию в соответствующие поля и нажать кнопку «Войти».
После авторизации откроется главная страница ресурса где по центру располагаются существующие документы и основная информация о них.
Для нахождения нужного вам документа есть функция «поиск по ключевому слову», которая располагается в верхнем левом углу. Необходимо ввести название, отдел, или же форму записи документа и нажать кнопку «Поиск».
Ниже располагается «фильтр по записям», нужно выбрать критерии и нажать кнопку «Фильтр», после чего в таблице будут отображаться соответствующие документы.
В правой верхней части страницы расположена кнопка «новая запись», которая открывает пустой шаблон для заполнения.
Чтобы удалить документ нужно нажать на иконку корзины нужного документа. Эта функция работает только если у вас есть необходимые на это права, обычный рядовой сотрудник не может удалить документ.
Для редактирования нужно нажать на крайнюю иконку слева соответствующего документа, откроется страница со всей существующей информацией и прикрепленным файлом. Функцию редактирования может использовать только тот сотрудник, у которого есть на эта определенные права.
models.py
from django.db import models
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.utils import timezone
# Create your models here.
class Otdel(models.Model):
name = models.CharField(max_length=12, unique=True)
fullname = models.CharField(max_length=100)
description = models.TextField()
def __str__(self):
return str(self.name)
class Res(models.Model):
name = models.CharField(max_length=10, unique=True)
fullname = models.CharField(max_length=150)
def __str__(self):
return str(self.name)
class TypeDoc(models.Model):
name = models.CharField(max_length=30, unique=True)
fullname = models.CharField(max_length=100)
description = models.TextField()
def __str__(self):
return str(self.name)
class PublishedManager(models.Manager):
def get_queryset(self):
return super(PublishedManager, self).get_queryset().filter(status='published')
class Albom(models.Model):
CATEGORIES = (
(1, "Бумажное"),
(2, "Электронное"),
(3, "Комбинированное")
)
id_podrazd = models.ForeignKey(Otdel, verbose_name = "Подразделение")
id_form = models.CharField(max_length=100, verbose_name = "Идент. формы")
id_typedoc = models.ForeignKey(TypeDoc, verbose_name = "Тип документа")
slug = models.SlugField(max_length=250, unique_for_date='created_at')
author = models.ForeignKey(User, related_name='+', verbose_name = "Автор")
name = models.CharField(max_length=254, verbose_name = "Имя формы")
n_doc = models.CharField(max_length=50, verbose_name = "№ документа")
date_doc = models.DateField(default=timezone.now, verbose_name = "Дата документа")
otv_user = models.CharField(max_length=100, blank=True, verbose_name = "ответсвенный")
vid_khraneniya = models.IntegerField(choices=CATEGORIES, default=1, verbose_name = "Вид хранения")
n_doc_otm = models.CharField(max_length=50, blank=True, verbose_name = "№ документа отмены")
date_doc_otm = models.DateField(blank=True, null=True, verbose_name = "Дата документы отмены")
description = models.TextField(max_length=254, blank=True, verbose_name = "Примечание")
path_file = models.FileField(upload_to='uploads/%Y/%m/%d/', verbose_name=u'Прикрепить документ', max_length = 1000, blank=True)
active = models.BooleanField(verbose_name = "Действующая")
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
objects = models.Manager() # The default manager.
published = PublishedManager() # The Dahl-specific manager.
class Meta:
ordering = ('-id_form',)
def get_formatted_datetime(self):
return str(self.created_at.day) + "." + str(self.created_at.month) + "." + str(self.created_at.year) + " " + str(self.created_at.hour) + ":" + str(self.created_at.minute) + ":" + str(self.created_at.second)
get_formatted_datetime.short_description = "Опубликовано"
def get_absolute_url(self):
return reverse('albom-update', kwargs={'pk': self.pk})
views.py
from django.http import HttpResponse
from django.shortcuts import render, render_to_response, get_object_or_404, redirect
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.views.generic.base import ContextMixin, TemplateView
from django.views.generic.edit import CreateView, UpdateView, DeleteView, ProcessFormView
from django.core.urlresolvers import reverse_lazy, reverse
from django.contrib.messages.views import SuccessMessageMixin
from taggit.models import Tag
import json
from .models import Otdel
from .models import TypeDoc
from .models import Albom
from .models import Res
# Create your views here.
def index(request, tag_slug=None):
otdels = Otdel.objects.all().order_by("name")
typedocs = TypeDoc.objects.all().order_by("name")
albom_forms = Albom.objects.all()
ress = Res.objects.all().order_by("name")
tag = None
if tag_slug:
tag = get_object_or_404(Tag, slug=tag_slug)
object_list = albom_forms.filter(tags__in=[tag])
json_albom_form = '{"iTotalRecord":'+str(albom_forms.count())+', "iTotalDisplayRecords": 10, "sEcho":10, "aaData": []}'
paginator = Paginator(albom_forms, 20, orphans = 1)
try:
page = request.GET.get('page')
except KeyError:
page = 1
try:
albomforms = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
albomforms = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
albomforms = paginator.page(paginator.num_pages)
context = {
'otdels': otdels,
'typedocs': typedocs,
'albomforms': albomforms,
'ress': ress,
'json_albom_form': json_albom_form,
'tag': tag,
'pn': page,
}
#print(request.user.get_all_permissions())
return render(request, 'index.html', context)
class AlbomListMixin(ContextMixin):
def get_context_data(self, **kwargs):
context = super(AlbomListMixin, self).get_context_data(**kwargs)
return context
class AlbomEditMixin(AlbomListMixin):
def get_context_data(self, **kwargs):
context = super(AlbomEditMixin, self).get_context_data(**kwargs)
try:
context["pn"] = self.request.GET["page"]
except KeyError:
context["pn"] = "1"
return context
class AlbomEditView(ProcessFormView):
def post(self, request, *args, **kwargs):
try:
pn = request.GET["page"]
except KeyError:
pn = "1"
self.success_url = self.success_url + "?page=" + pn
return super(AlbomEditView, self).post(request, *args, **kwargs)
class AlbomCreate(CreateView, AlbomEditMixin):
model = Albom
template_name = "albomform_add.html"
fields = ['id_podrazd', 'id_form', 'id_typedoc', 'name', 'n_doc', 'date_doc', 'otv_user', 'vid_khraneniya',
'n_doc_otm', 'date_doc_otm', 'description', 'path_file', 'active']
def get(self, request, *args, **kwargs):
if request.user.is_authenticated():
if request.user.has_perm("albom_form.add_albom"):
try:
in_stock = request.session["in_stock"]
except:
in_stock = True
else:
return redirect("/login/?next=" + request.path)
else:
return redirect("/login/?next=" + request.path)
return super(AlbomCreate, self).get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return super(AlbomCreate, self).post(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super(AlbomCreate, self).get_context_data(**kwargs)
return context
class AlbomUpdate(SuccessMessageMixin, UpdateView, AlbomEditMixin, AlbomEditView):
template_name = "albomform.html"
model = Albom
fields = ['id_podrazd', 'id_form', 'id_typedoc', 'name', 'n_doc', 'date_doc', 'otv_user', 'vid_khraneniya',
'n_doc_otm', 'date_doc_otm', 'description', 'path_file', 'active']
pk_url_kwarg = "pk"
def get(self, request, *args, **kwargs):
if request.user.is_authenticated():
if request.user.has_perm("albom_form.change_albom"):
try:
in_stock = request.session["in_stock"]
except:
in_stock = True
else:
return redirect("/login/?next=" + request.path)
else:
return redirect("/login/?next=" + request.path)
return super(AlbomUpdate, self).get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
self.success_url = reverse("index")
return super(AlbomUpdate, self).post(request, *args, **kwargs)
success_message = "Форма успешно обновлена в альбоме форм"
class AlbomDelete(DeleteView):
model = Albom
success_url = reverse_lazy('index')
class AboutView(TemplateView):
template_name = "about.html"
def get_search(request):
if 'q' in request.GET and request.GET['q']:
q = request.GET['q']
forms = Albom.objects.filter(name__icontains=q)
return render_to_response('search.html'),{'forms' : forms, 'query' : q}
else:
pass
admin.py
from django.contrib import admin
from .models import Otdel
from .models import Res
from .models import Albom
from .models import TypeDoc
# Register your models here.
class OtdelAdmin(admin.ModelAdmin):
list_display = ("name", "fullname")
class ResAdmin(admin.ModelAdmin):
list_display = ("name", "fullname")
class TypeDocAdmin(admin.ModelAdmin):
list_display = ("name", "fullname")
class AlbomAdmin(admin.ModelAdmin):
list_display = ("get_formatted_datetime", "id_form", "name", "otv_user", "author")
list_filter = ("id_podrazd", "id_typedoc", "author")
search_fields = ("id_form", "name")
date_hierarchy = ("date_doc")
ordering = ['id_form', 'name']
admin.site.register(Otdel, OtdelAdmin)
admin.site.register(Res, ResAdmin)
admin.site.register(TypeDoc, TypeDocAdmin)
admin.site.register(Albom, AlbomAdmin)
urls.py
from django.conf.urls import url
from django.views.generic.base import TemplateView
from albomform.apps.albom_form import views
from django.conf import settings
from django.conf.urls.static import static
from albomform.apps.albom_form.views import AlbomCreate, AlbomUpdate, AlbomDelete
from django.contrib.auth.decorators import login_required
urlpatterns = [
url(r'^$', login_required(views.index), name="index"),
url(r'albom/add/$', login_required(AlbomCreate.as_view()), name='albom-add'),
url(r'albom/(?P<pk>\d+)/$', login_required(AlbomUpdate.as_view()), name='albom-update'),
url(r'albom/(?P<pk>\d+)/delete/$', login_required(AlbomDelete.as_view()), name='albom-delete'),
url(r'about/$', login_required(TemplateView.as_view(template_name="about.html")), name="about"),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Заключение
По дипломному заданию необходимо было разработать сетевой ресурс для предприятия ОАО «МРСК Урала»
Сетевой ресурс предназначен для облегчения работы персонала. С его помощью сотрудники предприятия, не затрачивая много времени могут найти нужный им документ, отредактировать или удалить его. Также присутствует функция создания нового документа, для этого заранее созданы и размещены шаблоны для заполнения.
Список использованных источников
1. Django: практика создания сайтов на Python (Дронов В.А.)
2. Изучаем Python: программирование игр, визуализация данных, веб-приложения (Эрик Мэтиз)
3. Простой Python Современный стиль программирования (Билл Любанович)
4. Python 3 &PyQt: Разработка приложений (Николай Прохоренок)
5. Язык программирования Python (Сузи Роман Авриевич)
Размещено на Allbest.ru
Подобные документы
Разработка, составление и отладка программного модуля "База знаний" средствами программы Quick Sales. Описание схемы базы: возможности редактирования, удаления и добавления данных. Текст программы и контрольный пример поиска через панель управления.
курсовая работа [519,0 K], добавлен 26.01.2013Разработка системы автоматизированного управления электронными документами. Сведения о приложении PHPMyAdmin, об обработчике шаблонов Smarty. Создание базы данных. Редактирование документа, просмотр изменений документов. Создание категорий документов.
дипломная работа [3,2 M], добавлен 25.07.2015Анализ предметной области. Проектирование и разработка базы данных и интерфейса в виде набора Web-страниц для отображения, создания, удаления и редактирования записей базы данных. Аппаратное и программное обеспечение системы. Алгоритм работы программы.
курсовая работа [3,0 M], добавлен 12.01.2016Проектирование базы данных для библиотеки и разработка программы для её удобного использования. Пример работы приложения на примере поиска статей по заданным условиям, а также основных операций с данными – добавления в базу, редактирования и удаления.
курсовая работа [2,5 M], добавлен 23.02.2014Изучение принципов работы программы Microsoft Excel. Проектирование и проработка базы данных необходимой для облегчения поиска нужного контракта. Этапы создания интерфейса информационной системы. Работа с данными и сводными таблицами, их сортировка.
курсовая работа [1,3 M], добавлен 20.08.2014Разработка логической и физической моделей базы данных предприятия и описание атрибутов. Порядок создания справочников и реквизитов базы данных на основе программы "1С:Предприятие 8.2", назначение связей таблиц. Пример сгенерированных SQL-кодов.
курсовая работа [2,7 M], добавлен 02.12.2015Выполнение операций, хранения, редактирования, систематизации данных. Рассмотрение подсистем разрабатываемой системы управления базами данных продуктового магазина. Разработка алгоритма функционирования системы и приложения для работы с базой данных.
курсовая работа [399,1 K], добавлен 26.08.2019Классификация систем управления базами данных. Выбор операционной системы, языка программирования, среды разработки (IDE) и дополнительных компонент. Разработка интерфейса и функций программы по управлению складом, её тестирование и исходный код файлов.
курсовая работа [487,3 K], добавлен 25.12.2015Система управления базами данных (СУБД). Программные средства, предназначенные для создания, наполнения, обновления и удаления базы данных. Структура, модели и классификация баз данных. Создание каталогов, псевдонимов, таблиц, шаблонов и форм СУБД.
презентация [1,1 M], добавлен 09.01.2014Разработка программного продукта - базы данных "Экскурсия" в интегрированной среде программирования C++ Builder 6. Определение порядка просмотра данных базы, их редактирования и удаления. Особенности руководства пользователя и общего интерфейса программы.
курсовая работа [2,4 M], добавлен 03.11.2013