I
ilya1989
Всем доброго времени суток!Столкнулся с проблемой компиляции кода на разных компиляторах Borland C++ 3.1 и Borland C++ 5.02.
В Borland C++ 3.1 код работает прекрасно,но есть необходимость запускать код на компиляцию в Borland C++ 5.02.
Вся беда в том,что при запуске кода в Borland C++ 5.02 курсор зависает на главном меню,бегает сверху вниз(дисплея) и ничего при этом нельзя сделать(выбрать нужный пункт меню).Подскажите пожалуйста,в чем может быть загвоздка?
За ранее очень благодарен за помощь!
C++:
#include <stdlib>
#include <iostream>
#include <iomanip>
#include <string.>
#include <fstream>
#include <conio>
#include <io>
using namespace std
#define fio 15
#define marka 11
#define time 8
#define tub 4
ofstream report;
class Driver
{
public:
char FIO[fio];
char Marka_Avto[marka];
char tub_num[tub];
char Time_Start[time];
char Time_Finish[time];
int milage;
double fuel_consumption;
};
void sozdanie(char );
void prosmotr();
void tabl();
void endtabl();
void poisk();
void del();
//1.Ввод с клавиатуры
istream &operator>>(istream &istr,Driver &drv)
{
cout<<"Введите ФИО ВОДИТЕЛЯ: ";
istr.ignore();
istr.get(drv.FIO,fio,'\n');
cout<<"Введите МАРКУ АВТОМОБИЛЯ :";
istr.ignore();
istr.get(drv.Marka_Avto,marka,'\n');
cout<<"Введите табельный номер водителя :";
istr.ignore();
istr.get(drv.tub_num,tub,'\n');
cout<<"Введите время выхода(начала) на смену:";
istr.ignore();
istr.get(drv.Time_Start,time,'\n');
cout<<"Введите время окончания на смену:";
istr.ignore();
istr.get(drv.Time_Finish,time,'\n');
cout<<"Введите общий пробег спидометра(киллометраж) :";
istr.ignore();
istr>>drv.milage;
return istr;
}
//2.Запись в файл
ofstream &operator<<(ofstream &write,Driver &drv)
{
write<<drv.FIO<<"\n";
write<<drv.Marka_Avto<<"\n";
write<<drv.tub_num<<"\n";
write<<drv.Time_Start<<"\n";
write<<drv.Time_Finish<<"\n";
write<<drv.milage<<"\n";
write<<drv.fuel_consumption<<"\n";
return write;
}
//3.Вывод на дисплей
ostream &operator<<(ostream &out,Driver &vod)
{
out.setf(ios::left);
out<<"|"<<setw(14)<<vod.FIO<<"|"<<setw(10)<<vod.Marka_Avto<<"|"<<setw(7)
<<vod.tub_num<<"|"<<setw(9)<<vod.Time_Start<<"|"<<setw(9)<<vod.Time_Finish
<<"|"<<setw(7)<<vod.fuel_consumption<<"|"<<setw(8)<<vod.milage<<"|"<<endl;
report.setf(ios::left);
report<<"|"<<setw(14)<<vod.FIO<<"|"<<setw(10)<<vod.Marka_Avto<<"|"<<setw(7)
<<vod.tub_num<<"|"<<setw(9)<<vod.Time_Start<<"|"<<setw(9)<<vod.Time_Finish
<<"|"<<setw(7)<<vod.fuel_consumption<<"|"<<setw(8)<<vod.milage<<"|"<<endl;
return out;
}
//4.Чтение из файла
ifstream &operator>>(ifstream &read, Driver &shofer)
{
read.getline(shofer.FIO,15,'\n');
read.getline(shofer.Marka_Avto,11,'\n');
read.getline(shofer.tub_num,4,'\n');
read.seekg(1L,ios::cur);
read.getline(shofer.Time_Start,8,'\n');
read.getline(shofer.Time_Finish,8,'\n');
read>>shofer.milage;
read>>shofer.fuel_consumption;
read.seekg(1L,ios::cur);
return read;
}
void sozdanie(char a)
{
clrscr();
ofstream vvod;
cout<<"ВВОД ДАННЫХ О ВОДИТЕЛЕ АТП \n\n";
Driver Voditel;
char d;
if(a=='1')
{
vvod.open("Drivers.txt",ios::binary);
report<<"СОЗДАНИЕ НОВОГО ФАЙЛА ДЛЯ ЗАПИСИ\n\n";
}
if(a=='2')
{
vvod.open("Drivers.txt",ios::app|ios::binary);
report<<"ДОБАВЛЕНИЕ ИНФОРМАЦИИ В ФАЙЛ\n\n";
}
if(!vvod)
{
cerr<<"Don`t open file Drivers.txt for writing!";
report<<"НЕ УДАЛОСЬ ОТКРЫТЬ ФАЙЛ ДЛЯ ЗАПИСИ!\n";
}
do
{
cin>>Voditel;
if(Voditel.milage>0)
{
Voditel.fuel_consumption=0.4*Voditel.milage;
}
else if(Voditel.milage==0)
{
Voditel.fuel_consumption=0;
}
vvod<<Voditel;
cout<<"Продолжить ввод(Y\N или Д\Н)?: ";
cin.ignore();
cin.get(d);
}
while(d=='Y'||d=='y'||d=='Д'||d=='д');
clrscr();
vvod.close();
}
void tabl()
{
cout<<"=======================================================================|\n";
cout<<"| ФИО | Марка |Табельн|Вр.нач. | Время |Расход |Пробег |\n";
cout<<"| |автомобиля| номер | смены |оконч.см.|Топлива| (км) |\n";
cout<<"=======================================================================|\n";
cout<<"| |\n";
report<<"=======================================================================|\n";
report<<"| ФИО | Марка |Табельн|Вр.нач. | Время |Расход |Пробег |\n";
report<<"| |автомобиля| номер | смены |оконч.см.|Топлива| (км) |\n";
report<<"=======================================================================|\n";
report<<"| |\n";
return;
}
void endtabl()
{
cout<<"|______________________________________________________________________|\n";
report<<"|______________________________________________________________________|\n";
return;
}
void prosmotr()
{
ifstream reading("Drivers.txt",ios::binary);
if(!reading)
{
cerr<<"Don`t opening of file Drivers.txt for reading\n";
report<<"НЕ УДАЛОСЬ ОТКРЫТЬ ФАЙЛ DRIVERS.TXT ДЛЯ ЧТЕНИЯ\n";
return;
}
clrscr();
gotoxy(30,1);
Driver bcd;
cout<<"Просмотр всех записей базы данных водителей АТП\n";
report<<"ПРОСМОТР ВСЕХ ЗАПИСЕЙ БАЗЫ ДАННЫХ ВОДИТЕЛЕЙ АТП\n\n";
tabl();
while(reading)
{
reading>>bcd;
if(strlen(bcd.FIO)<=0)
break;
cout<<bcd;
}
reading.close();
endtabl();
cout<<"Для продолжения нажмите любую клавишу\n";
cin.ignore();
cin.get();
clrscr();
}
void poisk()
{
Driver a;
int kol;
char v;
char FIO_S[fio];
char TUB_S[tub];
char MARKA[marka];
ifstream find("Drivers.txt",ios::binary);
if(!find)
{
cout<<"Error reading of file Drivers.txt\n";
cerr<<"ERROR READING OF FILE DRIVERS.TXT\n";
return;
}
while(1)
{
clrscr();
gotoxy(25,7);
cout<<"=====================================\n";
gotoxy(25,8);
cout<<"|| ||\n";
gotoxy(25,8);
cout<<"|| ПОИСК ВОДИТЕЛЯ ПО СЛ.АТРИБУТАМ|| \n";
gotoxy(25,9);
cout<<"|| 1.ПО ФИО ||\n";
gotoxy(25,10);
cout<<"|| 2.ПО МАРКЕ АВТОМОБИЛЯ ||\n";
gotoxy(25,11);
cout<<"|| 3.ПО ТАБЕЛЬНОМУ НОМЕРУ ||\n";
gotoxy(25,12);
cout<<"|| 4.ВЫХОД В ГЛ.МЕНЮ ||\n";
gotoxy(25,13);
cout<<"|| ||\n";
gotoxy(25,14);
cout<<"======================================\n";
gotoxy(25,18);
cout<<"Вы выбрали: ";
cin.seekg(0,ios::end);
cin.get(v);
clrscr();
cout<<"Поиск информации\n";
report<<"\n\nПОИСК ИНФОРМАЦИИ\n";
clrscr();
switch(v)
{
case'1':
cout<<"Введите ФИО водителя: ";
cin.seekg(0,ios::end);
cin.getline(FIO_S,fio,'\n');
report<<"ФИО ВОДИТЕЛЯ :"<<FIO_S<<endl;
break;
case '2':
cout<<"Введите марку автомобиля водителя: ";
cin.seekg(0,ios::end);
cin.getline(MARKA,marka,'\n');
report<<"МАРКА АВТОМОБИЛЯ ВОДИТЕЛЯ :"<<MARKA<<endl;
break;
case '3':
cout<<"Введите табельный номер водителя: ";
cin.seekg(0,ios::end);
cin.getline(TUB_S,tub,'\n');
report<<"ТАБЕЛЬНЫЙ НОМЕР ВОДИТЕЛЯ :"<<TUB_S<<endl;
break;
case '4':
return;
}
tabl();
while(!find.eof())
{
find>>a;
if((v=='1'&&!strcmp(FIO_S,a.FIO))||
(v=='2'&&!strcmp(MARKA,a.Marka_Avto))||
(v=='3'&&!strcmp(TUB_S,a.tub_num)))
{
kol++;
cout<<a;
}
}
if(kol==0)
cout<<"Найдено 0 записей в БД по введенным данным!\n";
report<<"НАЙДЕНО 0 ЗАПИСЕЙ В БД ПО ВВЕДЕННЫМ ДАННЫМ!\n";
find.close();
endtabl();
getch();
clrscr();
return;
}
}
void del()
{
ofstream temp("Temp.txt",ios::binary);
ifstream read("Drivers.txt",ios::binary);
char FIO_DEL[fio];
int kol=0;
Driver z;
clrscr();
cout<<"Удаление водителя по ФИО \n";
report<<"УДАЛЕНИЕ ВОДИТЕЛЯ ПО ФИО \n";
cout<<"Введите ФИО водителя для удаления :";
cin.seekg(0,ios::end);
cin.getline(FIO_DEL,fio,'\n');
report<<"\nФИО ВОДИТЕЛЯ ДЛЯ УДАЛЕНИЯ :"<<FIO_DEL<<endl;
if(!temp)
{
cerr<<"Ошибка открытия файла для удаления информации!\n";
report<<"ОШИБКА ОТКРЫТИЯ ФАЙЛА ДЛЯ УДАЛЕНИЯ ИНФОРМАЦИИ\n\n";
exit(1);
}
read.seekg(0,ios::beg);
if(!temp)
{
cerr<<"Ошибка открытия файла для записи\n";
report<<"ОШИБКА ОТКРЫТИЯ ФАЙЛА ДЛЯ ЗАПИСИ\n\n";
exit(1);
}
temp.seekp(0,ios::beg);
while(!read.eof())
{
read>>z;
if(!strlen(z.FIO))
{
break;
}
if(!strcmp(FIO_DEL,z.FIO))
{
kol=1;
cout<<"\nИнформация удалена\n";
report<<"ИНФОРМАЦИЯ УДАЛЕНА\n";
cout<<"Продолжение-Enter";
cin.seekg(0,ios::end);
cin.get();
}
else
temp<<z;
}
read.close();
temp.close();
if(kol==0)
{
cout<<"Нет информации для удаления\n";
report<<"НЕТ ИНФОРМАЦИИ ДЛЯ УДАЛЕНИЯ\n\n";
}
else
{
remove("Drivers.txt");
rename("Temp.txt","Drivers.txt");
return;
}
}
void main()
{
report.open("Report.txt");
if(!report)
{
cout<<"Не удается открыть файл для записи протокола!";
return;
}
char a;
gotoxy(30,3);
cout<<"БАЗА ДАННЫХ ВОДИТЕЛЕЙ АТП\n";
while(1)
{
gotoxy(19,6);
cout<<"||--------------------------------------------||\n";
gotoxy(19,7);
cout<<"||1.Создание новой базы данных ||\n";
gotoxy(19,8);
cout<<"||2.Добавление записи в базу данных ||\n";
gotoxy(19,9);
cout<<"||3.Вывод всех записей из БД на дисплей ||\n";
gotoxy(19,10);
cout<<"||4.Поиск водителя по ФИО и ТАБ.НОМЕРУ ||\n";
gotoxy(19,11);
cout<<"||5.Удаление записи из БД ||\n";
gotoxy(19,12);
cout<<"||6.Выход ||\n";
gotoxy(19,13);
cout<<"||____________________________________________||\n";
gotoxy(19,14);
cin.seekg(0,ios::end);
cout<<"Вы ввели: \n";
gotoxy(19,15);
cin.get(a);
switch(a)
{
case '1':
case '2':
sozdanie(a);
break;
case '3':
prosmotr();
break;
case '4':
poisk();
break;
case '5':
del();
break;
case '6':
report.close();
return;
default:
cout<<"Диапазон ввода от 1 до 4!\n";
cin.seekg(0,ios::end);
cin.get();
}
}
}
Вся беда в том,что при запуске кода в Borland C++ 5.02 курсор зависает на главном меню,бегает сверху вниз(дисплея) и ничего при этом нельзя сделать(выбрать нужный пункт меню).Подскажите пожалуйста,в чем может быть загвоздка?
За ранее очень благодарен за помощь!