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

  • 2. Постановка задачи 2.1 Условия задачи 10)

  • 2.2 Конечные цели решения задачи

  • 2.4 Описание используемых данных

  • 3. Анализ и исследование задачи 3.1 Типы решения задачи

  • 3.2 Технические и программные средства для ее решения Для реализации данной курсовой работы используются: 1.

  • 4. Алгоритм решения задачи 4.1 Метод проектирования алгоритма

  • Конструкция принятия двоичного решения.

  • 4.2 Блок-схема алгоритма

  • 4.4 Тесты для проверки работоспособности алгоритма

  • 5. Создание программы 5.1 Дерево функций программы

  • 5.2 Последовательность создания программы Рис. 9. Ориентированный граф программы5.3 Сценарий диалога программы

  • 5.4 Описание используемых подпрограмм

  • 6. Результаты тестовых расчетов и их анализ

  • 7. Системные требования

  • 8.3 Описание возможных результатов выполнения программы

  • СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

  • курсовая. Курсовая. 2. Постановка задачи 1 Условия задачи


    Скачать 444.5 Kb.
    Название2. Постановка задачи 1 Условия задачи
    Анкоркурсовая
    Дата29.03.2023
    Размер444.5 Kb.
    Формат файлаdoc
    Имя файлаКурсовая.doc
    ТипКурсовая
    #1022857

    Содержание

    Введение

    Данная курсовая работа посвящена разработке и реализации программы на языке С++ с использованием класса статических массивов структур и базы данных «ODER». В этой курсовой для обработки данных использовались многочисленные операции, такие как сортировки, загрузка и сохранения результатов обработки в бинарный файл, поиск по вводимым данным, а также добавление и удаление записей.

    Кроме того, для упрощения понимания кода программы были изображены блок-схемы алгоритмов всех используемых в курсовой функций, а также представлено тестирование программы, подтверждающее корректную и достоверную работу всех функций.

    Реализация данной задачи представляет собой программу, написанную в среде C++.

    2. Постановка задачи

    2.1 Условия задачи

    10) Описать структуру с именем ODER, содержащую следующие поля:

    □ банк;

    □ расчетный счет плательщика;

    □ расчетный счет получателя;

    □ перечисляемая сумма в руб.

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

    □ Ввод с клавиатуры данных в файл, состоящий из восьми элементов типа ODER;

    □ Загрузка и печать на экране данных из файла

    □ Добавление записи

    □ Удаление записи

    □ Вывод на экран данных и результатов их обработки:

    - упорядоченных записей в алфавитном порядке по расчетным счетам плательщиков;

    - информацию о средней сумме, принятой на расчетные счета получателей банка, введенного с клавиатуры; если такого банка нет, выдать на дисплей соответствующее сообщение.

    - поиск суммы, снятой с расчетного счета плательщика, введенного с клавиатуры.

    - поиск информации по перечисляемым суммам.

    2.2 Конечные цели решения задачи

    • разработка алгоритмов и программ для решения прикладных задач, осуществление постановки и выбор алгоритмов решения экономико-управленческих задач, в том числе с применением математических методов;

    • применение на практике основных алгоритмических структур, графических средств языка;

    • использованию алгоритмических языков высокого уровня, средств автоматизации программирования.

    2.3 Формы выдачи результатов

    Таблица 1. Формы выдачи результатов – таблица:

    Название банка

    Счёт плательщика

    Счёт получателя

    Сумма


    Для выбора действия используется меню, содержащее следующие пункты:

    • Добавить запись

    • Вывести данные о всех людях

    • Удалить запись

    • Отсортировать записи

    • Информация о средней сумме

    • Поиск по счёту плательщика

    • Поиск по сумме

    Так же результаты работы программы записываются в бинарный файл.
    2.4 Описание используемых данных

    Данные вводятся пользователем с клавиатуры. Данные о каждом человеке должены содержать следующие поля:

    Поле «Название банка» - название банка.

    Поле «Счёт плательщика» - расчётный счёт плательщика.

    Поле «Счёт получателя» - расчётный счёт получателя.

    Поле «Сумма» - перечисляемая сумма.

    3. Анализ и исследование задачи

    3.1 Типы решения задачи

    Решение задачи определяется выбором способа ее решения. Для реализации задачи мы построили модель проектирования структуры программы в виде блок - схем и последовательных шагов к конечному результату.

    К каждой подпрограмме составлены блок - схемы, которые служат алгоритмом к написанию кода на языке программирования С++. Также построена модель «Дерева функций» - служит «меню» в структуре построения.

    Итогом исследования являются конечные результаты работы программы (ввод, вывод, сортировка, поиск по определенным полям в таблице структуры)

    3.2 Технические и программные средства для ее решения

    Для реализации данной курсовой работы используются:

    1. Процессор AMD II Mobile P560(2,5 ГГц), 4096МБ SDRAM, OCWin 7

    2. Cреда программирования Borland C++.

    3.3 Математическая модель

    Для сортировки данных необходимо выбрать метод сортировки. Наиболее распространены 3 варианта сортировки данных: пузырьковая сортировка, сортировка вставкой и сортировка посредством выбора.

    При пузырьковой сортировке упорядоченный список В' получается из В систематическим обменом пары рядом стоящих элементов, не отвечающих требуемому порядку, пока такие пары существуют.

    Наиболее простой метод систематического обмена соседних элементов с неправильным порядком при просмотре всего списка слева направо определяет пузырьковую сортировку: максимальные элементы как бы всплывают в конце списка. Пузырьковая сортировка в ряде случаев предпочтительна, чем вышеперечисленные методы.

    4. Алгоритм решения задачи

    4.1 Метод проектирования алгоритма

    Методы проектирования алгоритмов включают: нисходящее проектирование, модульность, структурное программирование.

    Нисходящее проектирование предполагает последовательное разбиение исходной задачи на подзадачи до такой конкретизации, когда подзадача сможет быть реализована одним оператором выбранного для программирования языка. По ходу нисходящего проектирования та или иная подзадача может сформировать самостоятельный модуль. Тогда может быть применен принцип модульного программирования. Он обеспечивает легкость составления алгоритмов и отладки программ, легкость сопровождения и модификации, а также возможность одновременной разработки различных модулей разными специалистами с использованием разных языков программирования.

    При работе над модулем можно применить принцип структурного программирования. Его цель – повышение читабельности и ясности алгоритма (и программы), более высокой производительности программистов и упрощение отладки. В соответствии с этим принципом для построения любого алгоритма (программы) требуются три типовых блока:

    1. Функциональный. Используется для представления линейных алгоритмов. Описывается языком графических символов следующим образом:





    1. Циклический. Используется для представления циклических алгоритмов. Описывается языком графических символов одним из двух способов:





    1. Конструкция принятия двоичного решения. Применяется для представления разветвляющихся алгоритмов. Описывается языком графических символов следующим образом:




    4.2 Блок-схема алгоритма



    Рис. 1. Cхема основной функции программы


    Рис. 2. Схема функции вывода информации на экран


    Рис. 3. Схема функции вывода информации о средней сумме



    Рис. 4. Схема функции поиска записей по счёту плательщика



    Рис. 5. Схема функции поиска записей по сумме



    Рис. 6. Схема функции создания файла



    Рис. 7. Схема функций создания, удаления и сортировки записей

    4.3 Метод тестирования

    Долгое время основным способом тестирования было тестирование методом "черного ящика" - программе подавались некоторые данные на вход и проверялись результаты, в надежде найти несоответствия. При этом как именно работает программа считается несущественным. Отметим, что даже при таком подходе необходимо иметь спецификацию программы для того, чтобы было с чем сравнивать результаты.

    Метод тестирования, которые изучают не только внешнее поведение программы, но и ее внутреннее устройство (исходные тексты). Такие методики обобщенно называют тестированием "белого ящика". Назовем некоторых представителей этого класса методик: чтение программ, формальные просмотры программ, инспекции и т.п.). Основной трудностью подобных методов является сложность отслеживания вычислений времени выполнения.

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

    Поскольку исчерпывающее структурное тестирование невозможно, необходимо выбрать такие критерии его полноты, которые допускали бы их простую проверку и облегчали бы целенаправленный подбор тестов. Наиболее слабым из критериев полноты структурного тестирования является требование хотя бы однократного выполнения каждого оператора программы. Более сильным критерием является критерий: каждая ветвь алгоритма (каждый переход) должна быть пройдена (выполнена) хотя бы один раз.

    4.4 Тесты для проверки работоспособности алгоритма

    Для исследования работоспособности данной программы и получения информации о предоставленной работе необходимо проверить следующее:

    1. Главное меню (вывод всех пунктов меню).

    2. Создание бинарного файла.

    3. Добавление данных (добавление данных в созданный файл).

    4. Удаление данных (удаление строки из заданной таблицы).

    5. Упорядочивание записей (сортировка по заданному значению).

    6. Информация о средней сумме.

    7. Поиск одеров по счёту плательщика.

    8. Поиск одеров по сумме платежа.

    5. Создание программы

    5.1 Дерево функций программы


    Рис. 8. Древо функций программы

    5.2 Последовательность создания программы


    Рис. 9. Ориентированный граф программы

    5.3 Сценарий диалога программы

    Таблица 2. Сценарий диалога

    № вершины графа

    Операция

    0

    Запуск программы

    1

    Меню программы

    2

    Создание файла

    3

    Вывод таблицы на экран

    4

    Сохранение таблицы в файл

    5

    Добавление записи

    6

    Удаление записи

    7

    Сортировка записей

    8

    Информации о средней сумме

    9

    Поиск по счёту плательщика

    10

    Поиск по сумме платежа

    5.4 Описание используемых подпрограмм

    Таблица 3. Используемые подпрограммы

    Название

    Назначение

    sozd_f(filename)

    Создать бинарный файл

    Add(filename)

    Добавление новой строки с данными в БД

    Del (filename)

    Удаление строки из БД

    Print (filename)

    Вывод текущей БД на экран

    Sort (filename)

    Сортировка по номеру телефона

    PrintAsum (filename)

    Информации о средней сумме

    SearchPlat (filename)

    Поиск по счёту плательщика

    SearchSum (filename)

    Поиск по сумме платежа


    6. Результаты тестовых расчетов и их анализ

    Для тестирования алгоритма сортировки введём следующие данные:



    Рис. 10. Ввод данных

    После сортировки получаем такой результат:



    Рис. 11. Вывод данных на экран после сортироки

    Все записи были отсортированы по счетам плательщиков, значит программа работает верно.

    7. Системные требования

    Процессор AMD II P560(2,5 ГГц), 4096 МБSDRAM, OCWin 7

    8. Инструкция пользователя

    8.1 Вызов программы

    Вызов программы реализуется двойным щелчком по файлу «Project1.exe», который находится в директории пользователя ПК.

    8.2 Экранные формы
    Экранные формы могут быть различны по содержанию и логическому построению:

    • основное окно представляет собой обобщенную структуру объекта с отражением основных параметров и с возможностью быстрого перехода на конкретный объект;

    • окна выстроены в иерархическую структуру;

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

    • цвет заднего фона окна может быть любым из доступной цветовой палитры; помимо изменения цвета в качестве подложки окна можно использовать любые изображения различных графических форматов;


    8.3 Описание возможных результатов выполнения программы

    Главное меню программы изображено на рис. 1



    Рис. 1

    Для создания файла с записями необходимо выбрать действие 9. Для сортировки записей необходимо выбрать действие 4.



    Рис. 2

    Для добавление записи необходимо выбрать действие 1 и ввести данные. (рис. 2)



    Рис. 3

    Для удаления записи необходимо выбрать действие 3 и ввести номер удаляемой записи, задем подтвердить удаление.



    Рис. 4

    Для получения информации о средней сумме нужно выбрать действие 5 и ввести банк.



    Рис. 5

    Для поиска записей по счёту плательщика необходимо выбрать действие 6 и ввести счёт. (рис. 5)



    Рис. 6

    Для поиска по начальному и конечному пункту необходимо выбрать действие 7 и ввести адрес.

    Заключение.

    Результатом выполненной курсовой работы стала программа для работы с записями о банковский одерах. Программа содержит меню, которое осуществляет удобную навигацию по программе. Позволяет вводить данные с клавиатуры, сохранение данных происходит в бинарный файл. Есть возможность удаления и сортировки записей, а так же поиска.

    СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

    1. Т.А. Павловская. Ю.А. Щупак С/C++. Программирование на языке высокого уровня. – СПб.: Питер,2007. – 461 с.: ил.

    2. Т.А. Павловская, Ю.А. Щупак. С/C++. Структурное программирование: Практикум. – СПб.: Питер, 2007. – 239 с.: ил.

    3. Прата. Объектно-ориентированное программирование в C++. 2 изд. – ЭКСМО, 2007. - 336 с.: ил.

    4. Б. Страуструп. Язык программирования С++, 3-е издпер. с англ. - М.: "Бином", СПб.: "Невский диалект", 1999. - 991 с., ил.


    Листинг программы

    //---------------------------------------------------------------------------
    #include

    #include

    #include

    #pragma hdrstop
    #include

    #include

    #include

    #include
    using namespace std;

    //---------------------------------------------------------------------------
    #pragma argsused
    void Print(char* filename);

    void printru(char* s) {

    char *s1 = new char[81];

    CharToOem(s,s1);

    //printf(s1);

    cout<
    }
    struct ODER

    {

    char bank[15];

    char plat[10];

    char polu[10];

    int sum;

    };
    void print_data(ODER mm){

    cout<<"|"<
    cout<<"|"<
    cout<<"|"<
    cout<<"|"<
    cout<<"\n";

    }
    int load_from_file(char* filename, ODER* &mm){

    FILE *m_file;

    m_file = fopen(filename, "rb");

    fseek(m_file, 0, SEEK_END);

    int n = ftell(m_file) / sizeof(ODER);

    mm = new ODER[n];

    fseek(m_file, 0, SEEK_SET);

    fread(mm, sizeof(ODER), n, m_file);

    fclose(m_file);

    return n;

    }


    void print_head(){

    cout << " --------------------------------------------------\n";

    printru(" | ODER |\n");

    cout << " |------------------------------------------------|\n";

    printru(" | Банк |Счёт плат.|Счёт пол. | Сумма |\n");

    cout << " |---------------|----------|----------|----------|\n";

    }
    void sozd_f (char* filename) {

    FILE *m_file;

    m_file = fopen(filename, "wb+");

    if ( m_file==0 ) {

    printru("Создать файл не удалось!\n");

    getch();

    return;

    }

    fclose(m_file);

    }

    void Add(char* filename){

    FILE *m_file;

    m_file = fopen(filename, "ab");

    ODER x;

    if ( m_file==0 ) {

    printru("Открыть файл н удалось!\n");

    getch();

    return;

    }

    char y_n;

    do {

    // Ввод данных

    printru("Введите банк\n");

    fflush(stdin);

    cin.getline(x.bank, 15);

    printru("Введите расчетный счет плательщика\n");

    fflush(stdin);

    cin.getline(x.plat, 10);

    printru("Введите расчетный счет получателя\n");

    fflush(stdin);

    cin.getline(x.polu, 10);

    printru("Введите сумму, руб.\n");

    cin>>x.sum;

    fwrite(&x, sizeof(ODER),1,m_file);

    printru("Продолжить(y/n)?\n");
    cin>>y_n;

    } while(y_n=='y'||y_n=='Y');

    fclose(m_file);
    }

    void Print(char* filename){

    ODER *mm;

    int n = load_from_file(filename, mm);
    print_head();

    for(int i=0;i
    cout<
    print_data(mm[i]);

    }

    cout<<"-------------------------------------------------------\n";
    }
    void Del(char* filename){

    ODER *mm;

    int n = load_from_file(filename, mm);

    Print(filename);

    int i,j;

    char ch;

    printru("Введите номер строки: ");

    cin>>j;

    if( j<1 || j>n ){

    printru("Нет такой строки!\n");

    getch();

    return;

    }

    print_data(mm[j-1]);

    printru("Удалить(y/n):");

    cin>>ch;

    if (ch=='y'){

    for(i=j;i
    n--;

    FILE *m_file = fopen(filename, "wb");

    fwrite(mm, sizeof(ODER), n, m_file);

    fclose(m_file);

    printru("Строка удалена.\n"); getch();

    }
    }
    void Sort(char* filename){

    ODER *mm;

    int n = load_from_file(filename, mm);
    for (int i=0; i
    for (int j=i+1; j
    if( strcmp(mm[i].plat, mm[j].plat) > 0 ){

    ODER temp;

    temp = mm[j];

    mm[j] = mm[i];

    mm[i] = temp;

    }

    }

    FILE *m_file = fopen(filename, "wb");

    fwrite(mm, sizeof(ODER), n, m_file);

    fclose(m_file);

    }
    void PrintAsum(char* filename){

    ODER *mm;

    int n = load_from_file(filename, mm);
    printru("Введите банк\n");

    char bank[15];

    fflush(stdin);

    cin.getline(bank, 15);
    int count = 0;

    int sum = 0;

    print_head();

    for(int i=0;i
    if( strcmp(mm[i].bank, bank) == 0 ){

    count++; sum += mm[i].sum; cout<
    }

    if (count==0) printru("Такого маршрута нет!\n");

    else { printru("Средняя сумма = "); cout<<1.0*sum/count<
    cout<<"-------------------------------------------------------\n";
    }
    void SearchPlat(char* filename){

    ODER *mm;

    int n = load_from_file(filename, mm);
    printru("Введите расчётный счёт плательщика\n");

    char plat[10];

    fflush(stdin);

    cin.getline(plat, 10);
    int sum = 0;

    print_head();

    for(int i=0;i
    if( strcmp(mm[i].plat, plat) == 0 ){

    sum += mm[i].sum; cout<
    }

    printru("Сумма = "); cout<
    cout<<"-------------------------------------------------------\n";

    }
    void SearchSum(char* filename){

    ODER *mm;

    int n = load_from_file(filename, mm);
    printru("Введите перечисляемую сумму\n");

    int sum;

    cin>>sum;
    int count=0;

    print_head();

    for(int i=0;i
    if( mm[i].sum == sum ){

    count++; cout<
    }

    if (count==0) printru("Таких одеров нет!\n");

    cout<<"-------------------------------------------------------\n";
    }
    int main(int argc, char* argv[])

    {

    char ch = '-';

    FILE *m_file;

    char filename[] = "ODER.bin";
    while (ch !='0'){

    cout<<"-----------------MENU-----------------"<
    printru("1 - Добавить ODER\n");

    printru("2 - Печать данных на экране\n");

    printru("3 - Удалить запись\n");

    printru("4 - Сортировать\n");

    printru("5 - Информация о средней сумме\n");

    printru("6 - Поиск суммы по счёту плательщика\n");

    printru("7 - Поиск по перечисляемой сумме\n");

    printru("0 - Выход\n");
    printru("9 - Создать файл\n");
    printru("Комманда: ");
    cin>>ch;
    switch (ch){

    case '1': Add(filename);break;

    case '2': Print(filename);break;

    case '3': Del(filename);break;

    case '4': Sort(filename);break;

    case '5': PrintAsum(filename);break;

    case '6': SearchPlat(filename);break;

    case '7': SearchSum(filename);break;
    case '9': sozd_f(filename);break;

    default : break;

    }

    }

    return 0;

    }

    //---------------------------------------------------------------------------





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