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