КП.ПЭ04.07807 – 01 12 00
#include<conio.h>
#include<string.h>
#include<stdio.h>
int draw_window(int col_bg,int col_end,int row_bg,int row_end,int color);
int draw_table_col(int col,int row_bg,int row_end);
int up_menu(int col_bg,int col_end,int row,int color);
int down_menu(int col_bg,int col_end,int row,int color);
int clean_row(int col_bg,int col_end,int row,int color);
int start_window(void);
int help(void);
int work_window(void);
int up_menu_new(int col_bg,int col_end,int row,int color);
int up_menu_edit(int col_bg,int col_end,int row,int color1,int color2);
int up_menu_filter(int col_bg,int col_end,int row,int color1,int color2);
int up_menu_sort(int col_bg,int col_end,int row,int color1,int color2,int color3);
int up_menu_find(int col_bg,int col_end,int row,int color1,int color2);
int head_table(void);
int work_table(void);
int button_ok(int col_bg,int row_bg);
int button_cancel(int col_bg,int row_bg);
int button(int col_bg,int row_bg);
int sort_info(int m,int n);
int sort_info_1(void);
int window_add_new(void);
int window_edit(void);
int window_filter(void);
int edit(int nscr,int s);
int delete(int nscr,int s);
int set_of(int n,int nscr,int fil,int d);
int add(void);
int copy_add(void);
int print_to_screen(int nscr,int fil,int d,int n);
int search(int m,int n);
main()
{
int ikey,key,m,n,n1,rikey,b,nscr=0,fil=0,s=0,d=0;
FILE *f_dat,*f_tmp;
struct IG{
char proizv[20];
char tip[20];
char marka[20];
int hz;
char socket[10];
int cena;
}IG;
clrscr();
start_window();
work_window();
f_dat=fopen("data.dat","rt");
if(f_dat==NULL) {fclose(f_dat);f_dat=fopen("data.dat","wt");}
A:
fcloseall();
switch(s)
{
case 0: sort_info_1(); break;
case 1: sort_info_1(); break;
case 2: sort_info(4,2); break;
case 3: sort_info(4,3); break;
}
work_table();
nscr=print_to_screen(nscr,fil,d,n);
gotoxy(80,25);
if(fil!=0)
{
gotoxy(20,6);
textbackground(5);
cprintf("F2-возврат к просмотру.");
gotoxy(80,25);
}
do
{
rikey=0;
if((key=getch())==0) key=getch();
switch(key)
{
case 59: help(); getch(); work_window(); goto A;
case 60: fil=0; nscr=0; goto A;
case 73: nscr--; if(nscr<0) nscr=0; goto A;
case 81: nscr++; goto A;
case 193: key=45; break;
case 68: up_menu_new(1,80,1,3);
m=0;
n=0;
nscr=0;
clean_row(1,80,25,3);
gotoxy(10,25); cprintf("Esc-возврат к просмотру");
gotoxy(50,25); cprintf("Enter-Выбор операции");
gotoxy(80,25);
do
{
if((ikey=getch())==0) ikey=getch();
switch(ikey)
{
case 77: m++; n=0; if(m>4) m=0;break;
case 75: if(m>0) {m--; n=0;} else m=4;break;
case 80: if(m==1||m==2||m==3){n++; if(n>1) n=0;}; if(m==4){n++; if(n>2) n=0;};break;
case 72: if(m==1||m==2||m==3){if(n>0) n--; else n=1;};if(m==4){if(n>0) n--; else n=2;};break;
case 13: rikey=ikey; ikey=27; break;
case 45: key=ikey; break;
case 193: key=ikey; break;
}
if(m==0)
{
head_table(); work_table(); up_menu_new(1,80,1,3);
nscr=print_to_screen(nscr,fil,d,n);
if(rikey==13){
window_add_new();
add();
b=button(25,21);
if(b==0) copy_add();
work_window();
goto A;
}
}
if(m==1&&n==0) {
head_table(); work_table();
up_menu_edit(1,80,1,4,3);
nscr=print_to_screen(nscr,fil,d,n);
if(rikey==13)
{
clean_row(1,80,25,3);
gotoxy(10,25); cprintf("Esc-возврат к просмотру");
gotoxy(46,25); cprintf("Enter-Выбрать запись для редактирования");
up_menu(1,80,1,3);
head_table();
edit(nscr,s);
clean_row(1,80,25,3);
work_table();
nscr=print_to_screen(nscr,fil,d,n);
}
}
if(m==1&&n==1) {
head_table(); work_table();
up_menu_edit(1,80,1,3,4);
nscr=print_to_screen(nscr,fil,d,n);
if(rikey==13)
{
clean_row(1,80,25,3);
gotoxy(10,25); cprintf("Esc-Возврат к просмотру");
gotoxy(46,25); cprintf("Delete-Удаление записи");
up_menu(1,80,1,3);
head_table();
delete(nscr,s);
}
}
if(m==2&&n==0) {head_table();
up_menu_filter(1,80,1,4,3);
nscr=print_to_screen(nscr,fil,d,n);
if(rikey==13)
{
head_table();
window_filter();
clean_row(1,80,25,3);
gotoxy(20,25);
cprintf("Ввод с учетом регистра.");
search(m,n);
n1=button(28,15);
if(n1==0)
{
fil=1;
}
work_window();
goto A;
}
}
if(m==2&&n==1) {head_table();
up_menu_filter(1,80,1,3,4);
nscr=print_to_screen(nscr,fil,d,n);
if(rikey==13)
{
head_table();
window_filter();
textbackground(2);
gotoxy(26,12);
cprintf(" Введите socket ");
clean_row(1,80,25,3);
gotoxy(20,25);
cprintf("Ввод с учетом регистра.");
search(m,n);
n1=button(28,15);
if(n1==0)
{
fil=1;
}
work_window();
goto A;
}
}
if(m==3&&n==0) {head_table();
work_table();
up_menu_find(1,80,1,4,3);
nscr=print_to_screen(nscr,fil,d,n);
if(rikey==13)
{
head_table();
window_filter();
textbackground(2);
gotoxy(36,11);
cprintf(" Поиск ");
gotoxy(28,12);
cprintf(" Введите производителя ");
gotoxy(47,13);
cprintf(" поиск ");
clean_row(1,80,25,3);
gotoxy(20,25);
cprintf("Ввод с учетом регистра.");
search(m,n);
n1=button(28,15);
if(n1==0)
{
fil=1;
}
work_window();
goto A;
}
}
if(m==3&&n==1) {head_table();
up_menu_find(1,80,1,3,4);
nscr=print_to_screen(nscr,fil,d,n);
if(rikey==13)
{
head_table();
window_filter();
textbackground(2);
gotoxy(36,11);
cprintf(" Поиск ");
gotoxy(38,12);
cprintf("марку");
gotoxy(27,13);
cprintf("по которой провести поиск ");
clean_row(1,80,25,3);
gotoxy(20,25);
cprintf("Ввод с учетом регистра.");
search(m,n);
n1=button(28,15);
if(n1==0)
{
fil=1;
}
work_window();
goto A;
}
}
if(m==4&&n==0) {head_table();
up_menu_sort(1,80,1,4,3,3);
nscr=print_to_screen(nscr,fil,d,n);
if(rikey==13)
{sort_info_1();
head_table();
up_menu(1,80,1,3);
s=1;
goto A;
}
}
if(m==4&&n==1) {head_table();
up_menu_sort(1,80,1,3,4,3);
nscr=print_to_screen(nscr,fil,d,n);
if(rikey==13)
{sort_info(m,n);
head_table();
up_menu(1,80,1,3);
s=2;
goto A;
}
}
if(m==4&&n==2) {head_table();
up_menu_sort(1,80,1,3,3,4);
nscr=print_to_screen(nscr,fil,d,n);
if(rikey==13)
{sort_info(m,n);
head_table();
up_menu(1,80,1,3);
s=3;
goto A;
}
}
if(ikey==27) {up_menu(1,80,1,3); head_table(); work_table(); down_menu(1,79,25,3);}
if(ikey==45||ikey==193) break;
}
while(ikey!=27);/*Esc*/
if(ikey==45||ikey==193) break;
goto A;
}
}while(key!=45 && key!=193);/*Alt+X*/
}
work_window()
{
down_menu(1,80,25,3);
head_table();
work_table();
gotoxy(1,25);
up_menu(1,80,1,3);
gotoxy(63,24);
textbackground(BLUE);
cprintf("PgUp/PgDn");
gotoxy(80,25);
}
int draw_window(col_bg,col_end,row_bg,row_end,color)
{
int i,j;
char style[]={"╔" "╗" "" "╝" "╚" "║" "═"};
textbackground(color);
for(j=row_bg;j<=row_end;j++) for(i=col_bg;i<=col_end;i++) { gotoxy(i,j); cprintf(" "); }
gotoxy(col_bg,row_bg);
cprintf("%c",style[0]);
gotoxy(col_end,row_bg);
cprintf("%c",style[1]);
gotoxy(col_end,row_end);
cprintf("%c",style[2]);
gotoxy(col_bg,row_end);
cprintf("%c",style[3]);
gotoxy(col_bg,row_bg);
for(i=col_bg+1;i<col_end;i++) { gotoxy(i,row_bg); cprintf("%c",style[5]); gotoxy(i,row_end); cprintf("%c",style[5]); }
gotoxy(col_bg,row_bg);
for(j=row_bg+1;j<row_end;j++) { gotoxy(col_bg,j); cprintf("%c",style[4]); gotoxy(col_end,j); cprintf("%c",style[4]); }
gotoxy(80,25);
}
int draw_table_col(col,row_bg,row_end)
{
int j;
char style[]={"╦" "╩" "║"};
gotoxy(col,row_bg);
cprintf("%c",style[0]);
gotoxy(col,row_end);
cprintf("%c",style[1]);
for(j=row_bg+1;j<row_end;j++) { gotoxy(col,j); cprintf("%c",style[2]); }
gotoxy(80,25);
}
int up_menu(col_bg,col_end,row,color)
{
int i;
char new[15]={"Добавить"};
char edit[15]={"Редактировать"};
char filter[15]={"Выборка"};
char find[15]={"Поиск"};
char sort[15]={"Сортировка"};
textbackground(color);
gotoxy(col_bg,row);
for(i=col_bg;i<=col_end;i++) { cprintf(" "); }
gotoxy(col_bg+1,row);
cprintf("%s",new);
gotoxy(col_bg+17,row);
cprintf("%s",edit);
gotoxy(col_bg+33,row);
cprintf("%s",filter);
gotoxy(col_bg+49,row);
cprintf("%s",find);
gotoxy(col_bg+65,row);
cprintf("%s",sort);
gotoxy(80,25);
}
down_menu(col_bg,col_end,row,color)
{
int i;
char help[15]={"F1-Хелп"};
char exit[15]={"Alt+X-Выход"};
char menu[10]={"F10-Меню"};
textbackground(color);
gotoxy(col_bg,row);
for(i=col_bg;i<=col_end;i++) { cprintf(" "); }
gotoxy(col_bg+9,row);
cprintf("%s",help);
gotoxy(col_bg+35,row);
cprintf("%s",exit);
gotoxy(col_bg+63,row);
cprintf("%s",menu);
gotoxy(80,25);
}
clean_row(col_bg,col_end,row,color)
{
int i;
textbackground(color);
gotoxy(col_bg,row);
for(i=col_bg;i<col_end;i++) { cprintf(" "); }
gotoxy(80,25);
}
int up_menu_new(col_bg,col_end,row,color)
{
int i;
char new[15]={"Добавить"};
char edit[15]={"Редактировать"};
char filter[15]={"Выборка"};
char find[15]={"Поиск"};
char sort[15]={"Сортировка"};
textbackground(RED);
gotoxy(col_bg,row);
for(i=col_bg;i<=16;i++) { cprintf(" "); }
gotoxy(col_bg+1,row);
cprintf("%s",new);
textbackground(color);
gotoxy(17,row);
for(i=17;i<col_end;i++) { cprintf(" "); }
gotoxy(col_bg+17,row);
cprintf("%s",edit);
gotoxy(col_bg+33,row);
cprintf("%s",filter);
gotoxy(col_bg+49,row);
cprintf("%s",find);
gotoxy(col_bg+65,row);
cprintf("%s",sort);
gotoxy(80,25);
}
int up_menu_edit(col_bg,col_end,row,color1,color2)
{
int i;
char new[14]={"Добавить"};
char edit[14]={"Редактировать"};
char filter[14]={"Выборка"};
char find[14]={"Поиск"};
char sort[14]={"Сортировка"};
textbackground(RED);
gotoxy(17,row);
for(i=17;i<=32;i++) { cprintf(" "); }
gotoxy(col_bg+17,row);
cprintf("%s",edit);
textbackground(3);
gotoxy(col_bg,row);
for(i=col_bg;i<=16;i++) { cprintf(" "); }
gotoxy(33,row);
for(i=33;i<=col_end;i++) { cprintf(" "); }
gotoxy(col_bg+1,row);
cprintf("%s",new);
gotoxy(col_bg+33,row);
cprintf("%s",filter);
gotoxy(col_bg+49,row);
cprintf("%s",find);
gotoxy(col_bg+65,row);
cprintf("%s",sort);
gotoxy(80,25);
draw_window(16,33,2,5,3);
gotoxy(17,3);
textbackground(color1);
for(i=17;i<33;i++) { cprintf(" "); }
gotoxy(17,3);
cprintf("Редактировать");
textbackground(color2);
gotoxy(17,4);
cprintf("Удалить");
gotoxy(80,25);
}
int up_menu_filter(col_bg,col_end,row,color1,color2)
{
int i;
char new[14]={"Добавить"};
char edit[14]={"Редактировать"};
char filter[14]={"Выборка"};
char find[14]={"Поиск"};
char sort[14]={"Сортировка"};
textbackground(RED);
gotoxy(33,row);
for(i=33;i<=48;i++) { cprintf(" "); }
gotoxy(col_bg+33,row);
cprintf("%s",filter);
textbackground(3);
gotoxy(col_bg,row);
for(i=col_bg;i<=32;i++) { cprintf(" "); }
gotoxy(49,row);
for(i=49;i<=col_end;i++) { cprintf(" "); }
gotoxy(col_bg+1,row);
cprintf("%s",new);
gotoxy(col_bg+17,row);
cprintf("%s",edit);
gotoxy(col_bg+49,row);
cprintf("%s",find);
gotoxy(col_bg+65,row);
cprintf("%s",sort);
draw_window(32,49,2,5,3);
gotoxy(33,3);
textbackground(color1);
for(i=33;i<49;i++) { cprintf(" "); }
gotoxy(33,3);
cprintf("По типу");
textbackground(color2);
gotoxy(33,4);
cprintf("По сокету");
gotoxy(80,25);
}
int up_menu_find(col_bg,col_end,row,color1,color2)
{
int i;
char new[14]={"Добавить"};
char edit[14]={"Редактировать"};
char filter[14]={"Выборка"};
char find[14]={"Поиск"};
char sort[14]={"Сортировка"};
textbackground(RED);
gotoxy(48,row);
for(i=48;i<64;i++) { cprintf(" "); }
gotoxy(col_bg+49,row);
cprintf("%s",find);
textbackground(3);
gotoxy(col_bg,row);
for(i=col_bg;i<=48;i++) { cprintf(" "); }
gotoxy(64,row);
for(i=64;i<=col_end;i++) { cprintf(" "); }
gotoxy(col_bg+1,row);
cprintf("%s",new);
gotoxy(col_bg+17,row);
cprintf("%s",edit);
gotoxy(col_bg+33,row);
cprintf("%s",filter);
gotoxy(col_bg+65,row);
cprintf("%s",sort);
draw_window(48,65,2,5,3);
gotoxy(49,3);
textbackground(color1);
for(i=49;i<65;i++) { cprintf(" "); }
gotoxy(49,3);
cprintf("По производителю");
textbackground(color2);
gotoxy(49,4);
cprintf("По марке");
gotoxy(80,25);
}
int up_menu_sort(col_bg,col_end,row,color1,color2,color3)
{
int i;
char new[14]={"Добавить"};
char edit[14]={"Редактировать"};
char filter[14]={"Выборка"};
char find[14]={"Поиск"};
char sort[14]={"Сортировка"};
textbackground(RED);
gotoxy(65,row);
for(i=65;i<col_end;i++) { cprintf(" "); }
gotoxy(col_bg+65,row);
cprintf("%s",sort);
textbackground(3);
gotoxy(col_bg,row);
for(i=col_bg;i<=64;i++) { cprintf(" "); }
gotoxy(col_bg+1,row);
cprintf("%s",new);
gotoxy(col_bg+17,row);
cprintf("%s",edit);
gotoxy(col_bg+33,row);
cprintf("%s",filter);
gotoxy(col_bg+49,row);
cprintf("%s",find);
draw_window(64,80,2,6,3);
gotoxy(65,3);
textbackground(color1);
for(i=65;i<col_end;i++) { cprintf(" "); }
gotoxy(65,3);
cprintf("По марке");
textbackground(color2);
gotoxy(65,4);
cprintf("По частоте");
textbackground(color3);
gotoxy(65,5);
cprintf("По цене");
gotoxy(80,25);
}
head_table()
{
draw_window(1,80,2,5,1);
draw_table_col(15,2,5);
draw_table_col(25,2,5);
draw_table_col(35,2,5);
draw_table_col(45,2,5);
draw_table_col(52,2,5);
textbackground(1);
gotoxy(2,3);
cprintf("Производитель");
gotoxy(19,3);
cprintf("Тип");
gotoxy(28,3);
cprintf("Марка");
gotoxy(37,3);
cprintf("Частота");
gotoxy(46,3);
cprintf("socket");
gotoxy(57,3);
cprintf("Цена (тысяч рублей)");
}
start_window()
{
draw_window(20,60,5,20,2);
gotoxy(33,6);
cprintf("Курсовой проект");
gotoxy(25,8);
cprintf("Информационно-поисковая система");
gotoxy(33,9);
cprintf("\" Процессоры \"");
gotoxy(27,11);
cprintf("Разработал студент II курса");
gotoxy(35,12);
cprintf("Факультета");
gotoxy(28,13);
cprintf("Электронно-информационных");
gotoxy(36,14);
cprintf("систем");
gotoxy(33,15);
cprintf("Группы Пэ-4");
gotoxy(28,16);
cprintf("Гузеев Иван Сергеевич");
gotoxy(34,19);
cprintf("Брест 2008");
clean_row(1,80,25,3);
gotoxy(20,25);
cprintf("Для прожолжения жми клавишу ANY...");
getch();
}
help()
{
draw_window(20,60,5,20,3);
gotoxy(37,6);
cprintf("Хелп");
gotoxy(25,8);
cprintf("Информациооно-поисковая система");
gotoxy(33,9);
cprintf("\"Процессоры\"");
gotoxy(25,11);
cprintf("Enter ");
gotoxy(39,11);
cprintf("Выбор,потверждение");
gotoxy(25,12);
cprintf("Esc");
gotoxy(39,12);
cprintf("Отмена,выход из меню");
gotoxy(25,13);
cprintf("Right, Left,");
gotoxy(39,13);
cprintf("Управление курсором");
gotoxy(25,14);
cprintf("Up, Down");
gotoxy(25,15);
cprintf("F1");
gotoxy(39,15);
cprintf("Хелп");
gotoxy(25,16);
cprintf("F10");
gotoxy(39,16);
cprintf("Вход в меню");
gotoxy(25,17);
cprintf("Delete");
gotoxy(39,17);
cprintf("Удоление записи");
gotoxy(25,18);
cprintf("Alt+X");
gotoxy(39,18);
cprintf("Выход");
clean_row(1,80,25,3);
gotoxy(20,25);
cprintf("Для продолжения жми ANY...");
getch();
}
work_table()
{
draw_window(1,80,6,24,1);
draw_table_col(15,6,24);
draw_table_col(25,6,24);
draw_table_col(35,6,24);
draw_table_col(45,6,24);
draw_table_col(52,6,24);
}
window_add_new()
{
draw_window(15,65,6,22,2);
gotoxy(32,7);
cprintf("Добавить запись");
gotoxy(24,8);
cprintf("После ввода данных жми Enter");
gotoxy(20,9);
cprintf("Производитель:");
clean_row(20,61,10,5);
gotoxy(20,11);
textbackground(2);
cprintf("Тип:");
clean_row(20,61,12,5);
gotoxy(20,13);
textbackground(2);
cprintf("Марка:");
clean_row(20,61,14,5);
gotoxy(20,15);
textbackground(2);
cprintf("Частота:");
clean_row(20,61,16,5);
gotoxy(20,17);
textbackground(2);
cprintf("Цена:");
clean_row(20,61,18,5);
gotoxy(20,19);
textbackground(2);
cprintf("Socket:");
clean_row(20,61,20,5);
clean_row(1,80,25,3);
gotoxy(1,25);
cprintf(" Не превышайте число символов");
clean_row(25,38,21,3);
gotoxy(25,21);
cprintf(">Подтвердить<");
clean_row(41,49,21,3);
gotoxy(41,21);
cprintf(">Отмена<");
}
button_ok(col_bg,row_bg)
{
clean_row(col_bg,col_bg+13,row_bg,4);
gotoxy(col_bg,row_bg);
cprintf(">Подтвердить<");
clean_row(col_bg+16,col_bg+24,row_bg,3);
gotoxy(col_bg+16,row_bg);
cprintf(">Отмена<");
gotoxy(80,25);
}
button_cancel(col_bg,row_bg)
{
clean_row(col_bg+16,col_bg+24,row_bg,4);
gotoxy(col_bg+16,row_bg);
cprintf(">Отмена<");
clean_row(col_bg,col_bg+13,row_bg,3);
gotoxy(col_bg,row_bg);
cprintf(">Подтвердить<");
gotoxy(80,25);
}
window_edit()
{
draw_window(24,50,10,16,2);
gotoxy(31,11);
cprintf("Редактирование");
gotoxy(29,12);
cprintf("Ведите цену");
clean_row(25,50,14,5);
clean_row(25,38,15,3);
gotoxy(25,15);
cprintf(">Подтвердить<");
gotoxy(42,15);
clean_row(41,49,15,3);
gotoxy(41,15);
cprintf(">Отмена<");
}
add()
{
FILE *f_add;
struct IG{
char proizv[20];
char tip[20];
char marka[20];
int hz;
int cena;
char socket[10];
} IG;
f_add=fopen("add.dat","wt");
gotoxy(20,10);
fgets(IG.proizv,20,stdin);
gotoxy(20,12);
fgets(IG.tip,20,stdin);
gotoxy(20,14);
fgets(IG.marka,20,stdin);
gotoxy(20,16);
scanf("%d",&IG.hz);
if(IG.hz>9999)
while(IG.hz>9999) {IG.hz=IG.hz/10;}
gotoxy(20,18);
scanf("%d", &IG.cena);
if(IG.cena>9999)
while(IG.cena>9999) {IG.cena=IG.cena/10;}
gotoxy(20,20);
fgets(IG.socket,10,stdin);
fgets(IG.socket,10,stdin);
fprintf(f_add,"%s %s %s %d %d %s \n",IG.proizv,IG.tip,IG.marka,IG.hz,IG.cena,IG.socket);
fclose(f_add);
}
button(col_bg,row_bg)
{
int b,rikey;
button_ok(col_bg,row_bg);
clean_row(1,80,25,3);
b=0;
do
{
if((rikey=getch())==0) rikey=getch();
switch(rikey)
{
case 77: b++; if(b>1) b=0;break;
case 75: b--; if(b<0) b=1;break;
}
if(b==0) {button_ok(col_bg,row_bg);}
if(b==1) {button_cancel(col_bg,row_bg);}
}while(rikey!=13);
return(b);
}
copy_add()
{
long k;
struct IG
{
char proizv[20];
char tip[20];
char marka[20];
int hz;
int cena;
char socket[10];
}IG;
FILE *f_add,*f_dat,*f_tmp;
f_add=fopen("add.dat","rt");
f_dat=fopen("data.dat","at");
f_tmp=fopen("temp.dat","at");
fseek(f_add,0,SEEK_SET);
fgets(IG.proizv,20,f_add);
fseek(f_add,1,SEEK_CUR);
fgets(IG.tip,20,f_add);
fseek(f_add,1,SEEK_CUR);
fgets(IG.marka,20,f_add);
fseek(f_add,1,SEEK_CUR);
fscanf(f_add,"%d", &IG.hz);
fseek(f_add,1,SEEK_CUR);
fscanf(f_add,"%d", &IG.cena);
fseek(f_add,1,SEEK_CUR);
fgets(IG.socket,10,f_add);
fprintf(f_dat,"%s %s %s %d %d %s ",IG.proizv,IG.tip,IG.marka,IG.hz,IG.cena,IG.socket);
fprintf(f_tmp,"%s %s %s %d %d %s ",IG.proizv,IG.tip,IG.marka,IG.hz,IG.cena,IG.socket);
fclose(f_add);
fclose(f_dat);
fclose(f_tmp);
}
print_to_screen(nscr,fil,d,n)
{
int i,j,scr=0,kol=0,t;
long k,m;
struct IG
{
char proizv[20];
char tip[20];
char marka[20];
int hz;
int cena;
char socket[14];
}IG;
FILE *fp;
if(fil==0)
fp=fopen("temp.dat","rt");
else
fp=fopen("search.dat","rt");
fseek(fp,0,SEEK_SET);
k=ftell(fp);
fseek(fp,0,SEEK_END);
t=ftell(fp);
if(k!=t)
{
fseek(fp,0,SEEK_END);
k=ftell(fp);
fseek(fp,0,SEEK_SET);
for(scr=0;scr<=nscr;scr++)
{
do
{
for(j=7;j!=23;j=j+2)
{
if(d==1 && j==(n*2+7))
textbackground(RED);
else textbackground(1);
fgets(IG.proizv,20,fp);
fseek(fp,1,SEEK_CUR);
fgets(IG.tip,20,fp);
fseek(fp,1,SEEK_CUR);
fgets(IG.marka,20,fp);
fseek(fp,1,SEEK_CUR);
fscanf(fp,"%d", &IG.hz);
fseek(fp,1,SEEK_CUR);
fscanf(fp,"%d", &IG.cena);
fseek(fp,1,SEEK_CUR);
fgets(IG.socket,10,fp);
fseek(fp,1,SEEK_CUR);
m=ftell(fp);
kol++;
if(kol>nscr*8 && kol<=(nscr+1)*8)
{
gotoxy(2,j);
cputs(IG.proizv);
gotoxy(16,j);
cputs(IG.tip);
gotoxy(26,j);
cputs(IG.marka);
gotoxy(36,j);
cprintf("%d",IG.hz);
gotoxy(46,j);
cputs(IG.socket);
gotoxy(53,j);
cprintf("%d",IG.cena);
}
if(m==k) break;
}
if(j==23) break;
}while((ftell(fp))!=k);
if(m==k) break;
}
gotoxy(80,25);
fclose(fp);
}
if(scr<nscr)
return(scr+1);
else
return(nscr);
}
window_filter()
{
draw_window(25,55,10,16,2);
gotoxy(37,11);
cprintf("Выборка");
gotoxy(30,12);
cprintf("Введите тип");
gotoxy(27,13);
cprintf("по которому провести выборку");
clean_row(26,55,14,5);
clean_row(28,40,15,3);
gotoxy(28,15);
cprintf(">Подтвердить<");
gotoxy(44,15);
clean_row(44,52,15,3);
gotoxy(44,15);
cprintf(">Отмена<");
gotoxy(80,25);
}
sort_info(m,n)
{
int key,min,tale,max,sort,rmax;
long k,l;
struct IG{
char proizv[20];
char tip[20];
char marka[20];
int hz;
char socket[10];
int cena;
} IG;
FILE *f_dat,*f_tmp;
f_dat=fopen("data.dat","rt");
f_tmp=fopen("temp.dat","wt");
fseek(f_dat,0,SEEK_SET);
k=ftell(f_dat);
fseek(f_dat,0,SEEK_END);
l=ftell(f_dat);
if(k!=l)
{
fseek(f_dat,0,SEEK_END);
k=ftell(f_dat);
fseek(f_dat,0,SEEK_SET);
fgets(IG.proizv,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.tip,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.marka,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.hz);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.cena);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.socket,10,f_dat);
fseek(f_dat,1,SEEK_CUR);
if(m==4 && n==1) tale=IG.hz;
else tale=IG.cena;
max=tale; min=tale;
fseek(f_dat,0,SEEK_SET);
do
{
fgets(IG.proizv,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.tip,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.marka,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.hz);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.cena);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.socket,10,f_dat);
fseek(f_dat,1,SEEK_CUR);
if(m==4 && n==1) tale=IG.hz;
else tale=IG.cena;
if(tale>max) max=tale; rmax=max;
if(tale<min) min=tale;
}while((l=ftell(f_dat))!=k);
do
{
fseek(f_dat,0,SEEK_SET);
do
{
fgets(IG.proizv,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.tip,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.marka,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.hz);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.cena);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.socket,10,f_dat);
fseek(f_dat,1,SEEK_CUR);
if(m==4 && n==1) tale=IG.hz;
else tale=IG.cena;
if(tale==max)
{
fprintf(f_tmp,"%s %s %s %d %d %s ",IG.proizv,IG.tip,IG.marka,IG.hz,IG.cena,IG.socket);
}
}while(ftell(f_dat)!=k);
fseek(f_dat,0,SEEK_SET);
sort=min;
do
{
fgets(IG.proizv,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.tip,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.marka,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.hz);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.cena);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.socket,10,f_dat);
fseek(f_dat,1,SEEK_CUR);
if(m==4 && n==1) tale=IG.hz;
else tale=IG.cena;
if(tale<max && tale>sort) sort=tale;
}while(ftell(f_dat)!=k);
max=sort;
}while(sort!=min);
if(min!=rmax)
{
fseek(f_dat,0,SEEK_SET);
do
{
fgets(IG.proizv,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.tip,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.marka,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.hz);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.cena);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.socket,10,f_dat);
fseek(f_dat,1,SEEK_CUR);
if(m==4 && n==1) tale=IG.hz;
else tale=IG.cena;
if(tale==min)
{
fprintf(f_tmp,"%s %s %s %d %d %s ",IG.proizv,IG.tip,IG.marka,IG.hz,IG.cena,IG.socket);
break;
}
}while(ftell(f_dat)!=k);
fclose(f_dat);
fclose(f_tmp);
}
}
}
sort_info_1()
{
int key;
char min[50]={""},max[50]={""},sort[50]={""},rmin[50]={""};
long k,n;
struct IG{
char proizv[20];
char tip[20];
char marka[20];
int hz;
int cena;
char socket[10];
}IG;
FILE *f_dat,*f_tmp;
f_dat=fopen("data.dat","rt");
f_tmp=fopen("temp.dat","wt");
fseek(f_dat,0,SEEK_SET);
k=ftell(f_dat);
fseek(f_dat,0,SEEK_END);
n=ftell(f_dat);
if(k!=n)
{
fseek(f_dat,0,SEEK_END);
k=ftell(f_dat);
fseek(f_dat,0,SEEK_SET);
fgets(IG.proizv,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.tip,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.marka,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.hz);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.cena);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.socket,10,f_dat);
fseek(f_dat,1,SEEK_CUR);
strcpy(max,IG.marka); strcpy(min,IG.marka);
fseek(f_dat,0,SEEK_SET);
do
{
fgets(IG.proizv,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.tip,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.marka,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.hz);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.cena);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.socket,10,f_dat);
fseek(f_dat,1,SEEK_CUR);
if(strcmp(IG.marka,max)>0) strcpy(max,IG.marka);
if(strcmp(IG.marka,min)<0) strcpy(min,IG.marka); strcpy(rmin,min);
}while((n=ftell(f_dat))!=k);
do
{
fseek(f_dat,0,SEEK_SET);
do
{
fgets(IG.proizv,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.tip,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.marka,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.hz);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.cena);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.socket,10,f_dat);
fseek(f_dat,1,SEEK_CUR);
if(strcmp(IG.marka,min)==0)
{
fprintf(f_tmp,"%s %s %s %d %d %s ",IG.proizv,IG.tip,IG.marka,IG.hz,IG.cena,IG.socket);
}
}while(ftell(f_dat)!=k);
fseek(f_dat,0,SEEK_SET);
strcpy(sort,max);
do
{
fgets(IG.proizv,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.tip,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.marka,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.hz);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.cena);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.socket,10,f_dat);
fseek(f_dat,1,SEEK_CUR);
if(strcmp(IG.marka,min)>0 && strcmp(IG.marka,sort)<0) strcpy(sort,IG.marka);
}while(ftell(f_dat)!=k);
strcpy(min,sort);
}while(strcmp(max,sort)!=0);
if(strcmp(max,rmin)!=0)
{
fseek(f_dat,0,SEEK_SET);
do
{
fgets(IG.proizv,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.tip,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.marka,20,f_dat);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.hz);
fseek(f_dat,1,SEEK_CUR);
fscanf(f_dat,"%d",&IG.cena);
fseek(f_dat,1,SEEK_CUR);
fgets(IG.socket,10,f_dat);
fseek(f_dat,1,SEEK_CUR);
if(strcmp(max,IG.marka)==0)
{
fprintf(f_tmp,"%s %s %s %d %d %s ",IG.proizv,IG.tip,IG.marka,IG.hz,IG.cena,IG.socket);
break;
}
}while(ftell(f_dat)!=k);
}
fclose(f_dat);
fclose(f_tmp);
}
}
search(m,n)
{
char s1[50]={""},search[50]={""};
long k;
struct IG{
char proizv[20];
char tip[20];
char marka[20];
int hz;
int cena;
char socket[10];
} IG,SIG;
FILE *f_tmp,*f_srch;
f_tmp=fopen("temp.dat","rt");
f_srch=fopen("search.dat","wt");
gotoxy(26,14);
fgets(s1,44,stdin);
strncpy(search,s1,strlen(s1)-1);
fseek(f_tmp,0,SEEK_END);
k=ftell(f_tmp);
fseek(f_tmp,0,SEEK_SET);
do
{
fgets(IG.proizv,20,f_tmp);
fseek(f_tmp,1,SEEK_CUR);
fgets(IG.tip,20,f_tmp);
fseek(f_tmp,1,SEEK_CUR);
fgets(IG.marka,20,f_tmp);
fseek(f_tmp,1,SEEK_CUR);
fscanf(f_tmp,"%d",&IG.hz);
fseek(f_tmp,1,SEEK_CUR);
fscanf(f_tmp,"%d",&IG.cena);
fseek(f_tmp,1,SEEK_CUR);
fgets(IG.socket,10,f_tmp);
fseek(f_tmp,1,SEEK_CUR);
strcpy(SIG.proizv,IG.proizv);
strcpy(SIG.tip,IG.tip);
strcpy(SIG.marka,IG.marka);
strcpy(SIG.socket,IG.socket);
strlwr(SIG.proizv);
strlwr(SIG.tip);
strlwr(SIG.marka);
strlwr(SIG.socket);
strlwr(search);
if(m==2&&n==0)
{
if(strstr(IG.tip,search)!=NULL)
fprintf(f_srch,"%s %s %s %d %d %s ",IG.proizv,IG.tip,IG.marka,IG.hz,IG.cena,IG.socket);
}
if(m==2&&n==1)
{
if(strstr(IG.socket,search)!=NULL)
fprintf(f_srch,"%s %s %s %d %d %s ",IG.proizv,IG.tip,IG.marka,IG.hz,IG.cena,IG.socket);
}
if(m==3&&n==0)
{
if(strstr(IG.proizv,search)!=NULL)
fprintf(f_srch,"%s %s %s %d %d %s ",IG.proizv,IG.tip,IG.marka,IG.hz,IG.cena,IG.socket);
}
if(m==3&&n==1)
{
if(strstr(IG.marka,search)!=NULL)
fprintf(f_srch,"%s %s %s %d %d %s ",IG.proizv,IG.tip,IG.marka,IG.hz,IG.cena,IG.socket);
}
}while(ftell(f_tmp)!=k);
fclose(f_tmp);
fclose(f_srch);
}
set_of(n,nscr,fil,d)
{
int i;
draw_window(1,80,6,24,1);
textbackground(RED);
gotoxy(2,2*n+7);
for(i=2;i<=79;i++) {cprintf(" ");}
textbackground(1);
draw_table_col(15,6,24);
draw_table_col(25,6,24);
draw_table_col(35,6,24);
draw_table_col(45,6,24);
draw_table_col(52,6,24);
nscr=print_to_screen(nscr,fil,d,n);
return(nscr);
}
delete(nscr,s)
{
int i,l=0,n,fil=0,rikey,key,ikey,leaf=0,d;
long k;
struct IG{
char proizv[20];
char tip[20];
char marka[20];
int hz;
int cena;
char socket[10];
} IG;
FILE *f_dat,*f_tmp;
nscr=0;
d=1;
n=0;
B:
l=0;
nscr=set_of(n,nscr,fil,d);
do
{
if((key=getch())==0) key=getch();
switch(key)
{
case 27: break;
case 73: nscr--; if(nscr<0) nscr=0; leaf=0; n=0; nscr=set_of(n,nscr,fil,d); break;
case 81: nscr++; n=0; leaf++; nscr=set_of(n,nscr,fil,d); break;
case 80: n++; if(n>7) n=0; nscr=set_of(n,nscr,fil,d); break;
case 72: if(n>0) n--; else n=7; nscr=set_of(n,nscr,fil,d); break;
case 83: f_dat=fopen("data.dat","wt");
f_tmp=fopen("temp.dat","rt");
fseek(f_tmp,0,SEEK_END);
k=ftell(f_tmp);
fseek(f_tmp,0,SEEK_SET);
do
{
fgets(IG.proizv,20,f_tmp);
fseek(f_tmp,1,SEEK_CUR);
fgets(IG.tip,20,f_tmp);
fseek(f_tmp,1,SEEK_CUR);
fgets(IG.marka,20,f_tmp);
fseek(f_tmp,1,SEEK_CUR);
fscanf(f_tmp,"%d",&IG.hz);
fseek(f_tmp,1,SEEK_CUR);
fscanf(f_tmp,"%d",&IG.cena);
fseek(f_tmp,1,SEEK_CUR);
fgets(IG.socket,10,f_tmp);
fseek(f_tmp,1,SEEK_CUR);
l++;
if(l!=(leaf*8+n+1))
{
fprintf(f_dat,"%s %s %s %d %d %s ",IG.proizv,IG.tip,IG.marka,IG.hz,IG.cena,IG.socket);
}
}while(ftell(f_tmp)!=k);
fclose(f_dat);
fclose(f_tmp);
switch(s)
{
case 0: sort_info_1(); break;
case 1: sort_info_1(); break;
case 2: sort_info(4,2); break;
case 3: sort_info(4,3); break;
}
nscr=set_of(n,nscr,fil,d);
goto B;
}
}while(key!=27);
d=0;
}
edit(nscr,s)
{
int b,i,l=0,n,fil=0,rikey,key,ikey,leaf=0,d;
long k;
struct IG{
char proizv[20];
char tip[20];
char marka[20];
int hz;
int cena;
char socket[10];
} IG;
FILE *f_dat,*f_tmp;
nscr=0;
d=1;
n=0;
l=0;
set_of(n,nscr,fil,d);
do
{
if((key=getch())==0) key=getch();
switch(key)
{
case 27: break;
case 73: nscr--; if(nscr<0) nscr=0; leaf=0; n=0; nscr=set_of(n,nscr,fil,d); break;
case 81: nscr++; n=0; leaf++; nscr=set_of(n,nscr,fil,d); break;
case 80: n++; if(n>7) n=0; nscr=set_of(n,nscr,fil,d); break;
case 72: if(n>0) n--; else n=7; nscr=set_of(n,nscr,fil,d); break;
case 13: f_dat=fopen("data.dat","wt");
f_tmp=fopen("temp.dat","rt");
fseek(f_tmp,0,SEEK_END);
k=ftell(f_tmp);
fseek(f_tmp,0,SEEK_SET);
do
{
fgets(IG.proizv,20,f_tmp);
fseek(f_tmp,1,SEEK_CUR);
fgets(IG.tip,20,f_tmp);
fseek(f_tmp,1,SEEK_CUR);
fgets(IG.marka,20,f_tmp);
fseek(f_tmp,1,SEEK_CUR);
fscanf(f_tmp,"%d",&IG.hz);
fseek(f_tmp,1,SEEK_CUR);
fscanf(f_tmp,"%d",&IG.cena);
fseek(f_tmp,1,SEEK_CUR);
fgets(IG.socket,10,f_tmp);
fseek(f_tmp,1,SEEK_CUR);
l++;
if(l!=(leaf*8+n+1))
{
fprintf(f_dat,"%s %s %s %d %d %s ",IG.proizv,IG.tip,IG.marka,IG.hz,IG.cena,IG.socket);
}
else {
fclose(f_dat);
f_dat=fopen("data.dat","at");
window_add_new();
textbackground(2);
gotoxy(30,7);
cprintf("Редактировать запись");
add();
b=button(25,21);
if(b==0) copy_add();
else fprintf(f_dat,"%s %s %s %d %d %s ",IG.proizv,IG.tip,IG.marka,IG.hz,IG.cena,IG.socket);
}
}while(ftell(f_tmp)!=k);
fclose(f_dat);
fclose(f_tmp);
switch(s)
{
case 0: sort_info_1(); break;
case 1: sort_info_1(); break;
case 2: sort_info(4,2); break;
case 3: sort_info(4,3); break;
}
nscr=set_of(n,nscr,fil,d);
}
}while(key!=27);
d=0;
}
Министерство образования Республики Беларусь
Учреждение образования
«Брестский государственный технический университет»
Кафедра «ЭВМ и систем»
Информационно поисковая система «Процессоры»
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проекту по дисциплине:
«Вычислительная техника и программирование»
КП.ПЭ004.07807 – 01 81 00
Листов: 29
Разработчик:
Гузеев И.С.
Руководитель:
Николаюк Л.Н.
Брест 2008
1 ВЫБОР МЕТОДА РЕАЛИЗАЦИИ ЗАДАЧИ 7
1.1 ОБОСНОВАНИЕ МЕТОДА РЕШЕНИЯ ЗАДАЧИ 7
1.2 ВЫДЕЛЕНИЕ ФУНКЦИОНАЛЬНЫХ ЧАСТЕЙ 10
1.3 ОБОСНОВАНИЕ ОТДЕЛЬНЫХ ФУНКЦИОНАЛЬНЫХ ЧАСТЕЙ 11
1.4 СОСТАВЛЕНИЕ ОБЩЕГО АЛГОРИТМА 13
2 РАЗРАБОТКА ТЕСТОВЫХ ПРИМЕРОВ 15
4 ТЕСТИРОВАНИЕ И АНАЛИЗ РЕЗУЛЬТАТОВ 21
Эта программа позволяет контролировать наличие процессоров в магазинах. 30
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ 31
ПРИЛОЖЕНИЕ А. Текст программы
ПРИЛОЖЕНИЕ Б. Описание применения.
ВВЕДЕНИЕПоследняя информационная революция, связанная с изобретением микропроцессорной технологии и появлением персонального компьютера, выдвигает на первый план новую отрасль – информационную индустрию. Бурное развитие компьютерной техники и информационных технологий послужило толчком к развитию общества, построенного на использование различной информации и получившего название информационного общества.
Деятельность человека сейчас всё в большей степени начинает зависеть от их информированности и способности эффективно использовать имеющуюся информацию. Прежде чем провести какие-то действия, необходимо провести большую работу по сбору и обработке информации, её анализу. Отыскание рациональных решений в любой сфере требует обработки больших объёмов информации, что подчас невозможно без привлечения специальных технических средств.
В ежедневно появляющемся потоке информации ориентироваться становится всё труднее. Информационный кризис поставил общество перед необходимостью поиска путей выхода из создавшегося положения. Внедрение ЭВМ, современных средств обработки и передачи информации в различные сферы деятельности послужило началом нового эволюционного процесса, называемого информатизацией, в развитии человеческого общества.
Универсальным техническим средством обработки любой информации является компьютер и разработанные для конкретных целей программные продукты. К таким продуктам обработки информации относятся различные информационные системы, позволяющие систематизировать и обрабатывать огромные потоки информации. Для персональных компьютеров было разработано множество различных программ, предназначенных для решения различных потребностей человека. В наше время существует множество пунктов занимающихся продажей компьютеров и комплектующих. Данная программа существенно облегчает поиск нужного процессора, и узнать информацию о нем, даже цену.
Данная программа позволяет производить все перечисленные операции.
Для написания данной программы будет использован язык программирования Си. Этот язык является распространённым языком программирования. При разработке языка Си был принят компромисс между низким уровнем языка ассемблера и высоким уровнем других языков. В языке Си предусмотрено много операций, непосредственно исполняемых большинством микропроцессоров (например, прямой доступ к ячейке памяти и манипулирование битами); в то же время он дает программисту возможность выражать свои алгоритмы и данные наиболее подходящими средствами, использующими такие традиционные конструкции языков программирования высокого уровня, как итерация, выбор и принятие решения. Язык Си обеспечивает возможности структурирования данных, отсутствующие в языке ассемблера, но присущие современным языкам программирования высокого уровня. Он позволяет разрабатывать большие, но структурированные программы, предоставляя возможность отдельной разработки подпрограмм (в отличии от Бейсика и некоторых вариантов реализаций языка Паскаль).
Язык Си достаточно компактен. Его создатели ориентировались на миникомпьютеры, и разработанный ими компилятор занимал всего лишь 12 Кбайт оперативной памяти. Чтобы сохранить компактность языка, его создатели удержались от соблазна включить в него множество операций, отсутствующих у большинства микропроцессоров. Например, в Си нет встроенных операций для манипулирования строками и даже встроенных операторов ввода-вывода. Эти возможности, меняющиеся в зависимости от компьютера или приложений, были вынесены из собственного языка и
реализованы как подпрограммы, которые могут быть вызваны из программы, написанной на языке Си.
Другой целью создателей языка Си была разработка мобильного языка, который можно было бы использовать для разработки системного программного обеспечения. Программы, написанные на языке высокого уровня, мобильны, поскольку язык должен быть одним и тем же независимо от того, на каком компьютере и в какой операционной системе он используется. Наконец, дополнительное свойство языка Си, называемое условной компиляцией, позволяет программисту изолировать машинно-зависимые операторы и контролировать их компиляцию в другой среде. Это дополнительно повышает мобильность программного обеспечения, написанного на языке Си.
Таким образом, в плане структур данных и управления точка зрения пользователей языка Си на компьютер на уровень выше, чем у пользователей языка Ассемблер. Тем не менее, он ориентирован на приложения конкретного типа не в такой степени, как большинство других языков программирования высокого уровня. Чтобы писать программы на языке Си, программист должен обладать достаточно высокой квалификацией: компиляторы языка Си не контролируют согласование типов данных в отличие от компиляторов языка Паскаль. В результате Си является более гибким языком, но при программировании на нем легче ошибиться.
Интерфейс информационной системы будет представлен в виде меню, т.к. он является наиболее удобным и обеспечивает наименьшее время доступа к данным. Перемещение по пунктам меню будет осуществляться с помощью клавиш управления курсором.
Для предоставления пользователю информации о разработчике и версии данной программы в информационной системе при ее запуске на экран будет выводиться информационная заставка.
При первом знакомстве с программой пользователю нужно дать краткую информацию о работе с ней, которую он сможет получить при нажатии клавиши “F1”.
Так как в продажу постоянно поступают новые процессоры, то нужно обновлять имеющуюся базу данных. Чтобы пользователь постоянно мог пополнять базу данных (вносить сведения о новых процессорах) будет предусмотрен пункт меню “Добавить”.
Для удаления любой выбранной записи из информационной системы будет предусмотрен пункт меню “Удалить”.
Имеющуюся информацию, при неправильном вводе или при ее обновлении, необходимо редактировать, для этого в информационной системе будет предусмотрен пункт меню “Редактировать”. Оформление пункта меню “Редактировать” будет осуществлено с возможностью выбора любой записи из таблицы при помощи клавиш управления курсором для редактирования ее содержимого. Это обусловлено тем, что такой метод позволяет наиболее быстро обратиться к нужным пользователю данным.
Для быстрого поиска полной информации об имеющихся процессорах, название которых вводит пользователь, меню также будет содержать пункт “Поиск”. Так же для более удобного пользования программой и выбора и упрощения ориентирования в данных будут введены пункты “Выборка” и ”Сортировка”
Для завершения работы с программой и выхода в операционную систему будет предусмотрен пункт меню “выход”.
В процессе проектирования и на основании выбранного метода решения задачи были выделены следующие функциональные части:
-функция, обеспечивающая вывод информационной заставки на экран, которая будет содержать информацию о названии программы, ее разработчике и версии;
-функция, обеспечивающая работу меню, которая будет выводить на экран пользовательское меню, и осуществлять передвижение по его пунктам;
-функция вывода данных, которая позволит выводить на экран полную информацию об имеющихся в каталоге процессорах;
-функция, обеспечивающая вызов помощи, которая будет выводить на экран справочную информацию о данной информационной системе;
-функция, обеспечивающая ввод, вывод информации, редактирования и удаления записи, которая позволит изменять значение различных полей записи, удалять не нужную информацию, добавлять новую;
-функция, обеспечивающая поиск информации, которая позволит найти нужную информацию в файле;
-функция, обеспечивающая перемещение по имеющейся информации (скроллинг);
-функция, обеспечивающая выборку информации, которая позволит выделить информацию с одинаковым параметром.
В основной программе осуществляется обработка нажатия клавиш пользователем. При этом вызываются функции из функциональных частей описанных ниже.
Информационная заставка осуществляет вывод на экран названия программы, ее версии и информации о ее разработчике. Вывод информационной заставки осуществляется посредством вызова функции “start_window()”.
Для создания пунктов меню используются пять функций пользователя “up_menu_new()”, “up_menu_edit()”, “up_menu_filter()”, “up_menu_find()”, “up_menu_sort”. Перемещение между пунктами меню осуществляется с помощью клавиш управления курсором. При нажатии клавиши ”Enter”, функции организации меню возвращает номер выбранного пункта меню, в соответствии с которым выполняются необходимые действия в основной программе.
Как отмечалось выше, база данных хранится в виде двунаправленного списка. Записи базы данных представлены в виде структур.
В функциональной части работы с базой данных реализуются следующие функции. Открытие базы данных. В этой функции происходит загрузка данных из файла базы данных.
Функция закрытие базы данных. Осуществляет выход в систему.
Функция добавления записей в базу данных. В список происходит добавление одного элемента, причем сразу после добавления производится сортировка по ранее выбранному полю, если сортировка ранее не проводилась, то по умолчанию сортируется по марке процессора.
Функция удаления записи из базы данных. Из списка удаляется выбранный элемент.
Функция выборка. Служит для установки фильтра и проверки вхождения текущей записи в фильтр
Функция поиск записи в базе данных. Осуществляет поиск в списке по полю переданному в качестве параметра. Функция найти далее осуществляет поиск следующего вхождения.
Функция сортировки записей в базе данных. Осуществляет сортировку по выбранному полю.
Функция отображения содержимого базы данных. Содержимое базы данных отображается в виде таблицы. Записи, которые в текущий момент отображаются на экране, хранятся в файле. Кроме этого, в этой функциональной части реализуется ряд диалогов с базой данных, таких как редактирование, удаление, добавление, поиск.
Функция “print_to_screen()” выводит на экран содержимое массива, в котором хранятся записи, которые должны быть отображены на экране в текущий момент.
Функция “find()” выводит диалог для ввода строки поиска.
Функция “button()” выводит окно с выбором подтверждения или отмены.
Функция “help()” рисует на экране окно и выводит краткую информацию о пользовании программой.
Сразу после запуска программы будет производиться вызов функции организации меню, которая будет выводить на экран изображение меню и
передавать управление другим функциям (в зависимости от нажатых пользователем клавиш), осуществляющие различные действия поиск, ввод данных, вывод данных на экран, редактирование, вывод информационной заставки, вывод помощи.
При запуске программы будет вызвана функция, отвечающая за отображение информационной заставки. Затем на экране будет сформирована рабочая таблица, меню и строка подсказки информационной системы и вызваны функции открытия файла с базой данных, при отсутствии которого будет создан новый. После этого начинает работать цикл принятия команд.
Цикл принятия команд будет ожидать нажатий клавиш на клавиатуре пользователя. После нажатия клавиши анализируется ее код, и выполняться необходимое действие с учетом текущего состояния и режима.
При нажатии клавиши “F10”, происходит вызов функции отвечающей за прорисовку меню. При нажатии клавиш ”влево”, “вправо” в меню производится циклическое перемещение выделения пункта меню и вызывается функция прорисовки меню. На некоторых пунктах меню также возможно перемещение “вверх”, “вниз”. После нажатия клавиши “Enter” происходит вызов функции в соответствии с выбранным пунктом меню.
В режиме просмотра при нажатии клавиш “Page Up”, “Page Down” будет осуществляться скроллинг списка при вызове функции отображения на экране.
При выборе пункта “добавить” или ”редактировать” выбор удаляемой или редактируемой записи будет осуществляться при помощи клавиш “вверх”, ”вниз”.
Для команды “Помощь” (клавиша “F1”) будет вызываться функция отображения краткой справочной информации;
Для пунктов меню будут вызываться следующие функции:
-“Добавить” — функция добавления новой записи в базу данных;
-“Редактировать” — вызов функции добавления, но с условием, что в случае подтверждения данной операции старая запись будет замещена новой;
-“Удаление” - вызов функций удаления записи и прорисовки списка.
-“Выборка”, “Поиск” - будет вызвана функция поиска по заданному параметру в определенном поле и вызвана функция перерисовки списка, также режим будет изменен на “Выборка” или “Поиск”. Для возврата в режим просмотра необходимо будет нажать клавишу “F2”.
-“Сортировка” – вызов функций сортировки по заданному полю и прорисовки списка.
Выход в операционную систему будет осуществляться посредством нажатия комбинации клавиш “Alt+X”.
2 РАЗРАБОТКА ТЕСТОВЫХ ПРИМЕРОВТест №1 Запуск программы
После запуска программы появляется информационная заставка в виде прямоугольника расположенная в центре экрана. Информационная заставка знакомит пользователя с названием данной информационной системы, разработчиком и ее автором.
Тест №2 Переход к просмотру данных
После нажатия какой-либо клавиши на экране появляется меню (в верхней части окна), снизу которого располагается рабочее поле, представленное в виде таблицы, каждый столбец которой содержит информацию соответствующего поля записи, со следующими полями: производитель, тип, марка, частота, сокет, цена. В нижней части окна располагается «строка-подсказка»).
Тест №3 Работа с меню
Переход в меню происходит по нажатию клавиши “F10”. Передвижение по пунктам меню осуществляется при помощи клавиш управления курсором “влево” и “вправо”. При нажатии клавиши “вправо” – подсветка переместилась на пункт меню, находящийся правее от предыдущего активного пункта и это будет продолжаться при каждом нажатии клавиши “вправо” до тех пор, пока подсветка не достигнет крайнего пункта меню. В случае если подсветка находится на последнем пункте меню и пользователь нажимает клавишу “вправо” курсор переместится на первый пункт меню. При нажатии клавиши “влево” – подсветка переместилась на пункт меню, находящийся левее от предыдущего активного пункта и это будет продолжаться при каждом нажатии клавиши “влево” до тех пор, пока подсветка не достигнет первого пункта меню. В случае если подсветка находится на первом пункте меню и пользователь нажимает клавишу “влево” курсор переместится на последний пункт меню. Активизация желаемого пункта меню осуществляется с помощью клавиши “Enter”. В случаях, когда курсор находится на пунктах “Редактировать”, “Выборка”, “Поиск”, “Сортировка” появляется выпадающее меню соответствующего пункта с определенными подпунктами
Передвижение по подпунктам выпадающего меню осуществляется при помощи клавиш управления курсором “вверх” и “вниз”. Активизация желаемого подпункта выпадающего меню осуществляется с помощью клавиши “Enter”. Чтобы выйти из меню нажмем клавишу “Esc”.
Тест №4 Вызов помощи
Находясь в режиме просмотра, нажав клавишу “F1” пользователь сможет вызвать окно помощи. При выборе этой функции, в информационном окне выводится краткая информация по пользованию данной информационной системой. Для выхода в режим просмотра необходимо нажать любую клавишу.
Тест №5 Добавление записи
Для ввода данных вызываем меню “F10”, выделяем подсветкой пункт меню “Добавить” и нажимаем “Enter”. В появившемся окне вводим нужные данные для записи в файл. Для завершения ввода нажимаем “Enter”. По окончанию ввода выбираем “Подтвердить” или “Отмена”.
Тест №6 Удаление записи
Для удаления записи нужно вызвать меню, выбрать пункт “Редактировать”, затем выбрать пункт “Удалить”. Появится красная подсветка строки, которая при нажатии клавиш вверх, вниз изменяет своё положение верх или вниз соответственно. Удаление выбранной записи осуществляется после нажатия клавиши “Delete”. После удаления данная запись исчезает из таблицы на экране, а так же стирается из файла. Что бы выйти из режима удаления нужно нажать клавишу ”Esc”.
Тест №7 Редактирование
Для редактирования нужно вызвать меню, выбрать “Редактировать”, затем выбрать пункт “Редактировать”. Так же как в удаление появится красная подсветка. Для редактирования записи переходим в меню на пункт “Редактировать”, выбираем подпункт “Редактировать” нажимаем “Enter” в появившейся окне вводим новые данные, поля не подлежащие изменению редактируем дублируя исходную информацию. После изменения данных нажимаем клавишу “Enter”, по окончанию ввода данных выбираем “Подтвердить” или “Отмена”. В случае если выбрана отмена данные изменятся не будут.
Тест №8 Проведение поиска
При выборе пункта меню “Поиск”, выбираем по какому полю (“Производитель” или “Марка”) произвести поиск. После выбора появляется окошко, в котором необходимо ввести ключевое слово, по которому будет осуществляться поиск, по окончанию ввода жмем “Enter” и выбираем “Подтвердить” или “Отмена”. При успешном поиске найденная запись будет выведена в окне таблицы, в противном случае таблица окажется пустой. Для возврата в режим просмотра необходимо нажать клавишу “F2”.
Тест №9 Проведение выборки
В данной программе существует возможность просмотра данных по типу или сокету которые встречаются несколько раз. Для этого предусмотрен пункт меню «Выборка». По умолчанию отображаются все записи имеющиеся в базе данных. Для возврата в обычный режим просмотра используется клавиша “F2”. Например для отображения на экране монитора только записей с определённым типом, вызываем меню, выбираем пункт “Выборка” и выбираем подпункт “По типу”, при этом на экране появится окошко с запросом ввести тип, по которому произвести выборку, по окончанию ввода жмем “Enter” и выбираем “Подтвердить” или “Отмена”. В случае удачного проведения операции в окне таблицы появятся записи, содержащие только один жанр, в противном случае таблица окажется пустой. Для возврата в обычный режим просмотра жмем клавишу “F2”.
Тест №10 Проведение сортировки
Так же в этой программе мы можем провести сортировку по частоте и цене в порядке убывания или по марке в алфавитном порядке. Для этого существует пункт сортировка. По умолчанию стоит сортировка по марке. Например для отображения на экране записей отсортированных по частоте, вызываем меню, выбираем пункт “Сортировка” и выбираем подпункт “По частоте”.
Тест №11 Выход из программы
Комбинация клавиш “Alt+X” обеспечивает выход в операционную систему с сохранением всех изменений в файл.
3. РАЗРАБОТКА ПРОГРАММЫПрограмма для большей наглядности и структурированности состоит из ряда функциональных частей, реализованных в виде подпрограмм, включая функцию организации меню, которое используется для облегчения работы с программой.
В данной программе используются стандартные библиотечные модули:
-“stdio” – стандартная библиотека ввода-вывода.
-“conio” – библиотека консольного ввода вывода.
-“string” – библиотека работы со строками.
Из модуля “conio” используется функция очистки экрана “clrscr”, а также функции консольного вывода “cprintf” и функция, возвращающая код клавиши “getch”. Эти функции используются для реализации интерфейса в виде меню.
Из модуля “stdio” используется стандартный структурный тип, содержащий информацию об открытом файле “FILE”, который используется при объявлении файла, функции “fscanf” для считывания из файла, “fprintf” для записи в файл, “fgets” для считывания определенного числа символов, “fseek” для перемещения указателя по файлу, “ftell” возвращает номер позиции указателя в файле.
Из модуля string используется функция сравнения двух строк “strstr”, которая используется при поиске, и функция копирования одной строки в другую “strcpy”, которая используется при реализации функции ввода данных, функция “strlen”, которая определяет длину строки.
В программе были использованы циклы “for”, “while”, “do-while”, которые использовались для неоднократного повтора отдельных блоков программы; условия “if”, “switch”, которые использовались для выполнения тех либо иных действий при определенных условиях.
Так же в программе были использованы файлы: “glav.dat”, “vrem.dat”, “dob.dat”,“poisk.dat”. Файл “glav.dat” является основным. В нем хранятся все записи о процессорах. Файл “vrem.dat” временный и хранит отсортированную в ходе работы программы информацию. Файл “dob.dat” так же временный и служит для создания новой записи. Файл “poisk.dat”, в который будет заноситься информация заданная поиском или выборкой.
В программе будет использоваться структура:
struct IG{
char proizv[20]; /*для производителя*/
char tip[20]; /*для типа*/
char marka[20]; /*для марки*/
int hz; /*для частоты*/
int cena; /*для цены*/
char socket; /*для сокета*/
}
Текст программы смотри в Приложении 1.
4 ТЕСТИРОВАНИЕ И АНАЛИЗ РЕЗУЛЬТАТОВТест №1. Запуск программы
После запуска программы появляется информационная заставка в виде прямоугольника расположенная в центре экрана (рисунок 4.1).
Рисунок 4.1 Вид информационной заставки
Информационная заставка знакомит пользователя с названием данной информационной системы, разработчиком и ее автором.
Тест №2 Переход к просмотру данных
После нажатия какой-либо клавиши на экране появляется меню (в верхней части окна), снизу которого располагается рабочее поле, представленное в виде таблицы, каждый столбец которой содержит информацию соответствующего поля записи, со следующими полями: производитель, тип, марка, частота, сокет, цена. В нижней части окна располагается «строка-подсказка» (рисунок 4.2).
Рисунок 4.2 Вид меню и рабочего поля
Тест №3 Работа с меню
Переход в меню происходит по нажатию клавиши “F10”.
Передвижение по пунктам меню осуществляется при помощи клавиш управления курсором “влево” и “вправо”. При нажатии клавиши “вправо” – подсветка переместилась на пункт меню, находящийся правее от предыдущего активного пункта и это будет продолжаться при каждом нажатии клавиши “вправо” до тех пор, пока подсветка не достигнет крайнего пункта меню. В случае если подсветка находится на последнем пункте меню и пользователь нажимает клавишу “вправо” курсор переместится на первый пункт меню. При нажатии клавиши “влево” – подсветка переместилась на пункт меню, находящийся левее от предыдущего активного пункта и это будет продолжаться при каждом нажатии клавиши “влево” до тех пор, пока подсветка не достигнет первого пункта меню. В случае если подсветка находится на первом пункте меню и пользователь нажимает клавишу “влево” курсор переместится на последний пункт меню. Активизация желаемого пункта меню осуществляется с помощью клавиши “Enter”. В случаях, когда курсор находится на пунктах “Редактировать”, “Выборка”, “Поиск”, “Сортировка” появляется выпадающее меню соответствующего пункта с определенными подпунктами (рисунок 4.3).
Рисунок 4.3 – Вид меню с активным пунктом
Передвижение по подпунктам выпадающего меню осуществляется при помощи клавиш управления курсором “вверх” и “вниз”. Активизация желаемого подпункта выпадающего меню осуществляется с помощью клавиши “Enter”. Чтобы выйти из меню нажмем клавишу “Esc”.
Тест №4 Вызов помощи
Находясь в режиме просмотра, нажав клавишу “F1” пользователь сможет вызвать окно помощи. При выборе этой функции, в информационном окне выводится краткая информация по пользованию данной информационной системой (рисунок 4.4). Для выхода в режим просмотра необходимо нажать любую клавишу.
Рисунок 4.4 Вид информационного окна “Хелп”
Тест №5 Добавление записи
Для ввода данных вызываем меню “F10”, выделяем подсветкой пункт меню “Добавить” и нажимаем “Enter”. В появившемся окне вводим нужные данные для записи в файл (рисунок 4.5). Для завершения ввода нажимаем “Enter”. По окончанию ввода выбираем “Подтвердить” или “Отмена”.
Рисунок 4.5 Вид окна добавления записи
Тест №6 Удаление записи
Для удаления записи нужно вызвать меню, выбрать пункт “Редактировать”, затем выбрать пункт “Удалить”. Появится красная подсветка строки (рисунок 4.6), которая при нажатии клавиш вверх, вниз изменяет своё положение верх или вниз соответственно. Удаление выбранной записи осуществляется после нажатия клавиши “Delete”. После удаления данная запись исчезает из таблицы на экране, а так же стирается из файла. Что бы выйти из режима удаления нужно нажать клавишу ”Esc”.
Рисунок 4.6 Вид окна при удаление или редактировании
Тест №7 Редактирование
Для редактирования нужно вызвать меню, выбрать “Редактировать”, затем выбрать пункт “Редактировать”. Так же как в удаление появится красная подсветка.
Для редактирования записи переходим в меню на пункт “Редактировать”, выбираем подпункт “Редактировать” нажимаем “Enter” в появившейся окне вводим новые данные, поля не подлежащие изменению редактируем дублируя исходную информацию. После изменения данных нажимаем клавишу “Enter”, по окончанию ввода данных выбираем “Подтвердить” или “Отмена”. В случае если выбрана отмена данные изменятся не будут(рисунок 4.7).
Рисунок 4.7 Вид окна редактирования записи
Тест №8 Проведение поиска
При выборе пункта меню “Поиск”, выбираем по какому полю (“Производитель” или “Марка”) произвести поиск. После выбора появляется окошко, в котором необходимо ввести ключевое слово, по которому будет осуществляться поиск, по окончанию ввода жмем “Enter” и выбираем “Подтвердить” или “Отмена” (рисунок 4.8). При успешном поиске найденная запись будет выведена в окне таблицы (рисунок 4.9), в противном случае таблица окажется пустой. Для возврата в режим просмотра необходимо нажать клавишу “F2”.
Рис 4.8 Вид окна поиска
Рисунок 4.9 Вид окна после проведения поиска
Тест №9 Проведение выборки
В данной программе существует возможность просмотра данных по типу или сокету которые встречаются несколько раз. Для этого предусмотрен пункт меню «Выборка». По умолчанию отображаются все записи имеющиеся в базе данных. Для возврата в обычный режим просмотра используется клавиша “F2”.
Например для отображения на экране монитора только записей с определённым типом, вызываем меню, выбираем пункт “Выборка” и выбираем подпункт “По типу”, при этом на экране появится окошко с запросом ввести тип(см. рисунок 4.10), по которому произвести выборку, по окончанию ввода жмем “Enter” и выбираем “Подтвердить” или “Отмена”. В случае удачного проведения операции в окне таблицы появятся записи, содержащие только один тип, в противном случае таблица окажется пустой. Для возврата в обычный режим просмотра жмем клавишу “F2”. Таблица с произведенной выборкой представлена на рисунке 4.11.
Рисунок 4.10 Вид окна выборки
Тест №10 Проведение сортировки
Так же в этой программе мы можем провести сортировку по частоте и цене в порядке убывания или по марке в алфавитном порядке. Для этого существует пункт сортировка. По умолчанию стоит сортировка по типу.
Например для отображения на экране записей отсортированных по частоте, вызываем меню, выбираем пункт “Сортировка” и выбираем подпункт “По частоте”. Таблица с произведённой сортировкой представлена на рисунке 4.12.
Тест №11 Выход из программы
Комбинация клавиш “Alt+X” обеспечивает выход в операционную систему с сохранением всех изменений в файл.
ЗАКЛЮЧЕНИЕВ результате проделанной работы был разработан алгоритм и написана программа, реализующая работу информационно – поисковой системы «Процессоры».
Программа предназначена для облегчения продажи комплектующих (процессоров). Возможности программы включают в себя полный просмотр, отсортированной информации, поиск информации, редактирование отдельной записи, удаление любой записи из базы данных. Все данные в информационной системе представлены в отсортированном виде и записаны в файл.
Эта программа позволяет контролировать наличие процессоров в магазинах. СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫА Б. Керниган, Д. Ритчи Язык программирования Си. Москва «Финансы и статистика», 1992
Касаткин А.И. Профессиональное программирование на языке Си. Управление ресурсами: Справочное пособие. – Мн.: Выш. шк., 1992. – 432 с.
Крупник Изучаем Си. Санкт-Петербург. Питер 2001 - 226 с.
ГОСТ 19.404-79. ЕСПД. ПОЯСНИТЕЛЬНАЯ ЗАПИСКА.
ГОСТ 19.103-77. ЕСПД. ОБОЗНАЧЕНИЯ ПРОГРАММ И ПРОГРАММНЫХ ДОКУМЕНТОВ.
Приложение 2
Министерство образования Республики Беларусь
Учреждение образования
«Брестский государственный технический университет»
Кафедра «ЭВМ и систем»
Информационно поисковая система «Процессоры»
ОПИСАНИЕ ПРИМЕНЕНИЯ
к курсовому проекту по дисциплине:
«Вычислительная техника и программирование»
КП.ПЭ04.07807 – 01 31 00
Листов: 3
Разработчик:
Гузеев И.С.
Руководитель:
Николаюк Л.Н.
Брест 2008
НАЗНАЧЕНИЕ ПРОГРАММЫ.
Программа предназначена для ведения базы данных, содержащей каталог процессоров, а именно: производитель, тип, марка, частота, сокет и цена. Она позволяет добавлять, удалять и редактировать информацию о процессорах, осуществлять поиск, выборку и сортировку. Программа предназначена для организации работы магазинов по продаже компьютерной техники.
УСЛОВИЕ ПРИМЕНЕНИЯ.
Для работы необходим IBM совместимый компьютер c операционной системой Windows 98 и ниже. Требования к объему свободного места на винчестере и объем свободного ОЗУ минимальные. Наличие цветного монитора приветствуется, но не является необходимым.
ОПИСАНИЕ ЗАДАЧИ.
База данных хранится на диске в виде одного файла. По мере необходимости данные загружаются в память. Полностью база не загружается. Это позволяет работать на ЭВМ с небольшим объемом ОЗУ.
Работа программы организована в виде меню. Передвижение по пунктам меню осуществляется с помощью клавиш "Вправо" и "Влево". Выбор пункта меню осуществляется посредством нажатия клавиши "Enter".
При выборе пункта “Удалить” перемещение "подсветки" по записям расписания осуществляется с помощью клавиш "Вверх" и "Вниз", удаление записи происходит после нажатия клавиши "Del".
При выборе пункта “Редактировать” перемещение "подсветки" по записям расписания осуществляется с помощью клавиш "Вверх" и "Вниз", редактировании записи происходит после нажатия клавиши "Enter", заполнения необходимых полей и подтверждения редактирования.
При выборе пункта меню "Добавить" необходимо ввести данные по процессору и нажать клавишу "Enter".
При выборе пункта "Поиск" или пункта выборка необходимо заполнить поля, которые являются критерием поиска, и нажать клавишу "Enter".
При выборе пункта "Сортировка" необходимо выбрать поле, по которому нужно произвести сортировку и нажать клавишу "Enter".
Для вызова помощи "Хелп" необходимо нажать клавишу “F1”.
Для выхода из программы необходимо нажать комбинацию клавиш “Alt+X”.
ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ.
Вводимые пользователем данные и то, что хранится в файлах программы, является входными данными. Выводимая на экран информация и то, что записывается в файлы программы является выходными данными.
Для работы программы необходимы файлы: data.dat, temp.dat, add.dat. Запускаемым является файл IG.exe.