Главная страница
Навигация по странице:

  • 6.4 Проверка корректности вводимых данных

  • 6.5 Определение текущей даты и времени

  • Поле структуры tm Тип Значение Диапазон

  • Приложение А (обязательное ) Задания для курсовой работы 1. Разработка программы учета товаров на складе

  • 2. Разработка программы распределения мест в общежитии

  • 3. Разработка программы расписания движения автобусов

  • 4. Разработка программы продажи автобусных билетов

  • 5. Разработка программы учета переговоров абонентов сотовой связи

  • 6. Разработка программы расчета заработной платы сотрудников предприятия

  • 7. Разработка программы учета книг в библиотеке

  • 8. Разработка программы учета выпускаемой предприятием продукции

  • 9. Разработка программы учета стажа сотрудников предприятия

  • 10. Разработка программы учета выплат заработной платы сотрудникам предприятия

  • Методические указания к выполнению курсовой работы по дисциплине «Основы конструирования программ». 1_Меженная_ОКП_Курсовое_проектирование_Пособие. Курсовое проектирование


    Скачать 2.04 Mb.
    НазваниеКурсовое проектирование
    АнкорМетодические указания к выполнению курсовой работы по дисциплине «Основы конструирования программ
    Дата10.05.2023
    Размер2.04 Mb.
    Формат файлаpdf
    Имя файла1_Меженная_ОКП_Курсовое_проектирование_Пособие.pdf
    ТипРеферат
    #1118858
    страница5 из 6
    1   2   3   4   5   6
    6.3 Перевыделение памяти с целью увеличения размера динамически
    созданного массива
    При работе с динамически создаваемыми массивами может возникнуть необ- ходимость увеличения размера памяти, требуемой для хранения информации
    (например, для добавления в последующем новых данных). Для решения такой задачи целесообразно выполнить перевыделение памяти под массив.
    Далее приведен пример программы, выполняющей динамическое создание массива, его заполнение случайными числами из отрезка [a; b], вывод результата заполнения на консоль, перевыделение памяти с целью увеличения размера мас- сива на один элемент, добавление нового элементы и повторный вывод содержи- мого массива на консоль.
    #include

    #include

    #include

    using namespace std; void generateElementsOfArray(
    int
    *
    arr
    , int n
    ); void showArray(
    int
    *
    arr
    , int n
    ); int
    * getRememberForArray(
    int
    *
    arr
    , int
    &
    n
    , int m
    ); int inputNumber(); void main()
    { setlocale(
    LC_ALL
    ,
    "RUS"
    ); int n; cout
    <<
    "Введите размер массива n: "
    ; cin
    >>
    n;

    61 int
    *arr = new int
    [n]; generateElementsOfArray(arr, n); cout
    <<
    "Массив arr (исходный):"
    <<
    endl; showArray(arr, n); arr = getRememberForArray(arr, n, n+1); arr[n-1] = inputNumber(); cout
    <<
    "Новый массив arr:"
    <<
    endl; showArray(arr, n); delete[]
    arr; system(
    "pause"
    );
    } void generateElementsOfArray(
    int
    *
    arr
    , int n
    )
    { srand(time(
    NULL
    )); int a, b; cout
    <<
    "Введите a: "
    ; cin
    >>
    a; cout
    <<
    "Введите b: "
    ; cin
    >>
    b; for
    (
    int i = 0; i < n
    ; i++)
    { arr
    [i] = rand() % (b - a + 1) + a;
    }
    } void showArray(
    int
    *
    arr
    , int n
    )
    { for
    (
    int i = 0; i<
    n
    ; i++) { cout
    <<
    arr
    [i]
    <<
    " "
    ;
    } cout
    <<
    endl;
    } int inputNumber()
    { int new_element; cout
    <<
    "Введите новый элемент массива: "
    ;

    62 cin
    >>
    new_element; return new_element;
    } int
    * getRememberForArray(
    int
    *
    arr
    , int
    &
    n
    , int m
    )
    { int
    *arr_new; if
    (
    n
    < m
    )
    { arr_new = new int
    [
    m
    ]; for
    (
    int i = 0; i < n
    ; i++)
    { arr_new[i] = arr
    [i];
    } for
    (
    int i = n
    ; i < m
    ; i++)
    // дополняем массив нулевыми значениями
    { arr_new[i] = 0;
    } delete[]
    arr
    ; arr
    = arr_new; n
    = m
    ;
    } return arr
    ;
    }
    6.4 Проверка корректности вводимых данных
    При программировании логики курсовой работы необходимо предусмотреть обработку целого ряда исключительных ситуаций. Наиболее часто встречающиеся исключительные ситуации связаны с ошибками пользователя на этапе ввода дан- ных, а именно: введенные пользователем данные не соответствуют формату поля
    (например, символы в числовом поле); введенные пользователем данные нелогич- ны (например, отрицательная цена товара).
    Так как пользователи могут ошибаться и изменить этот факт невозможно, то необходимо корректно обработать возможные ошибки ввода. Далее приведен пример программы, реализующей ввод пользователем возраста с проверкой на принадлежность целым числам из интервала (0; 100). Результат работы програм- мы отражен на рисунке 6.5.

    63
    Пояснения к используемым в коде библиотечным методам по работе с пото- ковым вводом/выводом на консоль:
    1. cin.get() – возвращает последний символ из потока. Если все символы были цифрами (допустимо использование в качестве первого символа знака минус при необходимости ввода отрицательных чисел), то последним символом потока будет переход на новую строку, т. е. \n. В противном случае можно сделать заключение о нецифровом вводе.
    2. cin.clear() – сбрасывает флаги ошибок, в противном случае повторный вы- зов cin не сработает.
    3. cin.ignore(numeric_limits::max(), '\n') – очищает поток (отбра- сываем максимальное число символов, которое может содержать поток, до перво- го перевода строки включительно).
    Если в проекте подключена библиотека windows.h, то возникнет конфликтная ситуация с методом max(). Тогда вместо cin.ignore(numeric_limits::max(), '\n'); используйте cin.ignore(256, '\n');
    В качестве 256 можно указать и другое число. Важно понимать: это то мак- симально возможное количество символов, которое будет удалено из потока.
    Рисунок 6.5 – Результат работы программы, запрашивающей возраст пользователя
    #include

    using namespace std; const int
    LEFT_RANGE_OF_AGE = 0; const int
    RIGHT_RANGE_OF_AGE = 100; int inputNumber(
    int left_range
    , int right_range
    ); bool isNumberNumeric(); bool isNumberRangeCorrect(
    int number
    , int left_range
    , int right_range
    );

    64 void main()
    { setlocale(
    LC_ALL
    ,
    "rus"
    ); cout
    <<
    "Введите ваш возраст: "
    ; int age = inputNumber(LEFT_RANGE_OF_AGE, RIGHT_RANGE_OF_AGE); cout
    <<
    age
    <<
    endl; system(
    "pause"
    );
    } int inputNumber(
    int left_range
    , int right_range
    )
    { int number; while
    (
    true
    )
    { cin
    >>
    number; if
    (isNumberNumeric() && isNumberRangeCorrect(number, left_range
    , right_range
    )) return number; else cout
    <<
    "Некорректный ввод! Повторите попытку: "
    ;
    }
    } bool isNumberNumeric()
    { if
    (cin.get() ==
    '\n'
    ) return true
    ; else
    { cin.clear(); cin.ignore(std::
    numeric_limits
    <
    streamsize
    >::max(),
    '\n'
    ); return false
    ;
    }
    } bool isNumberRangeCorrect(
    int number
    , int left_range
    , int right_range
    )
    { if
    ((
    number
    > left_range
    ) && (
    number
    < right_range
    )) return true
    ; else return false
    ;
    }

    65
    6.5 Определение текущей даты и времени
    В курсовой работе может возникнуть необходимость работы с текущей датой и/или текущим временем. Например, для вывода на консоль всех товаров, храня- щихся более x месяцев (x вводится с клавиатуры), необходимо знать текущий ме- сяц. Для вывода на консоль списка сотрудников пенсионного возраста требуется знать текущую календарную дату. Часто для проверки вводимых данных на кор- ректность (например, даты рождения) необходимо программно запрашивать те- кущий год и проверять, чтобы вводимый пользователем год рождения по крайней мере не превышал текущий календарный год.
    Рассмотрим две программы для определения календарной даты и текущего времени, в результате которых осуществляется вывод на консоль системной даты в формате ДД.ММ.ГГГГ и системного времени в формате Часы:Минуты:Секунды.
    Первая программа, приведенная ниже, работает со структурой struct tm (таб- лица 6.1), в которой посредством функции localtime_s библиотеки time.h сохраня- ется системная дата и время (с учетом часового пояса). Для удобства последую- щей работы с параметрами даты и времени в программе введены новые пользова- тельские типы данных – Date и Time с полями, характеризующими дату и время соответственно посредством полей типа int.
    Таблица 6.1 – Параметры структуры struct tm из библиотеки time.h
    Поле структуры tm Тип
    Значение
    Диапазон
    tm_sec int
    Количество секунд
    0-59 tm_min int
    Количество минут
    0-59 tm_hour int
    Количество часов
    0-23 tm_mday int
    День месяца
    1-31 tm_mon int
    Количество месяцев с января
    0-11 tm_year int
    Количество лет, прошедших с 1900 года
    #include

    #include

    using namespace std; struct
    Date
    { int day; int month; int year;

    66
    }; struct
    Time
    { int hour; int minute; int second;
    };
    Date getCurrentDate();
    Time getCurrentTime(); void showDate(
    Date date
    ); void showTime(
    Time time
    ); void main()
    { showDate(getCurrentDate()); showTime(getCurrentTime()); system(
    "pause"
    );
    }
    Date getCurrentDate()
    { struct tm localtime; time_t now = time(
    NULL
    ); localtime_s(&localtime, &now);
    Date currentDate; currentDate.day = localtime.tm_mday; currentDate.month = 1 + localtime.tm_mon;
    // tm_mon: months in range [0-11]
    currentDate.year = 1900 + localtime.tm_year;
    // tm_year: years since 1900
    return currentDate;
    }
    Time getCurrentTime()
    { struct tm localtime; time_t now = time(
    NULL
    ); localtime_s(&localtime, &now);
    Time currentTime; currentTime.hour = localtime.tm_hour; currentTime.minute = localtime.tm_min; currentTime.second = localtime.tm_sec;

    67 return currentTime;
    } void showDate(
    Date date
    )
    { cout
    <<
    date
    .day
    <<
    "."
    <<
    date
    .month
    <<
    "."
    <<
    date
    .year
    <<
    endl;
    } void showTime(
    Time time
    )
    { cout
    <<
    time
    .hour
    <<
    ":"
    <<
    time
    .minute
    <<
    ":"
    <<
    time
    .second
    <<
    endl;
    }
    Вторая программа, приведенная ниже, работает со структурой SYSTEMTIME tm, в которой посредством функции GetLocalTime библиотеки windows.h сохраня- ется системная дата и время (с учетом часового пояса). Для удобства последую- щей работы с параметрами даты и времени в программе введены новые пользова- тельские типы данных – Date и Time с полями, характеризующими дату и время соответственно посредством полей типа string.
    #include

    #include

    #include

    #include

    using namespace std; struct
    Date
    { string day; string month; string year;
    }; struct
    Time
    { string hour; string minute; string second;
    };
    Date getCurrentDate();
    Time getCurrentTime();

    68 void showDate(
    Date date
    ); void showTime(
    Time time
    ); void main()
    { showDate(getCurrentDate()); showTime(getCurrentTime()); system(
    "pause"
    );
    }
    Date getCurrentDate()
    {
    SYSTEMTIME
    tm;
    GetLocalTime(&tm);
    Date currentDate; currentDate.day
    =
    to_string(tm.wDay); currentDate.month
    =
    to_string(tm.wMonth); currentDate.year
    =
    to_string(tm.wYear); return currentDate;
    }
    Time getCurrentTime()
    {
    SYSTEMTIME
    tm;
    GetLocalTime(&tm);
    Time currentTime; currentTime.hour
    =
    to_string(tm.wHour); currentTime.minute
    =
    to_string(tm.wMinute); currentTime.second
    =
    to_string(tm.wSecond); return currentTime;
    } void showDate(
    Date date
    )
    { cout
    <<
    date
    .day
    <<
    "."
    <<
    date
    .month
    <<
    "."
    <<
    date
    .year
    <<
    endl;
    } void showTime(
    Time time
    )
    { cout
    <<
    time
    .hour
    <<
    ":"
    <<
    time
    .minute
    <<
    ":"
    <<
    time
    .second
    <<
    endl;
    }

    69
    Приложение А
    (обязательное
    )
    Задания для курсовой работы
    1. Разработка программы учета товаров на складе
    Программа предоставляет сведения о товарах, имеющихся на складе: наиме- нование товара, количество единиц товара, цена единицы товара, дата поступле- ния товара на склад, ФИО зарегистрировавшего товар.
    Индивидуальное задание: вывести в алфавитном порядке список товаров, хранящихся более x месяцев, стоимость которых превышает y рублей (x, y вводят- ся с клавиатуры).
    Общее для всех вариантов задание: реализовать авторизацию для входа в си- стему, функционал администратора и функционал пользователя (см. более по- дробно в функциональных требованиях к курсовой работе, подраздел 1.2).
    2. Разработка программы распределения мест в общежитии
    Для получения места в общежитии формируется список студентов, который включает: ФИО студента, номер группы (шесть цифр), средний балл, участие в общественной деятельности, доход на одного члена семьи. Общежитие в первую очередь предоставляется тем студентам, чьи доходы на члена семьи меньше двух минимальных зарплат, затем остальным в порядке уменьшения среднего балла
    (при равных баллах приоритет отдается тем, кто участвовал в общественной дея- тельности).
    Индивидуальное задание: вывести список очередности предоставления места в общежитии при условии, что размер минимальной зарплаты вводится с клавиатуры.
    Общее для всех вариантов задание: реализовать авторизацию для входа в си- стему, функционал администратора и функционал пользователя (см. более по- дробно в функциональных требованиях к курсовой работе, подраздел 1.2).
    3. Разработка программы расписания движения автобусов
    В справочной автовокзала хранится расписание движения автобусов. Для каждого рейса указаны: номер рейса, тип автобуса, пункт назначения, время от- правления, время прибытия на конечный пункт.
    Индивидуальное задание: вывести информацию о всех рейсах, которыми мож- но воспользоваться для прибытия в пункт назначения не позднее чем за 12 часов до заданного времени (интересующее время прибытия вводится с клавиатуры).
    Общее для всех вариантов задание: реализовать авторизацию для входа в си- стему, функционал администратора и функционал пользователя (см. более по- дробно в функциональных требованиях к курсовой работе, подраздел 1.2).

    70
    4. Разработка программы продажи автобусных билетов
    Автовокзал осуществляет продажу билетов на пригородные рейсы. Для каж- дого рейса указаны: номер рейса, тип автобуса, пункт назначения, дату отправле- ния, время отправления, время прибытия на конечный пункт, стоимость одного билета, количество оставшихся для продажи билетов, количество проданных би- летов.
    Индивидуальное задание: обеспечить функциональную возможность покупки билетов на конкретный рейс в требуемом количестве (при этом количество остав- шихся для продажи билетов и количество проданных билетов обновляется).
    Общее для всех вариантов задание: реализовать авторизацию для входа в си- стему, функционал администратора и функционал пользователя (см. более по- дробно в функциональных требованиях к курсовой работе, подраздел 1.2).
    5. Разработка программы учета переговоров абонентов сотовой связи
    Оператор сотовой связи хранит информацию о разговорах своих абонентов: номер абонента, ФИО абонента, указание принадлежности вызова к исходящему или входящему, номер исходящего или входящего вызова, дата звонка, время звонка, продолжительность разговора, тариф одной минуты.
    Индивидуальное задание: вывести по каждому абоненту за требуемый период времени: перечень входящих и исходящих вызовов, общее время входящих вызо- вов, общее время исходящих вызовов, общую сумму на исходящие вызовы (тре- буемый период времени вводится с клавиатуры).
    Общее для всех вариантов задание: реализовать авторизацию для входа в си- стему, функционал администратора и функционал пользователя (см. более по- дробно в функциональных требованиях к курсовой работе, подраздел 1.2).
    6. Разработка программы расчета заработной платы сотрудников
    предприятия
    Сведения о сотрудниках предприятия содержат: Ф.И.О. сотрудника, табель- ный номер, год, месяц, количество проработанных часов за месяц, почасовой та- риф. Рабочее время свыше 144 часов считается сверхурочным и оплачивается в двойном размере.
    Индивидуальное задание: рассчитать размер заработной платы каждого со- трудника за вычетом подоходного налога, который составляет 12 % от суммы за- работной платы. Определить объем выплат конкретному сотруднику за требуемый период времени (требуемый период времени вводится с клавиатуры).
    Общее для всех вариантов задание: реализовать авторизацию для входа в си- стему, функционал администратора и функционал пользователя (см. более по- дробно в функциональных требованиях к курсовой работе, подраздел 1.2).

    71
    7. Разработка программы учета книг в библиотеке
    Для книг, хранящихся в библиотеке, задаются: регистрационный номер кни- ги, автор, название, год издания, издательство, количество страниц, номер чита- тельского билета (шесть цифр) последнего читателя, отметка о нахождении книги у читателя или в библиотеке в текущий момент.
    Индивидуальное задание: вывести список книг с фамилиями авторов в алфа- витном порядке, изданных после заданного года (год вводится с клавиатуры). Вы- вести список книг, находящихся в текущий момент у читателей.
    Общее для всех вариантов задание: реализовать авторизацию для входа в си- стему, функционал администратора и функционал пользователя (см. более по- дробно в функциональных требованиях к курсовой работе, подраздел 1.2).
    8. Разработка программы учета выпускаемой предприятием продукции
    Сведения о выпущенной продукции включают: дату, номер цеха, наименова- ние продукции, количество выпущенных единиц, ФИО ответственного по цеху в данный день.
    Индивидуальное задание: для заданного цеха необходимо вывести количе- ство выпущенных изделий по каждому наименованию за требуемый период вре- мени (требуемый период времени вводится с клавиатуры).
    Общее для всех вариантов задание: реализовать авторизацию для входа в си- стему, функционал администратора и функционал пользователя (см. более по- дробно в функциональных требованиях к курсовой работе, подраздел 1.2).
    9. Разработка программы учета стажа сотрудников предприятия
    Информация о сотрудниках предприятия содержит: ФИО сотрудника, дату рождения, название отдела, должность, дату начала работы.
    Индивидуальное задание: вывести список сотрудников пенсионного возраста.
    Вывести список сотрудников в порядке убывания стажа.
    Общее для всех вариантов задание: реализовать авторизацию для входа в си- стему, функционал администратора и функционал пользователя (см. более по- дробно в функциональных требованиях к курсовой работе, подраздел 1.2).
    10. Разработка программы учета выплат заработной платы сотрудникам
    предприятия
    Информация о сотрудниках предприятия содержит: ФИО сотрудника, назва- ние отдела, должность, размер заработной платы за месяц.
    Индивидуальное задание: вычислить общую сумму выплат за месяц по каж- дому отделу, а также среднемесячный заработок сотрудников по каждому отделу.
    Вывести список сотрудников, у которых зарплата ниже введенной с клавиатуры.

    72
    Общее для всех вариантов задание: реализовать авторизацию для входа в си- стему, функционал администратора и функционал пользователя (см. более по- дробно в функциональных требованиях к курсовой работе, подраздел 1.2).
    1   2   3   4   5   6


    написать администратору сайта