Автор работы: Пользователь скрыл имя, 14 Ноября 2013 в 17:28, курсовая работа
Цель курсовой работы - закрепление и углубление знаний, полученных при изучении курса «Основы алгоритмизации и программирования» посредством разработки программного обеспечения для компьютера.
Введение 3
Теоретический вопрос 3
Windows Vista. Обзор 3
Практический раздел 18
Постановка задачи: 18
Описание программы: 18
Блок-схемы: 19
Контрольный пример: 24
Вывoды: 26
Cпиcoк литepaтуpы: 27
5 минусов:
1. User Account Control. Напоминает своего рода "няньку". Опытным пользователям она явно не нужна..
2. Backup. Программа сделана очень некорректно. И очень часто отказывается от работы.
3. Системные требования. Не правильно заявленные технические характеристики.
4. Цена. Лицензионная Windows XP стоит столько же сколько и Windows Vista. В этом нет никакой коммерческой логики.
5. Несовместимость. Множество
Разработать программу, реализующую алгоритм очереди (20 элементов). Задача решается в двух вариантах: статическом (на основе массива структур) и динамическом. Реализовать алгоритм кольцевой очереди на основе динамического списка. В качестве элемента очереди выбрать структуру, соответствующую индивидуальному варианту.
Предусмотреть заполнение очереди из файла (подготовить файл на 20 элементов).
Предусмотреть многоуровневое меню:
Реализовать алгоритм обработки исключений.
Проанализировать достоинства и недостатки статического и динамического вариантов.
Продемонстрировать работу всех пунктов меню. Продемонстрировать обработку ошибочных ситуаций (ввод данных другого типа, ввод пустых данных, переполнение очереди, пустая очередь). Графический интерфейс и использование классов необязательны, но приветствуются.
В данной программе мы разрабатывали программу, которая реализует алгоритм очереди на 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) - функция организовывает основное меню программы.
На основе статического массива:
На основе динамического списка:
Я, используя справочную литературу, ответил на теоретический вопрос согласно своему варианту. Написал программу для работы с очередью. В ходе написания программы я опирался на ранее полученные знания. А так же систематизировал и комплексно обобщил знания по программированию на языке С++.
1. Уолтер Сэвитч. С++ в примерах. Москва: Эком, 1997. (3 шт.)
2. В.А. Скляров. Язык С++ и объектно-ориентированное программирование. –Мн.: Выш. шк.,1997. (20 шт.)
3. Язык программирования Си. Москва: Производственно-внедренческий кооператив "И Н Т Е Р Ф Е Й С", 1988. (0)
4. Б.В. Керниган,Д.М. Ричи. ЯЗЫК С. (17 шт.)
5. В.А. Скляров.
6. Страуструп Бьерн. Язык программирования Си++. М.: Софт,1999. (10 шт.).
7. Шилд Герберт. - Самоучитель C++ / Герберт Шилдт . - СПб : BHV - Санкт-Петербург, 1997. - 511 с. (1).
8. Как программировать на С++ . Дж. Дейтел. Пер. В. Кузьменко . - М. : ЗАО "Издательство БИНОМ", 1998. - 1021 с. : ил.(1).
9. Visual C++ 6 Новые возможности для программистов.
Ю. Тихомиров.- СПб.:БХВ-Санкт-Петербург,1998.
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);//удаление элемента