ЗАКЛЮЧЕНИЕ
В результате проделанной работы была разработана система, которая автоматизирует процесс информирования родителей об успеваемости учеников.
Внедрение данной системы позволило:
· ускорить процесс информирования родителей;
· внедрить современные технологии в воспитательный процесс и, тем самым, улучшить надежность передачи информации;
· сформировать у родителей более полной картины успеваемости ученика.
Мной был написан модуль программного продукта "Оповещение родителей", который реализует следующие функции:
· Формирование на основе Э-журналов БД учеников
· Просмотр БД
Программный продукт "Оповещение родителей", и система в целом, успешно прошли тестовые испытания, и находятся в эксплуатации в г. Зеленогорске, ЧП Жукова Е.А.
СПИСОК ЛИТЕРАТУРЫ
Фленов М. Библия для программиста в среде Delphi/ M. Фленов - БХВ- Петербург, 2005 г.
Фаронов В.В. Программирование баз данных в Delphi 7. Учебный курс./ В.В. Фаронов - СПб.: Питер, 2006
Фурсенко А.А. / Интервью Фурсенко А.А 2008-2009г: Сб. тезисов. / Интернет/ http://mon.gov.ru
ПРИЛОЖЕНИЕ 1
1) Рекомендации по установке
Запустите установочный файл setup.exe. Следуйте подсказкам Мастера Установок.
2) Минимальные системные требования:
IBM PC: MS Windows XP, пакет MS Office 2003 (MS Excel, MS Access), процессор Intel Celeron, Intel Pentium, AMD K6/Athlon/Duron с тактовой частотой не менее 300 МГц, 256 Мбайт ОЗУ, жестким диском не менее 3 Гб , CD-ROM, свободный COM порт, телефон.
3) Описание работы программы.
1. Создайте электронный журнал.
2. Запустить установленное приложение SMS.exe
3. Укажите номер COM-порта к которому подключено устройство отправления SMS (GSM модем).
4. Нажав кнопку "Обзор" укажите папку, содержащие электронные журналы (Важно: помимо файлов электронных папка не должна содержать других файлов формата MS Excel 2003).
5. Нажмите кнопку "Внести оценки в базу данных" и дождитесь конца выполнения операций. Специальное окно подтвердит успешное окончание процесса.
6. Нажмите кнопку "Отправить SMS"
7. Просмотреть сформированные сообщения и статус отправки можно нажав кнопку "Просмотр баз данных" и выбрав интересующую базу.
SMS будут высланы абонентам с указанными номерами телефонов.
ВАЖНО:
Директория, в которую установлена программа, будет содержать папку DataBases, удаление которой запрещено.
Настоятельно рекомендуется регулярно делать резервное копирование папки DataBases на съемный носитель информации.
4) Помощь в случае возникновения ошибок
4.1. Э-оператор
Ошибки возможны в случае невнимательного заполнения Э-журнала. Э-журнал должен соответствовать требованиям, которые содержатся в пт.4.7 главы Описание программы.
При передаче Э-жураналов от Э-оператора к С-оператора следует соблюдать требования техники безопасности.
В случае, если компьютер Э-оператора будет неисправен следует использовать другой (временный или новый) эквивалентным набором технических средств см пт. 5.3.Технические требования.
4.2. С-оператор
В случае, если компьютер С-оператора будет неисправен следует установить программный продукт "Оповещение родителей" на другой (временный или новый) и продолжить работу. Информацию для формирования БД следует скопировать из резервного съемного носителя (папка DataBases).
В случае возникновения ошибок при загрузке данных из журналов и формировании БД следует проверить содержание и оформление Электронных журналов. Требования к Электронному журналу содержатся в пт.4.7 главы Описание программы.
Если сообщения не отправляются или отправляются некорректно рекомендуется проверить настройки передающего устройства (GSM модема). Если GSM модем работает исправно значит, проблема заключается в сотовом операторе.
В случае возникновения иных ошибок следует обратиться к разработчикам программного продукта по указанным ниже координатам:
СФУ, Институт математики, кафедра Вычислительных и информационных технологий, Лаборатория программной инженерии.
660041, г. Красноярск пр. Свободный 79, каб. 34-12
4.3. Родители
Родители, заключившие договор на предоставление услуг посредством программного продукта "Оповещение родителей" оговаривают частоту получения сообщений (ежедневно, еженедельно, ежемесячно и т.д.). В случае если сообщения не доставляются в указанные сроки, доставляются, но не полностью или с ошибками Родители должны связаться с С-оператором по телефону, указанному в договоре и потребовать повторной отправки или распечатки отчета.
Следует отметить, что в случае неисправности сотового телефона Родителей, проблем с обслуживанием Сотовым оператором Родителей и иных проблем С-оператор ответственности не несет. Если Родители не желают больше получать сообщения об успеваемости Ученика, следует расторгнуть договор.
Более подробно все права и обязанности рассмотрены в Договоре
5) Рекомендации по удалению
Запустите установочный файл uninstall.exe. Следуйте подсказкам Мастера Удаления .
ПРИЛОЖЕНИЕ 2
Главное окно (листинг)
unit MainWindow;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExcelXP, OleServer, Buttons, ADODB, FileCtrl, Gauges, DB,
ShellAPI, XPMan, nrclasses, nratcmd, nrgsm, nrcomm, nrcommbox, ExtCtrls;
type
TMainForm = class(TForm)
DirPath: TEdit;
Browse: TBitBtn;
LogBtn: TBitBtn;
XL: TExcelApplication;
WB: TExcelWorkbook;
WS: TExcelWorksheet;
StaticText1: TStaticText;
ADOConnection1: TADOConnection;
ADOCommand1: TADOCommand;
ADOTable1: TADOTable;
SendBtn: TBitBtn;
ADOTable2: TADOTable;
ADOConnection2: TADOConnection;
ADOTable3: TADOTable;
XPManifest1: TXPManifest;
nrComm1: TnrComm;
nrGsm1: TnrGsm;
OpenHideBtn: TSpeedButton;
PupilsBtn: TButton;
MsgBtn: TButton;
procedure BrowseClick(Sender: TObject);
procedure LogBtnClick(Sender: TObject);
procedure SendBtnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure OpenHideBtnClick(Sender: TObject);
procedure PupilsBtnClick(Sender: TObject);
procedure MsgBtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
Path:string;
FileList:array of string;
T:TDateTime;
Year:word;
SchoolList:array of string;
FormList: array of array of string;
implementation
uses DateUtils, ComUnit, StrUtils, DBWindow;
{$R *.dfm}
//Процедура задержки времени на dwMilliseconds милисекунд
//между отправками сообщений
procedure Delay(dwMilliseconds: word);
var
iStart, iStop: DWORD;
begin
iStart := GetTickCount;
repeat
iStop := GetTickCount;
Application.ProcessMessages;
until (iStop - iStart) >= dwMilliseconds;
end;
procedure TMainForm.BrowseClick(Sender: TObject);
begin
SelectDirectory(Выберите папку, содержащую электронные журналы, ,Path);
DirPath.Text:=Path;
end;
{-------Создание сообщений--------}
procedure CreateMessages;
var
i, ID, n, j, x:integer;
S:string;
MyChar:char;
begin
//Открытие таблицы "Школы" в БД MainDB.mdb
MainForm.ADOConnection1.ConnectionString:=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=+GetCurrentDir+DataBasesMainDB.mdb;Persist Security Info=False;
MainForm.ADOConnection1.Open;
MainForm.ADOConnection1.BeginTrans;
MainForm.ADOTable1.TableName:=Школы;
MainForm.ADOTable1.Open;
MainForm.ADOTable1.First;
SetLength(FileList,0);
//Поиск БД учеников согласно таблице "Школы"
While not MainForm.ADOTable1.Eof do
begin
T:=Today;
for i:=1 to 4 do
begin
Year:=YearOf(T);
if i>2
then
Dec(Year);
S:=GetCurrentDir+DataBases+MainForm.ADOTable1.FieldByName(Школа).Value++MainForm.ADOTable1.FieldByName(Класс).Value+DB_+IntToStr(i)+_+IntToStr(Year)+.mdb;
if FileExists(S)
then
begin
SetLength(FileList,Length(FileList)+1);
//FileList:= Список_БД_учеников
FileList[High(FileList)]:=S;
end;
end;
MainForm.ADOTable1.Next;
end;
MainForm.ADOTable1.Close;
//Открытие таблицы "Сообщения" в БД MainDB.mdb
MainForm.ADOTable1.TableName:=Сообщения;
MainForm.ADOTable1.Open;
//Цикл1
for i:=0 to High(FileList)do
begin
MainForm.ADOConnection2.ConnectionString:=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=+FileList[i]+;Persist Security Info=False;
MainForm.ADOConnection2.Open;
MainForm.ADOConnection2.BeginTrans;
//Открытие таблицы "Ученики" в i-той БД учеников
MainForm.ADOTable2.TableName:=Ученики;
MainForm.ADOTable2.Open;
MainForm.ADOTable2.First;
//Цикл2
While not MainForm.ADOTable2.Eof do
begin
if MainForm.ADOTable1.IsEmpty
then
begin
MainForm.ADOTable1.Append;
MainForm.ADOTable1.FieldByName(ID).Value:=1;
end
else
begin
MainForm.ADOTable1.Last;
ID:=MainForm.ADOTable1.FieldByName(ID).Value;
Inc(ID);
MainForm.ADOTable1.Append;
MainForm.ADOTable1.FieldByName(ID).Value:=ID;
end;
//Формирование текста сообщения
MainForm.ADOTable1.FieldByName(Номер абонента).Value:=MainForm.ADOTable2.FieldByName(Телефон).Value;
S:=MainForm.ADOTable2.FieldByName(Имя).Value+#10;
MainForm.ADOTable3.TableName:=MainForm.ADOTable2.FieldByName(Фамилия).Value+ +MainForm.ADOTable2.FieldByName(Имя).Value+ - +MainForm.ADOTable2.FieldByName(Телефон).Value;
MainForm.ADOTable3.Open;
n:=0;
for j:=2 to MainForm.ADOTable3.FieldCount do
begin
S:=S+AnsiReplaceStr(MainForm.ADOTable3.Fields.FieldByNumber(j).FieldName,/,.)+#10;
x:=0;
MainForm.ADOTable3.First;
While not MainForm.ADOTable3.Eof do
begin
MyChar:=#0;
if (Length(MainForm.ADOTable3.Fields.FieldByNumber(j).AsString)=2)
then
begin
MyChar:=MainForm.ADOTable3.Fields.FieldByNumber(j).AsString[2];
end;
if (MainForm.ADOTable3.Fields.FieldByNumber(j).Value<>null)and(MainForm.ADOTable3.Fields.FieldByNumber(j).Value<>)
and(MyChar=#14)
then
begin
S:=S+MainForm.ADOTable3.FieldByName(Предмет).Value+-+MainForm.ADOTable3.Fields.FieldByNumber(j).AsString[1]+#10;
Inc(n);
Inc(x);
MainForm.ADOTable3.Edit;
MainForm.ADOTable3.Fields.FieldByNumber(j).Value:=MainForm.ADOTable3.Fields.FieldByNumber(j).AsString[1];
MainForm.ADOTable3.Post;
end;
MainForm.ADOTable3.Next;
end;
if x=0
then
S:=copy(S,1,Length(S)-Length(MainForm.ADOTable3.Fields.FieldByNumber(j).FieldName+#10));
end;
MainForm.ADOTable3.Close;
j:=Length(S);
While (S[j]= )or(S[j]=#10) do
begin
S:=copy(S,1,Length(S)-1);
Dec(j);
end;
MainForm.ADOTable1.FieldByName(Текст сообщения).Value:=S;
//есть новые оценки?
if n=0
then
MainForm.ADOTable1.Cancel
else
//Добавление записи в таблице "Сообщения"
MainForm.ADOTable1.Post;
MainForm.ADOTable2.Next;
end;
//конец Цикл2
MainForm.ADOTable2.Close;
MainForm.ADOConnection2.CommitTrans;
MainForm.ADOConnection2.Close;
end;
//конец Цикл1
MainForm.ADOTable1.Close;
MainForm.ADOConnection1.CommitTrans;
MainForm.ADOConnection1.Close;
end;
//Внесение оценок в БД
procedure TMainForm.LogBtnClick(Sender: TObject);
var
SR: TSearchRec;
i, j, r, c, x, y, ID:integer;
Range: ExcelRange;
Matrix: array of array of string;
School, Form, Term:string;
Existing:boolean;
Progress: TGauge;
StaticText: TStaticText;
Label1_: TLabel;
Label2_: TLabel;
begin
//---Изменение размера окна
i:=ClientHeight;
Constraints.MaxHeight:=311;
ClientHeight:=i+111;
StaticText:=TStaticText.Create(MainForm);
with StaticText do
begin
Font.Size:=10;
Font.Style:=[fsBold];
Caption:=Подождите, идёт добавленние данных. Это может занять несколько минут;
Top:=i+8;
Left:=7;
Height:=33;
Width:=321;
Alignment:=taCenter;
AutoSize:=true;
Parent:=MainForm;
end;
Label1_:=TLabel.Create(Self);
with Label1_ do
begin
Font.Size:=10;
Top:=i+48;
Left:=24;
Caption:=Добавляется файл;
AutoSize:=true;
Parent:=Self;
end;
Label2_:=TLabel.Create(Self);
with Label2_ do
begin
Font.Size:=10;
Top:=i+48;
Left:=152;
AutoSize:=true;
Parent:=Self;
end;
Progress:=TGauge.Create(Self);
with Progress do
begin
Top:=i+72;
Left:=16;
Height:=25;
Width:=MainForm.ClientWidth-32;
ForeColor:=$66cc66;
Parent:=Self;
end;
Progress.PercentDone;
Progress.AddProgress(0);
MainForm.Refresh;
//---
//---Поиск электронных журналов по указанному пути
Path:=DirPath.Text;
if Path[Length(Path)]=
then
Path:=Path
else
Path:=Path+;
SetLength(FileList,0);
if FindFirst(Path + *.xls, faAnyFile, SR) = 0 then
begin
repeat
if (SR.Attr <> faDirectory) then
begin
SetLength(FileList,Length(FileList)+1);
//FileList:=Список_электронных_журналов
FileList[High(FileList)]:=SR.Name;
end;
until FindNext(SR) <> 0;
FindClose(SR);
end;
//Цикл1
for i:=0 to High(FileList)do
begin
T:=Today;
Label2_.Caption:=FileList[i];
MainForm.Refresh;
Term:=FileList[i];
School:=copy(Term,1,pos(_,Term)-1);
Term:=copy(Term,pos(_,Term)+1,Length(Term)-pos(_,Term));
Form:=copy(Term,1,pos(_,Term)-1);
Term:=copy(Term,pos(_,Term)+1,pos(.,Term)-pos(_,Term)-1);
Year:=YearOf(T);
if (Term=3)or(Term=4)
then
Dec(Year);
//Папка "ШколаКласс" существует?
if not
FileExists(GetCurrentDir+DataBases+School++Form+DB_+Term+_+IntToStr(Year)+.mdb)
then
begin
if not DirectoryExists(GetCurrentDir+DataBases+School++Form)
then
begin
if not FileExists(GetCurrentDir+DataBasesMainDB.mdb)
then
CopyFile(PChar(GetCurrentDir+DataBasesBaseMainDB.mdb),PChar(GetCurrentDir+DataBasesMainDB.mdb),false);
//Создание папки "ШколаКласс"
CreateDir(GetCurrentDir+DataBases+School);
CreateDir(GetCurrentDir+DataBases+School++Form);
ADOConnection1.ConnectionString:=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=+GetCurrentDir+DataBasesMainDB.mdb;Persist Security Info=False;
ADOConnection1.Open;
ADOConnection1.BeginTrans;
//Добавление записи в таблице "Школы" в MainDB.mdb
ADOTable1.TableName:=Школы;
ADOTable1.Open;
ADOTable1.Append;
ADOTable1.FieldByName(Школа).Value:=School;
ADOTable1.FieldByName(Класс).Value:=Form;
ADOTable1.Post;
ADOTable1.Close;
ADOConnection1.CommitTrans;
ADOConnection1.Close;
end;
CopyFile(PChar(GetCurrentDir+DataBasesBaseDataBase.mdb),PChar(GetCurrentDir+DataBases+School++Form+DB_+Term+_+IntToStr(Year)+.mdb),false);
end;
//Открытие файла DB_ч_год.mdb
ADOConnection1.ConnectionString:=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=+GetCurrentDir+DataBases+School++Form+DB_+Term+_+IntToStr(Year)+.mdb;Persist Security Info=False;
ADOConnection1.Open;
ADOConnection1.BeginTrans;
//Открытие i-ого электронного журнала
WB.ConnectTo(XL.Workbooks.Open(
Path+FileList[i],
2,
False,;
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
False,
EmptyParam,
EmptyParam,
0));
//Цикл2
for j:=1 to WB.Sheets.Count do
begin
SetLength(Matrix,0,0);
WS.ConnectTo(WB.Worksheets[j] as _WorkSheet);
Range := WS.Range[A1, EmptyParam].SpecialCells(xlCellTypeLastCell, EmptyParam);
SetLength(Matrix,Range.Row,Range.Column);
for r:=0 to High(Matrix)do
for c:=0 to High(Matrix[r])do
Matrix[r,c]:=WS.Cells.Item[r+1,c+1];
y:=0;
for r:=High(Matrix) downto 0 do
begin
x:=0;
for c:=0 to High(Matrix[r])do
if Matrix[r,c]=
then
Inc(x);
if x=Length(Matrix[r])
then
Inc(y)
else
break;
end;
x:=0;
for r:=High(Matrix[0])downto 0 do
if Matrix[0,r]=
then
Inc(x)
else
break;
SetLength(Matrix,Length(Matrix)-y,Length(Matrix[0])-x);
for r:=1 to High(Matrix)do
begin
x:=0;
for c:=High(Matrix[r])downto 0 do
if Matrix[r,c]=
then
Inc(x)
else
break;
SetLength(Matrix[r],Length(Matrix[r])-x);
end;
//Цикл3
for x:=1 to High(Matrix)do
begin
try
ADOTable1.TableName:=Matrix[x,1]+ - +Matrix[x,0];
ADOTable1.Open;
except
ADOTable1.TableName:=Ученики;
ADOTable1.Open;
if ADOTable1.IsEmpty
then
begin
ADOTable1.Append;
ADOTable1.FieldByName(ID).Value:=1;
end
else
begin
ADOTable1.Last;
ID:=ADOTable1.FieldByName(ID).Value;
Inc(ID);
ADOTable1.Append;
ADOTable1.FieldByName(ID).Value:=ID;
end;
//Добавление записи в таблицу "Ученики"
ADOTable1.FieldByName(Фамилия).Value:=copy(Matrix[x,1],1,pos( ,Matrix[x,1])-1);
ADOTable1.FieldByName(Имя).Value:=copy(Matrix[x,1],pos( ,Matrix[x,1])+1,Length(Matrix[x,1])-pos( ,Matrix[x,1]));
ADOTable1.FieldByName(Телефон).Value:=Matrix[x,0];
ADOTable1.Post;
ADOTable1.Close;
//Создание таблицы "Фамилия_Имя - Телефон"
ADOCommand1.CommandText:=Create Table [+
Matrix[x,1]+ - +Matrix[x,0]+] ([Предмет] varchar(30), ;
for y:=2 to High(Matrix[0])-1 do
ADOCommand1.CommandText:=ADOCommand1.CommandText+
[+Matrix[0,y]+] varchar(2), ;
ADOCommand1.CommandText:=ADOCommand1.CommandText+
[+Matrix[0,High(Matrix[0])]+] varchar(2));
ADOCommand1.Execute;
//Открытие таблицы "Фамилия_Имя - Телефон"
ADOTable1.TableName:=Matrix[x,1]+ - +Matrix[x,0];
ADOTable1.Open;
end;
ADOTable1.First;
Existing:=false;
//---Внесение оценок в таблицу
While not ADOTable1.Eof do
begin
if ADOTable1.FieldByName(Предмет).Value=WS.Name
then
begin
Existing:=true;
break;
end;
ADOTable1.Next;
end;
if Existing
then
begin
ADOTable1.Edit;
for y:=2 to High(Matrix[x]) do
if (ADOTable1.FieldByName(Matrix[0,y]).Value<>Matrix[x,y])
and(Matrix[x,y]<>)
then
ADOTable1.FieldByName(Matrix[0,y]).Value:=Matrix[x,y]+#14;
ADOTable1.Post;
end
else
begin
ADOTable1.Append;
ADOTable1.FieldByName(Предмет).Value:=WS.Name;
for y:=2 to High(Matrix[x]) do
if Matrix[x,y]<>
then
ADOTable1.FieldByName(Matrix[0,y]).Value:=Matrix[x,y]+#14;
ADOTable1.Post;
end;
ADOTable1.Close;
//---
end;
//конец Цикл3
Progress.AddProgress(Round(100/(Length(FileList)*WB.Sheets.Count)));
end;
//конец Цикл2
WB.Close;
ADOConnection1.CommitTrans;
ADOConnection1.Close;
end;
//конец Цикл1
//Изменение размера окна
Progress.AddProgress(100);
Progress.Destroy;
Label1_.Destroy;
Label2_.Destroy;
StaticText.Destroy;
ClientHeight:=ClientHeight-111;
Constraints.MaxHeight:=200;
CreateMessages; //Создание сообщений
MessageDlg(Данные успешно внесены,mtInformation,[mbOK],0);
end;
{-------Отправка сообщений--------}
procedure TMainForm.SendBtnClick(Sender: TObject);
var
S1,S2:string;
S:WideString;
start,n,i:integer;
begin
MainForm.nrComm1.Active:=true;
ADOConnection1.ConnectionString:=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=+GetCurrentDir+DataBasesMainDB.mdb;Persist Security Info=False;
ADOConnection1.Open;
ADOConnection1.BeginTrans;
//Открытие таблицы "Сообщения" в MainDB.mdb
ADOTable1.TableName:=Сообщения;
ADOTable1.Open;
ADOTable1.First;
start:=0;
//Цикл1
While not ADOTable1.Eof do
begin
//Сообщение отправлено?
if not ADOTable1.FieldByName(Статус отправки).AsBoolean
then
begin
if (ADOTable1.FieldByName(Номер абонента).Value<>)or(ADOTable1.FieldByName(Номер абонента).Value<>null)
then
begin
S1:=ADOTable1.FieldByName(Номер абонента).Value;
S:=ADOTable1.FieldByName(Текст сообщения).Value;
n:=1;
if Length(S)>69
then
n:=(Length(S) div 69)+1;
if ((Length(S)+n*4)div 69)>(n-1)
then
Inc(n);
if n>1
then
for i:=1 to n do
begin
S:=IntToStr(i)+/+IntToStr(n)+#10+S;
S2:=copy(S,1,69);
S:=copy(S,70,Length(S)-69);
//Отправка сообщения абоненту
nrGsm1.SmsSend(S1,S2,false);
//Ожидание 15 секунд для отправки сообщения
Delay(15000);
end
else
begin
//Отправка сообщения абоненту
nrGsm1.SmsSend(S1,S,false);
//Ожидание 15 секунд для отправки сообщения
Delay(15000);
end;
ADOTable1.Edit;
ADOTable1.FieldValues[Статус отправки]:=true;
ADOTable1.FieldByName(Дата отправки).Value:=DateToStr(Today);
- Список принятых обозначений и сокращений
- ВВЕДЕНИЕ
- ГЛАВА 1. ПРЕДПРОЕКТНЫЕ ИССЛЕДОВАНИЯ
- 1.1 Предметная область
- 1.2 Проблемная область
- ГЛАВА 2. ТЕХНИЧЕСКОЕ ЗАДАНИЕ
- 2.1 Требования к программе или программному изделию
- 2.2 Порядок контроля и приема
- ГЛАВА 3. ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
- 3.1 Назначение и область применения
- 3.2 Технические характеристики
- 3.3 Выбор критериев отбора технических средств
- 3.4 Выбор операционной среды и средств разработки
- ГЛАВА 4. ОПИСАНИЕ ПРОГРАММЫ
- 4.1 Общие сведения
- 4.2 Описание логической структуры
- 4.3 Структура хранения данных
- 4.4 Алгоритм
- 4.5 Используемые технические средства
- 4.6 Вызов и загрузка
- 4.7 Входные данные
- 4.8 Выходные данные
- ГЛАВА 5. ПРОГРАММА И МЕТОДИКА ИСПЫТАНИЙ
- 5.1 Объект испытании
- 5.2 Цель испытаний
- 5.3 Технические требования
- 5.4 Порядок проведения испытаний
- 5.5 Методы испытаний
- ЗАКЛЮЧЕНИЕ