Bueno quiero compartir con ustedes esto que obtuve después de andar investigando por varias páginas espero les pueda ser de ayuda a mas de uno tanto en uso como para aprender del código.
/*Descripción: Agenda electrónica hecha en C que permite el registro de Clientes con los siguientes datos: Nombre, Teléfono, e-mail. El programa también permite listar los clientes tanto en orden alfabético así como por orden de registro, también es posible la búsqueda de clientes por nombre o por numero de registro. Al final del programa todos los datos del registro de clientes son guardados en el disco
OBS:Para compiladores GCC*/
//Declaración de las bibliotecas
# include <stdio_ext.h>
# include<stdlib.h>
// Declaración de variables GLOBALES
int cont,n=0,o,resp=0,k=0;
int pos[200];
char email[200][50],nombre[200][50],aux[1][50],tel[200][50],vet[255];
void mostrarcliente(){ // Esta función muestra los clientes en orden de inscripción
int op,i,j;
char ch;
if (n!=0){ //Verfica si existe el registro
printf("Usted tiene %d cliente(s) registrados hasta ahorann",n);
printf("Usted desea visualizar todos?(1-para si)|(otra tecla para no): ");
scanf("%d",&op);
system("clear");
if (op==1){
j=0;
while(j<n){
retorno:
for (i=0;i<n;i++){
if (j==pos[i]){
printf("Número de inscripción:%.4dn",pos[i]+1);
printf("Nombre:%s",nombre[i]);
printf("Telefono:%s",tel[i]);
printf("E-mail:%snn",email[i]);
j++;
goto retorno;
}
}
}
}
}else{
printf("No existen clientes registrados");
}
printf("nntttPresione ENTER para volver al menú principal");
__fpurge(stdin);
ch=getchar();
main();
}
void orden(){ // Ordenar por selección (en orden Alfabético)
int j,i,indi,indj;
char ch;
if (n!=0){
for (i=n-k;i<n;i++){
for (j=0;j<n;j++){ //Ordena los nombres
if (nombre[i][0]<nombre[j][0]){
//Colocando en orden los nombres
strcpy(aux[0],nombre[i]);
strcpy(nombre[i],nombre[j]);
strcpy(nombre[j],aux[0]);
//Colocando en orden los números de teléfonos
strcpy(aux[0],tel[i]);
strcpy(tel[i],tel[j]);
strcpy(tel[j],aux[0]);
//Colocando en orden el e-mail
strcpy(aux[0],email[i]);
strcpy(email[i],email[j]);
strcpy(email[j],aux[0]);
//Colocando en orden el número de candidato
k=pos[i];
pos[i]=pos[j];
pos[j]=k;
}else if((nombre[i][0]==nombre[j][0]) && (i!=j)){ //Verifica si la primera letra del nombre, si son iguales
indi=0;
indj=0;
while(nombre[i][indi]==nombre[j][indj]){
indi++;
indj++;
again:
if (nombre[i][indi]<nombre[j][indj]/* && nombre[i][indi]!='_' && nombre[j][indj]!='_' */) {
//Colocando en orden los nombres
strcpy(aux[0],nombre[i]);
strcpy(nombre[i],nombre[j]);
strcpy(nombre[j],aux[0]);
//Colocando en orden el número de teléfono
strcpy(aux[0],tel[i]);
strcpy(tel[i],tel[j]);
strcpy(tel[j],aux[0]);
//Colocando en orden el e-mail
strcpy(aux[0],email[i]);
strcpy(email[i],email[j]);
strcpy(email[j],aux[0]);
//Colocando en orden el número de candidato
k=pos[i];
pos[i]=pos[j];
pos[j]=k;
}if (nombre[i][indi]=='_' || nombre[j][indj]=='_'){
if (nombre[i][indi]=='_'){
indi++;
}if (nombre[j][indj]=='_'){
indj++;
}
goto again;
}
}
}
}
}
system("clear");
printf("Número de registrottNombrenn");
for (i=0;i<n;i++){
printf("t%.4dttt%sn",pos[i]+1,nombre[i]);
}//fin del for
k=resp*(-1);
}else{
printf("No existen clientes registrados: nn");
}
printf("nnttttPresione ENTER para volver al menu incial");
__fpurge(stdin);
ch=getchar();
main();
}
void registro (){
int j,i,conv;
char ch;
system("clear");
printf("n Escriba la cantidad de clientes que desea registrar: ");
scanf("%d",&resp);
system("clear");
for (j=n;j<resp+n;j++){
repetir:
system("clear");
printf("----------------n");
printf("| Cliente %.4d |n",j+1);
printf("----------------nn");
printf("nEscriba el nombre(sin caracteres especiales): ");
__fpurge(stdin);// limpa el bufer usado por el teclado (gnu/linux)
fgets(nombre[j],40,stdin);
for (i=strlen(nombre[j])-2;i>=0;i--){
if ((nombre[j][i]<'0') || (nombre[j][i]>'z')){
printf("No es permitido el uso de caracteres especiales ni espacios en blanco, favor presione ");
printf("ENTER para insertar otro nombre char %c e i %dn",nombre[j][i],i);
__fpurge(stdin);
ch=getchar();
goto repetir;
}
}
printf("Introduzca el número de teléfono: ");
fgets(tel[j],20,stdin);
printf("Introduzca el e-mail: ");
__fpurge(stdin);
fgets(email[j],45,stdin);
pos[j]=j;
}
printf("nn");
n=n+resp;
k=resp;
for (i=n-k;i<n;i++){
for (j=strlen(nombre[i])-2;j>=0;j--)
nombre[i][j]=toupper(nombre[i][j]);
}
main();
}
void clientes(){ // Busqueda secuencial
int j,op,num,cont=0,ch;
char cliente [255];
if (n!=0){
vuelve:
system("clear");
printf("Elija una de las opciones:n");
printf("1-Busqueda por nombren");
printf("2-Busqueda por numero de registron");
printf("0-Volver al menú principaln");
printf("tElija aquí:");
scanf("%d",&op);
if ((op<0) || (op>2)){
printf("Operación inválida, presione ENTER para continuar con el programan");
__fpurge(stdin);
ch=getchar();
goto vuelve;
}
if (op==1){
printf("nIntroduzca el nombre para la búsqueda: ");
__fpurge(stdin); //limpia el buffer del teclado
fgets(cliente,40,stdin);
for (j=strlen(cliente)-2;j>=0;j--)
cliente[j]=toupper(cliente[j]);
system("clear");
for (j=0;j<n;j++){
if (0==strcmp(cliente,nombre[j])) { //Verifica si existe el nombre en el registro
if (cont==0)
printf("*********************************n");
printf("Número de registro:%.4dnn",pos[j]+1);
printf("Nombre:%sn",nombre[j]);
printf("Telefono:%sn",tel[j]);
printf("E-mail:%sn",email[j]);
cont++;
printf("*********************************n");
if (j==n-1){
printf("nntFueron(Fue) encontrado(s) %d cliente(s)n",cont);
}
}else if((j==n-1) && (cont==0)){
printf("Cliente inexistente.Favor presione ENTER para continuar con el programan");
}
}
}else if(op==2){
printf("Introduzca el número para la busqueda:");
scanf("%d",&num);
if (num>n || num<=0){
printf("Cliente inexistente.Favor presione ENTER para continuar con el programan");
__fpurge(stdin);
ch=getchar();
goto vuelve;
}
system("clear");
for (j=0;j<n;j++){
if (pos[j]+1==num){
printf("Número de registro:%.4dnn",pos[j]+1);
printf("Nombre:%sn",nombre[j]);
printf("Telefono:%sn",tel[j]);
printf("E-mail:%sn",email[j]);
break;
}
}//fin del for
}else{
main();
}
}else{
printf("nnNo existen clientes registrados, presione ENTER para volver al Menú Principaln");
}
printf("nnttPresione ENTER para volver al Menú Principaln");
__fpurge(stdin);
ch=getchar();
main();
} //Fin de la función Clientes
void grabarendisco (){ // Función de grabar el programa en el DISCO y salir
int i;
FILE *archivo;
arquivo = fopen ("archivo.txt", "w");
for (i = 0; i <n; i++){
fprintf (archivo, "%s %s %snn", nombre[i], tel[i], email[i]);
}
fclose (archivo);
printf("n Archivo Grabado com EXITO");
printf("nn Gracias por utilizar el programa! :-)nnnn ");
exit(0);
}
//FIN DE LA FUNCIÓN CLIENTES
int main(){
char ch;
do{
system("clear");
printf("nnn ===========================n");
printf(" = AGENDA ELECTRONICA =");
printf("n ===========================n");
printf ("n MENU n");
printf(" CONTROL DE CLIENTESn");
printf ("nt1-Registro");
printf ("nt2-Buscar clientes");
printf ("nt3-Listar en orden alfabetico");
printf ("nt4-Mostrar número de clientes");
printf ("nt5-Salir & Grabar en Disco");
__fpurge(stdin);
printf ("nn Escoja una opción: ");
scanf ("%d", & cont);
switch (cont){
case 1:
registro();
break;
case 2:
clientes();
break;
case 3:
orden();
break;
case 4:
mostrarcliente();
break;
case 5:
grabarendisco();
break;
default:
printf("ntOpción invalidan");
printf("Presione ENTER para volver al MENU: ");
__fpurge(stdin);
ch=getchar ();
main();
} //Fin del switch
}while((cont<=1)||(cont>=6));
}