Создать файл произвольного доступа с полями название продукции, вес единицы, цена единицы - C (СИ)
Формулировка задачи:
Создать файл произвольного доступа с полями название продукции, вес единицы, цена единицы.Та вывести на печать те записи вес которых больше 5 кг.
Cреда:
DEV-C++ Программу написал только есть малость глюки.fn UpdFile(void):
НЕ обновляет значение в файле по номеру(n);fn DelZap(void):
пишет что файл str dell .. но файл остается;#include <stdio.h>
struct prod
{ int n;
char nazvaProd[12];
int kg;
int cina;
}; struct prod st;
int menu(void);
void NewAddFile(void);
void UpdFile(void);
void DelZap(void);
void PrintMassCat(void);
main()
{ int a;
{
while((a=menu())!=5)
{ switch(a)
{
case 1:
NewAddFile();
break;
case 2:
UpdFile();
break;
case 3:
DelZap();
break;
case 4:
PrintMassCat();
break;
}}
}
return 0;}
int menu(void)
{int nmenu;
printf("1-NewAddFile\n");
printf("2-UpdFile\n");
printf("3-DelZap\n");
printf("4-PrintMassCat\n");
printf("5-The END\n");
scanf("%d",&nmenu);
return nmenu;
}
void NewAddFile(){
FILE*p;
if ((p=fopen("product.dat","a+"))==NULL){
printf("He ГіГ¤Г*ГҐГІГ±Гї îòêðûòü ГґГ*éë.\n");
exit(1);
}
printf("vvedit nomer zapusy vid 1 ,0 dlya vuhody\n");
scanf("%d",&st.n);
while(st.n!=0)
{ printf("nazva price vaga\n");
scanf("%s%d%d",&st.nazvaProd,&st.cina,&st.kg);
fseek(p,(st.n-1)*sizeof(struct prod),SEEK_SET);
fwrite(&st,sizeof(struct prod),1,p);
printf("vvedit nomer zapusy ,0 dlya vuhody\n");
scanf("%d",&st.n);
}
fclose(p);
}
void UpdFile(){
int a,vaga;
FILE*p;
if ((p=fopen("product.dat","r+"))==NULL){
printf("He ГіГ¤Г*ГҐГІГ±Гї îòêðûòü ГґГ*éë.\n");
exit(1);
}
printf("vvedit nomer zapusy dlua UPD\n");
scanf("%d",&a);
fseek(p,(a-1)*sizeof(struct prod),SEEK_SET);
fread(&st,sizeof(struct prod),1,p);
if(st.n!=0)
printf("net dannuh.\n");
else
{
printf("%10s%10s%10d%10d\n",st.n,st.nazvaProd,st.cina,st.kg);
printf("new zn vaga\n");
scanf("%d",&vaga);
st.kg=vaga;
fseek(p,(a-1)*sizeof(struct prod),SEEK_SET);
fwrite(&st,sizeof(struct prod),1,p);
}
fclose(p);
}
void DelZap(){
FILE*p;
if ((p=fopen("product.dat","a+"))==NULL){
printf("He ГіГ¤Г*ГҐГІГ±Гї îòêðûòü ГґГ*éë.\n");
exit(1);
} struct prod bst={0,"",0,0};
int n;
printf("vvedit zapusy dlua DELL\n");
scanf("%d",&n);
fseek(p,(n-1)*sizeof(struct prod),SEEK_SET);
fread(&st,sizeof(struct prod),1,p);
if(st.n==0)
printf("net dannuh.\n");
else
{ fseek(p,(n-1)*sizeof(struct prod),SEEK_SET);
fwrite(&bst,sizeof(struct prod),1,p);
printf("str dell\n");
}
fclose(p);
}
void PrintMassCat()
{
FILE*p;
if ((p=fopen("product.dat","a+"))==NULL){
printf("He ГіГ¤Г*ГҐГІГ±Гї îòêðûòü ГґГ*éë.\n");
exit(1);
}
printf("%10s%10s%10s%10s\n","nomer","nazva","price","vaga");
while(!feof(p))
{ fread(&st,sizeof(struct prod),1,p);
if(st.n!=0)
printf("%10d%10s%10d%10d\n",st.n,st.nazvaProd,st.cina,st.kg);
}
fclose(p);
}Решение задачи: «Создать файл произвольного доступа с полями название продукции, вес единицы, цена единицы»
textual
Листинг программы
if(st.n!=0)
printf("net dannuh.\n");