Разработка информационно-поискового справочника "Конденсаторы"
Создание справочника "Конденсаторы" в памяти с использованием функций С++. Добавление записи в справочник. Быстрая сортировка по полю строкового типа (по алфавиту). Структура данных с указанием типов. Описание специальных алгоритмов и листинги программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 17.11.2013 |
Размер файла | 272,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение
Стремительное развитие информационных технологий привело к тому, что вычислительная техника проникла во все без исключения сферы деятельности человека. В связи с этим возникла необходимость в огромном количестве специалистов создающих программное обеспечение. На сегодняшний день практически каждый, кто занимается обслуживанием установок питающихся электроэнергией, должен обладать навыками программиста.
Цель, которая ставится перед нами в ходе выполнения курсовой работы по дисциплине "Информатика и Информационные технологии" - это закрепление объёма знаний, как теоретических, так и практических, которые мы получить во время лекций и проводимых тематических лабораторных работ. За три семестра мы получили достаточно большое количество информации и данная курсовая работа призвана помочь нам систематизировать его, достичь не только поставленных целей, но и изучить новые способы решения прикладных задач.
Для создания курсового проекта необходимо выделить в задании на курсовую работу корневую задачу, которая будет реализована в главном модуле, а так же прикладные задачи, требования к которым указаны в описании функциональности программы. Также необходимо продумать алгоритмы коррекции данных, введённых пользователем.
1. Постановка задачи
Разработать и реализовать на языке C/C++ информационно-поисковый справочник "Конденсаторы".
При запуске программы на исполнение, должно появляться числовое меню, посредством которого должны вызываться следующие пункты, реализованные в программе как отдельные функции:
1. Создание справочника в памяти (Ввод данных) с использованием функций С++.
2. Вывод справочника на экран с использованием функций языка С++.
3. Добавление записи в справочник.
4. Быстрая сортировка по полю строкового типа (по алфавиту).
5. Сортировка методом Шелла по числовому полю (на усмотрение разработчика).
6. Поиск записи в справочнике по части названия марки радиодетали.
7. Сортировка дискового файла методом быстрой сортировки по числовому полю с использованием функций языка С++.
8. Сохранение справочника в файле с использованием функций языка С.
9. Открытие справочника из файла с использованием функций языка С.
10. Выход из программы.
Каждая запись должна состоять из 5 полей: марка (строковый тип); остальные 4 поля выбираются самостоятельно из справочников и должны представлять реальные параметры радиодеталей. При работе с программой также должны вводиться реальные марки и соответствующие им параметры деталей.
При разработке программы создать собственный заголовочный файл, включающий директивы препроцессора, определение структуры данных, прототипы используемых функций. Каждый пункт меню, кроме выхода из программы, должен быть реализован в виде пользовательской функции, определяемой в отдельном файле. В программе необходимо использовать связные списки и двоичный ввод/вывод в файл. При запуске программы из командной строки в качестве аргумента командной строки должно передаваться имя файла-базы данных. При отсутствии аргумента при запуске программы имя файла базы должно вводиться пользователем программы. При чтении базы данных должна осуществляться проверка целостности информации. Сборка программы должна осуществляться с помощью утилиты make.
Предусмотреть защиту программы от ввода пользователем некорректных данных.
справочник запись алгоритм программа
2. Структура данных с указанием типов
В данной работе использовалась структура данных, где:
char marka[10]; //массив переменных строкового типа, используется для хранения марки конденсатора.
double emkost; //переменная вещественного типа, используемая для хранения значения емкости конденсатора.
double napr; //переменная вещественного типа, используемая для хранения значения напряжения конденсатора.
double massa; //переменная вещественного типа, используемая для хранения значение массы конденсатора.
double dlina; //переменная вещественного типа, используемая для хранения значения длины конденсатора.
struct point *next; //переменная-указатель, служит для хранения адреса следующей структуры.
struct point *prev; //переменная-указатель, служит для хранения адреса предыдущей структуры.
3. Общая структурная схема программы с указанием прототипов отдельных функций и пояснением их назначения и указанием названия модулей их хранения
В программе использовались десять функций. После запуска программы мы попадаем в стандартную функцию main.c, в нее из командной строки может быть передано два аргумента один из которых, имя подключаемого файла. Из нее, в зависимости от введенных пользователем данных можно пере направиться в одну из следующих функций: vvod.cpp - в нее передаются два параметра, указатель типа struct point в котором храниться адрес первой структуры и указатель типа int, в котором ведётся подсчёт количества введённых элементов. Функция возвращает указатель типа struct point в котором храниться адрес первой структуры. Служит для ввода данных в программу.
vyvod.cpp - в нее передаётся один параметр, указатель типа struct point в котором храниться адрес первой структуры. Функция ничего не возвращает. Служит для вывода введенных данных на экран.
dobav.c - в нее передаются два параметра, указатель типа struct point, в котором храниться адрес первой структуры и указатель типа int, в котором ведётся подсчёт количества введённых элементов. Функция возвращает указатель типа struct point, в котором храниться адрес первой структуры. Служит для добавления данных в базу.
qqsort.c - в нее передаются три параметра, указатель типа struct point, в котором храниться адрес первой структуры, переменная типа int, в которой хранится 1, и переменная типа int в которой храниться количество всех записей. Функция возвращает указатель типа struct point, в котором храниться адрес первой структуры. Служит для сортировки данных методом быстрой сортировки.
shellsort.c - в нее передаются два параметра, указатель типа struct point, в котором храниться адрес первой структуры и указатель типа int, в котором ведётся подсчёт количества введённых элементов. Функция возвращает указатель типа struct point в котором храниться адрес первой структуры. Служит для сортировки данных методом Шелла.
poisk.c - в нее передаётся один параметр, указатель типа struct point, в котором храниться адрес первой структуры. Функция ничего не возвращает. Служит для поиска данных в имеющейся базе.
sortdisk.cpp - в нее передаются три параметра, указатель типа char, в котором храниться имя сортируемого файла, переменная типа int, в которой хранится 1, и переменная типа int в которой будет храниться количество всех записей. Функция ничего не возвращает. Служит для сортировки дискового файла методом быстрой сортировки.
save.c - в нее передаются два параметра, указатель типа struct point в котором храниться адрес первой структуры и указатель типа int в котором ведётся подсчёт количества введённых элементов. Функция ничего не возвращает. Служит для сохранения справочника в файле.
zagr.c - в нее передаются три параметра, указатель типа struct point, в котором храниться адрес первой структуры, переменная-указатель типа char, в которой хранитсья имя загружаемого файла, указатель типа int в котором ведётся подсчёт количества введённых элементов. Функция возвращает указатель типа struct point в котором храниться адрес первой структуры. Служит для загрузки базы из файла.
4. Описание специальных алгоритмов
В данной работе применялись сортировки методом Шелла и быстрая сортировка.
Сортировка Шелла -- алгоритм сортировки, являющийся усовершенствованным вариантом сортировки вставками. Идея метода Шелла состоит в сравнении элементов, стоящих не только рядом, но и на определённом расстоянии друг от друга. Иными словами -- это сортировка вставками с предварительными "грубыми" проходами. При сортировке Шелла сначала сравниваются и сортируются между собой значения, отстоящие один от другого на некотором расстоянии d. После этого процедура повторяется для некоторых меньших значений d, а завершается сортировка Шелла упорядочиванием элементов при d=1. Эффективность сортировки Шелла в определённых случаях обеспечивается тем, что элементы "быстрее" встают на свои места.
Быстрая сортировка -- широко известный алгоритм сортировки, один из быстрых известных универсальных алгоритмов сортировки массивов.
Быстрая сортировка использует стратегию "разделяй и властвуй". Шаги алгоритма таковы:
1. Выбираем в массиве некоторый элемент, который будем называть опорным элементом. С точки зрения корректности алгоритма выбор опорного элемента безразличен. С точки зрения повышения эффективности алгоритма выбираться должна медиана, но без дополнительных сведений о сортируемых данных её обычно невозможно получить. Известные стратегии: выбирать постоянно один и тот же элемент, например, средний или последний по положению; выбирать элемент со случайно выбранным индексом.
2. Операция разделения массива: реорганизуем массив таким образом, чтобы все элементы, меньшие или равные опорному элементу, оказались слева от него, а все элементы, большие опорного -- справа от него. Обычный алгоритм операции:
3. Рекурсивно упорядочиваем подмассивы, лежащие слева и справа от опорного элемента.
4. Базой рекурсии являются наборы, состоящие из одного или двух элементов. Первый возвращается в исходном виде, во втором, при необходимости, сортировка сводится к перестановке двух элементов. Все такие отрезки уже упорядочены в процессе разделения.
Поскольку в каждой итерации (на каждом следующем уровне рекурсии) длина обрабатываемого отрезка массива уменьшается, по меньшей мере, на единицу, терминальная ветвь рекурсии будет достигнута всегда и обработка гарантированно завершится.
5. Листинги программы
В данном файле содержаться подключаемые библиотеки, описания самой структуры, и прототипы используемых функций.
my.h
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
struct point{
char marka[10];
double emkost;
double napr;
double massa;
double dlina;
struct point *next;
struct point *prev;
};
void vyvod(struct point *);
struct point * vvod(struct point *, int *);
struct point * dobav(struct point *, int *);
struct point * qqsort(struct point *, int ,int);
struct point * shellsort(struct point *, int *);
void poisk(struct point *);
void sortdisk(char *,int,int);
void save(struct point *, int *);
struct point * zagr(struct point *, char *,int *);
В данной функции на экран выводится числовое меню позволяющее пользователю выбрать необходимый пункт обработки данных. После того как пользователь вводит данные, программа проверяет их на корректность, и если они корректны перенаправляется в одну из функций. Если из командной строки был получено два аргумента, то открывшись программа сразу переходит в функцию загрузки и загружает файл с введённым именем. Программа входит в бесконечный цикл и выходит из него только после ввода пользователем пункта меню, выход.
main.c
#include "my.h"
int main(int argc, char *argv[]){
system("clear");
struct point *head=NULL;
int punkt,count=0,first,last=0,j;
char *file=NULL,f[20];
if(argc>2){
printf("Формат возможного запуска прогарммы:\n \"%s n\"\n где n - имя подгружаемого файла\n",argv[0]);
exit(1);
}
if(argc==2){
file=argv[1];
head=zagr(head,file,&count);
file=NULL;
}
while(1){
printf("выберите пункт меню:\n1-ввод\n2-вывод\n3-добавить запись\n4-сотртировка марка\n5-сортировка Шелла \n6-поиск по части названия\n7-сортировка дискового файла\n8-сохранить в файл\n9-открыть из файла\n10-выход: ");
scanf("%d",&punkt);
if(getchar()=='\n'){
if(punkt==1){
head=vvod(head,&count);
}
if(punkt==2){
vyvod(head);
}
if(punkt==3){
head=dobav(head,&count);
}
if(punkt==4){
first=1;
last=count;
head=qqsort(head,first,last);
}
if(punkt==5){
head=shellsort(head,&count);
}
if(punkt==6){
poisk(head);
}
if(punkt==7){
printf("введите имя файла: ");
fgets(f,20,stdin);
first=0;
while(f[first]!='\n') first++;
f[first]='\0';
file=f;
first=1;
sortdisk(file,first,last);
file=NULL;
}
if(punkt==8){
save(head,&count);
}
if(punkt==9){
head=zagr(head,file,&count);
}
if(punkt==10){
printf("Программа завершила свою работу!!!\n");
return 0;
}
if(punkt>10 || punkt<1)
printf("Неправильный ввод!!!\n");
}else{
while(getchar()!='\n')
continue;
printf("Неправильный ввод!!!\n");
}
printf("\n");
}
}
В данной функции осуществляется ввод пользователем данных о базе, в начале программа проверяет есть ли уже данные, если есть то очищает их. После этого программа поэтапно запрашивает данные и проверяет их на корректность, если данные корректны заносит их в базу. Далее спрашивает продолжать ввод или остановиться.
vvod.cpp
#include "my.h"
struct point * vvod(struct point *head,int *count){
char choice;
struct point *pr, *current;
current=head;
while(current!=NULL){
pr=current->next;
delete current;
current=pr;
}
head=NULL;
for((*count)=1 ;;(*count)++){
current=new struct point;
if (head==NULL){
head=current;
}else{
pr->next=current;
}
if(head==current){
head->prev=NULL;
}else{
current->prev=pr;
}
current->next=NULL;
while(1){
cout<<"введите марку "<<(*count)<<"-го"<<" конденсатора: ";
cin.getline(current->marka,10);
if(current->marka[0]=='\0') cout<<"не ввели название"<<endl;
else break;
}
while(1){
cout<<"введите емкость "<<(*count)<<"-го"<<" конденсатора: ";
cin>>current->emkost;
if(cin.get()=='\n'){
break;
}else{
cout<<"неправильный ввод"<<endl;
while(cin.get()!='\n')
cin.clear();
}
}
while(1){
cout<<"введите напряжение "<<(*count)<<"-го"<<" конденсатора: ";
cin>>current->napr;
if(cin.get()=='\n'){
break;
}else{
cout<<"неправильный ввод"<<endl;
while(cin.get()!='\n')
cin.clear();
}
}
while(1){
cout<<"введите массу "<<(*count)<<"-го"<<" конденсатора: ";
cin>>current->massa;
if(cin.get()=='\n'){
break;
}else{
cout<<"неправильный ввод"<<endl;
while(cin.get()!='\n')
cin.clear();
}
}
while(1){
cout<<"введите длину "<<(*count)<<"-го"<<" конденсатора: ";
cin>>current->dlina;
if(cin.get()=='\n'){
break;
}else{
cout<<"неправильный ввод"<<endl;
while(cin.get()!='\n')
cin.clear();
}
}
pr=current;
while(1){
cout<<"закончить ввод? y/n: ";
cin>>choice;
if(cin.get()=='\n'){
if (toupper(choice)=='Y'){
break;
}
if (toupper(choice)=='N'){
return head;
}
cout<<"неправильно"<<endl;
}else{
cout<<"неправильный ввод"<<endl;
while(cin.get()!='\n')
cin.clear();
}
}
}
return head;
}
В данной функции осуществляется вывод справочника на экран. В начале программа проверяет есть ли вообще данные, если их нету выводится соответствующее сообщение и возвращается обратно в меню. Если данные есть программа выводит их.
vyvod.cpp
#include "my.h"
void vyvod(struct point *head){
int i=0;
struct point *current;
if(head==NULL){
cout<<"данные не введены"<<endl;
return;
}
cout.setf(ios::left);
current=head;
while(current!=NULL){
cout<<setw(2)<<++i<<"-ый конденсатор"<<" - "<<setw(8)<<current->marka<<" - "<<setw(5)<<current->emkost<<"мкФ - "<<setw(5)<<current->napr<<"В - "<<setw(5)<<current->massa<<"г - "<<setw(5)<<current->dlina<<"мм"<<endl;
current=current->next;
}
return;
}
В данной функции осуществляется добавление записи в справочник. В начале программа проверяет есть ли введённые данные, если есть переходит в конец связного списка и добавляет еще дну запись аналогично функции ввода. Если данных нету то создает их (одну запись).
dobav.c
#include "my.h"
struct point * dobav(struct point *head, int *count){
struct point *current,*pr;
int i=0;
current=head;
(*count)=0;
while(current!=NULL){
pr=current;
current=current->next;
(*count)++;
}
current=(struct point *) malloc(sizeof(struct point));
if (head==NULL){
head=current;
}else{
pr->next=current;
}
if(head==current){
head->prev=NULL;
}else{
current->prev=pr;
}
current->next=NULL;
(*count)++;
printf("введите марку %d-го конденсатора: ",(*count));
fgets(current->marka,10,stdin);
i=0;
while(current->marka[i]!='\n') i++;
current->marka[i]='\0';
while(1){
printf("введите емкость %d-го конденсатора: ",(*count));
scanf("%lf",¤t->emkost);
if(getchar()=='\n'){
break;
}else{
printf("неправильный ввод\n");
while(getchar()!='\n')
continue;
}
}
while(1){
printf("введите напряжение %d-го конденсатора: ",(*count));
scanf("%lf",¤t->napr);
if(getchar()=='\n'){
break;
}else{
printf("неправильный ввод\n");
while(getchar()!='\n')
continue;
}
}
while(1){
printf("введите массу %d-го конденсатора: ",(*count));
scanf("%lf",¤t->massa);
if(getchar()=='\n'){
break;
}else{
printf("неправильный ввод\n");
while(getchar()!='\n')
continue;
}
}
while(1){
printf("введите длину %d-го конденсатора: ",(*count));
scanf("%lf",¤t->dlina);
if(getchar()=='\n'){
break;
}else{
printf("неправильный ввод\n");
while(getchar()!='\n')
continue;
}
}
return head;
}
В данной функции осуществляется сортировка данных по строковому полю методом быстрой сортировки. В начале программа проверяет наличие данных. Далее сортирует их способом описанном выше в подразделе 1.2, быстрая сортировка. В конце функция возвращает указатель на первый связной список.
qqsort.c
#include "my.h"
struct point * qqsort(struct point *head,int first, int last){
struct point *cur,*mid,*end,*tmp,*tmp1,*tmp2;
int i=first,j=last,k;
if(head==NULL){
printf("Данные не введены");
return NULL;
}
cur=head;
for(k=1;k<i;k++) cur=cur->next;
end=head;
for(k=1;k<last;k++)end=end->next;
mid=head;
for(k=1;k<(first+last)/2;k++) mid=mid->next;
do{
while(strcmp(cur->marka,mid->marka)<0){
cur=cur->next;
i++;
}
while(strcmp(end->marka,mid->marka)>0){
end=end->prev;
j--;
}
if(i<=j){
if(i<j){
tmp=cur;
if(cur->next!=end){
tmp1=cur->next;
tmp2=end->prev;
cur->next=end->next;
if(end->next!=NULL)
(end->next)->prev=tmp;
end->next=tmp1;
if(cur->prev!=NULL)
(cur->prev)->next=end;
tmp=cur->prev;
cur->prev=tmp2;
end->prev=tmp;
(cur->prev)->next=cur;
(end->next)->prev=end;
if(end->prev==NULL)
head=end;
}else{
tmp = cur;
cur->next = end->next;
if(end->next !=NULL)
(end->next)->prev = tmp;
end->next = tmp;
if(cur->prev != NULL)
(cur->prev)->next = end;
tmp = cur->prev;
cur->prev = end;
end->prev = tmp;
if(end->prev == NULL)
head=end;
}
tmp=cur;
cur=end->next;
end=tmp->prev;
}
i++; j--;
}
}while(i<=j);
if(i<last) head=qqsort(head,i,last);
if(j>first) head=qqsort(head, first,j);
return head;
}
В данной функции осуществляется сортировка данных по числовому полю методом Шелла. Аналогично функции быстрой сортировки программа проверяет наличие данных. Далее сортирует их способом описанном выше в подразделе 1.2, сортировка Шелла. В конце функция возвращает указатель на первый связной список.
shellsort.c
#include "my.h"
struct point * shellsort(struct point *head, int *count){
struct point *tmp,*tmp1,*tmp2,*cur,*nx,*nxGlob=NULL;
int d,i;
if(head==NULL){
printf("Данные не введены");
return NULL;
}
cur=head;
if((*count)==1)
return head;
d=(*count)/2;
while(d!=1){
cur=head;
for(i=0;i<d;i++)
cur=cur->next;
nx=cur;
nxGlob=nx->next;
cur=head;
while(1){
if(cur->emkost > nx->emkost){
tmp = cur;
tmp1=cur->next;
tmp2=nx->prev;
cur->next = nx->next;
if(nx->next !=NULL)
(nx->next)->prev = tmp;
nx->next = tmp1;
if(cur->prev != NULL)
(cur->prev)->next = nx;
tmp = cur->prev;
cur->prev = tmp2;
nx->prev = tmp;
(cur->prev)->next=cur;
(nx->next)->prev=nx;
if(nx->prev == NULL )
head = nx;
}
if(nxGlob==NULL)
break;
cur=nx->next;
nx=nxGlob;
nxGlob=nxGlob->next;
}
d=d/2;
}
cur=head;
nx=cur->next;
nxGlob = nx->next;
while(1){
while(cur->emkost > nx->emkost){
tmp = cur;
cur->next = nx->next;
if(nx->next !=NULL)
(nx->next)->prev = tmp;
nx->next = tmp;
if(cur->prev != NULL)
(cur->prev)->next = nx;
tmp = cur->prev;
cur->prev = nx;
nx->prev = tmp;
if(nx->prev != NULL){
cur = nx->prev;
}else{
head = nx;
break;
}
}
if(nxGlob == NULL)
break;
nx = nxGlob;
cur = nxGlob->prev;
nxGlob = nxGlob->next;
}
return head;
}
В данной функции осуществляется поиск данных по части названия марки радиодетали. В начале программа проверяет наличие данных. Далее просит ввести часть названия радиодетали. После этого осуществляет поиск введённой подстроки в введённых ранее строках (т. е. марках конденсаторов), если поиск завершился удачно, выводит на экран найденные строки, если неудачно выводит соответствующее сообщение, спрашивает хочет ли пользователь повторить поиск.
poisk.c
#include "my.h"
void poisk(struct point *head){
int i;
char tmp[20],choice;
struct point *current;
if(head==NULL){
printf("Данные не введены");
return;
}
while(1){
printf("введите часть названия: ");
fgets(tmp,20,stdin);
i=0;
while(tmp[i]!='\n') i++;
tmp[i]='\0';
current=head;
i=0;
while(current!=NULL){
if(strstr(current->marka,tmp)!=NULL){
printf("%10s - %6.3lf мкФ - %6.3lf В - %6.3lf г - %6.3lf мм\n",current->marka,current->emkost,current->napr,current->massa,current->dlina);
i=1;
}
current=current->next;
}
if(i==0){
printf("Не обнаруженно\n");
while(1){
printf("повторить? y/n ");
choice=toupper(getchar());
if(getchar()=='\n'){
if(choice=='Y'){
break;
}
if(choice=='N'){
return;
}
if(choice!='N' || choice!='Y')
printf("неправильно\n");
}else{
printf("неправильно\n");
while(getchar()!='\n')
continue;
}
}
}
}
return;
}
В данной функции осуществляется сортировка дискового файла методом быстрой сортировки. Сортировка дискового файла состоит в том, что мы считываем минимальное количество не обходимых данных и работаем с ними, так постепенно считывая и записывая данные мы отсортируем данные с минимальными затратами памяти. Работа алгоритма быстрой сортировки описана выше. В начале программа выполняет проверку целостности файла, если не удается открыть файл выводится соответствующее сообщение и программа закрывается.
sortdisk.cpp
#include "my.h"
void sortdisk(char *file ,int first, int last){
struct point *cur,*end,*mid;
int i = first, j = last, imid;
char f[20];
fstream in(file, ios::in | ios::out | ios::binary);
if(!in){
cout<<"невозможно открыть файл"<<endl;
return;
}
in.seekg(0, ios::end);
last=in.tellg();
last=last/sizeof(struct point);
cur = new struct point;
end = new struct point;
mid = new struct point;
do{
in.seekg((i-1)*sizeof(struct point),ios::beg);
in.read(reinterpret_cast<char *>(cur),sizeof(struct point));
imid=(i+j)/2;
in.seekg((imid-1)*sizeof(struct point),ios::beg);
in.read(reinterpret_cast<char *>(mid),sizeof(struct point));
in.seekg((j-1)*sizeof(struct point),ios::beg);
in.read(reinterpret_cast<char *>(end),sizeof(struct point));
while (cur->napr < mid->napr){
in.seekg(i*sizeof(struct point),ios::beg);
in.read(reinterpret_cast<char *>(cur),sizeof(struct point));
i++;
}
while (end->napr > mid->napr){
in.seekg((j-2)*sizeof(struct point),ios::beg);
in.read(reinterpret_cast<char *>(end),sizeof(struct point));
j--;
}
if(i<=j){
if (i<j){
in.seekg((i-1)*sizeof(struct point),ios::beg);
in.write(reinterpret_cast<char *>(end),sizeof(struct point));
in.seekg((j-1)*sizeof(struct point),ios::beg);
in.write(reinterpret_cast<char *>(cur),sizeof(struct point));
}
i++;
j--;
}
}while(i<=j);
delete cur;
delete mid;
delete end;
in.close();
if (i<last)
sortdisk(file,i,last);
if (first<j)
sortdisk(file,first,j);
return;
}
В данной функции осуществляется сохранение справочника в файл. В начале программа проверяет есть ли данные которые необходимо сохранить. Далее просит ввести имя файла в который нужно сохранить базу и проверяет его на целостность, если всё в порядке, то производит запись данных в файл, и закрывает его.
save.c
#include "my.h"
void save(struct point *head, int *count){
int res=0,i=0;
char file[20];
struct point *cur;
FILE *fp;
if(head==NULL){
printf("Данные не введены");
return;
}
printf("введите имя файла: ");
fgets(file,20,stdin);
while(file[i]!='\n') i++;
file[i]='\0';
if((fp=fopen(file,"wb"))==NULL){
printf("невозможно открыть файл\n");
return;
}
cur=head;
while(cur!=NULL){
res+=fwrite(cur,sizeof(struct point),1,fp);
cur=cur->next;
}
if(res!=(*count)){
fprintf(stderr,"не все записи\n");
return;
}
fclose(fp);
return;
}
В данной функции осуществляется загрузка базы из файла. В начале программа проверяет есть ли в данный момент записи, если есть, то очищает их. Далее выполняет проверку было передано имя файла загрузки или нет (это надо для того что бы при передачи имени файла из командной строки автоматически загружалась база), если имя файла передано не было то запрашивает это имя у пользователя, проверяет файл на целостность. И собственно загружает базу из файла, переписывая ссылки на следующий и предыдущий элемент. Закрывает файл и возвращает указатель на первый список.
zagr.c
#include "my.h"
struct point * zagr(struct point *head, char *file, int *count){
struct point *cur,*pr;
int i,tmp;
char f[20];
FILE *fp;
if(head!=NULL){
cur=head;
while(cur!=NULL){
pr=cur->next;
delete cur;
cur=pr;
}
head=NULL;
(*count)=0;
}
if(file==NULL){
printf("введите имя файла: ");
fgets(f,20,stdin);
i=0;
while(f[i]!='\n') i++;
f[i]='\0';
file=f;
}
if((fp=fopen(file,"rb+"))==NULL){
printf("невозможно открыть файл\n");
return head;
}
while(1){
cur=(struct point *) malloc(sizeof(struct point));
tmp=fread(cur,sizeof(struct point),1,fp);
if(tmp!=1){
free(cur);
break;
}
if (head==NULL){
head=cur;
}else{
pr->next=cur;
}
if(head==cur){
head->prev=NULL;
}else{
cur->prev=pr;
}
cur->next=NULL;
pr=cur;
(*count)++;
}
fclose(fp);
return head;
}
Данный файл описывает отношения между файлами программы и содержит команды для обновления каждого файла. Программа будет компилироваться с помощью утилиты make и данный файл позволяет утилите make отслеживать зависимости между файлами, составляющими программную систему.
makefile
prog: main.o vvod.o vyvod.o zagr.o save.o poisk.o dobav.o shellsort.o qqsort.o sortdisk.o
g++ -o prog main.o zagr.o save.o poisk.o dobav.o shellsort.o vvod.o vyvod.o qqsort.o sortdisk.o
main.o: main.c my.h
g++ -c main.c
vvod.o: vvod.cpp my.h
g++ -c vvod.cpp
vyvod.o: vyvod.cpp my.h
g++ -c vyvod.cpp
zagr.o: zagr.c my.h
g++ -c zagr.c
save.o: save.c my.h
g++ -c save.c
poisk.o: poisk.c my.h
g++ -c poisk.c
dobav.o: dobav.c my.h
g++ -c dobav.c
shellsort.o: shellsort.c my.h
g++ -c shellsort.c
qqsort.o: qqsort.c my.h
g++ -c qqsort.c
sortdisk.o: sortdisk.cpp my.h
g++ -c sortdisk.cpp
clean:
rm -fr *.o prog
6. Результат работы программы на примере конкретных данных
выберите пункт меню:
1-ввод
2-вывод
3-добавить запись
4-сотртировка марка
5-сортировка Шелла
6-поиск по части названия
7-сортировка дискового файла
8-сохранить в файл
9-открыть из файла
10-выход: 2
выберите пункт меню:
1-ввод
2-вывод
3-добавить запись
4-сотртировка марка
5-сортировка Шелла
6-поиск по части названия
7-сортировка дискового файла
8-сохранить в файл
9-открыть из файла
10-выход: 4
выберите пункт меню:
1-ввод
2-вывод
3-добавить запись
4-сотртировка марка
5-сортировка Шелла
6-поиск по части названия
7-сортировка дискового файла
8-сохранить в файл
9-открыть из файла
10-выход: 5
выберите пункт меню:
1-ввод
2-вывод
3-добавить запись
4-сотртировка марка
5-сортировка Шелла
6-поиск по части названия
7-сортировка дискового файла
8-сохранить в файл
9-открыть из файла
10-выход: 6
введите часть названия: M
Заключение
В ходе написания курсовой работы был создан на языках С/С++ информационно-поисковый справочник "конденсаторы". Создано числовое меню позволяющее пользователю выбирать различные функции работы со справочником в их число входит: создание, вывод, добавление записи, быстрая сортировка по наименованию, сортировка Шелла по числовому полю, поиск нужной записи, сортировка дискового файла, сохранение и открытия справочника.
Были получены обширные знания в области программирования на С/С++. Приобретены навыки составления законченной программы с пользовательским интерфейсом и коррекцией ошибок. Изучены различные методы сортировок и их применения, а также алгоритмы работы с файлами.
Язык C- довольно удобный инструмент для получения быстрых и компактных программ, использующих эффективно доступные ресурсы машины, он налаживает определённые требования на разработчика: в отличие от "классических" языков инженерного программирования (Фортран и т.д.), язык С способен на базовом уровне выполнять только простейшие операции, характерные для большинства процессорных платформ (собственно с помощью чего достигается его эффективность). Вследствие этого инженер-программист, использующий для решения вычислительной проблемы язык C, должен обладать чёткой культурой программирования и ясно понимать процессы, происходящие в машине, при выполнении составленной им программы.
С++ - это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьёзного программиста. За исключением второстепенных деталей С++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, С++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определённых пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.
Список использованной литературы
1. Д.В. Балащенко, Д.В. Захаров Программирование на языке С/С++. Учеб.-метод. пособие по дисциплине "Информатика и информационные технологии". Ч.2 / - Гомель : БелГУТ, 2011. - 56 с.
2. П. Дейтел, Х. Дейтел /Как программировать на С/С++.-М, Издательство "Бином" 2001.-1152 с.
3. Д. Кнут/ Искусство программирования. Том 3. Сортировка и поиск. 2-е изд.
4. Б. Оверленд/ С++ без страха :[учеб. пособие : пер. с англ.]: Изд-во Триумф, 2005. - 432 с.
Размещено на Allbest.ru
...Подобные документы
Структура данных с указанием типов. Общая структурная схема программы. Алгоритмы сортировки вставками. Назначение make-файла. Функции управления программой; перемещения и корректировки введенных данных и их удаления справочника, загрузки данных из файла.
курсовая работа [1,3 M], добавлен 12.01.2016Алгоритмизация и структурное программирование на языке С/С++. Создание справочника в памяти (ввод данных), вывод справочника на экран с использованием потоковых классов, сортировка методом Шелла. Циклы, описание применяемых специальных алгоритмов.
курсовая работа [1,0 M], добавлен 26.02.2012Рассмотрение особенностей языка программирования С++. Пример составления программы - информационно-поискового справочника. Описание алгоритмов коррекции данных, введённых пользователем. Тестирование полученной программы, предусмотрение ее защиты.
курсовая работа [20,0 K], добавлен 05.03.2015История создания языков С и С++. Разработка буквенного меню, посредством которого реализуются функции информационно-поискового справочника "Терморезисторы". Определение структуры данных, защита программы от ввода пользователем некорректных параметров.
курсовая работа [18,3 K], добавлен 16.02.2012Создание информационного справочника и предоставление информации о деятельности компании, о её возможностях и спектре предлагаемых услуг. Добавление, редактирование и удаление в информационной системе данных. Описание программной документации для системы.
курсовая работа [1,2 M], добавлен 23.09.2014Реляционная модель базы данных в текстовом виде. Код, с помощью которого были созданы и заполнены таблицы. Разработка схемы базы данных справочника селекционера. Создание запросов, их основные виды. Процедуры на выбор данных, добавление и удаление.
методичка [1,1 M], добавлен 20.05.2014История развития справочников/баз данных. Основные параметры, необходимые для создания справочника по предприятию. Разработка интерфейса программы в среде CSharp. Детальный просмотр функций программы. Системные требования к ПК и руководство пользователя.
курсовая работа [3,2 M], добавлен 11.04.2012Возможности языков программирования С и С++. Разработка и реализация информационно-поискового справочника "Блок питания", листинг программы. Функции и структура данных в программе. Динамическое распределение памяти, работа с файлами, несложные сортировки.
курсовая работа [38,7 K], добавлен 10.01.2011Разработка и анализ функциональной модели деятельности предприятия. Создание базы справочника. Использование трансферов для передачи данных между клиентом и сервером. Требования для работы приложения. Добавление, изменение, хранение и удаление данных.
курсовая работа [396,4 K], добавлен 26.10.2014Проектирование интерактивного справочника магазина "Азарт", для реализации продукции посредством сети Интернет. Разработка базы данных, описание программы и составление руководства для оператора. Экспериментальное исследование разработанного продукта.
дипломная работа [3,8 M], добавлен 06.06.2014Разработка программы для поиска нужных сведений в телефонном справочнике с использованием языка программирования Borland C++, в качестве базы данных которого используется файл (base.txt). Реализация функции сортировки по фамилии в форматах (А-я) и (Я-а).
курсовая работа [261,8 K], добавлен 22.08.2013Основные понятия справочников и их классификация. Анализ имеющихся электронных ресурсов. Теоретические понятия разработки электронных справочников. Выбор и обоснование средств разработки. Структура электронного справочника, его разработка и наполнение.
курсовая работа [1,5 M], добавлен 27.05.2015Этапы проектирования приложения (в данном случае - телефонного справочника), позволяющего создать базу данных, делать ее сортировку, производить новые записи или удаление полей. Листинг программы, которая производит индексацию и проверку базы данных.
реферат [368,9 K], добавлен 31.05.2012Создание программы "Телефонный справочник": загрузка телефонной книги; разработка алгоритмов добавления, редактирования, удаления записи; поиск по различным параметрам, вывод данных на печать. Интерфейс пользователя, системные требования и ограничения.
курсовая работа [1,5 M], добавлен 24.09.2012Разработка информационной системы, которая должна обеспечивать введение справочника по каждому из маршрутов, предлагаемых турагентством, с указанием основных составляющих стоимости. Инфологическая схема базы данных. Описание сценария диалога и запросов.
курсовая работа [2,0 M], добавлен 20.04.2015Разработка прикладного решения "Автоматизированная инфоpмационно-спpавочная система работы лесоперерабатывающего предприятия" в среде "1С: Предприятие" c поэтапным описанием произведенных действий. Форма элемента справочника и документа при вводе данных.
курсовая работа [1,4 M], добавлен 20.05.2014Анализ альтернативных информационных справочников. Разработка базы данных. Требования к оснащению компьютерной техникой. Создание дизайна сайта. Обработка входных данных, которые представляются с помощью графического интерфейса в виде веб страниц.
курсовая работа [1,9 M], добавлен 19.09.2014Анализ основных алгоритмов внутренней сортировки массивов данных, сравнение сложности их реализации и производительности. Сортировка пузырьком, методами вставок, выбора, методом Шелла, быстрая сортировка. Операция разделения массива внутренней сортировки.
курсовая работа [161,7 K], добавлен 17.12.2015Понятие информации и роль компьютерных и Интернет-технологий в современном мире. Плюсы и минусы внедрения ERP-систем. Языки программирования для разработки Web-приложений. Методология разработки интерактивного справочника. Расчёт эксплуатационных затрат.
дипломная работа [962,7 K], добавлен 13.10.2012Создание программы, которая создает набор данных в динамической памяти компьютера и позволяет корректировать его. Описание программного комплекса. Обзор особенностей реализации программы с использованием модулей. Добавление данных в конец текущего набора.
курсовая работа [455,2 K], добавлен 28.08.2017