#include #include #include #include #define TAB 9 #define ENTER 13 #define ESC 27 #define UP 72 #define PgUP 73 #define LEFT 75 #define RIGHT 77 #define DOWN 80 #define PgDOWN 81 #define DELETE 83 #define R 114 #define S 115 #define V 118 typedef struct { unsigned long long id; char day[16]; // дата unsigned long long recipe; //номер рецепта unsigned long long exemption; //льгота char surname[100]; //фамилия больного char drug_form[15]; //double rec_numb; unsigned long long cost; unsigned long long paid; }DATA; typedef struct node { DATA *data; struct node *next, *prev; }ITEM; typedef struct hnode { int number; ITEM *first, *last; }HITEM; int pos_g=1, pos_x=1, pos_y=1, LastID=0; char day_of_today[12]; HITEM *head=NULL; void bg(); void table(); void print_menu(); int print_list(int f, int l, int sel); void print_sel_line(int y, int sel); void print_line(int y, int sel, ITEM *CurrNODE); void print_cell(int cell, int y, int sel); void print_sel_cell(int sel_x); void print_edit_line(int sel, int sel_x, ITEM *CurrNODE); void print_sort_list(int f, int l, int sel_x, int sel); void select(); void add(); void AddList(int y); void AddStatBar(char *str, int y); void view(); void DeleteList(int n); void edit(int n, int sel); void EditList(int sel, int sel_x, ITEM *CurrNODE); void search(); void sort_control(); void sort(int sel_x); void filter(); void date(); void write_db(); void read_db(); void AddDATA(DATA data); void EmptyList(); int sel_cell(); int getN(char *str); int sfN(int sel_x, char *str, int k); int sN(int sel_x, char *str, int k, int i_find); void ERRORS(char *str); void Escape() { for(;;) { if(getch()==ESC) { clrscr(); break; } else { continue; } } } void main() { int key; EmptyList(); date(); for(;;) { bg(); key=getch(); if(key!=0) { if(key==ESC) { pos_g=1; } else { if(key==ENTER) { select(); } else { if(key==TAB) { pos_x=-1; pos_g=1; view(); pos_x=1; } else { continue; } } } } else { key=getch(); if(pos_g==1) { if(key==RIGHT) { if(pos_x<7) pos_x++; } else { if(key==LEFT) { if(pos_x>1) pos_x--; } else { continue; } } } else { if(pos_g==0) { if(key==UP) { if(pos_y>1) pos_y--; } else { if(key==DOWN) { if(pos_y<3) pos_y++; } else { continue; } } } } } } } void bg() { window(1,1,80,1); //head_bg textbackground(WHITE); textcolor(GREEN); clrscr(); table(); print_menu(); //menu window(1,25,80,25); //footer textbackground(WHITE); textcolor(GREEN); clrscr(); window(61,25,80,25); //date textbackground(WHITE); textcolor(GREEN); clrscr(); cprintf("Сегодня: %s", day_of_today); } void table() { int i; window(1,2,80,24); //center textbackground(LIGHTBLUE); textcolor(GREEN); clrscr(); puts("╔═════╦═════════════╦═════════╦═════════╦════════╦════════╦════════╦═══════════"); puts("║ № ║ Фамилия ║Лек.форма║№ рецепта║ Цена ║ Льгота ║Оплачено║ Дата "); puts("╠═════╩═════════════╩═════════╩═════════╩════════╩════════╩════════╩═══════════"); for(i=0;i<=18;i++) puts("║"); puts("╚══════════════════════════════════════════════════════════════════════════════"); window(80,2,80,25); //center_left clrscr(); cputs("╗║╣"); for(i=0;i<=18;i++) cputs("║"); cputs("╝"); window(80,25,80,25); textbackground(WHITE); clrscr(); } void print_menu() { char menu0[7][15]={" Правка ", " Поиск ", "Сортировка", " Фильтр ", "Статистика", " Помощь ", " Выход "}; char menu1[3][15]={" Добавить ", " Редактировать"," Удалить "}; int i, x, y; for(i=x=1; i<8; i++, x+=10) { window(x,1,x+10,1); textbackground(pos_x==i?MAGENTA:WHITE); textcolor(GREEN); clrscr(); puts(menu0[i-1]); } if(pos_g==0) { window(1, 2, 16, 6); textbackground(WHITE); textcolor(BLACK); clrscr(); puts("┌──────────────┐"); puts("│ │"); puts("│ │"); puts("│ │"); puts("└──────────────┘"); for(i=1; i<4; i++) { window(2, (i+2), 15, (i+2)); textbackground(pos_y==i?MAGENTA:WHITE); textcolor(GREEN); clrscr(); puts(menu1[i-1]); } } } int print_list(int f, int l, int sel) { ITEM *CurrNODE=head->first; int i, y; for(i=y=1; CurrNODE!=NULL && i<=l; CurrNODE=CurrNODE->next, i++) { if(i>f && i<=l) { print_sel_line(y, sel); print_cell(1, y, sel); cprintf("%d. ", CurrNODE->data.id); print_cell(2, y, sel); cputs(CurrNODE->data.surname); print_cell(3, y, sel); cputs(CurrNODE->data.drug_form); print_cell(4, y, sel); cprintf("%d ", CurrNODE->data.recipe); print_cell(5, y, sel); cprintf("%d", CurrNODE->data.cost); print_cell(6, y, sel); cprintf("%d%", CurrNODE->data.exemption); print_cell(7, y, sel); cprintf("%d", CurrNODE->data.paid); print_cell(8, y, sel); cputs(CurrNODE->data.day); //cprintf("%f ", CurrNODE->data->rec_numb); y++; } } return y; } void print_sel_line(int y, int sel) { window(2, (y+4), 79, (y+4)); textbackground(sel!=y?BLUE:MAGENTA); textcolor(WHITE); clrscr(); } void print_cell(int cell, int y, int sel) { switch(cell) //выпадающий список { case 1: window(2,(y+4),6,(y+4)); break; case 2: window(8,(y+4),20,(y+4)); break; case 3: window(22,(y+4),30,(y+4)); break; case 4: window(32,(y+4),40,(y+4)); break; case 5: window(42,(y+4),49,(y+4)); break; case 6: window(51,(y+4),58,(y+4)); break; case 7: window(60,(y+4),67,(y+4)); break; case 8: window(69,(y+4),79,(y+4)); break; default: break; } textbackground(sel!=y?BLUE:MAGENTA); textcolor(WHITE); clrscr(); } void select() { if(pos_g==0) { pos_g=1; pos_x=-1; print_menu(); switch(pos_y) //выпадающий список { case 1: add(); break; case 2: edit(getN("id:"), 1); break; case 3: DeleteList(getN("id:")); break; default: break; } pos_x=1; } else { switch(pos_x) { case 1: pos_g=0; print_menu(); break; case 2: pos_x=-1; search(); pos_x=1; break; case 3: pos_x=-1; sort_control(); pos_x=1; break; case 4: filter(); break; case 5: //stat break; case 6: //help break; case 7: write_db(); exit(0); break; default: break; } } } void add() { int key, f, l, y=1, i, n=head->number; table(); AddList(y); for(;;) { table(); l=head->number; f=((l-n)>18?(l-18):n); y=print_list(f, l, -1); key=getch(); if(key==TAB) break; else if(key==ENTER) AddList(y); else continue; } } void AddList(int y) { DATA data; data.id=++LastID; strcpy(data.day, day_of_today); AddStatBar("Фамилия больного?", y); gets(data.surname); AddStatBar("Лекарственная форма?", y); gets(data.drug_form); AddStatBar("№ рецепта?", y); scanf("%d", &data.recipe); AddStatBar("Розничная цена, руб.?", y); scanf("%d", &data.cost); AddStatBar("Вид льготы?", y); scanf("%d", &data.exemption); data.paid=(data.exemption*data.cost)/100; //AddStatBar("Количество рецептурных номеров?", y); //scanf("%f", new_node->rec_numb); AddStatBar("", -1); //вычисление new_node->paid AddDATA( data); } void AddDATA(DATA data) { ITEM *CurrL=head->last, *new_node=NULL; if((new_node=(ITEM *)malloc(sizeof(ITEM)))!=NULL) { if(head->number!=0) { CurrL->next=new_node; new_node->prev=CurrL; } else { new_node->prev=NULL; head->first=new_node; } new_node->next=NULL; new_node->data=&data; head->number++; head->last=new_node; } else { ERRORS("Memory error"); } } void AddStatBar(char *str, int y) { window(1,25,60,25); textbackground(WHITE); textcolor(BLACK); clrscr(); cputs(str); if(y!=-1) { window(2,(y+4),79,(y+4)); textbackground(MAGENTA); textcolor(WHITE); clrscr(); fflush(stdin); } } void view() { int n=head->number, f=1, l, i, key, sel=1; l=(n<=19?n:19); print_menu(); for(;;) { table(); if(n!=0) { n=head->number; l=(n<=19?n:l); print_list((f-1), l, sel); key=getch(); if(key!=0) { if(key==TAB) break; else if(key==ENTER) { edit(((f+sel)-1), sel); } else { continue; } } else { key=getch(); if(key==UP) { if(sel>1) { sel--; } else { if(f>1 && sel==1) { f--; l--; } } } else { if(key==DOWN) { if(sel<19 && sel!=n) { sel++; } else { if(ln) sel=n; if(l>n) l=n; } else { continue; } } } } } else { ERRORS("List is empty"); break; } } } void date() { time_t now_time; struct tm *timeinfo; time(&now_time); timeinfo = localtime(&now_time); strftime(day_of_today, 100, "%d.%m.%Y",timeinfo); } void write_db() { FILE *DB; ITEM *Curr; DB=fopen("DB.DAT", "w+b"); if(DB!=NULL) { fwrite(&LastID, sizeof(int), 1, DB); for(Curr=head->first; Curr!=NULL; Curr=Curr->next) { fwrite(&Curr->data, sizeof(DATA), 1, DB); } } fclose(DB); } void read_db() { FILE *DB; DATA data; DB=fopen("DB.DAT", "rb"); if(DB!=NULL) { fread(&LastID, sizeof(int), 1, DB); while(fread(&data, sizeof(DATA), 1, DB)!=0) { AddDATA(data); } } fclose(DB); } int getN(char *str) { ITEM *Curr; int id=0, i; window(29,11,51,15); textbackground(WHITE); textcolor(BLACK); clrscr(); cputs(" ╒═══════════════════╕ "); cputs(" │ │ "); cputs(" ╞═══════════════════╡ "); cputs(" │ │ "); cputs(" ╘═══════════════════╛"); window(31,12,49,12); textbackground(WHITE); textcolor(WHITE); clrscr(); cputs(str); window(31,14,49,14); textbackground(CYAN); textcolor(BLACK); clrscr(); fflush(stdin); scanf("%d", &id); table(); if(id>LastID) { ERRORS("ID error"); } else { for(Curr=head->first, i=1; id!=Curr->data.id; Curr=Curr->next, i++); if(Curr==NULL) { ERRORS("ID error"); } else { return i; } } return 0; } void DeleteList(int n) { ITEM *CurrNODE=head->first, *PrevNODE=NULL, *NextNODE; int i; if(n>0) { for(i=1; n!=i; i++, PrevNODE=CurrNODE, CurrNODE=CurrNODE->next); NextNODE=CurrNODE->next; PrevNODE->next=NextNODE; if(n==head->number) PrevNODE->next=NULL; if(n==1) head->first=NextNODE; free(CurrNODE); head->number--; } } void EmptyList() { if((head=(HITEM *)malloc(sizeof(HITEM)))!=NULL) { head->number=0; head->first=NULL; head->last=NULL; read_db(); } else { ERRORS("Memory error"); } } void edit(int n, int sel) { ITEM *Curr; int sel_x=1, key, i; if(n<1) return; for(Curr=head->first, i=1; i!=n; i++, Curr=Curr->next); for(;;) { print_edit_line(sel, sel_x, Curr); key=getch(); if(key==TAB) { sel_x++; if(sel_x>5) sel_x=1; } else { if(key==ENTER) { EditList(sel, sel_x, Curr); } else { if(key==ESC) { break; } else { continue; } } } } } void EditList(int sel, int sel_x, ITEM *CurrNODE) { fflush(stdin); switch(sel_x) { case 1: AddStatBar("Фамилия больного?", -1); window(8, (sel+4), 20, (sel+4)); textbackground(LIGHTGREEN); textcolor(BLACK); clrscr(); gets(CurrNODE->data.surname); break; case 2: AddStatBar("Лекарственная форма?", -1); window(22, (sel+4), 30, (sel+4)); textbackground(LIGHTGREEN); textcolor(BLACK); clrscr(); gets(CurrNODE->data.drug_form); break; case 3: AddStatBar("№ рецепта?", -1); window(32, (sel+4), 40, (sel+4)); textbackground(LIGHTGREEN); textcolor(BLACK); clrscr(); scanf("%d", &CurrNODE->data.recipe); break; case 4: AddStatBar("Розничная цена, руб.?", -1); window(42, (sel+4), 49, (sel+4)); textbackground(LIGHTGREEN); textcolor(BLACK); clrscr(); scanf("%d", &CurrNODE->data.cost); CurrNODE->data.paid=(CurrNODE->data.exemption*CurrNODE->data.cost)/100; break; case 5: AddStatBar("Вид льготы?", -1); window(51, (sel+4), 58, (sel+4)); textbackground(LIGHTGREEN); textcolor(BLACK); clrscr(); scanf("%d", &CurrNODE->data.exemption); CurrNODE->data.paid=(CurrNODE->data.exemption*CurrNODE->data.cost)/100; break; default: break; } AddStatBar("", -1); } void print_edit_line(int sel, int sel_x, ITEM *CurrNODE) { window(2, (sel+4), 79, (sel+4)); textbackground(LIGHTGRAY); textcolor(WHITE); clrscr(); window(7, (sel+4), 59, (sel+4)); textbackground(MAGENTA); textcolor(WHITE); clrscr(); print_cell(2, sel, sel); cputs(CurrNODE->data.surname); print_cell(3, sel, sel); cputs(CurrNODE->data.drug_form); print_cell(4, sel, sel); cprintf("%d", CurrNODE->data.recipe); print_cell(5, sel, sel); cprintf("%d", CurrNODE->data.cost); print_cell(6, sel, sel); cprintf("%d%", CurrNODE->data.exemption); textbackground(YELLOW); textcolor(BLACK); switch(sel_x) { case 1: window(8, (sel+4), 20, (sel+4)); clrscr(); cputs(CurrNODE->data.surname); break; case 2: window(22, (sel+4), 30, (sel+4)); clrscr(); cputs(CurrNODE->data.drug_form); break; case 3: window(32, (sel+4), 40, (sel+4)); clrscr(); cprintf("%d ", CurrNODE->data.recipe); break; case 4: window(42, (sel+4), 49, (sel+4)); clrscr(); cprintf("%d", CurrNODE->data.cost); break; case 5: window(51, (sel+4), 58, (sel+4)); clrscr(); cprintf("%d%", CurrNODE->data.exemption); break; default: break; } } void sort_control() { int sel_x=1, sel=1, n, f=1, l=20, key; for(;;) { n=head->number; l=(n<=19?n:l); print_sort_list(f, l, sel_x, sel); key=getch(); if(key!=0) { if(key==ENTER) edit(((f+sel)-1), sel); else if(key==TAB) break; else continue; } else { key=getch(); switch(key) { case RIGHT: if(sel_x<8) { sel_x++; sort(sel_x); f=1; l=(n<=19?n:l); } break; case LEFT: if(sel_x>1) { sel_x--; sort(sel_x); f=1; l=(n<=19?n:l); } break; case UP: if(sel>1) sel--; else if(f>1 && sel==1) { f--; l--; } break; case DOWN: if(sel<19 && sel!=n) sel++; else if(ln) sel=n; if(l>n) l=n; break; default: break; } } } } void print_sort_list(int f, int l, int sel_x, int sel) { ITEM *CurrNODE=head->first; int i, y; table(); print_sel_cell(sel_x); for(i=y=1; CurrNODE!=NULL && i<=l; CurrNODE=CurrNODE->next, i++) { if(i>=f && i<=l) { print_sel_line(y, sel); print_cell(1, y, sel); cprintf("%d. ", CurrNODE->data.id); print_cell(2, y, sel); cputs(CurrNODE->data.surname); print_cell(3, y, sel); cputs(CurrNODE->data.drug_form); print_cell(4, y, sel); cprintf("%d ", CurrNODE->data.recipe); print_cell(5, y, sel); cprintf("%d", CurrNODE->data.cost); print_cell(6, y, sel); cprintf("%d%", CurrNODE->data.exemption); print_cell(7, y, sel); cprintf("%d", CurrNODE->data.paid); print_cell(8, y, sel); cputs(CurrNODE->data.day); //cprintf("%f ", CurrNODE->data->rec_numb); textbackground(YELLOW); textcolor(BLACK); switch(sel_x) { case 1: window(2, (y+4), 6, (y+4)); clrscr(); cprintf("%d. ", CurrNODE->data.id); break; case 2: window(8, (y+4), 20, (y+4)); clrscr(); cputs(CurrNODE->data.surname); break; case 3: window(22, (y+4), 30, (y+4)); clrscr(); cputs(CurrNODE->data.drug_form); break; case 4: window(32, (y+4), 40, (y+4)); clrscr(); cprintf("%d ", CurrNODE->data.recipe); break; case 5: window(42, (y+4), 49, (y+4)); clrscr(); cprintf("%d", CurrNODE->data.cost); break; case 6: window(51, (y+4), 58, (y+4)); clrscr(); cprintf("%d%", CurrNODE->data.exemption); break; case 7: window(60, (y+4), 67, (y+4)); clrscr(); cprintf("%d", CurrNODE->data.paid); break; case 8: window(69, (y+4), 79, (y+4)); clrscr(); cputs(CurrNODE->data.day); break; default: break; } y++; } } } void sort(int sel_x) { ITEM *Curr, *P, *N, *TMP; int n=head->number, i, k; for(i=0; i<=n; i++) { for(Curr=head->first; Curr->next!=NULL;) { TMP=Curr->next; k=0; switch(sel_x) { case 1: if(Curr->data.id>TMP->data.id) k=1; break; case 2: if(strcmp(Curr->data.surname, TMP->data.surname)>0) k=1; break; case 3: if(strcmp(Curr->data.drug_form, TMP->data.drug_form)>0) k=1; break; case 4: if(Curr->data.recipe>TMP->data.recipe) k=1; break; case 5: if(Curr->data.cost>TMP->data.cost) k=1; break; case 6: if(Curr->data.exemption>TMP->data.exemption) k=1; break; case 7: if(Curr->data.paid>TMP->data.paid) k=1; break; case 8: if(Curr->data.id>TMP->data.id) k=1; break; default: break; } if(k==1) { if(Curr->prev==NULL) head->first=TMP; if(TMP->next == NULL) head->last=Curr; P=Curr->prev; N=TMP->next; if(P!=NULL) P->next=TMP; if(N != NULL) N->prev=Curr; Curr->next=N; Curr->prev=TMP; TMP->next=Curr; TMP->prev=P; } else { Curr=Curr->next; } } } } void search() { ITEM *CurrNODE; char str[100]=""; int sel_x, n, k=0, n_find, f, l, i_find=1, sel=1, y, i, key; print_menu(); sel_x=sel_cell(); window(29,11,51,15); textbackground(WHITE); textcolor(BLACK); clrscr(); cputs(" ╒═══════════════════╕ "); cputs(" │ │ "); cputs(" ╞═══════════════════╡ "); cputs(" │ │ "); cputs(" ╘═══════════════════╛"); window(31,12,49,12); textbackground(WHITE); textcolor(WHITE); clrscr(); cputs("Ищем:"); window(31,14,49,14); textbackground(CYAN); textcolor(BLACK); clrscr(); fflush(stdin); switch(sel_x) { case 1: scanf("%d", &k); break; case 2: gets(str); break; case 3: gets(str); break; case 4: scanf("%d", &k); break; case 5: scanf("%d", &k); break; case 6: scanf("%d", &k); break; case 7: scanf("%d", &k); break; case 8: gets(str); break; default: break; } n_find=sfN(sel_x, str, k); if(n_find>0) { for(;;) { table(); f=sN(sel_x, str, k, i_find); l=((f+18)>n?n:(f+18)); //printf("%d - %d", f, l); //getch(); for(CurrNODE=head->first, i=y=1; CurrNODE!=NULL; CurrNODE=CurrNODE->next, i++) { if(i>=f && i<=l) { print_sel_line(y, sel); print_cell(1, y, sel); cprintf("%d. ", CurrNODE->data.id); print_cell(2, y, sel); cputs(CurrNODE->data.surname); print_cell(3, y, sel); cputs(CurrNODE->data.drug_form); print_cell(4, y, sel); cprintf("%d ", CurrNODE->data.recipe); print_cell(5, y, sel); cprintf("%d", CurrNODE->data.cost); print_cell(6, y, sel); cprintf("%d%", CurrNODE->data.exemption); print_cell(7, y, sel); cprintf("%d", CurrNODE->data.paid); print_cell(8, y, sel); cputs(CurrNODE->data.day); //cprintf("%f ", CurrNODE->data->rec_numb); y++; } } key=getch(); if(key!=0) { if(key==ENTER) { edit(f, sel); return; } else if(key==TAB) break; else continue; } else { key=getch(); switch(key) { case PgUP: if(i_find>1) i_find--; break; case PgDOWN: if(i_findfirst; CurrNODE!=NULL && i_find!=n_find; CurrNODE=CurrNODE->next) { if(i_find>=f && i_find<=l) { switch(sel_x) { case 1: if(CurrNODE->data.id==k){ print_line(i_find, sel, CurrNODE); i_find++;} break; case 2: if(strcmp(CurrNODE->data.surname, str)==0){ print_line(i_find, sel, CurrNODE); i_find++;} break; case 3: if(strcmp(CurrNODE->data.drug_form, str)==0){ print_line(i_find, sel, CurrNODE); i_find++;} break; case 4: if(CurrNODE->data.recipe==k){ print_line(i_find, sel, CurrNODE); i_find++;} break; case 5: if(CurrNODE->data.cost==k){ print_line(i_find, sel, CurrNODE); i_find++;} break; case 6: if(CurrNODE->data.exemption==k){ print_line(i_find, sel, CurrNODE); i_find++;} break; case 7: if(CurrNODE->data.paid==k){ print_line(i_find, sel, CurrNODE); i_find++;} break; case 8: if(strcmp(CurrNODE->data.day, str)==0){ print_line(i_find, sel, CurrNODE); i_find++;} break; default: break; } } } key=getch(); if(key!=0) { if(key==ENTER) { //edit(f, sel); //return; } else if(key==TAB) break; else continue; } else { key=getch(); switch(key) { case UP: if(sel>1) sel--; else if(sel==1 && f>1) { f--; l--; } break; case DOWN: if(sel<19 && sel!=n_find) sel++; else if(ldata.id); print_cell(2, y, sel); cputs(CurrNODE->data.surname); print_cell(3, y, sel); cputs(CurrNODE->data.drug_form); print_cell(4, y, sel); cprintf("%d ", CurrNODE->data.recipe); print_cell(5, y, sel); cprintf("%d", CurrNODE->data.cost); print_cell(6, y, sel); cprintf("%d%", CurrNODE->data.exemption); print_cell(7, y, sel); cprintf("%d", CurrNODE->data.paid); print_cell(8, y, sel); cputs(CurrNODE->data.day); } int sfN(int sel_x, char *str, int k) { ITEM *CurrNODE; int n=0; for(CurrNODE=head->first, n=0; CurrNODE!=NULL; CurrNODE=CurrNODE->next) { switch(sel_x) { case 1: if(CurrNODE->data.id==k) n++; break; case 2: if(strcmp(CurrNODE->data.surname, str)==0) n++; break; case 3: if(strcmp(CurrNODE->data.drug_form, str)==0) n++; break; case 4: if(CurrNODE->data.recipe==k) n++; break; case 5: if(CurrNODE->data.cost==k) n++; break; case 6: if(CurrNODE->data.exemption==k) n++; break; case 7: if(CurrNODE->data.paid==k) n++; break; case 8: if(strcmp(CurrNODE->data.day, str)==0) n++; break; default: break; } } return n; } int sN(int sel_x, char *str, int k, int i_find) { ITEM *CurrNODE; int n, i; for(CurrNODE=head->first, n=0, i=1; CurrNODE!=NULL && i_find!=n; CurrNODE=CurrNODE->next, i++) { switch(sel_x) { case 1: if(CurrNODE->data.id==k) n++; break; case 2: if(strcmp(CurrNODE->data.surname, str)==0) n++; break; case 3: if(strcmp(CurrNODE->data.drug_form, str)==0) n++; break; case 4: if(CurrNODE->data.recipe==k) n++; break; case 5: if(CurrNODE->data.cost==k) n++; break; case 6: if(CurrNODE->data.exemption==k) n++; break; case 7: if(CurrNODE->data.paid==k) n++; break; case 8: if(strcmp(CurrNODE->data.day, str)==0) n++; break; default: break; } } return (i-1); } void print_sel_cell(int sel_x) { textbackground(YELLOW); textcolor(BLACK); switch(sel_x) { case 1: window(2, 3, 6, 3); clrscr(); cputs(" № "); break; case 2: window(8, 3, 20, 3); clrscr(); cputs(" Фамилия "); break; case 3: window(22, 3, 30, 3); clrscr(); cputs("Лек.фор."); break; case 4: window(32, 3, 40, 3); clrscr(); cputs("№ рецеп."); break; case 5: window(42, 3, 49, 3); clrscr(); cputs(" Цена "); break; case 6: window(51, 3, 58, 3); clrscr(); cputs(" Льгота"); break; case 7: window(60, 3, 67, 3); clrscr(); cputs("Опла-но"); break; case 8: window(69, 3, 79, 3); clrscr(); cputs(" Дата "); break; default: break; } } int sel_cell() { int sel_x=1, key; for(;;) { table(); print_sel_cell(sel_x); key=getch(); if(key!=0) { if(key==ENTER) break; else if(key==TAB) return 0; else continue; } else { key=getch(); switch(key) { case RIGHT: if(sel_x<8) sel_x++; break; case LEFT: if(sel_x>1) sel_x--; break; default: break; } } } return sel_x; } void ERRORS(char *str) { window(29,12,51,14); textbackground(LIGHTRED); textcolor(BLACK); clrscr(); cputs(" ╔═══════════════════╗ "); cputs(" ║ ║ "); cputs(" ╚═══════════════════╝"); window(32,13,49,13); textbackground(LIGHTRED); textcolor(BLACK); cputs(str); getch(); }