Skip to content

Instantly share code, notes, and snippets.

@superhard
Forked from anonymous/gist:5677646
Created May 30, 2013 13:01
Show Gist options
  • Save superhard/5677652 to your computer and use it in GitHub Desktop.
Save superhard/5677652 to your computer and use it in GitHub Desktop.
#include <iostream>
#include <string.h>
#include <iomanip>
#include <string>
using namespace std;
const int size=80; //длина информационной строки
const int MaxItems=14; //max количество элементов в таблице
typedef struct Item{
int busy; // признак занятости элемента
int key; // ключ элемента
int release;
char* info; // указатель на информацию
} Items;
Item table[MaxItems]; // определение рабочего вектора
int n=0; //текущий размер таблицы
string mas="1.Insert\n2.Find\n3.Show\n4.Delete\n0.Exit\nEnter your choice: ";
inline int I(int k){return k % MaxItems;} // функция перемешивания
void Insert()
{
int key=0;
int flag=0;
char* mas=new char[80];
int count=0;
cout << "Enter key: ";
cin >> key;
cout << "Enter info: ";
cin.getline(mas,80,'#');
for(int j=0; j<strlen(mas)-1; j++)
{
if(mas[j]!=32)
{
flag=1;
break;
}
}
if(flag==0)
{
mas="No data";
}
int i=I(key);
while(table[i].busy>0)
{
++i;
if(i>MaxItems)
{
i=0;
}
}
table[i].key=key;
table[i].info=mas;
table[i].busy=1;
for(int j=0; j<MaxItems; j++)
{
if(table[j].key==key && table[j].busy>0)
{
++count;
}
}
table[i].release=count;
cout << endl;
cout << "OK" << endl;
cout << endl;
++n;
return;
}
void Find()
{
cout << endl;
if(n==0)
{
cout << "Sorry. The table is empty" << endl;
cout << endl;
return;
}
char mas[80]={' '};
int key=0;
int flag=0;
int release=0;
cout << "Enter key: ";
cin >> key;
cout << "Enter release(if you want to get to all key, cin>>0): ";
cin >> release;
cout << endl;
cout << "Key" << setw(20) << "Release" << setw(19) << "Info" << endl;
if(release==0)
{
for(int i=0; i<MaxItems; i++)
{
if(table[i].busy>0 && table[i].key==key)
{
cout << table[i].key << setw(17) << table[i].release << setw(20);
for(int j=0; j<strlen(table[i].info); j++)
{
if(*(table[i].info+j)=='\n')
continue;
mas[j]=*(table[i].info+j);
cout << mas[j];
flag=1;
}
cout << endl;
}
}
if(flag!=0)
return;
}
else
{
for(int i=0; i<MaxItems; i++)
{
if(table[i].busy>0 && table[i].key==key && table[i].release==release)
{
cout << table[i].key << setw(17) << table[i].release << setw(20);
for(int j=0; j<strlen(table[i].info); j++)
{
if(*(table[i].info+j)=='\n')
continue;
mas[j]=*(table[i].info+j);
flag=1;
cout << mas[j];
}
cout << endl;
if(flag!=0)
return;
}
}
}
cout << endl;
cout << "Sorry. Maybe you made a mistake" << endl;
cout << endl;
return;
}
void Delete()
{
cout << endl;
if(n==0)
{
cout << "Sorry. The table is empty" << endl;
cout << endl;
return;
}
int key=0;
int flag=0;
cout << "Enter key: ";
cin >> key;
for(int i=0; i<MaxItems; i++)
{
if(table[i].key==key && table[i].busy>0)
{
table[i].key=0;
table[i].info=NULL;
table[i].release;
table[i].busy=-1;
flag=1;
}
}
if(flag==0)
{
cout << endl;
cout << "Sorry. Maybe you made a mistake" << endl;
cout << endl;
return;
}
cout << endl;
cout << "OK" << endl;
cout << endl;
return;
}
void Show()
{
cout << endl;
if(n==0)
{
cout << "Sorry. The table is empty" << endl;
cout << endl;
return;
}
char mas[80]={' '};
cout << endl;
cout << "Key" << setw(20) << "Release" << setw(19) << "Info" << endl;
for(int i=0; i<MaxItems; i++)
{
if(table[i].busy>0)
{
cout << table[i].key << setw(17) << table[i].release << setw(21);
for(int j=0; j<strlen(table[i].info); j++)
{
if(*(table[i].info+j)=='\n')
continue;
mas[j]=*(table[i].info+j);
cout << mas[j];
}
cout << endl;
}
}
cout << endl;
return;
}
int main()
{
int rc;
while(true)
{
if(n==MaxItems)
{
cout << "The table is overlow" << endl;
return 0;
}
cout << mas;
cin >> rc;
switch(rc)
{
case 0: return 0;
break;
case 1: Insert();
break;
case 2: Find();
break;
case 3: Show();
break;
case 4: Delete();
break;
default: cout << "Sorry. Maybe you made a mistake" << endl;
}
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment