В магазин за ел. уреди се поддържа иформация за:вид на уреда,модел,производител,едиична цена,количество.Да се състави програма,която поддържа файл с посочените данни с помощта на подпрограми за: - създаване на нов файл с информация за уредите - регистриране на продажба на уред - регистриране доставка на уреди - пресмятане цената на наличното количество от всички уреди от даден вид - намиране на уреда от даден вид с най-ниска цена #include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <io.h>
#include <math.h>
#include <conio.h>
#define FN "UREDI" /* FILE NAME */
#define BL 512 /* FILE BUF LEN */
#define RL 52 /* REC LEN */
#define VL 10 /* VID LEN */
#define ML 10 /* MODEL LEN */
#define PL 10 /* PROIZ LEN */
#define CL 10 /* CENA LEN */
#define KL 10 /* KOLICH LEN */
#define NV 10 /* NUM VID */
#define OVID 0
#define OMOD OVID+VL
#define OPRZ OMOD+ML
#define OCEN OPRZ+PL
#define OKOL OCEN+CL
typedef struct MT MT;
char RB[RL+1]; /* REC BUF */
char FB[bL]; /* FILE BUF */
int BP; /* FILE BUF PTR */
int BN; /* BYTES RW/WR */
int FH; /* FILE HANDLE */
long RN; /* NUM RECS */
float SV; /* SUM VID */
float MV; /* MIN VID */
void (*FM)(MT*); /* FUNC PTR */
char* MS= /* MENU STR */
"[D]OSTAVQ\n"
"[K]UPUVA\n"
"[s]UMA\n"
"[M]INIMALNA\n"
"[i]ZHOD\n";
struct MT{
char S[ML]; /* NAME */
long K; /* REC NUM */
MT* L; /* LEFT SUBTREE */
MT* R; /* RIGHT SUBTREE */
};
struct{
char* S;
MT* P;
}VT[NV]=
{
{"ANTENA ",0},
{"BATERIQ ",0},
{"CHASOVNIK ",0},
{"HLADILNIK ",0},
{"LAMPA ",0},
{"PECHKA ",0},
{"TELEFON ",0},
{"TELEVIZOR ",0},
{"VENTILATOR",0},
{"VIDEO ",0}
};
int WRB(); /* WRITE FILE BUF */
int RDB(); /* READ FILE BUF */
int FLB(); /* FLUSH FILE BUF */
long SEEK(long,int); /* SEEK... */
void CLB(); /* CLEAR REC BUF */
void GET(int,int); /* GET INPUT */
void CPY(char*,char*,int); /* COPY FIX LEN STR */
int CMP(char*,char*,int); /* COMPARE FIX LEN STR */
void F2S(char*,char*,int); /* FILE TO STR */
void S2F(char*,char*,int); /* STR TO FILE */
int VID(char*); /* VID IDX */
long ADI(MT**,char*,long); /* ADD TO IDX */
MT* FNI(MT**,char*); /* FIND IN IDX */
void RVI(MT*); /* ROVE IDX */
void CLI(MT**); /* DESTROY IDX */
void FM1(MT*); /* CALLBACK 1 (SUM) */
void FM2(MT*); /* CALLBACK 2 (MIN) */
void ADR(); /* ADD REC */
void RMR(); /* REMOVE REC */
void IDX(); /* BUILD IDX */
void DLV(); /* DELIVER */
void BUY(); /* BUY...*/
void SUM(); /* CALC SUM */
void MIN(); /* CALC MIN */
void CLR(); /* CLEAR RSRC */
void MNU(); /* MENU */
int main()
sqrt()
{
FH=open(FN,O_RDWR|O_BINARY);
if(FH==-1){
FH=_creat(FN,0);
if(FH==-1){
printf("Error create file");
return 1;}}
else
IDX();
MNU();
return 0;
}
void CLR()
{
int I;
for(I=0;I<NV;I++)
CLI(&VT[i].P);
close(FH);
}
void MNU()
{
char C;
L1: system("cls"); //<---- Fixed Here
printf("%s\n",MS);
C=getch();
switch(C&0XDF){
case 'D':
DLV();
break;
case 'K':
BUY();
break;
case 'S':
SUM();
getch();
break;
case 'M':
MIN();
getch();
break;
case 'I':
CLR();
return;}
goto L1;
}
void IDX()
{
int I;
RN=0;
SEEK(0,SEEK_SET);
while(RDB()==0){
I=VID(RB+OVID);
ADI(&VT[i].P,RB+OMOD,RN++);}
}
void ADR()
{
int I;
long K;
char B[KL+1];
I=VID(RB+OVID);
if(I==-1){
printf("Nqma takyv artikul\n");
return;}
K=ADI(&VT[i].P,RB+OMOD,RN);
if(K!=-1){
SEEK(K*RL,SEEK_SET);
RDB();
F2S(B,RB+OKOL,KL);
I=atoi(B);
itoa(++I,B,10);
S2F(RB+OKOL,B,KL);
SEEK(K*RL,SEEK_SET);}
else{
SEEK(RN*RL,SEEK_SET);
RN++;}
WRB();
}
void RMR()
{
MT* M;
int I,J,K;
char B[KL+1];
I=VID(RB+OVID);
if(I==-1){
printf("Nqma takyv artikul\n");
return;}
M=FNI(&VT[i].P,RB+OMOD);
if((int)M==-1){
printf("Nqma takyv model\n");
return;}
K=M->K;
SEEK(K*RL,SEEK_SET);
RDB();
F2S(B,RB+OCEN,CL);
printf("CENA : %s\n",B);
F2S(B,RB+OKOL,KL);
J=atoi(B);
if(J==0){
printf("Izcherpano kolichestvo\n");
return;}
J--;
itoa(J,B,10);
S2F(RB+OKOL,B,KL);
SEEK(K*RL,SEEK_SET);
WRB();
}
void DLV()
{
int C;
do{ CLB();
printf("VID : ");
GET(OVID,VL);
printf("MODEL : ");
GET(OMOD,ML);
printf("PROIZV : ");
GET(OPRZ,PL);
printf("CENA : ");
GET(OCEN,CL);
printf("BROI : ");
GET(OKOL,KL);
RB[RL-2]=0X0D;
RB[RL-1]=0X0A;
ADR();
printf("\nOshte?('N' za krai)\n\n");
C=getch();}
while((C&0XDF)!='N');
}
void BUY()
{
int C;
do{ CLB();
printf("VID : ");
GET(OVID,VL);
printf("MODEL : ");
GET(OMOD,ML);
RMR();
printf("\nOshte?('N' za krai)\n\n");
C=getch();}
while((C&0XDF)!='N');
}
void SUM()
{
int I;
CLB();
printf("VID : ");
GET(OVID,VL);
I=VID(RB+OVID);
if(I==-1){
printf("Nqma takyv artikul");
return;}
FM=FM1;
SV=0;
RVI(VT[i].P);
printf("%.2f",SV);
}
void FM1(MT* P)
{
char B[CL+1];
SEEK(P->K*RL,SEEK_SET);
RDB();
if(RB[OKOL]==0X30)
return;
F2S(B,RB+OCEN,CL);
SV+=atof(B);
}
void MIN()
{
int I;
CLB();
printf("VID : ");
GET(OVID,VL);
I=VID(RB+OVID);
if(I==-1){
printf("Nqma takyv artikul");
return;}
FM=FM2;
MV=999999.00;
RVI(VT[i].P);
printf("%.2f",MV);
}
void FM2(MT* P)
{
char B[CL+1];
float I;
SEEK(P->K*RL,SEEK_SET);
RDB();
if(RB[OKOL]==0X30)
return;
F2S(B,RB+OCEN,CL);
I=atof(B);
if(I<MV)MV=I;
}
void GET(int D,int N)
{
char C;
int I=0;
do{ C=getch();
if(C==0X0D)
break;
putch©;
*(RB+D+I++)=C;}
while(I<N);
printf("\r\n");
}
void CLB()
{
int I=RL;
do{ RB[i]=0X20;}
while(I--);
}
int WRB()
{
int I=0;
while(I<RL){
if(BP==BL){
BN=write(FH,FB,BL);
if(BN!=BL)
return 1;
BP=0;}
FB[bP++]=RB[i++];}
FLB();
return 0;
}
int RDB()
{
int I=0;
while(I<RL){
if(BP==BN){
BN=read(FH,FB,BL);
if(BN==0)
return 1;
BP=0;}
RB[i++]=FB[bP++];}
RB[RL]=0;
return 0;
}
int FLB()
{
if(BP>0){
BN=write(FH,FB,BP);
if(BN!=BP)
return 1;}
BP=0;
return 0;
}
long SEEK(long D,int M)
{
BP=BN=0;
return lseek(FH,D,M);
}
void CPY(char* D,char* S,int N)
{
while(N--)
*D++=*S++;
*D=0;
}
int CMP(char* D,char* S,int N)
{
char U,V;
while(N--){
U=*D&0XDF;
V=*S&0XDF;
if(U!=V)
return U-V;
D++;
S++;}
return 0;
}
void F2S(char* D,char *S,int N)
{
while(N--){
if(*S==0X20)
break;
*D++=*S++;}
*D=0;
}
void S2F(char* D,char* S,int N)
{
while(*S){
*D++=*S++;
N--;}
while(N--)
*D++=0X20;
}
int VID(char *S)
{
int L=0;
int R=NV-1;
int M,K;
do{ M=(L+R)/2;
K=CMP(S,VT[M].S,VL);
if(K<0)R=M-1;else
if(K>0)L=M+1;else
return M;}
while(R>=L);
return -1;
}
long ADI(MT** M,char* S,long K)
{
MT* V=*M;
int I;
if(V==0){
V=*M=(MT*)malloc(sizeof(MT));
CPY(V->S,S,ML);
V->K=K;
V->L=0;
V->R=0;}
else{
I=CMP(S,V->S,ML);
if(I<0)
return ADI(&V->L,S,K);else
if(I>0)
return ADI(&V->R,S,K);
else
return V->K;}
return -1;
}
MT* FNI(MT** M,char* S)
{
MT* V=*M;
int I;
if(V==0)return (MT*)-1;
I=CMP(S,V->S,ML);
if(I<0)
return FNI(&V->L,S);else
if(I>0)
return FNI(&V->R,S);
else
return V;
}
void RVI(MT* P)
{
if(P==0)return;
FM(P);
RVI(P->L);
RVI(P->R);
}
void CLI(MT** P)
{
if(*P==0)return;
CLI(&(*P)->L);
CLI(&(*P)->R);
free(*P);
*P=0;
} Немога да разбера къде трябва да поставя sqrt() за да не ми дава грешка.Трябва да е във функцията на main но пак ми дава 1 грешка.Помогнете ми моля ви.С++ 4.52.Ако можете ми помогнете.Благодаря Ви.