Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2020, 19:23   #1
Kyouma
Новичок
Джуниор
 
Регистрация: 06.06.2020
Сообщений: 1
Вопрос C++ Работа с файлами прямого доступа. Дописать/переделать код

Есть следующая задача:

Для решения задачи необходимо организовать ввод данных с клавиатуры, их запись в файл прямого доступа с последующей возможностью чтения этих данных (возможно при повторном запуске программы)

Некоторое обслуживающее предприятие хранит сведения о заказах: наименование заказа и время(часы, минуты, секунды) его поступления. Вывести заказы, которые произошли с 15ч 10мин 35сек до 18ч 50мин 10 сек.

______________________________ ________

У меня есть код, но проблема в том, что в нём производится ввод/вывод СТРОКАМИ, а по заданию нужно реализовать ввод/вывод БЛОКАМИ байт. (как я понял с помощью функций read и write) Буду очень рад, если поможете переделать программу:


Код:
#include <stdio.h>
#include <io.h>
#include <stdlib.h>
#include <iostream>
 
using namespace std;
 
struct Time
{
    int Hour;
    int Minuts;
    int Second;
};
 
struct Zakaz
{
    char Name[20];
    Time time;
};
void vvod_zakaz()
{
    int N;
    cout << " Enter the number of orders: ";
    cin >> N;
    Zakaz z[N];
    FILE *fp;
    if((fp=fopen("out.txt", "w")) == NULL)
        printf("Error open file!\n");
    for(int i = 0; i < N; i++)
    {
        printf(" Enter name: ");
        fscanf(stdin, "%s", z[i].Name);
        printf(" Enter time (hh:mm:ss): ");
        scanf("%d%*c%d%*c%d:", &z[i].time.Hour, &z[i].time.Minuts, &z[i].time.Second);
        fprintf(fp, "%s %02d:%02d:%02d\n", z[i].Name, z[i].time.Hour, z[i].time.Minuts, z[i].time.Second);
    }
    delete []z;
    fclose(fp);
    return;
}
void menu2()
{
    cout << "1. Out.txt\n";
    cout << "2. Produkts.txt\n";
    cout << "3. Exit\n";
}
void print_zakaz()
{
    FILE *fp;
    FILE *fp2;
    char c;
    do
    {
        menu2();
        cin >> c;
        switch(c)
        {
        case '1':
            Zakaz a[2];
            system("cls");
            if((fp=fopen("out.txt","r")) == NULL)
                printf(" Error open file!\n");
 
            for(int i = 0;i <2; i++)
            {
                fscanf(fp, "%s %d:%d%:%d", &a[i].Name, &a[i].time.Hour, &a[i].time.Minuts, &a[i].time.Second); // чтение из файла
                fprintf(stdout, "%s %02d:%02d:%02d\n", a[i].Name, a[i].time.Hour, a[i].time.Minuts, a[i].time.Second); // вывод на экран
            }
            fclose(fp);
            delete []a;
            break;
        case '2':
            Zakaz b[25];
            system("cls");
            if((fp2=fopen("produkts.txt","r")) == NULL)
                printf(" Error open file!\n");
            cout << " \t\tAll orders:\n";
            for(int i = 0; i < 25; i++)
            {
                fscanf(fp2, "%s %d:%d:%d", &b[i].Name, &b[i].time.Hour, &b[i].time.Minuts, &b[i].time.Second); // чтение из файла
                fprintf(stdout, "%s %02d:%02d:%02d\n", b[i].Name, b[i].time.Hour, b[i].time.Minuts, b[i].time.Second); // вывод на экран
            }
            cout << "--------------------------------------------------------------\n";
            cout << " \t\tAll orders in (15:10:35 - 18:50:10):\n";
            for(int i = 0; i < 25; i++)
            {
                unsigned long time[25];
                time[i] = b[i].time.Hour*3600+b[i].time.Minuts*60+b[i].time.Second;
                unsigned long time1 =15 * 3600 + 10 * 60 + 35;
                unsigned long time2 =18 * 3600 + 50 * 60 + 10;
                if(time[i] > time1 && time[i] < time2)
                {
                    fprintf(stdout, "%s %02d:%02d:%02d\n", b[i].Name, b[i].time.Hour, b[i].time.Minuts, b[i].time.Second); // вывод на экран
                }
            }
 
            fclose(fp2);
            delete []b;
            break;
 
        case '3': break;
        }
    }while(c != '3');
    return;
}
 
void menu()
{
    cout << "1. Creat\n";
    cout << "2. Show\n";
    cout << "3. Exit\n";
}
int main()
{
    char c;
 
    do
    {
        menu();
        cin >> c;
        switch(c)
        {
        case '1' : system("cls"); vvod_zakaz();break;
        case '2' : system("cls"); print_zakaz();break;
        case '3' : break;
        }
    }while(c != '3');
 
    return 0;
}

Последний раз редактировалось Kyouma; 06.06.2020 в 19:29.
Kyouma вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со стеком. Дописать и исправить ошибки. Кулибаба Петро C++ Builder 0 17.01.2013 11:58
Работа с файлами последовательного доступа СергейJ63 Паскаль, Turbo Pascal, PascalABC.NET 2 21.04.2011 13:20
работа с файломи прямого доступа st1mUA Помощь студентам 0 20.10.2009 01:23
Работа с правами доступа в NTFS sysyman Win Api 1 27.03.2009 15:02