Автор: Пользователь скрыл имя, 29 Апреля 2013 в 11:22, практическая работа
Написать базу данных (БД) на языке С++ позволяющую хранить информацию о студентах (Ф.И.О., номер группы, средний балл, уникальный код записи (порядковый №)). База данных должна содержать основные функции : добавление записи, удаление записи, редактирование записи, поиск и сортировку по заданным параметрам.
1. Название программы.
2. Поставленная задача.
3. Функциональное предназначение программы.
4. Описание управления, интерфейса, основных переменных и функций.
5. Блок-схема по ЕСПД 19.003-80.
6. Исходный код программы.
7. Список используемой литературы
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),
int oldfs,newfs,color[]={0,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]);
textbackground(color[1]);
textbackground(color[2]);
textbackground(color[3]);
textbackground(color[4]);
textbackground(4);cprintf("
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.
fseek(fp,-2*size,1);
fwrite(&s2,size,1,fp);
fwrite(&s1,size,1,fp);
newfs=1;
}
if (strcmp(s1.lastName,s2.
if (strcmp(s1.firstName,s2.
fseek(fp,-2*size,1);
fwrite(&s2,size,1,fp);
fwrite(&s1,size,1,fp);
newfs=1;
}
if (strcmp(s1.firstName,s2.
if (strcmp(s1.midName,s2.
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.
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),
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.midName,st.groupNumber,st.
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),
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.midName,st.groupNumber,st.
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),
if (feof(fp))
break;
if(!strcmp(st.firstName,
if (prs) {
ramka();
gotoxy(1,6);
prs=0;
}
printf(" %4d %-16s %-12s %-17s %8s "
"%7.2f\n",st.num,st.lastName,
st.midName,st.groupNumber,st.
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.
&& !strcmp(st.firstName,temp.
&& !strcmp(st.midName,temp.
&& !strcmp(st.groupNumber,temp.
&& (st.mark == temp.mark)) {
pr=1;
break;
}
} fclose(fp);
return pr;
}