Основы программной инженерии

Контрольная работа по предмету «Программирование»
Информация о работе
  • Тема: Основы программной инженерии
  • Количество скачиваний: 17
  • Тип: Контрольная работа
  • Предмет: Программирование
  • Количество страниц: 13
  • Язык работы: Русский язык
  • Дата загрузки: 2015-01-13 04:02:07
  • Размер файла: 461.98 кб
Помогла работа? Поделись ссылкой
Информация о документе

Документ предоставляется как есть, мы не несем ответственности, за правильность представленной в нём информации. Используя информацию для подготовки своей работы необходимо помнить, что текст работы может быть устаревшим, работа может не пройти проверку на заимствования.

Если Вы являетесь автором текста представленного на данной странице и не хотите чтобы он был размешён на нашем сайте напишите об этом перейдя по ссылке: «Правообладателям»

Можно ли скачать документ с работой

Да, скачать документ можно бесплатно, без регистрации перейдя по ссылке:

1. Написать программный комплекс, состоящий из приложения и динамической библиотеки. Приложение должно выполнять простейшие операции с текстовыми файлами. Ключи:
- Входной файл;
- Выходной файл;
- Операция (сортировка строк по убыванию/возрастанию, разрезание строк до определенной длины).
Исходный код библиотеки:
streditlib.h
#ifndef _MYFUNC_H
#define _MYFUNC_H

#include <string>
#include <list>
#include <fstream>
#include <vector>
#include <algorithm>
#include <iostream>
#include <locale>
#include <stdio.h>

using namespace std;

extern int Sort(string Input, string Output);//Функциясортировки
extern int Crop(string Input, string Output, int N);//Функцияобрезаниястрок

#endif

streditlib.cpp
#include "myfunc.h"

bool compare(string a, string b)
{
return (a.compare(b) < 0);
}

int Sort(string Input, string Output)//Функциясортировки
{
vector<string> list;//Массивстрок
string line;
//Чтениефайла
fstreamfileRead(Input.c_str());
for ( string line; getline(fileRead, line); )
{
list.push_back(line);
}
fileRead.close();

sort(list.begin(), list.end(), compare);

//Записьфайла
ofstreamfileWrite(Output);
for ( int i = 0; i <list.size(); i++ )
{
fileWrite<< list[i] << "
";
}
fileWrite.close();

return 0;
}

int Crop(string Input, string Output, int N)//Функцияобрезаниястрок
{
vector<string> list;//Массивстрок

//Чтениефайла
fstreamfileRead(Input.c_str());
for ( string line; getline(fileRead, line); )
{
list.push_back(line);
}
fileRead.close();

//Записьфайла
ofstreamfileWrite(Output);
for ( int i = 0; i <list.size(); i++ )
{
for ( int j = 0; j < N; j++ )
{
fileWrite<< list[i][j];
}
fileWrite<< "
";
}
fileWrite.close();

return 0;
}

Исходный код приложения
main.cpp
#include "stdafx.h"
#include "myfunc.h"
#include <stdlib.h>
#include <stdio.h>
#include <getopt.h>

int main(intargc, char* argv[])
{
std::locale rus("rus_rus.866");
std::wcout.imbue(rus);

string Input = "";
string Output = "";
intCropValue = -1;
bool sort = false;
int Help = 0;

const char* short_options = "hs::f:";

int c;
while (1)
{
static struct option long_opt[] =
{
{"help",no_argument,NULL,h},
{"size",required_argument,NULL,s},
{"file",required_argument,NULL,f},
{"crop",required_argument,NULL,c},
{"sort",no_argument,NULL,s},
{NULL,0,NULL,0}
};
intoptIdx;

if((c = getopt_long(argc, argv, short_options, long_opt, &optIdx)) == -1)
break;
switch( c )
{
case i:
Input = optarg;
break;
case o:
Output = optarg;
break;
case c:
CropValue = atoi(optarg);
break;
case s:
sort = true;
break;
case h:
Help = 1;
wcout<<L"Использование:
stredit [ПАРАМЕТР…]

Параметры:
-i ФАЙЛ, --input ФАЙЛ Входнойфайл
-o ФАЙЛ, --output ФАЙЛ Выходнойфайл
-c X, --crop X Обрезатьвсестрокидо Х символов
-s X, --sort X Сортировкастрок: X = 0 - повозрастанию,
X = 1 - поубыванию
-h, --help Показатьэтусправку
";
break;

}
}

if ( (Input == "" || Output == "" || (CropValue == -1 && sort==false)) && Help == 0 )
{
wcout<<L"Используйте -h, --help для вызова справки.
";
}
else
{
if ( CropValue != -1 )
{
Crop(Input, Output, CropValue);

if ( sort != false )
{
Sort(Output, Output);
}
}
else
{
if ( sort != false )
{
Sort(Input, Output);
}
}
wcout<< "Completed.";
}
return 0;
}

Если параметры указаны неверно приложение предлагает воспользоваться справкой


Рис.1.1 Ответ приложения на отсутствие параметров

Попытаемся вызвать справку командой --help

Рис.1.2 Справка
Проверка работы программы

Рис.1.3 Запуск программы с правильными параметрами
Как видим программа работает корректно.

Рис.1.4 Входной файл Рис.1.5 Выходной файл

2. Написать Makefile’ы для программного комплекса. Для библиотеки и основного приложения файлы пишутся отдельно. Вкаждом Makefile епредусмотретьправила complie, install, clean, uninstall.
Создадим две папки Program – папка с программой и Lib– с библиотекой, для каждой напишем свой Makefile.
Lib/Makefile
compile:compileobj
g++ -shared streditlib.o -o libstreditlib.so
compileobj:
g++ -fPIC -c streditlib.cpp -o streditlib.o
install:
cp libstreditlib.so /usr/lib
cpstreditlib.h /usr/include
clean:
rm libstreditlib.so
rmstreditlib.o
uninstall:
rm -rf /usr/lib/libstreditlib.so
rm -rf /usr/include/streditlib.h

Program/Makefile
compile:
g++ stredit.cpp -lstreditlib -o stredit
install:
cpstredit /usr/bin
clean:
rmstredit
uninstall:
rm -rf /usr/bin/stredit
Выполняем команду make


Рис.2.1 Сборка программы и библиотеки с помощью make

3. Написать скрипты конфигурации (configure) для программного комплекса. Для библиотеки и основного приложения файлы пишутся отдельно. Для облегчения процесса написания скрипта использовать утилиту autoconf.

Lib/configure.in
AC_PREREQ([2.69])

AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])

AC_CONFIG_SRCDIR([streditlib.cpp])
AC_CONFIG_HEADERS([config.h])

AC_PROG_CXX
AC_PROG_CC

AC_TYPE_SIZE_T

AC_CONFIG_FILES([Makefile])

AC_OUTPUT



Рис.3.1 Сборка библиотеки
Program/configure.in
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([stredit.cpp])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CXX

# Checks for libraries.
# FIXME: Replace `main with a function in `-lstreditlib:
AC_CHECK_LIB([streditlib], [main], [], [ AC_MSG_ERROR([Could not find STREDIT library]) ] )

# Checks for header files.
AC_CHECK_HEADERS([stdlib.h])

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile])
AC_OUTPUT


Рис.3.2 Ошибка библиотека не найдена


4. Написать файлы CMakeLists.txt для программного комплекса. Для библиотеки и основного приложения файлы пишутся отдельно. Для файла основной программы должна быть реализована функция проверки наличия библиотеки. Провести компиляцию программы и библиотеки с использованием созданных файлов и утилиты CMake.
Lib/CMakeLists.txt
cmake_minimum_required(VERSION 2.6)
project(streditlib)

set(CMAKE_INSTALL_PREFIX /home/max/Проекты/Lab4/Lib)

add_library(streditlib SHARED streditlib.cpp streditlib.h)

set(LIB_INSTALL_PATH /usr/lib/)
set(LIB_INCLUDE_PATH /usr/include/)

install(FILES libstreditlib.so DESTINATION ${LIB_INSTALL_PATH})
install(FILES streditlib.h DESTINATION ${LIB_INCLUDE_PATH})

add_custom_target(uninstall
COMMAND rm -rf ${LIB_INSTALL_PATH}/libstreditlib.so
rm -rf ${LIB_INCLUDE_PATH}/streditlib.h
)

Собираем библиотеку

Рис.4.1 Сборка библиотеки с помощью cmake
Program/CMakeLists.txt
cmake_minimum_required(VERSION 2.6)
project(stredit)

set(CMAKE_INSTALL_PREFIX /home/max/Проекты/Lab4/Program)

set(STREDITLIB_INCLUDE_HINT /usr/include)

find_path(STREDITLIB_INCLUDE_DIR streditlib.h HINTS ${STREDITLIB_INCLUDE_HINT})
if(NOT STREDITLIB_INCLUDE_DIR)
message(FATAL_ERROR "Headers of library stredit not found")
endif(NOT STREDITLIB_INCLUDE_DIR)

include_directories(${STREDITLIB_INCLUDE_DIR})

add_executable(stredit stredit.cpp)

set(STREDIT_LIBRARIES_HINT /home/max/Проекты/Lab4/lib)

find_library(STREDITLIB_LIBRARIES streditlib HINTS ${STREDIT_LIBRARIES_HINT})
if(NOT STREDITLIB_LIBRARIES)
message(FATAL_ERROR "Binary files of library stredit not found")
endif(NOT STREDITLIB_LIBRARIES)

target_link_libraries(stredit ${STREDITLIB_LIBRARIES})

install(TARGETS stredit DESTINATION /usr/bin)
install(FILES stredit.1.gz DESTINATION /usr/share/man/ru/man1)

add_custom_target(uninstall
COMMAND rm -rf /usr/bin/stredit
rm -rf /usr/share/man/ru/man1/stredit.1.gz)

Собираем приложение

Рис.4.2 Сборка приложения с помощью cmake

5. Написать документацию в формате man страниц для основной программы из программного комплекса. Документация в формате manстраниц хранится в /usr/share/man/, в частности на русском языке в /usr/share/man/ru/.
/usr/share/man/ru/man1/stredit.1.gz
.TH "stredit" "1" "22 декабря 2014" "версия 1.0" "Пользовательские команды"
.SH НАЗВАНИЕ
stredit - сортирует строки в указанном файле и/или обрезает их до заданной длины
.SH ИСПОЛЬЗОВАНИЕ:
stredit [ПАРАМЕТР…]

Параметры:
-i ФАЙЛ, --input ФАЙЛ Входной файл
-o ФАЙЛ, --output ФАЙЛ Выходной файл
-cX, --cropX Обрезать все строки до Х символов
-sX, --sortX Сортировка строк: X = 0 - по возрастанию,
X = 1 - по убыванию
-h, --help Показать справку
.SH ПРИМЕР:
stredit --input input.txt --output output.txt --crop 5 --sort 0

stredit -i input.txt -o output.txt -s 1

Для того чтобы просмотреть эту страницу нужно выполнить manstredit.
Выглядит она следующим образом:

Рис.5.1 man-страница
6. Создать установочные пакеты для компонентов программного комплекса. Тип пакетов - формат DEB. Список и состав пакетов следующий:
1. Программа. Пакет содержит:
1) откомпилированную версию программы;
2) документацию по программе.
2. Библиотека (основной пакет). Пакет содержит:
1) откомпилированную версию библиотеки.
3. Библиотека (пакет разработчика). Пакет содержит:
1) заголовочные файлы (расширение h).
Создадим соответственно 3 папки: stredit, streditlib и streditlib-dev.В каждую положим необходимые файлы в директории аналогичные установочным.
Параметры пакета хранятся в файле DEBIAN/control

Stredit/DEBIAN/control
Package: stredit
Version: 1.0
Section: utils
Priority: extra
Architecture: all
Depends: streditlib
Maintainer: SamartsevMaksim<aldan123a@yandex.ru>
Description: stredit
Сортировка и обрезание строк в файлах


Рис.6.1 Приложение нельзя установить если не установлена библиотека
Streditlib/DEBIAN/control
Package: streditlib
Version: 1.0
Section: libs
Priority: extra
Architecture: all
Maintainer: SamartsevMaksim<aldan123a@yandex.ru>
Description: streditlib
Библиотека streditlib

Streditlib-dev/DEBIAN/control
Package: streditlib-dev
Version: 1.0
Section: libs
Priority: extra
Architecture: all
Maintainer: SamartsevMaksim<aldan123a@yandex.ru>
Description: streditlib-dev
Библиотека streditlib-dev

Рис.6.2 Установка библиотеки


Рис.6.3 После установки библиотеки без проблем ставится приложение