Считать из файла структуру, отсортировать и записать в новый файл - 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;
        }
    }
}

Объяснение кода листинга программы

  1. Задача программы - считывание из файла структуры, сортировка и запись в новый файл.
  2. Используемый язык программирования - C.
  3. В коде присутствуют следующие функции:
    • loadAll - считывание всех данных из файла в массив структур.
    • saveAll - запись всех данных из массива структур в файл.
    • sortOstatok - сортировка массива структур по полю ostatok.
    • sortTarif - сортировка массива структур по полю tarif.
    • showAll - вывод информации о всех элементах массива структур.
    • main - главная функция, выполняющая меню программы.
  4. Переменные, используемые в коде:
    • Abonent - название класса, представляющего структуру.
    • PAbonent - указатель на объект класса Abonent.
    • MAX_ABONENTS - максимальное количество элементов в массиве структур.
    • totalAbons - текущее количество элементов в массиве структур.
    • n - номер операции, введенный пользователем.
    • abons - массив структур, в который считываются данные из файла.
    • tarif - строка, используемая для сравнения при сортировке по полю tarif.
    • ostatok - переменная, используемая для сравнения при сортировке по полю ostatok.
    • pth - путь к файлу, из которого считываются данные или в который записываются результаты.
  5. Пример использования функций:
    • loadAll(abons,&totalAbons,D:\\Input.txt); - считывание данных из файла D:\\Input.txt в массив структур.
    • sortOstatok(abons,totalAbons); - сортировка массива структур по полю ostatok.
    • saveAll(abons,totalAbons,D:\\Result.txt); - запись данных из массива структур в файл D:\\Result.txt.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5
Похожие ответы