- •30 Листов
- •1 Индивидуальное задание на практику
- •2 Задание руководителя практики от предприятия
- •3 Краткие сведения о предприятии
- •4 Выпускаемая продукция и услуги предприятия «эра»
- •5 Технические средства обработки информации
- •6 Проектирование базы данных
- •7 Краткое техническое описание программы
- •Область отображения чертежей
- •Справка
- •Административный модуль
- •Список сокращений
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). До закрытия данного алекрта, все действия программы заблокированы. Сообщение содержит:
Текст: «Оборудование с данным названием не найдено!»
Кнопка «Ок». При нажатии на которую системное сообщение закрывается, не изменяя ничего в областях программы;
Если по ключевому слову есть совпадения, то происходит следующее:
В Область «Подклассы» ничего не подгружается. Она остается (или становится) пустой;
В Область отображения чертежей по ключевому слову отображается результат. При отображении результатов поиска, упорядочивание происходит по следующим критериям:
Классу;
Подклассу;
Названию.