Склеил все куски программы в один...вот что получилось:| Код | #include <stdio.h> #include <locale.h> #include <string.h> #include <stdlib.h>
struct goods { char name[256]; int price; int year; int ct; };
struct goods Mass[256]; int i = 0; char flag; FILE *dbase; int compare (char *str1, char *str2); void wGoods (char name[50], int price, int year, int ct); void sorting (void); void swap (struct goods *goods1, struct goods *goods2); void saving (struct goods *vmass,int z); void showing (void);
int main(int argc, char *argv[]) { setlocale (LC_CTYPE,""); wGoods ("Ранец школьный 'Jet pack'", 20, 2010, 1); wGoods ("Ручка шариковая 'James Bound'", 1, 2010, 5); wGoods ("Набор 'Очумелые ручки'", 5, 2009, 1); wGoods ("Мобильный телефон 'Nokia 2300'", 30, 2000, 3); wGoods ("Пенал 'Отечественный'", 3, 1995, 3); wGoods ("Палатка туристическая 'Рандеву'", 200, 2010, 1); wGoods ("Радиоприёмник 'Океан-214'", 10, 1985, 1); wGoods ("Стойка ЧПУ '2С-4265'", 300, 1990, 1); wGoods ("Стойка ЧПУ 'CNC-600'", 280, 1986, 2); wGoods ("Плитка тротуарная", 2, 2010, 1000); wGoods ("Сумка травника 'Бездонный карман'", 20, 2010, 30); showing();
printf("\n"); sorting();
showing();
saving(Mass,11); return 0; }
void wGoods (char name[50], int price, int year, int ct) { strcpy(Mass[i].name, name); Mass[i].price=price; Mass[i].year=year; Mass[i].ct=ct; i++; }
void sorting() { char sortingFlag = 't'; int j; while (sortingFlag == 't') { sortingFlag = 'f'; for (j = 0; j < i - 1; j++) if (Mass[j].year > Mass[j + 1].year) { swap (&Mass[j], &Mass[j + 1]); sortingFlag = 't'; } } }
void swap (struct goods *goods1, struct goods *goods2) { struct goods goodsBuff; goodsBuff = *goods1; *goods1 = *goods2; *goods2 = goodsBuff; }
void showing() { int j; for (j = 0; j < i; j++) printf ("%-50s %-10d %d %d\n", Mass[j].name, Mass[j].price, Mass[j].year, Mass[j].ct); } void saving(struct goods *vmass, int z) { struct goods goodsBuff[255]; int j,k,p,h=0,m=0;
setlocale (LC_CTYPE,""); dbase=fopen("d:\\dbase.db","rb"); if (dbase==NULL) { printf ("Ошибка открытия файла для чтения. Файл не существует. Создание файла для записи...\n"); dbase=fopen("d:\\dbase.db","wb"); if (dbase==NULL) printf ("Ошибка открытия файла для записи!\n"); for (j=0;j<z;j++) { fprintf(dbase,"%-50s %-10d %d %d\n", vmass[j].name, vmass[j].price, vmass[j].year, vmass[j].ct); }; fclose(dbase); printf("Файл создан, данные записаны.\n"); } else { printf("\nЧтение данных из файла:\n"); j=0; while (!feof(dbase)) { h++; fscanf(dbase,"%50c %d %d %d\n",goodsBuff[j].name,&goodsBuff[j].price,&goodsBuff[j].year,&goodsBuff[j].ct); printf("%50s %-10d %d %d\n",goodsBuff[j].name,goodsBuff[j].price,goodsBuff[j].year,goodsBuff[j].ct); j++; }; fclose(dbase); for (k=0;k<h;k++) { flag='f'; for (p=0;p<z;p++) { if (*goodsBuff[k].name==*vmass[p].name) { flag='t'; printf ("%s %s \n", goodsBuff[k].name, vmass[p].name); goodsBuff[k]=vmass[p]; }; }; if(flag=='t') { goodsBuff[++h]=vmass[k]; }; }; dbase=fopen("d:\\dbase.db","wb"); for (k=0;k<h;k++) { fprintf(dbase,"%-50s %-10d %d %d\n", goodsBuff[k].name,goodsBuff[k].price,goodsBuff[k].year,goodsBuff[k].ct); }; fclose(dbase); }; }
|
Поставил разадресацию.Теперь вроде бы всё правильно делает... Но не совсем... вторая программа, которая использует эту же функцию, должна дописывать в файл некоторые структуры, которые не совпадают с уже записанными:
| Код | #include <stdio.h> #include <locale.h> #include <string.h> #include <stdlib.h>
struct goods { char name[256]; int price; int year; int ct; }; FILE *dbase; int compare (char *str1, char *str2); void saving (struct goods *vmass,int z); void wGoods (char name[256], int price, int year, int ct); struct goods Mass2[256]; int i=0; char flag; int main(int argc, char *argv[]) { setlocale (LC_CTYPE,""); wGoods ("Окно ПВХ", 25, 2010, 3); wGoods ("Мяч резиновый", 5, 2009, 2); wGoods ("Набор 'Очумелые ручки'", 4, 2009, 1); wGoods ("Мобильный телефон 'Nokia 2300'", 25, 2000, 2); wGoods ("Пенал 'Отечественный'", 3, 1995, 3); saving(Mass2,5); return 0; }
void wGoods (char name[256], int price, int year, int ct) { strcpy(Mass2[i].name, name); Mass2[i].price=price; Mass2[i].year=year; Mass2[i].ct=ct; i++; }
void saving(struct goods *vmass, int z) { struct goods goodsBuff[255]; int j,k,p,h=0,m=0;
setlocale (LC_CTYPE,""); dbase=fopen("d:\\dbase.db","rb"); if (dbase==NULL) { printf ("Ошибка открытия файла для чтения. Файл не существует. Создание файла для записи...\n"); dbase=fopen("d:\\dbase.db","wb"); if (dbase==NULL) printf ("Ошибка открытия файла для записи!\n"); for (j=0;j<z;j++) { fprintf(dbase,"%-50s %-10d %d %d\n", vmass[j].name, vmass[j].price, vmass[j].year, vmass[j].ct); }; fclose(dbase); printf("Файл создан, данные записаны.\n"); } else { printf("\nЧтение данных из файла:\n"); j=0; while (!feof(dbase)) { h++; fscanf(dbase,"%50c %d %d %d\n",goodsBuff[j].name,&goodsBuff[j].price,&goodsBuff[j].year,&goodsBuff[j].ct); printf("%50s %-10d %d %d\n",goodsBuff[j].name,goodsBuff[j].price,goodsBuff[j].year,goodsBuff[j].ct); j++; }; fclose(dbase); for (k=0;k<h;k++) { flag='f'; for (p=0;p<z;p++) { if (*goodsBuff[k].name==*vmass[p].name) { flag='t'; printf ("%s %s \n", goodsBuff[k].name, vmass[p].name); goodsBuff[k]=vmass[p]; }; }; if(flag=='t') { goodsBuff[++h]=vmass[k]; }; }; dbase=fopen("d:\\dbase.db","wb"); for (k=0;k<h;k++) { fprintf(dbase,"%-50s %-10d %d %d\n", goodsBuff[k].name,goodsBuff[k].price,goodsBuff[k].year,goodsBuff[k].ct); }; }; }
|
Немогу понять, где я тут накосячил, но результат напрочь не соответствует ожиданиям( |