-
-
Save superhard/5677652 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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