Автор работы: Пользователь скрыл имя, 31 Января 2013 в 02:03, курсовая работа
Цель курсовой работы - закрепление и углубление знаний, полученных при изучении курса «Языки программирования» посредством разработки программного обеспечения для компьютера.
Содержание 2
Введение 3
Постановка задачи 4
Описание программы 6
Руководство пользователя 7
Тестирование 8
Выводы 9
Литература 10
Приложение 11
Белорусский национальный технический университет
Кафедра программного обеспечения вычислительной техники
и автоматизированных систем
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проекту (работе)
по дисциплине Языки программирования
Тема проекта:
Протокол НТТР.
Реализовать алгоритм очереди на основе структуры «Счет».
Исполнитель:
Студентка I I курса 307211 группы
Руководитель:
Минск 2013
Цель курсовой работы - закрепление и углубление знаний, полученных при изучении курса «Языки программирования» посредством разработки программного обеспечения для компьютера.
Задание 1. Очередь
Разработать программу, реализующую алгоритм очереди (20 элементов). Задача решается в двух вариантах: статическом (на основе массива структур) и динамическом. Реализовать алгоритм кольцевой очереди на основе динамического списка. В качестве элемента очереди выбрать структуру, соответствующую индивидуальному варианту.
Предусмотреть заполнение очереди из файла (подготовить файл на 20 элементов).
Предусмотреть многоуровневое меню:
1) Заполнение очереди
a) с консоли (циклически)
b) из файла (выбор файла, тек.папка, любая папка)
2) Удаление элемента из очереди (циклически)
a) безвозвратно
b) с сохранением в файл
3) Очистка очереди (с выводом удаляемых элементов)
a) безвозвратно
b) с сохранением в файл
4) Вывод элементов, содержащихся в очереди
a) на экран
b) в файл
5) Вывод количества элементов в очереди
6) Сдвиг всех элементов очереди к началу при наличии пустых мест в начале очереди (для статического варианта)
7) Выход
Реализовать алгоритм обработки исключений.
Проанализировать достоинства и недостатки статического и динамического вариантов.
Продемонстрировать работу всех пунктов меню. Продемонстрировать обработку ошибочных ситуаций (ввод данных другого типа, ввод пустых данных, переполнение очереди, пустая очередь). Графический интерфейс и использование классов необязательны, но приветствуются.
10. Счет
i. Номер (ключ)
ii. Вид услуги
iii. Количество
iv. Цена
v. Дата оказания услуги
Описание программы
Структурная схема алгоритма программы:
Словесное описание особенностей программной реализации разработанного алгоритма:
1)Вывод меню на экран.
2)В зависимости от
выбранного пункта вызывается соответствующая
функция:zapoln();udal();
А также из функции zapoln(); вызывается: zapoln1(); zapoln2(); в зависимости от выбора пользователя.
3) Используя методы класса ochered выполняются все требуемые положения.
Для запуска программы необходимо запустить Release/proekt.exe, в файле input.txt содержится массив структур.
В ходе выполнения курсовой работы мною были закреплены теоретические знания в области объектно-ориентированного программирования на зыке С++. Я Познакомилась с проектированием и с разработкой архитектуры проекта.
.
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. Основы алгоритмизации и
11.Использование Visual C++ 6. Специальное издание. Грегори К.: Пер. с англ.-М.;СПб.;К.: Издательский дом “Вильямс”, 2001.-864 с.
Приложение
// kurs.cpp: определяет точку входа для консольного приложения.
//
#include"stdafx.h"
#include<iostream>
#include<fstream>
usingnamespace std;
struct spis
{
int number;
char*usluga;
int kol;
int cena;
char*data;
spis * next;
spis*prev;
//spis(int k){number=k;}
spis(int n,int k,int c,char*u,char*d)//структура хранящая информацию о элементе очереди
{data=newchar[255]; usluga=newchar[255];number=n;
};
class ochered//класс реализующий методы для создания и управления очередью
{
spis*first;//указатель на первый элемент
public:
ochered(){first=NULL;}//
void clear()//очистка очереди
{
while(first!=NULL)
del();
}
void del()//удаление последнего элемента очереди
{
spis * d=first;
if(d!=NULL)
{
while(d->next!=NULL)
d=d->next;
if(d->prev!=NULL)
d->prev->next=NULL;
if(first==d)
first=NULL;
delete(d);
}
}
int kol()//функция возвращает количество элементов в очереди
{
spis*d=first;
int k=0;
while(d!=NULL)
{
d=d->next;
k++;
}
return k;
}
void delNum(int k)//
{
spis * d=first;
if(d!=NULL)
if(first->number==k)
{
first=d->next;
if(first!=NULL)
first->prev=NULL;
delete(d);
} else
{
while((d->next!=NULL)&&(d->
d=d->next;
if(d->number==k)
{
if(d->prev!=NULL)
d->prev->next=d->next;
if(d->next!=NULL)
d->next->prev=d->prev;
delete(d);
}
}
}
void insert(int n,int k,int c,char*u,char*data)//
{
if(first==NULL)
{
first=new spis(n,k,c,u,data);
first->prev=NULL;
first->next=NULL;
} else
{
spis*d=first;
first=new spis(n,k,c,u,data);
first->prev=NULL;
first->next=d;
d->prev=first;
}
}
void printF()//
{
ofstream fout("output.txt");
spis*d=first;
while(d!=NULL)
{
fout<<"Номер(ключ) счета: "<<d->number<<endl;;
fout<<"Видуслуги: "<<d->usluga<<endl;
fout<<"Kоличество: "<<d->kol<<endl;
fout<<"Цена: "<<d->cena<<endl;
fout<<"Дата оказания услуги: "<<d->data<<endl;
fout<<"_____________________\
d=d->next;
}
fout.close();
}
void printC()//вывод всех элементов очереди на экран
{
spis*d=first;
while(d!=NULL)
{
cout<<"Номер(ключ) счета: "<<d->number<<endl;;
cout<<"Видуслуги: "<<d->usluga<<endl;
cout<<"Kоличество: "<<d->kol<<endl;
cout<<"Цена: "<<d->cena<<endl;
cout<<"Дата оказания услуги: "<<d->data<<endl;
cout<<"_____________________\
d=d->next;
}
}
void printElF(char*file)//вывод всех элементов очереди в заданный файл
{
ofstream fout(file);
spis * d=first;
if(d!=NULL)
{
while(d->next!=NULL)
d=d->next;
if(d->prev!=NULL)
d->prev->next=NULL;
if(first==d)
first=NULL;
fout<<"Номер(ключ) счета: "<<d->number<<endl;;
fout<<"Видуслуги: "<<d->usluga<<endl;
fout<<"Kоличество: "<<d->kol<<endl;
fout<<"Цена: "<<d->cena<<endl;
fout<<"Дата оказания услуги: "<<d->data<<endl;
delete(d);
}
}
};
ochered li;
void zapoln1()//заполнение очереди из консоли
{
system("cls");
int l;
int n,k,c;
char*u=newchar[255],*d=newchar
cout<<"Введите количество добавляемых элементов\n";
cin>>l;
for(int i=0;i<l;i++)
{
u=newchar[255];
d=newchar[255];
cout<<"Введите номер(ключ) счета\n";
cin>>n;
cout<<"Введите вид услуги\n";
cin>>u;
cout<<"Введите количество\n";
cin>>k;
cout<<"Введите цену\n";
cin>>c;
cout<<"Введите дату оказания услуги\n";
cin>>d;
li.insert(n,k,c,u,d);
}
}
void zapoln2()//заполнение очереди из файла
{
int l;
int n,k,c;
char*u=newchar[255],*d=newchar
char* fileName=newchar[255], *path=newchar[255];
system("cls");
cout<<"Введитеимяфайла\n";
cin>>fileName;
cout<<"Введите путь к файлу(введите '0' если текущая папка):\n";
cin>>path;
if(strcmp(path,"0")==0) path="";
if(strlen(path)!=0)
path=strcat(path,fileName);
else
path=fileName;
cout<<"Путькфайлу: "<<path<<endl;
ifstream fin(path);
if (fin.fail())
cout<<"Такого файла не существует\n";
else
{
fin>>l;
for(int i=0;i<l;i++)
{
u=newchar[255];
d=newchar[255];
fin>>n;
fin>>u;
fin>>k;
fin>>c;
fin>>d;
li.insert(n,k,c,u,d);
}
cout<<"Файлпрочтен";
}
system("pause");
}
void zapoln()//меню 2-ого уровня выбор откуда будет осуществляется ввод элементов очереди
{
bool flag=true;
char m;
while(flag)
{
system("cls");
cout<<"Заполнениеочереди\n1)
try
{
cin>>m;
if((m<'0')||(m>'2')) throw 1;
}
catch(...)
{
cout<<"Неверныйввод!!\n";
system("pause");
}
if(m=='1')
{
zapoln1();
} else
if(m=='2')
{
zapoln2();
}
else
if(m=='0')
flag=false;
}
}
void udal()//удалениеэлемента
{
bool flag=true;
char m;
while(flag)
{
system("cls");
cout<<"Удаление элемента\n1)Безвозвратно\n2)С сохранением в файл\n0)Назад\n";
try
{
cin>>m;
if((m<'0')||(m>'2')) throw 1;
}
catch(...)
{
cout<<"Неверныйввод!!\n";
system("pause");
}
system("cls");
if(m=='1')
{
li.del();
cout<<"Элемент удален\n";
system("pause");
} else
if(m=='2')
{
char*file=newchar[255];
cout<<"Введитеимяфайла\n";
cin>>file;
li.printElF(file);
li.del();
cout<<"Элемент удален\n";
system("pause");
}
else
if(m=='0')
flag=false;
}
}
void ochist()//очисткасписка
{
bool flag=true;
char m;
while(flag)
{
system("cls");
cout<<"Очисткасписка (свыводомудаляемыхэлементов)\
try
{
cin>>m;
if((m<'0')||(m>'2')) throw 1;
}
catch(...)
{
cout<<"Неверныйввод!!\n";
system("pause");
}
system("cls");
if(m=='1')
{
li.printC();
li.clear();
system("pause");
} else
if(m=='2')
{
li.printC();
li.printF();
li.clear();
cout<<"Списоксохраненвфайл output.txt\n";
system("pause");
}
else
if(m=='0')
flag=false;
}
}
void vivod()//выводэлементов
{
bool flag=true;
char m;
while(flag)
{
system("cls");
cout<<"Выводэлементовочереди\
try
{
cin>>m;
if((m<'0')||(m>'2')) throw 1;
}
catch(...)
{
cout<<"Неверныйввод!!\n";
system("pause");
}
system("cls");
if(m=='1')
{
li.printC();
system("pause");
} else
if(m=='2')
{
li.printF();
cout<<"Списоксохраненвфайл output.txt\n";
system("pause");
}
else
if(m=='0')
flag=false;
}
}
void kolvo()//количество элементов
{
system("cls");
cout<<"Количество элементов в списке: "<<li.kol()<<endl;
system("pause");
}
void main()//головная программа
{
setlocale(LC_ALL,"Russian");
bool flag=true;
char m;
while(flag)//бесконечный цикл обеспечивающий работу меню
{
system("cls");
cout<<"Меню\n1)Заполнение очереди\n2)Удаление элемента из очереди\n3)Очистка очереди (с выводом удаляемых элементов)\n4)Вывод элементов, содержащихся в очереди\n5)Вывод количества элементов в очереди\n0)Выход\n";
try
{
cin>>m;
if((m<'0')||(m>'5')) throw 1;
}
catch(...)
{
cout<<"Неверный ввод!!\n";
system("pause");
}
switch(m)
{
case'1': zapoln(); break;
case'2': udal(); break;
case'3': ochist(); break;
case'4': vivod(); break;
case'5': kolvo(); break;
case'0': flag=false; break;
}
}
system("pause");
}
Информация о работе Протокол НТТР. Реализовать алгоритм очереди на основе структуры «Счет»