Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Программа обработки данных в библиотеке

Тип Реферат
Предмет Информатика
Просмотров
1491
Размер файла
46 б
Поделиться

Ознакомительный фрагмент работы:

Программа обработки данных в библиотеке

Программа обработки данных в библиотеке

Пояснительная записка к курсовой работе по дисциплине “Основы алгоритмизации и программирования”

Выполнил : студент гр. 96-ВВ3 Митиков Р.О.

Пензенский государственный университет, Кафедра “Вычислительная Техника”

Пенза 1998

Введение

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

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

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

1 Постановка задачи

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

1) Ввод данных о книгах , имеющихся в библиотеке:название книги , автор , количество экземпляров , порядковый номер , стоимость книги

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

3) Сбор статистики о книгах одного автора с разными названиями.

4) Построение графической диаграммы для пункта по выбору.

Работа программы должна быть организована с использованием меню.

Программу разработать на языке С++ v.3.1.

2 Метод решения задачи

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

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

3 Описание логического представления данных

Входными данными в программе являются:

Файл базы данных , который записан на диске в файле librarym.dat.

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

Выходными данными в программе являются:

Данные , сортированные по названию или автору

Результат поиска по заданной маске

График

Файл базы данных , который записывается на диск в файл librarym.dat при завершении работы программы.

Данные об книге хранятся в массиве структур типа books:

Структура books:

Поле

Тип

Название

name

строка 30 символов типа char

Название

fio

строка 30 символов типа char

Автор

num

int

Количество

price

float

Стоимость

number

long

Порядковый номер

loc

int

Расположение

ss

int

Тематика

nn

int

Номер по названию

nf

int

Номер по автору

Глобальные переменные программы:

Поле

Тип

Название

cdt

массив переменных типа books на 501 элемент

Массив данных о странах

cnum

Int

Количество книг

sort

Char

тип сортировки

ftm

Char

Расположение

6 Спецификация на функциональные модули

6.1 Функция cmp

Строка вызова:

if (cmp(cdt[n].name,cdt[500].name)&&cmp(cdt[n].fio,cdt[500].fio)&& (cdt[n].price>=cdt[500].price))

Назначение:

Осуществляет сравнение строки с маской

Функции:

Просматривает последовательно заданную строку , и если в ней найдена маска , то возвращается 1 , если нет - 0.

Логические

переменные:

*a (char) - указатель на строку

*b (char) - указатель на маску для поиска

Внутренние

переменные:

k (int) - результат сравнения

n (int) - счётчик

Вызывает функции:

нет

Вызывается из:

index , find

6.2 Функция output

Строка вызова:

output(sv,sk)

Назначение:

Осуществляет вывод на экран списка книг

Функции:

Очистка экрана , вывод 10 элементов , если элемент выбран , выделение цветом , вывод данных о книге на экран.

Логические

переменные:

sv,sk (int) - координаты первого элемента на экране

Внутренние

переменные:

n (int) - счётчик

m (int) - временная переменная

nd (int) - порядковый номер данной книги

Вызывает функции:

нет

Вызывается из:

scroll

6.3 Функция menu

Строка вызова:

st=menu(30,5,"Добавить в список "

"Удалить из списка "

"Редактировать "

"По Автору "

"По Названию "

"Выход в главное меню"

"x0")

st=menu(30,5," Список книг "

" Поиск по маске "

" Количество книг "

" Выход из программы "

"x0")

st=menu(40,6," Расположение: "

" Читальный зал "

" Абонемент "

" Хранилище "

"x0")

Назначение:

Осуществляет обработку меню

Функции:

Вывод меню на экран , опрос клавиатуры , при нажатии клавиш управления курсором (вверх , вниз) перемещение цветового курсора по пунктам меню , выбор определённого пункта меню при нажатии клавиши с номером пункта меню , при нажатии клавиши Enter возвращается номер выбранного пункта меню , при нажатии клавиши Esc возвращается -1.

Логические

переменные:

*capt (char) - указатель на текст меню

x,y - координаты вывода меню на экран

Внутренние

переменные:

n,m (int) - Счетчики

num (int) - Количество пунктов

k (int) - Выбранный пункт

*pt (char) - Временный указатель на символ

c (char) - Считанный с клавиатуры символ

Вызывает функции:

нет

Вызывается из:

scroll , main

6.4 Функция sinput

Строка вызова:

SInput(cdt[ed].name,30,35,6)

SInput(cdt[ed].fio,30,35,8)

SInput(name,40,20,23)

Назначение:

Осуществляет ввод строки.

Функции:

Вывод пустой строки , установка координат , вывод строки запроса, считывание строки посимвольно с клавиатуры , выход , если нажата клавиша Enter или Esc , если нажата Esc то строка не записывается.

Логические

переменные:

*s (char) - указатель на строку

lng (int) - максимальная длина

x,y - координаты ввода

Внутренние

переменные:

rs[100] (char) - Временная строка

n (int) - Счетчик

c (char) - Введённый с клавиатуры символ

Вызывает функции:

нет

Вызывается из:

edit , find

6.5 Функция dinput

Строка вызова:

cdt[ed].price=DInput(35,10)

cdt[ed].number=DInput(35,12)

cdt[ed].num=DInput(35,14)

Назначение:

Осуществляет ввод числа.

Функции:

Вывод пустой строки , установка координат , вывод строки запроса, считывание строки посимвольно с клавиатуры , получение введённого числа , выход , если нажата клавиша Enter или Esc , если нажата Esc то число не записывается.

Логические

переменные:

*s (char) - указатель на строку

lng (int) - максимальная длина

x,y - координаты ввода

Внутренние

переменные:

s[100] (char) - Временная строка

* сtpe (char) - указатель на сторку

rs (double) - Результат

n (int) - Счетчик

c (char) - Введённый с клавиатуры символ

Вызывает функции:

нет

Вызывается из:

edit

6.6 Функция graph

Строка вызова:

graph()

Назначение:

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

Функции:

Определение масштаба , построение осей координат , вывод диаграммы , ожидание нажатия пользователем клавиши.

Логические

переменные:

нет

Внутренние

переменные:

drv,mode (int) - для инициализации графики

c (int) - Цвет

k1,k2,k3 (int) - количество книг

n (int) - Счетчик

m (int) - Масштаб

Вызывает функции:

нет

Вызывается из:

main

6.7 Функция index

Строка вызова:

index()

Назначение:

Осуществляет индексирование массива - назначение номеров элементов по алфавиту для каждого поля записи.

Функции:

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

Логические

переменные:

нет

Внутренние

переменные:

n,m (int) - счётчики

tm (int) - перебор тем

mxc (char[100]) - значение наименьшей строки

nm (int) - номер очередного элемента

Вызывает функции:

cmp

Вызывается из:

scroll

6.8 Функция edit

Строка вызова:

edit(cnum-1)

edit(n)

edit(500)

Назначение:

Осуществляет редактирование элемента массива.

Функции:

Ввод данных , вывод одного из полей структуры , опрос клавиатуры , выбор действия - редактирование поля или выход (клавиша Esc).

Логические

переменные:

ed (int) - номер элемента массива

Внутренние

переменные:

n (int) - счётчик

en (int) - редактируемое поле

c (char) - Введённый с клавиатуры символ

Вызывает функции:

sinput , dinput

Вызывается из:

scroll

6.9 Функция find

Строка вызова:

find()

Назначение:

Осуществляет поиск элемента в заданной строке по заданной маске.

Функции:

Поиск элемента , Возврат результатов в файл или на экран.

Логические

переменные:

нет

Внутренние

переменные:

n (int) - счётчик

*F(file - файл ввода

name[50] (char) - Имя файла

Вызывает функции:

cmp , sinput

Вызывается из:

main

6.10 Функция scroll

Строка вызова:

scroll ()

Назначение:

Осуществляет обработку списка.

Функции:

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

Логические

переменные:

нет

Внутренние

переменные:

st (int) - номер выбранного пункта меню

n (int) - счётчик

c (char) - Введённый с клавиатуры символ

sv , sk (int) - первый элемент на экране и положение курсора

Вызывает функции:

output , menu , edit , index.

Вызывается из:

main

6.11 Функция load

Строка вызова:

load()

Назначение:

Осуществляет загрузку базы данных из файла.

Функции:

Открытие файла с именем librarym.dat , чтение количества строк в массиве , чтение данных в массив , закрытие файла.

Логические

переменные:

нет

Внутренние

переменные:

*f (file) - указатель на файл

Вызывает функции:

нет

Вызывается из:

main

6.12 Функция save

Строка вызова:

save()

Назначение:

Осуществляет запись базы данных в файл.

Функции:

Открытие файла librarym.dat , запись количества элементов , запись данных в файл , закрытие файла.

Логические

переменные:

нет

Внутренние

переменные:

*f (file) - указатель на файл

Вызывает функции:

нет

Вызывается из:

main

6.13 Основная программа - main

Назначение:

Осуществляет установку начальных значений , чтение базы данных из файла , обработку , запись базы данных в файл.

Функции:

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

Вызывает функции:

load , save , scroll , menu , find , graph.

7 Технические требования для использования

Для запуска данной программы необходимо наличие персонального компьютера IBM PC/XT c операционной системой MS-DOS.

Необходимый объем оперативной памяти -640 Кбайт.

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

Программа работает в текстовом режиме 80х25 символов , построение диаграммы осуществляется в графическом режиме 640х480 точек 16 цветов.

Файл базы данных программы librarym.dat будет записываться и считываться из текущего каталога текущего диска.

Управление программой осуществляется с клавиатуры.

8 Руководство пользователя

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

При нажатии клавиши Enter на одном из элементов списка , то на экран будет вызванно меню:

1) Список книг

2) Поиск по маске

3) Количество книг

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

При выборе первого пункта меню моявится следующее подменю:

1) Расположение:

2) Читальный зал

3) Абонемент

4) Хранилище

При нажатии пользователем клавиши Enter на выведенном списке книг появляется меню:

1) Добавить в список

2) Удалить из списка

3) Редактировать

4) По Автору

5) По Названию

6) Выход в главное меню

При нажатии на клавиши управления курсором (вверх , вниз) можно управлять курсором , если нажать клавишу Enter или клавишу с номером пункта меню , то произойдёт то или иное действие в соответствии с выбранным пунктом.

Отсортированная последовательность выводится на экран в виде списка книг. При выборе пункта "Поиск по маске" программа запрашивает данные для поиска книги: Название , Автор , Стоимость , Порядковый номер , Количество , Тематика (Не влияет).

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

При выборе пункта "Выход из программы" программа завершает свою работу.

9 Тестирование программы

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

План тестирования программы учёта и выборки информации о странах состоит в следующем:

1) Загрузка программы

2) Ввод данных о книгах

3) Удаление книги из списка

4) Редактирование данных о книге

5) Сортировка

6) Поиск по маске

7) Построение диаграммы

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

Далее в пункте "Результаты работы программы" приводится распечатка тестирования программы по пунктам плана тестирования и результатов тестирования.

10 Результаты работы программы

2) Ввод данных о книгах

76 Автор2 Книга9 22 11.00р

11 Автор2 Книга8 28 21.00р

22 Автор65 Книга33 18 32.00р

55 Автор1 Книга3 12 22.00р

2 Автор2 Книга2 10 55.00р

1 Автор1 Книга 1 10 34.00р

3) Удаление книги из списка

76 Автор2 Книга9 22 11.00р

11 Автор2 Книга8 28 21.00р

22 Автор65 Книга33 18 32.00р

55 Автор1 Книга3 12 22.00р

2 Автор2 Книга2 10 55.00р

4) Редактирование данных о книге

Название: Книга3

Автор: Автор1

Стоимость: 20.00

Порядковый номер: 55

Количество: 20

Тематика: Научная

5) Сортировка

По автору:

22 Автор65 Книга33 18 32.00р

76 Автор2 Книга9 22 11.00р

2 Автор2 Книга2 10 55.00р

11 Автор2 Книга8 28 21.00р

55 Автор1 Книга3 20 20.00р

По названию:

76 Автор2 Книга9 22 11.00р

11 Автор2 Книга8 28 21.00р

22 Автор65 Книга33 18 32.00р

55 Автор1 Книга3 20 20.00р

2 Автор2 Книга2 10 55.00р

7) Построение диаграммы

Заключение

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

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

Список литературы

1.Бьярн Страуструп. Язык программирования С++.в двух частях. Пер. с англ. Киев:"ДиаСофт",1993.-296 с.,ил.

2.Корриган Джон Компьютерная графика: Секреты и решения: Пер с англ. -М.:Энтроп, 1995. - 352 с., ил.

ПРИЛОЖЕНИЕ 1

Распечатка программы

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <graphics.h>

#include <conio.h>

// Структура - данные о одной книге

struct books {

char name[30]

// Название

char fio[30]

// Автор

int num

// Количество

float price

// Стоимость

long number

// Порядковый номер

// Расположение: 0-читальный зал, 1-абонемент, 2-хранилище

int loc

int tem

// Тематика

int nn,nf

// Номер по названию, автору

}

// Массив - 500 книг и маска для поиска

books cdt[501]

// Массив данных о книгах

int cnum

// Количество книг

// Сортировать по: 1-Названию, 2-автору

char sort

// Расположение

char ftm

const char location[3][15]={" Читальный залx0",

" Абонементx0",

" Хранилищеx0"}

const char tema[5][15]={ "Художественнаяx0",

" Техническаяx0",

" Научнаяx0",

" Справочникx0",

" _Не влияет_ x0"}

// ПРОТОТИПЫ ФУНКЦИЙ

// Сравнение строки с маской

int cmp(char * a,char * b)

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

void output(int sv,int sk)

// Обработка меню

int menu(int x,int y,char * capt)

// Ввод строки

void SInput(char * s,int lng,int x,int y)

// Ввод числа

double DInput(int x,int y)

// Индексирование массива

void index()

// Редактирование элемента

void edit(int ed)

// Вывод данных по маске

void find()

// Вывод графика

void graph()

// Обработка списка

void scroll()

// Чтение массива

void load()

// Запись массива

void save()

// ТЕЛА ФУНКЦИЙ

// Сравнение строки с маской

// a- строка, b- маска

int cmp(char * a,char * b) {

int k

int n

k=1

for (n=0

n<strlen(b)

n++)

if (a[n]!=b[n]) k=0

return k

}

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

void output(int sv,int sk) {

int n

int m

int nd

m=sv

// Очистка экрана

textcolor(15)

textbackground(1)

clrscr()

// Вывод двадцати элементов

for (n=1

n<20

n++) {

// Если элемент выбран, изменение цветов

if (n==sk) {

textbackground(14)

} else {

textbackground(1)

}

if (m<(cnum+1)) {

nd=0

// Поиск элемента с данным индексом

switch (sort) {

case(1):

while (((cdt[nd].nn!=m)||(cdt[nd].loc!=ftm))&&(nd<cnum+1)) nd++

break

case(2):

while (((cdt[nd].nf!=m)||(cdt[nd].loc!=ftm))&&(nd<cnum+1)) nd++

break

}

switch (sort) {

case(1):

if ((cdt[nd].nn!=m)||(cdt[nd].loc!=ftm)) nd=-1

break

case(2):

if ((cdt[nd].nf!=m)||(cdt[nd].loc!=ftm)) nd=-1

break

}

m++

// Вывод данных о стране на экран

gotoxy(1,m-sv)

if (nd!=-1)

cprintf("%4ld %30s %30s %4d %6.2fр",cdt[nd].number,cdt[nd].fio,

cdt[nd].name,cdt[nd].num,cdt[nd].price)

}

}

textbackground(1)

}

// Обработка меню

int menu(int x,int y,char * capt) {

int n,m

// Счетчики

int num

// Количество пунктов

int k

// Выбранный пункт

char * pt

// Временный указатель на символ

char c

// Считанный с клавиатуры символ

// Вычисляем количество пунктов

num=strlen(capt)/20

// Курсор на нулевой элемент

k=0

// Бесконечный цикл обработки

for (

) {

// Вывод меню

pt=capt

for (n=0

n<num

n++) {

gotoxy(x,y+n)

// Закраска пункта, на который указывает курсор

if (n==k) {

// Закраска

textbackground(12)

textcolor(14)

} else {

// Нормальный

textbackground(3)

textcolor(1)

}

cprintf("%d) ",n+1)

for (m=0

m<20

m++) cprintf("%c",*(pt++))

}

textbackground(3)

textcolor(1)

// Опрос клавиатуры

c=getch()

if (!c) c=getch()

// Проверка, не нажата ли клавиша с цифрой

if (((c-'1')>=0)&&((c-'1')<num)) {

// Установка указателя в зависимости от нажатой цифры

k=c-'1'

// Запись в буфер клавиатуры символа ENTER

ungetch(13)

} else {

// Анализ

switch(c) {

// Вверх

case (72):

if (k>0) k--

else k=num-1

break

// Вниз

case (80):

if (k<(num-1)) k++

else k=0

break

// Выход по ESC - возвращается -1

case (27):

return -1

// Выход по ENTER - возвращается номер пункта

case (13): return k

}

}

}

}

// Ввод строки

// s - указатель на строку

// lng - Максимальная длинна

// x,y - координаты

void SInput(char * s,int lng,int x,int y) {

lng--

char rs[100]

// Временная строка

strcpy(rs,s)

// Копирование резерва строки

int n

// Счетчик

char c

// Символ

_setcursortype(_NORMALCURSOR)

// Вывод пустой строки

textbackground(2)

textcolor(15)

gotoxy(x,y)

for (n=0

n<lng

n++) cprintf(" ")

n=strlen(s)

// Положение курсора

do {

// Вывод строки

gotoxy(x,y)

cprintf("%s ",s)

gotoxy(x+n,y)

c=getch()

// Считывание символа с клавиатуры

if ((c!=13)&&(c!=27)&&(c!=8)) {

// Нажата символьная клавиша

if (n<(lng-1)) {

// Добавление символа

s[n+1]=0

s[n]=c

n++

}

} else {

if (c==8) {

// Нажата клавиша BackSpace

if (n>0) {

n--

s[n]=0

}

}

}

// Выход, если ESC или ENTER

} while ((c!=27)&&(c!=13))

if(c==27) strcpy(s,rs)

// Восстановление строки

// Стирание строки

textbackground(0)

textcolor(7)

gotoxy(x,y)

for (n=0

n<lng+1

n++) cprintf(" ")

_setcursortype(_NOCURSOR)

}

// Ввод числа

// x,y - координаты

double DInput(int x,int y) {

char s[100]

// Временная строка

char *stpe

double rz

s[0]=0

int n

// Счетчик

char c

// Символ

// Вывод пустой строки

_setcursortype(_NORMALCURSOR)

textbackground(2)

textcolor(15)

gotoxy(x,y)

for (n=0

n<15

n++) cprintf(" ")

n=strlen(s)

// Положение курсора

do {

// Вывод строки

gotoxy(x,y)

cprintf("%s ",s)

gotoxy(x+n,y)

c=getch()

// Считывание символа с клавиатуры

if ((c!=13)&&(c!=27)&&(c!=8)) {

// Нажата символьная клавиша

if (n<14) {

// Добавление цифры или точки

if ((c>='0')&&(c<='9')||(c=='.')) {

s[n+1]=0

s[n]=c

n++

}

}

} else {

if (c==8) {

// Нажата клавиша BackSpace

if (n>0) {

n--

s[n]=0

}

}

}

// Выход, если ESC или ENTER

} while ((c!=27)&&(c!=13))

if(c==27) return 0

// Стирание строки

textbackground(0)

textcolor(7)

gotoxy(x,y)

for (n=0

n<15

n++) cprintf(" ")

rz=strtod(s,&stpe)

_setcursortype(_NOCURSOR)

return rz

}

// Индексирование массива - Назначение номеров элементов

void index() {

int tm

// Перебор тем

int n,m

// Счетчики

char mxc[100]

// Значение наименьшей строки

int nm

// Номер очередного элемента

// Стирание старых индексов

for (n=0

n<cnum

n++) {

cdt[n].nn=0

cdt[n].nf=0

}

// Перебор всех возможных мест хранения

for (tm=0

tm<3

tm++) {

// Индексация по автору

for (m=0

m<cnum

m++) {

// Поиск наименьшего

strcpy(mxc,"x0")

nm=-1

for (n=0

n<cnum

n++)

if ((cdt[n].nf==0)&&(cdt[n].loc==tm))

if (strcmp(cdt[n].fio,mxc)>0) {

strcpy(mxc,cdt[n].fio)

nm=n

}

if (nm!=-1) cdt[nm].nf=m+1

}

// Индексация по названиям

for (m=0

m<cnum

m++) {

// Поиск наименьшего

strcpy(mxc,"x0")

nm=-1

for (n=0

n<cnum

n++)

if ((cdt[n].nn==0)&&(cdt[n].loc==tm))

if (strcmp(cdt[n].name,mxc)>0) {

strcpy(mxc,cdt[n].name)

nm=n

}

if (nm!=-1) cdt[nm].nn=m+1

}

}

}

// Редактирование элемента массива

void edit(int ed) {

clrscr()

// Обработка

int n

// Счетчик

int en=0

// Редактируемое поле

char c

// Символ с клавиатуры

for(

) {

// Вывод данных

for (n=0

n<6

n++) {

// Изменение цвета если элемент выбран

if (n==en) {

textbackground(12)

textcolor(15)

} else {

textbackground(1)

textcolor(7)

}

gotoxy(15,6+2*n)

// Вывод одного из полей структуры

switch(n) {

case 0:

cprintf(" Название: %45s",cdt[ed].name)

break

case 1:

cprintf(" Автор: %45s",cdt[ed].fio)

break

case 2:

cprintf(" Стоимость: %45.2f",cdt[ed].price)

break

case 3:

cprintf(" Порядковый номер: %45d",cdt[ed].number)

break

case 4:

cprintf(" Количество: %45d",cdt[ed].num)

break

case 5:

cprintf(" Тематика: %45s",tema[cdt[ed].tem])

}

}

// Опрос клавиатуры

c=getch()

if (!c) c=getch()

switch(c){

// Вверх

case (72):

en--

if (en<0) en=5

break

// Вниз

case (80):

en++

if (en>5) en=0

break

// ENTER - Редактирование поля или выход

case (13):

// Выбор действия

switch(en) {

case 0:

SInput(cdt[ed].name,30,35,6)

break

case 1:

SInput(cdt[ed].fio,30,35,8)

break

case 2:

cdt[ed].price=DInput(35,10)

break

case 3:

cdt[ed].number=DInput(35,12)

break

case 4:

cdt[ed].num=DInput(35,14)

break

case 5:

// Изменение тематики

cdt[ed].tem=(cdt[ed].tem+1)%4

break

}

break

case(27):

return

}

}

}

// Вывод по маске

void find() {

int n

// Счетчик

FILE * f

// Файл вывода

char name[50]

// Имя файла

strcpy(name,"CON")

// Изначально - CON, т.е. экран

// Ввод имени файла вывода

textbackground(0)

clrscr()

gotoxy(1,23)

cprintf(" Введитеимя файла: ")

SInput(name,40,20,23)

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

f=fopen(name,"wb")

if (f==NULL) return

fprintf(f,"nr Список книг, выбранных по маске nr")

// Перебор всех элементов

for (n=0

n<cnum

n++)

// Если удовлетворяет условию

if (cmp(cdt[n].name,cdt[500].name)&&

cmp(cdt[n].fio,cdt[500].fio)&&

(cdt[n].price>=cdt[500].price)) {

// Вывод в файл

fprintf(f,"%4ld %30s %30s %4d %6.2fрnr",cdt[n].number,cdt[n].fio,

cdt[n].name,cdt[n].num,cdt[n].price)

}

// Закрывается файл

fclose(f)

printf("nn Нажмите любую клавишу для продолжения")

getch()

}

// Вывод графика

void graph() {

// Ингициализация графики

int c

// Цвет

int drv,mode

// Для инициализации графики

int k1,k2,k3

// Количество книг

int n

// Счетчик

int m

// Масштаб

drv=DETECT

initgraph(&drv,&mode,"")

// Подсчет количества книг

k1=k2=k3=0

for (n=0

n<cnum

n++) {

switch(cdt[n].loc) {

case (0):

k1++

break

case (1):

k2++

break

case (2):

k3++

break

}

}

// Определение максимального

if (k1>k2) m=k1

else m=k2

if (m<k3) m=k3

// Определение масштаба

m=400/m

// Вывод столбчатой диаграммы

line(0,470,640,470)

line(10,0,10,480)

outtextxy(100,20," Распределение книг ")

// Рассчет цвета столбца - 12 - максимальное значение

c=12

if (k2>k1) c--

if (k3>k1) c--

setfillstyle(9,c)

bar3d(20,470-m*k1,120,470,10,1)

// Рассчет цвета столбца - 12 - максимальное значение

c=12

if (k1>k2) c--

if (k3>k2) c--

setfillstyle(9,c)

bar3d(140,470-m*k2,240,470,10,1)

// Рассчет цвета столбца - 12 - максимальное значение

c=12

if (k1>k3) c--

if (k2>k3) c--

setfillstyle(9,c)

bar3d(260,470-m*k3,360,470,10,1)

// Вывод поясняющих надписей

setcolor(14)

outtextxy(30,450-m*k1,"Читальный зал")

outtextxy(150,450-m*k2,"Абонемент")

outtextxy(270,450-m*k3,"Хранилище")

// Ожидание нажатия клавиши

getch()

closegraph()

_setcursortype(_NOCURSOR)

}

// Обработка списка

void scroll() {

char c

// Считанный с клавиатуры символ

static int sv=1,sk=1

// Первый элемент на экране и положение курсора

int st

// Выбранный пункт меню

int n

// Счетчик

// Цикл обработки

do {

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

output(sv,sk)

// Ввод символа

c=getch()

if (!c) c=getch()

// Обработка символа

switch (c) {

// Вверх

case (72):

if (sk>1) sk--

else if (sv>1) sv--

break

// Вниз

case (80):

if (sk<7) {

if (sk<(cnum-sv+1)) sk++

} else if (sv<(cnum-7)) sv++

break

// Меню

case (13):

st=menu(30,5,"Добавить в список "

"Удалить из списка "

"Редактировать "

"По Автору "

"По Названию "

"Выход в главное меню"

"x0")

switch(st) {

case (0):

if (cnum<299) {

cdt[cnum].name[0]=0

cdt[cnum].fio[0]=0

cdt[cnum].price=0

cdt[cnum].number=0

cdt[cnum].num=0

cdt[cnum].tem=0

cdt[cnum].loc=ftm

cnum++

edit(cnum-1)

}

index()

break

case (1):

// Удаление элемента

if (cnum>1) {

n=0

switch (sort) {

case (1):

while (((cdt[n].nn!=sk+sv-1)||(cdt[n].loc!=ftm))&&(n<cnum+1)) n++

break

case (2):

while (((cdt[n].nf!=sk+sv-1)||(cdt[n].loc!=ftm))&&(n<cnum+1)) n++

break

}

if (n!=(cnum+1)) {

strcpy(cdt[n].name,cdt[cnum-1].name)

strcpy(cdt[n].fio,cdt[cnum-1].fio)

cdt[n].price=cdt[cnum-1].price

cdt[n].num=cdt[cnum-1].num

cdt[n].number=cdt[cnum-1].number

cdt[n].loc=cdt[cnum-1].loc

cdt[n].tem=cdt[cnum-1].tem

cnum--

index()

}

}

break

// Редактирование элемента

case (2):

n=0

switch (sort) {

case (1):

while (((cdt[n].nn!=sk+sv-1)||(cdt[n].loc!=ftm))&&(n<cnum+1)) n++

break

case (2):

while (((cdt[n].nf!=sk+sv-1)||(cdt[n].loc!=ftm))&&(n<cnum+1)) n++

break

}

edit(n)

index()

break

case (3):

case (4):

sort=5-st

break

case (5):

// Выход в предыдущее меню

return

}

break

}

} while(c!=27)

}

// Чтение массива

void load() {

// Открытие файла на чтение

FILE * f

f=fopen("librarym.dat","rb")

if (f==NULL) return

// Чтение количества книг

fread(&cnum,1,2,f)

// Чтение массива

fread(cdt,cnum,sizeof(books),f)

// Закрытие файла

fclose(f)

}

// Запись файла

void save() {

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

FILE * f

f=fopen("librarym.dat","wb")

if (f==NULL) {

printf(" !!! ОШИБКА ПРИ ЗАПИСИ БАЗЫ ДАННЫХ !!! n")

return

}

// Запись количества элементов в массив

fwrite(&cnum,1,2,f)

// Запись массива

fwrite(cdt,cnum,sizeof(books),f)

// Закрытие файла

fclose(f)

}

// Основная программа

void main() {

int st

// Установка начальных значений

_setcursortype(_NOCURSOR)

cnum=0

sort=1

ftm=0

// Чтение массива

load()

index()

// Обработка

do {

// Основное меню

textcolor(15)

textbackground(0)

clrscr()

st=menu(30,5," Список книг "

" Поиск по маске "

" Количество книг "

" Выход из программы "

"x0")

switch(st) {

case (0):

// Подменю для вывода списка

st=menu(40,6," Расположение: "

" Читальный зал "

" Абонемент "

" Хранилище "

"x0")

if (st!=0) {

ftm=st-1

scroll()

st=0

}

break

case (1):

// Поиск

cdt[500].name[0]=0

cdt[500].fio[0]=0

cdt[500].price=0

cdt[500].number=0

cdt[500].num=0

cdt[500].tem=4

edit(500)

find()

break

case (2):

// Вывод графика

graph()

break

}

} while (st!=3)

// Выход из программы

textcolor(7)

textbackground(0)

clrscr()

// Запись массива

save()

_setcursortype(_NORMALCURSOR)

}


Нет нужной работы в каталоге?

Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

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

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
63 457 оценок star star star star star
среднее 4.9 из 5
Тгу им. Г. Р. Державина
Реферат сделан досрочно, преподавателю понравилось, я тоже в восторге. Спасибо Татьяне за ...
star star star star star
РЭУ им.Плеханово
Альберт хороший исполнитель, сделал реферат очень быстро, вечером заказала, утром уже все ...
star star star star star
ФЭК
Маринаааа, спасибо вам огромное! Вы профессионал своего дела! Рекомендую всем ✌🏽😎
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

Подогнать готовую курсовую под СТО

Курсовая, не знаю

Срок сдачи к 7 дек.

только что
только что

Выполнить задания

Другое, Товароведение

Срок сдачи к 6 дек.

1 минуту назад

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

Лабораторная, Архитектура средств вычислительной техники

Срок сдачи к 12 дек.

1 минуту назад

Организации профилактики травматизма в спортивных секциях в общеобразовательной школе

Курсовая, профилактики травматизма, медицина

Срок сдачи к 5 дек.

2 минуты назад

краткая характеристика сбербанка анализ тарифов РКО

Отчет по практике, дистанционное банковское обслуживание

Срок сдачи к 5 дек.

2 минуты назад

Исследование методов получения случайных чисел с заданным законом распределения

Лабораторная, Моделирование, математика

Срок сдачи к 10 дек.

4 минуты назад

Проектирование заготовок, получаемых литьем в песчано-глинистые формы

Лабораторная, основы технологии машиностроения

Срок сдачи к 14 дек.

4 минуты назад

2504

Презентация, ММУ одна

Срок сдачи к 7 дек.

6 минут назад

выполнить 3 задачи

Контрольная, Сопротивление материалов

Срок сдачи к 11 дек.

6 минут назад

Вам необходимо выбрать модель медиастратегии

Другое, Медиапланирование, реклама, маркетинг

Срок сдачи к 7 дек.

7 минут назад

Ответить на задания

Решение задач, Цифровизация процессов управления, информатика, программирование

Срок сдачи к 20 дек.

7 минут назад
8 минут назад

Все на фото

Курсовая, Землеустройство

Срок сдачи к 12 дек.

9 минут назад

Разработка веб-информационной системы для автоматизации складских операций компании Hoff

Диплом, Логистические системы, логистика, информатика, программирование, теория автоматического управления

Срок сдачи к 1 мар.

10 минут назад
11 минут назад

перевод текста, выполнение упражнений

Перевод с ин. языка, Немецкий язык

Срок сдачи к 7 дек.

11 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

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

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно