Форум программистов, компьютерный форум CyberForum.ru

Нужно оптимизировать готовый код, чтобы не было стыдно показать - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Builder Поиск файлов по маске. Не видит TSearchRec http://www.cyberforum.ru/cpp-beginners/thread654250.html
Задание: необходимо создать папку, в которой 10 файлов (*.txt); организовать поиск файлов по маске. Что имею: #include <stdio.h> #include <iostream.h> #include <string.h> #include <fstream.h> #include <direct.h> //так как dir.h не пошла под NetBeans void FindFull(string dir, string mask) {
C++ Функция scanf() //--------------------------------------------------------------------------- #include <vcl.h> #include <stdio.h> #include <conio.h> #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused http://www.cyberforum.ru/cpp-beginners/thread654234.html
Определить, предшествует ли одна дата другой C++
Переменной t присвоить значение true , если дата m,d,y предшествует дате m1,d1,y1, иначе t=false. (m -месяц d-день y-год ). Думал что нужно вводить две даты, а получается что нужно ввести дату m,d,y и отнять 1 день и вывести получившиюся дату. Помогите кто может. P.S. использовать массивы нельзя. И нужно получается делать проверку на кол-во дней в месяце, високосный ли год и т.п. P.S.S....
Посоветуйте книги по С++ для начинающих C++
Посоветуйте книги по С++ для начинающих.
C++ "Обработка файлов и строк" http://www.cyberforum.ru/cpp-beginners/thread654207.html
Используя средства визуального проектирования (компонент Memo), организовать работу с файлами: 1. Подсчитать количество сдвоенных символов “hh”,”ff” и”gg” в тек¬сте размещенном в текстовом файле. Результат поместить во второй файл, например, в виде: “hh” - 3; “ff” -5; “gg” -1.
C++ Определение класса, описывающего комплексное число. Перегрузка для него бинарного оператора "*" 1. Определить класс, описывающий комплексное число. Для класса перегрузить бинарный оператор *. Написать программу, в которой используется перегруженный оператор. подробнее

Показать сообщение отдельно
DraikoN
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 14

Нужно оптимизировать готовый код, чтобы не было стыдно показать - C++

19.09.2012, 01:28. Просмотров 1067. Ответов 9
Метки (Все метки)

Мне дали сделать задачку, чтобы проверить мои знания в ООП (я только 2 месяца назад начал изучать С++).
И так, задача:
Определить класс (или структуру данных при использовании процедурного подхода), описывающий покупку одного и того же штучного товара по одной и той же цене (в рублях) в течение одного месяца и содержащий сведения о дне покупки и количестве приобретенных единиц.
Допускаются еще три варианта покупок:
1. со скидкой, задаваемой процентом от стоимости;
2. со скидкой в цене (например, цена товара 5000 руб., скидка 300 руб.);
3. с надбавкой за транспортные расходы на доставку товара.
Создать консольное приложение, в котором последовательно выполнить следующие задания:
– определить набор покупок различного вида (не менее 10);
– вывести на консоль в табличном виде (можно без границ) набор покупок (полный состав атрибутов);
– вычислить и вывести стоимость всех покупок;
– отсортировать покупки по возрастанию дня покупки и вывести их на консоль;
– определить, была ли покупка в десятый день месяца.

Требования:
– Использовать объектно-ориентированный подход для описания покупок.
– Массив или коллекцию покупок инициализировать в коде с помощью конструктора или метода. Как следствие, не использовать внешние источники данных: консоль (т.е. ввод с клавиатуры), файлы, СУБД, XML и т.п.
– Приложение должно быть консольным. Не использовать графический интерфейс! Таким образом, приложение ничего не должно вводить, а только выводить результаты на консоль.

Предпочтения по выбору:
– языка программирования: 1) Java; 2) C++; 3) другой ООП язык.
– реализации сортировки и поиска: 1) интерфейс внешних библиотек; 2) собственный код.
Я написал программу, и теперь прошу Вас проверить ее на "идусость" и подсказать, где можно уменьшить код, где что поменять, чтобы программа выгладила красиво. И мне нужно добавить больше ООП.

собственно исходный код ниже:
Заголовочный файл "shopping_list.h"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef SHOPPING_LIST_H_
#define SHOPPING_LIST_H_
namespace SHOPLIST
{
    class ShoppingList
    {
    private:
        static const int price = 5000;                      //цена товара
        int dayOfMonth;                                     //день покупки
        int count;
        int discountPercent;                                //скидка задаваемая процентом от стоимости
        int discountPrice;                                  //скидка в цене
        int bonusAllowance;                                 //надбавка за транспортные расходы
    public:
        ShoppingList();                                     //конструктор по умолчанию
        ShoppingList(int day, int discPer, int discPr, int bonus, int cnt); //конструктор
        ~ShoppingList();                                    //диструктор
        int returnDay() const {return dayOfMonth;}          //возвращает значение дня покупки
        int returnPrice() const;                            //возвращает окончательную цену за вычетом процентов и тп
        friend void sortingShList(ShoppingList * t);        //сортировка по возрастанию
        friend void ShowDays(ShoppingList * t);
        friend std::ostream & operator<< (std::ostream & os, const ShoppingList & t);   
    };
    long int amountOfPurchases(ShoppingList * t);
    void Swap(ShoppingList * Arr, int i);
    void checkDate(ShoppingList * t, int day = 10);
    void ShowDays(ShoppingList * t);
    void exitTime(void);                                    //чтобы программа сама закрывалась
}
#endif
файл с функциями "shopping_list.cpp"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream>
#include <algorithm>
#include <ctime>
#include "shopping_list.h"
namespace SHOPLIST
{
    ShoppingList::ShoppingList()
    {
        dayOfMonth = discountPercent = discountPrice = bonusAllowance = 0;
    }
    ShoppingList::ShoppingList(int day, int discPer, int discPr, int bonusAll, int cnt)
    {
        dayOfMonth = day;
        count = cnt;
        discountPercent = discPer;                              
        discountPrice = discPr;                             
        bonusAllowance = bonusAll;
    }
    ShoppingList::~ShoppingList()
    {
 
    }
    int ShoppingList::returnPrice() const
    {
        return (price * count) - (price * count * discountPercent / 100) - discountPrice + bonusAllowance;
    }
    std::ostream & operator<< (std::ostream & os, const ShoppingList & t)
    {
        os << t.dayOfMonth << "\t" << t.count << "\t" << t.discountPercent
            << "\t\t" << t.discountPrice << "\t\t" << t.bonusAllowance 
            << "\t\t" << t.returnPrice() << std::endl;
        return os;
    }
    void sortingShList(ShoppingList * Arr)
    {       
        int Start, Left;
        Start = Left = 0;
        int N = 15;
        int Right, Last;
        Last = Right = N-1;
        do
        {
            for (int i = Right; i >= Left; i--)         //Сдвигаем к концу массива "легкие элементы"
            {
                if (Arr[i-1].dayOfMonth > Arr[i].dayOfMonth)
                {
                    Swap(Arr, i);
                    Last = i;                           //Запомнить место пследней перестановки
                }
            }
            Left = Last + 1;
            for (int i = Left; i <= Right; i++)         //Сдвигаем к началу массива "тяжелые элементы"
            {
                if (Arr[i-1].dayOfMonth > Arr[i].dayOfMonth)
                {
                    Swap(Arr, i);
                    Last = i;                           //Запомнить место пследней перестановки
                }
            }
            Right = Last - 1;
        }
        while (Left <= Right);
    }
    void Swap(ShoppingList * Arr, int i)
    {
        ShoppingList TEMP;
        TEMP = Arr[i];
        Arr[i] = Arr[i-1];
        Arr[i-1] = TEMP;
    }
    void checkDate(ShoppingList * t, int day)
    {
        int qq = 0;
        std::cout << "\n\nПокупки совершенные в " << day << " день:\n";
        for (int i = 1; i < 15; i++)
            if (t[i].returnDay() == day)
            {
                ++qq;
                std::cout << t[i];
            }
        std::cout << "\nБыло совершено " << qq << " покупок.\n";
    }
    long int amountOfPurchases(ShoppingList * t)
    {
        int SUM = 0;
        for (int i = 0; i < 15; i++)
            SUM = SUM + t[i].returnPrice();
        return SUM;
    }
    void ShowDays(ShoppingList * t)
    {
        std::cout << "\nДень\tКол-во\tСкидка %\tСкидка R\tНадбавка\tЦена\n";
        for (int i = 0; i < 15; i++)
            std::cout << t[i];
    }
    void exitTime(void)
    {
        float secs = 10;
        clock_t delay = secs * CLOCKS_PER_SEC;
        clock_t start = clock();
        while (clock() - start < delay);
    }
}
ну и главный файл main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <Windows.h>
#include <cstdlib>
#include <ctime>
#include "shopping_list.h"
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    using SHOPLIST::ShoppingList;
    srand(time(0));
    const int NUM = 15;                     //определяется и отображается набор покупок                 
    ShoppingList purchase[NUM];
    int iday, idiscA, idiscB, ibon, icnt;
    for (int i = 0; i < NUM; i++)
    {
        iday = rand() % 30 + 1;
        idiscA = rand() % 80;
        idiscB = rand() % 1000;
        ibon = rand() % 1000;
        icnt = rand() % 10 + 1;
        purchase[i] = ShoppingList(iday, idiscA, idiscB, ibon, icnt);
    }
    ShowDays(purchase);
    std::cout << "\n\nСтоимость всех покупок\n"
              << " с учетом скидок и надбавок за транспортные расходы составило: " 
              << amountOfPurchases(purchase) << " рублей.\n\n";
    sortingShList(purchase);
    ShowDays(purchase);
    checkDate(purchase);
    std::cin.get();
    SHOPLIST::exitTime();
    return 0;
}
Заранее спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru