Создание информационно-поискового справочника на языка С/С++
Структура данных с указанием типов. Общая структурная схема программы. Алгоритмы сортировки вставками. Назначение make-файла. Функции управления программой; перемещения и корректировки введенных данных и их удаления справочника, загрузки данных из файла.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 12.01.2016 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
- Создание информационно-поискового справочника
- Содержание
- Введение
- 1. Постановка задачи
- 2. Структура данных с указанием типов
- 3. Общая структурная схема программы
- 3.1 Назначение прототипов функций
- 4. Описание специальных алгоритмов
- 4.1 Сортировка методом вставок
- 4.2 Сортировка методом Шелла
- 4.3 Сортировка методом быстрой сортировки
- 5. Листинг функций программы
- 5.1 Make-файл
- 5.2 My.h
- 5.3 Main.c
- 5.4 Menu.c
- 5.5 Vvod.c
- 5.6 Vivod.c
- 5.7 Vstavka.c
- 5.8 SortChella.c
- 5.9 Sort.c
- 5.10 Qsort.c
- 5.11 Qsort1.c
- 5.12 Del.c
- 5.13 Per.c
- 5.14 Cor.c
- 5.15 Save.c
- 5.16 New.c
- Заключение
- Список использованной литературы
- Приложение
- Введение
- Стремительное развитие информационных технологий привело к тому, что вычислительная техника проникла во все без исключения сферы деятельности человека. В связи с этим возникла необходимость в огромном количестве специалистов создающих программное обеспечение. На сегодняшний день практически каждый, кто занимается обслуживанием установок питающихся электроэнергией (будь то АТС, электронасос или микропроцессорная система) должен обладать навыками программиста.
- В сферах производства на которые ориентируется обучение на ЭТ факультете наиболее актуальны языки С/С++. Целью данного курсового проекта является закрепление навыков разработки проектов на гибриде этих языков. В будущем, конечно, этого делать не рекомендуется, но для того, чтобы лучше овладеть этими языками, написав один курсовой проект - сойдет и этот способ написания программ.
- Язык "C"(произносится "си") - это универсальный язык программирования, для которого характерны экономичность выражения, современный поток управления и структуры данных, богатый набор операторов. Язык "C" не является ни языком "очень высокого уровня", ни "большим" языком, и не предназначается для некоторой специальной области применения. но отсутствие ограничений и общность языка делают его более удобным и эффективным для многих задач, чем языки, предположительно более мощные.
- Язык "C", первоначально предназначавшийся для написания операционной системы "UNIX" на ЭВМ DEC PDP-11, был разработан и реализован на этой системе Деннисом Ричи. Операционная система, компилятор с языка "C" и по существу все прикладные программы системы "UNIX" (включая все программное обеспечение, использованное при подготовке этой книги) написаны на "C". Коммерческие компиляторы с языка "C" существуют также на некоторых других ЭВМ, включая IBM SYSTEM/370, HONEYWELL 6000, INTERDATA 8/32. Язык "C", однако, не связан с какими-либо определенными аппаратными средствами или системами, и на нем легко писать программы, которые можно пропускать без изменений на любой ЭВМ, имеющей "C"-компилятор. По опыту , "C" показал себя приятным, выразительным и разносторонним языком на широком множестве разнообразных программ. Его легко выучить, и он не теряет своих качеств с ростом опыта программиста.
- 1. Постановка задачи
- Цель, которая ставится перед нами в ходе выполнения курсовой работы по дисциплине «Информатика» - это закрепление объёма знаний, как теоретических, так и практических, которые мы получить во время лекций и проводимых тематических лабораторных работ. За три семестра мы получили достаточно большое количество информации и данная курсовая работа призвана помочь нам систематизировать его, достичь не только поставленных целей, но и изучить новые способы решения прикладных задач. Этого можно достичь только совмещая получение теоретических знаний с развитием практических навыков. Поэтому для достижения поставленной цели необходимо будет обратиться и к дополнительной литературе.
- Как уже говорилось выше, главной целью курсовой работы является закрепление знаний полученных при изучении дисциплины. Для достижения необходимого результата необходимо решить ряд поставленных перед нами задач, которые вошли в одну программу, вобравшую в себя всю полноту полученных ранее знаний. При разработке приложения был использован язык программирования С. Задачей курсовой работы является разработка и реализация на языке С информационно-поискового справочника «Светодиоды».
- В данном пункте я приведу текст программы, который разбит на несколько файлов, выполняющих ту или иную функцию. Написание программы осуществлялось в текстовом редакторе mc операционной среды Unix. Сборка проводилась с помощью утилиты make. Код Makefile приводится вначале листинга программы.
a. В программе реализованы следующие функции:
b. Создание справочника в памяти (Ввод данных).
c. Вывод справочника на экран.
d. Сортировка методом вставок по полю строкового типа.
e. Сортировка методом Шелла по числовому полю.
f. Сортировка методом быстрой сортировки по числовому полю.
g. Удаление данных с указанным номером.
h. Перемещение указанной записи на новую позицию.
i. Корректировка данных с указанным номером.
j. Сохранение справочника в файле.
k. Задание нового имени файла для открытия.
l. Выход из программы.
2. Структура данных с указанием типов
Структура -- это совокупность переменных, объединенных под одним именем. С помощью структур удобно размещать в смежных полях связанные между собой элементы информации. Объявление структуры создает шаблон, который можно использовать для создания ее объектов (то есть экземпляров этой структуры). Переменные, из которых состоит структура, называются членами. (Члены структуры еще называются элементами или полями).
struct baza{
char titile[30]; };/*поле названия*/
float svet; /*вещественное поле*/
float Ipr; /*вещественное поле*/
float Tk; /*вещественное поле*/
float Uob; /*вещественное поле*/
};
3. Общая структурная схема программы
Рисунок 3.1 - Общая структурная схема программы.
3.1 Назначение прототипов функций
char menu(); прототип функции меню и возвращение символа определяющий пункт меню в соответствии с надписями в функции. При запуске программы выполняется проверка на наличие введённых аргументов, которые определяют имя файла, с которым она будет работать, или сохранять данные или файл, из которого нужно будет эти данные загрузить.
int vvod( struct baza *w ); прототип функции ввода данных в структуру baza и возвращает чиcло заполненных структур.
void vivod(int kol, struct baza *w ); прототип функции вывода данных на экран .
void per(struct baza *b ); прототип функции перемещения указанной записи.
void cor(int kol, struct baza *w ); прототип функции корректировки записи по справочнику в функцию передаются два аргумента число структур заполненных и указатель структуры в котором нужно произвести поиск
void vstavka(struct baza *w, int kol); прототип функции сортировки методом вставок.
void sortChella(int kol, struct baza *w); прототип функции сортировки методом Шелла, в функцию передаются два аргумента, число элементов заполненных и указатель на структуру которую надо отсортировать
void save(int kol, struct baza *w, char *name ); прототип функции сохранения, принимают число элементов, указатель структуры и имя файла в который нужно cохранить данные.
int new(int kol, struct baza *w, char *name); прототип функции задания нового имени файла для открытия, принимает число элементов, указатель на структуру которую предаем в функцию из файла c имени name.
int del (int kol,struct baza *w); прототип функции удаления элемента из справочника переданного в функцию и возвращает число элементов структур.
void sort( int kol, struct baza *w ); прототип функции методом быстрой сортировки, в функцию передаются два аргумента, число элементов заполненных и указатель на структуру которую надо отсортировать.
4. Описание специальных алгоритмов
4.1 Сортировка методом вставок
Сортировка вставками -- простой алгоритм сортировки. Хотя этот алгоритм сортировки уступает в эффективности более сложным (таким как быстрая сортировка), у него есть ряд преимуществ:
· эффективен на небольших наборах данных;
· эффективен на наборах данных, которые уже частично отсортированы;
· это устойчивый алгоритм сортировки (не меняет порядок элементов, которые уже отсортированы);
· может сортировать список по мере его получения;
На каждом шаге алгоритма мы выбираем один из элементов входных данных и вставляем его на нужную позицию в уже отсортированном списке, до тех пор, пока набор входных данных не будет исчерпан. Метод выбора очередного элемента из исходного массива произволен; может использоваться практически любой алгоритм выбора. Обычно (и с целью получения устойчивого алгоритма сортировки), элементы вставляются по порядку их появления во входном массиве.
4.2 Сортировка методом Шелла
Сортировка Шелла -- алгоритм сортировки, являющийся усовершенствованным вариантом сортировки вставками. Идея метода Шелла состоит в сравнении элементов, стоящих не только рядом, но и на определённом расстоянии друг от друга. Невзирая на то, что сортировка Шелла во многих случаях медленнее, чем быстрая сортировка, она имеет ряд преимуществ:
· отсутствие потребности в памяти под стек;
· отсутствие деградации при неудачных наборах данных;
Алгоритм состоит в том, что исходная последовательность разделяется на ряд групп, каждая из которых упорядочивается методом простой вставки. В процессе упорядочивания размеры групп возрастают до тех пор, пока все элементы не войдут в упорядоченную группу. Группой называется подмножество элементов последовательности, номера которых образуют арифметическую прогрессию с разностью d (d называется шагом группы).
4.3 Сортировка методом быстрой сортировки
Быстрая сортировка является одной их самых эффективных сортировок. Метод основан на подходе "разделяй-и-властвуй".
Достоинства:
· Один из самых быстродействующих (на практике) из алгоритмов внутренней сортировки общего назначения.
· Прост в реализации.
Алгоритм состоит в том, что выбирается некоторый опорный элемент из массива, запускается рекурсивная процедура разделения массива, которая перемещает все значения, меньшие, либо равные элементу, влево от него, а все значения, большие, либо равные элементу - вправо (теперь массив состоит из двух подмножеств), для обоих подмассивов рекурсивно запускается та же процедура.
алгоритм файл программа справочник
5. Листинг функций программы
5.1 Make-файл
Make-файл предназначен для описывания отношения между файлами моей программы и содержит команды для обновления каждого файла. Файл описаний позволяет утилите make отслеживать зависимости между файлами, составляющими программную систему.
makefile
svet: main.o cor.o del.o menu.o new.o per.o qsort.o qsort1.o save.o sort.o sortChella.o vivod.o vstavka.o vvod.o
gcc main.o cor.o del.o menu.o new.o per.o qsort.o qsort1.o save.o sort.o sortChella.o vivod.o vstavka.o vvod.o -o svet
main.o: main.c my.h
gcc -c main.c
cor.o: cor.c my.h
gcc -c cor.c
del.o: del.c my.h
gcc -c del.c
menu.o: menu my.h
gcc -c menu.c
new.o: new.c my.h
gcc -c new.c
per.o: per.c my.h
gcc -c per.c
qsort.o: qsort.c my.h
gcc -c qsort.c
qsort1.o: qsort1.c my.h
gcc -c qsort1.c
save.o: save.c my.h
gcc -c save.c
sort.o: sort.c my.h
gcc -c sort.c
sortChella.o: sortChella.c my.h
gcc -c sortChella.c
vivod.o: vivod.c my.h
gcc -c vivod.c
vstavka.o: vstavka.c my.h
gcc -c vstavka.c
vvod.o: vvod.c my.h
gcc -c vvod.c
clear:
rm -rf *.0 svet
5.2 My.h
Заголовочный файл предназначен для определения именованных констант, прототипов функций, директив препроцессора.
my.h
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define KOL 20
struct baza{
char title[30];
float svet;
float Ipr;
float Tk;
float Uob;
};
char menu(void);
int vvod(struct baza *w);
void vivod(int kol, struct baza *w);
void vstavka(struct baza *w,int kol);
void sortChella(int kol, struct baza *w);
void sort(int kol, struct baza *w);
int del(int kol, struct baza *w);
void per(struct baza *w);
void cor(int kol, struct baza *w);
void save(int kol, struct baza *w,char *name);
int new (int kol, struct baza *w,char *name);
void qsort2(struct baza *w,int l,int r);
void qsort1(struct baza *w,int l,int r);
void Clear(void);
5.3 Main.c
В самом начале основной программы мы входим в бесконечный цикл, который завершится только, если мы выберем пункт меню k, и выполнится оператор return 0.
В начале каждого бесконечного цикла, нам предлагается выбрать пункт меню, путём ввода с клавиатуры его порядкового номера. После ввода, мы переходим к конструкции вида:
switch(char){
case x1:…
case x2:…
}
Каждая ветвь case x; соответствует пункту меню с порядковым номером x, и в ней выполняется соответствующая функция.
main.c
#include"my.h"
int main (int argc, char *argv[]){
int kol=0,met=0;
struct baza w[KOL];
char name[30];
int g;
if(argc!=2){
printf("Вы не указали имя при запуске\n ");
printf("укажите имя\n в случае ошибки, программа завершит работу\n");
fgets(name,30,stdin);
g=0;
while((name[g]!='\n')&&(name[g]!='\0'))
g++;
name[g]='\0';
if(strlen(name)==0)
return 0;
}
else{
strcpy(name,argv[1]);
}
do{
switch(menu()){
case 'a':
kol=vvod(w);
met=1;
break;
case 'b':
if(met==1){
vivod(kol,w);
break;
}
else{
printf("Вы не заполнили справочник\n");
break;
}
case 'c':
if(met==1){
vstavka(w,kol);
break;
}
else{
printf("Вы не заполнили справочник\n");
break;
}
case 'd':
if(met==1){
sortChella(kol,w);
break;
}
else{
printf("Вы не заполнили справочник\n");
break;
}
case 'e':
if(met==1){
sort(kol,w);
break;
}
else{
printf("Вы не заполнили справочник\n");
break;
}
case 'f':
if(met==1){
kol=del(kol,w);
break;
}
else{
printf("Вы не заполнили справочник\n");
break;
}
case 'g':
if(met==1){
per(kol,w);
break;
}
else{
printf("Вы не заполнили справочник\n");
break;
}
case 'h':
if(met==1){
cor(kol,w);
break;
}
else{
printf("Вы не заполнили справочник\n");
break;
}
case 'i':
if(met==1){
save(kol,w,name);
break;
}
else{
printf("Вы не заполнили справочник\n");
break;
}
case 'j':
kol=new(kol,w,name);
break;
case 'k':
printf("Выход из программы\n");
return 0;
default:
printf("Нет такого пункта меню\n");
break;
}
}while(1);
return 0;
}
5.4 Menu.c
Эта функция предназначена для управления программой при помощи символа пункта меню, на который нужно перейти в главной функции.
menu.c
#include"my.h"
char menu(void){
char x;
printf("\t\tМеню:\n");
printf("a-Создание справочника в памяти (Ввод данных)\n");
printf("b-Вывод справочника на экран\n");
printf("c-Сортировка методом вставок по полю строкового типа\n");
printf("d-Сортировка методом Шелла по числовому полю\n");
printf("e-Сортировка методом быстрой сортировки по числовому полю\n");
printf("f-Удаление данных с указанным номером\n");
printf("g-Перемещение указанной записи на новую позицию\n");
printf("h-Корректировка данных с указанным номером\n");
printf("i- Сохранение справочника в файл\n");
printf("j- Задание нового имени файла для открытия\n");
printf("k- Выход из программы\n");
scanf("%c",&x);
x=tolower(x);
Clear();
return x;
}
Рисунок 5.1 - Результат выполнения функции menu.c
5.5 Vvod.c
Функция ввода данных предлагает ввести количество данных присваемое переменной kol<KOL, где KOL максимальное количество элементов. Затем функция переходит в цикл, одно выполнение которого позволяет ввести данные об одном элементе. Вводимые данные проверяются путем подсчета символов или цифр после ввода их пользователем и считывания. Если при вводе цифры был применен символ, то пользователю предложится ввести заново эту цифру.
vvod.c
#include "my.h"
void Clear(){
while(getchar()!='\n')
continue;
return;
}
int vvod(struct baza *w){
int kol,g,i,j;
printf("Введите количество записей\n");
while(scanf("%d",&kol)!=1){
printf("Значение не верно\nВведите еще раз");
Clear();
}
Clear();
if(kol<1||kol>KOL){
printf("Количество записей не должно перевышать %d\n",KOL);
return 0;
}
for(i=0;i<kol;i++){
printf("Введите марку светодиода(%d)\n",i+1);
fgets(w[i].title,30,stdin);
g=0;
while((w[i].title[g]!='\n')&&(w[i].title[g]!='\0'))
g++;
w[i].title[g]='\0';
printf("Введите Uпр(%d)\n",i+1);
while(scanf("%f",&w[i].svet)!=1){
printf("Значение введено неверно\n");
Clear();
}
Clear();
printf("Введите Iпр,мА(%d):\n",i+1);
while(scanf("%f",&w[i].Ipr)!=1){
printf("Значение введено неверно\n");
Clear();
}
Clear();
printf("Введите Tk(%d)\n",i+1);
while(scanf("%f",&w[i].Tk)!=1){
printf("Значение введено неверно\n");
Clear();
}
Clear();
printf("Введите Uob(%d)\n",i+1);
while(scanf("%f",&w[i].Uob)!=1){
printf("Значение введено неверно\n");
Clear();
}
Clear();
}
return kol;
}
Рисунок 5.2 - Результат выполнения функции vvod.c
5.6 Vivod.c
Функция вывода данных на экран выводит данные на экран из массива структур при помощи указателя *w. Также функция проверят справочник на наличие данных, если их нет, то при вызове функции вывода данных произойдет предупреждение об отсутствии данных и выход в основную программу.
vivod.c
#include "my.h"
void vivod(int kol,struct baza *w){
int i;
printf("\tСправочник светодиодов\n");
printf("|============================================|\n");
printf("| N | Марка | Uпр,V | Iпр, mA | Tк , град | Uобр, V |\n");
printf("|=============================================|\n");
for(i=0;i<kol;i++){
printf("|%5d|%20s|%12f|%12.1f|%14.1f|%18.1f|\n",i+1,w[i].title, w[i].svet, w[i].Ipr,w[i].Tk, w[i].Uob);
} printf("|============================================|\n");
return;
}
Рисунок 5.3 - Результат выполнения функции vivod.c
5.7 Vstavka.c
Функция, осуществляющая сортировку методом вставок по полю строкового типа. Предлагается выбрать пункт меню, путем ввода с клавиатуры, в котором запрашивается направление сортировки: по убыванию либо по возрастанию.
vstavka.c
#include"my.h"
void vstavka(struct baza *w,int n){
int i,j,g,k;
struct baza t;
printf("1-Сортировать по возрастанию\n2-Сортировка по убыванию\n0-Выход\n");
while(scanf("%d",&g)!=1){
printf("Значение введено неверно\n");
Clear();
}
Clear();
switch(g){
case 1:
for(i=1;i<n;i++)
for(j=0;j<i;j++){
if(strcmp(w[i].title,w[j].title)<0){
t=w[i];
for(k=i;k>j;k--)
w[k]=w[k-1];
w[j]=t;
}
}
break;
case 2:
for(i=1;i<n;i++)
for(j=0;j<i;j++){
if(strcmp(w[i].title,w[j].title)>0){
t=w[i];
for(k=i;k>j;k--)
w[k]=w[k-1];
w[j]=t;
}
}
break;
case 0:
printf("Выход в меню\n");
return;
default:
printf("Такого пункта нет\n");
return;
}
printf("Сортировка завершена успешно\n");
return;
}
Рисунок 5.4 - Результат выполнения функции vstavka.c по возрастанию
Рисунок 5.5 - Результат выполнения функции vstavka.c по убыванию
5.8 SortChella.c
Функция, осуществляющая сортировку методом Шелла по числовому полю. Предлагается выбрать пункт меню, путем ввода с клавиатуры, в котором запрашивается направление сортировки: по убыванию либо по возрастанию.
sortChella.c
#include"my.h"
void sortChella(int kol, struct baza *w){
struct baza tm;
int i,j,g;
int step=kol/2;
printf("1-Сортировать по возростанию\n2-Сортировать по убыванию\n0-Выход\n");
while(scanf("%d",&g)!=1){
printf("Значение введено неверно\n");
Clear();
}
Clear();
switch(g){
case 1:
while (step > 0){
for (i = 0; i < (kol - step); i++){
j = i;
while ((j>=0)&&(w[j].Ipr> w[j + step].Ipr) ){
tm = w[j];
w[j] = w[j + step];
w[j + step] = tm;
j--;
}
}
step = step / 2;
}
break;
case 2:
while (step > 0){
for (i = 0; i < (kol - step); i++){
j=i;
while((j>=0)&&(w[j].Ipr<w[j+step].Ipr)){
tm=w[j];
w[j]=w[j+step];
w[j+step]=tm;
j--;
}
}
step=step/2;
}
break;
case 0:
printf("Выход в меню\n");
return;
default:
printf("Такого пункта меню нет \n");
return;
}
printf("Сортировка произошла успешно\n");
return;
}
Рисунок 5.6 - Результат выполнения функции sortChella.c по возрастанию
Рисунок 5.7 - Результат выполнения функции sortChella.c по убыванию
5.9 Sort.c
Функция, осуществляющая сортировку методом быстрой сортировки по числовому полю. Предлагается выбрать пункт меню, путем ввода с клавиатуры, в котором запрашивается направление сортировки: по убыванию либо по возрастанию.
sort.c
#include"my.h"
void sort(int kol,struct baza *w){
int a;
printf("1-По возростанию\n2-По убыванию\n0-Выход в меню\n");
while(scanf("%d",&a)!=1){
printf("Значение введено не верно\n");
Clear();
}
Clear();
switch(a){
case 1:
qsort2(w,0,kol-1);
break;
case 2:
qsort1(w,0,kol-1);
case 0:
printf("Выход в меню\n");
return;
default:
printf("Такого пункта нет\n");
break;
}
return;
}
5.10 Qsort.c
Функция, осуществляющая сортировку методом быстрой сортировки по возрастанию, является составной частью функции sort.c.
qsort.c
#include"my.h"
void qsort2(struct baza *w,int l,int r){
int i=l,j=r;
struct baza sw;
float x;
if(l>=r)
return;
x=w[(r+l)/2].Tk;
do{
while(w[i].Tk<x)
i++;
while(w[j].Tk>x)
j--;
if(i<=j){
sw=w[i];
w[i]=w[j];
w[j]=sw;
i++;
j--;
}
}while(!(i>j));
qsort2(w,l,j);
qsort2(w,i,r);
return;
}
Рисунок 5.8 - Результат выполнения функции qsort.c по возрастанию
5.11 Qsort1.c
Функция, осуществляющая сортировку методом быстрой сортировки по убыванию, является составной частью функции sort.c.
qsort1.c
#include"my.h"
void qsort1(struct baza *w,int l,int r){
int i=l,j=r;
struct baza sw;
float x;
if(l>=r)
return;
x=w[(r+l)/2].Tk;
do{
while(w[i].Tk>x)
i++;
while(w[j].Tk<x)
j--;
if(i<=j){
sw=w[i];
w[i]=w[j];
w[j]=sw;
i++;
j--;
}
}while(!(i>j));
qsort1(w,l,j);
qsort1(w,i,r);
return;
}
Рисунок 5.9 - Результат выполнения функции qsort1.c по убыванию
5.12 Del.c
Функция предназначена для удаления данных из справочника. Функция сначала проверяет справочник на наличие данных. А затем запрашивает номер элемента, который нужно удалить.
del.c
#include"my.h"
int del( int kol, struct baza *w){
int i,a;
printf("Введите номер элемента в справочнике который нужно удалить:\n");
while(scanf("%d",&a)!=1){
printf("Значение введено не верно\n");
Clear();
}
Clear();
if((a>0)&&(a<=kol)){
for(i=a-1;i<kol-1;i++)
w[i]=w[i+1];
}
else{
printf("В справочнике нет светодиода с данным ноиером\n");
return kol;
}
printf("Светодиод удален из справочника\n");
return --kol;
}
Рисунок 5.9 - Результат выполнения функции de1.c
5.13 Per.c
Функция предназначена для перемещения введенных данных. Функция запрашивает элемент, который нужно переместить, а за тем позицию ,на которую необходимо переместить элемент.
per.c
#include"my.h"
void per(int kol, struct baza *w){
int N,M,i;
struct baza t;
if(kol>0){
printf("Введите номер записи\n");
if((scanf("%d",&N)==1)&&(N>0)&&(N<=kol)){
Clear();
N--;
}
else{
Clear();
printf("Введенно некорректное значение\n");
return;
}
}
else{
printf("Справочник пуст\n");
return;
}
printf("Введите номер позиции куда переместить\n");
if((scanf("%d",&M)==1)&&(M>0)&&(M<=kol)){
Clear();
M--;
}
else{
Clear();
printf("Введенно некорректное значение\n");
return;
}
if(N<M){
t=w[N];
for(i=N;i<M;i++)
w[N]=w[N+1];
w[M]=t;
}
else{
if(N>M){
t=w[N];
for(i=N;i>M;i--)
w[i]=w[i-1];
w[M]=t;
}
else{
printf("Перемещение не трубуется\n");
return;
}
}
return;
}
Рисунок 5.10 - Результат выполнения функции per.c
5.14 Cor.c
Функция предназначена для корректировки(исправления) введенных данных. Функция запрашивает элемент, который нужно откорректировать, а за тем выполняет проверку на правильность введенных данных. Если данные введены неверно, то происходит выход в основную программу, программа этот выход описывает сообщением. Далее происходят действия аналогичные действиям функции ввода данных, но с использование оператора switch().
cor.c
#include"my.h"
void cor(int kol, struct baza *w){
int i,k,g;
printf("Введите нормер светодиода ,который нужно отредактировать:\n");
while(scanf("%d",&k)!=1){
printf("Неправильно введены данные\n");
Clear();
}
Clear();
if((k>0)&&(k<=kol)){
while(1){
printf("Выберите поле которое нужно отредактировать:\n");
printf("1-Марка светодиода\n");
printf("2-Uпр, V\n");
printf("3-Iпр, mA\n");
printf("4-Tk\n");
printf("5-Uобр\n");
printf("0-Выход\n");
while(scanf("%d",&g)!=1){
printf("Неправильно введены данные\n");
Clear();
}
Clear();
switch(g){
case 1:
printf("Введите марку %d светодиода\n",k);
fgets(w[k-1].title,20,stdin);
i=0;
while((w[k-1].title[i]!='\n')&&(w[k-1].title[i]!='\0'))
i++;
w[k-1].title[i]='\0';
break;
case 2:
printf("Введите Uпр %d\n",k);
while(scanf("%f",&w[k-1].svet)!=1){
printf("Неправильно введеное значение\n");
Clear();
}
break;
case 3:
printf("Введите Iпр %d\n",k);
while(scanf("%f",&w[k-1].Ipr)!=1){
printf("Неправильно введеное значение\n");
Clear();
}
break;
case 4:
printf("Введите Tk %d\n",k);
while(scanf("%f",&w[k-1].Tk)!=1){
printf("Неправильно введеное значение\n");
Clear();
}
break;
case 5:
printf("Введите Uобр %d\n",k);
while(scanf("%f",&w[k-1].Uob)!=1){
printf("Неправильно введеное значение\n");
Clear();
}
break;
case 0:
printf("Выход\n");
return;
default:
printf("Такого пункта меню нет\n");
break;
}
}
}
else{
printf("В справочнике нет светодиода с данным номером\n");
return;
}
printf("Элемент справочника откорректирован");
return;
}
Рисунок 5.11 - Результат выполнения функции cor.c
5.15 Save.c
Функция открывает файл с ранее введенным именем в бинарном режиме, проверяет на наличие данных, записывает число элементов в файл, записывает данные в файл. По завершению этих операций закрывает файл.
save.c
#include "my.h"
void save(int kol, struct baza *w, char *name){
int res=0,i;
FILE *fp;
if((fp=fopen(name,"wb"))==NULL){
printf("Невозможно открыть файл\n");
}
fwrite(&kol,sizeof(int),1,fp);
for(i=0;i<kol;i++)
res+=fwrite(&w[i],sizeof(struct baza),1,fp);
if(res!=kol){
printf("Не все данные загружены\n");
printf("Загружено %d записей\n",res);
}
fclose(fp);
printf("Данные отправленны в файл (%s)\n",name);
return;}
Рисунок 5.13 - Результат выполнения функции save.c
5.15 New.c
Функция загрузки данных из файла, имя которого передано в функцию. Возвращает количество загруженных полей, так же принимает структуру в которую нужно записать данные считаные из файла. Затем меняет имя этого файла на новое.
new.c
#include"my.h"
int new(int kol,struct baza *w, char *name){
FILE *fp;
char k[30];
int i;
printf("Введите имя файла с которого будет загружена база");
fgets(k,15,stdin);
for(i=0;k[i]!='\n';i++)
continue;
k[i]='\0';
printf("введите новое имя открытого файла");
fgets(name,15,stdin);
for(i=0;name[i]!='\n';i++)
continue;
name[i]='\0';
if((fp=fopen(k,"rb"))==NULL){
printf("Невозожно открыть файл (%s)\n",k);
return kol;
}
fread(&kol,sizeof(int),1,fp);
for(i=0;i<kol;i++)
fread(&w[i],sizeof(struct baza),1,fp);
printf("Загружено %d записей\n", kol);
fclose(fp);
if((fp=fopen(name,"wb"))==NULL){
printf("Невозможно открыть файл (%s)",name);
return kol;
}
fread(&kol,sizeof(int),1,fp);
for(i=0;i<kol;i++)
fread(&w[i],sizeof(struct baza),1,fp);
fclose(fp);
printf("Имя заменено на новое для открытия\n");
return kol;
}
Рисунок 5.14 - Результат выполнения функции new.c
Заключение
При разработке курсового проекта были закреплены навыки программирования консольных приложений на языка С/С++, а именно:
- файловый ввод-вывод на языке С;
- вывод данных в файл результатов программы на языке С:
- работа с массивами и структурами данных;
- изучены различные алгоритмы сортировок.
Также данный курсовой проект явился первым более-менее серьезным приложением созданным мной, что сыграло важную роль в становлении меня как программиста.
Список использованной литературы
1. Герберт Шилдт. Полный справочник по С++. Ossborne. 2003
2. Стивен Прата. Язык программирования С. - М. Издательство «Диасофт», 2002. - 896 с.
3. Х.М. Дейтел, П. Дж. Дейтел. Как программировать на С. - М. Издательство «Бином», 2006. - 908 с.
4. Балащенко, Д.В. Программирование на языке С/С++ : учебно-методическое пособие по дисциплине «Информатика и информационные технологии». Ч. 2 /Д.В. Балащенко; Д.В. Захаров, М-во образования Респ. Беларусь, Белорус. Гос. Ун-т трансп. - Гомель: БелГУТ, 2011
Приложение
Размещено на Allbest.ru
Подобные документы
История создания языков С и С++. Разработка буквенного меню, посредством которого реализуются функции информационно-поискового справочника "Терморезисторы". Определение структуры данных, защита программы от ввода пользователем некорректных параметров.
курсовая работа [18,3 K], добавлен 16.02.2012Представление (построение, создание) списка данных в виде линейного однонаправленного списка. Формирование массива данных. Вывод данных на экран. Алгоритм удаления, перемещения данных. Сортировка методом вставки. Алгоритм загрузки данных из файла.
курсовая работа [2,1 M], добавлен 16.05.2015Возможности языков программирования С и С++. Разработка и реализация информационно-поискового справочника "Блок питания", листинг программы. Функции и структура данных в программе. Динамическое распределение памяти, работа с файлами, несложные сортировки.
курсовая работа [38,7 K], добавлен 10.01.2011Структура заданного исходного файла и структуры данных, соответствующие данным файла. Подпрограмма проверки принадлежности текста к одной из шести кодовых таблиц. Алгоритмы перекодировки файла в cp1251. Алгоритм сортировки записей исходного файла.
курсовая работа [63,7 K], добавлен 12.12.2010Основы проверки и расчета входных данных и вывода выходных данных программы, их блок-схемы. Реализация функции считывания числовых данных из файла, управление (создание, уничтожение и редактирование) визуальными компонентами во время выполнения программы.
контрольная работа [1,3 M], добавлен 12.06.2009Рассмотрение особенностей языка программирования С++. Пример составления программы - информационно-поискового справочника. Описание алгоритмов коррекции данных, введённых пользователем. Тестирование полученной программы, предусмотрение ее защиты.
курсовая работа [20,0 K], добавлен 05.03.2015Реляционная модель базы данных в текстовом виде. Код, с помощью которого были созданы и заполнены таблицы. Разработка схемы базы данных справочника селекционера. Создание запросов, их основные виды. Процедуры на выбор данных, добавление и удаление.
методичка [1,1 M], добавлен 20.05.2014Процедура ввода исходных данных в программу, вывод результатов работы программы на экран. Принцип организации хранения логически связанных наборов информации в виде файлов. Параметры характеристики файла, способы обращения к нему, соглашения по типу.
реферат [14,5 K], добавлен 06.12.2011Описание таблиц и полей данных. Организация связей между таблицами. Начало работы с программой. Алгоритмы добавления данных. Основные формы программы. Главные этапы загрузки данных. Использование VBA для решения инженерных и экономических задач.
курсовая работа [792,0 K], добавлен 22.01.2015Разработка программы для поиска нужных сведений в телефонном справочнике с использованием языка программирования Borland C++, в качестве базы данных которого используется файл (base.txt). Реализация функции сортировки по фамилии в форматах (А-я) и (Я-а).
курсовая работа [261,8 K], добавлен 22.08.2013