Курсовые работы по информатике
  • Регистрация
1 1 1 1 1 1 1 1 1 1 Рейтинг 0.00 (0 Голоса)

НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ

БИОРЕСУРСОВ И ПРИРОДОПОЛЬЗОВАНИЯ УКРАИНЫ

Обособленное подразделение Национального университета

Биоресурсов и природопользования Украины

«Прибрежненский аграрный колледж»

Отделение «Механизации и электрификации с.-х.»

КУРСОВАЯ РАБОТА

ПО ДИСЦИПЛИНЕ «СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ»

РАЗРАБОТКА ПРОГРАММЫ УЧЁТА КНИГ

Специальность:

5.05010201 «Обслуживание компьютерных систем и сетей»

Выполнила: студентка II курса 26 группы:

__________________________________

Калинина В.

Проверил преподаватель:

__________________________________

 

Введение и постановка задачи. 3

Объявление структур и операции с ними. 5

Понятие структуры.. 5

Объявление структур. 5

Работа со структурами. 5

Структура как параметр функции: передача структуры по значению.. 6

Структура как параметр функции: передача структуры по указателю.. 7

Функции, возвращающие структуры.. 7

Описание входных и выходных данных. 9

Описание структуры данных. 9

Входные данные. 9

Выходные данные. 10

Описание алгоритмов программы.. 12

Общая схема программы.. 12

Глобальные переменные и прототипы функций. 13

Функция main() – головная. 13

Считывание данных из файла. 14

Функции, входящие в состав программы.. 15

Описание функций программы.. 19

Функция ListData–вывод массива данных. 19

Функция DispData – вывод одной записи. 19

Функция FindRecNazn – поиск в массиве по фамилии студента. 20

Сортировка массивов. 20

Приложение 1: Общая структура программы.. 22

Приложение 2. Блок-схема сортировки методом пузырька. 23

Приложение 3: исходные коды программы.. 24

Kursov. c. 24

Kursov. h. 28

ЛИТЕРАТУРА.. 29

 

Введение и постановка задачи

Системное программирование является основой комплекса программного обеспечения вычислительных систем. В настоящее время практически все операционные системы написаны на языке программирования C. Именно поэтому квалифицированный специалист по обслуживанию компьютерных систем и сетей должен достаточно хорошо знать этот язык.

Практически для всех платформ имеются компиляторы программ на языке C. Благодаря этому программу, написанную на C, можно откомпилировать практически на любом компьютере и на любой платформе. Именно эта универсальность сделала язык С основным языком системного программирования.

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

В данной работе будет разработана простейшая программа учета книг в библиотеке. Такая программа позволяет представить основные операции, выполняемые в языке программирования C над структурами, определяемыми пользователем.

С учетом этого постановка задачи для настоящей работы имеет следующий вид.

1. Разработать программу учета книг в библиотеке. Сведения о книге сохранять в структуре, содержащей следующие поля:

R учетный номер книги (целое число);

R фамилия автора/авторов (строка длиной до 40 символов);

R название книги (строка длиной до 79 символов);

R УДК (строка длиной до 20 символов);

R год издания (целое число);

R количество страниц (целое число);

R стоимость (действительное число).

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

3. Программу создать на языке C в виде консольного приложения.

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

5. Сведения о книгах сохранять в текстовом файле. При запуске программы предусмотреть считывание данных из файла.

Объявление структур и операции с ними

Понятие структуры

Первоначальным образом для данных типа структур явились строки таблиц, с которыми знаком любой человек. Характерным для таблиц любого содержания является наличие столбцов, в каждом из которых хранятся однотипные данные. Однако в соседних столбцах типы данных могут отличаться. Если специфической особенностью массивов является использование одного и того же типа для всех элементов массива, то строки таблиц можно представлять как последовательность полей данных разного типа. Для каждого поля строки таблицы известно наименование соответствующего столбца таблицы и тип размещаемого в этом поле значения. Например, поле "Фамилия" заполняется текстовой информацией, поле "Год рождения" хранит целочисленные данные, на поле "Пол" достаточно записывать единственный символ 'М' или 'Ж' и т. д.

Объявление структур

То, что принято называть "шапкой" таблицы в языках программирования носит название шаблона структуры. Например, шаблон структуры, описывающей данные о рейсе самолета, может быть устроен следующим образом:

Struct AEROFLOT

{

char nazn[30]; // пункт назначения

int numr; // номер рейса

char tip[15]; // тип самолета

};

Идентификатор AEROFLOT выполняет функцию имени шаблона или типа структуры. В дальнейшем им можно пользоваться для объявления конкретных переменных – структур типа AEROFLOT:

Typedef struct AEROFLOT Aeroflot;

//3 переменных типа Aeroflot

Aeroflot airport[5], BufRec, MinRec;

Работа со структурами

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

Strcpy(airport[i].nazn, bufNazn);

Airport[i].numr=bufNumr;

Printf(Rus("Пункт назначения: %s\n"),BufRec. nazn);

Если мы имеем дело с указателем, который настроен на адрес структуры, то составные имена записываются с использованием двух символов "->":

Strcpy(buf->nazn, bufNazn);

Buf->numr=bufNumr;

Структуры могут объединяться в массивы:

Aeroflot airport[5]; //массив структур

И тогда для доступа к полям соответствующего элемента используются индексированные составные имена:

Strcpy(airport[i].nazn, bufNazn);

Airport[i].numr=bufNumr;

Strcpy(airport[i].tip, bufTip);

При объявлении переменных типа структура их поля могут быть проинициализированы довольно естественным способом:

Aeroflot airport[5] =

{

{"Miami", 2598, "an-2"},

{"Pribregn", 149, "Zaporozhets"},

{"Evpatoria", 22, "Boeing-747"},

{"Pribregn", 255, "Boeing-757"},

{"Evpatoria", 140, "4 wheels"}

};

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

B1=a; //все поля структуры a копируются в структуру b1

К сожалению, одноименные поля строкового типа у структур так копировать нельзя – необходимо прибегать к услугам функций типа strcpy:

Strcpy(airport[i].nazn, bufNazn);

Над содержимым числовых полей структур можно выполнять все операции, доступные для соответствующего типа данных.

Структура как параметр функции: передача структуры по значению

Если функция не изменяет структуру, то такую структуру можно передать по значению.

Ниже приведен пример функции DispRec, которая отображает на экране содержимое одной записи. Так как при этом содержимое записи не изменяется, то использована передача параметра по значению:

Void DispRec(Aeroflot BufRec)

{

printf(Rus("Рейс: %5d\n"),BufRec. numr);

printf(Rus("Пункт назначения: %s\n"),BufRec. nazn);

printf(Rus("Тип самолета: %s\n"),BufRec. tip);

}

Структура как параметр функции: передача структуры по указателю

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

Ниже приведен пример функции InpRec, которая выполняет ввод записи. Так как при этом содержимое записи изменяется, то использована передача параметра указателем. Эта функция может использоваться и для редактирования записи:

Void InpRec(Aeroflot *buf)

{

char bufNazn[30], bufTip[15];

int bufNumr;

printf(Rus("Пункт назначения -> "));

scanf("%s", bufNazn);

strcpy(buf->nazn, bufNazn);

printf(Rus("Номер рейса -> "));

scanf("%d", &bufNumr);

buf->numr=bufNumr;

printf(Rus("Тип самолета -> "));

scanf("%s", bufTip);

strcpy(buf->tip, bufTip);

}

Функции, возвращающие структуры

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

Прототип функции:

Aeroflot NewRec(); // функция возвращает структуру

Пример вызова функции:

Airport[i]=NewRec(); // так вызывается NewRec

Пример определения функции приведен ниже. В операторе return buf: функция возвращает значение переменной buf типа Aeroflot:

Aeroflot NewRec()

{

char bufNazn[30], bufTip[15];

int bufNumr;

Aeroflot buf;

printf(Rus("Новая запись: Пункт назначения -> "));

scanf("%s", bufNazn);

strcpy(buf. nazn, bufNazn);

printf(Rus("Номер рейса -> "));

scanf("%d", &bufNumr);

buf. numr=bufNumr;

printf(Rus("Тип самолета -> "));

scanf("%s", bufTip);

strcpy(buf. tip, bufTip);

return buf;

}

Описание входных и выходных данных

Описание структуры данных

В соответствии с заданием данные хранятся в виде следующей структуры:

Struct BOOK

{

long int num; /* инв. номер */

char auth[20+1]; /* автор*/

char naim[30+1]; /*название*/

char udk[15+1]; /*УДК*/

int year; /*год издания*/

int pages; /*к-во страниц*/

float price; /*цена*/

};

Показанное в примере определение строк отражает тот факт, что строки в языке C должны заканчиваться нулевым символом. Следовательно, строка из 10 символов, содержащая название пункта назначения, должна быть объявлена как массив из 11 символов (10 символов – собственно название и одиннадцатый – нулевой).

В программе также определен новый тип данных:

Typedef struct BOOK Book;

Основным объектом программы является массив book:

Book book[MAXRECS];

Где MAXRECS - максимальный размер массива

Входные данные

Входные данные находятся в текстовом файле. Каждая строка соответствует одной записи указанной структуры. Имя файла для простоты задано в самой программе: "book. txt".

При формировании файла следует учитывать длину полей записи: количество символов должно соответствовать описанной в структуре. В данной задаче файл book. txt может иметь следующий вид

45369 Ершов В. П. Конек-Горбунок 54.0.12.123 1975 200 115.32

32598 Олифер А. Б. Компьютерные сети 12.3.59.684 2009 450 683.54

65187 Коркуницкий Б. А. База данных 65.8.35.354 2010 300 137.82

38167 Толстой В. В. Война и мир 32.6.46.458 1934 964 265.56

19284 Пушкин А. С. Капитанская дочка 56.5.73.30 1948 165 214.36

Таким образом, поля записи в строке располагаются следующим образом:

Учетный номер книги: позиции 01-05(5 символов)

Автор книги: позиции 07-16(10 символов)

Название книги: позиции 24-37(14 символов)

УДК: позиции 46-56(11 символов)

Год издания: позиции 61-64(4 символа)

Количество страниц: позиции 66-68(3 символа)

Стоимость: позиции 71-76(6 символов)

Созданный файл должен находиться в каталоге текущего проекта.

Записи объединены в массив:

Book book[MAXRECS];

Для функций, используемых в работе, в качестве параметров передается либо указанный массив, либо его одиночные элементы (записи).

Объявления переменных имеют вид:

Int choice = 0;

выбор пользователя из списка возможных операций

Char s[DL], snum[5+1];

s – строка, считываемая из входного файла (ее максимальная длина DL определена равной 80 символов),

Snum – строка длиной 8 символов, используемая для преобразования символьного отображения числового поля

Char s[DL], snum[5+1], syear[4+1], sprice[7+1];

Int nnum, buf;

Выходные данные

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

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

Описание алгоритмов программы

Общая схема программы

Общая схема работы программы включает следующие шаги.

Вначале выполняется считывание исходных данных из текстового файла в массив stud.

Затем на экран выводится список возможных операций и запрашивается выбор пользователя. В ответ пользователь должен ввести целое число, соответствующее номеру операции в списке.

Если пользователь вводит число, соответствующее завершению работы, то работа программы заканчивается. В противном случае выполняется заданная операция, на экран выводится результат и снова выводится список возможных действий пользователя.

В случае, если введенное число отрицательно или больше числа операций, на экран выводится сообщение об ошибке.

Глобальные переменные и прототипы функций

Глобальные переменные и прототипы функций приведены ниже.

/*Курсовой проект Калининой Валерии */

#include <stdio. h>

#include <stdlib. h>

#include <windows. h>

#include "kurs. h"

/* MAXRECS - максимальный размер массива */

#define MAXRECS 50

/* DL - максимальная длина считываемой строки */

#define DL 100

Void ListData(); /*вывод списка книг */

Void DispRec(Book *, int); /*вывод отдельной книги */

Void SortData(Book a[], int); /* сортировка */

Book FindRec(Book a[], char *); /* поиск */

Void Findnum(Book a[], int);

Int nRecs;

FILE *fin;

Функция main() – головная

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

Int main()

{

int choice = 0;

Book book[MAXRECS];

char s[DL], snum[5+1], syear[4+1], sprice[7+1];

int nnum, buf;

int i;

Стандарт языка C не предусматривает отдельного типа данных «строка символов». Строка рассматривается как массив, элементами которого являются символы. Строка должна заканчиваться нулевым символом.

В связи с этим для наглядности в объявлениях строк snum, syear и т. д. размер массива указан с добавлением единицы на нулевой символ.. Например, syear[4+1]означает, что строка syear содержит 4 символов, а 5-й отводится под нулевой символ.

Далее производится считывание строк из файла, преобразование строк в структуры и заполнение массива. Текст приведен ниже (раздел «Считывание данных из файла»).

После этого на экран выводится перечень операций.

Do

{

...

} while (choice<5 &&choice>0) ;

Считывание данных из файла

Вначале в программе необходимо объявить файловую переменную и глобальную переменную, которая будет содержать количество записей в массиве:

IntnRecs;

FILE *fin;

Затем выполним открытие файла:

/* считывание данных из файла */

if((fin = fopen("book. txt", "r")) == 0)

{

printf(Rus("\nОшибка открытия входного файла\n"));

getchar(); getchar();

return 1;

}

Функция fopen()выполняет открытие файла и возвращает ненулевой указатель на переменную fin. В качестве параметров функции передаются имя файла (в данной программе book. txt) и режим открытия файла (rt–только для чтения, текстовый).

Массив символов, в который будет заноситься считанная из файла строка, сохраняется в переменной s[DL]

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

Char s[DL], snum[5+1], syear[4+1], sprice[7+1];

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

NRecs=0; i=0;

While (fgets(s, DL, fin)) /* считывание строки s */

{

/* ...

Преобразование строки в структуру

...

*/

I++;

NRecs++;

}

Printf("%s %d\n",Rus("прочитано записей: "), nRecs);

Операторы в теле цикла зависят от типов полей, в которые будет заноситься информация. При этом используются стандартные функции работы со строками:

Strcpy(*dest, *src)–копирование строки src в строку dest;

Strncpy(*dest, *src, n) – копированиеnсимволов, начиная с адреса src, в строку dest;

Atoi(*src, n) – преобразование строки src в целое числоn;

Atof(*src, n) – преобразование строки src в вещественное числоn.

Для целочисленного поля Num:

/* инв. номер */

snum[5]='\0';

book[i].num=atoi(snum);

Для массива символов поля auth:

/* автор */

strncpy(book[i].auth,&s[5],20);

book[i].auth[20]='\0';

Для массива символов поля naim:

/* название книги */

strncpy(book[i].naim,&s[25],30);

book[i].naim[30]='\0';

Для числового поля udk:

/* УДК */

strncpy(book[i].udk,&s[55],15);

book[i].udk[15]='\0';

Для числового поля year:

/* год издания */

strncpy(syear,&s[70],4);

syear[4]='\0';

book[i].year=atoi(syear);

Для числового поля pages:

/* число страниц */

strncpy(syear,&s[74],4);

syear[4]='\0';

book[i].pages=atoi(syear);

Для числового поля price:

/* стоимость */

strncpy(sprice,&s[78],7);

sprice[7]='\0';

book[i].price=atof(sprice);

DispRec(book, i);

Таким образом, цикл считывания и анализа считанной строки для данного проекта имеет вид:

nRecs=0; i=0;

while (fgets(s, DL, fin)) /* fgets: считывание строки s */

{

// Преобразование строки в структуру

// как описано выше

...

i++;

nRecs++;

}

printf("%s %d\n",Rus("\nпрочитано записей: "), nRecs);

Функции, входящие в состав программы

В программе используются стандартные функции, описанные в заголовочных файлах:

#include<stdio. h>

#include<stdlib. h>

Как было указано выше, описание структуры помещено в отдельный заголовочный файл kurs. h. В этот же файл помещена функция Rus, которая выполняет перекодировку строк из кодовой страницы Windows 1251 в кодировку OEM(кодовая страница 866, которая используется в консольных приложениях).

CharbufRus[256];

Char* Rus(const char* text)

{

CharToOem(text, bufRus);

ReturnbufRus;

}

Кроме функции main(), наличие которой обязательно в любой программе на языке C, программа содержит несколько функций, каждая из которых выполняет одну операцию. Прототипы функций были приведены выше.

Общая схема взаимодействия функций приведена в приложении 1.

Описание функций программы

Как было уже сказано, для выполнения операций с массивом структур головная программа main()вызывает ряд функций. Ниже приводится краткое описание этих функций.

Для всех функций принят следующий порядок описания:

Прототип функции;

Пример вызова функции и описание параметров;

Код (определение) функции.

Функция ListData–вывод массива данных

Прототип функции:

Void ListData();

Вызовфункции:

ListData(stud, nRecs);

Параметры функции: имя массива и фактическое количество записей в массиве.

Определениефункции:

Void ListData(Book x[], int n)

{

int i;

for(i=0; i<n; i++)

{

printf("%d %s",x[i].num, Rus(x[i].auth));

printf("%s \n", Rus(x[i].naim));

printf(" %s %d. - %dc. - %7.2f\n", x[i].udk,

x[i].year, x[i].pages, x[i].price);

}

}

Функция DispRec – вывод одной записи

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

Прототипфункции:

Void DispRec(Book *, int);

Вызовфункции:

DispData(book, nr);

Параметры функции: имя массива и номер книги.

Определениефункции:

Void DispRec(Book x[], int i)

{

printf("%d %s",x[i].num, Rus(x[i].auth));

printf("%s \n", Rus(x[i].naim));

printf(" %s %d. - %dc. - %7.2f\n", x[i].udk,

x[i].year, x[i].pages, x[i].price);

}

Функция Findnum – поиск в массиве по номеру книги

Прототипфункции:

Void Findnum(Book a[], int);

Функция возвращает первую запись в массиве, для которой строковое поле (или его начало) совпадает с заданной строкой.

Вызовфункции:

Findnum(book, nnum);

Параметр nnum – инвентарный номер.

Определение функции:

Void Findnum(Book x[], int n)

{

int i=0;

while (x[i].num!=n && i<nRecs) i++;

if (i<nRecs)

{

printf("%d %s",x[i].num, Rus(x[i].auth));

printf("%s \n", Rus(x[i].naim));

printf(" %s %d. - %dc. - %7.2f\n", x[i].udk,

x[i].year, x[i].pages, x[i].price);

}

else

printf("%s",Rus("номер отсутствует в списке"));

}

Сортировка массивов

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

Для сортировки массивов имеется много алгоритмов. Практически все методы предусматривают сортировку массивов inloco – «на месте», то есть путем перестановок в исходном массиве.

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

Идея метода состоит в сравнении двух соседних элементов, в результате чего меньшее число (более легкий "пузырек") перемещается на одну позицию влево. Обычно просмотр организуют с конца, и после первого прохода самое маленькое число перемещается на первое место. Затем все повторяется от конца массива до второго элемента и т. д. Известен и другой вариант пузырьковой сортировки, в котором также сравнивают два соседних элемента, и если хотя бы одна из смежных пар была переставлена, то просмотр начинают с самого начала.

В данной работе предусмотрена функция: SortData. Прототип функции имеет вид:

Void SortData(Book a[], int);

Первый параметр – имя массива структур, а второй – число записей в массиве.

Пример вызова функции:

SortData(book, nRecs);

Определение функции приведено в приложении. Блок-схема функции SortData также приведена в приложении.

Приложение 1: Общая структура программы

Приложение 2. Блок-схема сортировки методом пузырька

Приложение 3: исходные коды программы

Kurs.C

/*Курсовая работа Калининой Валерии */

#include <stdio. h>

#include <stdlib. h>

#include <windows. h>

#include "kurs. h"

/* MAXRECS - максимальный размер массива */

#define MAXRECS 50

/* DL - максимальная длина считываемой строки */

#define DL 100

Void ListData(); /*вывод списка книг */

Void DispRec(Book *, int); /*вывод отдельной книги */

Void SortData(Book a[], int); /* сортировка */

Book FindRec(Book a[], char *); /* поиск */

Void Findnum(Book a[], int);

Int nRecs;

FILE *fin;

Int main()

{

int choice = 0;

Book book[MAXRECS];

char s[DL], snum[5+1], syear[4+1], sprice[7+1];

int nnum, buf;

int i;

/* считывание данных из файла */

if((fin = fopen("book. txt", "r")) == 0)

{

printf(Rus("\nОшибка открытия входного файла\n"));

getchar(); getchar();

return 1;

}

nRecs=0; i=0;

while (fgets(s, DL, fin)) /* fgets: считывание строки из файла*/

{

/* printf("%s", Rus(s)); */

// Преобразование строки в структуру:

strncpy(snum, s, 5); // копирование первых 5 символов

/* инв. номер */

snum[5]='\0';

book[i].num=atoi(snum);

/* автор */

strncpy(book[i].auth,&s[5],20);

book[i].auth[20]='\0';

/* название книги */

strncpy(book[i].naim,&s[25],30);

book[i].naim[30]='\0';

/* УДК */

strncpy(book[i].udk,&s[55],15);

book[i].udk[15]='\0';

/* год издания */

strncpy(syear,&s[70],4);

syear[4]='\0';

book[i].year=atoi(syear);

/* число страниц */

strncpy(syear,&s[74],4);

syear[4]='\0';

book[i].pages=atoi(syear);

/* стоимость */

strncpy(sprice,&s[78],7);

sprice[7]='\0';

book[i].price=atof(sprice);

DispRec(book, i);

/*

printf("%d %d %s",i, book[i].num, Rus(book[i].auth));

printf("%s %s %d\n", Rus(book[i].naim), book[i].udk, book[i].year);

*/

/*

strncpy(book[i].pages,&s[69],6);

book[i].auth[6]='\0';

strncpy(snum,&s[75],7);

book[i].price=atof(snum);

*/

i++;

nRecs++;

}

fclose(fin);

printf("%s %d\n",Rus("прочитано записей: "), nRecs);

do

{

/*system("cls");*/

printf(Rus("\nРабота с базой данных БИБЛИОТЕКА\n"));

printf(Rus("выберите команду:\n"));

printf(Rus("1 - вывод списка книг\n"));

printf(Rus("2 - вывод сведений о книге\n"));

printf(Rus("3 - сортировка списка книг\n"));

printf(Rus("4 - поиск по фамилии автора\n"));

printf(Rus("5 - завершение работы\n"));

printf("-> ");

scanf("%i", &choice);

switch (choice)

{

case 1: printf(Rus("выбрано: 1 - вывод списка книг\n"));

ListData(book, nRecs);

break;

case 2: printf(Rus("выбрано: 2 - вывод сведений о книге\n "));

printf(Rus("введите инвентарный номер: "));

scanf("%i",&nnum);

Findnum(book, nnum);

break;

case 3: SortData(book, nRecs);

printf(Rus("\nотсортированный массив:\n"));

ListData(book, nRecs);

break;

case 4: printf(Rus("выбрано: 4 - поиск по фамилии автора\n "));

printf(Rus("введите начальные буквы фамилии: "));

scanf("%s",s);

FindRec(book, s);

break;

case 5: printf(Rus("выбрано: 5 - завершение работы\n "));

break;

default:

printf(Rus("ошибка ввода номера команды\n"));

choice = 0;

}

} while (choice <5 && choice >0) ;

Printf(Rus("нажмите любую клавишу"));

Getch();

Return 0;

}

Void ListData(Book x[], int n)

{

int i;

for(i=0; i<n; i++)

{

printf("%d %s",x[i].num, Rus(x[i].auth));

printf("%s \n", Rus(x[i].naim));

printf(" %s %d. - %dc. - %7.2f\n", x[i].udk,

x[i].year, x[i].pages, x[i].price);

}

}

Void SortData(Book a[], int n)

{

printf(Rus("выбрано: 3 - сортировка списка книг\n"));

/* сортировка методом пузырька */

int i, j;

for (i=n-1; i>0; i--)

for (j=0; j<i; j++)

if (a[j].year>a[j+1].year)

Swap(&a[j],&a[j+1]);

}

Void DispRec(Book x[], int i)

{

printf("%d %s",x[i].num, Rus(x[i].auth));

printf("%s \n", Rus(x[i].naim));

printf(" %s %d. - %dc. - %7.2f\n", x[i].udk,

x[i].year, x[i].pages, x[i].price);

}

Void Findnum(Book x[], int n)

{

int i=0;

while (x[i].num!=n && i<nRecs) i++;

if (i<nRecs)

{

printf("%d %s",x[i].num, Rus(x[i].auth));

printf("%s \n", Rus(x[i].naim));

printf(" %s %d. - %dc. - %7.2f\n", x[i].udk,

x[i].year, x[i].pages, x[i].price);

}

else

printf("%s",Rus("номер отсутствует в списке"));

}

Book FindRec(Book a[], char *str) /* поиск */

{

int i=0;

while ((strstr(Rus(a[i].auth), str)==NULL) && i<nRecs) i++;

if (i<nRecs)

{

printf("\n%d %s",a[i].num, Rus(a[i].auth));

printf("%s \n", Rus(a[i].naim));

printf(" %s %d. - %dc. - %7.2f\n", a[i].udk,

a[i].year, a[i].pages, a[i].price);

}

else

printf("\n%s",Rus("автор отсутствует в списке"));

}

Void Swap(Book *x, Book *y)

{

Book tmp;

printf("swap: %d %d", x->year, y->year);

tmp. num=x->num; strcpy(tmp. auth, x->auth);

strcpy(tmp. naim, x->naim);

tmp. year=x->year; tmp. pages=x->pages; tmp. price=x->price;

x->num=y->num; strcpy(x->auth, y->auth);

strcpy(x->naim, y->naim);

x->year=y->year; x->pages=y->pages; x->price=y->price;

y->num=tmp. num; strcpy(y->auth, tmp. auth);

strcpy(y->naim, tmp. naim);

y->year=tmp. year; y->pages=tmp. pages; y->price=tmp. price;

printf(" after swap: %d %d\n", x->year, y->year);

}

Kurs. h

/*Курсовая работа Калининой Валерии */

#include <windows. h>

Char bufRus[256];

Char* Rus(const char* text)

{

CharToOem(text, bufRus);

return bufRus;

}

Struct BOOK

{

long int num; /* инв. номер */

char auth[20+1]; /* автор*/

char naim[30+1]; /*название*/

char udk[15+1]; /*УДК*/

int year; /*год издания*/

int pages; /*к-во страниц*/

float price; /*цена*/

};

Typedef struct BOOK Book;

ЛИТЕРАТУРА

1. Прата С. Язык программирования C: лекции и упражнения. – 5-е изд. – М.: Изд. дом «Вильямс», 2006. – 960 с.

2. Дейтел Р., Дейтел Х. Как программировать на С. – М.: 2002. – 1198 с.

3. Программирование на языке C в MicrosoftVisualStudio 2010. –М.: Интернет-ун-т инф. технологий (ИНТУИТ), 2010.

4. Фельдман С. Системное программирование на персональном компьютере. – М.: Бук-пресс, 2006. – 512 с.

Добавить комментарий


Защитный код
Обновить

По темам:

История Украины

Культурология

Высшая математика

Информатика

Охотоведение

Статистика

География

Военная наука

Английский язык

Генетика

Разное

Технологиеские темы

Украинский язык

Филология

Философия

Химия

Экология

Социология

Физическое воспитание

Растениевосдство

Педагогика

История

Психология

Религиоведение

Плодоводство

Экономические темы

Бухгалтерские темы

Маркетинг

Иностранные языки

Ветеринарная медицина

Технические темы

Землеустройство

Медицинские темы

Творчество

Лесное и парковое хозяйство