#pragma hdrstop
#pragma argsused
#pragma hdrstop
#pragma argsused
# include <stdio.h> //?
# include <conio.h> //?
# include <stdlib.h> //?
#include <iostream>
#include <string>
#include <fstream>
#include <Windows.h>
using namespace std;
# define NT 4 //кол-во записей по-умолчанию в структуре
//int Fsosd(FILE * Ff, int N);
struct ztab
{
int TABN, month; //табельный номер, месяц
float STIME, SBJ, SOVER, SUD, VNR;
};
class Ffile
{
private:
int N; //кол-во записей
ztab tab;
//ztab buf; //структура иницилизация?
char FileName[80];
// char namefilebuf[80];
FILE* Ftab;
// FILE* Fbuf;//указатель на поток
float I_STIME, I_SBJ, I_SOVER, I_SUD, I_VNR; //итоги повременно, сдельно, сверхурочно, удержано, на руки
public:
Ffile(int Nf = NT); //конструтор класса
int Fsosd(); //создание файла
int Fread(); //чтение файла
int FObr(); //обработка
//int Fvedomost();
};
int main()
{
int n; //номер в меню
int pr, rp; //переменная для создания файла
SetConsoleCP(1251);
SetConsoleOutputCP(1251); // для кириллицы в консоли
Ffile x; //создаем объект класса x (вызывается конструктор)
while (1)
{
while (1)
{
system("cls");
cout << "Выберите действие: " << endl
<< "(1) Ввод данных" << endl
<< "(2) Вывод всего файла" << endl
<< "(3) Вывод ведомости по месяцу" << endl
<< "(4) Выход из программы" << endl
<< "Вы выбрали: ";
cin >> n;
if (n >= 1 && n <= 4)
break;
cout << "\nОшибка в номере!! Повторите ввод!" << endl;
system("pause"); //задержка консоли
}//конец внутреннего цикла while (1)
if (n == 4)
{
cout << "\n ПРОЩАЙТЕ!! " << endl;
break;
}
switch (n)
{
case 1:
pr = x.Fsosd();
if (pr == 0) cout << "Файл не создан!" << endl;
break;
case 2: pr = x.FObr();
system("pause"); //задержка консоли
if (pr == 0) {
cout << "Файл не открыт!" << endl;
cout << " Прощайте!" << endl;
system("pause"); //задержка консоли
}
break;
case 3:
pr = x.Fread();
// rp=x.Fvedomost();
system("pause"); //задержка консоли
if (pr == 0 && rp == 0) {
cout << "Файл не открыт!" << endl;
cout << " Прощайте!" << endl;
system("pause"); //задержка консоли
}
}// конец switch(n)
}//конец внешнего цикла while(1)
}
Ffile::Ffile(int Nf)
{
cout << "FileName=" << endl;
cin >> FileName;
//cout << "namefilebuf=" << endl;
//cin >> namefilebuf;
N = Nf;
}
int Ffile::Fsosd()
{
Ftab = fopen(FileName, "wb");
if (Ftab == NULL)
{
perror("Ошибка при открытии потока для файла ");
puts(FileName);
system("pause"); //задержка консоли
return 0;
}
cout << "УРА!! Поток открыт, начинайте ввод!!" << endl;
system("cls");
int i;
for (i = 0; i < N; i++)
{
cout << "Таб. номер = " << endl;
cin >> tab.TABN;
cout << "Месяц= " << endl;
cin >> tab.month ;
cout << "Повременная сумма = " << endl;
cin >> tab.STIME;
cout << "Сдельная сумма = " << endl;
cin >> tab.SBJ;
cout << "Сверхурочная сумма = " << endl;
cin >> tab.SOVER;
cout << "Удержано = " << endl;
cin >> tab.SUD;
tab.VNR = (tab.STIME+ tab.SBJ+ tab.SOVER) - tab.SUD;
fwrite(&tab, sizeof(tab), 1, Ftab);
}
fclose(Ftab);
cout << " Поток закрыт. Файл сохранили! Прощайте" << endl;
system("pause"); //задержка консоли
return 1;
}
int Ffile::Fread()
{
Ftab = fopen(FileName, "rb");
puts(FileName);
if (Ftab == NULL)
{
perror("Ошибка при открытии потока для файла FileName ");
puts(FileName);
system("pause"); //задержка консоли
return 0;
}
//ztab buf = new ztab;
//open new file
FILE* Fbuf;
char namefilebuf[80];
cout << "namefilebuf=" << endl;
cin >> namefilebuf;
ztab buf;
int nMes;
int nMaxMes = 12;
// int _actions; //действия в меню
I_STIME = 0;
I_SBJ = 0;
I_SOVER = 0;
I_SUD = 0;
I_VNR = 0;
float bufmax = 0;
int maxTBN;
Fbuf = fopen(namefilebuf, "wb+");
puts(namefilebuf);
if (Fbuf == NULL)
{
perror("Ошибка при открытии потока для файла FileName ");
puts(FileName);
system("pause"); //задержка консоли
return 0;
}
cout << "Введите номер нужного месяца (от 1 до " << nMaxMes << "): ";
cin >> nMes;
if (nMes >= 0 && nMes <= nMaxMes) { //проверка правильнов введенного номера
int q = 0;
for (int i = 0; i <= N; i++) { //перезаписываем данные из d в buf , ИТАК ходим по всем элементам d
if (tab.month == nMes) { //если это тот элемент, то мы его сохраняем в buf
buf=tab; //ПРОБЛЕМА СКОРЕЕ ВСЕГО ТУТ
q++; //изначально q = 0
fwrite(&buf, sizeof(buf), 1, Fbuf);
}
}
for (int z = 0; z < q; z++) {
I_STIME += buf.STIME;
I_SBJ += buf.SBJ;
I_SOVER += buf.SOVER;
I_SUD += buf.SUD;
I_VNR += buf.VNR;
}
//поиск максимальных сверхурочных по месяцу
for (int j = 0; j <= q; j++)
{
if (buf.SOVER > bufmax)
bufmax = buf.SOVER;
maxTBN = buf.TABN;
}
if (Ftab == NULL)
{
perror("Ошибка при открытии потока для файла ");
puts(FileName);
system("pause"); //задержка консоли
return 0;
}
cout << "Расчетная ведомоcть за " << nMes << "месяц.\n";
cout << "Таб. ном.|" << "С. поврем.|" << "С. сдельн.|" << "Сверхур.|" << "С.Удержаний|" << "С. к выдаче" << endl;
while (fread(&buf, sizeof(buf), 1, Fbuf))//чтение очередной эаписи файла
{ // сюда мы попадем, если не прочтем 0 байт(если файл не исчерпан!!!)
cout << buf.TABN << "| " << buf.STIME << "| " << buf.SBJ << "| " << buf.SOVER << "| " << buf.SUD << "| " << buf.VNR << endl;
cout << "_______________________________________________________________\n";
}
system("cls");
}
fclose(Fbuf);
fclose(Ftab);
}
/*
int Ffile::Fvedomost(){
Fbuf = fopen(namefilebuf, "rb");
puts(namefilebuf);
if (Ftab == NULL)
{ perror ("Ошибка при открытии потока для файла FileName ");
puts(namefilebuf);
system("pause");
return 0;
}
cout << "Расчетная ведомоcть за " << nMes << "месяц.\n";
cout << "Таб. ном.|" << "С. поврем.|" << "С. сдельн.|" << "Сверхур.|" << "С.Удержаний|" << "С. к выдаче" << endl;
while (fread(&buf, sizeof(buf), 1, Fbuf))//чтение очередной эаписи файла
{ // сюда мы попадем, если не прочтем 0 байт(если файл не исчерпан!!!)
cout << buf.TABN << "| " << buf.STIME << "| " << buf.SBJ << "| " << buf.SOVER << "| " << buf.SUD << "| " << buf.VNR << endl;
cout << "_______________________________________________________________\n";
}
fclose(Fbuf);
return 1;
} */
int Ffile::FObr()
{ // puts(FileName);
Ftab = fopen (FileName, "rb");
puts(FileName);
if (Ftab == NULL)
{ perror ("Ошибка при открытии потока для файла FileName ");
puts(FileName);
system("pause");
return 0;
}
cout << "\n\n записаный файл \n "<< endl;
cout << "Таб. ном.|" << "С. поврем.|" << "С. сдельн.|" << "Сверхур.|" << "С.Удержаний|" << "С. к выдаче" << endl;
printf("=================================================\n");
while (fread(&tab, sizeof(tab), 1, Ftab))//чтение очередной эаписи файла
{ // сюда мы попадем, если не прочтем 0 байт(если файл не исчерпан!!!)
cout << tab.TABN << "| " << tab.STIME << "| " << tab.SBJ << "| " << tab.SOVER << "| " << tab.SUD << "| " << tab.VNR << endl;
cout << "_______________________________________________________________\n";
}
fclose (Ftab);
return 1;
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.