[Неактуальная тема] Написать программу, которая выполняет следующи

Тема в разделе "C/C++/C#", создана пользователем INFINITIFXXX, 21 сен 2011.

  1. INFINITIFXXX

    INFINITIFXXX Гость

    Репутация:
    0
    4.20 Дана запись с именем ORDER, содержащая следующие поля:
    • Расчетный счет плательщика;
    • Расчетный счет получателя;
    • Перечисляемая сумма в руб.

    Написать программу, которая выполняет следующие действия:
    • Ввод с клавиатуры данных из 8 элементов типа ORDER, и занесение их в файл данных;
    • Чтение данных из файла и вывод их на экран;
    • вывод на экран информации о сумме, снятой с расчетного счета плательщика, введенного с клавиатуры (если таких нет – вывести об этом сообщение).
    • Список должен быть упорядочен по расчетным счетам плательщиков.
     
  2. rrrFer

    rrrFer Гость

    Репутация:
    0
    сами пробовали решить?
     
  3. INFINITIFXXX

    INFINITIFXXX Гость

    Репутация:
    0
    да. Вот есть код для структуры. Надо переделать его для записи...

    Код:
    #include <cstdlib>
    #include <ctime>
    #include <iostream>
    #include <iomanip>
    #include <algorithm>
    #include <string>
    
    struct Order {
    std::string debet;
    std::string credit;
    float sum;
    };
    
    std::ostream &operator<<(std::ostream &stream, const Order &order) {
    std::cout << "From: " << order.debet << std::endl 
    << "To: " << order.credit << std::endl
    << "Sum: " << std::setprecision(2) << std::fixed << order.sum
    << " rub." << std::endl;
    return stream;
    }
    
    Order RandomOrder() {
    Order result;
    for (int i = 0; i < 20; ++i) {
    result.debet += rand() % 10 + '0';
    result.credit += rand() % 10 + '0';
    }
    result.sum = (rand() % 100000) / 100.0;
    return result;
    }
    
    bool OrderByDebet(const Order &a, const Order &b) {
    return (a.debet < b.debet);
    }
    
    Order *FindFirstByDebet(Order *begin, Order *end,
    const std::string &debet) {
    for (Order *result = begin; result != end; ++result)
    if (result->debet == debet)
    return result;
    return NULL;
    }
    
    float AccumulateSumByDebet(Order *begin, Order *end,
    const std::string &debet) {
    float result = 0;
    for (Order *current = begin; current != end; ++current)
    if (current->debet == debet)
    result += current->sum;
    return result;
    }
    
    int main(int argc, char *argv[]) {
    srand(time(NULL));
    Order orders[8];
    for (int i = 0; i < 8; ++i)
    orders[i] = RandomOrder();
    std::sort(orders, orders+8, OrderByDebet);
    for (int i = 0; i < 8; ++i)
    std::cout << "#" << i << " " << orders[i] << std::endl;
    
    std::string debet = orders[rand() % 8].debet;
    // вместо предыдущей строки ввод:
    // std::string debet;
    // std::cout << "Enter debetor: ";
    // std::cin >> debet;
    
    std::cout << "Search for debet: " << debet << std::endl;
    
    Order *order = FindFirstByDebet(orders, orders+8, debet);
    if (order != NULL) {
    float result = AccumulateSumByDebet(orders, orders+8, debet);
    std::cout << "Debetor " << debet
    << " spent " << result << " rub." << std::endl;
    } else {
    std::cout << "No such debetor." << std::endl;
    }
    
    return 0;
    }
     
  4. rrrFer

    rrrFer Гость

    Репутация:
    0
    дак вы скажите что конкретно неработает. А-то мне лень запускать ваш код и искать в чем он не соответствует заданию )
     
  5. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    INFINITIFXXX, поясните пожалуйста в деталях, что означает следующая запись:
    Код:
    result.debet += rand() % 10 + '0';
    Это же Вы писали, если я все правильно понимаю...
     
  6. rrrFer

    rrrFer Гость

    Репутация:
    0
    lazybiz
    Вам надо чтобы именно INFINITIFXXX пояснил(а)?
    а-то ИМХО вполне нормальный фрагмент, не
    Код:
    result.debet += rand() % 10 + 48;
    и-то хорошо
     
  7. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    r04, просто у меня закрались подозрения что автор темы не является автором данного кода.
     
  8. rrrFer

    rrrFer Гость

    Репутация:
    0
    lazybiz
    Ну тогда можно было более интересные фрагменты поискать, мне вот этот больше нравится:
    Код:
    std::string debet = orders[rand() % 8].debet;
    :)
     

Поделиться этой страницей