⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 emploie.cpp

📁 基于文件模拟数据库的查询
💻 CPP
字号:
#include <iostream.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include "emploie.h"

//************************************
int h1(int n)
{
	return(n%16);
}

int h2(char *c)
{
 return(strlen(c)%8);
}

int h3(int m)
{
	return(m%4);
}

//**************************************

void lire()
{	FILE *fp;
    int rnum2;
	//open file 
	if ((fp=fopen("employer.dat","r"))!=NULL)  
	{  
         int rnum=fread(ou_cher,sizeof(ouvrier),16*512,fp);
		 int result=fseek(fp,512*512,SEEK_SET);
		 while(!feof(fp))
		 rnum2=fread(ou_debord,sizeof(ouvrier),32,fp);
		 fclose(fp);
	}	else cout<<"error";

}

//**************************************
void afficher()
{
 int flag=0;
 cout<<"numero\tdepartement  salaire\tville"<<endl;
		 for(int i=0;i<512;i++)
			 for(int j=0;j<baquet[i];j++)
		      if(ou_cher[i][j].no!=0)
			 { 
      				flag=1;
					cout<<ou_cher[i][j].no<<"\t"<<ou_cher[i][j].dep<<"\t     "<<ou_cher[i][j].sal<<"\t"<<ou_cher[i][j].ville<<endl;
					
			 }

		if(debord!=0)
			for(int k=0;k<debord;k++) 
			 {	
				flag=1;
 			if(ou_debord[k].no!=0)
				cout<<ou_debord[k].no<<"\t"<<ou_debord[k].dep<<"\t     "<<ou_debord[k].sal<<"\t"<<ou_debord[k].ville<<endl;
			 }
        if(flag==0) cout<<"le fichier est vide!"<<endl<<endl;
}

//*************************************
void ecrire()
{
	FILE *fp;
	if ((fp=fopen("employer.dat","w+"))!=NULL)  
		 
	 int wnum=fwrite(ou_cher,sizeof(ouvrier),16*512,fp);
    
	else cout<<"error!"<<endl;
	fclose(fp);
	if (debord!=0)
		if ((fp=fopen("employer.dat","a"))!=NULL)
			int wnum=fwrite(ou_debord,sizeof(ouvrier),32,fp);
		else cout<<"error!"<<endl;
	cout<<"les articles sont ecrites dans le fichier!"<<endl<<endl;
}
//*****************************************
void entrer()

{
  char judge;
  int flag=0;
  hi=-1;
  hj=-1;
  hk=-1;
  while((hi==-1)&&(hj==-1)&&(hk==-1))
	{
	cout<<"connaissez-vous son numero?(tapez O si oui/taper N si non):";
	cin>>judge;
	if(judge=='O')		
	{
		cout<<"tapez son numero ";
	    cin>>ou1.no;
		hi=h1(ou1.no);
		flag=1;
	}
	else { ou1.no=-1;}
	
	cout<<"Connaissez-vous son salaire(tapez O si oui/taper N si non):";
	cin>>judge;
	if(judge=='O')		
	{
		cout<<"tapez son salaire ";
	    cin>>ou1.sal;
		hk=h3(ou1.sal);
		flag=1;
	}
    else {ou1.sal=-1;}

	
	cout<<"connaissez-vous son departement(tapez O si oui/taper N si non):";
	cin>>judge;
	if(judge=='O')		
	{
		cout<<"tapez son departement ";
	    cin>>ou1.dep;
		hj=h2(ou1.dep);
		flag=1;
	}
	else { strcpy(ou1.dep,"\0");}

	cout<<"connaissez-vous sa ville(tapez O si oui/taper N si non):";
	cin>>judge;
	if(judge=='O')		
	{
		cout<<"tapez sa ville ";
	    cin>>ou1.ville;
	}
	else strcpy(ou1.ville,"\0");

	  
	if(flag==0)
	 cout<<" vous devez importez au moins un parametre entre numero, salaire et departement!"<<endl;
	}
}


//********************************
void metpage()
{
	for(int n=0;n<512;n++)
		page[n]=0;

 if((hi<0)&&(hj<0)) 
	{ for(int i=0;i<512;i++)
	
	{ if (i%4==hk) page[i]=1; }
	}
     
	 else if((hi<0)&&(hk<0))
	 {
		 for(int i=0;i<16;i++)
			 for(int k=0;k<4;k++)
			 {
				 int p=i*32+hj*4+k;
				 page[p]=1;
			 }
	 }
     else if((hj<0)&&(hk<0))
	 {
		 for(int j=0;j<32;j++)
		 page[hi*32+j]=1;
	 }
	  else if(hi<0)
	  {
		  for(int i=0;i<16;i++)
			  page[i*32+hj*4+hk]=1;
	  }
	  else if(hj<0)
	  {
		  for (int j=0;j<8;j++)
			  page[hi*32+j*4+hk]=1;
	  }
	  else if(hk<0)
		  for (int k=0;k<4;k++)
			  page[hi*32+hj*4+k]=1;

      else
		  page[hi*32+hj*4+hk]=1;
}
//**************************************
void insertion()
{
  
	ouvrier ou1;
	cout<<"tapez son numero :";
    cin>>ou1.no;
	cout<<"tapez son salaire:";
	cin>>ou1.sal;
	cout<<"tapez son departement:";
 	cin>>ou1.dep;
    cout<<"tapez sa ville:";
	cin>>ou1.ville;
	int hachage=h1(ou1.no)*32+h2(ou1.dep)*4+h3(ou1.sal);

	
	if  (baquet[hachage]<f)   //page pas complet
	
	{   
		ou_cher[hachage][baquet[hachage]].no=ou1.no;
	    ou_cher[hachage][baquet[hachage]].sal=ou1.sal;
		strcpy(ou_cher[hachage][baquet[hachage]].dep,ou1.dep);
	    strcpy(ou_cher[hachage][baquet[hachage]].ville,ou1.ville);
		baquet[hachage]++;
	}
	else 
	{
		cout<<"ce page est complet, on va le mettre dans la page de debordement"<<endl;
       	ou_debord[debord].no=ou1.no;
        ou_debord[debord].sal=ou1.sal;
        strcpy(ou_debord[debord].dep,ou1.dep);
		strcpy(ou_debord[debord].ville,ou1.ville);
		debord++;
		cout<<"il y a "<<debord<<" articles dans la page de debordement!"<<endl;

	}

}
//****************************************************
void chercher()
{
int num=0,fl=0;
entrer();
metpage();
cout<<"     numero\tdepartement\tsalaire\tville"<<endl;
  for(int m=0;m<512;m++)
	  {
		  if (page[m]==1)
		  for(int n=0;n<16;n++)
		  { 
			  if(((hi!=-1)&&(ou1.no!=ou_cher[m][n].no))||((hj!=-1)&&(strcmp(ou1.dep,ou_cher[m][n].dep)!=0))||((hk!=-1)&&(ou1.sal!=ou_cher[m][n].sal))||((strcmp(ou1.ville,"\0")!=0)&&(strcmp(ou1.ville,ou_cher[m][n].ville)!=0)));
				  
               else 
	
			   {   
				   fl=1;
				   num++;
				   cout<<num<<"\t"<<ou_cher[m][n].no<<"\t"<<ou_cher[m][n].dep<<"\t\t"<<ou_cher[m][n].sal<<"\t"<<ou_cher[m][n].ville<<endl;
			   }
		  }
		}
  if (debord!=0)
		{  for(int d=0;d<debord;d++)
		   if(((hi!=-1)&&(ou1.no!=ou_debord[d].no))||((hj!=-1)&&(strcmp(ou1.dep,ou_debord[d].dep)!=0))||((hk!=-1)&&(ou1.sal!=ou_debord[d].sal))||((strcmp(ou1.ville,"\0")!=0)&&(strcmp(ou1.ville,ou_debord[d].ville)!=0)));
			 else
			 { 
						  
						fl=1;
					    num++;
					    cout<<num<<"\t"<<ou_debord[d].no<<"\t"<<ou_debord[d].dep<<"\t\t"<<ou_debord[d].sal<<"\t"<<ou_debord[d].ville<<endl;
			 }
          }
			  
         if (fl==0) cout<<"desolee, on a rien trouve!"<<endl; 
    
}

//********************************************

void suppression()
{
    int num=0,fl=0;
	char judge;
	entrer();
	metpage();
	for(int m=0;m<512;m++)
	  {
		  if (page[m]==1)
		  for(int n=0;n<16;n++)
		  { 
			  if(((hi!=-1)&&(ou1.no!=ou_cher[m][n].no))||((hj!=-1)&&(strcmp(ou1.dep,ou_cher[m][n].dep)!=0))||((hk!=-1)&&(ou1.sal!=ou_cher[m][n].sal))||((strcmp(ou1.ville,"\0")!=0)&&(strcmp(ou1.ville,ou_cher[m][n].ville)!=0)))  ;

               else 
			   {  
			       num++;
				   cout<<num<<"\t"<<ou_cher[m][n].no<<"\t"<<ou_cher[m][n].dep<<"\t"<<ou_cher[m][n].sal<<"\t"<<ou_cher[m][n].ville<<endl;
				   cout<<"voulez vous vraiment le SUPPRIMER? (tapez O si oui/ N si non:)";
				   cin>>judge;
				   if(judge=='O')
				   {   
					   fl=1;
					   for(int k=n;k<15;k++)
					   { 
							ou_cher[m][k].no=ou_cher[m][k+1].no;
                            ou_cher[m][k].sal=ou_cher[m][k+1].sal;
							strcpy(ou_cher[m][k].dep,ou_cher[m][k+1].dep);
							strcpy(ou_cher[m][k].ville,ou_cher[m][k+1].ville);
						}
					   
						    ou_cher[m][15].no=0;
						    ou_cher[m][15].sal=0;
							strcpy(ou_cher[m][15].dep,"0");
							strcpy(ou_cher[m][15].ville,"0");
					   cout<<"suppression succede!"<<endl;
					   baquet[m]--;
				   }
				   else cout<<"suppression abondone!"<<endl;
			   }
		  }//for
	  } //for
		if (debord!=0)
		{  
			for(int d=0;d<debord;d++)
		     if(((hi!=-1)&&(ou1.no!=ou_debord[d].no))||((hj!=-1)&&(strcmp(ou1.dep,ou_debord[d].dep)!=0))||((hk!=-1)&&(ou1.sal!=ou_debord[d].sal))||((strcmp(ou1.ville,"\0")!=0)&&(strcmp(ou1.ville,ou_debord[d].ville)!=0)));
			  else
			  { 
						  
					    num++;
					    cout<<num<<"\t"<<ou_debord[d].no<<"\t"<<ou_debord[d].dep<<"\t\t"<<ou_debord[d].sal<<"\t"<<ou_debord[d].ville<<endl;
			            cout<<"voulez vous vraiment le SUPPRIMER? (tapez O si oui/ N si non:)";
				        cin>>judge;
				       if(judge=='O')
					  {   
					      fl=1;
					      for(int dd=d;dd<31;dd++)
						  { 
							ou_debord[dd].no=ou_debord[dd+1].no;
                            ou_debord[dd].sal=ou_debord[dd+1].sal;
							strcpy(ou_debord[dd].dep,ou_debord[dd+1].dep);
							strcpy(ou_debord[dd].ville,ou_debord[dd].ville);
						  }
					   
						    ou_debord[31].no=0;
						    ou_debord[31].sal=0;
							strcpy(ou_debord[31].dep,"0");
							strcpy(ou_debord[31].ville,"0");
					   cout<<"suppression succede!"<<endl;
					   debord--;
					   }
				   else cout<<"suppression abondone!"<<endl;
			  } //else
			 
		}  //IF
    
	  if (fl==0) cout<<"on as rien supprime"<<endl;
}

//*****************************************************

void mm(ouvrier ou)
{     
	  int hachage=h1(ou.no)*32+h2(ou.dep)*4+h3(ou.sal);
	  if  (baquet[hachage]<f) 
					   {
					     ou_cher[hachage][baquet[hachage]].no=ou.no;
						 ou_cher[hachage][baquet[hachage]].sal=ou.sal;
						 strcpy(ou_cher[hachage][baquet[hachage]].dep,ou.dep);
						 strcpy(ou_cher[hachage][baquet[hachage]].ville,ou.ville);
					
						 baquet[hachage]++;
						 
					   }
					   else
					   {  
						   cout<<"desole, ce page est complet! On va le mettre dans la page de debordement!"<<endl;
						   ou_debord[debord].no=ou.no;
                           ou_debord[debord].sal=ou.sal;
                           strcpy(ou_debord[debord].dep,ou.dep);
		                   strcpy(ou_debord[debord].ville,ou.ville);
		                   debord++;
		                   cout<<"il y a "<<debord<<"articles dans la page de debordement!"<<endl;
					   }
}
//************************************************
void modification()
{
	int num=0,fl=0;
	char judge;
	ouvrier oub;
	entrer();
	metpage();
	for(int m=0;m<512;m++)
	  {
		  if (page[m]==1)
		  for(int n=0;n<16;n++)
		  { 
			  if(((hi!=-1)&&(ou1.no!=ou_cher[m][n].no))||((hj!=-1)&&(strcmp(ou1.dep,ou_cher[m][n].dep)!=0))||((hk!=-1)&&(ou1.sal!=ou_cher[m][n].sal))||((strcmp(ou1.ville,"\0")!=0)&&(strcmp(ou1.ville,ou_cher[m][n].ville)!=0)))  ;

               else 
			   {  
			       num++;
				   cout<<num<<"\t"<<ou_cher[m][n].no<<"\t"<<ou_cher[m][n].dep<<"\t"<<ou_cher[m][n].sal<<"\t"<<ou_cher[m][n].ville<<endl;
				   cout<<"voulez vous vraiment le MODIFIER? (tapez O si oui/ N si non:)";
				   cin>>judge;
				   if(judge=='O')
				   {   
					   cout<<"importez son nouveau information:"<<endl;
                       cout<<"importez son nouveau numero:";
			           cin>>oub.no;
			           cout<<"importez son nouveau salaire:";
			           cin>>oub.sal;
			           cout<<"importez son nouveau departement:";
			           cin>>oub.dep;
			           cout<<"importez sa nouveau ville:";
		               cin>>oub.ville;
					   fl=1;
					   mm(oub);
					  
						   for(int k=n;k<15;k++)
						   { 
							ou_cher[m][k].no=ou_cher[m][k+1].no;
                            ou_cher[m][k].sal=ou_cher[m][k+1].sal;
							strcpy(ou_cher[m][k].dep,ou_cher[m][k+1].dep);
							strcpy(ou_cher[m][k].ville,ou_cher[m][k+1].ville);
						   }
					   
						    ou_cher[m][15].no=0;
						    ou_cher[m][15].sal=0;
							strcpy(ou_cher[m][15].dep,"0");
							strcpy(ou_cher[m][15].ville,"0");
							baquet[m]--;
							cout<<"modification succede!"<<endl;
				
					   
				   }
				   else cout<<"modification abandone!"<<endl;
			   }
		  }
	}

	 if (debord!=0)
		{  
			for(int d=0;d<debord;d++)
		     if(((hi!=-1)&&(ou1.no!=ou_debord[d].no))||((hj!=-1)&&(strcmp(ou1.dep,ou_debord[d].dep)!=0))||((hk!=-1)&&(ou1.sal!=ou_debord[d].sal))||((strcmp(ou1.ville,"\0")!=0)&&(strcmp(ou1.ville,ou_debord[d].ville)!=0)));
			  else
			  { 
						num++;
					    cout<<num<<"\t"<<ou_debord[d].no<<"\t"<<ou_debord[d].dep<<"\t\t"<<ou_debord[d].sal<<"\t"<<ou_debord[d].ville<<endl;
			            cout<<"voulez vous vraiment le MODIFIER? (tapez O si oui/ N si non:)";
				        cin>>judge;
				       if(judge=='O')
					  {  
					   cout<<"importez son nouveau information:"<<endl;
                       cout<<"importez son nouveau numero:";
			           cin>>oub.no;
			           cout<<"importez son nouveau salaire:";
			           cin>>oub.sal;
			           cout<<"importez son nouveau departement:";
			           cin>>oub.dep;
			           cout<<"importez sa nouveau ville:";
		               cin>>oub.ville;
					   fl=1;
                       mm(oub);

					   for(int dd=d;dd<31;dd++)
						  { 
							ou_debord[dd].no=ou_debord[dd+1].no;
                            ou_debord[dd].sal=ou_debord[dd+1].sal;
							strcpy(ou_debord[dd].dep,ou_debord[dd+1].dep);
							strcpy(ou_debord[dd].ville,ou_debord[dd].ville);
						  }
					   
						    ou_debord[31].no=0;
						    ou_debord[31].sal=0;
							strcpy(ou_debord[31].dep,"0");
							strcpy(ou_debord[31].ville,"0");
					        cout<<"modification succede!"<<endl;
					        debord--;
                            cout<<"debord="<<debord<<endl; 
					   }
				   else cout<<"modification abondone!"<<endl;
			  } //else
			 
		}  //I
	if (fl==0) cout<<"on as rien modifie"<<endl;

	}
//*************************************************

void main()
{   
	char choice;
	FILE *fp;

    for(int j=0;j<512;j++) 
	{
		blank[j]='\0' ;
		baquet[j]=0;
	}

	if ((fp=fopen("employer.dat","r"))!=NULL) 
	{
		lire();
        for(int m=0;m<512;m++)
			for(int n=0;n<512;n++)
			if (ou_cher[m][n].no!=0) baquet[m]++;
	    for(int d=0;d<32;d++)
			if(ou_debord[d].no!=0) debord++;
		
		fclose(fp);
	}
	else
		
	{    
		cout<<"creer un nouveau fichier dont le nom est employer.dat"<<endl;
		fp=fopen("employer.dat","w+");
		for (int i=0; i<512;i++)
	    int wnum=fwrite(blank, sizeof( char ), 512, fp );
	    fclose(fp);
	}
	 while(1)
	 { 
	 cout<<"choisir la tache: A(ajouter un article),M(modifier un article),S(supprimer un article),C(chercher les articles),L(lire le fichier),E(enregistrer le fichier):";
	 cin>>choice;
	 cout<<endl;
	 if(choice=='A'){ cout<<"insetion de l'information d'un ouvrier:"<<endl; insertion();}
     else if (choice=='M'){	cout<<"modification de l'information d'un ouvrier:"<<endl;modification();}
	 else if(choice=='S') {cout<<"suppression de l'information d'un ouvrier:"<<endl; suppression();}
	 else if(choice=='C') {cout<<"cherche des informations des ouvriers:"<<endl; chercher();}
	 else if(choice=='L') {afficher();	 }
	 else if(choice=='E') {ecrire();}
	 else {ecrire();break;}
	 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -