Мегаобучалка Главная | О нас | Обратная связь


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



2019-07-03 170 Обсуждений (0)
Технические требования для использования 0.00 из 5.00 0 оценок




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

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

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

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

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

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

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

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

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

1) Список книг
2) Поиск по маске
3) Количество книг
4) Выход из программы

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

1) Расположение:
2) Читальный зал
3) Абонемент
4) Хранилище

 

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

1) Добавить в список
2) Удалить из списка
3) Редактировать
4) По Автору
5) По Названию
6) Выход в главное меню

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

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

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

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

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

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

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

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,"\n\r Список книг, выбранных по маске \n\r")

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

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р\n\r",cdt[n].number,cdt[n].fio,

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

}

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

fclose(f)

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

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)

}

 



2019-07-03 170 Обсуждений (0)
Технические требования для использования 0.00 из 5.00 0 оценок









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

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (170)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)