Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <fstream>
- #include <cstring>
- using namespace std;
- struct zarp {
- char surname [20];
- int account,nachisl,yderj;
- double taxes;
- };
- void vvod(zarp *&ar, int &n);
- void vyvod(zarp *ar, int n);
- void save(zarp *ar, int n);
- void load(zarp *&ar, int &n);
- void sort(zarp *ar, int n);
- int main(){
- zarp *ar=NULL;
- int n;
- int menu;
- setlocale (LC_ALL, "Russian");
- do{
- do{
- char str[513];
- cout<<"1. Ввести БД\n 2. Вывести БД\n 3.Сохранить БД\n 4.Загрузить БД\n 5.Сортировать БД\n 6.Выйти\n";
- cin.getline(str,513);
- menu=atoi(str);
- }
- while (menu<=0 || menu>6);
- switch (menu){
- case 1:vvod(ar,n);break;
- case 2:vyvod(ar,n);break;
- case 3:save(ar,n);break;
- case 4:load(ar,n);break;
- case 5:sort(ar,n);break;
- }
- }while(menu!=6);
- delete []ar;
- return 0;
- }
- void vvod(zarp *&ar, int &n){
- cout<<"ВВедите число элементов: \n";
- cin>>n;
- ar=new zarp[n];
- for (int i=0;i<n;++i){
- cin.ignore(1);
- cout<<"Введите фамилию: ";
- cin.getline(ar[i].surname,20);
- cout<<"Введите номер счета: ";
- cin>>ar[i].account;
- cout<<"Введите начисленную сумму: ";
- cin>>ar[i].nachisl;
- cout<<"Введите налог: ";
- cin>>ar[i].taxes;
- }
- }
- void vyvod(zarp *ar, int n){
- for (int i=0;i<n;++i){
- cout.width(15);
- cout<<ar[i].surname;
- cout.width(15);
- cout<<ar[i].account;
- cout.width(8);
- cout<<ar[i].nachisl;
- cout.width(8);
- cout<<ar[i].yderj;
- cout.width(4);
- cout<<ar[i].taxes;
- cout<<endl;
- }
- cin>>n;
- cin.ignore(1);
- }
- void save(zarp *ar, int n){
- ofstream potok;
- potok.open("BD.bin",ios::out | ios::trunc | ios::binary);
- potok.write((char *)&n, sizeof(n));
- potok.write((char *) ar, n*sizeof(zarp));
- potok.close();
- }
- void merge(zarp *ar, int l, int r)
- {
- zarp *test = new zarp[r-l+1];
- int i=l, j = (l+r)/2 + 1, k=0;
- while(i<=(l+r)/2 && j <= r)
- {
- if(ar[i].account > ar[j].account)
- test[k++] = ar[j++];
- else
- test[k++] = ar[i++];
- }
- while(i<=(l+r)/2) test[k++] = ar[i++];
- while(j<=r) test[k++] = ar[j++];
- for(int i = l;i <= r; ++i) ar[i] = test[i-l];
- delete []test;
- }
- void mergeSort(zarp* ar, int l, int r)
- {
- if(l<r)
- {
- mergeSort(ar, l, (l+r)/2);
- mergeSort(ar, (l+r)/2+1, r);
- merge(ar, l, r);
- }
- }
- void sort(zarp* ar, int n)
- {
- mergeSort(ar, 0, n-1);
- return;
- }
- void load(zarp *&ar, int &n){
- ifstream potok;
- if(ar!=NULL)
- delete []ar;
- potok.open("BD.bin", ios::in | ios::binary);
- potok.read((char *) &n, sizeof(n));
- ar = new zarp[n];
- potok.read((char *) *&ar, n*sizeof(zarp));
- potok.close();
- }
- int cmp1(zarp a,zarp b){
- return strcmp(a.surname,b.surname);
- }
- int cmp2(zarp a,zarp b){
- return a.account-b.account;
- }
- int cmp3(zarp a,zarp b){
- return a.nachisl-b.nachisl;
- }
- int cmp4(zarp a,zarp b){
- return a.yderj-b.yderj;
- }
- int cmp5(zarp a,zarp b){
- return a.taxes-b.taxes;
- }
Add Comment
Please, Sign In to add comment