Разработка программных средств формирования групповой спецификации в среде Creo
Разработка программного продукта для экспорта спецификации из приложения PartList. Выбор метода передачи информации в файл, формата для представления. Разработка конвертера, реализация пользовательского интерфейса. Обоснование актуальности разработки.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 25.09.2014 |
Размер файла | 2,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
else
{
teg += fileBuffer [i];
if (teg == "section")
{
positionSectionStart [section] [0] = positionStart;
positionSectionStart [section] [1] = 0;
line++;
sizeAllLine += sizeLine *\ AddLine_BeforeAfter (positionSection10_29, \
§ion10_29, &line, kline_before, kline_after, positionSectionStart,section, K, T);
bSection = true;
}
else
if (teg == "line")
{
line++;
if ( (line == K) || ( ( (line-K) %T ==\ 0) && (line > K)))
{
CString copyline;
memcpy (copyline. GetBufferSetLength (sizeLine) \
,&fileBuffer [positionStart],sizeLine);
if (CStringA (copyline)! =\ CStringA (sLine))
{
positionSectionStart [section] [0] = positionStart;
positionSectionStart [section] [1] = 2;
line+=2;
sizeLine10_29 += sizeLine*2;
nline++;
section++;
}
}
if ( (line == (K+1)) || ( ( (line- (K+1)) %T == 0) && (line > (K+1))))
{
CString copyline;
memcpy (copyline. GetBufferSetLength (sizeLine),&fileBuffer\
[positionStart],sizeLine);
if (CStringA (copyline)! = CStringA (sLine))
{
positionSectionStart [section] [0] = positionStart;
positionSectionStart [section] [1] = 1;
line++;
nline++;
sizeLine10_29 += sizeLine;
section++;
}
}
bLine = true;
}
else
if (teg == "stamp")
{
teg = "";
do{
i++;
teg += fileBuffer [i];
if (teg == "kline_before")
{
teg = "";
do{
i++;
if ( (fileBuffer [i] == '\"') && (m_yes_kline == FALSE))
kline_before = atoi (&fileBuffer [i+1]);
}while (fileBuffer [i]! = '\"');
}
else
if (teg == "kline_after")
{
teg = "";
do{
i++;
if ( (fileBuffer [i] == '\"') && (m_yes_kline == FALSE))
kline_after = atoi (&fileBuffer [i+1]);
}while (fileBuffer [i]! = '\"');
}
if (fileBuffer [i] == ' ') teg = "";
// Ищем закрывающий символ элемента stamp
if (fileBuffer [i] == '>')
positionStampBefore = i;
}while (fileBuffer [i]! = '>');
}
}
}
if ( (bSection == true) && (fileBuffer [i] == '>'))
{
positionSectionEnd [section] = i+1;
section++;
}
if ( (bLine == true) && (fileBuffer [i] == '>'))
positionLineEnd = i+1;
}while (fileBuffer [i]! = '>');
bSection = false;
bLine = false;
teg = "";
}
}
DWORD dPage;
// Расщитываем число добавляемых строк
if (GroupSpecification)
{
if (line > 10)
{
dPage = kline = (line - 10) / 19;
kline = line - 10 - kline * 19;
kline =19 - kline; // kline - искомое число строк
}
else kline = 10 - line;
}
else
{
// line содержит общее количество просмотренных строк
if (line > 29)
{
dPage = kline = (line - 29) / 32;
kline = line - 29 - kline * 32;
kline =32 - kline; // kline - искомое число строк
}else kline = 29 - line;
}
DWORD sizeLine_after = sizeLine * kline_after;
char *line_after = new char [sizeLine_after];
char sTemp [7];
itoa (dPage+2,sTemp,10);
CString sKPage;
sKPage = " kpage=\""; sKPage+= sTemp; sKPage+= "\"";
for (DWORD i = 0; i<sizeLine_after; i+= sizeLine)
memcpy (&line_after [i],sLine,sizeLine);
// Расчёт размера нового файла.
// Размеры: текущего файла, добавляемых линий до и после секций,
// добавляемых строк в конце файла, параметра указывающего кол-во страниц,
// строк добавляемых для переноса line на новый лист
DWORD fileSizeNew = fileSize + sizeAllLine + kline*sizeLine+sKPage. GetLength () +\ sizeLine10_29;
// Выделение блока оперативной памяти для нового файла
char *fBuffer = new char [fileSizeNew];
memcpy (fBuffer,fileBuffer,fileSize);
// Включаем в тег stamp, атрибут kpage содержащий кол-во листов в документе
memcpy (&fBuffer [positionStampBefore1], (CStringA) sKPage. GetBuffer (),\
sKPage. GetLength ());
memcpy (&fBuffer [positionStampBefore - 1 +\
sKPage. GetLength ()],&fileBuffer [positionStampBefore-1],fileSize - \
positionStampBefore-1);
DWORD size3 = sKPage. GetLength ();
unsigned int t = 0, k = 0;
for (DWORD j = 0; j<section; j++)
{
// Если это позиция названия раздела
if (positionSectionStart [j] [1] == 0)
{
for (k = 0; k<positionSectionStart [j] [2]; k++)
{
memcpy (&fBuffer [positionSectionStart [j] \
[0] +size3],sLine,sizeLine);
size3 += sizeLine;
}
if ( (j == positionSection10_29 [t] [0]) && (section10_29! = - \
1) && ( (t<=section10_29)))
{
for (k = 0; k<positionSection10_29 [t] [1]; k++)
{
memcpy (&fBuffer [positionSectionStart [j] [0] +\
size3],sLine,sizeLine);
size3 += sizeLine;
}
t++;
}
memcpy (&fBuffer [positionSectionStart [j] [0] +size3],\
&fileBuffer [positionSectionStart [j] [0]],fileSize - positionSectionStart [j] [0]);
memcpy (&fBuffer [positionSectionEnd [j] +size3] \
,line_after,sizeLine_after);
size3 += sizeLine_after;
memcpy (&fBuffer [positionSectionEnd [j] +size3],\
&fileBuffer [positionSectionEnd [j]],fileSize - positionSectionEnd [j]);
}
else // Если это первая или последняя строка таблицы
{
for (k = 0; k<positionSectionStart [j] [1]; k++)
{
memcpy (&fBuffer [positionSectionStart [j] [0] +size3],\
sLine,sizeLine);
size3+=sizeLine;
}
memcpy (&fBuffer [positionSectionStart [j] [0] +size3],\
&fileBuffer [positionSectionStart [j] [0]],fileSize - positionSectionStart [j] [0]);
}
}
// Дописываем строки в конце файла XML
for (DWORD k = 0; k < kline; k++)
{
memcpy (&fBuffer [positionLineEnd+size3],sLine,sizeLine);
size3+=sizeLine;
}
memcpy (&fBuffer [positionLineEnd+size3],&fileBuffer [positionLineEnd],\
fileSize - positionLineEnd);
// Формируем имя промежуточного файла
CString strPartDir;
strPartDir = "temp\\";
strPartDir += sPartDir;
strPartDir += "xml";
HANDLE hFileWrite = CreateFile (strPartDir,GENERIC_WRITE,0,0,CREATE_ALWAYS,0,0);
if (hFileWrite == INVALID_HANDLE_VALUE)
{
FreeBuffer (fileBuffer,fBuffer,positionSectionStart,\
positionSection10_29,line_after,counter);
return true;
}
DWORD bufferWrite;
bReadWriteError = WriteFile (hFileWrite,fBuffer,fileSizeNew,&bufferWrite,0);
if ( (hFileWrite == INVALID_HANDLE_VALUE) || (! bReadWriteError))
{
FreeBuffer (fileBuffer,fBuffer,positionSectionStart,\
positionSection10_29,line_after,counter);
CloseHandle (hFileWrite);
return true;
}
CloseHandle (hFileWrite);
FreeBuffer (fileBuffer,fBuffer,positionSectionStart,\
positionSection10_29,line_after,counter);
delete [] positionSectionEnd;
return false;
}
// Функция определяющая количество строк добавляемых до и после элементов // section
DWORD CXMLСonverterDlg:: AddLine_BeforeAfter (DWORD **positionSection10_29, DWORD *section10_29,DWORD *line,DWORD kline_before, DWORD kline_after, DWORD **positionSectionStart,DWORD section, DWORD K, DWORD T)
{
// ---------------------------------------------------------------------
// К - количество строк на первой странице спецификации
// Т - количество строк на 2й и последующих страницах спецификации
// ---------------------------------------------------------------------
positionSection10_29 [ (*section10_29) +1] [1] = - 1;
bool yes = false;
for (DWORD k = 0; k < kline_before + 1; k++)
{
// Если секция может попасть на вторую строку листа, уменьшаем отступ на // необходимое кол-во строк
if ( ( (*line) + k == 2) || ( (*line) + k == (K+2)) || ( ( ( (*line) + k - \
(K+2)) % T == 0) && ( ( (*line) + k) > (K+2))))
{
positionSectionStart [section] [2] = k;
yes = true;
break;
}
}
// Если не нужно изменять количество строк, принимаем указанное число
if (! yes) positionSectionStart [section] [2] = kline_before;
// Увеличиваем счётчик строк на количество добавляемых строк перед секцией
*line += positionSectionStart [section] [2];
// Содержит кол-во добавляемых строк для переноса section на другой лист
DWORD nSection10_29 = 0;
for (DWORD k = 0; k < kline_after + 2; k++)
{
// Проверяем не попала ли секция в конец листа спецификации
if ( ( ( (*line) +k) == K) || ( ( ( ( (*line) +k-K) %T) == 0) && ( ( (*line) +k) > K)))
{
(*section10_29) ++;
positionSection10_29 [*section10_29] [0] = section;
positionSection10_29 [*section10_29] [1] = k + 2;
// Должны быть добавлены как минимум 2 строки
nSection10_29 += k + 2;
*line += k + 2;
break;
}
}
// Проверяем не попала ли секция в начало листа спецификации
if ( (*line == 1) || (*line == (K+1)) || ( ( ( (*line) +k - \
(K+1)) %T==0) && ( ( (*line) +k) > (K+1))))
{
(*section10_29) ++;
positionSection10_29 [*section10_29] [0] = section;
positionSection10_29 [*section10_29] [1] = k + 1;
nSection10_29 += k + 1;
*line += k + 1;
break;
}
// Увеличиваем счётчик строк, на количество добавляемых строк после секции
*line += kline_after;
// Возвращаем общее число добавляемых строк (до и после элемента section)
return positionSectionStart [section] [2] + kline_after + nSection10_29;
}
void CXMLСonverterDlg:: FreeBuffer (char *fileBuffer,char *fBuffer,\
DWORD **positionSectionStart,DWORD **positionSection10_29,char *line_after,\ DWORD counter)
{
delete [] line_after;
delete [] fileBuffer;
delete [] fBuffer;
for (DWORD n=0; n<counter; n++)
{
delete [] positionSectionStart [n];
delete [] positionSection10_29 [n];
}
}
DWORD CXMLСonverterDlg:: Counter_of_lines (char *fileBuffer,DWORD fileSize,\
DWORD K, DWORD T)
{
DWORD counter_line = 0;
for (DWORD i = 0; i<fileSize; i++)
{
if (fileBuffer [i] == '<')
{
counter_line++;
}
}
return counter_line;
}
Приложение С
ПЕРВАЯ СТРАНИЦА ГРУППОВОЙ СПЕЦИФИКАЦИИ, ПРЕДСТАВЛЕННОЙ В ФОРМАТЕ PDF
Приложение D
ВТОРАЯ СТРАНИЦА ГРУППОВОЙ СПЕЦИФИКАЦИИ, ПРЕДСТАВЛЕННОЙ В ФОРМАТЕ PDF
Размещено на Allbest.ru
Подобные документы
Структура и представление информации с помощью технологий XML-XSL. Применение XSLT-инструкций для разработки шаблона XSL. Алгоритм преобразования XML. Разработка конвертера XML-представлений групповых спецификаций на сборочное изделие в PDF-формат.
дипломная работа [3,6 M], добавлен 09.06.2014Реализация программного средства "Действия над матрицами". Разработка кода программного продукта на основе готовой спецификации на уровне модуля. Использование инструментальных средств на этапе отладки программного модуля. Выбор стратегии тестирования.
отчет по практике [296,1 K], добавлен 19.04.2015Проектирование структуры и архитектуры программного продукта. Реализация программы конвертера файлов баз данных. Описание пользовательского интерфейса. Выбор порядка конвертации dbf файлов. Создание и исполнение шаблонов. Расчет себестоимости продукта.
дипломная работа [2,2 M], добавлен 21.06.2013Разработка и реализация демонстрационного многопоточного приложения. Выбор основных средств реализации. Описание логики работы приложения и разработка программного обеспечения. Описание пользовательского интерфейса. Реализация потоков в Delphi.
курсовая работа [462,5 K], добавлен 10.08.2014Обзор подходов к разработке музейных приложений с элементами дополненной реальности, формирование требований к ним. Выбор методов разработки приложения, разработка пользовательского интерфейса. Принципы тестирования. Реализация раздела "Распознавание".
дипломная работа [2,8 M], добавлен 03.07.2017Возможности среды программирования delphi при разработке приложения с визуальным интерфейсом. Разработка спецификации программного обеспечения и на ее основе кода программного продукта. Отладка программы "трассировкой", ее тестирование и оптимизация.
курсовая работа [501,4 K], добавлен 07.12.2016Разработка функциональной модели предметной области. Построение UML диаграмм в среде Pacestar UML Diagrammer. Выбор программных средств разработки. Разработка логической и физической модели данных. Разработка клиентского приложения ИС в среде Access.
курсовая работа [2,2 M], добавлен 09.03.2011Разработка алгоритма поставленной задачи и реализация средствами автоматизированного проектирования. Составление программного продукта на основе готовой спецификации на уровне модуля, проведение его тестирования, использование инструментальных средств.
контрольная работа [257,5 K], добавлен 01.05.2015Исследование спецификации логической игры "Сапёр". Системное и функциональное проектирование приложения. Разработка программных модулей. Обзор классов, необходимых для создания интерфейса данного приложения. Инструменты для реализации логической игры.
курсовая работа [1,2 M], добавлен 13.01.2016Организация электронного документооборота. Создание базы данных. Анализ существующих программных средств автоматизации. Обоснование выбора платформы разработки программного продукта. Выбор почтового клиента. Реализация нулевого прототипа системы.
курсовая работа [384,1 K], добавлен 14.11.2016