Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
аkо
0 / 0 / 0
Регистрация: 24.05.2009
Сообщений: 5
#1

операции с текстовыми файлами - C++

26.05.2009, 02:15. Просмотров 766. Ответов 2
Метки нет (Все метки)

Доброго времени суток!!! Помогите решить задачку, у самой не получается=((

Задача в С++, изначально данные находятся в файле .txt
Сделать прогу с помощью операций с текстовыми файлами.


Написать программу, которая содержит динамическую информацию о нарушении правил дорожного движения. (на один автомобиль база может содержать записи о нескольких нарушениях). Сведения о каждом автомобиле включает в себя:
-номер автомобиля (3-х значный);
-фамилию владельца;
-список нарушений;
-размер штрафа за каждое нарушение из списка.
Программа должна обеспечивать:
1. начальное формирование из файла базы данных об автомобилях в виде бинарного дерева, по номеру автомобиля.
2. при уплате всех штрафов (сумма и номер автомобиля вводиться с консоли пользователем) автомобиль удаляется из базы нарушителей.
3. по запросу в файл выводятся сведения о нарушителях.



Пример файла .txt:
123 Иванов Проезд на красный свет 500 Управление в нетрезвом состоянии 1000
248 Петров Пересечение сплошной полосы 500
362 Сидоров Превышение скорости на 50 км/ч 300

Заранее огромное спасибо!!!

Добавлено через 12 часов 24 минуты 28 секунд
Набросок кода такой, только он не работает=((
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

struct narush
{
int nomer;
char familia[10];
char violation[40];
int shtraf;
};
struct gbdd
{
narush info;
gbdd* left;
gbdd* right;
}tr;



gbdd* create_var(narush a)
{
gbdd* newvar;
newvar=new(gbdd);
newvar->info=a;
newvar->left=NULL;
newvar->right=NULL;
return(newvar);
}
gbdd* add_var(gbdd* f, narush a)
{
if (f==NULL) {f=create_var(a);
return(f);}
if (f->info.nomer>a.nomer) {if (f->left==NULL) {f->left=create_var(a);
cout<<"left"<<endl;
}
else f=add_var(f->left,a);}
if (f->info.nomer<a.nomer) {if (f->right==NULL) { f->right=create_var(a);
cout<<"right"<<endl;
}
else f=add_var(f->right,a);}
return (f);
}

gbdd* find(gbdd *a,narush val)
{
if (a==NULL) return(0);
if (val.nomer<a->info.nomer) return(find(a->left,val));
if (val.nomer>a->info.nomer) return(find(a->right,val));
if (val.nomer==a->info.nomer) return(a);

}
void travel(gbdd *a)
{
cout <<a->info.nomer<<endl;
travel(a->left);
travel(a->right);
}

void main()
{
FILE *f;
f=fopen("inp.txt","r");
const int dl=60;
char s[dl];
gbdd *b,*c;
fgets(s,dl,f);
b=new(gbdd);
b->info.nomer=atoi(&s[0]);
strncpy(b->info.familia,s,10);
strncpy(b->info.violation, s, 40);
b->info.shtraf=atoi(&s[20]);

while (fgets(s,dl,f))
{
c->info.nomer=atoi(&s[0]);
strncpy(c->info.familia, s, 10);
strncpy(c->info.violation,s,40);
c->info.shtraf(&s[20]);
b=add_var(b,c->info);
}
travel(b);

}

Добавлено через 10 часов 41 минуту 41 секунду
Помогите, сил моих больше нет!!!!:'(

Добавлено через 3 часа 51 минуту 27 секунд
Возможно, как-то так, но компилятор ругается, на чем свет стоит

#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

struct node
{
int number;
char soname[10];
char narush[40];
char shtraf;
node *right;
node *left;};

node *crnode(int val)
{
node *newnode;
newnode=new (node);
newnode->number=val;
newnode->left=NULL;
newnode->right=NULL;
return (newnode);
}
node *add_tree(node *a, int val)
{ if (a==NULL) {a=crnode(val); return (a);}
if (val<a->number)
if (a->left==NULL) a->left=crnode(val);
else add_tree(a->left,val);
if (val>a->number)
if (a->right==NULL) a->right=crnode(val);
else add_tree(a->right,val);
return (a);}

node *find_tree(node *a, int val)
{if (a==NULL) return (NULL);
if (a->number==val) return (a);
if (val<a->number) return(find_tree(a->left, val));
if (val>a->number) return(find_tree(a->right, val));
return(NULL);}

void travel(node *a)
{if(a!=NULL)
{cout<<"nomer mashini"<<a->number<<"familia vladel'ca"<<a->soname<<endl;
travel(a->left);
travel(a->right);
}
}

int main()
{
node *a=NULL;

FILE *inp, *out;
if((inp=fopen("inp.txt","r"))==NULL)
{cout<<"Oshibka faila"<<endl; return(1);}
if((out=fopen("out.txt","w+"))==NULL)
{cout<<"Oshibka faila"<<endl; return(1);}
const int dl=75;
char s[dl];
int kol=0;//количество записей в файле

while(fgets(s,dl,inp))
{
node.number=atoi(&s[3]);
strncpy(node.soname,&s[4],10);
node.soname[14]='\0';
strncpy(node.narush, &s[15],40);
node.narush[45]='\0';
strncpy(node.shtraf, &[46], 23);
node.shtraf[69]='\0'
kol++;
a=add_tree(a, &node.number);
}
fclose(inp);

return 0;



}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2009, 02:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос операции с текстовыми файлами (C++):

Основные операции с текстовыми файлами. Выручайте! - C++
Помогите с задачей плз. Дано целое число Х и текстовый файл. Удалить с каждого ряда файла первые Х символы (если длина ряда меньше Х,...

Переделать работу с текстовыми файлами под работу с двоичными файлами - C++
Здравствуйте. В этой программе идёт работа с текстовыми файлами, а нужно с двоичными. Можно ли как-то переделать? #include...

Работа с текстовыми файлами - C++
Люди добрые кто может подскажите)) Задание: Дан текстовый файл, проставить пробелы после знаков препинания &quot;,.?!&quot; если он отсутствует,...

Работа с текстовыми файлами - C++
Есть программа, которая считывает массив структур с текстового файла, выполняет сортировку и результат выводит в другой текстовый файл, но...

Работа с текстовыми файлами - C++
Пожалуйста, помогите с задачей: Дан файл f, компоненты которого являются действительными числами. Найти: 1.наибольшее из значений...

Работа с текстовыми файлами - C++
Мне нужно разработать программу, выводит на экран по желанию пользователя: 1) N первых строк файла; 2) N последних строк файла; 3) вывести...

2
Evg
Эксперт CАвтор FAQ
18374 / 6421 / 441
Регистрация: 30.03.2009
Сообщений: 17,812
Записей в блоге: 28
26.05.2009, 10:42 #2
> Возможно, как-то так, но компилятор ругается, на чем свет стоит

Сейчас главные специалисты соберутся, дружно помедитируют (так сказать, групповая медитация) и сразу догадаются, как же у тебя компилятор ругается
0
аkо
0 / 0 / 0
Регистрация: 24.05.2009
Сообщений: 5
27.05.2009, 12:13  [ТС] #3
Ухху!!!!!!!! В таком виде она компилируется, но не работает
#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

struct node
{
int number;
char soname[10];
char narush[40];
char shtraf[30];
node *right;
node *left;};

node *crnode(int val)
{
node *newnode;
newnode=new (node);
newnode->number=val;
newnode->left=NULL;
newnode->right=NULL;
return (newnode);
}
node *add_tree(node *a, int val)
{ if (a==NULL) {a=crnode(val); return (a);}
if (val<a->number)
if (a->left==NULL) a->left=crnode(val);
else add_tree(a->left,val);
if (val>a->number)
if (a->right==NULL) a->right=crnode(val);
else add_tree(a->right,val);
return (a);}

node *find_tree(node *a, int val)
{if (a==NULL) return (NULL);
if (a->number==val) return (a);
if (val<a->number) return(find_tree(a->left, val));
if (val>a->number) return(find_tree(a->right, val));
return(NULL);}

void travel(node *a)
{if(a!=NULL)
{cout<<"nomer mashini"<<a->number<<"familia vladel'ca"<<a->soname<<endl;
travel(a->left);
travel(a->right);
}
}

int main()
{
node *a=NULL;

FILE *inp, *out;
if((inp=fopen("inp.txt","r"))==NULL)
{cout<<"Oshibka faila"<<endl; return(1);}
if((out=fopen("out.txt","w+"))==NULL)
{cout<<"Oshibka faila"<<endl; return(1);}
const int dl=75;
char s[dl];

while(fgets(s,dl,inp))
{
a->number =atoi(&s[3]);
strncpy(a->soname ,&s[4],10);
a->soname [14]='\0';
strncpy(a->narush, &s[15],40);
a->narush [45]='\0';
strncpy(a->shtraf , &s[46], 23);
a->shtraf [69]='\0';
a=add_tree(a, a->number);
}
fclose(inp);

return 0;



}

Добавлено через 11 часов 35 минут 23 секунды
прога работает!!!!!!
осталось написать 2 и 3 пункт, помогите, кому не сложно
#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

struct node
{
char soname[10];
int number;
char narush[10][40];
int pnumb;
node *right;
int shtraf[30];
node *left;
};

node *crnode(char s[75])
{
node *newnode=new (node);
newnode->number=atoi(&s[0]);
newnode->pnumb=1;\
strncpy(newnode->soname ,&s[4],10);
newnode->soname[10]='\0';
strncpy(newnode->narush[1], &s[14],40);
newnode->narush[1][39]='\0';
newnode->shtraf[newnode->pnumb]=atoi(&s[54]);
newnode->left=NULL;
newnode->right=NULL;
return (newnode);
}
node *add_tree(node *a,char s[75])
{
int k;
if (a==NULL)
{
a=crnode(s);
}
else
{
k=atoi(&s[0]);
// cout << endl << word << strcmp(word,a->Name) << a->Name << endl;
if (k<a->number)
{
if (a->left==NULL)
{
// cout << "Piwem v Levo" << endl;
a->left=crnode(s);
}else{
add_tree(a->left,s);
}
}
if (k>a->number)
{
if (a->right==NULL)
{
// cout << "Piwem v Pravo" << endl;
a->right=crnode(s);
}else{
add_tree(a->right,s);
}
}
if (k==a->number)
{
// cout << "Piwem v s'uda" << endl;
a->pnumb++;
strncpy(a->narush[a->pnumb], &s[14],40);
(a->narush[a->pnumb])[39]='\0';
a->shtraf[a->pnumb]=atoi(&s[54]);
}
}
return(a);

}

node *find_tree(node *a, int val)
{
if (a==NULL) return (NULL);
if (a->number==val) return (a);
if (val<a->number) return(find_tree(a->left, val));
if (val>a->number) return(find_tree(a->right, val));
return(NULL);
}

void travel(node *a)
{if(a!=NULL)
{cout<<"nomer mashini"<<a->number<<"familia vladel'ca"<<a->soname<<endl;
travel(a->left);
travel(a->right);
}
}

node *NumberContains(int k, node* a)
{
if (a!=NULL)
{
if (a->number==k)
{return(a);}
if (NumberContains(k,a->left)==NULL)
{return(NumberContains(k,a->right));}else{return(NumberContains(k,a->left));};
}else{return(NULL);}
return(a);
}

void print_tree(node* a)
{
int i;
if (a!=NULL)
{
cout << "NUMBER:" << a->number << endl ;
cout << "FAMILIJAAA:" << a->soname << endl;
for (i=1;i<=a->pnumb;i++)
{
cout << "\n" << a->narush[i] << "- " << a->shtraf[i] <<"\n__________________________\n";
}
cout << endl;
print_tree(a->left);
print_tree(a->right);
}
}

int main()
{
node *a=NULL, *b=NULL;
FILE *inp, *out;
if((inp=fopen("D:\\inp3.txt","r"))==NULL)
{cout<<"Oshibka faila"<<endl; return(1);}
if((out=fopen("D:\\out.txt","w"))==NULL)
{cout<<"Oshibka faila"<<endl; return(1);}
const dl=75;
char s[dl];
while(fgets(s,dl,inp))
{
a=add_tree(a,s);
}
print_tree(a);
fclose(inp);
return 0;
}

Добавлено через 12 часов 20 минут 16 секунд
Кому интересно, вот полное решение задачи
#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct node
{
char soname[10];
int number;
char narush[10][40];
int pnumb;
node *right;
int shtraf[30];
node *left;
};

node *crnode(char s[75])
{
node *newnode=new (node);
newnode->number=atoi(&s[0]);
newnode->pnumb=1;\
strncpy(newnode->soname ,&s[4],10);
newnode->soname[10]='\0';
strncpy(newnode->narush[1], &s[14],40);
newnode->narush[1][39]='\0';
newnode->shtraf[newnode->pnumb]=atoi(&s[54]);
newnode->left=NULL;
newnode->right=NULL;
return (newnode);
}
node *add_tree(node *a,char s[75])
{
int k;
if (a==NULL)
{
a=crnode(s);
}
else
{
k=atoi(&s[0]);
if (k<a->number)
{
if (a->left==NULL)
{
a->left=crnode(s);
}else{
add_tree(a->left,s);
}
}
if (k>a->number)
{
if (a->right==NULL)
{
a->right=crnode(s);
}else{
add_tree(a->right,s);
}
}
if (k==a->number)
{
a->pnumb++;
strncpy(a->narush[a->pnumb], &s[14],40);
(a->narush[a->pnumb])[39]='\0';
a->shtraf[a->pnumb]=atoi(&s[54]);
}
}
return(a);

}

void print_narush(FILE *out, node *a)
{
int i;
if (a!=NULL)
fprintf(out,"%d",a->number);
fprintf(out,"%s",a->soname);
for (i=0; i<a->pnumb; i++)
{
fprintf(out,"%d",a->narush[i]);
fprintf(out,"%s",a->shtraf[i]);
}
}

node *find_tree(node *a, int val)
{
if (a==NULL) return (NULL);
if (a->number==val) return (a);
if (val<a->number) return(find_tree(a->left, val));
if (val>a->number) return(find_tree(a->right, val));
return(NULL);
}

void travel(node *a)
{if(a!=NULL)
{cout<<"nomer mashini"<<a->number<<"familia vladel'ca"<<a->soname<<endl;
travel(a->left);
travel(a->right);
}
}


int rightmost (node *a)
{
while (a->right!=NULL)
a=a->right;
return (a->number);
}

node *del_tree(node *a, int val)
{int zam;
if (a->number==val) {if ((a->left==NULL)&&(a->right==NULL))
{a=NULL;
cout<<a->soname <<" udalen is spiska narushitelej"<<endl;
return (a);}
if ((a->left==NULL)&&(a->right!=NULL))
{a=a->right;
cout<<a->soname <<" udalen is spiska narushitelej"<<endl;
return (a);}
if ((a->left!=NULL)&&(a->right==NULL))
{a=a->left;
cout<<a->soname <<" udalen is spiska narushitelej"<<endl;

return (a);}
if ((a->left!=NULL)&&(a->right!=NULL))
{zam=rightmost(a->left);
a->left=del_tree(a->left,zam);
a->number=zam;
return(a);}
}
if (a->number>val) {a->left=del_tree(a->left, val); return(a);}
if (val>a->number) {a->right=del_tree(a->right,val); return(a);}
return (a);
}

void PrintNode(node *a)
{
int i;
if (a!=NULL)
{
cout << "NUMBER:" << a->number << endl ;
cout << "FAMILIJAAA:" << a->soname << endl;
for (i=1;i<=a->pnumb;i++)
{
cout << "\n" << a->narush[i] << "- " << a->shtraf[i] <<"\n__________________________\n";
}
cout << endl;
};
}

node *NumberContains(int k, node* a)
{
if (a!=NULL)
{
if (a->number==k)
{return(a);}
if (NumberContains(k,a->left)==NULL)
{return(NumberContains(k,a->right));}else{return(NumberContains(k,a->left));};
}else{return(NULL);}
return(a);
}

void print_tree(node* a)
{
int i;
if (a!=NULL)
{
cout << "NUMBER:" << a->number << endl ;
cout << "FAMILIJAAA:" << a->soname << endl;
for (i=1;i<=a->pnumb;i++)
{
cout << "\n" << a->narush[i] << "- " << a->shtraf[i] <<endl;
}
cout << endl;
print_tree(a->left);
print_tree(a->right);
}
}



int main()
{
node *a=NULL, *b=NULL;
FILE *inp, *out;
if((inp=fopen("D:\\inp3.txt","r"))==NULL)
{cout<<"Oshibka faila"<<endl; return(1);}
if((out=fopen("D:\\out.txt","w"))==NULL)
{cout<<"Oshibka faila"<<endl; return(1);}
const dl=75;
char s[dl];
while(fgets(s,dl,inp))
{
a=add_tree(a,s);
}
print_tree(a);
fclose(inp);



node *poisk;
int t,i, opl, inn;
cout <<"hotite oplatit' shtraf? if yes najmite 1, if not najmite 2"<<endl;
cin>>t;
if (t==2) cout<<"ne hotite, kak hotite"<<endl;
if(t==1)
{
cout <<"Vvedite nomer masini"<<endl;
cin>>inn;
poisk=find_tree (a, inn);
if (poisk==NULL)
{
cout <<"takoj mashini net v spiske narushitelej"<<endl;
}else{
PrintNode(poisk);
cout<<"Vvedite summy dla oplati"<<endl;
cin>>opl;
int summa=0;
for (i=1; i<=poisk->pnumb; i++)
{
cout<<poisk->shtraf[i] <<endl;
summa=summa+poisk->shtraf[i];
}

if (summa>opl) cout <<"nedostatochno deneg dla pogashenia shtrafa"<<endl;
if (summa<= opl)
{
cout <<"shtraf oplachen"<<endl;
del_tree (a,a->number);
}
}
}
cout <<"hotite polychit' informacij o narusheniah, if yes najmite 1, if not najmite 2"<<endl;
cin>>t;
poisk=NULL;

if (t==2) cout<<"ne hotite, kak hotite"<<endl;
if (t==1)
{
cout <<"Vvedite nomer masini"<<endl;
cin>>inn;
poisk=find_tree (a, inn);
if (poisk==NULL)
{
cout <<"takoj mashini net v spiske narushitelej"<<endl;
}else{
// PrintNode(poisk);
fprintf(out,"%d",poisk->number);
fprintf(out,"%s","\n");
// strcpy(word,poisk->soname);
fprintf(out,"%s",poisk->soname);
fprintf(out,"%s","\n");
for (i=1; i<=poisk->pnumb; i++)
{
fprintf(out,"%s","\t");
fprintf(out,"%s",poisk->narush[i]);
fprintf(out,"%s","-");
fprintf(out,"%d",poisk->shtraf[i]);
fprintf(out,"%s","\n");
}
}
}
fclose(out);
return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2009, 12:13
Привет! Вот еще темы с ответами:

Работа с текстовыми файлами - C++
3)Разработать программу, которая выполняет следующие действия: создает входной поток для построчного чтения из внешнего файла и выходной...

Работа с текстовыми файлами - C++
Прошу помощи! Необходимо что б программа считывала данные из обычного текстового файла и записывала в нужные переменные. Текстовый файл...

Задача с текстовыми файлами - C++
Помогите, пожалуйста, с задачей: В текстовом файле t записаны буквы латинского алфавита и цифры. Занести в текстовый файл h из...

Работа с текстовыми файлами - C++
Создать программу, которая обрабатывает файл в последовательном режиме. Данные надо считывать по одному символу (нельзя считывать сразу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.