5. Программа и методика испытаний
Над завершённым программным продуктом был проведён ряд испытаний:
А)
1) запущена программа
2) введены новые данные
3) совершен выход из программы
4) программа была вновь открыта : добавленные данные присутствовали.
Вывод : данные были успешно сохранены в файле(при просмотре директории файл присутствовал).
5) испытание было повторено
В)
1) После запуска программы были открыты данные для корректировки и изменены некоторые из них.
2) Потом некоторые записи были удалены.
3) Во время просмотра удалённые записи отсутствовали, а корректировавшиеся были изменены.
4) Был совершен выход из программы и повторный запуск.
5) Все ранее внесённые изменения присутствовали.
Вывод : программа успешно корректирует и удаляет данные, а потом сохраняет изменения в файле.
С)
1) Программа была загружена.
2) В структуру данных внесены изменения.
3) Совершён нестандартный выход.
4) Программа вновь загружена.
При просмотре сделан вывод: нестандартный выход имеющийся файл данных не повредил, однако новые изменения внесены небыли.
Вывод по всем испытаниям:
С возложенной задачей программа успешно справляется, не требуя при этом большого количества ресурсов системы.
6. Описание применения
Написанная мною программа является СУБД и предназначена для хранения данных об поступивших на склад объектах. Она может найти применение на различного рода хранилищах и складах или в процессах использующих те же принципы хранения и обработки информации.
Программа сконфигурирована под MS DOS и установка Windows ей не требуется.
Минимальные требования: CPU—Pentium 100 m, и ОЗУ—8Мв, наличие стандартных устройств ввода-вывода.
Данный программный продукт обладает дружелюбным интерфейсом, и легкость управления работой.
Для упрощения доступа к данным реализован поиск, сходный по применению с поиском в справочной системе компилятора BorlandC++3.0.
Программа проста в использовании и не требует никаких дополнительных программных и технических средств от ЭВМ, и специальной квалификации от пользователя.
Её системные требования довольно низкие, поэтому программу можно использовать даже на старых моделях компьютеров.
Заключение
Поставленная задача выполнена на уровне моих представлений о потребностях склада, поэтому возможен некоторый отрыв от реальности (но, так как программа может быть модифицирована, это легко исправить).
В связи с тем, что программа не получит коммерческого распространения и новые её версии разрабатываться не будут, я не использовал многие возможности предлагаемые объектно-ориентированным подходом в программировании, чтобы не увеличивать время разработки программы и не ухудшать её читабельность.
Литература
1. Гилберт Шилдт "Borland C++"
2. Гради Буч "Объектно-ориентированный анализ и проектирование".
Приложение А
Листинг программы
#include <conio.h>
#include <stdio.h>
#include <graphics.h>
#include <iostream.h>
#include <dir.h>
#include <PROCESS.H>
#include <IO.h>
#include <dos.h>
#include <time.h>
#include <FSTREAM.H>
void append();
void Mousebut(int *cbb,int *xx,int *yy);
void HideMouse();
void ShowMouse();
char Conv(int);
void Correct(void);
int Find();
void DrawMain(int);
void Timeout();
int nzap=0,regim;
int exitp;
char userprg[15]=" ";
time_t lt;
char *mch;
class DataF {
public:
char datep[10];
char name[20];
char col_vo[10];
char ed_ism[5];
char inform[200];
char user[15];
char GetPole(char *str,int nb,int rzc)
{
int i;
if(rzc==0)
for(i=0;i<nb;i++)
{
str[i]=' ';
};
int ic;
char chr;
int nb1=nb,nb2=nb;
if(rzc!=0){if(nb>100)nb2=30; for(i=0;i<nb2-2;i++)cout<<str[i];nb1=nb1-2; cout<<"_"; };
for(i=((rzc!=0)?nb1:0);i<nb-1;i++)
{
ic=getch();
if(ic==13)break;
if(ic==27){nzap--;i=nb;};
if(ic==8){str[i-1]=' ';i=i-2;gotoxy(wherex()-2, wherey()); cout<<"_"; cout<<" "; gotoxy(wherex()-1,wherey());}
else{
chr=Conv(ic);
str[i]=chr;
gotoxy(wherex()-1,wherey());
cout<<chr;
cout<<"_"; };
};
gotoxy(wherex()-1,wherey());
cout<<" ";
str[nb-1]='\0';
};
void NewZap(int rzc) //rzc: 0-new 1-correct
{
HideMouse();
cleardevice();
if(rzc!=0){gotoxy(20,9); cout<<"корректировка :";};
gotoxy(20,10);
cout<<"наименование : ";
GetPole(&name[0],20,rzc);
gotoxy(20,11);
cout<<"единицы измерений : ";
GetPole(&ed_ism[0],5,rzc);
gotoxy(20,12);
cout<<"количество : ";
GetPole(&col_vo[0],10,rzc);
gotoxy(20,13);
cout<<"дата поступления : ";
GetPole(&datep[0],10,rzc);
gotoxy(20,14);
cout<<"дополнительные данные: ";
GetPole(&inform[0],200,rzc);
for(int i=0; i<15; i++) user[i]=userprg[i];
};
};
DataF Zap[125];
void LoadZap()
{
clrscr();
gotoxy(10,10);
cout<<" введите своё имя: ";
cin>>userprg;
FILE *f;
f=fopen("ttt.cfg","r");
nzap=1;
while (!feof(f))
{
fread(&Zap[nzap],sizeof(DataF),1,f);
nzap++;
};
nzap--;
fclose(f);
};
void SaveZap()
{
FILE *f;
f=fopen("ttt.cfg","w");
for (int i=1;i<nzap;i++) fwrite(&Zap[i],sizeof(DataF),1,f);
fclose(f);
};
void append()
{
FILE *f;
f=fopen("ttt.cfg","a");
fwrite(&Zap[nzap],sizeof(DataF),1,f);
fclose(f);
};
void MouseStatus(int *x,int *y,int *button)
{
int bb,xx,yy;
asm {
mov ax,03;
int 33h;
mov bb,bx;
mov xx,cx;
mov yy,dx;
};
*button=bb;
*x=xx;
*y=yy;
};
void Information()
{
HideMouse();
char ch;
int exitInf=0;
cleardevice();
gotoxy(18,9);
cout<<"разработано Можайко А.С.";
ch=getch();
DrawMain(regim);
ShowMouse();
};
void DrawMain(int regim)
{
cleardevice();
const char MenuItem[6][16]={" ",
" „добавить ",
" просмотр ",
" корректировка ",
" удалить ",
" выход "};
setcolor(1);
setbkcolor(1);
for (int i=1;i<=5;i++)
{
setfillstyle(1,i==regim?9:10);
fillellipse(300,55+i*60,90,20);
outtextxy(238,50+i*60,MenuItem[i]);
}; Timeout(); ShowMouse();
};
void ShowMouse(void)
{
asm { mov ax,01h
int 33h
}
};
void HideMouse(void)
{
asm{
mov ax,02
int 33h
}
};
void Nadpis(int n1,int coln)
{
setbkcolor(3);
struct viewporttype SaveWin;
getviewsettings(&SaveWin);
setviewport(9,9,631,260,SaveWin.clip);
clearviewport();
setviewport(9,279,598,434,SaveWin.clip);
clearviewport();
setviewport(SaveWin.left,SaveWin.top,SaveWin.right,SaveWin.bottom,SaveWin.clip);
char *st,*st1,*st2,*st3,*st4,*st5,stm[100],stm2[100];
int i;
if((n1)<125)
for (i=1;i<9;i++)
{
if(i==coln) setcolor(1);
else setcolor(4);
gotoxy(3,2*i);
cout<<n1+i-1;
st=Zap[n1+i-1].datep;
outtextxy(40,i*32-12,st);
st1=Zap[n1+i-1].name;
outtextxy(150,i*32-12,st1);
st2=Zap[n1+i-1].col_vo;
outtextxy(380,i*32-12,st2);
st3=Zap[n1+i-1].ed_ism;
outtextxy(500,i*32-12,st3);
setcolor(4);
if(i!=8)line(8,i*32+5,632,i*32+5);
};
st4=Zap[n1+coln-1].inform;
outtextxy(50,320,st4);
st5=Zap[n1+coln-1].user;
outtextxy(550,420,st5);
};
int Find()
{
char ch,rf,*zapm,word[20];
int mflag[125];
for(int f=1;f<nzap;f++)
mflag[f]=1;
setbkcolor(5);
bar(100,100,500,250);
rf=getch();
int k=-1,ret,fpk;
ch=getch();
while(3)
{
k++;
fpk=0;
for(int i=1;i<nzap-1;i++)
{
if(mflag[i]!=0){
if(rf==50){
if(ch==Zap[i].name[k]){ mflag[i]=1;fpk=1;};
if(ch!=Zap[i].name[k]) mflag[i]=0;
};
if(rf==49){
if(ch!=Zap[i].datep[k]) mflag[i]=0;
if(ch==Zap[i].datep[k]){ mflag[i]=1;fpk=1;};
};
};
};
if(fpk==0){ ch=getch(); fpk=7; };
do {
for(i=1;i<nzap-1;i++)
if(mflag[i]==1)
{
Nadpis(i,1);
ret=i;
ch=getch();
if((ch!=9)) i=nzap;
};
if(ch==9)ch=getch();}
while(ch==9);
if(ch==13)break;
};
return ret;
};//*/
int View(int corr)
{
HideMouse();
setfillstyle(1,1);
bar(0,0,getmaxx(),getmaxy());
setcolor(4);
line(0,270,640,270);
line(0,0,7,7);
line(633,7,640,0);
line(0,270,7,263);
line(633,263,640,270);
line(0,270,7,277);
line(633,277,640,270);
line(0,480,7,473);
line(633,473,640,480);
rectangle(7,7,633,263);
rectangle(7,277,633,473);
setfillstyle(1,2);
bar(601,279,631,471);
settextstyle(0,0,3);
outtextxy(608,290,"F");
outtextxy(608,335,"I");
outtextxy(608,380,"N");
outtextxy(608,425,"D");
settextstyle(0,0,0);
rectangle(600,278,632,472);
rectangle(601,277,633,473);
setfillstyle(1,3);
bar(8,8,632,261);
bar(8,278,599,472);
bar(8,435,599,472);
setcolor(4);
int exitPrg=0,ret=0;
char cr;
int i=1,newi=1,botton, x, y;
Nadpis(1,1);
ShowMouse();
line(8,450,599,450);
while(exitPrg==0){
while(!kbhit()){Mousebut(&botton, &x, &y);
if(botton>0)
if((x>601)&&(x<631))
if((y>279)&&(y<471)){
i=Find();newi=i;i=1;};
};
cr=getch(); HideMouse();
switch(cr){
case 72:{i--;
if(i<1) {
i=1;
if(newi>1){newi--;};
};
Nadpis(newi,i);
break;};
case 80:{i++;if(i>8){i=8;newi++;};
Nadpis(newi,i);
break; };
case 62:i=Find();newi=i;i=1;break;
case 27:exitPrg=1;ret=-1;break;
case 13:{delay(300);ret=(newi+i-1);exitPrg=1;
break;};
};
textbackground(2); setfillstyle(1,10); ShowMouse();
};
HideMouse();
settextstyle(0,0,0);
return ret;
};
void deleteZap(void)
{
int exitdel=0;
char ch;
while (exitdel==0)
{
int t=View(2);
if(t==-1)break;
setbkcolor(1);
bar(100,100,500,200);
ch=getch();
if(ch==13){
for(int i=t; i<=nzap; i++){ Zap[i]=Zap[i+1];exitdel=1;};
};
};
}; //*/
void Correct(void)
{
int t=View(1);
setbkcolor(1);
if((t!=0)&&(t!=-1))
Zap[t].NewZap(1,t);
};
void EnterHandle(int regim)
{
cleardevice();
switch (regim)
{
case 1: Zap[nzap].NewZap(0,nzap);nzap++; break;
case 2: View(0); break;
case 3: Correct();break;
case 4: deleteZap();nzap--; break;
case 5: exitp=1; break;
};
cleardevice();
DrawMain(regim);
};
void Timeout()
{
setcolor(1);
lt=time(NULL);
outtextxy(445,460,mch);
mch=ctime(<);
setcolor(11);
outtextxy(445,460,mch);
setcolor(1);
};
int main()
{
int driver,mode,r;
int regim=1;
driver=DETECT;
mode=0;
LoadZap();
initgraph(&driver,&mode,"c:\\borlandc\\bgi");
setbkcolor(8);
DrawMain(regim);
ShowMouse();
exitp=0;
int x,y,button,timeR=0;
Mousebut(&button,&x,&y);
while (exitp==0)
{
timeR++;
if(timeR==-10) { Timeout();timeR=0; };
if (kbhit()) switch (getch())
{
case 27: exitp=1;
break;
case 80:regim=regim % 5 +1; DrawMain(regim);
break;
case 72:regim=regim==1?5:regim-1; DrawMain(regim);
break;
case 13:EnterHandle(regim);
};
Mousebut(&button,&x,&y);
if (button>0)
if ((x>555)&&(x<630))
if ((y>0)&&(y<80)) Information();
if (button>0)
{
if((x>255)&&(x<340))
{
if((y>100)&&(y<125))regim=1;
if((y>165)&&(y<185))regim=2;
if((y>225)&&(y<245))regim=3;
if((y>285)&&(y<305))regim=4;
if((y>345)&&(y<365))regim=5;
EnterHandle(regim);
};
};
};
SaveZap();
HideMouse();
restorecrtmode();
return 0;
};
void Mousebut(int *cbb,int *xx,int *yy)
{
int cb,x,y;
asm{
mov ax,05h
mov bx,0
int 33h
mov cb,bx
mov x,cx
mov y,dx
};
*xx=x;*yy=y;*cbb=cb;
};
Приложение В
Блок-схема
... По теореме 9.3 в силу результатов шагов 3 и 8. (Шаг 10). Имеет место свойство (9.4) по теореме 9.5 в силу результатов шагов 1 и 9. Литература к лекции 9. 9.1. С.А. Абрамов. Элементы программирования. - М.: Наука, 1982. С. 85-94. 9.2. М. Зелковец, А. Шоу, Дж. Гэннон. Принципы разработки программного обеспечения. - М.: Мир, 1982. С. 98-105. Лекция 10. ТЕСТИРОВАНИЕ И ОТЛАДКА ПРОГРАММНОГО ...
... повышают уровень требований к массовой алгоритмической культуре. Практически все диалоговые системы являются программируемыми. Методика конструирования программ легко переносится на другие процедурные языки программирования, в том числе и объектно-ориентированные.[2] В соответствии с технологией конструирования программ построена программа тестового редактора. Я разделил ее на этапы: Создание ...
... . И хотя, используя недокументированные возможности и определённые ухищрения, всё это можно реализовать и на VB; пользоваться этими трюками гораздо сложнее, чем, например, на Delphi. 4. ПРАКТИЧЕСКАЯ РЕАЛИЗАЦИЯ ЗАДАЧ С ИСПОЛЬЗОВАНИЕМ ЯЗЫКА ПРОГРАММИРОВАНИЯ DELPHI 4.1 Задача 1. Примитивный калькулятор 1. Войдите в среду Delphi, дважды щелкнув мышью на пиктограмму Delphi или через меню “ ...
... последовать разработка ПС по установленным требованиям в рамках какого-либо другого подхода (например, водопадного). · Формальные преобразования. Этот подход включает разработку формальных спецификаций ПС и превращение их в программы путем корректных преобразований. На этом подходе базируется компьютерная технология (CASE-технология) разработки ПС. · Сборочное программирование. Этот подход ...
0 комментариев