Автор работы: Пользователь скрыл имя, 14 Мая 2012 в 15:59, курсовая работа
В течение многих лет стандартом C де-факто была версия, поставляемая для операционной системы UNIX System V. Растущая популярность компьютеров привела к созданию множества приложений для C.
C часто называют языком среднего уровня. Это определение означает, что он объединяет элементы языков высокого уровня с функциональностью ассемблера.
Известно, какое значение приобретает сегодня объектно-ориентированное программирование, учитывая возрастающие требования к качеству, надежности и пользовательскому интерфейсу приложений. Сложность и объем программ все время растут. В свете этого объектно-ориентированные языки, и прежде всего C++, становятся едва ли не единственным средством решения встающих перед программистом задач.
ВВЕДЕНИЕ 3
1 ПОСТАНОВКА ЗАДАЧИ 4
1.1 Общая характеристика задачи 4
1.2 Динамические двусвязные списки 5
2 РАЗРАБОТКА АЛГОРИТМА ЗАДАЧИ 14
2.1 Описание данных, используемых для решения задачи 14
2.2 Описание схемы программы 14
3 КОДИРОВАНИЕ ПРОГРАММЫ 15
3.1 Описание структуры разрабатываемого пакета 15
4 ТЕСТИРОВАНИЕ ПРОГРАММЫ 20
4.1 Внешний вид программы 20
4.2 Работа программы 20
ЗАКЛЮЧЕНИЕ 24
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ: 25
ПРИЛОЖЕНИЕ А (ДИНАМИЧЕСКИЙ ДВУНАПРАВЛЕННЫЙ СПИСОК) 26
avtoticket* next; //Ссылка на следущий элемент списка
avtoticket* prev; //Ссылка на следущий элемент списка
};
struct dyn_list {
avtoticket* head; // Первый элемент (голова) списка
avtoticket* tail; // Последний элемент (хвост) списка
};
// Создание пустого списка
void constr_list(dyn_list &l)
{
l.head = NULL;
}
// Проверка списка на пустоту
bool chk_empty(dyn_list l)
{
return (l.head==NULL);
}
int kol;
int koll;
// Включение в список нового компонента
void avtoticket_in(dyn_list &l, char* m, char* o,int p, int r,char* a)
{
koll++;
avtoticket* c = new avtoticket();
strcpy_s(c->num, 20, m);
strcpy_s(c->marsh, 10, o);
c->hour=p;
c->min=r ;
strcpy_s(c->price, 10, a);
c->next = NULL;
if (chk_empty(l))
l.head = c;
else
l.tail->next = c;
l.tail = c;
}
void show(dyn_list &l) // Вывод всего списка
{
cout <<"Number: Marshrut: Vremya(h): Vremya(m): Price "<<endl;
while (l.head != NULL)
{
cout <<l.head->num<<" ";
cout <<l.head->marsh<<" ";
cout <<l.head->hour<<" ";
cout <<l.head->min<<" ";
cout <<l.head->price<<endl;
l.head = l.head->next;
}
}
void showone(dyn_list &l,avtoticket* h)// Вывод одного элемента(используктся в теле функции поиска по параметру)
{
cout <<"Number: Marshrut: Vremya(h): Vremya(m): Price "<<endl;
l.head != h;
cout <<l.head->num<<" ";
cout <<l.head->marsh<<" ";
cout <<l.head->hour<<" ";
cout <<l.head->min<<" ";
cout <<l.head->price<<endl;
}
// Поиск компонента в списке по времени с 7 до 8
avtoticket* search(dyn_list l)
{
while (l.head != NULL)
{
if ((l.head->hour==7) | ((l.head->min==0) & (l.head->hour==8)))
{
showone(l,l.head);
}
l.head = l.head->next;
}
return l.head;
}
avtoticket* searchnum(dyn_list l, char *a)// Поиск компонента в списке по номеру маршрута
{
while (l.head != NULL)
{
if (!strcmp(l.head->num,a))
{
showone(l,l.head);
}
l.head = l.head->next;
}
return l.head;
}
avtoticket* searchdel(dyn_list l, char *a)// Поиск компонента в списке для удаления по определенному ключу(в данном случае по маршруту)
{
while (l.head != NULL)
{
if (!strcmp(l.head->marsh,a))
{
return l.head;;
}
l.head = l.head->next;
}
return l.head;
}
// Удаление компонента из списка
void avtoticket_del(dyn_list &l, avtoticket* c)
{
if (c == l.head)
{
l.head = c->next;
return;
}
avtoticket* r = new avtoticket();
r = l.head;
while (r->next != c)
r = r->next;
r->next = c->next;
delete c;
}
void show_menu ()// реализация меню в программе
{
cout << "Press any of this keys..." << endl;
cout << setiosflags (ios::left)
<< setw (15) << "[ 1 - Add ] "<< endl
<< setw (15) << "[ 2 - Show all ] "
<< setw (15) << "[ 3 - Tickets 7-8 PM ]"
<< setw (15) << "[ 4 - Delete All ]"<< endl
<< setw (15) << "[ 5 - Find of number marsh ]"
<< setw (15) << "[ 6 - Delete on position]"
<< endl << endl;
}
int main()//основная программа
{
char* buf_num = new char[20];
char* buf_marsh = new char [10];
int buf_hour ;
int buf_min;
char* buf_price = new char [10];
avtoticket* r=NULL;
avtoticket* rr=NULL;
avtoticket* p = new avtoticket();
dyn_list vars; // Динамический список
show_menu();
int key=1;
int count=0;
constr_list(vars);
while (key)
{
cout<< "Enter(1-8): ";
cin >> key;
switch (key)
{
// add
case 1:
cout << "Enter number: "; cin >> buf_num;
cout << "Enter the marshrut: "; cin >> buf_marsh;
cout << "Enter hour: "; cin >>buf_hour;
cout << "Enter minutes: "; cin >>buf_min;
cout << "Enter price: "; cin >>buf_price;
avtoticket_in(vars, buf_num, buf_marsh,buf_hour,buf_min,
break;
// show all
case 2:
r=vars.head;
show(vars);
vars.head=r;
break;
// find
case 3:
r=vars.head;
p = search(vars);
vars.head=r;
break;
// delete all
case 4:
r=vars.head;
for (int t=0; t<koll;t++)
{
vars.head->next;
avtoticket_del(vars,vars.head)
}
cout << "kol-vo: "<<koll<<endl;
r=vars.head;
break;
case 5:
r=vars.head;
cout << "Vvedite nomer: "; cin >> buf_num;
p = searchnum(vars, buf_num);
vars.head=r;
break;
case 6:
r=vars.head;
cout << "Vvedite marsh for delete: "; cin >> buf_marsh;
p = searchdel(vars, buf_marsh);
if (p)
avtoticket_del(vars, p);
vars.head=r;
break;
}
}
}
Информация о работе Работа со структурами данных: программирование списков на языке C /C++