Считать из файла структуру, отсортировать и записать в новый файл - C (СИ)
Формулировка задачи:
Здравствуйте, буду очень благодарен если кто поможет. застрял на функции лоад. Вот само задание:
создать программу по индивидуальному варианту, которая:
1.1. открывает внешний файл Input.txt и считывает с него данные согласно индивидуальным заданием (не менее 5-ти записей с 3-мя или более полями);
1.2. запоминает полученные данные в виде структуры данных;
1.3. сортирует данные структуры за числовым полем любым методом сортировки;
1.4. записывает полученные результаты сортировки во внешний файл Output.txt в виде таблицы с соответствующей шапкой и табулирования данных.
2. Выполнить пункты 1.3 и 1.4 для сортировки данных структуры по символьным полем.
1. Закрытые данные-члены класса:
- Мобильный номер;
- Остаток средств на счете;
- Название тарифного плана.
Открытые функции-члены класса:
- Инициализация (введение через аргументы функции информации в данные-члены класса);
- Вывод на экран информации, сохранения в данных-членах.
2. Модернизировать класс так, чтобы работу по инициализации данных выполнял конструктор, а деструктор выводил на экран мобильный номер и название тарифного плана.
Файл допустим такого содержания:
09342598623 56.30 life
05085458748 23.10 mtc
09765874598 11.20 kyivstar
09345874122 89.65 life
09645874114 11.50 mtc
Дошел до этого, дальше мои знания не позволяют((
#include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> struct Abonent { int nomer; double ostatok; char tarif[15]; }arr [5]; int load (struct Abonent *arr) { char *token=0; int field=1; char str[256]; FILE *f=fopen("D:\\Input.txt", "r"); token = strtok (str, " "); } void main (void) { load(arr); }
Решение задачи: «Считать из файла структуру, отсортировать и записать в новый файл»
textual
Листинг программы
#include <string.h> #include <stdio.h> #include <stdlib.h> #define MAX_ABONENTS 100 class Abonent{ private: char nomer[11]; float ostatok; char tarif[15]; public: Abonent(FILE* f){load(f);} ~Abonent(){printf("%s %s\n",nomer,tarif);} void load(FILE* f){fscanf(f,"%s %f %s",&nomer,&ostatok,&tarif);} void save(FILE* f){fprintf(f,"%s %f %s\n",nomer,ostatok,tarif);} void show(){printf("%s\t%f\t%s\n",nomer,ostatok,tarif);} int ostatokBolshe(Abonent* a){return this->ostatok>a->ostatok;} int ostatokMenshe(Abonent* a){return this->ostatok<a->ostatok;} int tarifBolshe(Abonent* a){return strcmp(this->tarif,a->tarif)>0;} int tarifMenshe(Abonent* a){return strcmp(this->tarif,a->tarif)<0;} }; typedef Abonent* PAbonent; void loadAll(PAbonent *a,int *t,const char *pth){ FILE* f=fopen(pth,"r"); while(!feof(f)){ a[*t]=new Abonent(f); (*t)++; } fclose(f); } void saveAll(PAbonent *a,int t,const char *pth){ FILE* f=fopen(pth,"w"); for(int i=0;i<t;i++)a[i]->save(f); fclose(f); } void sortOstatok(PAbonent *a,int t){ int flag=true; Abonent *temp; while(flag){ flag=false; for(int i=0;i<t-1;i++) if(a[i]->ostatokBolshe(a[i+1])){ flag=true; temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } } } void sortTarif(PAbonent *a,int t){ int flag=true; Abonent *temp; while(flag){ flag=false; for(int i=0;i<t-1;i++) if(a[i]->tarifBolshe(a[i+1])){ flag=true; temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } } } void showAll(PAbonent *a,int t){ for(int i=0;i<t;i++){ printf("%d.",i+1); a[i]->show(); } } void main(){ PAbonent abons[MAX_ABONENTS]; int totalAbons=0; int n; printf("1.load\n2.sortorovka po ostatky\n3.sortirovka po tarify\n4.save\n5.exit\n"); while(true){ printf("Input number: "); scanf("%d",&n); printf("\n"); switch (n){ case 1: loadAll(abons,&totalAbons,"D:\\Input.txt"); showAll(abons,totalAbons); break; case 2: sortOstatok(abons,totalAbons); showAll(abons,totalAbons); break; case 3: sortTarif(abons,totalAbons); showAll(abons,totalAbons); break; case 4: saveAll(abons,totalAbons,"D:\\Result.txt");break; case 5: exit(0);break; } } }
Объяснение кода листинга программы
- Задача программы - считывание из файла структуры, сортировка и запись в новый файл.
- Используемый язык программирования - C.
- В коде присутствуют следующие функции:
- loadAll - считывание всех данных из файла в массив структур.
- saveAll - запись всех данных из массива структур в файл.
- sortOstatok - сортировка массива структур по полю
ostatok
. - sortTarif - сортировка массива структур по полю
tarif
. - showAll - вывод информации о всех элементах массива структур.
- main - главная функция, выполняющая меню программы.
- Переменные, используемые в коде:
- Abonent - название класса, представляющего структуру.
- PAbonent - указатель на объект класса Abonent.
- MAX_ABONENTS - максимальное количество элементов в массиве структур.
- totalAbons - текущее количество элементов в массиве структур.
- n - номер операции, введенный пользователем.
- abons - массив структур, в который считываются данные из файла.
- tarif - строка, используемая для сравнения при сортировке по полю
tarif
. - ostatok - переменная, используемая для сравнения при сортировке по полю
ostatok
. - pth - путь к файлу, из которого считываются данные или в который записываются результаты.
- Пример использования функций:
- loadAll(abons,&totalAbons,
D:\\Input.txt
); - считывание данных из файлаD:\\Input.txt
в массив структур. - sortOstatok(abons,totalAbons); - сортировка массива структур по полю
ostatok
. - saveAll(abons,totalAbons,
D:\\Result.txt
); - запись данных из массива структур в файлD:\\Result.txt
.
- loadAll(abons,&totalAbons,
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д