Обзор 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 Мб (Скачать файл)

 

5 минусов:

1. User Account Control. Напоминает своего рода "няньку". Опытным пользователям она явно не нужна..

2. Backup. Программа сделана очень некорректно. И очень часто отказывается от работы.

3. Системные требования. Не правильно заявленные технические характеристики.

4. Цена. Лицензионная Windows XP стоит столько же сколько и Windows Vista. В этом нет никакой коммерческой логики.

5. Несовместимость. Множество программ  с XP просто отказываются работать на Vista.

 

Практический раздел

Постановка задачи:

 

Разработать программу, реализующую  алгоритм очереди (20 элементов). Задача решается в двух вариантах: статическом (на основе массива структур) и динамическом. Реализовать алгоритм кольцевой очереди на основе динамического списка. В качестве элемента очереди выбрать структуру, соответствующую индивидуальному варианту.

Предусмотреть заполнение очереди из файла (подготовить файл на 20 элементов).

Предусмотреть многоуровневое меню:

  1. Заполнение очереди
    1. с консоли (циклически)
    2. из файла (выбор файла, тек. папка, любая папка)
  2. Удаление элемента из очереди (циклически)
    1. безвозвратно
    2. с сохранением в файл
  3. Очистка очереди (с выводом удаляемых элементов)
    1. безвозвратно
    2. с сохранением в файл
  4. Вывод элементов, содержащихся в очереди
    1. на экран
    2. в файл
  5. Вывод количества элементов в очереди
  6. Сдвиг всех элементов очереди к началу при наличии пустых мест в начале очереди (для статического варианта)
  7. Выход

Реализовать алгоритм обработки исключений.

Проанализировать достоинства  и недостатки статического и динамического вариантов.

Продемонстрировать работу всех пунктов  меню. Продемонстрировать обработку  ошибочных ситуаций (ввод данных другого  типа, ввод пустых данных, переполнение очереди, пустая очередь). Графический  интерфейс и использование классов необязательны, но приветствуются.

Описание программы:

В данной программе мы разрабатывали  программу, которая реализует алгоритм очереди на 20 элементов. Работа программы  использует принцип: первый вошел - первый вышел. (First in - first out). Очередь реализуется с помощью командами push и pop и так далее, в нашем случае push и pop - add_one и del_one. В нашей программе мы не использовали стандартную библиотеку <queue>, так как суть задания состоит в том, чтобы пользователь всю писал вручную. Для полноценной работы программы мы использовали следующие основные функции: Void save(char *fname), void submenu_add(queue &q), void submenu_deleteall(queue &q), void submenu_show(queue &q), void menu(queue &q).

 

void save(char *fname) - функция сохраняет очереди в файл.

void submenu_add(queue &q) - функция организовывает подменю "добавить элемент".

void submenu_deleteall(queue &q) - функция организовывает подменю "удаление всех".

void submenu_show(queue &q) - функция организовывает подменю "показать элементы".

void menu(queue &q) - функция организовывает основное меню программы.

 

Блок-схемы:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

На основе статического массива:

 

 

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

Вывoды:

Я, используя справочную литературу, ответил на теоретический вопрос согласно своему варианту. Написал программу для работы с очередью. В ходе написания программы я опирался на ранее полученные знания. А так же систематизировал и комплексно обобщил знания по программированию на языке С++.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Cпиcoк литepaтуpы:

1. Уолтер Сэвитч. С++ в  примерах. Москва: Эком, 1997. (3 шт.)

2. В.А. Скляров. Язык  С++ и объектно-ориентированное   программирование. –Мн.: Выш. шк.,1997. (20 шт.)

3. Язык программирования  Си. Москва: Производственно-внедренческий  кооператив "И Н Т Е Р Ф Е Й С", 1988. (0)

4. Б.В. Керниган,Д.М.  Ричи. ЯЗЫК С. (17 шт.)

5. В.А. Скляров. Программирование  на языках Си и Си++. Мн.: Выш.  шк.,1997. (2 шт.)

6. Страуструп Бьерн.  Язык программирования Си++. М.: Софт,1999. (10 шт.).

7. Шилд Герберт. - Самоучитель C++ / Герберт Шилдт . - СПб : BHV - Санкт-Петербург, 1997. - 511 с. (1).

8. Как программировать  на С++ . Дж. Дейтел. Пер. В. Кузьменко  . - М. : ЗАО "Издательство БИНОМ", 1998. - 1021 с. : ил.(1).

9. Visual C++ 6 Новые возможности для программистов. Ю. Тихомиров.- СПб.:БХВ-Санкт-Петербург,1998.-496 с.

10. Основы алгоритмизации  и программирования. Язык СИ. Е.М.Демидович.Мн.: “Бестпринт” 2003 г.

11.Использование Visual C++ 6. Специальное издание. Грегори К.: Пер. с англ.-М.;СПб.;К.: Издательский дом “Вильямс”, 2001.-864 с.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение

 

 На основе статического массива:

#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 queue

{

       product a[20]; // статический массив

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

       int start; // номер первого элемента

       int end; // номер последнего элемента в  очереди  

       queue() // конструктор

       {

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

       }

       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)  // если очередь непустая

                   {

                     end++; // сдвиг номера последнего  элемента на 1

                     if (end==20) // если номер вышел за  границу

                      end=0; // переводит на начало

                   }

                   copy_one(a[end],one); // копирование нового  элемента на позицию end

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

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

               }

       }

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

       {

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

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

            else

            {

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

                if (n!=1)

                {

                  start++;

                  if (start==20)

                    start=0;

               }

                n--;

                return true;

            }

       }

       int move()  // сдвиг на начало массива

       {

           try // разрешаем поиск исключительной ситуации

           {

           if (start<0)

             throw 1; //генерация исключений

           if (start==0)

             return 0;

           int k=start;

           if (n==0)

           {

               start=0;

               end=0;

               return k;    

           }

           else

           {

               if (end<start)

                 return 0;

               for (int i=start; i<=end; i++)

                 copy_one(a[i-start],a[i]);

               end-=start;

               start=0;

               return k;

           }

           }

           catch (int a) //исключительная ситуация

           {

                 end=start=n=0;

                 cout<<"fatal error found. queue restarted"<<endl;

                 return 0;

           }

       }

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

       {

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

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

            else

            {

                if (end>=start) //если очередь не пуста

                {

                    for (int i=start; i<=end; i++)

                        cout<<i<<":  id="<<a[i].id<<" name="<<a[i].name<<" ed.iz="<<a[i].si<<" count="<<a[i].count<<" price="<<a[i].price<<endl; //вывод всех элементов очереди

                }

                else

                {

                    for (int i=start; i<20; i++)

                        cout<<i<<":  id="<<a[i].id<<" name="<<a[i].name<<" ed.iz="<<a[i].si<<" count="<<a[i].count<<" price="<<a[i].price<<endl; //вывод всех элементов очереди

                    for (int i=0; i<=end; i++)//вывод всех элементов очереди

                        cout<<i<<":  id="<<a[i].id<<" name="<<a[i].name<<" ed.iz="<<a[i].si<<" count="<<a[i].count<<" price="<<a[i].price<<endl;   //вывод всех элементов очереди 

                }

            }

       }

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

       {

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

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

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

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

            else

            {

                if (end>=start)//если очередь не пуста

                {

                    for (int i=start; i<=end; i++)

                      fprintf(f,"%d %s %s %d %d\n",a[i].id, a[i].name, a[i].si, a[i].count, a[i].price); // вывод в файл

                       

                }

                else

                {

                    for (int i=start; i<20; i++)

                        fprintf(f,"%d %s %s %d %d\n",a[i].id, a[i].name, a[i].si, a[i].count, a[i].price); // вывод в файл

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

                         fprintf(f,"%d %s %s %d %d\n",a[i].id, a[i].name, a[i].si, a[i].count, a[i].price); // вывод в файл

                }

            }

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

       }

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

       {

          start=end=n=0;

       }

};

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 (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 (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.a[q.start].id, q.a[q.start].name, q.a[q.start].si, q.a[q.start].count, q.a[q.start].price);

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

               product one;

               q.del_one(one);//удаление элемента

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