close

Вход

Забыли?

вход по аккаунту

?

ПЗ к курсовой. Гурин Андрей ИС - 112

код для вставкиСкачать
Министерство образования и науки Российской Федерации
Муромский институт (филиал)
Федерального государственного бюджетного образовательного учреждения высшего профессионального образования
"Владимирский государственный университет
имени Александра Григорьевича и Николая Григорьевича Столетовых"
(МИ (филиал) ВлГУ)
Факультет информационных технологий Кафедра информационных систем ПОЯСНИТЕЛЬНАЯ
ЗАПИСКА
к курсовому проекту по курсу информатика на тему "Разработка программы, реализующей движение простых геометрических объектов" Руководитель
к. т. н., доц. каф. ИС
(уч. степень, звание)
Канунова Е.Е.
(оценка)(фамилия,инициалы)
(подпись) (дата)
Члены комиссииСтудент ИС-112
(группа)
Гурин А.В.
(подпись)(Ф.И.О.)(фамилия, инициалы)
(подпись) (Ф.И.О.) (подпись) (дата)
Муром 2013
В ходе данной курсовой работы была разработана программа для перемещения простых геометрических фигур с возможностью передвижения их вручную и автоматически.
Табл. 0. Ил. 9. Библ. 0.
Содержание:
ВВЕДЕНИЕ4
1.АНАЛИЗ ТЕХНИЧЕСКОГО ЗАДАНИЯ5
2.РАЗРАБОТКА АЛГОРИТМОВ7
3.РАЗРАБОТКА ПРОГРАММЫ9
4.ТЕСТИРОВАНИЕ12
5.РУКОВОДСТВО ПО ПРОГРАММНОМУ ПРОДУКТУ14
5.1.РУКОВОДСТВО ПРОГРАММИСТА14
5.2.РУКОВОДСТВО АДМИНИСТРАТОРА14
5.3.РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ14
ЗАКЛЮЧЕНИЕ16
СПИСОК ЛИТЕРАТУРЫ.17
ПРИЛОЖЕНИЕ А: ЛИСТИНГ ПРОГРАММЫ18
ПРИЛОЖЕНИЕ Б: БЛОК-СХЕМЫ АЛГОРИТМОВ РАБОТЫ ПРОГРАММЫ26
Введение
В современном мире графика получила довольно широкое распространение во всех сферах производства. Графический интерфейс интенсивно применяется в разработках различного рода программного продукта, эксплуатация большинства современных программ без данного интерфейса представляется практически невозможной. Графический редактор несет на своем борту каждый компьютер современности. В развлекательной сфере графика нашла не менее значимое отражение: графические методы отрисовки изображений в совместном применении их с компьютерной анимацией, легли в основу создания видеоигр и продолжают активно использоваться по сей день. Данная работа нацелена на ознакомление с простейшими методами отрисовки геометрических объектов, методами их передвижения и реализацию программы, позволяющей перемещать простейшие геометрические фигуры.
Плюсом данной программы является простота программного кода. Данная программа является отличным вариантом для ознакомления с простейшими графическими методами отрисовки объектов.
1. Анализ технического задания
Данная курсовая работа несет в себе задачу создания программы для передвижения простых геометрических объектов. Для ее создания стоит определить для себя, какие фигуры будут задействованы в данной работе. Отрисованные объекты будут двигаться по заданной траектории с разной скоростью, а также по желанию пользователя.
Непрямым аналогом представленной в работе программы, является игровое приложение "TETRIS". Приложение активно используется миллионами пользователей, как на ПК, так и на портативных консолях. К его особенностям можно отнести сравнительно маленькие затраты ресурсов и простота в эксплуатации. "TETRIS" использует иную методику передвижения фигур. Она основана на отрисовке матричной сетки координат. Фигура двигается по сетке в заданном направлении с определенным интервалом в системе координат. Такой подход менее распространен и требует больших временных затрат на его реализацию. Разрабатываемая программа будет реализована в среде программирования Microsoft Visual Studio 2010. Выбор среды обусловлен ее максимально удобным интерфейсом и наличием стандартных функций, что в корне облегчает работу. Наличие визуального конструктора также сыграл весомую роль при выборе среды программирования. Программный код будет написан на языке программирования C++. Данный язык позволяет минимализировать использование системных ресурсов, что в корне способствует уменьшению требований программы к ресурсам компьютера. C++ является языком высокого уровня, что позволяет обеспечивать более высокую понимаемость программы. Так же он поддерживает платформу .NETFramework, позволяющую эксплуатировать приложение на различных персональных и переносных компьютерах, на которых установлена эта платформа. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы. Ни одна из языковых возможностей, приводящая к дополнительным накладным расходам, не является обязательной для использования - при необходимости язык позволяет обеспечить максимальную эффективность программы.[1]
При написании программы стоит акцентировать внимание на тот факт, что, прежде всего она рассчитана для пользователя. Этот аспект означает реализацию понятного, и простого интерфейса. Его выполнение влечет за собой повышение эффективности работы и упрощение работы с программой.
Проект предполагает управление объектами, следовательно, само управление должно быть понятным и удобным непосредственно для пользователя.
Программа будет иметь следующие системные требования:
* 32-х разрядный процессор
* 64 Мб ОЗУ
* Монитор с разрешением 800x600 с поддержкой палитры в 256 цветов
* ОС Windows XP с наличием Microsoft .NET Framework
* 10 Мб свободного пространства на жестком диске
2. Разработка алгоритмов
Алгоритмы построения фигур.
Для построения четырехугольника и окружности используются стандартные методы "FillRectangle" и "FillEllipse" класса "Graphics". Данные методы характеризуются несколькими параметрами: цвет заливки, координата X верхнего левого угла, координата Y верхнего угла, длина, ширина (параметры X и Y инициализируются в конструкторе, т.к. впоследствии они будут изменяться при передвижении фигур). Для использования этих методов, вызывается событие "Paint", в котором одним из параметров является класс "PaintEventArgs", предоставляющий для него данные. Создается его объект "e", являющийся параметром обработчика события "Paint". Объект ссылается на класс "Graphics", членами которого будут являться вышеуказанные методы с прописанными данными в их параметрах.
Для построения треугольника будет использован метод "FillPolygon" класса "Graphics". У метода 2 параметра: цвет заливки и массив точек, задаваемый структурами "Point". Каждая такая структура несет в качестве параметров пару координат (каждая пара координат инициализируется в конструкторе). Для треугольника достаточно трех точек. Создается их массив и в качестве второго параметра передается в метод "FillPolygon". Затем в первом параметре прописывается цвет заливки.
Алгоритм траектории движения фигур.
Для передвижения каждой фигуре создается Timer. Это позволяет, изменяя параметр Timer'a "Interval", задать различную скорость каждому из отрисованных объектов. Затем создается класс для перечислений "Position", в котором указываются возможные варианты направлений движения объектов: Left, Right, Down, Up. Инициализируются 5 переменных данного класса, из которых по одной для четырехугольника (objectposition) и окружности (objectposition2), а ставшиеся 3 для треугольника (paint1, paint2, paint3). Все они инициализируют начальное направление движения в конструкторе. Прописываются условия в созданных ранее Timers. В качестве условий проверяются все возможные варианты направления фигуры. В зависимости от направления движения, меняется та или иная координата объекта. Для траекторий, используемых в данной работе, указываются дополнительные условия, в качестве которых буду выступать проверки на местоположения фигур. От местоположений будет зависеть дальнейшие их направления движений. Рисунок 1 - Траектория четырехугольника, Рисунок 2 - Траектория окружности
треугольника
Алгоритм передвижения фигур вручную.
Вызывается событие KeyDown, имеющее в качестве одного из своих параметров класс "KeyEventArgs". Создается его объект "e", ссылающийся впоследствии на свойство класса KeyCode, получающее код с клавиатуры для вышеупомянутого события. В событии KeyDown прописываются условия для передвижения фигуры. В условиях указываются клавиши управления и в соответствии с ним, указывается направление движения фигуры. 3. Разработка программы
В основу данной программы легло создание формы. Форма включает в себя один компонент "menuStrip", 3 компонента "Timer". В первом компоненте реализована кнопка "Help", выводящая на экран сообщение, содержащее в себе подсказку об управлении геометрическими фигурами:
private: System::Void справкаToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
MessageBox::Show("Для управления окружностью используйте клавиши: \n Num2, Num4, Num6, Num8.\n" "Для управления квадратом используйте клавиши: \nLeft, Right, Down, Up.\n"
"Для управления треугольником используйте клавиши:\nW, A, S, D.", "Помощь");
}
Рисунок 3 - Кнопка "Help"
Отрисовка фигур:
private: System::Void Form1_Paint(System::Object^ sender, System::Windows:: Forms:: PaintEventArgs^ e) {
e->Graphics->FillRectangle(System::Drawing::Brushes::Red, x1, y1, 50, 50);
e->Graphics->FillEllipse(System::Drawing::Brushes::Aqua, x2, y2, 50, 50);
Point point1 = Point(z1,z2);
Point point2 = Point(z3,z4);
Point point3 = Point(z5,z6);
array<Point>^ curvePoints = {point1,point2,point3};
e->Graphics->FillPolygon(System::Drawing::Brushes::Chartreuse, curvePoints);
}
В данном куске программы отрисовываются 3 фигуры: четырехугольник, окружность, треугольник. Следующие 3 компонента ("Timer") позволяют осуществлять перемещение фигур по заданным траекториям:
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) {
if (objectposition == Position::Right)
{
x1 += 10;
if(x1 == 550)
objectposition = Position::Down;
}
...
private: System::Void timer2_Tick(System::Object^ sender, System::EventArgs^ e) {
if (objectposition2 == Position::Right)
{
y1 += 10;
if(y1 == 480)
objectposition2 = Position::Up;
}
...
private: System::Void timer3_Tick(System::Object^ sender, System::EventArgs^ e) {
if (paint1 == Position::Right)
{
z1 += 10;
if(z1 == 375)
paint1 = Position::Down;
}
if (paint2 == Position::Right)
{
z3 += 10;
if(z1 == 375)
paint2 = Position::Down;
}
if (paint3 == Position::Right)
{
z5 += 10;
if(z1 == 375)
paint3 = Position::Down;
}
...
Для передвижения фигур вручную было реализовано событие KeyDown:
private: System::Void Form1_KeyDown(System::Object^ sender, System ::Windows:: Forms:: KeyEventArgs^ e) {
if(e->KeyCode == Keys::Left)
{
objectposition = Position::Left;
}
...
if(e->KeyCode == Keys::A)
{
paint1 = Position::Left;
paint2 = Position::Left;
paint3 = Position::Left;
}
...
Изменив параметр "Interval" у компонентов "Timer", была задана различная скорость каждому из простейших геометрических тел:
Рисунок 4 - Свойства "Timer1" Рисунок 5 - Свойства "Timer2"
Рисунок 6 - Свойства "Timer3"
4. Тестирование
Тестирование и отладка являются одними из важнейших процессов на этапе создания приложения. Именно в ходе тестирования обнаруживаются все недостатки и недочеты программы. Процесс отладки устраняет их.
В ходе работы была создана программа по передвижению простых геометрических фигур с различными скоростями, а также позволяющая пользователю самому передвигать данные объекты.
Рисунок 7 - Главное окно
Рисунок 8 - Изменение перемещения
Рисунок 9 - Окно помощи
В ходе тестирования были выявлены некоторые недостатки программы:
Вполне вероятно, что фигура, сошедшая со своей траектории, не смотря на границы формы, продолжит направление по прямой, и окажется за пределами главного окна.
Данная программа тестировалась на компьютере со следующими системными характеристиками:
* Тип центрального процессора: Pentium(r) Dual-Core CPU E6800 @ 3.33GHz
* Системная память: 3072 MB RAM
* Операционная система: Windows 8 x64 с поддержкой 32-x приложений. 5. Руководство по программному продукту
5.1. Руководство программиста
Данная программа имеет открытый исходный код, поэтому любой желающий может его редактировать. Для его открытия достаточно открыть файл "Передвижение.vsxproj".
Работа с фигурами, их перемещениями и отрисовкой, осуществляется непосредственно в главной форме. При нажатии "Help" появляется диалоговое окно, содержащее сообщение о помощи в управлении геометрическими объектами.
5.2. Руководство администратора Программа не разделяет полномочия на пользовательские и администраторские, вследствие чего руководство пользователя будет идентично руководству администратора.
Минимальные системные параметры, при которых данная программа способна функционировать:
* 32-разрядный (x86) процессор с тактовой частотой 450 МГц или выше * Оперативная память: 128 МБ ОЗУ * Монитор с разрешением 800x600, поддерживающий палитру в 256 цветов Операционная система: Windows XP * (требуется наличие Microsoft .NET Framework v2.0, 10 Мб свободного пространства на жёстком диске).
Минимальные системные требования к программному обеспечению:
* Процессор с частотой 400MHz
* 96 МБ ОЗУ
* 280 МБ на жестком диске
5.3. Руководство пользователя
Рекомендуемые системные требования для эксплуатации программы:
* Процессор с частотой 1.0GHz
* 256 МБ ОЗУ
* 610 МБ на жестком диске
* Наличие DirectX 9.0
* ОС Windows 7 или выше
* NET Framework 3.5
Для запуска программы требуется открыть файл формата .EXE. Для запуска справки необходимо нажать на кнопку "Help".
Заключение
В ходе курсовой работы была разработана программа, осуществляющая передвижение фигур вручную и по желанию пользователя. Был углублен спектр знаний, полученных на лекциях. Получены базовые навыки разработки объектно-ориентированного приложения.
Простой и удобный интерфейс программы существенно расширяют аудиторию пользователей. Небольшие системные требования создают возможность эксплуатации программы на различных видах ПК. В процессе проектирования были использованы методы объектно-ориентированного программирования.
При разработке программы применялся язык программирования C++.
Данный проект отвечает требованиям, указанным в техническом задании к нему. (Осуществление передвижения фигур по желанию пользователя и автоматически с разными их скоростями). Список литературы.
1. Пахомов Б. И. С/С++ и MS Visual C++ 2008 для начинающих. - СПб.: БХВ-Петербург. 2009. - 624с.
Приложение А: Листинг программы
Главная форма. #pragma once
namespace Передвижение {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Сводка для Form1
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
enum class Position
{
Left, Right, Up, Down
};
Position objectposition;
Position objectposition2;
Position paint1;
Position paint2;
Position paint3;
int x1;
int y1;
int x2;
int y2;
int z1;
int z2;
int z3;
int z4;
int z5;
int z6;
private: System::Windows::Forms::MenuStrip^ menuStrip1;
private: System::Windows::Forms::ToolStripMenuItem^ справкаToolStripMenuItem;
private: System::Windows::Forms::Timer^ timer2;
private: System::Windows::Forms::Timer^ timer3;
private: System::Windows::Forms::Timer^ timer1;
public:
Form1(void)
{
InitializeComponent();
x1 = 50;
y1 = 50;
x2 = 120;
y2 = 120;
z1 = 205;
z2 = 190;
z3 = 240;
z4 = 240;
z5 = 180;
z6 = 240;
objectposition = Position::Right; //Начальное направление движения квадрата
objectposition2 = Position::Down; //Начальное направление движения окружности
////////////////////////////////////////////////Начальное направление движения треугольника
paint1 = Position::Right;
paint2 = Position::Right; paint3 = Position::Right;
}
protected:
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}
private: System::ComponentModel::IContainer^ components;
private:
/// <summary>
/// Требуется переменная конструктора.
/// </summary>
#pragma region Windows Form Designer generated code
/// <summary>
/// Обязательный метод для поддержки конструктора - не изменяйте
/// содержимое данного метода при помощи редактора кода.
/// </summary>
void InitializeComponent(void)
{
this->components = (gcnew System::ComponentModel::Container());
this->timer1 = (gcnew System::Windows::Forms::Timer(this->components));
this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
this->справкаToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
this->timer2 = (gcnew System::Windows::Forms::Timer(this->components));
this->timer3 = (gcnew System::Windows::Forms::Timer(this->components));
this->menuStrip1->SuspendLayout();
this->SuspendLayout();
// // timer1
// this->timer1->Enabled = true;
this->timer1->Interval = 20;
this->timer1->Tick += gcnew System::EventHandler(this, &Form1::timer1_Tick);
// // menuStrip1
// this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(1) {this->справкаToolStripMenuItem});
this->menuStrip1->Location = System::Drawing::Point(0, 0);
this->menuStrip1->Name = L"menuStrip1";
this->menuStrip1->Size = System::Drawing::Size(652, 24);
this->menuStrip1->TabIndex = 2;
this->menuStrip1->Text = L"menuStrip1";
// // справкаToolStripMenuItem
// this->справкаToolStripMenuItem->Name = L"справкаToolStripMenuItem";
this->справкаToolStripMenuItem->Size = System::Drawing::Size(44, 20);
this->справкаToolStripMenuItem->Text = L"Help";
this->справкаToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::справкаToolStripMenuItem_Click);
// // timer2
// this->timer2->Enabled = true;
this->timer2->Tick += gcnew System::EventHandler(this, &Form1::timer2_Tick);
// // timer3
// this->timer3->Enabled = true;
this->timer3->Interval = 250;
this->timer3->Tick += gcnew System::EventHandler(this, &Form1::timer3_Tick);
// // Form1
// this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->BackColor = System::Drawing::Color::Black;
this->ClientSize = System::Drawing::Size(652, 438);
this->Controls->Add(this->menuStrip1);
this->DoubleBuffered = true;
this->MainMenuStrip = this->menuStrip1;
this->MaximizeBox = false;
this->Name = L"Form1";
this->Text = L"Перемещение фигур";
this->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::Form1_Paint);
this->KeyDown += gcnew System::Windows::Forms::KeyEventHandler(this, &Form1::Form1_KeyDown);
this->menuStrip1->ResumeLayout(false);
this->menuStrip1->PerformLayout();
this->ResumeLayout(false);
this->PerformLayout();
}
#pragma endregion
private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {
e->Graphics->FillRectangle(System::Drawing::Brushes::Red, x1, y1, 50, 50);
e->Graphics->FillEllipse(System::Drawing::Brushes::Aqua, x2, y2, 50, 50)
Point point1 = Point(z1,z2);
Point point2 = Point(z3,z4);
Point point3 = Point(z5,z6);
array<Point>^ curvePoints = {point1,point2,point3};
e->Graphics->FillPolygon(System::Drawing::Brushes::Chartreuse, curvePoints);
}
/////////////////Траетория квадрата
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) {
if (objectposition == Position::Right)
{
x1 += 10;
if(x1 == 550)
objectposition = Position::Down;
}
if (objectposition == Position::Down)
{
y1 += 10;
if(y1 == 350)
objectposition = Position::Left;
}
if (objectposition == Position::Left)
{
x1 -= 10;
if(x1 == 50)
objectposition = Position::Up;
}
if (objectposition == Position::Up)
{
y1 -= 10;
if(y1 == 50)
objectposition = Position::Right;
}
Invalidate();
}
/////////////////Траектория окружности
private: System::Void timer2_Tick(System::Object^ sender, System::EventArgs^ e) {
if (objectposition2 == Position::Down)
{
y2 += 10;
if(y2 == 280)
objectposition2 = Position::Right;
}
if (objectposition2 == Position::Right)
{
x2 += 10;
if(x2 == 480)
objectposition2 = Position::Up;
}
if (objectposition2 == Position::Up)
{
y2 -= 10;
if(y2 == 120)
objectposition2 = Position::Left;
}
if (objectposition2 == Position::Left)
{
x2 -= 10;
if(x2 == 120)
objectposition2 = Position::Down;
}
Invalidate();
}
/////////////////Траектория треугольника
private: System::Void timer3_Tick(System::Object^ sender, System::EventArgs^ e) {
if (paint1 == Position::Right)
{
z1 += 10;
if(z1 == 375)
paint1 = Position::Down;
}
if (paint2 == Position::Right)
{
z3 += 10;
if(z1 == 375)
paint2 = Position::Down;
}
if (paint3 == Position::Right)
{
z5 += 10;
if(z1 == 375)
paint3 = Position::Down;
}
if (paint1 == Position::Down)
{
z2 += 10;
if(z2 == 210)
paint1 = Position::Left;
}
if (paint2 == Position::Down)
{
z4 += 10;
if(z4 == 260)
paint2 = Position::Left;
}
if (paint3 == Position::Down)
{
z6 += 10;
if(z6 == 260)
paint3 = Position::Left;
}
if (paint1 == Position::Left)
{
z1 -= 10;
if(z1 == 205)
paint1 = Position::Up;
}
if (paint2 == Position::Left)
{
z3 -= 10;
if(z3 == 240)
paint2 = Position::Up;
}
if (paint3 == Position::Left)
{
z5 -= 10;
if(z5 == 180)
paint3 = Position::Up;
}
if (paint1 == Position::Up)
{
z2 -= 10;
if(z2 == 190)
paint1 = Position::Right;
}
if (paint2 == Position::Up)
{
z4 -= 10;
if(z4 == 240)
paint2 = Position::Right;
}
if (paint3 == Position::Up)
{
z6 -= 10;
if(z6 == 240)
paint3 = Position::Right;
}
Invalidate();
}
private: System::Void Form1_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) {
/////////////////Управление квадратом
if(e->KeyCode == Keys::Left)
{
objectposition = Position::Left;
}
if(e->KeyCode == Keys::Right)
{
objectposition = Position::Right;
}
if(e->KeyCode == Keys::Up)
{
objectposition = Position::Up;
}
if(e->KeyCode == Keys::Down)
{
objectposition = Position::Down;
}
/////////////////Управление окружностью
if(e->KeyCode == Keys::NumPad4)
{
objectposition2 = Position::Left;
}
if(e->KeyCode == Keys::NumPad6)
{
objectposition2 = Position::Right;
}
if(e->KeyCode == Keys::NumPad8)
{
objectposition2 = Position::Up;
}
if(e->KeyCode == Keys::NumPad2)
{
objectposition2 = Position::Down;
}
/////////////////Управление треугольником
if(e->KeyCode == Keys::A)
{
paint1 = Position::Left;
paint2 = Position::Left;
paint3 = Position::Left;
}
if(e->KeyCode == Keys::D)
{
paint1 = Position::Right;
paint2 = Position::Right;
paint3 = Position::Right;
}
if(e->KeyCode == Keys::W)
{
paint1 = Position::Up;
paint2 = Position::Up;
paint3 = Position::Up;
}
if(e->KeyCode == Keys::S)
{
paint1 = Position::Down;
paint2 = Position::Down;
paint3 = Position::Down;
}
}
private: System::Void справкаToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
MessageBox::Show("Для управления окружностью используйте клавиши:\nNum2, Num4, Num6, Num8.\n" "Для управления квадратом используйте клавиши:\nLeft, Right, Down, Up.\n"
"Для управления треугольником используйте клавиши:\nW, A, S, D.", "Помощь");
}
};
}
Приложение Б: Блок-схемы алгоритмов работы программы
Блок-схема алгоритма траектории четырехугольника и треугольника. F T
F T
F T F T F T
F T
F T
F T Блок схема алгоритма траектории окружности.
F T
F T F T
F T МИВУ 230400.62-00.000 ПЗИзм.Лист№ докум.Подп.ДатаСтудентГурин А.В.Разработка программы, реализующей движение простых геометрических объектовЛитераЛистЛистовРуков.Канунова Е.Е.У35КонсМИ ВлГУ
ИС-112Н.контр.Утв.Андрианов Д.Е
МИВУ 230400.62-00.000 ПЗ
Лист9Изм.Лист№ докум.Подп.Дата
Документ
Категория
Рефераты
Просмотров
66
Размер файла
323 Кб
Теги
112, гурий, курсовой, андрей
1/--страниц
Пожаловаться на содержимое документа