efestius
04-09-2012, 16:09
Salve volevo chiedervi come devo fare per inserire nel programma la funzione modifica contatto . Questo è quanto ho scritto fino ad ora .
#include<stdio.h>
#include<string.h>
#define MENU 0
#define DIM 100
#define INS 1
#define CAN 2
#define RIC 3
#define VIS 4
#define MOD 5
#define OUT 100
struct Per{
char nome [DIM];
char cognome [DIM];
int numero;
};
FILE *fp;
struct Per Rub;
int menPer (void);
void insPer(void);
void ricPer(void);
void canPer(void);
void modPer(void);
long cerPer(char *,char *);
void eliPer(long pos);
void cambPer(long pos);
void visPer(void);
void visRub(void);
int main(){
int scelta =MENU;
while (scelta!=OUT){
switch (scelta) {
case MENU:
scelta=menPer();
if (scelta==MENU)
scelta = OUT;
break;
case INS:
insPer();
scelta =MENU;
break;
case CAN:
canPer();
scelta=MENU;
break;
case RIC:
canPer();
scelta=MENU;
break;
case VIS:
visPer();
scelta=MENU;
break;
case MOD:
modPer();
scelta=MENU;
break;
}}
int menPer(void){
int scelta ;
char invio ;
int vero=1;
while (vero) {
printf("RUBRICA TELEFONICA\n");
printf("1.Nuovo contatto\n");
printf("2.Cancella contatto\n");
printf("3.Cerca contatto\n");
printf("4.visualizza rubrica\n ");
printf("5.Modifica contatto\n");
printf("0.Chiudi rubrica ");
scanf("%d",&scelta);
scanf("%c",&invio);
switch (scelta) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
return (scelta);
default:
break;
}
}
return(0);
}
void insPer(void){
char invio;
fp = fopen("Contatti.dat", "w+");
printf("Nome: \n");
gets(Rub.nome);
printf("Cognome: \n");
gets(Rub.cognome);
printf("Numero: \n");
scanf("%d",&Rub.numero);
scanf("%c",&invio);
fwrite(&Rub, sizeof(struct per), 1,fp);
fclose(fp);
}
void canPer(void){
char pausa;
char nome[DIM];
char cognome[DIM];
int numero;
long pos;
printf("Nome: \n");
gets(nome);
printf("Cognome: \n");
gets(cognome);
printf("Numero: \n");
scanf("%d",&numero);
scanf("%c",&pausa);
pos=cerPer(nome , cognome);
if(pos==-1){
printf("Contatto nn in elecno\n");
scanf("%c",&pausa);
return;
}
visPer();
printf("Cancellare contatto?...S/N");
scanf("%c",&pausa);
if (pausa=='s'|| pausa=='S') {
eliPer(pos);
}
}
void eliPer(long pos){
strcmp(Rub.nome, "");
strcmp(Rub.cognome,"");
Rub.numero=0;
fp = fopen("Contatti.dat","r+");
fseek(fp,pos,0 );
fwrite(&Rub,sizeof(struct per ),1, fp);
fclose(fp);
}
void ricPer(void){
char pausa;
char nome [DIM];
char cognome[DIM];
long pos;
printf("Nome: \n");
gets(nome);
printf("Cognome: \n");
gets(cognome);
scanf("%c",&pausa);
pos=cerPer(nome, cognome);
if(pos==-1){
printf("Contatto nn presente");
scanf("%c",&pausa);
return;
}
visPer();
scanf("%c",&pausa);
}
long cerPer(char *nm,char *cg){
int n;
long pos= 0L;
fp = fopen("Contatti.dat", "r");
for(;;){
n = fread(&Rub, sizeof(struct per), 1, fp);
if(n==0){
fclose(fp);
pos=-1;
return(pos);
}
else
if(strcmp(nm,Rub.nome)==0)
if(strcmp(cg,Rub.cognome)){
pos=ftell(fp);
fclose(fp);
return(pos-sizeof(struct per));
}
}
}
void visper (void){
printf("Nome: %s\n",Rub.nome);
printf("Cognome: %s\n",Rub.cognome);
printf("Numero :%d\n",Rub.numero);
printf("\n\n\n\n\n\n\n\n");
}
void visRub(void){
int n;
char pausa;
fp = fopen("Contatti.dat","r");
do{
n = fread(&Rub, sizeof(struct per), 1, fp);
if(n==0){
fclose(fp);
else
visPer();
scanf("%c",&pausa);
}
}
while (n!=0);
}
#include<stdio.h>
#include<string.h>
#define MENU 0
#define DIM 100
#define INS 1
#define CAN 2
#define RIC 3
#define VIS 4
#define MOD 5
#define OUT 100
struct Per{
char nome [DIM];
char cognome [DIM];
int numero;
};
FILE *fp;
struct Per Rub;
int menPer (void);
void insPer(void);
void ricPer(void);
void canPer(void);
void modPer(void);
long cerPer(char *,char *);
void eliPer(long pos);
void cambPer(long pos);
void visPer(void);
void visRub(void);
int main(){
int scelta =MENU;
while (scelta!=OUT){
switch (scelta) {
case MENU:
scelta=menPer();
if (scelta==MENU)
scelta = OUT;
break;
case INS:
insPer();
scelta =MENU;
break;
case CAN:
canPer();
scelta=MENU;
break;
case RIC:
canPer();
scelta=MENU;
break;
case VIS:
visPer();
scelta=MENU;
break;
case MOD:
modPer();
scelta=MENU;
break;
}}
int menPer(void){
int scelta ;
char invio ;
int vero=1;
while (vero) {
printf("RUBRICA TELEFONICA\n");
printf("1.Nuovo contatto\n");
printf("2.Cancella contatto\n");
printf("3.Cerca contatto\n");
printf("4.visualizza rubrica\n ");
printf("5.Modifica contatto\n");
printf("0.Chiudi rubrica ");
scanf("%d",&scelta);
scanf("%c",&invio);
switch (scelta) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
return (scelta);
default:
break;
}
}
return(0);
}
void insPer(void){
char invio;
fp = fopen("Contatti.dat", "w+");
printf("Nome: \n");
gets(Rub.nome);
printf("Cognome: \n");
gets(Rub.cognome);
printf("Numero: \n");
scanf("%d",&Rub.numero);
scanf("%c",&invio);
fwrite(&Rub, sizeof(struct per), 1,fp);
fclose(fp);
}
void canPer(void){
char pausa;
char nome[DIM];
char cognome[DIM];
int numero;
long pos;
printf("Nome: \n");
gets(nome);
printf("Cognome: \n");
gets(cognome);
printf("Numero: \n");
scanf("%d",&numero);
scanf("%c",&pausa);
pos=cerPer(nome , cognome);
if(pos==-1){
printf("Contatto nn in elecno\n");
scanf("%c",&pausa);
return;
}
visPer();
printf("Cancellare contatto?...S/N");
scanf("%c",&pausa);
if (pausa=='s'|| pausa=='S') {
eliPer(pos);
}
}
void eliPer(long pos){
strcmp(Rub.nome, "");
strcmp(Rub.cognome,"");
Rub.numero=0;
fp = fopen("Contatti.dat","r+");
fseek(fp,pos,0 );
fwrite(&Rub,sizeof(struct per ),1, fp);
fclose(fp);
}
void ricPer(void){
char pausa;
char nome [DIM];
char cognome[DIM];
long pos;
printf("Nome: \n");
gets(nome);
printf("Cognome: \n");
gets(cognome);
scanf("%c",&pausa);
pos=cerPer(nome, cognome);
if(pos==-1){
printf("Contatto nn presente");
scanf("%c",&pausa);
return;
}
visPer();
scanf("%c",&pausa);
}
long cerPer(char *nm,char *cg){
int n;
long pos= 0L;
fp = fopen("Contatti.dat", "r");
for(;;){
n = fread(&Rub, sizeof(struct per), 1, fp);
if(n==0){
fclose(fp);
pos=-1;
return(pos);
}
else
if(strcmp(nm,Rub.nome)==0)
if(strcmp(cg,Rub.cognome)){
pos=ftell(fp);
fclose(fp);
return(pos-sizeof(struct per));
}
}
}
void visper (void){
printf("Nome: %s\n",Rub.nome);
printf("Cognome: %s\n",Rub.cognome);
printf("Numero :%d\n",Rub.numero);
printf("\n\n\n\n\n\n\n\n");
}
void visRub(void){
int n;
char pausa;
fp = fopen("Contatti.dat","r");
do{
n = fread(&Rub, sizeof(struct per), 1, fp);
if(n==0){
fclose(fp);
else
visPer();
scanf("%c",&pausa);
}
}
while (n!=0);
}