Разработка программного обеспечения для оценки уровня знаний студентов с применением технологии "Клиент-сервер" — страница 2
Обновлено
Наибольшую опасность представляет двухполюсное прикосновение человека к токоведущим частям, когда он оказывается под полным рабочим напряжением сети.
Допустимые значения напряжения прикосновения и тока, протекающего через тело человека, регламентированы ГОСТом 12.038-82 и оцениваются по трем критериям электробезопасности:
1. Ощутимый ток. Не вызывает нарушения деятельности организма и допускается для длительного протекания. Сила тока для переменного тока 0,3 МА. Сила тока для постоянного тока 1 МА.
2. Отпускающий ток. Его действие на человека допустимо, если длительность протекания не превышает 30 секунд. Сила для переменного тока 6 МА. Сила для постоянного тока 15 МА.
3. Фибриляционный ток. Допускается воздействие не более 1 секунды. Сила для переменного тока 50 МА. Сила для постоянного тока 200 МА.
Технические и организационные меры защиты обеспечивают недоступность токопроводящих частей и невозможность случайного прикосновения к ним, устраняют опасность поражения при замыкании на корпус или на землю.
Техника безопасности электрооборудования включает в себя следующие виды защиты от поражения током:
- ограждение токопроводящих частей;
- блокировку;
- предупредительные надписи;
- двойную изоляцию корпусов;
изоляцию токопроводящих частей;
защитное разделение питания;
защитное заземление металлических частей корпусов.
Освещенность рабочего места должна удовлетворять требованиям СНиП 11-4-79 «Строительные нормы. Нормы проектирования. Естественное и искусственное освещение». Освещение при работе с ЭВМ должно быть смешанным: естественное (боковое или прямое) и искусственное (общее). Искусственное освещение должно осуществляться с помощью люминесцентных ламп. При естественном освещении должны применяться средства солнцезащиты (светорассеивающие шторы или жалюзи). Для исключения бликов отражения на экране применяются антибликовые покрытия, специальные фильтры и другие средства предусмотренные заводом изготовителем оргтехники в целях обеспечения соответствия с европейским стандартом TCO'99.
Для освещения кабинета используются естественные и искусственные формы, то есть в дневное, не пасмурное, время суток в качестве естественной формы освещения выступает Солнце, а в качестве искусственной формы освещения используются люминесцентные лампы. Для поступления солнечных лучей в кабинетах имеются три окна со светорассеивающими шторами.
В соответствии с требованиями СНиП 11-4-79 уровень освещенности на рабочем месте при искусственном освещении должен быть не менее 300 лк в кабинетах колледжа этот показатель составляет в среднем 323 лк.
Элементы рабочего места - рабочее кресло и стол должны соответствовать требованиям ГОСТа 12.2.032-78 и ГОСТа 21889-76.
Площадь помещений для работников ВЦ следует предусматривать величиной не менее 6.0 м^2 на человека. В соответствии с ВСНиП 4559-88 рабочий стол должен регулироваться по высоте в пределах 680-760 мм. Оптимальные размеры рабочей поверхности столешницы 1600x900 мм. Под столешницей рабочего стола должно быть свободное пространство для ног с размерами по высоте не менее 600 мм, по ширине 500 мм, по глубине 650 мм. На поверхности рабочего стола для документов необходимо предусмотреть размещение специальной подставки, расстояние которой от глаз должно быть аналогичным расстоянию от глаз до клавиатуры, что позволяет снизить зрительное утомление.
Рабочий стул (кресло) должен обеспечивать удобную посадку при работе и обладало следующими функциональными возможностями:
Устойчивое основание, например, пять ножек на роликах. Конструкция ножек должна соответствовать поверхности пола, независимо от того, гладкий он или с ковровым покрытием.
Возможность регулировки кресла по высоте и углу наклона. Высота кресла должна легко регулироваться в пределах от 40 до 52 см (считается расстояние от пола до сиденья). Если рост выше или ниже среднего, может потребоваться кресло с большим диапазоном регулировки. Необходимо отрегулировать кресло таким образом, чтобы рабочая поверхность или полка для клавиатуры были на уровне локтя, ступни ног полностью стояли на полу, а колени согнуты и расположены немного ниже бедер. В идеальном случае сиденье кресла должно наклоняться как вперед (минимум на 5 градусов), так и назад (минимум на 10 градусов). Если кресло имеет регулируемое сиденье, необходимо наклонить его немного вперед. Это перенесет нагрузку с позвоночника на бедра и ступни, уменьшив нагрузку на спину.
Изогнутый край сиденья. Передняя часть сиденья должна быть изогнута и иметь мягкие края.
Регулируемая по высоте и наклону спинка. Очень важно, чтобы спинка плотно прилегала к нижней части спины (пояснице).
Легко вращающееся основание, которое позволяет свободно поворачиваться в обе стороны.
Полностью регулируемые и мягкие подлокотники. Подлокотники не должны препятствовать регулировке кресла и мешать вплотную придвигаться к рабочей поверхности.
На рабочем месте необходимо предусматривать подставку для ног.
В соответствии с эргономическими требованиями, установленными ГОСТом 21829-76 ВДТ должен отвечать следующим требованиям:
яркость свечения экрана не менее 100 кд/м2;
минимальный размер светящейся точки - не более 0.4 мм;
контрастность изображения знака - не менее 0.8;
экран должен иметь антибликовое покрытие.
В настоящее время установлены жесткие стандарты безопасности на современные мониторы, что понижает риск ухудшения самочувствия при работе с ними. Клавиатура не должна быть жестко связана с монитором.
Большой опасностью для любого предприятия являются пожары, наносящие немалые убытки. Главными причинами возникновения пожаров на производстве являются:
короткое замыкание;
повышенная температура окружающих предметов;
неисправное электрооборудование или неправильная его эксплуатация.
Пожарная профилактика - это комплекс организационных и технических мероприятий, направленных на обеспечение безопасности людей, на предотвращение пожара, ограничение его распространения, а также на создание условий для успешного тушения пожара.
Во избежание пожара или взрыва, необходимо строго выполнять противопожарные меры безопасности.
Устройство и эксплуатация оборудования, зданий и сооружений должны соответствовать требованиям противопожарной безопасности.
Для прекращения процесса горения используются следующие основные меры:
- Охлаждение горящих веществ путем нанесения на их поверхность теплоемких огнетушащих средств (воды, пены и т.д.) или перемешивания слоев горящей жидкости.
- Разбавление концентрации горючих паров, пыли и газов путем введения в зону горения инертных газов (азот, углекислый газ).
- Изоляция горящих веществ от зоны горения нанесением на их поверхность изолирующих огнегасительных средств (пены, песка, кашмы).
- Химическое торможение реакции горения путем орошения поверхности горящих материалов или объемного разбавления горючей пыле - газо- и паровоздушной системы флегматизирующими веществами и составами.
Противопожарные меры ГОУ СПО «Тульский экономический колледж» заключаются в следующем:
в коридорах висят планы эвакуации в случае пожара;
имеется пожарный кран в коридорах на каждом этаже и огнетушители типа ОХВП-10 в каждом кабинете.
6. Экономическая часть6.1 Расчет себестоимости программного продуктаВ экономической части дипломного проекта рассчитывается себестоимость программного продукта.
Исходные данные для расчёта себестоимости программного продукта приведены в таблице 1.
Таблица 1. Исходные данные
Наименование | Значение | |
Количество форм входной информации Из них: переменной нормативно-справочная банка данных | 3 2 0 1 | |
Количество разновидностей форм выходной информации | 1 | |
Степень новизны задачи | Б | |
Сложность алгоритма | 1 | |
Вид используемой информации | ПИ | |
Сложность контроля: входной информации выходной информации | 12 22 | |
Язык программирования | Borland Delphi 6.0 | |
Вид обработки | Режим реального времени (РВ) |
Алгоритм расчёта себестоимости программного продукта:
анализ исходных данных;
расчёт трудоёмкости разработки программного продукта;
расчёт стоимости машинного часа;
расчёт стоимости программного продукта;
Расчёт трудоёмкости разработки программного продукта по стадиям представлен в Таблице 2.
Таблица 2. Трудоёмкость разработки по стадиям
Стадия разработки проекта | Затраты времени | Поправочный коэффициент | Затраты времени с учётом поправочного коэффициента | |
Значение | Значение | |||
1 | 2 | 3 | 4 | |
1. Разработка технического задания | ||||
1.1. Затраты времени разработчика постановки задачи | 15 | 0,65 | 9,5 | |
1.2. Затраты времени разработчика программного обеспечения | 15 | 0,35 | 5,25 | |
2. Разработка эскизного проекта | ||||
2.1. Затраты времени разработчика постановки задачи | 34 | 0,7 | 23,8 | |
2.2. Затраты времени разработчика программного обеспечения | 34 | 0,3 | 10,2 | |
3. Разработка технического проекта | ||||
3.1. Затраты времени разработчика постановки задачи | 9 | 1,827 | 16,443 | |
3.2. Затраты времени разработчика программного обеспечения | 5 | 1,827 | 9,135 | |
4. Разработка рабочего проекта | ||||
4.1. Затраты времени разработчика постановки задачи | 3 | 3,6936 | 11,0808 | |
4.2. Затраты времени разработчика программного обеспечения | 27 | 3,6936 | 99,7272 | |
5. Внедрение | ||||
5.1. Затраты времени разработчика постановки задачи | 5 | 1,39 | 6,95 | |
5.2. Затраты времени разработчика программного обеспечения | 5 | 1,39 | 6,95 |
Стоимость одного машинного часа определяется по формуле
, где (7)Эксп - эксплуатационные годовые затраты (в рублях);Тф - количество часов, отработанных всеми машинами в год (час).Эксплуатационные годовые затраты включают в себя:1 Годовая амортизация оборудования (Аоб), формула 8;2 Годовые затраты на ремонт оборудования (Роб), формула 9;3 Расходы на электроэнергию (Зэл), формула 10;4 Прочие расходы (Зпр), формула 14.1. Годовая амортизация оборудования определяется:, где (8)Косн - коэффициент амортизации основного оборудования (в процентах);Сосн - стоимость основного оборудования (в рублях);Квсп - коэффициент амортизации вспомогательного оборудования (в процентах);Свсп - стоимость вспомогательного оборудования (в рублях).В данном случае стоимость одного принтера пропорционально распределена между двумя компьютерами. руб.2. Годовые затраты на текущий ремонт составляют 5% от общей стоимости используемого оборудования., где (9)Собщ - общая стоимость оборудования (в рублях). руб.3. Затраты на электроэнергию складываются из расходов на освещение Вос (формула 10) и расходов на производственное потребление электроэнергии Вэ (формула 11).Зэл=Вос+Вэ, где (10)Вос - расходы на освещение (в рублях);Вэ - расходы на производственное потребление электроэнергии (в рублях)., где (11)S - площадь помещения (в квадратных метрах);Кэ - усреднённый расход энергии, для освещения одного квадратного метра площади помещения в год (кВт на квадратный метр);Стар - тариф (в рублях).руб.
, где (12)
Нуст - мощность одного компьютера (кВт);
Н - количество компьютеров (штук);
К - коэффициент учитывающий потери в сети;
Стар - тариф (в рублях);
Ф - годовой фонд времени работы оборудования рассчитывается по формуле:
, где (13)Нг - число дней в году;Нвых - число выходных дней в году;Нпр - число праздничных дней в году;Ксм - коэффициент сменности;Фдн - продолжительность рабочего дня;Кзаг - коэффициент загрузки оборудования;Крем - коэффициент, учитывающий потери времени на ремонт оборудования. часа.Тогда расходы на производственное потребление электроэнергии (по формуле 12) равны руб.Затраты на электроэнергию (по формуле 10) равны руб.
4. Прочие расходы составляют 5% от суммы расходов по предыдущим пунктам.
, где (14)Аоб - сумма годовой амортизации (в рублях);Робщ - годовые затраты на ремонт (в рублях);Э - расходы на электроэнергию (в рублях). руб.Тогда эксплуатационные годовые расходы составляют:, где (15)Аоб - сумма годовой амортизации (в рублях);Робщ - годовые затраты на ремонт (в рублях);Э - расходы на электроэнергию (в рублях);Зпр - прочие расходы (в рублях).руб.
Количество часов, отработанных всеми машинами в год равно:
, где (16)Н - количество компьютеров (в штуках);Ф - годовой фонд времени работы оборудования (в часах). часовТогда стоимость одного машинного часа (по формуле 7) равна: руб.6.1.2 Расчёт стоимости программного продукта.Стоимость программного продукта определяется по формуле:, где (17)Тдн - затраты времени на разработку (чел.-дней);Змес - среднемесячная зарплата (в рублях);Ндн - количество рабочих дней в месяце (дни);Тмаш - затраты времени на отладку и внедрение (в часах);См.ч. - стоимость одного машинного часа (в рублях). руб.ЗаключениеВ данном дипломном проекте представлена «Автоматизированная система контроля знаний на основе архитектуры клиент-сервер», реализованная в среде программирования Borland Delphi 6.0.
Дополнительные средства разработки и возможности среды программирования позволили осуществить формирование и ведение базы теста, вывод необходимых форм и отчета успеваемости, создать удобный пользовательский интерфейс включающий:
· стандартная строка меню;
· кнопки - для активизации функций системы;
· сопроводительные сообщения.
Для повышения надежности хранения информации предусмотрены программные средства защиты информации:
· резервное сохранение базы теста;
Наличие встроенной контекстной помощи позволяет упростить использование программы.
Дипломный проект был выполнен в заданный срок.
Приложение 1Листинг кода серверной части программыprogram HLServer;
uses
Forms,
BaseUnit in 'BaseUnit.pas' {MainForm},
QBaseWork in 'QBaseWork.pas',
UBaseWork in 'UBaseWork.pas';
{$R *.res}
begin
Application. Initialize;
Application. CreateForm (TServerForm, ServerForm);
Application. Run;
end.
unit BaseUnit;
interface
uses
QBaseWork, UBaseWork, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, Grids, StdCtrls, ExtCtrls, Menus, CommCtrl, ComCtrls,
IniFiles, WinSock, ComObj, OleServer, Word97, ShellCtrls, Buttons, Word2000;
const
NM_Register1 = 6; // прием списка групп
NM_Register2 = 7; // запрос на список студентов
NM_RegisterGetWorks = 66; // запрос / ответ 'список предметов'
NM_RegisterGetTeachers = 77; // запрос / ответ 'список преподователей'
NM_RegisterOK = 8; // клиент зарегистрирован
NM_Service = 31; // прием сервисной информации
NM_TestEvent = 55; // событие по ходу тестирования
NM_FileOperation = 10; // сетевая операция с файлами
NM_EndOfTest = 33; // окончание тестирования
NM_KickFromServer = 44; // отключение от сервера администратором
NM_OutOfTime = 50; // отключение по истечении времени
NM_DataError = 54; // проблема с БД
NM_Wait = 61;
type
PCustomWinSocket=TCustomWinSocket;
Questions=record // Структура вопроса
Passed:boolean; // пройден (да/нет)
Style:byte; // стиль вопроса {radio, check, memo}
UserAnswer: word; // ответ пользователя
TrueAnswer: word; // верный ответ
end;
PathID=record
WorkID:byte;
TeacherID:byte;
end;
Peoples=record // структура 'Пользователь'
SocketHandle: Integer; // дескриптор соединения
Ip:string[15]; //IP адрес
Num:byte; // номер клиента
Registered:boolean; // прошел регистрацию (да/нет)
TestingAbortedByTime:boolean;
Group:string[8]; // группа
Name:string[20]; // имя
Teacher:string[40]; // преподаватель
WorkName:string[40]; // наим. дисциплины
WorkPath:string[255]; // рабочая директория пользователя
UserWorkPathID: PathID; // идентификаторы дисциплины и преподавателя
ImageType:string[3]; // тип файла вопросов {зарезервировано}
QuestCount:byte; // количество вопросов
OpenQuest:byte; // Ссылка на билет из массива Questions
// для дальнейшего
TimeLater:TTime; // потрачено времени
SumTime:TTime; // общий бюджет бремени
PassedCount:byte; // пройдено вопросов
True_:byte; // верных ответов
False_:byte; // неверных ответов
Mark:byte; // оценка
PassTest:boolean; // тест пройден (да/нет)
Questions:array [1..255] of Questions; // массив пройденных вопросов
end;
type
TServerForm = class(TForm)
ServerSocket1: TServerSocket;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
ComboBox1: TComboBox;
ListBox1: TListBox;
Label2: TLabel;
Label3: TLabel;
Timer1: TTimer;
Label4: TLabel;
Label5: TLabel;
TabSheet4: TTabSheet;
ConnectionCount: TLabel;
Timer2: TTimer;
TabSheet8: TTabSheet;
Panel3: TPanel;
Button3: TButton;
Button4: TButton;
Image1: TImage;
RadioGroup1: TRadioGroup;
ShellTreeView1: TShellTreeView;
ShellListView1: TShellListView;
ComboBox2: TComboBox;
Bevel8: TBevel;
Label1: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label16: TLabel;
Label10: TLabel;
Label17: TLabel;
Label18: TLabel;
Bevel1: TBevel;
Bevel4: TBevel;
Bevel5: TBevel;
Bevel6: TBevel;
Bevel7: TBevel;
Bevel9: TBevel;
Bevel13: TBevel;
Bevel10: TBevel;
Bevel11: TBevel;
Bevel12: TBevel;
Bevel14: TBevel;
Bevel15: TBevel;
Bevel16: TBevel;
Bevel17: TBevel;
Bevel18: TBevel;
Bevel19: TBevel;
Bevel20: TBevel;
WordDocument1: TWordDocument;
SpeedButton1: TSpeedButton;
PageControl2: TPageControl;
TabSheet3: TTabSheet;
TabSheet5: TTabSheet;
StringGrid1: HLringGrid;
StringGrid2: HLringGrid;
TabSheet6: TTabSheet;
Memo1: TMemo;
Button7: TButton;
Button8: TButton;
SaveDialog1: TSaveDialog;
Panel2: TPanel;
Label29: TLabel;
Label30: TLabel;
Label31: TLabel;
Label32: TLabel;
TabSheet7: TTabSheet;
ReportGrid: HLringGrid;
Button1: TButton;
procedure ServerSocket1ClientConnect (Sender: TObject;
Socket: TCustomWinSocket);
procedure FormCreate (Sender: TObject);
procedure FormDestroy (Sender: TObject);
procedure ServerSocket1ClientRead (Sender: TObject;
Socket: TCustomWinSocket);
procedure ComboBox1Change (Sender: TObject);
procedure Timer1Timer (Sender: TObject);
procedure ServerSocket1ClientDisconnect (Sender: TObject;
Socket: TCustomWinSocket);
procedure Timer2Timer (Sender: TObject);
procedure StringGrid1DblClick (Sender: TObject);
procedure Button3Click (Sender: TObject);
procedure ShellListView1Change (Sender: TObject; Item: TListItem;
Change: TItemChange);
procedure ShellListView1DblClick (Sender: TObject);
procedure Image1Click (Sender: TObject);
procedure ShellTreeView1Enter (Sender: TObject);
procedure ServerSocket1ClientError (Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure Button1Click (Sender: TObject);
procedure SpeedButton1Click (Sender: TObject);
procedure StringGrid1SelectCell (Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure Button7Click (Sender: TObject);
procedure Button8Click (Sender: TObject);
private
function DecodeNumToSocketNum (StationNum: byte): byte;
procedure SendQuestion (ForStation: byte; TheFile: String; QuesHLyle:byte; TrueAnswer: Word);
procedure TestEvent (StationNum: byte; Socket_:PCustomWinSocket);
procedure SendFileMessage (var Message: TMessage); message WM_USER;
procedure LogMessage (var Message: TMessage); message WM_USER+2;
procedure FillReportTable;
procedure CreateReport;
procedure TableClear (Table:HLringGrid);
procedure ReFillTable;
procedure CriticalClientDisconnect (Ip, Name, Group, WorkName,
TeacherName: String; TrueAnsw, FalseAnsw: byte; TimeLater: TTime);
procedure TimeRefresh;
procedure ProblemWithData (From_:PCustomWinSocket; TxtMessage: string);
procedure AddLogMessage (Message_: string);
procedure DisconnectComboBoxUpdate;
procedure TimeOUTTesting (StationNum: byte);
// function DecodeSocketToClientNum (Socket_: THandle): byte;
end;
var
ServerForm: TServerForm;
FOptions:TIniFile;
NetworkErrors:word;
RootPath:string;
DataSetForReport:array [0..44] of Peoples;
CurrenHLation:byte;
GroupList: String;
RegisteredClients:byte;
PassedTestCount:byte;
ConnectedSumm:byte;
// TimeForPassTest:TTime;
SelectedRow:integer;
CurrentQuestFile:string;
CurrentQuestionNum:integer;
DoAction:boolean;
QUESTIONBASE:TQuestDB;
USERSBASE:TUsersDB;
SecCounter:byte;
Processing:boolean;
implementation
{$R *.dfm}
procedure TServerForm. SendQuestion (ForStation:byte; TheFile: String; QuesHLyle: Byte; TrueAnswer: Word); // Отправка вопроса
var FileStream:TMemoryStream; // Файловый поток
Command:byte; // Команда
procedure LoadFileForSend (const FileName: string); // Локальная процедура подготовки
var Stream: HLream; // файлового потока
Count: Int64; // размер файла данных
MakePointer:DWORD; // искусственный указатель
CurrSize: Int64; // размер файлового потока
FNameLen:byte; // длина имени файла (для корректного распознавания на стороне клиента)
begin
Stream:= TFileStream. Create (FileName, fmOpenRead or fmShareDenyWrite); // создаем поток
try
Count:= Stream. Size;
Stream. Position:=0;
// далее переносим информацию в поток
FileStream. WriteBuffer (Count, SizeOf(Int64)); // размер файла данных
FNameLen:=Length(FileName);
FileStream. WriteBuffer (FNameLen, 1); // длина имени файла
FileStream. WriteBuffer (Pointer(FileName)^, FNameLen); // имя файла
FileStream. Position:=0;
CurrSize:=FileStream. Size;
FileStream. SetSize (Count+CurrSize); // расширяем поток (в смысле размера)
MakePointer:=DWORD (FileStream. Memory)+CurrSize;
if Count<>0 then Stream. ReadBuffer (Pointer(MakePointer)^, Count); // переписываем данные из потока в поток
// с использованием указателя на память
finally
Stream. Free; // освобождаем промежуточный поток
end;
end;
begin
try
Command:=NM_FileOperation;
FileStream:=TMemoryStream. Create;
FileStream. WriteBuffer (Command, 1);
FileStream. WriteBuffer (TrueAnswer, 2);
FileStream. WriteBuffer (QuesHLyle, 1);
LoadFileForSend(TheFile);
FileStream. Position:=0;
ServerSocket1. Socket. Connections[ForStation].SendStream(FileStream); // отправка потока
except
FileStream. Free;
end
end;
// очищать неверный дисконнект
procedure TServerForm. SendFileMessage (var Message: TMessage); // внутреннее событие отправка файла
var
DataStream:TMemoryStream;
Data:byte;
StationNum:byte;
PSock:TCustomWinSocket;
begin
StationNum:=Message.WParam;
if DataSetForReport[StationNum].PassedCount=0 then
begin
DataStream:=TMemoryStream. Create; // создаем поток
Data:=NM_Service; // код команды
DataStream. WriteBuffer (Data, 1);
Data:=DataSetForReport[StationNum].QuestCount; // количество вопросов
DataStream. WriteBuffer (Data, 1);
DataStream. WriteBuffer (DataSetForReport[StationNum].SumTime, SizeOf (DataSetForReport[StationNum].SumTime)); // время на тестирование
DataStream. Position:=0;
ServerSocket1. Socket. Connections [DecodeNumToSocketNum(StationNum)].SendStream(DataStream);
// отправка потока
sleep(1); // задержка 1ms
end;
PSock:=ServerSocket1. Socket. Connections [DecodeNumToSocketNum(StationNum)];
TestEvent (StationNum,@PSock); // генерация события связанного с тестированием
