БОЛЬШАЯ НАУЧНАЯ БИБЛИОТЕКА  
рефераты
Добро пожаловать на сайт Большой Научной Библиотеки! рефераты
рефераты
Меню
Главная
Налоги
Начертательная геометрия
Оккультизм и уфология
Педагогика
Полиграфия
Политология
Право
Предпринимательство
Программирование и комп-ры
Радиоэлектроника
Региональная экономика
Режущий инструмент
Реклама и PR
Ресторанно-гостиничный бизнес бытовое обслуживан
Римское право
Русский язык культура речи
РЦБ ценные бумаги
САПР
Сексология
Семейное право
Социология
Страховое право
Строительство архитектура
Таможенное право
Теория государства и права
Технология
Таможенная система
Транспорт
Физика и энергетика
Философия
Финансы деньги и налоги
Физкультура и спорт
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
Экология
Экономика
Экономико-математическое моделирование
Экономическая география
Экономическая теория
Эргономика
Этика и эстетика
Сочинения по литературе и русскому языку
Рефераты по теории государства и права
Рефераты по теории организации
Рефераты по теплотехнике
Рефераты по товароведению
Рефераты по трудовому праву
Рефераты по туризму
Рефераты по уголовному праву и процессу
Рефераты по управлению
Рефераты по менеджменту
Рефераты по металлургии
Рефераты по муниципальному праву
Биографии
Рефераты по психологии
Рефераты по риторике
Рефераты по статистике
Рефераты по страхованию
Рефераты по схемотехнике
Рефераты по науке и технике
Рефераты по кулинарии
Рефераты по культурологии
Рефераты по зарубежной литературе
Рефераты по логике
Рефераты по логистике
Рефераты по маркетингу
Рефераты по международному публичному праву
Рефераты по международному частному праву
Рефераты по международным отношениям
Рефераты по культуре и искусству
Рефераты по кредитованию
Рефераты по естествознанию
Рефераты по истории техники
Рефераты по журналистике
Рефераты по зоологии
Рефераты по инвестициям
Рефераты по информатике
Исторические личности
Рефераты по кибернетике
Рефераты по коммуникации и связи
Рефераты по косметологии
Рефераты по криминалистике
Рефераты по криминологии
Новые или неперечисленные
Без категории

Электронная картотека

Электронная картотека

Текст программы:

#include

#include

#include

#include

#include

struct PL //Задание структурных переменных

{

char namepl[18];

int year;

char people[15];

unsigned int sputnik;

PL *prev;

PL *next;

};

void menu1() //Функция главного меню

");

void menu2() //Меню поиска элементов

{

puts("\n\n\n\n\t\t\t Меню поиска:\n");

puts("\t\t\t 1- Вывод по названию планеты.");

puts("\t\t\t 2- Вывод по году открытия.");

puts("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t Для выхода в главное меню

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

}

void sovet(char *s) //Функция подсказки

{

window(1,25,79,25);

textcolor(GREEN+BLUE);

textbackground(WHITE+YELLOW);

clrscr();

cprintf(" %s",s);

textcolor(10);

window(1,1,79,25);

textbackground(0);

}

void vvod(PL *pla) //Функция ввода структуры

{

do

{

clrscr();

puts("Введите имя планеты :");

fflush(stdin);

gets(pla->namepl);

}

while(strlen(pla->namepl)>18);

do

{

puts("Год открытия планеты :");

scanf("%d",&(pla->year));

}

while((pla->year)year)>30000);

do

{

puts("Кто открыл планету :");

fflush(stdin);

gets(pla->people);

}

while(strlen(pla->people)>15);

do

{

puts("Сколько спутников ?");

scanf("%d",&(pla->sputnik));

}

while(((pla->sputnik)sputnik)>999));

}

PL* vvodall() //Функция ввода структур

{

PL *playn, *pla;

clrscr();

sovet("Введите параметры планеты");

pla=(PL*)malloc(sizeof(PL));

vvod(pla);

playn=pla;

pla->next=NULL;

sovet("Для дальнейщего ввода нажми y, иначе любую клавишу.");

while (getch()=='y')

{

clrscr();

sovet("Введите параметры планеты");

pla=(PL*)malloc(sizeof(PL));

vvod(pla);

playn->prev=pla;

pla->next=playn;

playn=pla;

sovet("Для дальнейщего ввода нажми y, иначе любую клавишу.");

}

pla->prev=NULL;

while (pla->next)

pla=pla->next;

return(pla);

}

void vivodall(PL *pla) //Функция вывода на экран всех структур

%12u

void spisok(PL* pla) //Функция для работы со списком

{

clrscr();

window(17,2,62,15);

textbackground(4);

textcolor(15);

clrscr();

if (pla!=NULL)

{

cprintf("\n");

cprintf("%30s","ПАРАМЕТРЫ ПЛАНЕТ\n\n");

gotoxy(1,wherey()+2);

cprintf(" Название: %s",pla->namepl);

gotoxy(1,wherey()+2);

cprintf(" Год открытия: %d",pla->year);

gotoxy(1,wherey()+2);

cprintf(" Кто открыл: %s",pla->people);

gotoxy(1,wherey()+2);

cprintf(" Сколько спутников: %d",pla->sputnik);

}

textbackground(2);

sovet("Cледующая/Предыдущая планета(PgDn/PgUp)"

"Удаление(Del)""Добавление(Ins)""Выход(Esc)");

}

PL* vvodspisok(PL* pla) //Функция ввода элементов списка

{

PL* plr=pla;

char c;

sovet("Добавить элемент до / после текущего(Home/End)"

"Отмена(Esc)");

do

{

c=getch();

/*Esc*/ if (c==27) return(pla);

if (c==71||c==79)

{

clrscr();

sovet("Введите параметры планеты");

plr=(PL*)malloc(sizeof(PL));

vvod(plr);

if (pla==NULL)

{

plr->next=NULL;

plr->prev=NULL;

return(plr);

}

/*End*/ if (c==79)

{

plr->next=pla->next;

plr->prev=pla;

pla->next=plr;

(plr->next)->prev=plr;

}

/*Home*/if (c==71)

{

plr->next=pla;

plr->prev=pla->prev;

pla->prev=plr;

(plr->prev)->next=plr;

}

return(plr);

}

}

while(1);

}

PL* vozvr(PL* pla) //Возвращает указатель

{ //на начало списка pla

if (pla==NULL)

return(pla);

while(pla->next!=NULL)

pla=pla->next;

return(pla);

}

PL* korrekt(PL *pla) //Управляющие клавиши при работе со списком

{

spisok(pla);

PL* delit(PL*);

do

{

switch(getch())

{

/*PgUp*/ case 73:if(pla!=NULL)

{

if(pla->prev!=NULL)pla=pla->prev;spisok(pla);

}

break;

/*PgDn*/ case 81:if(pla!=NULL)

{

if(pla->next!=NULL)pla=pla->next;spisok(pla);

}

break;

/*Del*/ case 83:if(pla!=NULL)

{

pla=delit(pla);

spisok(pla);

}

break;

/*Ins*/ case 82:pla=vvodspisok(pla); spisok(pla); break;

/*Esc*/ case 27:pla=vozvr(pla); return(pla);

}

}

while(1);

}

PL* delit(PL* pla) //Функция удаления элементов из списка

{

PL* plr=NULL;

if(pla->prev!=NULL)

{

(pla->prev)->next=pla->next;

plr=pla->prev;

}

if(pla->next!=NULL)

{

(pla->next)->prev=pla->prev;

plr=pla->next;

}

free(pla);

return(plr);

}

void poisk1(PL *pla) //Функция поиска по названиям планет

{

char s[15],ch;

do

{

int i=1,l=0;

clrscr();

fflush(stdin);

puts("Введите интерессующее вас название планеты :");

gets(s);

printf("\n\n Планеты с названием %s :\n",s);

printf("+------+-----------------+------------+---------------+---------

--+\n");

printf("|Номер | Название | Когда | Кто открыл | Кол-во

|\n");

printf("| стр. | планеты | открыли | планету | спутников

|\n");

printf("+------+-----------------+------------+---------------+-----------

+\n");

printf("+------+-----------------+------------+---------------+-----------

+\n");

while (pla->prev)

{

if(strcmpi(pla->namepl,s)==0)

printf("

pla=pla->prev;

}

if (strcmpi(pla->namepl,s)==0)

l++;i++;

puts("+------+-----------------+------------+-----------------+-------------

+");

printf("\n Найдено %d планет.\n",l);

puts(" Поиск по названиям планет завершен. Продолжить?(y- да)");

fflush(stdin);

ch=getch();

}

while(ch=='y');

}

void poisk2(PL *pla) //Функция поиска по годам открытия

{

char ch;

do

{

int i=1,l=0,a,b;

clrscr();

fflush(stdin);

puts("Введите интерессующее вас границы поиска (от чего- то до чего-

то) :");

while(scanf("%d%d",&a,&b)!=2)

{

while (getchar()!='\n');

printf("Все- таки стоит здесь что- нибудь ввести\n(от a до b)\n");

}

printf("\n\n Планеты открытые в таком диапозоне(с %d до %d

года):\n",a,b);

printf("+------+-----------------+------------+---------------+-----------

+\n");

printf("|Номер | Название | Когда | Кто открыл | Кол-во

|\n");

printf("| стр. | планеты | открыли | планету | спутников

|\n");

printf("+------+-----------------+------------+---------------+-----------

+\n");

printf("+------+-----------------+------------+---------------+-----------

+\n");

while(pla->prev)

{

if((ayear)&&(b>=pla->year))

%18s

pla=pla->prev;

}

if((ayear)&&(b>=pla->year))

pla->year,pla->people,pla->sputnik);

puts("+------+-----------------+------------+---------------+-----------

+");

printf("\n Найдено %d планет.\n",l);

puts(" Поиск по годам открытия планет завершен. Продолжить?(y- да)");

fflush(stdin);

ch=getch();

}

while(ch=='y');

}

void klear(PL* pla) //Функция очистки памяти

{

PL *plr;

if (pla)

{

if (pla->prev)

{

plr=pla->prev;

while (plr->prev)

{

free(plr->next);

plr=plr->prev;

}

}

else

plr=pla;

free(plr);

}

}

char * fname() //Функция ввода имени файла

{

char *t;

t=(char *)malloc(80*sizeof(char));

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

fflush(stdin);

scanf("%79s",t);

return t;

}

int save1(PL *pla,char *filename) //Функция, сохраняющая данные

{

FILE *fp;

if((fp=fopen(filename,"w"))==NULL) return 0;

while(pla)

fprintf(fp,"%s %d %s %d

fclose(fp);

return 1;

}

int save(PL *pla) //Функция для сохранения данных

{

char * name;

window(1,1,79,25);

clrscr();

name=fname();

if (save1(pla,name)==1) return 1;

cprintf("\nНевозможно произвести запись!!!");

sovet("Ошибка!!! Нажмите любую кнопку");

getch();

return 0;

}

PL *load(PL *pla) //Функция загрузки данных из файла

{

char c,*name;

int i;

PL *plan=NULL,*plane=NULL;

FILE *fp;

window(1,1,79,25);

clrscr();

name=fname();

cprintf("Осуществлять чтение? (y-Да , n-Нет)\n");

do

c=getch();

while((c!='y')&&(c!='n'));

if (c=='n') return (pla);

if((fp=fopen(name,"rt"))==NULL)

{

klear(pla);

cprintf("\nОшибка при открытии файла!!!");

sovet("Ошибка!!! Нажмите любую кнопку");

getch();

return (NULL);

}

plane=(PL*)malloc(sizeof(PL));

while (fscanf(fp,"%s %d %s %d |",

plane->namepl,&(plane->year),plane->people,&(plane->sputnik))==4)

{

plane->prev=NULL;

plane->next=plan;

if (plan!=NULL) plan->prev=plane;

plan=plane;

plane=(PL*)malloc(sizeof(PL));

}

free(plane);

if (plan!=NULL)

{

while(plan->next)

plan=plan->next;

}

fclose(fp);

klear(pla);

return (plan);

}

/*Функция сортировки по алфавиту*/

PL *sort(PL *pla)

{

PL *point,*tmp=NULL,*f,*s;

int i,j,srav;

//Указатель на начало

f=pla;

point=pla;

while(f!=NULL)

{

s=f->next;

while(s!=NULL)

{

if((strcmp(f->namepl,s->namepl)>0))

{ tmp=(PL*)malloc(sizeof(PL));

strcpy(tmp->namepl,f->namepl);

tmp->year=f->year;

strcpy(tmp->people,f->people);

tmp->sputnik,f->sputnik;

//

strcpy(f->namepl,s->namepl);

f->year=s->year;

strcpy(f->people,s->people);

f->sputnik=s->sputnik;

//

strcpy(s->namepl,tmp->namepl);

s->year=tmp->year;

strcpy(s->people,tmp->people);

s->sputnik=tmp->sputnik;

free(tmp);

}

s=s->next;

}

strcpy(point->namepl,f->namepl);

point->year=f->year;

strcpy(point->people,f->people);

point->sputnik=f->sputnik;

point=point->next;

f=f->next;

}

point=pla;

return(point);

}

void main()

{

char ccc,hhh,ch;

int i;

PL* planet=NULL;

planet->prev=planet->next=NULL;

_setcursortype(_NOCURSOR);

textcolor(10);

menu1();

do

{

do

{

fflush(stdin);

switch(ccc=getch())

{

case '1':

{

clrscr();

printf("\t\t\t Рекомендации пользователю :\n\n"

"Эта программа- это подобие электронной базы

данных. Программа работает, "

"\nиспользуя массивы в памяти ЭВМ для хранения информации

введенной пользователем."

"\nДанные могут вводиться с клавиатуры или загружаться из

файла."

"Также можно вывестина экран всю картотеку или же

просматривать картотеку по карточкам,"

" с возмож- ностью добавления или удаления некоторых

карточек по выбору."

" Программа имеет хороший интерфейс и показывает

устойчивую работу."

" В программе имеется поиск элементов по заданным

условиям, а также сортировка планет по названиям."

" В программе есть главное меню и подменю для поиска

планет по некоторым признакам."

" Желательно, чтобы данные были точные, корректно

записанные и касающиеся"

"\n непосредственно темы данной лабораторной

работы.");

puts("\n\n\n\n\n\t\tДля перехода в главное меню нажмите

любую клавишу...");

getch();

menu1();

break;

}

case '2':

{

free(planet);

planet=NULL;

planet->prev=planet->next=NULL;

clrscr();

puts("Это новая база данных?(да-y/ нет-n) ");

do

{

fflush(stdin);scanf ("%c", &ch);

printf ("\tВведите символ(да- y / нет- n) ");

}

while (ch!='n' && ch!='y'&& ch!='Y'&& ch!='N');

if (ch=='y'|| ch=='Y')

{

clrscr();

planet=vvodall();

clrscr();

puts("\n\n\Записать в файл (да-y/нет-n)?");

do

{

fflush(stdin);

scanf ("%c", &ch);

printf ("Введите символ(да- y / нет- n)\n ");

}

while (ch!='n' && ch!='y'&& ch!='Y'&& ch!='N');

if (ch=='Y'|| ch=='y')

{

save(planet);

puts("\n\n\n\n\n\t\t Запись данных

закончена! Нажмите любую клавишу.");

getch();

}

}

else

planet=load(planet);

menu1();

continue;

}

case '3':

{

if(planet!=NULL)

{

clrscr();

vivodall(planet);

menu1();

continue;

}

break;

}

case '4':

{

free(planet);

planet=korrekt(planet);

menu1();

break;

}

case '5':

{

if(planet!=NULL)

{

clrscr();

menu2();

switch(hhh=getch())

{

case '1':

{

poisk1(planet);

menu1();

continue;

}

case '2':

{

poisk2(planet);

menu1();

continue;

}

default : menu1();

}

menu1();

continue;

}

break;

}

case '6':

{

if(planet!=NULL)

{

clrscr();

i=5;

puts("\n\n\n\n\t\t Идет сортировка по названию

планеты.");

while(i<70)

{

gotoxy(i,10);

puts("*");

delay(60);

i++;

}

planet=sort(planet);

puts("Сортировка по названиям планет прошла успешно! ");

delay(2000);

clrscr();

vivodall(planet);

menu1();

continue;

}

break;

}

case '7':

{

free(planet);

break;

}

default : ccc=0;

}

}

while(!ccc);

}

while(ccc!='7');}

Министерство образования РФ

Санкт- Петербургский государственный электротехнический университет

Кафедра ВТ

Пояснительная записка

К курсовой работе по дисциплине

«Основы алгоритмизации и программирование»

II семестр

Тема : «Электронная картотека»

Выполнил : Урывский Ю.В.

Факультет : КТИ

Группа :9371

Проверила :Сискович Т.И.

Санкт- Петербург

2000

Задание :

Создание электронной картотеки, хранящейся на диске, и программы,

обеспечивающей взаимодействие с ней.

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

- занесение данных в электронную картотеку;

- внесение изменений (добавление, исключение);

- поиск данных по признаку, вывод их на экран.

Выбор подлежащих выполнению действий должен быть реализован с помощью

меню и подменю.

Задача должна быть структурирована и отдельные части должны быть

оформлены как функции.

Исходные данные должны вводиться с клавиатуры.

В процессе обработки картотека должна храниться в памяти ЭВМ в виде

связанного списка.

Необходимо предусмотреть возможность сохранения выбранных записей в

файле, задаваемом пользователем.

Программа должна иметь дружественный интерфейс и обеспечивать

устойчивую работу при случайном нажатии на клавишу.

Все детали выполнения работы должны быть согласованы с преподавателем.

Контрольные примеры:

При запуске программы перед нами появляется меню, состоящее из 7 пунктов.

1. Рекомендации пользователю.

2. Ввод данных.

3. Вывод всех данных.

4. Просмотр, удаление, добавление.

5. Поиск данных по определенному признаку.

6. Сортировка.

7. Выход.

Чтобы познакомиться с программой нужно зайти в пункт №1. Здесь имеется

краткое описание того, что программа умеет делать.

Пока мы не введем данные через пункт №2, все остальные пункты, кроме 1 и

7, будут не активными. Поэтому заходим в пункт №2.

Здесь сразу же появляется запрос: «Это будет новая картотека?» Если

да, то создается новая картотека, или можно загрузить ее из файла.

Наконец данные введены и можно переходить к другим пунктам.

Чтобы просмотреть все, что было введено воспользуемся пунктом №3. Для

выхода в главное меню нужно нажать любую клавишу.

С помощью пункта №4 мы можем пролистать всю нашу картотеку. Плюс к

этому мы можем добавлять или удалять элементы из списка. А делать это

довольно просто, если следовать подсказкам, появляющимся в нижней части

экрана.

Щелкнув цифру 5, открываем подменю поиска элементов.

1. Поиск по названию планеты.

2. Поиск по годам открытия.

Если хотим найти например планету Венера, то выбираем пункт №1, вводим

слово Венера и либо получаем информация о такой планете (если такая планета

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

такая планета не занесена в базу данных).

В пункте №6 мы можем отсортировать картотеку по названиям планет.

Выход из программы осуществляется через пункт №7.

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

struct PL //структура PL

{

char namepl[18]; //Названия планет

int year; //Когда была открыта

char people[15]; //Кем была открыта

unsigned int sputnik; //Сколько спутников имеет

PL *prev; //Указатель на предыдущий элемент

списка

PL *next; //Указатель на последующий элемент

списка

};

Спецификация функций:

- Void menu1(); - функция главного меню

Menu1();

- Void menu2(); - функция подменю поиска

Menu2();

- void sovet(char *s)

- void vvod(PL *pla)

- PL* vvodall()

- void vivodall(PL *pla)

- void spisok(PL* pla)

- PL* vvodspisok(PL* pla)

- PL* vozvr(PL* pla)

- PL* korrekt(PL *pla)

- PL* delit(PL* pla)

- void poisk1(PL *pla)

- void poisk2(PL *pla)

- void klear(PL* pla)

- char * fname()

- int save1(PL *pla,char *filename)

- int save(PL *pla)

- PL *load(PL *pla)

- PL *sort(PL *pla)

Инструкция пользователю:

Запускаете программу. Появляется меню перед вами. Если хотите немножко

ознакомиться с программой, то почитайте рекомендации (пункт №1). Вводите

данные через пункт №2. Здесь вы можете ввести данные либо с клавиатуры,

либо загрузить их из файла. Чтобы просмотреть все что вы ввели или

загрузили воспользуйтесь пунктом №3 главного меню. А если вы хотите

просмотреть все карточки по- порядку, то вам непременно нужно будет зайти в

пункт №4. Здесь вы сможете просмотреть все карточки, удалить какую- либо из

них (или все), а также добавить карточки, воспользовавшись вспомогательными

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

Найти какую- нибудь карточку вам поможет пункт №5. В нем имеется два

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

планеты.

В пункте №6 происходит сортировка карточек по названиям планет.

Выход из программы осуществляется через пункт №7.

Заключение:

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

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

файла, запись в файл данных. Также была освоена работа со списками. Это

такие операции как ввод элементов, удаление какого- нибудь элемента из

списка или добавление элементов в связанный список.

Содержание:





17.06.2012
Большое обновление Большой Научной Библиотеки  рефераты
12.06.2012
Конкурс в самом разгаре не пропустите Новости  рефераты
08.06.2012
Мы проводим опрос, а также небольшой конкурс  рефераты
05.06.2012
Сена дизайна и структуры сайта научной библиотеки  рефераты
04.06.2012
Переезд на новый хостинг  рефераты
30.05.2012
Работа над улучшением структуры сайта научной библиотеки  рефераты
27.05.2012
Работа над новым дизайном сайта библиотеки  рефераты

рефераты
©2011