Помощь в написании студенческих работ
Антистрессовый сервис

Разработка и реализация информационно-поискового справочника «Терморезисторы» на гибриде языков С и С++

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

В ходе создания курсового проекта я открыл для себя абсолютно новые методы сортировок: методом Шелла и методом быстрой сортировки. Самое интересное было в том, что сортировка методом Шелла иначе называется: сортировка методом вставок с погружением. Так же очень интересно было узнать, что быстрая сортировка не является наиболее быстрой сортировкой из всех существующих и ей уже более 40 лет. Кроме… Читать ещё >

Разработка и реализация информационно-поискового справочника «Терморезисторы» на гибриде языков С и С++ (реферат, курсовая, диплом, контрольная)

Учреждение образования Белорусский Государственный Университет Транспорта Кафедра Информационных технологий Курсовая работа по предмету: Информатика и информационные технологии

Выполнил: студент группы ЭС-22

Горбачёва К.С.

Проверил: преподаватель Балащенко Д.В.

Гомель 2010

Содержание

1. Разработка программы. Описание работы программы

2. Листинг программы Заключение Список литературы

меню поисковый справочник данные Язык программирования Си был разработан в лабораториях BellLabs в период с 1969 по 1973 годы. Существует несколько легенд, касающихся причин разработки Си и его отношения к операционной системе UNIX, включая следующие:

1) Разработка Си стала результатом того, что его будущие авторы любили компьютерную игру, подобную популярной игре Asteroids (Астероиды). Они уже давно играли в неё на главном сервере компании, который был недостаточно мощным и должен был обслуживать около ста пользователей. Томпсон и Ритчи посчитали, что им не хватает контроля над космическим кораблём для того, чтобы избегать столкновений с некоторыми камнями. Поэтому они решили перенести игру на свободный PDP-7, стоящий в офисе. Однако этот компьютер не имел операционной системы, что заставило их написать её. В конце концов, они решили перенести эту операционную систему ещё и на офисный PDP-11, что было очень тяжело, потому что её код был целиком написан на ассемблере. Было вынесено предложение, использовать какой-нибудь высокоуровневый портативный язык, чтобы можно было легко переносить ОС с одного компьютера на другой. Язык Си, который они хотели сначала задействовать для этого, оказался лишён функциональности, способной использовать новые возможности PDP-11. Поэтому они и остановились на разработке языка Си.

2) Самый первый компьютер, для которого была первоначально написана UNIX, предназначался для создания системы автоматического заполнения документов. Первая версия UNIX была написана на ассемблере. Позднее для того, чтобы переписать эту операционную систему, был разработан язык Си.

К 1973 году язык Си стал достаточно силён, и большая часть ядра UNIX, первоначально написанная на ассемблере PDP-11/20, была переписана на Си.

Язык С++ возник в начале 1980;х годов, когда сотрудник фирмы BellLaboratoriesБьёрн Страуструп придумал ряд усовершенствований к языку Си под собственные нужды.

Название «Си++» было придумано Риком Масситти (Rick Mascitti) и впервые было использовано в декабре 1983 года. Ранее, на этапе разработки, новый язык назывался «Си с классами».

Нововведениями С++ в сравнении с С являются:

· поддержка объектно-ориентированного программирования;

· поддержка обобщённого программирования через шаблоны;

· дополнительные типы данных;

· исключения;

· пространства имён;

· встраиваемые функции;

· перегрузка операторов;

· перегрузка имён функций;

· ссылки и операторы управления свободно распределяемой памятью;

· дополнения к стандартной библиотеке.

Язык С++ во многом является надмножеством языка С.

Целью данной курсовой работы является усовершенствование навыков работы с языками С и С++: создание программы на гибриде этих языков. Использование гибрида языков при создании программы, на мой взгляд, является не совсем корректным решением, однако для задачи данного курсового проекта это решение является наилучшим.

1. Разработка программы. Описание работы программы

Разработать и реализовать на языке C/C++ информационно-поисковый справочник «Терморезисторы».

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

1) Создание справочника в памяти с использованием функций языка С.

2) Вывод справочника на экран с использованием потоковых классов языка С++.

3) Удаление записи из справочника.

4) Вывод записи по её порядковому номеру.

5) Сортировка методом быстрой сортировки по полю строкового типа (по алфавиту).

6) Сортировка методом Шелла по числовому полю.

7) Сортировка методом быстрой сортировки по числовому полю.

8) Сохранение справочника в файл с использованием функций языка С.

9) Открытие справочника из файла с использованием функций языка С.

10) Выход из программы.

Каждая запись должна состоять из 5 полей: марка (строковый тип); остальные 4 поля выбираются самостоятельно из справочников и должны представлять реальные параметры радиодеталей. При работе с программой также должны вводиться реальные марки и соответствующие им параметры деталей.

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

Предусмотреть защиту программы от ввода пользователем некорректных данных.

2. Листинг программы

Makefile

pusk:vvod.o menu. o vyvod.o vyvodn. o save.o open. o sortsh.o

sortm.o delit. o sortb.o

g++vvod.o menu. o vyvod.o vyvodn. o open.o save. o

sortsh.o sortm. o delit.o sortb. oopusk

menu.o:menu.c header. h

g++ -c menu. c

vvod.o: vvod. c header.h

g++ -c vvod. c

vyvod.o: vyvod. c ppheader.h

g+±c vyvod. cpp

vyvodn.o: vyvodn. cpp header.h

g++ -c vyvodn. cpp

save.o: save. c header.h

g++ -c save. c

open.o:open.c header. h

g++ -c open. c

delit.o: delit. c header.h

g++ -c delit. c

sortb.o: sortb. c header.h

g++ -c sortb. c

sortsh.o: sortsh. c header.h

g++ -c sortsh. c

sortm.o: sortm. c header.h

g++ -c sortm. c

//Заголовочный файл программы

#include

#include

#include

#include

#include

#include

struct st{

char marka[10];

char izgotov [10];

char material[10];

float RR;

int Rn;

};

using namespace std;

void vvod ();

void vyvod ();

void vyvodn ();

void start ();

void save ();

void open ();

void sortsh ();

void sortm ();

voidsortb ();

void delit ();

//Менюпрограммы

#include" header. h"

extern struct st s[15];

extern int i;

int main (int argc, char *argv[]){

int z, a;

if (argc>1){

FILE *f;

if ((f=fopen (argv[1]," r+b"))==NULL){

printf («Ошибка открытия файла!! nНАЖМИТЕ ENTER»);

getchar ();

exit (1);

}

else{

fread (&i, sizeof (int), 1, f);

for (a=0;a

fread (&s[a], sizeof (struct st), 1, f);

fclose (f);

}

}

while (1){

while (1){

printf («MENU:nn[1] Ввод данных. n»);

printf («[2] Вывод справочника на экран. n»);

printf («[3] Удаление записи из справочника. n»);

printf («[4] Вывод записи по её порядковому номеру. n»);

printf («[5] Сортировка по марке (быстрая).n»);

printf («[6] Сортировка по номинальному сопротивлению (шелла).n»);

printf («[7] Сортировка по отношению R/Rn (быстрая).n»);

printf («[8] Сохранение данных. n»);

printf («[9] Открыть файл… n»);

printf («[0] Завершение работы. n»);

if (!(scanf («%d» ,&z)) || z<0 || z>9){

printf («Введены неверные данные!!! nНАЖМИТЕ ENTERn»);

while (getchar ()≠'n');

}

else

break;

}

switch (z){

case 1:

vvod ();

break;

case 2:

vyvod ();

break;

case 3:

delit ();

break;

case 4:

vyvodn ();

break;

case 5:

sortm ();

break;

case 6:

sortsh ();

break;

case 7:

sortb ();

break;

case 8:

save ();

break;

case 9:

open ();

break;

case 0:

{printf («Программа успешно завершила работу.»);

return 0;

}

}

}

}

//Создание справочника в памяти

#include" header. h"

struct sts[15];

int i;

void vvod (){

int k=0,j, n=0;

char c;

for (i=0;i<11;){

printf («Введите марку%d терморезистора: n», i+1);

while (getchar ()≠'n')

continue;

gets (s[i]. marka);

if (s[i].marka=='')

continue;

printf («Введите изготовителя%d терморезистора: n», i+1);

gets (s[i]. izgotov);

if (s[i].marka=='')

continue;

printf («Введите материал%d терморезистора: n», i+1);

gets (s[i]. material);

if (s[i].marka=='')

continue;

while (1){

printf («Введите номинальное сопротивление%d терморезистора: n», i+1);

if (!(scanf («%d» ,&s[i]. Rn)) || s[i]. Rn<0){

while (getchar ()≠'n');

printf («Введены некорректные данные! nНАЖМИТЕ ENTER»);

}

else

break;

}

while (1){

printf («Введите R/Rn (при t=10)%d терморезистора: n», i+1);

if (!(scanf («%f» ,&s[i]. RR)) || s[i]. RR<0){

while (getchar ()≠'n');

printf («Введены некорректные данные! nНАЖМИТЕ ENTER»);

}

else

break;

}

i++;

while (c≠'y' && c≠'Y' && c≠'n' && c≠'N'){

printf («Желаете ввести ещё данные?(Y/N)n»);

while (getchar ()≠'n');

c=getchar ();

if (c=='N' || c=='n'){

k=1;

c='';

break;

}

if (c=='Y' || c=='y'){

k=0;

c='';

break;

}

if (c≠'Y' || c≠'y' || c≠'n' || c≠'N')

printf («Введён не неизвестный оператор, попробуйте ещё! n»);

}

if (k==1)

break;

}

return;

}

//Вывод справочника на экран

#include" header. h"

extern struct st s[15];

extern int i;

void vyvod ()

int f;

cout<<" Параметры терморезистора" <<" n"

<<" ============================================"<<" n" ;

cout.setf (ios:right);

cout<<<" N

//Удаление записи из справочника

#include" header. h"

extern struct st s[15];

extern int i;

void delit (){

int k, y;

if (i==0){

printf («Не найдено ни одной записи! n»);

return;

}

while (1){

printf («Введите номер удаляемой записи (1-%d):n», i);

if (!(scanf («%d» ,&k)) || k>i || k<1){

printf («Строки с таким номером не существует! nНАЖМИТЕ ENTER»);

}

else

break;

}

for (y=k-1;y

s[y]=s[y+1];

i—;

printf («Запись удалена! nНАЖМИТЕ ENTER»);

return;

}

//Вывод записи по её порядковому номеру

#include" header. h"

extern struct st s[15];

extern int i;

void vyvodn ()"

<<

<<

<<

<<

<<<<" n" ;

cout<<" ========================================="<

return;

//Сортировка методом быстрой сортировки по полю строкового типа

#include" header. h"

extern struct st s[15];

extern int i;

void start (int l, int r){

int a, b, z=0;

struct st y;

a=l; b=r;

do{

while (strcmp (s[a]. marka, s[(r+l)/2].marka)<0 && a

while (strcmp (s[b]. marka, s[(r+l)/2].marka)>0 && b>l)b—;

if (a<=b){

y=s[a];

s[a]=s[b];

s[b]=y;

a++; b—;

}

} while (a<=b);

if (l

if (a

return;

}

void sortm (){

start (0,i-1);

printf («Данные успешно отформатированы!!! НАЖМИТЕ ENTERn»);

return;

}

//Сортировка методом Шелла

#include" header. h"

extern struct st s[15];

extern int i;

void sortsh (){

int j, k, r;

struct st buf;

r=i/2;

while (r>0){

for (j=0;j

k=j;

while ((k>=0) && s[k]. RR>s[k+r].RR){

buf=s[k];

s[k]=s[k+r];

s[k+r]=buf;

k—;

}

}

r=r/2;

}

printf («Данные отсортированы успешно! nНАЖМИТЕ ENTER»);

return;

}

//Сортировка методом быстрой сортировки по числовому полю

#include" header. h"

extern struct st s[15];

extern int i;

void start1(int l, int r){

int a, b;

struct st y;

a=l; b=r;

do{

while (s[a]. Rn

while (s[b]. Rn>s[(r+l)/2].Rn&& b>l)b—;

if (a<=b){

y=s[a];

s[a]=s[b];

s[b]=y;

a++; b—;

}

} while (a<=b);

if (l

if (a

return;

}

void sortb (){

start1(0,i-1);

printf («Данные успешно отформатированы!!! НАЖМИТЕ ENTERn»);

return;

}

//Сохранение справочника в файл

#include" header. h"

extern struct st s[15];

extern int i;

void save (){

char k[8];

int a, I=0;

FILE *f;

while (1){

printf («Введите имя файла: n»);

getchar ();

gets (k);

if ((f=fopen (k," w"))==NULL){

fprintf (stderr," Ошибка открытия файла!! nНАЖМИТЕ ENTER");

}

else

break;

}

fwrite (&i, sizeof (int), 1, f);

for (a=0;a

fwrite (&s[a], sizeof (structst), 1, f);

fclose (f);

printf («Файл успешно сохранён. nНАЖМИТЕ ENTER»);

return;

}

//Открытие справочника из файла

#include" header. h"

extern struct st s[15];

extern int i;

void open (){

int a, r;

chare, k[8];

FILE *f;

while (1){

printf («Введите имя файла: n»);

getchar ();

gets (k);

if ((f=fopen (k," r+b"))==NULL){

printf («Ошибка открытия файла!! nНАЖМИТЕ ENTER»);

exit (1);

}

else

break;

}

fread (&i, sizeof (int), 1, f);

for (a=0;a

fread (&s[a], sizeof (structst), 1, f);

fclose (f);

printf («Данные успешно прочтены из файла '%s'!!!НАЖМИТЕ ENTERn», k);

return;

}

Созданный в программе файл, который содержит базу данных, в которой хранятся реальные параметры «Терморезисторов»:

Марка терморезистора

Производитель

Материал

R/Rn,%

Rn, Ом

РТС-ТД

Витебский завод радиодеталей

Медь

РТС-Л

Витебский завод радиодеталей

Медь

РТС-Н

Витебский завод радиодеталей

Медь

РТС-П

Витебский завод радиодеталей

Медь

РТС-НТ

Витебский завод радиодеталей

Медь

РТС-2З

Витебский завод радиодеталей

Медь

РТС-Д

Витебский завод радиодеталей

Медь

3,3

Заключение

В ходе создания курсового проекта я открыл для себя абсолютно новые методы сортировок: методом Шелла и методом быстрой сортировки. Самое интересное было в том, что сортировка методом Шелла иначе называется: сортировка методом вставок с погружением. Так же очень интересно было узнать, что быстрая сортировка не является наиболее быстрой сортировкой из всех существующих и ей уже более 40 лет. Кроме этого были закреплены знания в области работы с бинарными файлами в языке С++.

Данный курсовой проект помог мне приобрести дополнительный опыт в создании подобных приложений.

1. Прата С. Язык программирования С. — М.: Диасофт, 2002. — 896 с.

2. Лафоре Р. Объектно-ориентированное программирование в С -. — СПб.: Питер. 2004. — 928 с.

3. Дейтел П., Дейтел X. Как программировать на C±t-. — М.: Бином, 2001. — 1152 с.

4. Гораев О. П., Лыч Ю. П. Текстовый процессор MSWORD. Практикум по компьютерным технологиям.? Бел-ГУТ, 2003. — 68 с.

Показать весь текст
Заполнить форму текущей работой