Главная Рефераты по рекламе Рефераты по физике Рефераты по философии Рефераты по финансам Рефераты по химии Рефераты по хозяйственному праву Рефераты по цифровым устройствам Рефераты по экологическому праву Рефераты по экономико-математическому моделированию Рефераты по экономической географии Рефераты по экономической теории Рефераты по этике Рефераты по юриспруденции Рефераты по языковедению Рефераты по юридическим наукам Рефераты по истории Рефераты по компьютерным наукам Рефераты по медицинским наукам Рефераты по финансовым наукам Рефераты по управленческим наукам Психология и педагогика Промышленность производство Биология и химия Языкознание филология Издательское дело и полиграфия Рефераты по краеведению и этнографии Рефераты по религии и мифологии Рефераты по медицине Рефераты по сексологии Рефераты по информатике программированию Краткое содержание произведений |
Реферат: Программа обработки данных в библиотекеРеферат: Программа обработки данных в библиотекеПояснительная записка к курсовой работе по дисциплине “Основы алгоритмизации и программирования” Выполнил : студент гр. 96-ВВ3 Митиков Р.О. Пензенский государственный университет, Кафедра “Вычислительная Техника” Пенза 1998 ВведениеС момента появления первых образцов персональных компьютеров прошло не так уж и много времени,но сейчас без них уже немыслимо огромное количество областей человеческой деятельности - экономика , управление , наука , инженерное дело , издательское дело , образование , культура и т.д. Интерес к персональным компьютерам постоянно растет,а круг их пользователей непрерывно расширяется.В число пользователей ПЭВМ вовлекаются как новички в компьютерном деле,так и специалисты по другим классам ЭВМ. Язык С++ - универсальный язык общего назначения, область приложений которого - программирование систем в самом широком смысле. Кроме этого, С++ успешно используется как во многих приложениях, так и в мощных операционных системах. Реализация С++ осуществлена для машин в диапазоне от самых простых персональных компьютеров до самых мощных суперкомпьютеров и для всех операционных систем. 1 Постановка задачиЗадача курсовой работы состоит в разработке на языке программирования С++ программы обработки данных в библиотеке , которая должна осуществлять следующие функции: 1) Ввод данных о книгах , имеющихся в библиотеке:название книги , автор , количество экземпляров , порядковый номер , стоимость книги 2) Вывод информации на экран (в файл) по запросу о книгах , имеющихся в библиотеке: читальном зале , абонементе , хранилище по названию , автору, тематике. 3) Сбор статистики о книгах одного автора с разными названиями. 4) Построение графической диаграммы для пункта по выбору. Работа программы должна быть организована с использованием меню. Программу разработать на языке С++ v.3.1. 2 Метод решения задачиАнализируя постановку задачи становится ясно , что для её решения необходимо применить метод многофункционального программирования - этот метод основан на разбиении программы на отдельные функциональные модули , которые вызываются из основной программы в процессе её работы. В основе разработки такой программы лежит низходящее программирование - т.е. сначала разрабатывается основная программа - в данном случае программа ввода текста на экран , обработки функциональных клавиш и меню , с помощью выбора пунктов которого будет в дальнейшем организовываться её работа. При выборе того или иного пункта меню или нажатии функциональной клавиши будет вызываться одна или несколько подпрограмм , но на начальном этапе разработки программы методом нисходящего программирования вместо этих подпрограмм ставяться "заглушки" - пустые подпрограммы , которые в процессе разработки будут заменяться программами , выполняющими определённую функцию. 3 Описание логического представления данныхВходными данными в программе являются: Файл базы данных , который записан на диске в файле librarym.dat. Данные , которые в процессе работы программы можно добавить , удалить или отредактировать. Выходными данными в программе являются: Данные , сортированные по названию или автору Результат поиска по заданной маске График Файл базы данных , который записывается на диск в файл librarym.dat при завершении работы программы. Данные об книге хранятся в массиве структур типа books: Структура books:
Глобальные переменные программы:
6 Спецификация на функциональные модули 6.1 Функция cmp
6.2 Функция output
6.3 Функция menu
6.4 Функция sinput
6.5 Функция dinput
6.6 Функция graph
6.7 Функция index
6.8 Функция edit
6.9 Функция find
6.10 Функция scroll
6.11 Функция load
6.12 Функция save
6.13 Основная программа - main
7 Технические требования для использованияДля запуска данной программы необходимо наличие персонального компьютера IBM PC/XT c операционной системой MS-DOS. Необходимый объем оперативной памяти -640 Кбайт. Дла запуска программы необходимо сделать текущем каталог с программой kurs.exe и вызвать её на выполнение. Программа работает в текстовом режиме 80х25 символов , построение диаграммы осуществляется в графическом режиме 640х480 точек 16 цветов. Файл базы данных программы librarym.dat будет записываться и считываться из текущего каталога текущего диска. Управление программой осуществляется с клавиатуры. 8 Руководство пользователяПосле своей загрузки программа осуществляет оформление экрана , вывод на экран списка книг , содержащийся в файле базы данных , по которым можно передвигать цветовой курсор. При нажатии клавиши Enter на одном из элементов списка , то на экран будет вызванно меню:
При выборе первого пункта меню моявится следующее подменю:
При нажатии пользователем клавиши Enter на выведенном списке книг появляется меню:
При нажатии на клавиши управления курсором (вверх , вниз) можно управлять курсором , если нажать клавишу 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) (cdt[nd].loc!=ftm))&&(nd<cnum+1)) nd++ switch (sort) (cdt[nd].loc!=ftm)) 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) 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) (cdt[n].loc!=ftm))&&(n<cnum+1)) n++ 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) } |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|