Kursovik2 (664982), страница 2
Текст из файла (страница 2)
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, все остальные пункты, кроме 1 и 7, будут не активными. Поэтому заходим в пункт №2.
Здесь сразу же появляется запрос: «Это будет новая картотека?» Если да, то создается новая картотека, или можно загрузить ее из файла.
Наконец данные введены и можно переходить к другим пунктам.
Чтобы просмотреть все, что было введено воспользуемся пунктом №3. Для выхода в главное меню нужно нажать любую клавишу.
С помощью пункта №4 мы можем пролистать всю нашу картотеку. Плюс к этому мы можем добавлять или удалять элементы из списка. А делать это довольно просто, если следовать подсказкам, появляющимся в нижней части экрана.
Щелкнув цифру 5, открываем подменю поиска элементов.
-
Поиск по названию планеты.
-
Поиск по годам открытия.
Если хотим найти например планету Венера, то выбираем пункт №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.
Заключение:
В ходе проделанной работы мной были освоены структурные типы данных. Я научился работать с файлами, т.е. делать такме вещи как открытие, закрытие файла, запись в файл данных. Также была освоена работа со списками. Это такие операции как ввод элементов, удаление какого- нибудь элемента из списка или добавление элементов в связанный список.
Содержание:
70>