Ðåôåðàò: Îò÷åò ïî ó÷åáíîé ïðàêòèêå ÎÀèÏ áàçà äàííûõ ñòóäåíòîâ (ñîçäàíèå, ïîèñê, óäàëåíèå, ñîðòèðîâêà, âñå, ÷òî íàäî íàïèñàííàÿ íà Ñ++)
oldfs,newfs – ôëàãè (ïðèçíàêè),
6.
Èñõîäíûé êîä ïðîãðàììû
#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");