· количество разновидностей форм входной информации;
· количество разновидностей форм выходной информации;
· степень новизны задачи;
· сложность алгоритма;
· вид используемой информации;
· сложность контроля входной и выходной информации;
· язык программирования;
· объем входной информации;
· использование типовых решений, типовых проектов и программ,
· стандартных модулей.
Предусмотрено четыре степени новизны разрабатываемых задач:
· А — разработка задач, предусматривающая применение принципиально новых методов разработки, проведение научно-исследовательских работ;
· Б — разработка типовых проектных решений, оригинальных задач и систем, не имеющих аналогов;
· В — разработка проекта с использованием типовых проектных решений при условии их изменения, разработка проектов, имеющих аналогичные решения;
· Г — привязка типовых проектных решений.
Сложность алгоритма представлена тремя группами:
· 1 — алгоритмы оптимизации и моделирования систем и объектов;
· 2 — алгоритмы учета, отчетности, статистики и поиска;
· 3 — алгоритмы, реализующие стандартные методы решения, а также не предусматривающие применения сложных численных и логических методов.
Пакет программ, представленный в настоящем проекте, относится к степени В новизны разрабатываемой задачи. Сложность алгоритма решаемой задачи — 3.
Плановая прибыль на программу определяется по формуле
Пр = Спр*Нп,, | (7.22.) |
гдеСпр — себестоимость программы, руб.,
Нп — норма прибыли проектной организации (Нп = 0.25).
Себестоимость программы определяется по формуле
Спр = Зрз*F+Зот, | (7.23.) |
гдеF — коэффициент накладных расходов проектной организации без учета эксплуатации ЭВМ (F = 1.15),
Зот — затраты на отладку программы.
Затраты на отладку программы определяются по формуле
Зот = Тотл*Sмч, | (7.24.) |
гдеТотл — трудоемкость отладки программы, час. (Тотл = 32).
Зот = 32* 2504.96 = 80159 (руб), |
Спр = 4667840.77*1.15+80159= 5448175.89 (руб). |
Оптовая цена программы определяется по формуле
Цо = Спр+Пр. | (7.25.) |
Пр = 5448175.89 *0.25 = 1362043.97 (руб), |
Цо = 5448175.89 + 1362043.97 = 5440712.13 (руб), |
Цпр = 5440712.13+(4667840.77+1362043.97)*0.2 = 6646689.08 (руб). |
Ожидаемый годовой экономический эффект от сокращения ручного труда при обработке информации определяется по формуле
ЭФ = Пу-Е*Ко = Пу-Е*(Кз+Цпр), | (7.26.) |
гдеЕ — коэффициент эффективности, равный ставке за кредиты на рынке долгосрочных кредитов (Е = 0.25).
Ко = 175175+6646689.08 = 6821864.08 (руб), |
ЭФ = 4657863.54 -0.25*6821864.08= 2952397.52 (руб). |
Срок возврата инвестиций определяется по формуле
Тв = Ко/Пу, | (7.27.) |
Тв = 6821864.08/ 4657863.54 = 1.46 (лет). |
Результаты расчета сведены в табл. 7.2.
Таблица 7.2
Технико‑экономические показатели проекта
Наименование показателя | Базовый вариант | Проектный вариант |
Трудоемкость решения задачи, час. | 4 | 0.182 |
Периодичность решения задачи, раз/год | 200 | 200 |
Годовые текущие затраты, связанные с решением задачи, млн. руб. | 7.080 | 0.335 |
Отпускная цена программы, млн. руб. | — | 6.647 |
Степень новизны программы | — | В |
Группа сложности алгоритма | — | 3 |
Прирост условной прибыли, млн. руб. | — | 4.658 |
Ожидаемый годовой экономический эффект, млн. руб. | — | 2.952 |
Срок возврата инвестиций, лет | — | 1.46 |
Разработанная «Обучающе-контролирующая система» обеспечивает получение годового экономического эффекта в сумме 2.952 млн. рублей. Прирост условной прибыли составляет 4.658 млн. рублей. При отпускной цене программы в 6.647 млн. рублей проект обеспечивает возврат инвестиций за 1.46 года.
ЗАКЛЮЧЕНИЕ
В результате дипломного проектирования разработана универсальная обучающе-контролирующая система, состоящая из следующих функциональных частей:
1) программа для создания и модификации тестов;
2) сервисная программа администрирования;
3) программа контроля знаний.
Разработанная универсальная обучающе-контролирующая система обладает следующими возможностями:
· создание на основе имеющихся баз знаний тестов по различным предметам;
· модификация созданных тестов;
· формирование билетов;
· задание времени ответа на вопросы билета;
· задание системы оценки результатов тестирования;
· контроль знаний обучаемых посредством тестирования;
· возможность работы системы в ЛВС;
· просмотр и распечатка результатов (протокола) тестирования на принтере
и может быть использована в учебном процессе преподавателями вузов, техникумов и средних школ.
Перспективным направлением дальнейших разработок по проблематике обучающе-контролирующих систем может служить применение в таких системах OLE и мультимедиа технологий.
Все задачи, поставленные при постановке задания, выполнены. Проведенный расчет говорит о экономической целесообразности разработки системы и возможности использования ее в учебном процессе.
Приложение 1
ТЕКСТПРОГРАММЫ TESTBUILDER
program TestBuilder;
uses
Forms,
S2 in 'S2.PAS' {TreeForm},
db_unit in 'db_unit.pas' {EditForm},
addtema in 'addtema.pas' {WinEditTema},
progrInd in 'progrInd.pas' {ProcessForm};
{$R *.RES}
begin
Application.Title:= 'TestBuilder';
Application.CreateForm(TTreeForm, TreeForm);
Application.CreateForm(TEditForm, EditForm);
Application.CreateForm(TWinEditTema, WinEditTema);
Application.CreateForm(TProcessForm, ProcessForm);
Application.Run;
end.
Текстмодуля DB_Unit
unit S2;
interface
uses
SysUtils, WinTypes,{ Windows,} Messages, Classes, Graphics, Controls,
Forms, Dialogs, Buttons, StdCtrls, Grids, Outline, ComCtrls, DBCtrls,
DBTables, DB;
type
TTreeForm = class(TForm)
MainTree: TOutline;
AddDocBut: TSpeedButton;
DeleteBut: TSpeedButton;
FullExpBut: TSpeedButton;
FullColBut: TSpeedButton;
ExitBut: TSpeedButton;
AddTemaBut: TSpeedButton;
TemaSource: TDataSource;
QuestSource: TDataSource;
DBTema: TTable;
DBTemaTema_id: TAutoIncField;
DBTemaTema_name: TStringField;
DBQuest: TTable;
DBQuestTema_id: TIntegerField;
DBQuestQuest_id: TAutoIncField;
DBQuestQuest_name: TMemoField;
procedure AddDocButClick(Sender: TObject);
procedure MainTreeClick(Sender: TObject);
procedure DeleteButClick(Sender: TObject);
procedure FullExpButClick(Sender: TObject);
procedure FullColButClick(Sender: TObject);
procedure ExitButClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure AddTemaButClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure AppendQuestion(temaId: longint);
procedure ClearQuestion;
private
{ Private declarations }
x1,x2: integer; {вспомогательныепеременные}
CreateMainForm: boolean;
public
{ Public declarations }
end;
var
TreeForm: TTreeForm;
implementation
uses db_unit, addtema, progrInd;
{$R *.DFM}
procedure TTreeForm.AddDocButClick(Sender: TObject);
var
Nodename: string;
number,ind,docindex: longint;
begin
If MainTree.Items[MainTree.SelectedItem].Level = 1 then Exit;
If MainTree.Items[MainTree.SelectedItem].Level = 2 then {в NUMBER заноситсяномертемы }
begin
number:= longint(MainTree.Items[MainTree.SelectedItem].Data);{в NUMBER заноситсяномертемы}
ind:= MainTree.SelectedItem;
end
else
begin
number:= longint(MainTree[MainTree.SelectedItem].Parent.Data);
ind:= MainTree[MainTree.SelectedItem].Parent.Index;
end;
AppendQuestion(number); {добавление нового вопроса в БД вопросов}
With MainTree.Items[ind] do
If HasItems then number:= GetLastChild - GetFirstChild + 2 {определениечислапотомков + 2}
else number:= 1;
Str(number,Nodename); {номервопросавтеме}
If MainTree.Items[MainTree.SelectedItem].Level = 2 then
begin
docIndex:= MainTree.AddChildObject(MainTree.SelectedItem,NodeName,
pointer(DBQuest.Fields[1].AsInteger));
MainTree.Items[MainTree.SelectedItem].Expand;
end
else {if... = 3}
docIndex:= MainTree.AddObject(MainTree.SelectedItem,NodeName,
pointer(DBQuest.Fields[1].AsInteger));
MainTree.Selecteditem:= docIndex; {установлениефокусана new вопрос}
end;
procedure TTreeForm.MainTreeClick(Sender: TObject);
Var
cur_id: longint;
NewAnswer: TAnswer;
del_count,i: integer;
begin
if MainTree.Items[MainTree.SelectedItem].Level = 1 then
begin
EditForm.QuestLabel.Hide;
EditForm.DBEditTema.Hide;
EditForm.MemoQuest.Hide;
EditForm.MemoScroll.Enabled:= False;
EditForm.AddAnswerBut.Enabled:= False;
EditForm.DelAnswerBut.Enabled:= False;
Exit;
end;
cur_id:= Longint(MainTree.Items[MainTree.SelectedItem].Data);
EditForm.QuestLabel.Show;
if MainTree.Items[MainTree.SelectedItem].Level = 3 then
begin
With TreeForm.DBQuest do begin {установкафильтранаБДвопросов }
SetKey;
Fields[1].AsInteger:= cur_id;
GotoKey;
end;
EditForm.DBEditTema.Hide;
EditForm.QuestLabel.Caption:= 'Текствопроса';
EditForm.MemoQuest.Show;
EditForm.MemoScroll.Enabled:= True;
EditForm.AddAnswerBut.Enabled:= True;
EditForm.DelAnswerBut.Enabled:= True;
i:= 0; {индекс ДЛЯ ОБЪЕКТА TMemo в списке}
EditForm.DBAnswer.First; {чтобы не было глюков при повторном щелчке на вопросе}
while NOT EditForm.DBAnswer.Eof do
begin
If (i+1) > EditForm.MemoScroll.ComponentCount then
NewAnswer:= TAnswer.Create(EditForm.MemoScroll,100); {добавление new вариантаответавсписок}
TMemo(EditForm.MemoScroll.Components[i]).Text:=
EditForm.DBAnswer.Fields[2].AsString; {Otvet_name}
TCheckBox(EditForm.MemoScroll.Components[i+1]).Checked:=
EditForm.DBAnswer.Fields[3].AsBoolean; {Otvet_name}
inc(i,2); // <--- увеличение индекса ДЛЯ ОБЪЕКТА TMemo в списке
EditForm.DBAnswer.Next;
end;
While i< EditForm.MemoScroll.ComponentCount do {удаление из списка лишних вариантов ответа}
TAnswer.DeleteAnswer(EditForm.MemoScroll,EditForm.MemoScroll.ComponentCount - 2);
If EditForm.MemoScroll.ComponentCount > 0 then TMemo(EditForm.MemoScroll.Components[0]).SetFocus; {Set focus on first answer.}
end
else {if level = 2, т.е. выбранатема}
begin
With TreeForm.DBTema do begin {установкафильтранаБДтем }
SetKey;
Fields[0].AsInteger:= cur_id;
GotoKey;
end;
EditForm.AddAnswerBut.Enabled:= False;
EditForm.DelAnswerBut.Enabled:= False;
EditForm.MemoScroll.Enabled:= False;
EditForm.MemoQuest.Hide;
EditForm.QuestLabel.Caption:= 'Названиетемы';
EditForm.DBEditTema.Show;
end;
end;
procedure TTreeForm.DeleteButClick(Sender: TObject);
begin
If Maintree.SelectedItem = 1 then Exit;
If MainTree.Items[MainTree.SelectedItem].Level = 3 then
begin
If Application.MessageBox('Удалить вопрос ?','Удаление вопроса',
mb_YesNo+mb_IconQuestion+MB_DEFBUTTON2) = IdYes then
begin
ClearQuestion; // логическое удаление вопроса из БД