подобная задачка. измени имена некоторых переменных, еще измени параметры printf по своим нуждам.
Код: Выделить всё
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define KEY_FREE (-14)
#define VLEN 20
struct data
{
short b_key;
char b_name[VLEN];
char address[VLEN];
int number;
int skidka;
};
char BASEF[]="d:\\base\\1.dat";
FILE *fbase;
struct data tmp;
int bget(int key);
int zapros();
int bput(int key, char *name, char *sname, int number, int skidka);
void bappend(int key, char *name,char *sname, int number,int skidka);
void shapka();
void find_prog();
void bprint();
void menu();
void clear();
void main()
{
clrscr();
fbase = fopen(BASEF,"a+");
menu();
fclose(fbase);
}
void menu()
{
char ch;
char c;
do
{
printf("\n0-dobavlenie zapisi\n1-vivesti na ekran vsu tablicu\n2-vivesti na ekran informaciu pokupatele s maks skidkoi\n3-ochistit' tablicu\n4-vihod\n");
ch = getch();
switch(ch)
{
case '0':
{
do
{
zapros();
c = getch();
}while (c!=27);break;
}
case '1': bprint(); getch(); break;
case '2': find_prog();getch(); break;
case '3': clear(); break;
}
clrscr();
}while (ch!='4');
}
void find_prog()
{
struct data prog = {0,"noname","noname",0,0};
rewind(fbase);
while (fread(&tmp,sizeof(struct data),1,fbase)==1)
{
if (tmp.skidka>prog.skidka)
{
prog.skidka = tmp.skidka;
prog.number = tmp.number;
prog.b_key = tmp.b_key;
strncpy(prog.b_name,tmp.b_name,VLEN);
strncpy(prog.address,tmp.address,VLEN);
}
}
printf("\n\nbolshe vsegu skidka u pokupatelya\n\n");
shapka();
printf("#%3d|%11s|%7s|%6d|%8d|\n",prog.b_key,prog.b_name,prog.address,prog.number,prog.skidka);
}
int bget(int key)
{
int n;
rewind(fbase);
n=0;
while(fread(&tmp,sizeof(struct data),1,fbase))
{
if (tmp.b_key == key)
{
return (n);
}
n++;
}
return(-1);
}
void bappend(int key, char *name,char *sname, int number,int skidka)
{
struct data newn;
rewind(fbase);
newn.b_key = key;
newn.number = number;
newn.skidka = skidka;
strncpy(newn.b_name,name,VLEN);
strncpy(newn.address,sname,VLEN);
fwrite(&newn,sizeof(struct data),1,fbase);
}
int bput(int key, char *name, char *sname, int number, int skidka)
{
int i = bget(key);
if(i != -1)
{
return(-1);
}
i = bget(KEY_FREE);
if(i==-1)
{
bappend(key,name,sname,number,skidka);
return 0;
}
return 0;
}
void shapka()
{
int i;
printf(" No | name |address|number|skidka %|\n");
for (i=0;i<4;i++)
{
printf(" ");
}
printf("|");
for (i=0;i<11;i++)
{
printf(" ");
}
printf("|");
for (i=0;i<7;i++)
{
printf(" ");
}
printf("|");
for (i=0;i<6;i++)
{
printf(" ");
}
printf("|");
for (i=0;i<8;i++)
{
printf(" ");
}
printf("|\n");
}
void bprint()
{
shapka();
rewind(fbase);
while (fread(&tmp,sizeof(struct data),1,fbase)==1)
{
printf("#%3d|%11s|%7s|%6d|%8d|\n",tmp.b_key,tmp.b_name,tmp.address,tmp.number,tmp.skidka);
}
}
int zapros()
{
short key;
int number,skidka;
char *name;
char *address;
scanf("%d %s %s %d %d",&key,name,address,&number,&skidka);
bput(key,name,address,number,skidka);
return 0;
}
void clear()
{
FILE *f;
f = fopen(BASEF,"w");
fclose(f);
}