📄 emploie.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 + -