рефераты

рефераты

 
 
рефераты рефераты

Меню

Реферат: Электронная картотека планет солнечной системы рефераты

printf("│Номер │  Название       │ Когда      │  Кто  открыл  │  Кол-во   │\n");

printf("│ стр. │       планеты   │    открыли │    планету    │ спутников │\n");

printf("└──────┴─────────────────┴────────────┴───────────────┴───────────┘\n");

printf("┌──────┬─────────────────┬────────────┬───────────────┬───────────┐\n");

    while(pla->prev)

      {

       if((a<=pla->year)&&(b>=pla->year))

       {

        printf("│ %5d │ %18s │ %12u │ %15s │ %11u │   ",i,pla->namepl,

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

        l++;i++;

       }

       pla=pla->prev;

      }

    if((a<=pla->year)&&(b>=pla->year))

      {

       printf("│ %5d │ %18s │ %12u │ %15s │ %11u │   ",i,pla->namepl,

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

       l++;i++;

      }

    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)

   ",

 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.   


Заключение:

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


Содержание:


 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 



Страницы: 1, 2