- •ВВЕДЕНИЕ
- •1.1 Общая характеристика водоснабжающих организаций
- •1.2 Обзор и сравнение существующих программных продуктов для автоматизации учета рабочего времени в водоснабжающей организации
- •Выводы по первому разделу
- •2 ПРОЕКТИРОВАНИЕ ИНФОРМАЦИОННОЙ СИСТЕМЫ ДЛЯ АВТОМАТИЗАЦИИ ОПЕРАТИВНОГО УЧЕТА РАБОЧЕГО ВРЕМЕНИ ВОДОСНАБЖАЮЩЕЙ ОРГАНИЗАЦИИ
- •2.1 Постановка задачи проектирования информационной системы
- •2.2 Анализ предметной области проектирования информационной системы
- •Предметной областью разработки является деятельность водоснабжающей организации по учету рабочего времени.
- •1) Обработка сведений о сотрудниках;
- •2) Учет и анализ информации о текущем графике работ конкретного сотрудника;
- •3) Обработка данных о выезде на места аварий;
- •4) Работа со сведениями о нарушениях графика работ сотрудников;
- •5) Вывод информации анализа в наглядной форме, в виде отчетов.
- •Основными предполагаемыми пользователями системы является:
- •Гость ‒ лицо, не имеющее существенных прав. Имеет право на просмотр некоторых отчётов.
- •Входные и выходные документы для разрабатываемой ИС учета рабочего времени сотрудников, имеют форму бумажных носителей.
- •Входным документом является унифицированная форма Т-12 ‒ документ двойного назначения [7-8].
- •Выходными документами выступают:
- •В качестве СУБД выбрано PostgreSQL, клиент для работы с БД pgAdmin3, так как присутствует опыт работы, так же СУБД удобна для использования [11].
- •2.3 Построение функциональных моделей, описывающих бизнес-процесс учета рабочего времени сотрудников в водоснабжающей организации
- •Выводы по второму разделу
- •В результате написания второго раздела курсового проекта был проведен анализ предметной области, выявлены категории пользователей разрабатываемого приложения.
- •Также была определена цель и задачи разработки информационной системы, которая предназначена для автоматизации процесса учета рабочего времени сотрудников водоснабжающей организации.
- •Были построены следующие модели для последующего проектирования ИС: функциональная модель бизнес-процесса по стандарту IDEF0, логическая и физическая модель данных по стандарту IDEF1X.
- •3 РАЗРАБОТКА И ТЕСТИРОВАНИЕ ИНФОРМАЦИОННОЙ СИСТЕМЫ ДЛЯ АВТОМАТИЗАЦИИ УЧЕТА РАБОЧЕГО ВРЕМЕНИ СОТРУДНИКОВ В ВОДОСНАБЖАЮЩЕЙ ОРГАНИЗАЦИИ
- •3.1 Описание таблиц баз данных
- •3.2 Дерево программных модулей
- •3.3 Схема взаимосвязей модулей и массивов данных
- •3.4 Алгоритм формирования отчета обо всех авариях, которые были локализованы
- •3.5 Инструкция пользователя по установке программного продукта и работа с ним
- •3.6 Способы и результаты тестирования программного продукта в различных режимах
- •Выводы по третьему разделу
- •ЗАКЛЮЧЕНИЕ
- •СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
- •ПРИЛОЖЕНИЕ А
- •ПРИЛОЖЕНИЕ Б
- •ПРИЛОЖЕНИЕ В
- •ПРИЛОЖЕНИЕ Г
- •План выполнения курсового проекта
- •Рисунок Г.1 ‒ План курсового проекта
- •Рисунок Г.2 ‒ План курсового проекта
- •Рисунок Г.3 ‒ План курсового проекта
- •Рисунок Г.4 ‒ План курсового проекта
- •ПРИЛОЖЕНИЕ Д
- •Листинг Д.2 ‒ Отчеты
ПРИЛОЖЕНИЕ Г
План выполнения курсового проекта
Рисунок Г.1 ‒ План курсового проекта
Рисунок Г.2 ‒ План курсового проекта
52
Рисунок Г.3 ‒ План курсового проекта
Рисунок Г.4 ‒ План курсового проекта
53
ПРИЛОЖЕНИЕ Д
Листинг программы Листинг Д.1 ‒ Справочники
<%= form_for(@avar) do |f| %> <% if @avar.errors.any? %> <div id="error_explanation">
<h2><%= pluralize(@avar.errors.count, "error") %> prohibited this avar from being saved:</h2>
<ul>
<% @avar.errors.full_messages.each do |message| %>
<li><%= message %></li> <% end %>
</ul>
</div> <% end %>
<div class="field">
<%= f.label :Вид_аварии %><br>
<%= f.collection_select(:vid_id, Vid.all, :id, :vid) %>
</div>
<div class="field">
<%= f.label :Сотрудник %><br>
<%= f.collection_select(:sotr_id, Sotr.all, :id, :fam) %>
</div>
<div class="field">
<%= f.label :Дата_аварии %><br> <%= f.datetime_select :datanah %> </div>
<div class="field">
<%= f.label :Дата_локализации_аварии
%><br>
<%= f.datetime_select :data_k %> </div>
<div class="field">
<%= f.label :Результат_ремонта %><br>
<%= f.collection_select(:result_id, Result.all, :id, :result) %>
</div>
<div class="field">
<%= f.label :Статус %><br> <%= f.check_box :status %>
</div>
<div class="field">
<%= f.label :Удаление %><br> <%= f.check_box :s_delete %> </div>
<div class="actions">
<%= f.submit "Добавить" %> </div>
<% end %>
<div class="mens8"> <div class="men8">
<h1>Редактирование Аварий</h1>
<%= render 'form' %>
<%= link_to 'Показать', @avar %> | <%= link_to 'Назад', avars_path %> </div>
</div>
<p id="notice"><%= notice %></p> <h1>Аварии</h1>
<%= link_to 'Новая авария', new_avar_path %>
<%= link_to 'Главная страница', controller: 'home_page' %>
<table class="table"> <thead>
<tr>
<th class="thdl">Вид аварии</th> <th class="thdl">Сотрудник</th> <th class="thdl">Дата аварии</th>
<th class="thdl">Дата локализации аварии</th>
<th class="thdl">Результат ремонта</th>
<th class="thdl">Статус</th> <th class="thdl">Удаление</th>
<th class="thdl" colspan="3"></th> </tr>
</thead>
<tbody>
<% @avars.each do |avar| %>
54
<% if avar.s_delete == false %> <tr>
<% else %>
<tr bgcolor="Red"> <% end %>
<td class="tddl"><%= avar.vid.vid %></td>
<td class="tddl"><%= avar.sotr.fam %></td>
<td class="tddl"><%= avar.datanah %></td>
<td class="tddl"><%= avar.data_k %></td>
<td class="tddl"><%= avar.result.result %></td>
<td class="tddl"><%= avar.status %></td>
<td class="tddl"><%= avar.s_delete %></td>
<td class="tddl"><%= link_to 'Показать', avar %></td>
<td class="tddl"><%= link_to 'Изменить', edit_avar_path(avar) %></td>
<% if session[:user_id] == 1 %>
<td class="tddl"><%= link_to 'Удалить', avar, method: :delete, data: { confirm: 'Вы уверены?' } %></td>
<% end %> </tr>
<% end %> </tbody> </table>
<div class="mens8"> <div class="men8"> <h1>Новая авария</h1> <%= render 'form' %>
<%= link_to 'Назад', avars_path %> </div>
</div>
<div class="mens9"> <div class="men9">
<p id="notice"><%= notice %></p> <p>
<strong>Вид аварии:</strong> <%= @avar.vid.vid %>
</p>
<p> <strong>Сотрудник:</strong> <%= @avar.sotr.fam %>
</p>
<p>
<strong>Дата аварии:</strong> <%= @avar.datanah %>
</p>
<p>
<strong>Дата локализации аварии:</strong>
<%= @avar.data_k %> </p>
<p>
<strong>Результат ремонта:</strong>
<%= @avar.result.result %> </p>
<p> <strong>Статус:</strong> <%= @avar.status %> </p>
<p> <strong>Удаление:</strong> <%= @avar.s_delete %> </p>
<%= link_to 'Изменить', edit_avar_path(@avar) %> |
<%= link_to 'Назад', avars_path %> </div>
</div>
class AvarsController < ApplicationController before_action :set_avar, only: [:show, :edit, :update, :destroy]
#GET /avars
#GET /avars.json def index
@avars = Avar.all end
#GET /avars/1
#GET /avars/1.json def show
end
#GET /avars/new def new
@avar = Avar.new end
55
#GET /avars/1/edit def edit
end
#POST /avars
#POST /avars.json def create
@avar = Avar.new(avar_params)
respond_to do |format| if @avar.save
format.html { redirect_to @avar, notice: 'Был успешно создан' }
format.json { render :show, status: :created, location: @avar }
else
format.html { render :new } format.json { render json: @avar.errors,
status: :unprocessable_entity } end
end end
#PATCH/PUT /avars/1
#PATCH/PUT /avars/1.json def update
respond_to do |format|
if @avar.update(avar_params) format.html { redirect_to @avar, notice:
'Успешно обновлен' }
format.json { render :show, status: :ok, location: @avar }
else
format.html { render :edit } format.json { render json: @avar.errors,
status: :unprocessable_entity } end
end end
#DELETE /avars/1
#DELETE /avars/1.json def destroy @avar.destroy respond_to do |format|
format.html { redirect_to avars_url,
notice: 'Avar was successfully destroyed.' } format.json { head :no_content }
end end
private
#Use callbacks to share common setup or constraints between actions.
def set_avar
@avar = Avar.find(params[:id]) end
#Never trust parameters from the scary internet, only allow the white list through.
def avar_params params.require(:avar).permit(:vid_id,
:sotr_id, :datanah, :data_k, :result_id, :status, :s_delete)
end end
.table{
border-spacing: 0 10px; font-family: 'Open Sans', sans-serif; font-weight: bold;
}
.thdl {
padding: 10px 20px; background: rgb(7, 150, 175); color: rgb(250, 250, 250); border-right: 2px solid; font-size: 15px;
}
.thdl:first-child { text-align: left;
}
.thdl:last-child { border-right: none;
}
.tddl {
vertical-align: middle; padding: 10px; font-size: 14px; text-align: center;
border-top: 2px solid rgb(7, 150, 175); border-bottom: 2px solid rgb(7, 150, 175); border-right: 2px solid rgb(7, 150, 175);
}
56