Автоматизация рабочего места менеджера магазина специального оснащения

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    119,16 Кб
  • Опубликовано:
    2015-06-23
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Автоматизация рабочего места менеджера магазина специального оснащения

Министерство образования Республики Беларусь

Учреждение образования «Белорусский государственный университет информатики и радиоэлектроники»

Факультет компьютерных технологий

Кафедра информационных систем и технологий








ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

на тему

АРМ МЕНЕДЖЕРА МАГАЗИНА СПЕЦИАЛЬНОГО ОСНАЩЕНИЯ

Студент: гр. 380961

Довнар. А.О.

Руководитель: ст. преп.

Коренская И. Н.




Минск 2014

Учреждение образования

«Белорусский государственный университет информатики и радиоэлектроники»

Факультет компьютерных технологий

УТВЕРЖДАЮ

Заведующий кафедрой

------------------------

(подпись)

-----------------2014 г.

ЗАДАНИЕ

по курсовому проекту

Студенту Довнару Александру Олегивичу

1. Тема проекта Автоматизация Рабочего Места Менеджера магазина специального оснащения

. Срок сдачи студентом законченного проекта-----11 декабря 2014 г.

. Исходные данные к проекту Файл товаров ------------------------------------------------------ ----

4. Содержание расчетно-пояснительной записки (перечень вопросов, которые подлежат разработке)

Введение. 1. Постановка задачи. 1.1. Формулировка задания. 1.2. Описание исходных данных. 1.3. Описание результатов 2. Описание методов решения задачи. 3. Описание блок-схемы алгоритма. 4. Описание программы. 5. Анализ результатов работы программы. Заключение. Список использованных источников.

5. Перечень графического материала (с точным обозначением обязательных чертежей и графиков)

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

6. Консультант по проекту (с обозначением разделов проекта) И. Н. Коренская

7. Дата выдачи задания -----04 сентября 2014 г.----------------- -

8. Календарный график работы над проектом на весь период проектирования (с обозначением сроков выполнения и трудоемкости отдельных этапов):

Разделы1,2к18.09- 20%;

раздел 3 к 02.10 - 20 %;

разделы 4,5 к 31.10 - 40 %;

оформление пояснительной записки и графического материала к 27.11 - 20 % Защита курсового проекта с 11.12 по 24.12

РУКОВОДИТЕЛЬ-- И. Н. Коренская__

(подпись)

Задание принял к исполнению -- _____________ А. О. Довнар_____

(дата и подпись студента)

СОДЕРЖАНИЕ

Введение

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

.1      Формулировка задания

.2      Описание исходных данных

.3      Описание результатов

. Описание методов решения задачи

. Описание блок-схемы алгоритма

. Описание программы

. Анализ результатов работы программы

Заключение

Список использованных источников

Приложение 1

Приложение 2

ВВЕДЕНИЕ

Целью курсового проекта является отработка навыка работы с классами на С++,динамическими массивами, файлами и потоками ввода/вывода.

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

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

. Наследование. Определение объекта и его дальнейшее использование для построения иерархии порожденных объектов с возможностью для каждого порожденного объекта, относящегося к иерархии, доступа к коду и данным всех порождающих объектов.

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

Языковые расширения C++ предоставляют вам все средства объектно-ориентированного программирования: большую структурированность и модульность, большую абстрактность и встроенную непосредственно в язык возможность повторного использования. Все эти характеристики соответствуют коду, который является более структурированным, более гибким и более легким для обслуживания.

.        ПОСТАНОВКА ЗАДАЧИ

1.1    Формулировка задания

Темой курсового проекта является приложение для автоматизации рабочего места менеджера магазина по продаже специального оснащения.

Следует организовать такие возможности как:

Считывание товаров из файла;

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

Вывод на экран всех товаров;

Вывод конкретного товара;

Запись изменений в файл.

Предусмотреть следующие возможности манипуляции с товаром:

Удаление товара;

Изменение полей товара;

Добавление товара;

Копирование текущего товара и помещение копии в конец списка товаров;

1.2    Исходные данные

Исходными являются данные из файла товаров, хранящегося, в корневом каталоге программы.

Файл товаров «lib.S-Team» имеет следующую структуру

Идентификационный номер товара;

Категория товара;

Наименование товара;

Краткое описание товара;

Производитель товара;

Стоимость товара.

Каждая позиция отделяется от другой символом переноса строки и имеет длину не превышающую 255 символов.

1.3    Выходные данные

В программе выходными данными являются группированные по категории товары.

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

.        ОПИСАНИЕ МЕТОДОВ РЕШЕНИЯ ЗАДАЧИ

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

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

Таким образом выполнение последующих операций «Удаление», «Изменение», «Добавление», «Копирование» над блоками данных товара, сводится к простейшей работе над массивом классов.

Операция «Удаление» выполняется как, исключение выделенного элемента из массива.

Операция «Изменение» выполняется как, изменение полей выделенного экземпляра класса.

Операция «Добавление» выполняется как, создание нового экземпляра класса и включения его в массив.

Операция «Копирования» выполняется как, создание нового экземпляра класса и присвоение значению его полей, значений полей выделенного класса, с последующим включением этого экземпляра в массив.

3.      Описание блок-схемы алгоритма


В Приложении 1 приведена блок схема работы алгоритма программы. Глядя на блок схему, мы видим, что при начале работы программы, алгоритм считывает данные из файла с товарами(2), и переписывает их в пользовательские классы. Затем начинает выполняться рекурсивный вызов функции вывода пользовательского меню. В функции происходят такие действия как:

˗        группировка товаров по категориям;

˗        вывод на экран результатов группировки;

˗        предоставление вариантов действия;

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

4.      Описание программы


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

После формирования массива пользовательских классов, происходит группировка товаров по категориям и вывод пользовательского меню с вариантами манипулирования экземплярами класса. При выходе из пользовательского меню, в основную программу передаётся количество элементов в массиве классов. И происходит перезапись файла товаров.

Курсовая работа выполнена в виде трех классов и главной функции:

1)      IOCore - класс работы с файлами. Содержит в себе следующие методы:

-openFile() - открывает файл для чтения;

closeFile()   - закрывает файл;

GetBlockSize() - определить размер блока в строках;

SetPath() - установить путь к файлу;

GetPath()    - узнать путь к файлу;

CheckBlockCount() - узнать количество блоков в файле;

SetBlockCount() - задать количество блоков;

GetBlockCount() - считать количество блоков;

ReadBlock() - считать блок.

2)      Item - класс товара, содержащий в себе поля для описания каждой строки в блоке данных Содержит в себе метод, PrintBlock()- отображает на экран все поля класса.

3)      Schedule - класс для работы с массивом классов Item. Содержит в себе методы:

-fillKateg() - служит для группировки элементом по категориям;

-PrintKateg() - вывод на экран категорий;

PrintMenu() - вывод пользовательского меню.

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

5.      Анализ результатов работы программы


Полученная в ходе выполнения курсового проекта программа выполняет заданные условия. Позволяет манипулировать данными и организовывает считывание и запись данных в исходный файл.

Программа реализована в виде трёх классов и главной функции.

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

Заключение

Полученная программа демонстрирует основные возможности языка программирования С++ в области создания программного обеспечения, а также в области разработки программ автоматизации процессов. Была достигнута поставленная задача и программа, позволяющая манипулировать товарами в магазине. Во время написания проекта использовались полученные знания по созданию и работе с классами на курсе КПиЯП. Продемонстрированы таки навыки как создание классов, работа с динамическими массивами, а так же работа в методами ввода/вывода.

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

программный автоматизация файл изменение

Список использованных источников

1.      Лафоре, Р. Объектно-ориентированное программирование в С++.

.        Паппас, К. Х., Мюррей, У. Х. Отладка в C++. Руководство для разработчиков;

.        Кузнецов, С.Д. Методы сортировки и поиска, ИСП РАН, Центр Информационных Технологий;

.        Страуструп, Б. Язык программирования С++;

5.  Банди Б. Методы оптимизации;

6.  Сухарев, А.Г., Тимохов, А.В Курс методов оптимизации;

7.      Химмельблау, Д. Прикладное нелинейное программирование М.:Мир, 1989;

.        Т.А. Павловская, Ю.А. Щупак - С и С++ Структурное программирование;

.        Джесс Либерти: Освой самостоятельно C++ за 21 день;

.        Герб Саттер - Новые сложные задачи на C++.


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


ПРИЛОЖЕНИЕ 2

Код программы

Класс Schedule

#pragma once

#include "stdafx.h"

#include "IOCore.h"

#include "Item.h"

#include <iostream>

#include <fstream>

#include <iomanip>

#include <Windows.h>

#include <conio.h>Schedule

{* im;** kateg;blockCount;charInLine;debug;:(void);

~Schedule(void);SetDebug(int);SetCharInLine(int);GetCharInLine();initKateg(int);getItemMas(Item*);* returnItemMas();SetBlockCount(int);GetBlockCount();fillKateg();PrintKateg(char*, int);PrintMenu (int level);

};

#include "stdafx.h"

#include "Schedule.h"::Schedule(void)

{

}::~Schedule(void)

{

}Schedule::SetCharInLine(int a)

{=a;

}Schedule::GetCharInLine()

{charInLine;

}Schedule::SetBlockCount(int a)

{=a-1;

}

Schedule::GetBlockCount()

{blockCount;

}Schedule::getItemMas(Item* a)

{=a;

}* Schedule::returnItemMas()

{im;

}

Schedule::SetDebug(int a)

{=a;

}Schedule::initKateg(int rowsCount)

{=new int*[rowsCount];<<"ok"<<endl;(int i=0;i<rowsCount;i++)

{[i]=new int[blockCount];

}<<"Строки выделены"<<endl;(int i=0;i<rowsCount;i++)

{(int j=0;j<blockCount+1;j++)

{[i][j]=-1;

}

}<<"Строки инициализированы"<<endl;

}Schedule::fillKateg()

{z=0;b[256];

(int i=1;i<blockCount+1;i++)

{(debug==1){cout<<"fillKateg::1::ok::"<<i<<endl;}_s(b,im[i].GetKategory());(debug==1){cout<<"fillKateg::2::ok::"<<i<<endl;}(b[0]=='Б' && b[1]=='о' && b[2]=='т')

{=0;

}if (b[0]=='Ф' && b[1]=='л' && b[2]=='и')

{=1;

}if (b[0]=='Ф' && b[1]=='о' && b[2]=='н')

{=2;

}

{=3;

}[z][i-1]=i;(debug==1){cout<<"fillKateg::3::ok::"<<i<<"::"<<blockCount<<endl;}

//cout<<i<<"::"<<b<<endl;

//cout<<"Категория["<<z<<"]["<<i<<"]"<<kateg[z][i]<<endl;

}

}Schedule::PrintKateg(char* name, int line)

{newline=0;<<"В категории <"<<name<<"> входят элементы под номерами :"<<"\n";

for(int j=0;j<blockCount+1;j++)

{(kateg[line][j]>0)

{++;<<setw(4)<<j+1<<" |";(newline%charInLine==0 && newline!=0){cout<<endl;}

}

}<<endl;

}Schedule::PrintMenu (int level)

{(debug==1){cout<<"PrintMenu::1::ok"<<endl;}();(debug==1){cout<<"PrintMenu::2::ok"<<endl;}

//cout<<"пользовательское меню "<<level<<" уровня\n выберите действие:"<<endl;

if (level==1)

{a,b,c,g;(debug==1){cout<<"PrintMenu::3::ok"<<endl;}f[256];("0::Ботинки",0);(debug==1){cout<<"PrintMenu::4::ok"<<endl;}("1::Флис ",1);(debug==1){cout<<"PrintMenu::5::ok"<<endl;}("2::Фонари ",2);(debug==1){cout<<"PrintMenu::6::ok"<<endl;}("3::Прочее ",3);(debug==1){cout<<"PrintMenu::7::ok"<<endl;}

cout<<"Чтобы показать товары в категории <#>, нажмите 1 и Enter"<<endl;<<"чтобы показать товар по номером <#>, нажмите 2 и Enter"<<endl;<<"чтобы все товары нажмите 3 и Enter"<<endl;<<"чтобы выйти, нажмите 4 и Enter"<<endl;

if(debug==1){cout<<"PrintMenu::8::ok"<<endl;}

cin>>a;(a==1)

{<<"введите номер категории (номер категории указан как <номер::название> )"<<endl;

cin>>b;(b>=0 && b<=2)

{(int i=1;i<blockCount+1;i++)

{(kateg[b][i]>=0)

{[i].PrintBlock();

}

}

}

}( a==2)

{<<"введите номер элемента"<<endl;>>b;(b>=0 && b<blockCount)

{[b].PrintBlock();

}<<"Нажмите 1, чтобы изменить элемент"<<endl;

cout<<"Нажмите 2 для удаления элемента"<<endl;<<"Нажмите 3 для добавления нового элемента"<<endl;<<"Нажмите 4 для копирования элемента"<<endl;<<"Нажмите 5 в меню"<<endl;

cin>>g;(g==1)

{("cls");

cout<<"::Изменение элемента::"<<endl;<<"\nНазвание "<<im[b-1].GetName()<<"| новое название >>";

cin>>f;[b-1].SetName(f);

cout<<"\nОписание"<<im[b-1].GetDescr()<<"| новое описание >>";

cin>>f;[b-1].SetDescr(f);

cout<<"\nПроизводитель"<<im[b-1].GetProizv()<<"| новый производитель >>";

cin>>f;[b-1].SetProizv(f);

cout<<"\nСтоимость"<<im[b-1].GetPrice()<<"| новая стоимость>>";

cin>>f;[b-1].SetPrice(f);

}(g==2)

{(int i=b;i<blockCount+1;i++)

{temp=im[i];[i-1]=temp;.~Item();

}-;

}(g==3)

{* tempo=new Item[blockCount+1];temp;("cls");<<"::Добавление элемента::"<<endl;<<"\nИД Номер >>";>>f;.SetID(f);<<"\nКатегория >>";>>f;.SetKategory(f);<<"\nНазвание >>";>>f;.SetName(f);<<"\nОписание >>";>>f;.SetDescr(f);<<"\nПроизводитель >>";>>f;.SetProizv(f);<<"\nСтоимость >>";>>f;.SetPrice(f);

for(int i=1;i<blockCount+1;i++)               //переписать динамический массив товаров во временный массив того же типа

{[i]=im[i];

}=new Item[blockCount+2];                     //выделение памяти по новый массив +1 элемент(im);(int i=1;i<blockCount+1;i++)                  //переписываем временный массив в новый массив

{[i]=tempo[i];

}[blockCount+1]=temp;                                     //добавление в новый массив ещё одгоно элемента++;                                                    //увеличение указателя на количество блоков

}(g==4)

{* tempo=new Item[blockCount+1];

Item temp=im[b];(int i=1;i<blockCount+1;i++)           //переписать динамический массив товаров во временный массив того же типа

{[i]=im[i];

}=new Item[blockCount+2];                     //выделение памяти по новый массив +1 элемент(im);(int i=1;i<blockCount+1;i++)         //переписываем временный массив в новый массив

{[i]=tempo[i];

}[blockCount+1]=temp;                                     //добавление в новый массив ещё одгоно элемента++;                                                    //увеличение указателя на количество блоков

}

}(a==3)

{(int i=1;i<blockCount+1;i++)

{[i].PrintBlock();

}

}(a==4){}

cout<<"Для отображения меню нажмите 1 и Enter"<<endl;<<"Для выхода из программы нажмите 2 и дважды Enter"<<endl;

cin>>c;(c==1)

{(level);

}

}

};

Класс Item

#pragma onceItem

{id[30];kategory[50];name[256];descr[256];proizv[256];price;:(void);(Item &);

~Item(void);SetID(char* idd);* GetID();SetKategory(char * k);* GetKategory();SetName(char* nm);* GetName();SetDescr (char* dsc);* GetDescr ();SetProizv (char* pr);* GetProizv ();SetPrice (char* pr);GetPrice();PrintBlock();SetSimbolsInLine(int, char*);

};

#include "stdafx.h"

#include "Item.h"

#include <iostream>

#include <iomanip>namespace std;::Item(void)

{

}::Item(Item &i)

}::~Item(void)

{

}Item::SetID(char* idd)

{_s(id,idd);

}* Item::GetID()

{id;

}Item::SetKategory(char * k)

{_s(kategory,k);

}* Item::GetKategory()

{kategory;

}Item::SetName(char* nm)

{_s(name,nm);

}* Item::GetName()

{name;

}Item::SetDescr (char* dsc)

{_s(descr,dsc);

}* Item::GetDescr ()

{descr;

}Item::SetProizv (char* pr)

{_s(proizv,pr);

}* Item::GetProizv ()

{proizv;

}Item::SetPrice (char* pr)

{=atoi(pr);

}Item::GetPrice()

{price;

}Item::PrintBlock()

{<<setfill('-')<<setw(44)<<"\n";<<setfill(' ');<<"ИД номер: "<<setw(30)<<GetID()<<endl;<<"Категория: "<<setw(30)<<GetKategory()<<endl;<<"Наименование:"<<setw(30)<<GetName()<<endl;

//cout<<cout.widen(30)<<GetDescr()<<endl;<<"Описание: "<<endl;(42,GetDescr());<<"Производитель"<<setw(30)<<GetProizv()<<endl;<<"Стоимость "<<setw(30)<<GetPrice()<<endl;<<setfill('-')<<setw(44)<<"\n";<<setfill(' ');

}Item::SetSimbolsInLine(int a,char* b)

{d=0,h=0;(int i=0;i<256;i++)

{++;(b[i]!='ю' && b[i+1]!='ю')

{<<b[i];(d>a)

{=0;<<setw(30)<<"\n";

}

}

}<<"\n";

}

Класс IOCore

#pragma once

#include <string.h>

#include <iostream>

#include <fstream>namespace std;IOCore

{FReader,FWriter;* path;blockSize;blockCount;:(void);(char* filename);

~IOCore(void);openFile();closeFile();GetBlockSize(int);incBlockCount();SetPath(char*);* GetPath();CheckBlockCount();SetBlockCount(int);GetBlockCount();BlockCount();ReadBlock(char*,char*,char*,char*,char*,char*);

};

#include "stdafx.h"

#include "IOCore.h"

#include <iostream>

#include <fstream>::IOCore(void)

{=6;

}::IOCore(char* filename)

{.open(filename);(!FReader){cout<<"файл не обнаружен...";}{cout<<"файл найден..."<<endl;}

}::~IOCore(void)

{::cout<<"destroyed"<<endl;

}IOCore::openFile()

{(path!="" )

{.open(path);(!FReader)

{<<"файл не обнаружен...";

}

{<<"файл найден..."<<endl;

}

}

{::cout<<"параметр path не указан"<<endl;

}

}IOCore::closeFile()

{.close();

}IOCore::SetPath(char* s)

{=s;

}IOCore::GetBlockSize(int size)

{=size;

}

{::cout<<"Error ::BlockSize < 0::"<<endl;

}

}IOCore::CheckBlockCount()

{=0;char g[256];(!FReader.eof())

{++;.getline(g,256);

}=blockCount/blockSize;<<"blockCount= "<<blockCount<<endl;.seekg(0);

}IOCore::BlockCount()

{blockCount;

}IOCore::incBlockCount()

{+=1;

}IOCore::SetBlockCount(int a)

{=a;

}IOCore::GetBlockCount()

{blockCount;

}IOCore::ReadBlock(char* first,char* second,char* theerd,char* fourth,char* five,char* six)

{.getline(first,20);.getline(second,256);.getline(theerd,256);.getline(fourth,256);.getline(five,256);.getline(six,256);

}

Главная функция

// АРМ_менеджера_магазина_спец оснащения.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include "IOCore.h"

#include "Item.h"

#include <iostream>

#include <fstream>

#include <iomanip>

#include <Windows.h>

#include <conio.h>

#include "Schedule.h"namespace std;_tmain(int argc, _TCHAR* argv[])

{(1251);// установка кодовой страницы win-cp 1251 в поток ввода(1251); // установка кодовой страницы win-cp 1251 в поток вывода

IOCore iocore;* im;s;i,alp=0,il=0,z=0;a[256],b[256],c[256],d[256],e[256],g[256],k[256],p[256],Test[256];.SetPath("lib.txt");.openFile();.CheckBlockCount();=new Item[iocore.BlockCount()];

_getch();.getItemMas(im);.SetCharInLine(10);.SetBlockCount(iocore.GetBlockCount());.initKateg(4);.SetDebug(0);(i=1;i<iocore.BlockCount();i++)

{.ReadBlock(a,b,c,d,e,g);[i].SetID(a);[i].SetKategory(b);[i].SetName(c);[i].SetDescr(d);[i].SetProizv(e);[i].SetPrice(g);++;

}.PrintMenu(1);<<s.GetBlockCount()<<endl;itemslist=s.GetBlockCount()+1;<<itemslist<<endl;=1;=s.returnItemMas();f;.open("lib.txt",ios::out);<<im[i].GetID()<<"\n";<<im[i].GetKategory()<<"\n";<<im[i].GetName()<<"\n";<<im[i].GetDescr()<<"\n";<<im[i].GetProizv()<<"\n";<<im[i].GetPrice()<<"\n";(i=1;i<itemslist;i++)

{<<i<<endl;<<im[i].GetID()<<"\n";<<im[i].GetKategory()<<"\n";<<im[i].GetName()<<"\n";<<im[i].GetDescr()<<"\n";<<im[i].GetProizv()<<"\n";<<im[i].GetPrice()<<"\n";[i].PrintBlock();

}("pause");

}

ПРИЛОЖЕНИЕ 3

Диаграмма классов

Похожие работы на - Автоматизация рабочего места менеджера магазина специального оснащения

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!