Обзор Windows Vista. Разработка консольного приложения, реализующего кольцевую очередь(20 элементов)

Автор работы: Пользователь скрыл имя, 14 Ноября 2013 в 17:28, курсовая работа

Описание работы

Цель курсовой работы - закрепление и углубление знаний, полученных при изучении курса «Основы алгоритмизации и программирования» посредством разработки программного обеспечения для компьютера.

Содержание работы

Введение 3
Теоретический вопрос 3
Windows Vista. Обзор 3
Практический раздел 18
Постановка задачи: 18
Описание программы: 18
Блок-схемы: 19
Контрольный пример: 24
Вывoды: 26
Cпиcoк литepaтуpы: 27

Файлы: 1 файл

курсач.doc

— 2.95 Мб (Скачать файл)

               cout<<"deleted element saved to file "<<fname<<endl;

     }

     else if (p==2) // если выбран второй пункт

     {

           product one;

           q.del_one(one);

           cout<<"element deleted."<<endl;

     }

     }

     else// если очередь пуста

     {

         cout<<"no elements in queue"<<endl;

         p=3;

     }

     }

}

void submenu_deleteall(queue &q) // подменю  удаление всех

{

     int p;

     cout<<"     1. Save to file and delete all"<<endl;

     cout<<"      2. Only delete all"<<endl;

     cin>>p;

     if (p==1) // если выбран первый пункт

     {

               char fname[20];

               cout<<"input filename: ";

               cin>>fname;

               q.save(fname);// сохранение в файл 

               cout<<"queue saved to file "<<fname<<endl;

     }

     else if (p!=2) // если введено не 1 и не 2

     {

          cout<<"error"<<endl;

          return;

     }

     q.show_console(); // вывод очереди на консоль

     q.clean(); // очистка очереди

     cout<<"all elements deleted. queue is empty"<<endl;

}

void submenu_show(queue &q) // подменю показать элементы

{

     int c=0;

     while (c!=3) // пока не выбран третий пункт меню Выход

     {

           cout<<"      1. Show to console"<<endl;

           cout<<"      2. Show to file"<<endl;

           cout<<"      3.   Exit"<<endl;

           cin>>c;

           if (c==1)//если выбран 1

           {

               q.show_console();//выводим

          }

           else if (c==2)//если выбран 2

           {

               char fname[20];

               cout<<"input filename: ";

               cin>>fname;//вводим имя файла

               q.save(fname); //сохраняем в файл

               cout<<"queue saved to file "<<fname<<endl;

           }

     }

}

void menu(queue &q) // главное меню

{

  int c=0;

  char sp[]="                          ";

 

  while (c!=7) // пока не выбран седьмрй пункт меню Выход

  {

        cout<<sp<<"Menu: "<<endl;

        cout<<sp<<"1. Add new element"<<endl;

        cout<<sp<<"2. Delete element"<<endl;

        cout<<sp<<"3. Delete all elements"<<endl;

        cout<<sp<<"4. Show all elements"<<endl;

        cout<<sp<<"5. Count elements"<<endl;

        cout<<sp<<"6. Move elements"<<endl;

        cout<<sp<<"7.   Exit"<<endl;

        cin>>c;

        switch (c) // обработка значения c. для каждого значения - свой вызов функции

        {

               case 1: if (q.n==20)

                          cout<<"queue is full. no empty places"<<endl;

                       else

                          submenu_add(q);

                       break;

               case 2: if (q.n==0)

                         cout<<"no elements in queue"<<endl;

                       else

                         submenu_delete(q);

                       break;

               case 3: if (q.n==0)

                         cout<<"no elements in queue"<<endl;

                       else

                         submenu_deleteall(q);

                       break;

               case 4: if (q.n==0)

                         cout<<"no elements in queue"<<endl;

                       else

                         submenu_show(q);

                       break;

               case 5: cout<<"in queue "<<q.n<<" elements"<<endl;

                       break;

               case 6: cout<<"move: "<<q.move()<<" places"<<endl;

                       break;       

        }

  }

}

int main()// с этой функции начинает работать программы

{

    queue q; // создаем объект очередь

    menu(q); // показываем меню

    q.clean();

    return 1;

}

на основе динамического списка:

#include <cstdlib>

#include <iostream>  // подключаем  библиотеки

#include <cstdio>

#include <conio.h>

#include <string.h>

using namespace std;

struct product  // товар

{

       int id;         // номер по каталогу (ключ)

       char name[20];  // наименование

       char si[20];    // единица измерения

       int count;      // количество

       int price;      // цена

};

struct element  // элемент очереди

{

       product p;    // описание товара

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

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

};

struct queue  // очередь

{

       int n;           // количество элементов очереди

       element* start;  // указатель на начало очереди

       element* end;    // указатель на конец очереди

       queue() // конструктор очереди (вызывается при объявлении объекта)

       {

              n=0;  // сначала в очереди нет элементов

              start=end=NULL;  // и указатели пустые

       }

       void copy_one(product &to, product from)  // копирование товара from в товар to

       {

            to.id=from.id;        // копирование данных

            to.count=from.count;

            to.price=from.price;

            strcpy(to.name,from.name);

            strcpy(to.si,from.si);

       }

       bool add_one(product one)  // добавление в очередь элемента one

       {

               if (n==20)   // если очередь полная

                 return false; // результат функции

               else

               {

                   if (n==0)  // если в очередь пустая

                   {

                       start=new element;  // создаем новый элемент

                       copy_one(start->p,one);  // копируем данные в него из one

                       start->next=NULL;  // указатели пустые, так как больше в очереди нет элементов

                       start->prev=NULL; 

                       end=start;         // конец очереди совпадает с началом

                   }

                   else if (n==1)  // если в очереди один элемент

                   {

                       end=new element;  // выделяем память под новый элемент

                       copy_one(end->p,one); // копируем данные из one

                       end->next=start; // устанавливаем указатели на start конечного элемента

                       end->prev=start;

                       start->next=end; // устанавливаем указатели на end начального элемента

                       start->prev=end;

                   }

                   else  // в очереди более одного элемента

                   {

                       element* t=new element; // выделяем память под новый элемент

                       copy_one(t->p,one);  // копируем данные из one

                       t->next=start;

                       t->prev=end;      // устанавливаем указатели prev и next

                       start->prev=t;

                       end->next=t;

                       end=t;

                   }

                   n++;    // увеличиваем количество элементов на 1

                   return true;    // результат функции

               }

       }

       bool del_one(product &one)  // удаление элемента из очереди в one. если удаление произошло, то результат true, иначе false

       {

            if (n==0)  // если очередь пуста

              return false; // удаление не произошло

            else

            {

                copy_one(one,start->p); // копирование в one элемента, на который указывает start

                if (n==1) // если в очереди один элемент

                {

                  end=NULL; // изменяем указатели на пустые

                  delete start; // и удаляем элемент

                  start=NULL;

                }

                else if (n==2) // если в очереди два элемента

                {

                     end->prev=NULL; // изменяем указатели

                     end->next=NULL;

                     delete start; // удаляем элемент

                     start=end; // start указывает на оставшийся элемент

                }

                else // если в очереди больше двух элементов

                {

                    element* t=start->next; // во временный указатель записываем адрес элемента после start который

                    end->next=start->next;  // изменяем указатели

                    start->next->prev=start->prev;

                    delete start; // удаляем память

                    start=t; // изменяем start

                }

                n--; // уменьшаем на 1

                return true; // удаление произошло

            }

       }

       void show_console() // вывод всех элементов очереди на консоль

       {

            if (n==0) // если очередь пуста

               cout<<"no elements in queue"<<endl;

            else

            {

                element* t=start; // начинаем с начала очереди

                cout<<"id="<<t->p.id<<" name="<<t->p.name<<" ed.iz="<<t->p.si<<" count="<<t->p.count<<" price="<<t->p.price<<endl;  // вывод на консоль

                while (t!=end) // пока не достигли конца очереди

                {

                      t=t->next; // переход к следующему элменту и вывод

                      cout<<"id="<<t->p.id<<" name="<<t->p.name<<" ed.iz="<<t->p.si<<" count="<<t->p.count<<" price="<<t->p.price<<endl; // вывод на консоль

                }

            }

       }

       void save(char* fname) // сохрание очереди в файл

       {

            FILE* f;  // переменная для файла

            f=fopen(fname,"w"); // открытие

            if (!f)

            {

                   cout<<"file not found"<<endl;

                   getch();

                   return;

            }

            if (n==0) // если очередь пуста

              fprintf(f,"no elements in queue");

            else

            {

                element* t=start;// начинаем с начала очереди

                fprintf(f,"%d %s %s %d %d\n",t->p.id, t->p.name, t->p.si, t->p.count, t->p.price);  // вывод в файл

                while (t!=end)// пока не достигли конца очереди

                {

                      t=t->next;// переход к следующему элменту и вывод

                      fprintf(f,"%d %s %s %d %d\n",t->p.id, t->p.name, t->p.si, t->p.count, t->p.price); // вывод в файл

                }               

            }

            fclose(f); // закрытие файла

       }

       void clean() // удаление всей очереди

       {

          product tmp;

          while (del_one(tmp)) // удалять, пока возможно, по одному элементу

          {

          }

       }

};

void submenu_add(queue &q) // подменю Добавить элемент

{

     int c=0;

     while (c!=3) // пока не выбран третий пункт

     {

           cout<<"      1. Add from console"<<endl;   // вывод меню

           cout<<"      2. Add from file"<<endl;

           cout<<"      3.   Exit"<<endl;

           cin>>c;

           if (c==1) // если выбран первый пункт

           {

               int k;

               product one;

               cout<<"input count of new elements: "; // ввод количества новых элементов

               cin>>k;

               for (int i=0; i<k; i++)

               {

                   cout<<"         "<<i+1<<" new element:"<<endl;  // ввод данных очередного элемента

                   cout<<"    key  : ";

                   cin>>one.id;

                   cout<<"    name : ";

                   cin>>one.name;

                   cout<<"    ed.iz: ";

                   cin>>one.si;

                   cout<<"    count: ";

                   cin>>one.count;

                   cout<<"    price: ";

                   cin>>one.price;

                   if (one.price<0 || one.count<0)  // проверка на корректность введеных данных

                   {

                       cout<<"bad input"<<endl;

                       i--;

                       continue;

                   }

                   if (q.add_one(one)) // добавление

                     cout<<"element added in queue"<<endl;

                   else

                   {

                       cout<<"element not added. no empty places"<<endl;

                       break;

                   }

               }

           }

           else if (c==2) // если выбран второй пункт меню

           {

                char fname[20];

                FILE* f;

                cout<<"input filename: "; // ввод имени  файла

                cin>>fname;

                if (!(f=fopen(fname,"r"))) // если не удалось открыть файл

                  cout<<"file "<<fname<<" not found"<<endl;

                else

                {

                    int p,k=0;

                    product one;

                    fscanf(f,"%d",&p); // чтение из файла количества новых элементов

                    for (int i=0; i<p; i++)

                    {

                        fscanf(f,"%d %s %s %d %d",&one.id, one.name, one.si, &one.count, &one.price);

                        if (one.price<0 || one.count<0)

                        {

                           continue;

                        }

                        if (q.add_one(one))

                          k++;

                        else

                          break;

                    }

                    cout<<k<<" elements added from "<<fname<<endl;

                    fclose(f);

                }

           }

     }

}

void submenu_delete(queue &q) // подменю  удаление

{

     int p=0;

     while (p!=3) // пока не выбран третий пункт меню

     {

     if (q.n!=0) // если в очереди есть элементы

     {     

     cout<<"      1. Save to file and delete one element"<<endl; // вывод  текста меню

     cout<<"      2. Only delete one element"<<endl;

     cout<<"      3.   Exit"<<endl;

     cin>>p;

     if (p==1) // если выбран первый пункт

     {

               char fname[20];

               cout<<"input filename: "; // ввод имени  файла

               cin>>fname;

               FILE* f;

               f=fopen(fname,"w"); // открытие файла

               fprintf(f,"%d %s %s %d %d\n",q.start->p.id, q.start->p.name, q.start->p.si, q.start->p.count, q.start->p.price); // запись  в файл элемента

Информация о работе Обзор Windows Vista. Разработка консольного приложения, реализующего кольцевую очередь(20 элементов)