Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мой отчет.doc
Скачиваний:
1
Добавлен:
19.08.2019
Размер:
1.3 Mб
Скачать

5 Технические средства обработки информации

На предприятии имеются различные модификации компьютеров и офисное оборудование:

Тип

Оборудования

Описание

Процессоры

Intel Pentium 4 1.8 – 3.0 GHz;

Intel Celeron 1.8 - 2.4 GHz;

Оперативная

память

DDRII 1Gb

Видеокарты

GF4 MX 5200 Fx, AGP 8x, 128 Mb DDR;

Ati Radeon 9200SE, AGP 8x, 64 Mb DDR;

Жёсткие

диски

Western Digital 40 – 120 Gb, 5400 – 7200rpm, 2 Mb buffer;

Seagate 40 – 160 Gb, 5400 – 7200rpm, 2 Mb buffer;

Мониторы

Монитор 17” SVGA LG FLATRON 710BH;

Монитор 17” SVGA Samsung 763 MB;

Монитор 17” SVGA Samsung 755 DFX;

CD-ROM, CD-RW

CD ROM 52x Samsung;

CD ROM 40x TEAC;

CD-RW TEAC 52*24*52;

CD-RW SONY 52x32x52;

Принтеры

Принтер струйный Printer EPSON STYLUS C 830 U;

Принтер лазерный Printer HP 1150, А4;

Сканеры

Сканер HP 3670;

Сканер HP 2400;

Копиры

Копир CANON PC 860 A4

OAO «Эра» пользуется лицензированным программным обеспечением (напр. OC Microsoft Windows XP Professional SP3, Microsoft Office 2003, Visual Studio 2008, MS SQL Server Express 2005, 1С: бухгалтерия, предприятие, UMC)

6 Проектирование базы данных

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

Рисунок 6.1 - ER-диаграмма

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

Комплектующие покупаются в магазинах, которые принадлежат фирмам-поставщикам. Для связи магазинов и фирм (1:М) в таблицу МАГАЗИН добавляется поле firm_id. При покупке товара выписывается счет, который содержит id магазина, в котором был куплен товар, id товара, а также его количество.

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

Рисунок 6.2 – Нормализированная реляционная модель БД

Конечный набор отношений

STUFF (ID, title, cost, description);

BILL (ID, stuff_id, shop_id, count);

SHOP (ID, title, address, firm_id);

FIRM (ID, title, jureaddress);

STORE (ID, title, address);

WAYBILL (store_id, bill_id);

7 Краткое техническое описание программы

 Представленный программный продукт написан для современных 32-разрядных операционных систем (Windows XP).

Программно реализован поиск необходимого чертежа по названию, номеру цеха, склада. Программа полностью реализована с использованием запросов на языке SQL. Создание и заполнение таблиц производилось при помощи стандартных пакетов, таких как Visual Studio 2008 с использованием C#, MS SQL Server Express 2005.

Отметим, что несмотря на достаточно большой набор нестандартных дополнительных функций MS SQL Server 2005, программа использует только стандартные операторы и конструкции.

Программа была протестирована на персональном компьютере Intel Pentium IV 2.8, 1024 RAM, на котором была установлена операционная система Windows XP. Задержка на просмотр, изменение, добавление, удаление и поиск данных не значительна. Тестирование программы подтвердило, что программа правильно выполняет обработку данных и выдаёт верные результаты.

Скриншоты полученной программы представлены далее:

Рисунок 7.1 – Общий вид программы

Рисунок 7.2 – Административная панель программы

Рисунок 7.3 – Диалог ввода пароля к административной панели

Приложение A

Текст программы

----------------------------------frmMain.cs---------------------------------------

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlClient;

using System.IO;

namespace drafts

{

public partial class frmMain : Form

{

public class Tdraft

{

public int id;

public int subclassid;

public String title;

public String subclasstitle;

public String classtitle;

public String imgext;

}

public static DialogResult InputBox(string title, string promptText, ref string value)

{

//функция вызова окна ввода

Form form = new Form();

Label label = new Label();

TextBox textBox = new TextBox();

Button buttonOk = new Button();

Button buttonCancel = new Button();

//задаем текст

form.Text = title;

label.Text = promptText;

textBox.Text = value;

textBox.PasswordChar = '*';

//задаем кнопки

buttonOk.Text = "OK";

buttonCancel.Text = "Cancel";

buttonOk.DialogResult = DialogResult.OK;

buttonCancel.DialogResult = DialogResult.Cancel;

//размещаем элементы

label.SetBounds(9, 20, 372, 13);

textBox.SetBounds(12, 36, 372, 20);

buttonOk.SetBounds(228, 72, 75, 23);

buttonCancel.SetBounds(309, 72, 75, 23);

label.AutoSize = true;

textBox.Anchor = textBox.Anchor | AnchorStyles.Right;

buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;

buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;

form.ClientSize = new Size(396, 107);

form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel });

form.ClientSize = new Size(Math.Max(300, label.Right + 10), form.ClientSize.Height);

form.FormBorderStyle = FormBorderStyle.FixedDialog;

form.StartPosition = FormStartPosition.CenterScreen;

form.MinimizeBox = false;

form.MaximizeBox = false;

form.AcceptButton = buttonOk;

form.CancelButton = buttonCancel;

DialogResult dialogResult = form.ShowDialog();

value = textBox.Text;

return dialogResult;

}

Tdraft this_draft; //текущий чертеж

SqlConnection conn; //соединение с БД

ListBox SubClassesID, DraftListID; //список с ID

public frmMain()

{

InitializeComponent();

string pictname = Application.StartupPath + @"\index.jpg";

pctMain.Load(pictname);

}

private void frmMain_Load(object sender, EventArgs e)

{

this_draft = new Tdraft();

DraftListID = new ListBox();

SubClassesID = new ListBox();

//проверка на наличие файла БД database.mdf

if (!File.Exists(Application.StartupPath + "\\database.mdf"))

{

MessageBox.Show("Не найден файл БД, дальнейшая работа невозможна");

Application.ExitThread();

}

//соединение с БД

conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + "\\database.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");

conn.Open();

//инициализация элементов формы

lblCaption.Text = "";

lblClassCaption.Text = "";

btnDelete.Enabled = false;

btnTiff.Enabled = false;

btnAutoCAD.Enabled = false;

class_select(1); //выбираем первый класс

}

public void getsubclasses(int classid) //получаем все подклассы

{

SqlCommand cmd = conn.CreateCommand();

//получаем все подклассы выбранного класса, упорядочивая по заголовку

cmd.CommandText = "SELECT * FROM subclass WHERE classid = " + classid + " ORDER BY title";

SqlDataReader reader = cmd.ExecuteReader();

while (reader.Read())

{

//добавляем в основной список и список идентификаторов

SubClasses.Items.Add(reader[2]);

SubClassesID.Items.Add(reader[0]);

}

reader.Close();

}

public void getdrafts(int subclassid) //получаем все чертежи

{

SqlCommand cmd = conn.CreateCommand();

//получаем все чертежи выбранного подкласса, упорядочивая по заголовку

cmd.CommandText = "SELECT * FROM draft WHERE subclassid = " + subclassid + " ORDER BY title";

SqlDataReader reader = cmd.ExecuteReader();

while (reader.Read())

{

//добавляем в основной список и список идентификаторов

DraftList.Items.Add(reader[2]);

DraftListID.Items.Add(reader[0]);

}

reader.Close();

}

private void class_select(int id) //выбор класса с заданным id

{

//очищаем все списки и получаем подклассы выделенного класса

clear_lists();

getsubclasses(id);

}

private void subclass_select(int id) //выбор подкласса с заданным id

{

//очищаем список чертежей

DraftList.Items.Clear();

DraftListID.Items.Clear();

lblCaption.Text = "";

lblClassCaption.Text = "";

enable_buttons(false);

pctMain.Hide();

//получаем чертежи выделенного подкласса

getdrafts(id);

}

private void draft_select(int id) //выбор чертежа с заданным id

{

SqlCommand cmd = conn.CreateCommand();

//получаем всю информацию о выделенном чертеже

cmd.CommandText = "SELECT draft.id, draft.subclassid, draft.title, subclass.title, class.title, draft.imgext FROM draft" +

" JOIN subclass ON (subclass.id = draft.subclassid)" +

" JOIN class ON (class.id = subclass.classid)" +

" WHERE draft.id = " + id;

SqlDataReader reader = cmd.ExecuteReader();

reader.Read();

//заполняем текущий чертеж

this_draft.id = id;

this_draft.subclassid = Convert.ToInt32(reader[1].ToString());

this_draft.title = reader[2].ToString();

this_draft.subclasstitle = reader[3].ToString();

this_draft.classtitle = reader[4].ToString();

this_draft.imgext = reader[5].ToString();

reader.Close();

//устанавливаем заголовки

lblClassCaption.Text = this_draft.classtitle + "\\" + this_draft.subclasstitle;

lblCaption.Text = this_draft.title;

string pictname = Application.StartupPath + "\\img\\" + id +"."+ this_draft.imgext;

if (File.Exists(pictname)) //проверяем наличие картинки

{

pctMain.Show(); //загружаем ее

pctMain.Load(pictname);

}

else

{

pctMain.Hide(); //прячем ее

}

enable_buttons(true); //активируем кнопки

}

private void Class1_CheckedChanged(object sender, EventArgs e)

{

class_select(1); //выбор первого класса

}

private void Class2_CheckedChanged(object sender, EventArgs e)

{

class_select(2); //выбор второго класса

}

private void Class3_CheckedChanged(object sender, EventArgs e)

{

class_select(3); //выбор третьего класса

}

private void btnTiff_Click(object sender, EventArgs e)

{

save(this_draft.imgext); //выбор сохраняем как картинку

}

private void btnAutoCAD_Click(object sender, EventArgs e)

{

save("dxf"); //сохраняем с расширением dxf

}

private void btnAdmin_Click(object sender, EventArgs e)

{

//вход в админку

Form frmPass = new frmPass();

this.Hide();

frmPass.ShowDialog();

}

private void frmMain_FormClosed(object sender, FormClosedEventArgs e)

{

//закрываем соединение

conn.Close();

Application.ExitThread();

}

private void SubClasses_SelectedIndexChanged(object sender, EventArgs e)

{

int subclassid;

int selected = SubClasses.SelectedIndex; //выделенный подкласс

if (selected >= 0)

{

//получаем id выделенного подкласса

subclassid = Convert.ToInt32(SubClassesID.Items[selected].ToString());

//выделяем его

subclass_select(subclassid);

}

}

private void DraftList_SelectedIndexChanged(object sender, EventArgs e)

{

int id;

int selected = DraftList.SelectedIndex; //выделенный чертеж

if (selected >= 0)

{

//получаем id выделенного чертежа

id = Convert.ToInt32(DraftListID.Items[selected].ToString());

//выделяем его

draft_select(id);

}

}

void clear_lists()

{

//очищаем все списки

SubClasses.Items.Clear();

SubClassesID.Items.Clear();

DraftList.Items.Clear();

DraftListID.Items.Clear();

lblCaption.Text = "";

lblClassCaption.Text = "";

enable_buttons(false);

}

void enable_buttons(bool stat)

{

//устанавливаем доступность кнопок

btnDelete.Enabled = stat;

btnAutoCAD.Enabled = stat;

btnTiff.Enabled = stat;

}

void save(String pattern)

{

string pictname = Application.StartupPath + (pattern == "dxf" ? "\\draft\\" : "\\img\\") + this_draft.id + "." + pattern;

if (!File.Exists(pictname))

{

MessageBox.Show("Исходный файл " + pictname + " не найден!");

return;

}

SaveFile.Filter = (pattern == "*" ? "Все файлы" : "Файлы " + pattern.ToUpper()) + " (*." + pattern + ")|*." + pattern;

SaveFile.ShowDialog();

if (SaveFile.FileName.Length > 0)

{

try

{

File.Copy(pictname, SaveFile.FileName);

}

catch (Exception)

{

MessageBox.Show("Не удалось скопировать файл.");

return;

}

}

}

private void btnFind_Click(object sender, EventArgs e)

{

int firstid=0; //первый найденный id

bool finded=false; //нашли ли мы что-нибудь

if (txtKey.Text.Length == 0)

{

MessageBox.Show("Введите ключевое слово!");

return;

}

SqlCommand cmd = conn.CreateCommand();

//поиск по ключевому слову

cmd.CommandText = "SELECT draft.* FROM draft" +

" JOIN subclass ON (subclass.id = draft.subclassid)" +

" WHERE draft.title LIKE '%" + txtKey.Text + "%'" +

" ORDER BY subclass.classid, subclass.id, draft.title";

SqlDataReader reader = cmd.ExecuteReader();

while (reader.Read())

{

if (!finded) //если это первый найденный чертеж

{

clear_lists();

firstid = Convert.ToInt32(reader[0]);

}

finded = true;

DraftList.Items.Add(reader[2]);

DraftListID.Items.Add(reader[0]);

}

reader.Close();

if (!finded)

{

MessageBox.Show("Оборудование с данным названием не найдено!");

}

else

{

draft_select(firstid);

}

}

private void btnDelete_Click(object sender, EventArgs e)

{

string pass = "";

string filename = "";

uint password = 1004990;

InputBox("Введите пароль", "Пароль: ", ref pass);

if (pass.Length == 0)

{

return;

}

try

{

//проверка пароля

if (Convert.ToInt32(pass) == password)

{

SqlCommand cmd = conn.CreateCommand();

//удаление чертежа по заданному id

cmd.CommandText = "DELETE FROM draft WHERE id = " + this_draft.id;

cmd.ExecuteNonQuery();

subclass_select(this_draft.subclassid);

filename = Application.StartupPath + "\\img\\" + this_draft.id + "." + this_draft.imgext;

if (File.Exists(filename))

{

File.Delete(filename);

}

filename = Application.StartupPath + "\\draft\\" + this_draft.id + ".dxf";

if (File.Exists(filename))

{

File.Delete(filename);

}

}

else

{

MessageBox.Show("Неверный пароль");

}

}

catch (Exception)

{

MessageBox.Show("Неверный пароль");

}

}

private void btnHelp_Click(object sender, EventArgs e)

{

//вызов справки

Form frmHelp = new frmHelp();

frmHelp.Show();

}

private void txtKey_KeyPress(object sender, KeyPressEventArgs e)

{

//нажатие Enter в поле ввода ключевого слова

if (e.KeyChar == 13)

{

btnFind_Click(sender, e);

}

}

private void pctMain_Paint(object sender, PaintEventArgs e)

{

}

}

}

----------------------------------frmPass.cs---------------------------------------

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace drafts

{

public partial class frmPass : Form

{

public frmPass()

{

InitializeComponent();

}

private void frmPass_FormClosed(object sender, FormClosedEventArgs e)

{

Form frmMain = new frmMain();

frmMain.Show();

}

private void button1_Click(object sender, EventArgs e)

{

int pass = 1004990;

if (textBox1.Text == pass.ToString())

{

Form frmAdm = new frmAdm();

this.Hide();

frmAdm.ShowDialog();

}

else

{

MessageBox.Show("Введите правильный пароль", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

{

if (e.KeyChar == 13)

{

button1_Click(sender, e);

}

}

private void frmPass_Load(object sender, EventArgs e)

{

}

}

}

Приложение Б

Структурная схема сбора, обработки, и передачи информации на предприятии

«Эра»

Приложение В

Техническое задание от предприятия

Чертежи Машин

Составляется программа просмотра чертежей машин, добавленных в базу данных. А также админка для добавления чертежей в базу данных.

Все элементы программы должны находиться в 1-м файле.

Программа просмотра чертежей машин

Окно программы имеет размер 1000х700 пикселей.

1 Схема программы просмотра чертежей

Создается программа просмотра чертежей, подгружающая информацию из наполняемой БД.

На рис. 1 изображена схема. На ней схематично изображено расположение всех требуемых элементов программы.

Блок «Классы»

В программе учитываются три класса машин. Для выбора класса необходимо отобразить 3 кнопки:

  • Кнопка класса «Металлы»;

  • Кнопка класса «Полимеры»;

  • Кнопка класса «Роботы».

Область «Подклассы»

Данная область является скролируемой, в том случае, если подклассов больше, чем помещается в отведенной им области.

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

Блок «Поиск»

Данный блок состоит из 2-х частей:

  • Поле введения ключевого слова;

  • Кнопка «Найти». При нажатии на эту кнопку происходит следующее:

    • Если по ключевому слову ничего не найдено то:

      • Не происходит изменений ни в одной из областей программы;

      • Появляется Системное сообщение (Alert). До закрытия данного алекрта, все действия программы заблокированы. Сообщение содержит:

        • Текст: «Оборудование с данным названием не найдено!»

        • Кнопка «Ок». При нажатии на которую системное сообщение закрывается, не изменяя ничего в областях программы;

    • Если по ключевому слову есть совпадения, то происходит следующее:

      • В Область «Подклассы» ничего не подгружается. Она остается (или становится) пустой;

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

    1. Классу;

    2. Подклассу;

    3. Названию.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]