Скопировал из учебника исходник задачи:
Написать программу учета нарушений ПДД. Для каждой автомашины необходимо хранить в базе список нарушений, для каждого нарушения фиксируется дата, время, вид нарушения и размер штрафа. При оплате всех штрафов автомашина удаляется из базы.
При компиляции выдается о-о-очень много ошибок, помогите разобраться , в чем дело!
Код:
#include <fstream.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <iomanip.h>
const char *filename = "dbase";
enum Action {INSERT, DEL, INFO};
enum Dir {LEFT, RIGHT};
const int l_time = 20, l_type = 40, l_number = 12;
struct Fine {
char time[l_time];
char type[l_type];
float price;
Fine *next;
};
struct Node {
char number[l_number];
Fine *beg;
Node *left;
Node *right;
};
struct Data {
char number[l_number];
char time[l_time];
char type[l_type];
float price;
};
Node *descent (Node *p);
Node *first (Data data);
Data input (Action action);
int menu ();
void print_node (const Node &node);
void print_dbase (Node *p);
Node *read_dbase (char *filename);
int read_fine (ifstream f, Data &data);
int remove_fine (Node *p, const Data &data);
void remove_fines (Node *p);
Node *remove_node (Node *root, Node *p, Node *parent, Dir dir);
Node remove_tree (Node *p);
Node search_insert (Node *root, const Data &data, Action action,
Dir &dir, Node *&parent)
void write_dbase (ofstream f, const Node* root);
void write_node (ofstream f, const Node &node);
int main ()
{
Node *p, *parent;
Node *root = read_dbase(filename);
ofstream fout;
Dir dir;
while (true)
{
switch (menu())
{
case 1:
if (!root) root = first (input (INSERT));
else search_insert (root, input (INSERT), INSERT, dir, parent);
break;
case 2:
if (!root)
{
cout << "Baza pusta" << endl;break;
}
Data data = input (DEL);
if (!(p = search_insert (root, data, DEL, dir, parent)))
cout << "Svedenia ob avtomobile otsutstvujut" << endl;
else
if (remove_fine (p, data) == 2)
root = remove_node (root, p, parent, dir);
break;
case 3:
if (!root) {cout << "Baza pusta" << endl; break; }
if (!(p = search_insert (root, input (INFO), INFO, dir, parent)))
cout << "Svedenia otsutstvujut" << endl;
else print_node (*p);
break;
case 4:
fout.open (filename);
if (!fout.is_open())
{
cout << "Oshibka otkriria faila" << filename << endl; return 1;
}
write_dbase (fout.root);
return 0;
case 5:
print_dbase (root);
break;
default:
cout << "Nado vvodit' chislo ot 1 do 4" << endl;
break;
}
}
return 0;
}
Node *descent (Node *p) {
Node *prev, *y = p -> right;
if (!y -> left) y -> left = p -> left;
else {
do {prev = y; y = y -> left; }
while (y -> left);
y -> left = p -> left;
prev -> left = y -> right;
y -> right = p -> right;
}
return y;
}
Node *first (Data data)
{
Fine *beg = new Fine;
strncpy (beg -> time, data.time, l_time);
strncpy (beg - > type, data.type, l_type);
beg -> price = data.price;
beg -> next = 0;
Node *root = new Node;
strncpy (root -> number, data.number, l_number);
root -> beg = beg;
root -> left = root -> right = 0;
return root;
}
Data input(Action action)
{
Data data;
char buf[10], temp1[3], temp2[3];
int day, month, hour, min;
cout << "Vvedite nomer a/m" << endl;
cin.getline (data.number, l_number);
if (action == INFO) return data;
do
{
cout << "Vvedite datu narushenia v formate DD.MM.GG:" << endl;
cin >> buf;
strncpy (temp1, buf, 2);
strncpy (temp2, &buf[3], 2);
day = atoi (temp1);
month = atoi (temp2);
}
while (!(day > 0 && day < 32 && month > 0 && month < 13));
strcpy (data.time, buf);
strcat (data,time, " ");
do
{
cout << "Vvedite vremya narushenia v formate CHCH:MM" << endl;
cin >> buf;
strncpy (temp1, buf, 2);
strncpy (temp2, &buf[3], 2);
hour = atoi (temp1);
min = atoi (temp2);
}
while (!(hour >= 0 && hour < 24 && min >= 0 && min < 60));
strcat(data.time, buf);
cin.get();
if (action == DEL) return data;
cout <<"Bbedite tip narushenia" << endl;
cin.getline (data.type, l_type);
do
{
cout << "Vvedite razmer shtrafa" << endl;
cin >> buf;
}
while (!(data.price = (float)atof(buf)));
cin.get();
return data;
}