Автор работы: Пользователь скрыл имя, 14 Ноября 2013 в 17:28, курсовая работа
Цель курсовой работы - закрепление и углубление знаний, полученных при изучении курса «Основы алгоритмизации и программирования» посредством разработки программного обеспечения для компьютера.
Введение 3
Теоретический вопрос 3
Windows Vista. Обзор 3
Практический раздел 18
Постановка задачи: 18
Описание программы: 18
Блок-схемы: 19
Контрольный пример: 24
Вывoды: 26
Cпиcoк литepaтуpы: 27
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); // запись в файл элемента