Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2.5 / main

.cpp
Скачиваний:
0
Добавлен:
10.06.2025
Размер:
2.85 Кб
Скачать
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string.h>


using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

struct Magnit
{
	char form[32];
	double vospr;
};

FILE *fptr;
int choice;
Magnit mag;

int main(int argc, char** argv) {
	setlocale(0,"");
	cout<<"\nsizeof int="<<sizeof(int);
	cout<<"\nsizeof double="<<sizeof(double);
	cout<<"\nsizeof Metall="<<sizeof(Magnit);

	fptr=fopen("mag.db ", "wb+");  
	if (fptr==0) { printf("\nError .... open file");getch(); return 1;}
	
	fseek(fptr, 0, SEEK_END);
	int n = ftell(fptr) / sizeof(Magnit);

	Magnit *magnitArray = new Magnit[n];

 while(1)
 {  
    printf("\nEnter code of operation");
    printf("\n1 - Add \n2 - Output All\n3 -  vospr >=\n4 -  vospr <= \n5 Sort BD \n6 - End\n");
    choice=getch(); /////scanf("%d",&choice);
	switch(choice)
	{
	  	case '1': 
	  	    cout<<"form="; 	cin>> mag.form;
	  		cout<<"vospr="; 	cin>> mag.vospr;
	  			fseek(fptr, 0, SEEK_END);  
				fwrite(&mag, sizeof(Magnit),1, fptr);
		  	break;	

	  	case '2':  
			fseek(fptr, 0, SEEK_SET);  
	  		while(!feof(fptr))
	  		{
	  		 int ret=fread(&mag, sizeof(Magnit),1, fptr);
		     if (ret!=1) break;
	  		 printf("\n%20s %7.3lf", mag.form, mag.vospr);

			  }

		  	break;	
	  	
		case '3': 
	  		double v1;
	  		cout<<"vospr1="; 	cin>> v1;
			fseek(fptr, 0, SEEK_SET); 
	  		while(!feof(fptr))
	  		{
	  		 int ret=fread(&mag, sizeof(Magnit),1, fptr);
		     if (ret!=1) break;
	  		 if (mag.vospr>=v1 )
			 printf("\n%20s %7.3lf", mag.form, mag.vospr);

			  }
		  	break;	

        case '4': 
	  		double v2;
	  		cout<<"vospr1="; 	cin>> v2;
			fseek(fptr, 0, SEEK_SET);  
	  		while(!feof(fptr))
	  		{
	  		 int ret=fread(&mag, sizeof(Magnit),1, fptr);
		     if (ret!=1) break;
	  		 if (mag.vospr<=v2 )
			 printf("\n%20s %7.3lf", mag.form, mag.vospr);
			  }

		  	break;	
		  	
		
	  	case '5':
	  	printf("\nCount DB: %d\n", n); 
	  	
			fseek(fptr, 0, SEEK_SET);
			for (int i = 0; i < n; i++) {
  				fread(&magnitArray[i], sizeof(Magnit), 1, fptr);
			}
			
			for (int i = 0; i < n - 1; i++) {
  				int minIndex = i;
  					for (int j = i + 1; j < n; j++) {
    					if (magnitArray[j].vospr < magnitArray[minIndex].vospr) {
      					minIndex = j;
    					}
  					}	
  				Magnit temp = magnitArray[i];
  				magnitArray[i] = magnitArray[i+1];
  				magnitArray[i+1] = temp;
			}
		
			fseek(fptr, 0, SEEK_SET);
			for (int i = 0; i < n; i++) {
  				fwrite(&magnitArray[i], sizeof(Magnit), 1, fptr);
			}
		
			delete[] magnitArray;
			
			break;
	  	
	  	
	  	
	  	
		default: goto mEnd;   
	} // END OF SWITCH
 }	// END OF WHILE
	
mEnd:	
	fclose(fptr);
	return 0;
}
Соседние файлы в папке 2.5