ПОЗНАВАТЕЛЬНОЕ Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д. Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу. Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) - В простых моделях рынка спрос и предложение обычно полагают зависящими только от текущей цены на товар. | Нестандартные и системные средства, вроде бы, не используются Все, кроме двух, аварийные ситуации, вроде бы, ликвидированы: 1) Если диск заполнен или защищён от записи невозможно записать информацию в файл; 2) Если невозможно открыть файл программа выдает сообщение об этом и закроется Блок-схема по ЕСПД 19.003-80. void main()
void open() void interface(char *) алгоритм сортировки (по № записи) fp – указатель на файл; s1,s2 – структуры данных типа data; oldfs,newfs – флаги (признаки),
Исходный код программы #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <io.h> #include <iostream.h> #include <string.h> #include <bios.h> #define ENTER 7181 #define ESC 283 #define LEFT 19200 #define RIGHT 19712 #define UP 18432 #define DOWN 20480 typedef struct { int num; char lastName[16]; char firstName[11]; char midName[16]; char groupNumber[6]; float mark; } data; void interface(char *); void add(char *); void del(char *); void edit(char *); void view(char *, int ); void find(char *); void sort(char *); int find_max_num(char *); int get_number(char *); void create(); void open(); int check(char *, data); void main() { int key=0,counter=0; int color[]={0,4,4}; while (1) { textbackground(1); textcolor(WHITE); clrscr(); _setcursortype(_NOCURSOR); textcolor(10); cprintf("::::::::::::::::::"); textcolor(15); cprintf(" eBase v1.666 Copyright (C) Serj Sventitski "); textcolor(10); cprintf("::::::::::::::::::"); switch(key) { case LEFT: if (counter>0) { color[counter]=4; color[--counter]=0; } break; case RIGHT: if (counter<2) { color[counter]=4; color[++counter]=0; } break; } textbackground(4); cprintf(" "); textcolor(WHITE); textbackground(color[0]); cprintf(" Создать "); textbackground(color[1]); cprintf(" Открыть "); textbackground(color[2]); cprintf(" Выход "); textbackground(4); cprintf(" "); textbackground(1); key=bioskey(0); if (key == ENTER) { switch(counter) { case 0: create();break; case 1: open();break; case 2: exit(10); } } } } void interface(char *fn) { FILE *fp; data st; int num=1,key=0,counter=0,color[]={0,4,4,4,4,4}; clrscr(); while(1) { window(1,1,80,3); textbackground(1); textcolor(WHITE); _setcursortype(_NOCURSOR); textcolor(10); cprintf("::::::::::::::::::"); textcolor(15); cprintf(" eBase v1.666 Copyright (C) Serj Sventitski "); textcolor(10); cprintf("::::::::::::::::::"); switch(key) { case LEFT: if (counter>0) { color[counter]=4; color[--counter]=0; } break; case RIGHT: if (counter<5) { color[counter]=4; color[++counter]=0; } break; } textbackground(4);cprintf(" "); textcolor(WHITE); textbackground(color[0]);cprintf(" Добавить "); textbackground(color[1]);cprintf(" Удалить "); textbackground(color[2]);cprintf(" Редактировать "); textbackground(color[3]);cprintf(" Поиск "); textbackground(color[4]);cprintf(" Сортировка "); textbackground(color[5]);cprintf(" Назад "); textbackground(4);cprintf(" "); textbackground(1); view(fn,num); key=bioskey(0); switch(key) { case UP: num--;if (num==0) num++; view(fn,num); break; case DOWN: num++;if (num+16>=get_number(fn)) num--; view(fn,num); break; } if (key==283) return; if (key == ENTER) { switch(counter) { case 0: add(fn); clrscr(); break; case 1: del(fn); break; case 2: edit(fn); clrscr(); break; case 3: find(fn); break; case 4: sort(fn); break; case 5: return; } } } } void add(char *fn) { FILE *fp; data st; int pr; while (1) { st.num=find_max_num(fn)+1; clrscr(); _setcursortype(_SOLIDCURSOR); gotoxy(20,6); cout<<"Фамилия : "; cin>>st.lastName; gotoxy(20,8); cout<<"Имя : "; cin>>st.firstName; gotoxy(20,10); cout<<"Отчество : "; cin>>st.midName; gotoxy(20,12); cout<<"№ группы : "; cin>>st.groupNumber; gotoxy(20,14); cout<<"Средний балл студента : "; fflush(stdin);scanf("%f",&st.mark); if (!check(fn, st)) { if ((fp = fopen(fn,"ab+")) == NULL) { printf("File could not be opened.\n"); return; } fwrite(&st, sizeof(data),1,fp); fclose(fp); return; } else { gotoxy(20,18); cout<<"Такая запись уже существует"; getch(); } } } void del(char *fn) { FILE *fp,*temp; data st; int pr=1; int number; gotoxy(4,25); textcolor(11); cprintf("Введите № записи для удаления : "); textcolor(YELLOW); gotoxy(36,25); int key = 0; cscanf("%d",&number); textcolor(WHITE); while(kbhit()) if (!(key=getch())) key << 8; if( key == '\r' ) { if ((fp=fopen(fn,"rb")) == NULL) { cout<<"error.file does not exist."; return; } if ((temp=fopen("temp.$$$","wb")) == NULL) { cout<<"error. temp file couldn't be create"; return; } while (fread(&st,sizeof(data),1,fp)) { if (feof(fp)) break; if (st.num != number) fwrite(&st,sizeof(data),1,temp); else pr=0; } fclose(fp); fclose(temp); if (remove(fn) == -1) { perror("remove"); return; } if (rename("temp.$$$",fn) == -1) { perror("rename"); return; } if (pr) { textcolor(11); gotoxy(4,25); cprintf("\r Ошибка. Нет записи с таким номером "); getch(); textcolor(WHITE); } } clrscr(); } void edit(char *fn) { FILE *fp; data st; int pr=1; int number,size=sizeof(data); fpos_t filepos; gotoxy(4,25); textcolor(11); cprintf("Введите № записи для редактирования : "); textcolor(YELLOW); gotoxy(44,25); int key = 0; cscanf("%d",&number); textcolor(WHITE); while( kbhit()) if( !(key = getch())) key << 8; if( key == '\r' ) { if ((fp = fopen(fn,"rb+")) == NULL) { printf("File could not be opened.\n"); return; } while(fread(&st,size,1,fp)) { if (feof(fp)) break; if (st.num == number) { fseek(fp,-1*size,1); fgetpos(fp,&filepos); pr=1; break; } else pr=0; } if (pr) { while (1) { clrscr(); _setcursortype(_SOLIDCURSOR); gotoxy(20,6);cout<<"Фамилия : "; cin>>st.lastName; gotoxy(20,8);cout<<"Имя : "; cin>>st.firstName; gotoxy(20,10);cout<<"Отчество : "; cin>>st.midName; gotoxy(20,12);cout<<"№ группы : "; cin>>st.groupNumber; gotoxy(20,14);cout<<"Средний балл студента : "; scanf("%f",&st.mark); if (!check(fn, st)) { fsetpos(fp,&filepos); fwrite(&st, sizeof(data),1,fp); break; } else { gotoxy(20,18); cout<<"Такая запись уже существует"; getch(); } } } else { textcolor(11); gotoxy(4,25); cprintf("\r Ошибка... Нет записи с таким номером "); getch(); textcolor(WHITE); } fclose(fp); } } void view(char *fn,int n) { void ramka(); FILE *fp; data st; char c; int counter=0; if ((fp = fopen(fn,"rb")) == NULL) { printf("File could not be opened.\n"); return; } ramka(); window(1,6,80,23); fseek(fp,(n-1)*sizeof(data),SEEK_SET); while (counter != 18) { fread(&st,sizeof(data),1,fp); if (feof(fp)) break; else { printf(" %4d %-16s %-12s %-17s %8s " "%7.2f\n",st.num,st.lastName,st.firstName, st.midName,st.groupNumber,st.mark); counter++; } } window(1,24,80,25); cprintf("-----------------------------------" "---------------------------------------------"); cprintf(" %c - вверх, %c - вниз , %c - влево," " %c - вправо, ESC - отмена ",0x018,0x019,0x01B,0x01A); textcolor(10); textbackground(1); cprintf("%14s",fn); window(1,1,80,25); textcolor(15); fclose(fp); } void sort(char *fn) { FILE *fp; data s1,s2; int num=1,size=sizeof(data),counter=0,key=0; int oldfs,newfs,color[]={0,4,4,4,4}; while(1) { _setcursortype(_NOCURSOR); textcolor(10); cprintf("::::::::::::::::::::::::: М е н ю с о р т и р о в к и " ":::::::::::::::::::::::::"); switch(key) { case LEFT: if (counter>0) { color[counter]=4; color[--counter]=0; } break; case RIGHT: if (counter<4) { color[counter]=4; color[++counter]=0; } break; } textbackground(4); cprintf(" "); textcolor(WHITE); textbackground(color[0]);cprintf(" по № записи "); textbackground(color[1]);cprintf(" по Ф.И.О "); textbackground(color[2]);cprintf(" по № группы "); textbackground(color[3]);cprintf(" по ср.балу "); textbackground(color[4]);cprintf(" Назад "); textbackground(4);cprintf(" "); textbackground(1); view(fn,num); key=bioskey(0); switch(key) { case UP: num--;if (num==0) num=1; view(fn,num); break; case DOWN: num++;if (num+16>=get_number(fn)) num--; view(fn,num); break; } if (key==283) return; if (key == ENTER) { if ((fp=fopen(fn,"rb+")) == NULL) { cout<<"error.file does not exist."; return; } switch(counter) { case 1: /*-----------по Ф.И.О--------------------*/ oldfs=1; newfs=0; fread(&s1,size,1,fp); while(oldfs) { fread(&s2,size,1,fp); if(feof(fp)) { if(!newfs) break; oldfs=1; newfs=0; rewind(fp); fread(&s1,size,1,fp); continue; } if (strcmp(s1.lastName,s2.lastName) > 0) { fseek(fp,-2*size,1); fwrite(&s2,size,1,fp); fwrite(&s1,size,1,fp); newfs=1; } if (strcmp(s1.lastName,s2.lastName) == 0) if (strcmp(s1.firstName,s2.firstName) > 0) { fseek(fp,-2*size,1); fwrite(&s2,size,1,fp); fwrite(&s1,size,1,fp); newfs=1; } if (strcmp(s1.firstName,s2.firstName) == 0) if (strcmp(s1.midName,s2.midName) > 0) { fseek(fp,-2*size,1); fwrite(&s2,size,1,fp); fwrite(&s1,size,1,fp); newfs=1; } else s1=s2; else s1=s2; } break; case 0: /*------------ПО НОМЕРУ ЗАПИСИ-----------*/ oldfs=1; newfs=0; fread(&s1,size,1,fp); while(oldfs) { fread(&s2,size,1,fp); if(feof(fp)) { if(!newfs) break; oldfs=1; newfs=0; rewind(fp); fread(&s1,size,1,fp); continue; } if (s1.num > s2.num) { fseek(fp,-2*size,1); fwrite(&s2,size,1,fp); fwrite(&s1,size,1,fp); newfs=1; } else s1=s2; } break; case 2: /*----------ПО НОМЕРУ ГРУППЫ---------------*/ oldfs=1; newfs=0; fread(&s1,size,1,fp); while(oldfs) { fread(&s2,size,1,fp); if(feof(fp)) { if(!newfs) break; oldfs=1; newfs=0; rewind(fp); fread(&s1,size,1,fp); continue; } if (strcmp(s1.groupNumber,s2.groupNumber) > 0) { fseek(fp,-2*size,1); fwrite(&s2,size,1,fp); fwrite(&s1,size,1,fp); newfs=1; } else s1=s2; } break; case 3: /*---------ПО СР.БАЛУ----------------*/ oldfs=1; newfs=0; fread(&s1,size,1,fp); while(oldfs) { fread(&s2,size,1,fp); if(feof(fp)) { if(!newfs) break; oldfs=1; newfs=0; rewind(fp); fread(&s1,size,1,fp); continue; } if (s1.mark < s2.mark) { fseek(fp,-2*size,1); fwrite(&s2,size,1,fp); fwrite(&s1,size,1,fp); newfs=1; } else s1=s2; } break; case 4: fclose(fp); return; } fclose(fp); } } } void find(char *fn) { void ramka(); FILE* fp; data st; char string[15]; int pr,prs; int key=0,counter=0; int color[]={0,4,4,4}; while (1) { clrscr(); textcolor(10); cprintf("::::::::::::::::::::::::::::: М е н ю П о и с к а " ":::::::::::::::::::::::::::::"); textcolor(WHITE); textbackground(4); cprintf(" "); switch(key) { case LEFT: if (counter>0) { color[counter]=4; color[--counter]=0; } break; case RIGHT: if (counter<3) { color[counter]=4; color[++counter]=0; } break; } textbackground(color[0]); cprintf(" по № записи "); textbackground(color[1]); cprintf(" по Фамилии "); textbackground(color[2]); cprintf(" по Имени "); textbackground(color[3]); cprintf(" Отмена "); textbackground(4); cprintf(" "); textbackground(1); key=bioskey(0); if (key==283) return; if (key == ENTER) { if((fp=fopen(fn,"rb"))==NULL) { puts("File couldn't be open"); return; } switch(counter) { case 0: int number; pr=0; prs=1; cout<<"ВВЕДИТЕ НОМЕР ЗАПИСИ : "; fflush(stdin); scanf("%d",&number); rewind(fp); while(fread(&st,sizeof(data),1,fp)) { if (feof(fp)) { break; } if(st.num == number) { if (prs) { ramka(); gotoxy(1,6); prs=0; } printf(" %4d %-16s %-12s %-17s %8s " "%7.2f\n",st.num,st.lastName,st.firstName, st.midName,st.groupNumber,st.mark); pr=1; } } if(!pr) { cout<<"\nЗАПИСИ С ТАКИМ НОМЕРОМ НЕ СУЩЕСТВУЕТ"; } getch(); break; case 1: prs=1; pr=0; cout<<"ВВЕДИТЕ ФАМИЛИЮ : "; fflush(stdin); cin>>string; rewind(fp); while(fread(&st,sizeof(data),1,fp)) { if (feof(fp)) break; if(!strcmp(st.lastName,string)) { if (prs) { ramka(); gotoxy(1,6); prs=0; } printf(" %4d %-16s %-12s %-17s %8s " "%7.2f\n",st.num,st.lastName,st.firstName, st.midName,st.groupNumber,st.mark); pr=1; } } if(!pr) { cout<<"\nНЕТ ДАННЫХ"; } getch(); break; case 2: prs=1; pr=0; cout<<"ВВЕДИТЕ ИМЯ : "; fflush(stdin); cin>>string; rewind(fp); while(fread(&st,sizeof(data),1,fp)) { if (feof(fp)) break; if(!strcmp(st.firstName,string)) { if (prs) { ramka(); gotoxy(1,6); prs=0; } printf(" %4d %-16s %-12s %-17s %8s " "%7.2f\n",st.num,st.lastName,st.firstName, st.midName,st.groupNumber,st.mark); pr=1; } } if(!pr) { cout<<"\nНЕТ ДАННЫХ"; } getch(); break; case 3: fclose(fp); return; } fclose(fp); } } } void ramka() { window(1,3,80,6); cprintf("------------------------------------" "--------------------------------------------"); textcolor(14); cprintf("%5s %-16s %-12s %-17s %-8s %12s ", "№","Фамилия","Имя","Отчество","№ группы","Ср.балл"); textcolor(WHITE); cprintf("------------------------------------" "--------------------------------------------"); window(1,1,80,25); } int find_max_num(char *fn) { FILE *fp; data st; int max; if ((fp = fopen(fn,"rb")) == NULL) { printf("File could not be opened.\n"); return -1; } max=0; while (fread(&st,sizeof(data),1,fp)) { if (feof(fp)) break; if (st.num>max) max=st.num; } fclose(fp); return max; } int get_number(char *fn) { FILE *fp; int fd,n=0; if ((fp = fopen(fn,"rb")) == NULL) { printf("File could not be opened.\n"); return -1; } fd=fileno(fp); n=filelength(fd)/sizeof(data); fclose(fp); return n; } void create() { FILE *fp; char *fn; cout<<"Введите имя новой БД : "; fflush(stdin); cin>>fn; strcat(fn,".dat"); if ((fp=fopen(fn,"wb")) == NULL) { cout<<"Ошибка...Файл не может быть создан\n"; getch(); exit(10); } fclose(fp); interface(fn); } void open() { FILE *fp; char *fn; cout<<"Введите имя БД : "; fflush(stdin); cin>>fn; strcat(fn,".dat"); if (!(fp=fopen(fn,"rb"))) { cout<<"Ошибка...Файл не может быть открыт\n"; getch(); exit(10); } fclose(fp); interface(fn); } int check(char *fn, data st) { FILE *fp; data temp; int pr=0; if ((fp = fopen(fn,"rb")) == NULL) { printf("File could not be opened.\n"); return 0; } while ( fread( &temp, sizeof( data ), 1, fp)) { if (feof(fp)) break; if (!strcmp(st.lastName,temp.lastName) && !strcmp(st.firstName,temp.firstName) && !strcmp(st.midName,temp.midName) && !strcmp(st.groupNumber,temp.groupNumber) && (st.mark == temp.mark)) { pr=1; break; } } fclose(fp); return pr; } Списки используемой литературы 1. Карпова Т.С. Базы данных: модели, разработка, реализация / Т.С. Карпова. – СПб.: Питер, 2001. – 304 с. – ISBN 5-272-00278-4. 2. Конгаловский М.Р. Энциклопедия технологий баз данных. –2012. – 800 с.: ил. ISBN 5-279-02276-4. 3. Корнеев В.В. Базы данных. Интеллектуальная обработка информации / В.В. Корнеев, А.Ф. Гареев, С.В. Васютин, В.В. Райх. – М.: Издатель Молгачева С.В., Издательство Нолидж, 2013, - 496 с.: ил. ISBN 5-89251-100-6. 4. Марков А.С. Базы данных. Введение в теорию и методологию: учебник / А.С. Марков, К.Ю. Лисовкий. –2014. – 512 с. – ISBN 5-279-02298-5. 5. Петров В.Н. Информационные системы / В.Н. Петров. – СПб.: Питер, 2011 – 688 с. – ISBN 5-318-00561-6. 6. Риккарди Г. Системы баз данных. Теория и практика использования в Interner и среде Java. / Грег Риккарди; пер. с англ. – М.: Издательский дом «Вильямс», 2010. – 480 с. – ISBN 5-8459-0208-8 (рус.). 7. Саак А.Э. Информационные технологии управления: учебник для вузов / А.Э. Саак, Е.В. Пахомов, В.Н. Тюшняков. – СПб.: Питер, 2013. – 320 с. ISBN 5-469-00412-0. 8. Хомоненко А.Д. Базы данных: учебник для высших учебных заведений / А.Д. Хомоненко, В.М. 9. Харви Дейтел, Пол Дейтел “Как программировать на Си” 10. Е. М. Демидович “Основы алгоритмизации и программирования”, Минск 2011 г. 11. Керниган Б., Ритчи Д. “Язык программирования Си”, Финансы и статистика, 2012 г. |