close

Вход

Забыли?

вход по аккаунту

?

Транзакции (с ипользованием стека)

код для вставкиСкачать
lib.h
#ifndef LIB_H #define LIB_H #include <iostream> #include <stdlib.h> #include <string.h> #include <conio.h>
using namespace std; #define clear(); system("cls"); #endif // LIB_H
chelovek.h
#ifndef CHELOVEK_H #define CHELOVEK_H #include "lib.h" class Chelovek { protected: char fio[80], name[80], otch[80]; int date; public: Chelovek(); Chelovek(char*, char*, char*, int); ~Chelovek(); Chelovek(const Chelovek&); void Dobav(); void Pokaz() const; friend ostream& operator << (ostream &, const Chelovek); friend istream& operator >> (istream &, Chelovek&); Chelovek& operator = (const Chelovek&); }; #endif //CHELOVEK_H
chelovek.cpp
#include "chelovek.h" Chelovek::Chelovek(): date(0) { strcpy(fio, ""); strcpy(name, ""); strcpy(otch, ""); } Chelovek::Chelovek(char *f, char *n, char *o, int d) { strcpy(fio, f); strcpy(name, n); strcpy(otch, o); date = d; } Chelovek::~Chelovek(){} Chelovek::Chelovek(const Chelovek &obj) { strcpy(name, obj.name); strcpy(fio, obj.fio); strcpy(otch, obj.otch); date = obj.date; } void Chelovek::Dobav() { cout << "Введите фамилию:" << endl; cin >> this->fio; cout << "Введите имя:" << endl; cin >> this->name; cout << "Введите отчество:" << endl; cin >> this->otch; cout << "Введите год рождения:" << endl; cin >> this->date; cout << endl; } void Chelovek::Pokaz()const { cout << "Фамилия:" << this->fio << endl; cout << "Имя:" << this->name << endl; cout << "Отчество:" << this->otch << endl; cout << "Год рождения:" << this->date << endl; cout << endl; } ostream& operator << (ostream &out,const Chelovek obj) { out << "Фамилия: " << obj.fio << endl; out << "Имя: " << obj.name << endl; out << "Отчество: " << obj.otch << endl; out << "Год рождения: " << obj.date <<endl; return out; } istream& operator >> (istream &in, Chelovek &obj) { cout << "Фамилия: "; in >> obj.fio; cout << "Имя: "; in >> obj.name; cout << "Отчество: "; in >> obj.otch; cout << "Год рождения: "; in >> obj.date; return in; } Chelovek& Chelovek::operator = (const Chelovek &t) { strcpy(this->fio, t.fio); strcpy(this->name, t.name); strcpy(this->otch, t.otch); this->date = t.date; return *this; }
stack.h
#ifndef STACK_H #define STACK_H #include "lib.h" // Структура элемента стека template <class T> struct Elem { T data; Elem* next; Elem(): next(NULL){} Elem(const Elem &t): data(t.data), next(t.next){} ~Elem(){delete next;} void View(){cout << data << endl;} void Edit(){cin >> data;} }; // Класс стек: указатель на вершину и размер template <class T> class Stack { private: Elem<T> *Head; int num; public: Stack(); Stack(T); ~Stack(); void Push(T); T Pop(); int isEmpty(); void View()const; void Remove(); Elem<T>* CreateElem(T); }; template <class T> Stack<T>::Stack(): Head(NULL), num(0){} template <class T> Stack<T>::Stack(T data){Push(data);} template <class T> Stack<T>::~Stack(){Remove(); delete Head;} template <class T> int Stack<T>::isEmpty(){return (num == 0);} template <class T> void Stack<T>::View()const { Elem<T>* q = Head; while(q) { cout << q->data << endl; q = q->next; } } template <class T> void Stack<T>::Remove() { while(!isEmpty()) { Pop(); } } template <class T> Elem<T>* Stack<T>::CreateElem(T data) { Elem<T>* NewElem = new Elem<T>; NewElem->data = data; NewElem->next = NULL; return NewElem; } template <class T> void Stack<T>::Push(T data) { Elem<T>* NewElem = CreateElem(data); if(isEmpty()) { Head = NewElem; num++; } else { NewElem->next = Head; Head = NewElem; num++; } } template <class T> T Stack<T>::Pop() { if(!isEmpty()) { T tmp = Head->data; Head = Head->next; num--; return tmp; } } #endif // STACK_H
tranz.cpp
#ifndef TRAN_H #define TRAN_H #include "stack.h" template <class Type> class Tran { private: Stack<Type>* prev; Elem<Type>* that; public: Tran(); ~Tran(); Tran(const Tran&); Tran& operator = (const Tran&); void Begin(); void Commit(); void Delete(); Elem<Type>* operator -> (); }; template <class Type> Tran<Type>::Tran() { prev = new Stack<Type>; that = new Elem<Type>; } template <class Type> Tran<Type>::~Tran() { prev->Remove(); delete prev; delete that; } template <class Type> Tran<Type>::Tran(const Tran &t) { that = new Type(*(t.that)); prev = new Stack<Type>; } template <class Type> Tran<Type>& Tran<Type>::operator = (const Tran<Type> &t) { if(this != &t) { delete that; that = new Type(*(t.that)); } return *this; } template <class Type> Elem<Type>* Tran<Type>::operator -> () { return that; } template <class Type> void Tran<Type>::Begin() { Type t = that->data; prev->Push(t); delete that; that = new Elem<Type>; that->data = t; } template <class Type> void Tran<Type>::Commit() { that->data = prev->Pop(); prev->Remove(); } template <class Type> void Tran<Type>::Delete() { that->data = prev->Pop(); } #endif // TRAN_H
main.cpp
#include "chelovek.h" #include "tranz.h" int main() { int Exit = 1, var; Tran<Chelovek> ob; while(Exit) { clear(); cout << "1 - изменить объект" << endl << "2 - выполнить транзакцию" << endl << "3 - закрепить транзакцию" << endl << "4 - отменить транзакцию" << endl << "5 - просмотр объекта" << endl << "0 - выход" << endl << endl; cin >> var; switch(var) { case 1: ob->Edit(); break; case 2: ob.Begin(); break; case 3: ob.Commit(); break; case 4: ob.Delete(); break; case 5: clear(); ob->View(); getch(); break; case 0: Exit = 0; break; default: break; } } return 0; }
Автор
ya.carapuz
Документ
Категория
Информационные технологии
Просмотров
45
Размер файла
13 Кб
Теги
с++
1/--страниц
Пожаловаться на содержимое документа