41667

Поиск данных и фильтрации в среде программирования Borland C++Builder

Лабораторная работа

Информатика, кибернетика и программирование

Компонент Table позволяет не только отображать, редактировать и упорядочивать данные, но и отсортировывать записи по определенным критериям. Фильтрация может задаваться свойствами Filter,Filtered и FilterOptions компонента Table.

Русский

2013-10-24

288.5 KB

64 чел.

5-6.02.13
Тема:  поиск данных и фильтрации в среде программирования
 Borland C++Builder

1.1. Фильтрация данных.

Компонент Table позволяет не только отображать, редактировать и упорядочивать данные, но и отсортировывать записи по определенным критериям. Фильтрация может задаваться свойствами Filter,Filtered и FilterOptions компонента Table. Свойство Filtered включает или выключает использование фильтра. А сам фильтр записывается в свойство Filter в виде строки, содержащей определенные ограничения на значения полей. Например, можно задать в свойстве Filter    

N_gr=’И312’                

и установить свойство Filtered в true, так, что уже в процессе проектирования в таблице отобразятся только те записи, в которых поле N_gr имеет значение ‘И312’. Обратите внимание на то, что в условии фильтрации строки заключаются в одинарные, а не в двойные кавычки.

В условиях сравнения строк можно использовать символ звездочки «*», который, как и в обычных шаблонах означает: «любое количество любых символов. Например, фильтр

N_gr=’И31*’               

приведет к отображению всех записей, в которых значение поля N_gr начинается с «И31». Но для того, чтобы это сработало, надо, чтобы в опциях, содержащихся в свойстве FilterOptions была выключена опцияfoNoPartialCompare, запрещающая частичное совпадение при сравнении (эта опция выключена по умолчанию). Другая опция в свойстве FilterOptions  foCaseInsensitive делает сравнение строк нечувствительным к регистру, в котором записано условие фильтра. Если включить эту опцию, то слова «И312» и «и312» будут считаться идентичными.

При записи условий можно использовать операции отношения =, >, >=, <, <=, <>, а также логические операции and, or и not. Например, вы можете написать фильтр

(N_gr=’И312’) and (Year_p=2003)

который отобразит записи студентов И312 группы, поступивших в 2003 г. Но использовать в фильтре имена вычисляемых полей не разрешается.

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

Table1->Filtered = false;

Table1->Filter = (N_gr=’И312’) and (Year_p=2003);

Table1->Filtered =true;


5.2. Поиск данных


Наборы данных имеют ряд методов, позволяющих осуществлять навигацию — перемещение по таблице:    

Таблица 5.1

Таблица навигации



Наименование


Назначение


1


First


Перемещение к первой записи


2


Last


Перемещение к последней записи


3


Next


Перемещение к следующей записи


4


Prior


Перемещение к предыдущей записи


5


MoveTo (int i)


Перемещение на i записей


                         

Любое перемещение по набору, находящемуся в состоянии dsEdit, автоматически вызывает метод Post,который пересылает текущую запись, если она была изменена, в базу данных. И после этого уже невозможно применить метод Cancel для уничтожения изменений. Поэтому надо принимать меры, чтобы в наборе данных, находящемся в состоянии dsEdit, перед любым перемещением происходила проверка правильности, или перемещаться по набору в каком-то другом состоянии (например, в dsBrowse).

При перемещениях можно совершить ошибку, выйдя за пределы имеющихся записей. Например, если вы находитесь на первой записи и выполняете метод Prior, то вы выйдете за начало таблицы, а если вы находитесь на последней записи и выполняете метод Next, то вы окажетесь после последней записи. Чтобы контролировать начало и конец таблицы, существуют два свойства: Eof (end-of-file) — конец данных, и Bof(beginning of file) — начало данных. Эти свойства становятся равными true, если делается попытка переместить курсор соответственно за пределы последней или первой записи, а также после выполнения методов соответственно Last и First.

Рассмотрим пример. Создадим выпадающий список с именем CBGr, который заполняется данными, содержащимися в полях N_gr всех записей таблицы, соединенной с компонентом Table1. Это можно сделать следующим кодом:

CBGr->Clear();

Table1->First();

while (!Table1->Eof)

{

CBGr->Items->Add(Table1N_gr->AsString);

Table1->Next();

}

CBGr->ItemIndex=0;

Table1->First();

Первый оператор кода очищает список CBGr. Второй — устанавливает курсор таблицы на первую запись. Далее следует цикл по всем записям, пока не достигнута последняя, что проверяется выражением Tablel->Eof. Для каждой записи в список заносится значение поля N_gr, после чего методом Next курсор перемещается к следующей записи. После окончания цикла индекс списка и курсор таблицы переводятся соответственно на первую строку и запись.

Поиск записей. Одна из важнейших для пользователя операций с базами данных — поиск записей по некоторому ключу. Существует несколько методик поиска записей, которые можно назвать SetKey, FindKey,Lookup и Locate.

Начнем с методики SetKey. Для ее применения таблица предварительно должна быть индексирована по тому полю, по которому должен будет проводиться поиск. Затем таблица устанавливается в состояние поискаdsSetKey. Для этого используется метод SetKey. В состоянии dsSetKey набор данных воспринимает последующий оператор присваивания значения полю не как присваивание, а как задание ключа поиска. Поэтому после установки состоянии dsSetKey оператором присваивания устанавливается требуемое значение ключа поиска по интересующему полю. В заключение методом GotoKey курсор переводится на запись, в которой значение указанного поля равно ключу. Если таких записей несколько, то курсор переводится на первую из них. Если соответствующая запись не находится, то метод GotoKey возвращаетfalse. Для полей типа строк лучше использовать не метод GotoKey, а метод GotoNearest. Этот метод перемещает курсор на первую запись, значение поля в которой максимально близко к ключу, таким образом, он сработает и тогда, когда совпадение не полное. Метод GotoNearest можно применять и к числовым полям. В этом случае он переместит курсор на первую запись, значение поля в которой больше или равно заданному значению ключа.

    Например, если вы хотите найти первую запись, в которой год поступления (поле Year_p) равен заданному пользователем в окне редактирования EYear, вы можете написать операторы:

Table1->IndexFieldName=”Year_p”;

Table1->SetKey();

Table1->FieldByName(“Year_p”)->AsString=EYear->text;

if (!Table1->GotoKey())

ShowMessage(“Запись не найдена”);

Первый оператор индексирует набор данных по полю Year_p, второй переводит набор данных в состояниеdsSetKey, третий задает ключ поиска, а четвертый осуществляет переход к соответствующей. записи или сообщает об отсутствии такой записи.

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

Table1->IndexFieldName=”Fam”;

Table1->SetKey();

Table1->FieldByName(“Fam”)->AsString=EFam->text;

Table1->GotoNearest();

Даже если точно такой фамилии не найдется, курсор перейдет на наиболее похожую (совпадающую по первым символам).

Методика поиска FindKey еще богаче по своим возможностям. В этой методике таблица также должна быть проиндексирована по тем ключевым полям, по которым осуществляется поиск. Функция FindKey определена следующим образом:

Bool _fastcall FindKey (const System::TVarRec * KeyValues, 

const int KeyValues_Size); 

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

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

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

OPENARRAY(TVarRec, (список ключей))

Макрос OPENARRAY может воспринимать список, включающий до 19 элементов, разделенных запятыми.

Если мы хотим выполнить тот же поиск по фамилии, что и приведенный выше, то соответствующий код может иметь вид:

Table1->IndexFieldNames = “Fam”;

Table1->FindNearest(&TVarRec(EFam->Text),0);

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

Table1->IndexFieldNames = “N_gr, Fam ”;

Table1->FindNearest(OPENARRAY

(&TVarRec,(EGroup->Text,EFam->Text)) );

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

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

Table1->FindNearest(&TVarRec(EFam->Text),0);

Метод Locate. Этот метод объявлен следующим образом:

bool _fastcall Locate(const System::AnsiString KeyFields,

constSystem::Variant &KeyValues,

TLocateOptions Options);

В качестве первого параметра KeyFields передается строка, содержащая список ключевых полей. В качестве второго параметра передается KeyValues — массив ключевых значений. А третий параметр Options является множеством опций, элементами которого могут быть loCaselnsensitive — нечувствительность поиска к регистру, в котором введены символы, и loPartialKey — допустимость частичного совпадения. Метод возвращает false, если искомая запись не найдена.

В простейшем случае применение Locate отличается от рассмотренных ранее методов только отсутствием необходимости индексировать набор данных определенным образом. Например, поиск (в том числе и рассмотренный выше ускоренный поиск) по фамилии может осуществляться операторами

TLocateOptions SearchOptions;

SearchOptions<<lopartialkey<<locaseinsensitive;< b="">

Table1->Locate(“Fam”,EFam->Text, SearchOptions);

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

TLocateOptions SearchOptions;

Table1->Locate(“Fam”,EFam->Text,

SearchOptions<<loPartialKey<<loCaseInsensitive);

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

TLocateOptions SearchOptions;

Variant locvalues[] = {EGroup->Text, EFam->Text};

Table1->Locate(“N_gr, Fam”,VarArrayOf (locvalues,1),

SearchOptions<<lopartialkey<<locaseinsensitive);< b="">

Метод
 Lookup. Этот метод определен следующим образом:

System::Variant
 _fastcall Lookup 

(const System::AnsiString KeyFields,

const System::Variant &KeyValues,

const System::AnsiString ResultFields);

Первые два параметра аналогичны методу
 Locate. Третий параметр — строка, перечисляющая поля, значения которых возвращаются в виде массива Variant. Если не найдено соответствующей записи, функция возвращает false.

Например, если вы хотите найти запись, относящуюся к студенту, фамилия которого указана в окнеEFam,
 и вывести в окно EGroup номер группы, в которой он учится, то эти операции можно осуществить следующим образом:

EGroup->Text = Table1->Lookup (“Fam”, EFam->Text, ”N_r”);

Метод
 Lookup не изменяет положения курсора. Он только возвращает значения указанных полей. Они могут использоваться любым способом. В частности, они могут использоваться вместо параметраKeyValues в другом операторе Lookup или Locate. Это открывает широкие возможности формирования сложных запросов по нескольким таблицам.    


5.3. Пример создания программного приложения.


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

Откроем новое приложение и разместим на нем необходимые визуальные компоненты. Получим окно представленное на рис. 5.1.




Рис.5.1. Окно формы и размещенные на нем компоненты


Для этого перенесем на форму компоненты
 DataSource и Table. В свойстве DatabaseName компонентыTable занесем из списка базу данных Student, а в свойство TableName  Student. Для компонентыDataSource в свойство DataSet внесем значение Table1. С помощью компоненты Label расставим текст по форме, задавая соответствующие значения свойств Caption и Font. Для выбора фильтрации используем группу радиокнопок RadioGroup (назовем его RGF), выпадающий список ComboBox(назовем его CBGr), два элемента CSpintEdit (назовем их SEmin и SEmax). Выпадающий список определяет номер группы по которой будет производится фильтрация, по этой причине внесем в его свойство Items значения групп.

Для отображения данных таблицы данных используем две компоненты отображения данных
 DBGrid,DBEdit (свойство DataSource  DataSource1. DataField – соответствующее поле таблицы).

Для управления перемещением используем компоненту
 DBNavigator, причем используем только кнопки перемещения, заблокировав остальные (VisibleButton). Для работы установим основное свойство DataSource = DataSource1. Для ввода параметра поиска используем компонент Edit. 

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




Рис.5.2. Окно приложения «Фильтрация и поиск данных»


Рассмотрим подробнее настройку параметров фильтрации. Расположенная в приложении группа радиокнопок (RadioGroup) имеет значения свойств
 Items (Все, Группа, Год поступления), ItemIndex=0 иColumns = 3. Она позволяет установить вид фильтрации. При выборе пункта «Все» (по умолчанию) в окне таблицы выводятся все данные о студентах. При выборе пункта «Группа» фильтрация должна осуществляться по группам. Номер группы устанавливается выпадающим списком ComboBox для которого в свойство Items необходимо заранее внести список всех групп. Выбранная группа и определит критерий фильтрации по группам. При выборе пункта «Год поступления» фильтрация должна осуществляться по установленным годам. Период поступления задается элементамиCSpintEdit (CSEmin и CSEmax). Установим их свойства значения максимального и минимального значения, а также значения по умолчанию (свойства MaxValue, MinValue, Value). Шаг приращения года поступления установим равным 1 (свойство Increment). 


При изменении значения выбранной категории фильтрации необходимо определить реакции компоненты
 RadioGroup (событие OnClick). Ниже приведен текст кода.

if (RGF->ItemIndex==0)

Table1->Filtered = false;

else

{

if (RGF->ItemIndex==1)

Table1->Filter="N_gr='"+CBGr->Text+"'";

else

Table1->Filter="(Year_p<="+

IntToStr(SEmax->Value)+") and (Year_p>="+

IntToStr(SEmin->Value)+")";

Table1->Filtered = true;

}

Это же код можно ввести в свойство
 OnChange всех остальных компонент фильтрации. Таким образом при изменении любого параметра фильтрации будет выполняться фильтрация (рис. 5.3)



Рис.5.3. Пример работы приложения при фильтрации по группе.


Операция поиска будет выполняться при вводе в поле ввода номера зачетной книжки, причем фильтрация будет отменяться, т.е. перейдет в режим
 «Все». Для этого в событие OnChangeкомпоненты Edit1 (она использована в качестве окна редактирования поля ввода номера зачетной книжки) внесем следующий код.


RGF->ItemIndex=0;

Table1->FindNearest(&TVarRec(Edit1->Text),0);

Пример поиска студента по номеру зачетной книжки показан на рис. 5.4.




Рис.5.4. Поиск студента по введенному номеру зачетной книжки


Приложение готово. Для запуска нажмите кнопку
 (см. рис.5.4). В завершение работы закройте приложение, щелкнув на кнопке в правом верхнем углу. Для сохранения выберите команду <<Файл/Сохранить как>> и <<Файл/Сохранить проект как>>. Задайте имя проекта Stud


5.4. Контрольные вопросы

  1.  
    Как осуществляется доступ к данным в приложениях Borland C++Builder?
  2.  
    Что представляет собой фильтрация данных, и с помощью каких свойств она устанавливается?
  3.  
    Какими методами осуществляется навигация по базам данных в приложениях Borland C++Builder?
  4.  
    Каким образом выполняется поиск данных в приложениях Borland C++Builder. Какие методы поиска вы изучили в лабораторной работе?
  5.  
    Какие компоненты управления данными вы изучили в лабораторной работе №5.


Задание к лабораторной работе №5

  1.  
    Изучить теоретический материал.
  2.  
    Выписать в отчет ответы на контрольные вопросы.
  3.  
    Для разработанной в лабораторной работе №2 таблицы БД, создать приложение, обеспечивающее фильтрацию и поиск записей БД.
     

7-8.02.13

Тема: Компоненты отчета создания отчетов в среде программирования Borland C++ Builder” 


1. Создание отчетов


Для создания отчетов в Borland C++Builder включена система
 QuickReport. Компоненты этой системы размещены на странице QReport палитры компонентов.

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

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

Компонент
 QuickReport имеет ряд свойств, определяющих характеристики печати отчета:



Наименование


Назначение


1


PrinterSetting


Задает число копий отчета и диапазон печатаемых страниц


2


Page


Задает размер печатаемых страниц, определяет длину и ширину страницы


3


Options


Задает возможность установки колонтитулов


4


Units


Задает единицу измерения размеров страницы, полей и т.п. 


5


Zoom


Масштаб печати в процентах


6


ReportTitle


Заголовок окна предварительного просмотра



Свойство
 DataSet определяет набор данных, к которому подключается отчет. Этим набором может являться компонент типа TTable, TQuery. Он имеет два основных метода: Preview – предварительный просмотр и Print – печать.

Компоненты
 QRLabel, QRMemo, QRRichText, QRShape, QRImage, размещенные на полосах отчета являются аналогами обычных компонентов Label, Memo, RichText, Shape, Image. Основной особенностью этих компонент является возможность их печататься в тех полосах отчета, в которых они размещены. Они имеют два свойства, отсутствующие в обычных компонентах: Frame и Size.

Свойство
 Frame имеет ряд подствойств, определяющих рамку вокруг компонента. Свойство Size имеет подствойства определяющие размер и место размещения компонента при печати. Все определяется в единицах заданных свойством Units компонента QuickRep.

Рассмотрим свойства компонента
 QuickRep

  1.  
    Bands.
     Оно имеет ряд подсвойств:




Наименование


Назначение


1


HasTitle


Имеется полоса заголовка отчета, которая печатается один раз в начале отчета.


2


HasDetail


Имеется полоса детализации отчета, которая печатается столько раз, сколько записей в нее передается.


3


HasPageHeader


Имеется верхний колонтитул на каждой странице отчета.


4


HasPageFooter


Имеется нижний колонтитул на каждой странице отчета.


5


HasColumnHeader


Имеется заголовок печатаемой таблицы.



Рассмотрим компонент
 QRSysData. Он позволяет отображать в отчете некоторые системные данные, которые определяются в свойстве Data:



Наименование


Назначение


1


qrsDate


Текущая дата


2


qrsDateTime


Текущие дата и время


3


qrsDetailCount


Число записей в базе данных


4


qrsDetailNo


Текущий номер записи в базе данных


5


qrsPageNumber


Номер текущей страницы


6


qrsReportTitle


Загаловок отчета


7


qrsTime


Текущее время



Свойство
 Text определяет текст, предшествующий отображаемой величине.

Рассмотрим более подробно указанные компоненты в примере создания отчета.

2. Пример создания отчета


Построим отчет по базе данных
 Student, озаглавленный «Список студентов»

В окно формы созданного нового приложения разместим компонент
 QuickRep, Table, DataSource. Зададим для Table имя базы данных и имя таблицы (DatabaseName = Student, TableName= Student), а для источника данных DataSource (DataSet = Table1).

Свяжем компонент отчетов
 QuickRep с таблицей данных (DataSet = Table1). Разместим на верхней строке отчета компоненту QRSysData. В свойстве Data установим вывод системной даты.

Установим печать заголовка и поместим в ней метку
 QRLabel с заголовком «Список студентов», а также шапку таблицы.

Перенесем компонент
 QRSubDetail, который осуществляет циклический вывод записей на печать. Остается вставить компоненты QRDBText задав им свойства DataSet и DataField  Table1 и имена соответствующих полей. Полученное приложение показано на рис.6.1. 





Рис.6.1. Создание приложения- отчета


Для просмотра достаточно щелкнув правой кнопкой мыши вызвать команду Preview. Результат показан на рис.6.2.





Рис.6.2. Полученный в приложении отчет.


Создадим главную форму, с которой будет вызываться модуль печати. Прежде всего убедимся, что форма отчета невидима (свойство
 Visible равно False), а также зададим имя модуля формы и самой формы (вместо стандартных Units  Urep, Form1 – Frep). Добавим новую форму (команду File| NewForm). Назовем данную форму FMain , а ее модуль как UMain. 

Выполним команду главного меню
 Project/Option, в открывшемся окне Опций проекта перейдем на страницу Форм и в списке главных форм выберем главной вторую созданную форму. Вторая форма будет вспомогательной (см. рис.6.3.).





Рис.6.3. Окно опций проекта


Перенесем на форму две кнопки TButton. Обозначим их как «Печать», «Просмотр» (см. рис. 6.4.)



Рис. 6.4. Вид главной формы.


В обработчик события
 OnCLick кнопки “Печать” вставим оператор:

FRep->QuickRep1->Print();
 

В обработчик события
 OnCLick кнопки “Просмотр” вставим оператор:

FRep->QuickRep1->Preview();
 

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

6.3. Контрольные вопросы

  1.  
    Каким инструментом осуществляется создание отчетов в приложениях
     Borland C++Builder?
    1.  
      Какие свойства имеет компонент
       QuickRep?
    2.  
      Какие свойства имеет компонент
       QRSubDetail?
    3.  
      Какие компоненты отображают текстовую информацию в отчете?
    4.  
      Какова структура отчета?
    5.  
      Задание к лабораторной работе №6
  2.  
    Изучить теоретический материал.
  3.  
    Выписать в отчет ответы на контрольные вопросы.
  4.  
    Для разработанной в лабораторной работе №2 таблицы БД, создать приложение, обеспечивающее создание и печать отчета.


СПИСОК ЛИТЕРАТУРЫ.

  1.  
    Диго С.М. Проектирование баз данных. М.: Финансы и статистика, 2002 г.
  2.  
    Марков А.С. Базы данных. Введение в теорию и методологию. М.: Финансы и статистика, 2002 г.
  3.  
    Мейер Д. Теория реляционных баз данных. М., 1987. 608 с., ил.
  4.  
    Тихонов А.Ф., Тихонова Л.Н. Visual FoxPro 5.0. М., 1997. 466 с.
  5.  
    Архангельский А.Я. Программирование в C++ Builder 6 - М: ЗАО «Издательство БИНОМ» 2002 г.
  6.  
    Архангельский А.Я. Интегрированная среда разработки C++ Builder 5 – М: ЗАО «Издательство БИНОМ», 2000 г.
  7.  
    Архангельский А.Я. Работа с локальными базами данных в C++ Builder 5 – М: ЗАО «Издательство БИНОМ», 2000 г.
  8.  
    Архангельский А.Я. Язык SQL в C++ Builder 5 – М: ЗАО «Издательство БИНОМ», 2000 г.




СОДЕРЖАНИЕ

  1.  
    Предисловие……………………………………………………. ….3
    1.  
      Лабораторная работа №5………………………………………….4
    2.  
      Лабораторная работа №6……………………………………........14
    3.  
      Список литературы ……………………………………………….20

</lopartialkey<<locaseinsensitive);<></lopartialkey<<locaseinsensitive;<>


 

А также другие работы, которые могут Вас заинтересовать

22131. Осадка. Распределение накопленной деформации (εi) по объему осаженной заготовки 182 KB
  Расчет силы деформирования при осадке и построение графика технологических нагрузок. Мощность и работа пластической деформации при продольной осадке цилиндра. Работа деформирования при продольной осадке.Схема осадки:1 – нижняя плита; 2 – верхняя подвижная плита; 3 – цилиндрическая заготовка при продольной осадке; 4 – цилиндрическая заготовка при поперечной осадке.
22132. Метод баланса работ 36 KB
  В основу метода положено следующее положение: при пластической деформации работа внешних сил на соответствующих им перемещениях равна работе внутренних сил работе пластической деформации. Работа пластической деформации 2 Если упрочнение отсутствует то Чаще принимают равным выбранному по АВ – работа внешних сил: активной силы силы деформирования; сил трения. Работа сил трения берется со знаком минус. 3 где X Y Z – проекции силы действующей по участку поверхности dF на оси координат а UX UY UZ –...
22133. Феноменологическая теория разрушения металлов при холодной пластической деформации 98 KB
  Феноменологическая теория базируется на сложившихся в настоящее время физических представлениях о закономерностях разрушения металла при пластической деформации. Различными экспериментальными методами было показано что величина пластического разрыхления возрастает пропорционально степени деформации сдвига. Авторами данной теории была выдвинута следующая гипотеза: 1 где степень разрыхления частицы накопленная частицей деформация сдвига ab коэффициенты...
22134. Выдавливание. Расчет силы деформирования и построение графика технологических нагрузок 617.5 KB
  Основы теории штамповки выдавливанием на прессах М. Прямое выдавливание – технологическая операция в процессе которой происходит истечение металла 2 заключенного в замкнутой полости контейнер 3 в направлении движения рабочего инструмента 1 через отверстие поперечное сечение которого определяет поперечное сечение выдавливаемой части деформируемой заготовки. Обратное выдавливание – технологическая операция в процессе которой происходит истечение металла из замкнутой полости в направлении обратном встречном движению рабочего...
22135. Вытяжка без утонения 314 KB
  Схема операции – вытяжка из осесимметричной полой заготовки. При этом величина зазора между матрицей и пуансоном составляет не менее толщины исходной листовой заготовки Рис. Пример заготовки и детали.
22136. Вытяжка с утонением стенки 165 KB
  Механическая схема деформации и распределение деформации по очагу пластической деформации. Степень деформации при вытяжке оценивают коэффициентом вытяжки: или см. Частицы расположенные у нижней границы очага пластической деформации получают максимальную деформацию: . Частицы расположенные у верхней границы очага пластической деформации получают минимальную деформацию.
22137. Волочение 197 KB
  а б Рис. Рис. Допущения: напряжённое состояние плоское; продольные скорости металла одинаковы в пределах поперечного сечения ОПД очаг пластической деформации; и считаем главными напряжениями Сечениями z и zdz выделим элемент ОПД Рис. Рис.
22138. Метод верхней оценки 162.5 KB
  Сущность метода верхней оценки заключается в разбиении заготовки на жесткие блоки наделённые возможностью относительного скольжения и составлении баланса мощностей внешних и внутренних сил. При этом мощность пластической деформации рассчитывается как сумма мощностей сил трения по всем поверхностям скольжения жестких блоков относительно друг друга и инструмента. Скорости скольжения рассчитываются путём построения годографа скоростей. Строят годограф скоростей и определяют все скорости относительного скольжения всех блоков.
22139. Вырубка и пробивка 183 KB
  В верхнем небольшом по толщине слое металла примыкающем к пуансону. В нижнем небольшом по толщине слое металла прилегающем к матрице. 4 В срединном слое металла наибольшом по толщине двухосная схема напряжений и схема деформации сдвига. Местное поверхностное смятие развивается по толщине пока вся толщина металла не будет охвачена пластической деформацией; на третьей стадии происходит пластическая деформация в узкой по толщине кольцевой зоне пластический сдвиг.