Guest User

Untitled

a guest
Jul 15th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.01 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <fstream>
  4. #include <cstring>
  5. using namespace std;
  6.  
  7. struct zarp {
  8.     char surname [20];
  9.     int account,nachisl,yderj;
  10.     double taxes;
  11. };
  12. void vvod(zarp *&ar, int &n);
  13. void vyvod(zarp *ar, int n);
  14. void save(zarp *ar, int n);
  15. void load(zarp *&ar, int &n);
  16. void sort(zarp *ar, int n);
  17.  
  18. int main(){
  19.     zarp *ar=NULL;
  20.     int n;
  21.     int menu;
  22.     setlocale (LC_ALL, "Russian");
  23.     do{
  24.         do{
  25.             char str[513];
  26.             cout<<"1. Ввести БД\n 2. Вывести БД\n 3.Сохранить БД\n 4.Загрузить БД\n 5.Сортировать БД\n 6.Выйти\n";
  27.             cin.getline(str,513);
  28.             menu=atoi(str);
  29.         }
  30.         while (menu<=0 || menu>6);
  31.         switch (menu){
  32.             case 1:vvod(ar,n);break;
  33.             case 2:vyvod(ar,n);break;
  34.             case 3:save(ar,n);break;
  35.             case 4:load(ar,n);break;
  36.             case 5:sort(ar,n);break;
  37.         }
  38.     }while(menu!=6);
  39.     delete []ar;
  40.     return 0;
  41. }
  42.  
  43.  
  44.  
  45.  
  46.  
  47. void vvod(zarp *&ar, int &n){
  48.     cout<<"ВВедите число элементов: \n";
  49.     cin>>n;
  50.     ar=new zarp[n];
  51.     for (int i=0;i<n;++i){
  52.         cin.ignore(1);
  53.         cout<<"Введите фамилию: ";
  54.         cin.getline(ar[i].surname,20);
  55.         cout<<"Введите номер счета: ";
  56.         cin>>ar[i].account;
  57.         cout<<"Введите начисленную сумму: ";
  58.         cin>>ar[i].nachisl;
  59.         cout<<"Введите налог: ";
  60.         cin>>ar[i].taxes;
  61.     }
  62. }
  63.  
  64.  
  65.  
  66. void vyvod(zarp *ar, int n){
  67.     for (int i=0;i<n;++i){
  68.         cout.width(15);
  69.         cout<<ar[i].surname;
  70.         cout.width(15);
  71.         cout<<ar[i].account;
  72.         cout.width(8);
  73.         cout<<ar[i].nachisl;
  74.         cout.width(8);
  75.         cout<<ar[i].yderj;
  76.         cout.width(4);
  77.         cout<<ar[i].taxes;
  78.         cout<<endl;
  79.     }
  80.     cin>>n;
  81.     cin.ignore(1);
  82. }
  83.  
  84.  
  85.  
  86.  
  87. void save(zarp *ar, int n){
  88.     ofstream potok;
  89.     potok.open("BD.bin",ios::out | ios::trunc | ios::binary);
  90.     potok.write((char *)&n, sizeof(n));
  91.     potok.write((char *) ar, n*sizeof(zarp));
  92.     potok.close();
  93. }
  94.  
  95. void merge(zarp *ar, int l, int r)
  96. {
  97.     zarp *test = new zarp[r-l+1];
  98.     int i=l, j = (l+r)/2 + 1, k=0;
  99.    
  100.     while(i<=(l+r)/2 && j <= r)
  101.     {
  102.         if(ar[i].account > ar[j].account)
  103.             test[k++] = ar[j++];
  104.         else
  105.             test[k++] = ar[i++];
  106.     }
  107.     while(i<=(l+r)/2) test[k++] = ar[i++];
  108.     while(j<=r) test[k++] = ar[j++];
  109.     for(int i = l;i <= r; ++i) ar[i] = test[i-l];
  110.     delete []test;
  111. }
  112. void mergeSort(zarp* ar, int l, int r)
  113. {
  114.     if(l<r)
  115.     {
  116.         mergeSort(ar, l, (l+r)/2);
  117.         mergeSort(ar, (l+r)/2+1, r);
  118.         merge(ar, l, r);
  119.     }
  120. }
  121. void sort(zarp* ar, int n)
  122. {
  123.     mergeSort(ar, 0, n-1);
  124.     return;
  125. }
  126.  
  127.  
  128.  
  129. void load(zarp *&ar, int &n){
  130.     ifstream potok;
  131.     if(ar!=NULL)
  132.         delete []ar;
  133.     potok.open("BD.bin", ios::in | ios::binary);
  134.     potok.read((char *) &n, sizeof(n));
  135.     ar = new zarp[n];
  136.     potok.read((char *) *&ar, n*sizeof(zarp));
  137.     potok.close();
  138. }
  139. int cmp1(zarp a,zarp b){
  140.     return strcmp(a.surname,b.surname);
  141. }
  142. int cmp2(zarp a,zarp b){
  143.     return a.account-b.account;
  144. }
  145. int cmp3(zarp a,zarp b){
  146.     return a.nachisl-b.nachisl;
  147. }
  148. int cmp4(zarp a,zarp b){
  149.     return a.yderj-b.yderj;
  150. }
  151. int cmp5(zarp a,zarp b){
  152.     return a.taxes-b.taxes;
  153. }
Add Comment
Please, Sign In to add comment