Дипломная работа: Подсистема визуальной генерации отчётов в рамках информационно-образовательного портала
П.А.4 ТРЕБОВАНИЯ К ПРОГРАММЕ
П.А.4.1 Требования к функциональным характеристикам
Программа должна обеспечивать возможность выполнения перечисленных ниже функций:
· иметь удобный и интуитивно понятный интерфейс для пользователя;
· оперативно получать доступ к данным из базы данных университета;
· автоматически сортировать данные по выбранным характеристикам;
· конструирование отчётов по выбранным характеристикам;
· возможность форматирования элементов отчёта;
· вывод отчёта на печать;
· ограниченный доступ (доступ к программному средству и БД получают только авторизованные пользователи);
· выгрузка в популярные форматы (doc, docx, pdf и др.).
П.А.4.2 Входные данные программы
Входные данные вводятся с клавиатуры, либо выбираются пользователями и обрабатываются программным средством, и представляют собой различную совокупность текстовой информации.
П.А.4.3 Выходные данные программы
Выходные данные выводятся программным средством пользователям и представляют собой различную совокупность текстовой и графической информации и набор байт (файлов).
П.А.4.4 Требования к надежности
Надежное функционирование программы должно быть обеспечено выполнением совокупности нижеописанных мероприятий:
· организацией бесперебойного питания технических средств;
· использованием лицензионного программного обеспечения;
· отсутствием вредоносных программ на технических средствах;
· авторизацией пользователей;
· контролем входных данных.
П.А.4.5 Требования к составу и параметрам технических средств
В состав технических средств должен входить IBM - совместимый компьютер, включающий в себя:
1) Процессор: не ниже Pentium 3 - 800 Mhz;
2) Оперативная память: не менее 128 Mb;
3) Место на жестком диске: не менее 100 Mb;
4) Монитор;
5) Мышь, клавиатура;
6) Доступ к локальной сети.
П.А.4.6 Требования к информационной и программной совместимости
Требования к информационной и программной совместимости программы не выдвигаются.
П.А.4.7.1 Определение структуры входных и выходных данных
Входные данные должны вводиться пользователем в текстовой форме. Проверка правильности введенных данных, а так же способы сохранения информации в необходимой форме реализованы в программном средстве.
П.А.4.7.2 Язык программирования
Для реализации программы «Подсистема визуальной генерации отчётов в рамках информационно-образовательного портала» должен быть использован язык программирования PHP, JavaScript, HTML, XML, фреймоворк CodeIgniter, а также приложение для работы с базой данных Postgre SQL(версии 8.4 и выше).
П.А.4.7.3 Операционная система
Программа должна функционировать в любой операционной системе семейства Windows, Linux.
Для работы с данным программным средством необходимо наличие программы-сервера с возможностью управления базами данных и обработкой SQL запросов(Postgre SQL 8.4.+), а также современного браузера(Internet Explorer 8+, Opera 10+,Mozilla Firefox 3.6+, Google Chrome) на стороне клиента.
П.А.5 ТРЕБОВАНИЯ К ПРОГРАММНОЙ ДОКУМЕНТАЦИИ
В состав программной документации должны входить следующие разделы:
· задание;
· техническое задание по ГОСТ 19.201;
· текст программы по ГОСТ 19.401-78.
П.А.6 СТАДИИ И ЭТАПЫ РАЗРАБОТКИ
Системный анализ (с 15.12.2010 по 12.02.2011):
· изучение предметной области;
· определение области применения и целей использования;
· поиск вариантов решения поставленных задач;
· определение ограничений и диапазонов функционирования разрабатываемого программного средства;
· определение структуры программного комплекса;
· подготовка технического задания.
Общесистемное проектирование (с 12.02.2011 по 25.02.2011):
· определение структуры программного комплекса;
· определение структуры алгоритмов и модулей;
· создание функциональной модели программного средства.
Подготовка технологических средств (с 25.02.2011 по 5.03.2011):
· выбор языка программирования;
· выбор и подготовка инструментальных средств и средств отладки;
· разработка инструкций к применению методов.
Программная реализация, рабочий проект (с 5.03.2011 по 23.03.2011):
· разработка текстов программных модулей;
· проектирование пользовательского интерфейса;
· разработка программных единиц.
Отладка программного средства в статике (с 23.04.2011 по 25.05.2011):
· тестирование программных модулей;
· локализация ошибок, корректировка исходных текстов, информационных потоков, компиляция;
П.А.7 ПОРЯДОК КОНТРОЛЯ И ПРИЕМКИ
Порядок и контроль приёмки определяются заведующим кафедрой «ПОВТ и АС». Главным требованием к приемке является наличие отчета, представленного в печатном виде.
Разработал
студент группы ВИ-51
Каныгин Дмитрий ______ (подпись)________(дата)
Приложение Б
Исходный код программы
index.php
<?php
include "blocks/bd.php";//Прикрепляем соединение с базой данных
include "blocks/lock.php";//Прикрепляем файл авторизации
$result = mysql_query("SELECT * FROM infopage WHERE page='index'");
$myrow = mysql_fetch_array ($result);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-1251" />
<title><?php echo $myrow['title']; //инклудим заголовок браузера?></title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table width="95%" border="0" align="center" cellpadding="0" cellspacing="0" class="global_table">
<?php include"blocks/header.php"; //инклудим заголовок?>
<tr>
<td align="center" valign="middle"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<?php include"blocks/menu.php";//инклудим меню?>
<td valign="top"><?php echo $myrow['text']; ?></td>
</tr>
</table></td>
</tr>
<?php include"blocks/footer.php";//инклудим нижнюю часть?>
</table>
</body>
</html>
add_obrab.php – модуль обработчика добавления информации в отчёт;
<?php
include "blocks/bd.php";//Прикрепляем соединение с базой данных
include "blocks/lock.php";//Прикрепляем файл авторизации
$result = mysql_query("SELECT * FROM infopage WHERE page='add_stud'");
$myrow = mysql_fetch_array ($result);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-1251" />
<title><?php echo $myrow['title']; ?></title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table width="95%" border="0" align="center" cellpadding="0" cellspacing="0" class="global_table">
<?php include"blocks/header.php";?>
<tr>
<td align="center" valign="middle"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<?php include"blocks/menu.php";?>
<td valign="top"><?php echo $myrow['text']; ?>
<form action="add_stud_obrab.php" method="post" name="add_stud" class="add_stud_form">
<p> Фамилия студента:</p><p> <input name="fam" type="text" size="40" maxlength="255" /></p>
<p> Имя студента:</p> <p> <input name="name" type="text" size="40" maxlength="255" /></p>
<p> Отчество студента:</p><p> <input name="otchestvo" type="text" size="40" maxlength="255" /></p>
<p> Дата рождения:</p><p> День <select name="den_rozh" size="1">
<?php
for ($i=1; $i<=31; $i++)
{
echo "<option> $i </option> ";
}
?>
</select>
Месяц <select name="m_rozh" size="1">
<?php
for ($i=1; $i<=12; $i++)
{
echo "<option> $i </option> ";
}
?>
</select>
Год <select name="g_rozh" size="1">
<?php
for ($i=1940; $i<=2010; $i++)
{
echo "<option> $i </option> ";
}
?>
</select>
</p>
<?php /* ///////////////////////////////////////////////////////////////////// */?>
<p> Дата поступления:</p><p> День <select name="den_postuplen" size="1">
<?php
for ($i=1; $i<=31; $i++)
{
echo "<option> $i </option> ";
}
?>
</select>
Месяц <select name="m_postuplen" size="1">
<?php
for ($i=1; $i<=12; $i++)
{
echo "<option> $i </option> ";
}
?>
</select>
Год <select name="g_postuplen" size="1">
<?php
for ($i=1940; $i<=2010; $i++)
{
echo "<option> $i </option> ";
}
?>
</select>
</p>
<?php /* ///////////////////////////////////////////////////////////////////// */?>
<p> Дата выпуска:</p><p> День <select name="den_vipusk" size="1">
<?php
for ($i=0; $i<=31; $i++)
{
echo "<option> $i </option> ";
}
?>
</select>
Месяц <select name="m_vipusk" size="1">
<?php
for ($i=0; $i<=12; $i++)
{
echo "<option> $i </option> ";
}
?>
</select>
Год <select name="g_vipusk" size="1">
<?php
echo "<option> 0000 </option> ";
for ($i=1940; $i<=2010; $i++)
{
echo "<option> $i </option> ";
}
?>
</select>
</p>
<p> Дата отчисления:</p><p> День <select name="den_otchislen" size="1">
<?php
for ($i=0; $i<=31; $i++)
{
echo "<option> $i </option> ";
}
?>
</select>
Месяц <select name="m_otchislen" size="1">
<?php
for ($i=0; $i<=12; $i++)
{
echo "<option> $i </option> ";
}
?>
</select>
Год <select name="g_otchislen" size="1">
<?php
echo "<option> 0000 </option> ";
for ($i=1940; $i<=2010; $i++)
{
echo "<option> $i </option> ";
}
?>
</select>
</p>
<p> Дата восстановления:</p><p> День <select name="den_vosstanov" size="1">
<?php
for ($i=0; $i<=31; $i++)
{
echo "<option> $i </option> ";
}
?>
</select>
Месяц <select name="m_vosstanov" size="1">
<?php
for ($i=0; $i<=12; $i++)
{
echo "<option> $i </option> ";
}
?>
</select>
Год <select name="g_vosstanov" size="1">
<?php
echo "<option> 0000 </option> ";
for ($i=1940; $i<=2010; $i++)
{
echo "<option> $i </option> ";
}
?>
</select>
</p>
<?php /* Выбор факультета */ ?>
<p>Факультет:</p><p> <select name="fak" size="1">
<?php
$result=mysql_query("SELECT * FROM fakultet ORDER BY name",$db);
$myrow=mysql_fetch_array($result);
do
{
echo "<option>".$myrow['name']." </option> ";
}
while ($myrow=mysql_fetch_array($result));
?>
</select>
</p>
<?php /* Выбор факультета */ ?>
<p>Группа:</p><p> <select name="gruppa" size="1">
<?php
$result2=mysql_query("SELECT * FROM gruppa ORDER BY name",$db);
$myrow2=mysql_fetch_array($result2);
do
{
echo "<option>".$myrow2['name']." </option> ";
}
while ($myrow2=mysql_fetch_array($result2));
?>
</select>
</p>
<p> Номер студенческого билета:</p><p> <input name="nomer_stud" type="text" size="40" maxlength="255" /></p>
<p> Номер зачетной книжки:</p><p> <input name="nomer_zachetki" type="text" size="40" maxlength="255" /></p>
<p> Адрес домашний:</p><p> <input name="adress_dom" type="text" size="40" maxlength="255" /></p>
<p> Адрес проживания:</p><p> <input name="adress_projivani" type="text" size="40" maxlength="255" /></p>
<p> Телефон домашний:</p><p> <input name="tel_dom" type="text" size="40" maxlength="255" /></p>
<p> Телефон моб:</p><p> <input name="tel_mob" type="text" size="40" maxlength="255" /></p>
<p>Академический отпуск</p><p> <select name="akadem" size="1">
<option>Нет</option>
<option>Да</option>
</select></p>
<p>Основа обучения</p><p> <select name="budj" size="1">
<option>Бюджет</option>
<option>Коммерция</option>
</select></p>
<p> Примечание:</p><p> <textarea name="primechanie" cols="35" rows="7"></textarea></p>
<p><input name="submit" type="submit" value="Добавить" /></p>
</form>
</td>
</tr>
</table></td>
</tr>
<?php include"blocks/footer.php";?>
</table>
</body>
</html>
style.css
/* CSS Document */
body
{
background-image:url(pic/fon.jpg);
font:Verdana, Arial, Helvetica, sans-serif;
font-size:12px;
}
textarea
{
/*background-color:#EDFFE1;*/
margin:10px;
margin-left:0px;
}
/*option
{
background-color:#EDFFE1;
}
input
{
background-color:#EDFFE1;
}
*/
hr
{
width:95%;
color:#00CC00;
border:1px solid #91E89F;
font-weight: 100;
}
p
{
font:Verdana, Arial, Helvetica, sans-serif;
font-size:16px;
margin:10px;
color:#003300;
}
global_table
{
background-color:#FFFFFF;
border:solid 1px #333333;
}
niz_header
{
border-bottom:3px solid #006600;
}
top_niz
{
background-image: url(pic/footer_mini.jpg);
background-repeat: no-repeat;
background-position: right bottom;
border-top:3px solid #006600;
}
menu_fon
{
background-image: url(pic/fon_men.jpg);
background-repeat: repeat-y;
background-position: left;
border-right:1px solid #006600;
font-size:14px;
}
left_zagolovok
{
text-align:center;
font:Verdana, Arial, Helvetica, sans-serif;
font-weight:bold;
border-left:2px solid #006600;
border-bottom:2px solid #009900;
display:block;
width:90%;
}
menu_link a:link
{
text-align:center;
font:Verdana, Arial, Helvetica, sans-serif;
font-weight:bold;
border:1px solid #006600;
display:block;
width:90%;
text-decoration:none;
color:#003300;
background-color:#D0FDC8;
}
menu_link a:visited
{
text-align:center;
font:Verdana, Arial, Helvetica, sans-serif;
font-weight:bold;
border:1px solid #006600;
display:block;
width:90%;
text-decoration:none;
color:#003300;
background-color:#D0FDC8;
}
menu_link a:active
{
text-align:center;
font:Verdana, Arial, Helvetica, sans-serif;
font-weight:bold;
border:1px solid #006600;
display:block;
width:90%;
text-decoration:none;
color:#003300;
background-color:#FFFF00;
}
menu_link a:hover
{
text-align:center;
font:Verdana, Arial, Helvetica, sans-serif;
font-weight:bold;
border:1px solid #006600;
display:block;
width:90%;
text-decoration:none;
color:#003300;
background-color:#00CC00;
}
zagolovok
{
font:Verdana, Arial, Helvetica, sans-serif;
font-size:36px;
text-align:center;
color:#FF0000;
}
mini_table
{
border:1px solid #215909;
}
header_mini_table
{
font:Verdana, Arial, Helvetica, sans-serif;
font-size:16px;
background-color:#009900;
color:#ffffff;
text-align:left;
font-weight:bold;
margin-left:10px;
}
body_mini_table
{
font:Verdana, Arial, Helvetica, sans-serif;
font-size:12px;
background-color:#D0FDC8;
color:#000000;
text-align:left;
}
header_mini_table_text
{
margin-left:10px;
}
header_mini_table_text a:link
{
margin-left:10px;
font:Verdana, Arial, Helvetica, sans-serif;
font-size:16px;
color:#FFFFFF;
text-align:left;
font-weight:bold;
}
header_mini_table_text a:visited
{
margin-left:10px;
font:Verdana, Arial, Helvetica, sans-serif;
font-size:16px;
color:#FFFFFF;
text-align:left;
font-weight:bold;
}
header_mini_table_text a:hover
{
margin-left:10px;
font:Verdana, Arial, Helvetica, sans-serif;
font-size:16px;
color:#FFFF00;
text-align:left;
font-weight:bold;
}
body_mini_table_text
{
margin-left:10px;
font:Verdana, Arial, Helvetica, sans-serif;
font-size:16px;
color:#003300;
text-align:left;
margin-left:10px;
margin-right:10px;
margin-bottom:3px;
margin-top:3px;
}
add_stud_form
{
text-align:left;
font:Verdana, Arial, Helvetica, sans-serif;
font-size:14px;
font-weight:bold;
}
gruppa_text a:link
{
font:Verdana, Arial, Helvetica, sans-serif;
font-size:14px;
color:#006600;
text-align:left;
font-weight:bold;
}
gruppa_text a:visited
{
font:Verdana, Arial, Helvetica, sans-serif;
font-size:14px;
color:#006600;
text-align:left;
font-weight:bold;
}
gruppa_text a:hover
{
font:Verdana, Arial, Helvetica, sans-serif;
font-size:18px;
color:#FF0000;
text-align:left;
font-weight:bold;
}
stud_in_gruppa_text a:link
{
font:Verdana, Arial, Helvetica, sans-serif;
font-size:14px;
color:#006600;
text-align:left;
font-weight:bold;
}
stud_in_gruppa_text a:visited
{
font:Verdana, Arial, Helvetica, sans-serif;
font-size:14px;
color:#006600;
text-align:left;
font-weight:bold;
}
stud_in_gruppa_text a:hover
{
font:Verdana, Arial, Helvetica, sans-serif;
font-size:14px;
color:#FF0000;
text-align:left;
font-weight:bold;
}
mess
{
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 16px;
font-weight: bold;
color: #006600;
text-decoration: blink;
}
Дополнительные модули, подключаемые к основным:
bd.php – Модуль соединения с базой данных
<?php
$db = mysql_connect ("localhost","ok","123123"); //Функция соединения с сервером базы данных, где localhost - это адрес сервера (обычно по умолчанию он такой всегда, ОК - имя пользователя, 123123 - пароль , в переменную $db заносится результат выполнения этой функции. результатом является идентификатор сессии).
mysql_select_db("students",$db);// функция соединения с самой базой. где students - это название базы, $db - это наш идентификатор сессии соединения с сервером БД. Причем если используется всего один сервер, то идентификатор в функции mysql_select_db можно не использовать.
?>
footer.php
<tr>
<td align="center" valign="middle" class="top_niz"><div align="right">
<p> </p>
</div></td>
</tr>
header.php
<tr class="niz_header">
<td align="center" valign="middle" class="niz_header"><div align="left"><img src="pic/logo_mini.jpg" width="449" height="150" /></div></td>
</tr>
Menu.php
<td width="200" align="left" valign="top" class="menu_fon"><p>
<center>
<div class="left_zagolovok">Меню</div><br />
<div class="menu_link">
<a href="index.php" >Главная страница</a>
<a href="students_all.php">Список студентов</a>
<a href="fak_all.php">Факультеты</a><br />
<a href="add_stud.php">Добавить студента</a>
<br />
<a href="add_fak.php">Добавить факультет</a>
<a href="edit_fak.php">Редактировать факультет</a>
<a href="del_fak.php">Удалить факультет</a>
</div>
</center>
</p>
</td>
lock.php – модуль авторизации пользователя.
<?php
include("blocks/bd.php");
if (!isset($_SERVER['PHP_AUTH_USER']))
{
Header ("WWW-Authenticate: Basic realm=\"Отдел кадров студентов ВУЗа ДГТУ\"");
Header ("HTTP/1.0 401 Unauthorized");
exit();
}
else {
if (!get_magic_quotes_gpc()) {
$_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
$_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
}
$query = "SELECT pass FROM userlist WHERE user='".$_SERVER['PHP_AUTH_USER']."'";
$lst = @mysql_query($query);
if (!$lst)
{
Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header ("HTTP/1.0 401 Unauthorized");
exit();
}
if (mysql_num_rows($lst) == 0)
{
Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header ("HTTP/1.0 401 Unauthorized");
exit();
}
$pass = @mysql_fetch_array($lst);
if ($_SERVER['PHP_AUTH_PW']!= $pass['pass'])
{
Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header ("HTTP/1.0 401 Unauthorized");
exit();
}
}
?>
Приложение В
Скриншот работы программного средства
На рисунке В.1 представлен внешний вид программного средства «Генератор отчётов». Программное средство имеет приятный и интуитивно понятный интерфейс.
Рисунок B.1 – Внешний вид программы «Генератор отчётов» (Авторизованный пользователь)
При запуске приложения пользователю предлагается ввести логин и пароль (Рисунок B.2) для авторизации, иначе в доступе к работе с программой и базами данных будет отказано.
Рисунок B.2 – Окно авторизации программы «Генератор отчётов»