Red de conocimientos turísticos - Conocimientos sobre calendario chino - ¡Urgente! Cómo programar una interfaz hombre-computadora en lenguaje C

¡Urgente! Cómo programar una interfaz hombre-computadora en lenguaje C

Puede consultar este programa, aprobado bajo tc2.0, derivado de la "Compilación de casos de diseño de cursos de lenguaje C";

/******Archivo de encabezado (.h )**********/

#include "stdio.h" /*Función de E/S*/

#include "stdlib.h" / * Funciones de biblioteca estándar*/

#include "string.h"/*Funciones de cadena*/

#include "ctype.h" /*Funciones de operación de caracteres*/

#define M 50 /*Definir constante para representar el número de registros*/

typedef struct /*Definir estructura de datos*/

{

char nombre[20]; /*nombre*/

char unidades[30] /*unidad*/

char tele[10] /*número de teléfono*/

}DIRECCIÓN;

/******El siguiente es el prototipo de función************/

int enter (DIRECCIÓN t[]); /* Registros de entrada*/

void list(DIRECCIÓN t[],int n); /*Mostrar registros*/

void search(DIRECCIÓN t); [],int n); /* Buscar y mostrar registros por nombre*/

int delete(ADDRESS t[],int n /*Eliminar registros*/

int); add(DIRECCIÓN t[],int n) /*Insertar registro*/

void save(DIRECCIÓN t[],int n /*Guardar registro como archivo*/

int load(ADDRESS t[]); /*Leer registros del archivo*/

void display(ADDRESS t[]); /*Buscar y mostrar registros por número de serie*/

void sort(ADDRESS t[],int n); /*Ordenar por nombre*/

void qseek(ADDRESS t[],int n); /*Buscar registros rápidamente*/

void copy(); /* Copia de archivo*/

void print(ADDRESS temp); /*Mostrar un solo registro*/

int find(ADDRESS t); [],int n,char *s); /* Función de búsqueda*/

int menu_select() /*Función del menú principal*/

/****** La función principal comienza*******/

main()

{

int i;

DIRECCIÓN adr[M ]; /*definir matriz de estructura*/

int length; /*Guardar longitud del registro*/

clrscr() /*Borrar pantalla*/

for(;;)/*Bucle infinito*/

{

switch(menu_select()) /*Llama a la función del menú principal y devuelve un número entero como condición para la declaración de cambio */

{

caso 0:length=enter(adr);break;/*Registros de entrada*/

caso 1:list(adr,length );break; /*Mostrar todos los registros*/

case 2:search(adr,length);break /*Buscar registros*/

caso 3:longitud=eliminar(adr,longitud);break; /*Eliminar registro*/

case 4:length=add(adr,length); >

caso 5:save(adr,length);break; /*Guardar archivo*/

case 6:length=load(adr); >

case 7:display(adr);break; /*Mostrar registros por número de serie*/

case 8:sort(adr,length);break /*Ordenar por nombre*/< / p>

case 9:qseek(adr,length);break; /*Buscar registros rápidamente*/

case 10:copy();break /*Copiar archivos*/

case 11:exit(0); /*Si el valor de retorno es 11, el programa finaliza*/

}

}

}

/*Función de menú, el valor de retorno de la función es un número entero que representa el elemento de menú seleccionado*/

menu_select()

{

char s [80];

int c;

gotoxy(1,25);/*Establezca el cursor en la línea 25, columna 1*/

printf("presione cualquier tecla para ingresar al menú...\n");/*Solicitud de presionar cualquier tecla para continuar*/

getch() /*Leer cualquier carácter*/

clrscr(); /*Borrar pantalla*/

gotoxy(1,1);

printf("************ *********MENÚ************************\n\n");

printf(" 0 Ingrese el registro\n");

printf(" 1. Listar el archivo\n");

printf(" 2. Buscar registro por nombre\n");

p>

printf(" 3. Eliminar un registro\n");

printf(" 4. agregar registro \n");

printf(" 5. Guarde el archivo\n");

printf(" 6. Cargue el archivo\n");

printf(" 7. mostrar registro en el pedido\n") ;

p>

printf(" 8. ordenar para crear un nuevo archivo\n");

printf(" 9. Registro de búsqueda rápida\n");

printf(" 10. copiar el archivo a un archivo nuevo\n");

printf(" 11. Salir\n");

printf("**** ******** *************************************\n");

do{

printf("\n Introduzca su elección(0~11):" /*

Solicitar opciones de entrada*/

scanf("%s",s); /*Ingresar selecciones*/

c=atoi(s); Convertir a entero */

} while(c<0||c>11); /*La selección no está entre 0 y 11.*/

return c /* Devuelve la selección, el programa principal llama a la función correspondiente según el número*/

}

/***Registro de entrada, el parámetro formal es una matriz de estructura y la función se devuelve el valor El tipo es un número entero que representa la longitud del registro*/

int enter(ADDRESS t[])

{

int i,n;

char *s;

clrscr(); /*Borrar pantalla*/

printf("\npor favor ingrese num \n"); */

scanf("%d",&n); /*Ingrese el número de registro*/

printf("por favor ingrese el registro \n"); */

printf("nombre unidad teléfono\n");

printf("-------------------- ------ -----------------------\n");

for(i=0;i

{

scanf("%s%s%s",t[i].nombre,t[i].unidades,t[i].tele) ; /*Ingresar registros*/

printf("--------------------------------- --------------- ------\n");

}

return n; /*Devuelve el número de registros*/

}

/*Mostrar registros, los parámetros son matriz de registros y número de registro*/

lista vacía(DIRECCIÓN t[],int n )

{

int i;

clrscr();

printf("\n\n****** *******************DIRECCIÓN** ****************\n");

printf ("nombre teléfono de la unidad\n");

printf("- ----------------------------- ---------------------\n" );

for(i=0;i

printf("%-20s%-30s%-10s\n",t[i].nombre ,t[i].unidades,t[i].tele);

if(( i+1)%10==0) /*Juzga si la salida alcanza los 10 registros*/

{

printf("Presiona cualquier tecla para continuar...\n") ; /*Mensaje rápido*/

getch(); /*Presione cualquier tecla para continuar */

}

printf("***** *******************fin***** ****************

\n");

}

/*Buscar registros*/

búsqueda vacía(DIRECCIÓN t[],int n)

{

char s[20]; /*Guardar la cadena de nombre a encontrar*/

int i;*Guardar el número de secuencia del nodo encontrado*/

clrscr(); /*Borrar pantalla*/

printf("busque nombre\n");

scanf("%s",s); /* Ingrese el nombre a encontrar*/

i=find(t,n,s); /*Llame a la función de búsqueda y obtenga un número entero*/

if(i); >n-1) /*Si el valor entero i es mayor que n-1, significa que no se encontró*/

printf("not found\n");

else

print( t[i]); /*Buscar, llame a la función de visualización para mostrar el registro*/

}

/*Mostrar el registro especificado*/

void print (ADDRESS temp)

{

clrscr();

printf("\n\ n****************** ******************************* \n");

printf("nombre de la unidad teléfono\ n");

printf("----------------- ---------------------- ------------\n");

printf("%-20s%-30s%-10s\n",temp.nombre,temp.units,temp. tele);

printf("********* ***************fin****************** **********\n");

}

/*Función de búsqueda, los parámetros son matriz de registros, número de registros y nombres */

int find(ADDRESS t[],int n,char *s)

{

int i;

for(i=0; i

{

if(strcmp(s,t[i].name)== 0) /*Si el nombre en el registro y el nombre a comparar son igual*/

return i; /*Si son iguales, se devolverá el número de subíndice del registro y el programa finalizará antes de tiempo*/

}

return i; /*Devuelve el valor i*/

}

/*Eliminar función, los parámetros son la matriz de registros y el número de registros*/

int delete(ADDRESS t[],int n)

{

char s[20] /*El nombre del registro que se eliminará*/

int ch=0;

int i,j;

printf("por favor elimine el nombre\n"); /*Mensaje rápido*/

scanf("%s",s);/*Ingrese el nombre*/

i=find(t,n,s); /*Llamar a la función de búsqueda*/

si(i>n-1) /*si i>

;n-1 excede la longitud de la matriz*/

printf("no encontrado no eliminado\n" /*Muestra que el registro a eliminar no se encuentra*/

else

{

print(t[i]); /*Llame a la función de salida para mostrar la información del registro*/

printf("Son seguro que lo eliminas( 1/0)\n"); /*Confirma si deseas eliminar*/

scanf("%d",&ch); /*Ingresa un número entero 0 o 1*/

if(ch==1) /*Si el número entero confirmado para ser eliminado es 1*/

{

for(j=i+1;j

{

strcpy(t[j-1].name,t[j ].name); /*Mover el siguiente registro Copiar el nombre del siguiente registro al anterior*/

strcpy(t[j-1].units,t[j].units); /*Copiar la unidad del siguiente registro al anterior*/

strcpy(t[j-1].tele,t[j].tele /*Copiar el número de teléfono del siguiente); grabar al anterior*/

}

n-- /*Disminuir el número de registros en 1*/

}

}

return n; /*Devuelve el número de registros*/

}

/*Inserta la función de registro, los parámetros son la matriz de estructura y el número de registros*/

int add(ADDRESS t[],int n)/*Insertar función, los parámetros son la matriz de estructura y el número de registros*/

{

DIRECCIÓN temp; /*Información del registro recién insertado*/

int i,j

char s[20]; insertar antes*/

printf("por favor ingrese el registro\n");

printf( "****************** ******************************\ n");

printf("nombre de la unidad teléfono\n ");

printf("----------------- ------------------- -------------\n");

scanf("%s% s%s",temp.name,temp.units,temp.tele); / *Ingrese la información de inserción*/

printf("--------------- ------------------- ---------------\n");

printf("ingrese el nombre de ubicación \n");

scanf("% s",s); /*Ingrese el nombre de la ubicación de inserción*/

i=find(t,n,s) ​​; /*Llame a find para determinar la posición de inserción*/

for(j=n-1;j>=i;j--) /*Retroceder una línea comenzando desde el último nodo*/

{

strcpy( t[j+1].name,t[j].name); /*Copiar el nombre del registro actual al siguiente*/

>

strcpy(t[j+1].units,t[j].units); /*Copiar la unidad del registro actual al siguiente*/

strcpy(t[j]. +1] .tele,t[j].tele); /*Copiar el número de teléfono actualmente grabado al siguiente*/

}

strcpy(t[i]. name,temp.name ); /*Copie el nombre del registro recién insertado en la posición i-ésima*/

strcpy(t[i].units,temp.units); unidad del registro recién insertado en la posición i-ésima posición i*/

strcpy(t[i].tele,temp.tele /*Copie el número de teléfono grabado recién insertado en el i-); ª posición*/

n++ ; /*Aumentar el número de registros en 1*/

return n /*Devolver el número de registros*/

}

/*Guardar la función, los parámetros son estructuras Número de arrays y registros*/

void save(ADDRESS t[],int n)

{

int i;

ARCHIVO *fp; /*Puntero al archivo*/

if((fp=fopen("record.txt"," wb"))==NULL) /*Abra el archivo y determine si la apertura es normal */

{

printf("no se puede abrir el archivo\n");/ *No abierto*/

exit(1); /*Salir */

}

printf("\nGuardando archivo\n"); Información del mensaje de salida*/

fprintf(fp,"%d" ,n /*Escribe el número de registros en el archivo*/

fprintf(fp,"\r); \n"); /*Escribe el símbolo de nueva línea en el archivo*/

for(i=0;i

{

fprintf(fp,"%-20s%-30s%-10s",t[i].name, t[i].units,t[i].tele);/*Escribir registro en formato*/

fprintf(fp,"\r\n"); /*Escribir símbolo de nueva línea en el archivo */

}

fclose(fp);/*Cerrar el archivo* /

printf("****guardado exitoso***\n" ); /*Mostrar guardado exitoso*/

}

/*Leer función, el parámetro es matriz de estructura*/

int load(ADDRESS t[ ])

{

int i,n;

ARCHIVO *fp; /*Puntero al archivo*/

if( (fp=fopen("record.txt","rb"))==NULL)/*Abrir archivo*/

{

printf("no se puede abrir el archivo\n "); /*No se puede abrir*/

exit(1);

}

fscanf(fp,"%d", &n); /*Número de registros leídos*/

for(i=0;i

fscanf(fp,"%20s%30s%10s", t[i].name,t[i].units,t[i].tele /*Leer registros según formato*); /

<

p> fclose(fp); /*Cerrar el archivo*/

printf("¡¡¡Has leído correctamente los datos del archivo!!!\n");

return n; /*Devuelve el número de registros*/

}

/*Mostrar la función de registro por número de serie*/

void display( DIRECCIÓN t[] )

{

int id,n;

ARCHIVO *fp /*Puntero al archivo*/

if(( fp=fopen("record.txt","rb"))==NULL) /*Abrir archivo*/

{

printf("no se puede abrir el archivo \n" ); /*No se puede abrir el archivo*/

exit(1); /*Salir*/

}

printf("Ingrese el número de pedido ... \n"); /*Mostrar información*/

scanf("%d",&id); /*Ingrese el número de serie*/

fscanf(fp, "%d", &n); /*Leer el número de registros del archivo*/

if(id>=0&&id

{

fseek(fp,(id-1)*sizeof(ADDRESS),1 /*Mover el puntero del archivo a la posición del registro*/

print(t[id]); / *Llame a la función de salida para mostrar el registro*/

printf("\r\n");

}

else

printf ("¡¡¡no hay %d registro de número!!!\n ",id /*Mostrar información si el número de secuencia no es razonable*/

fclose); (fp); /*Cerrar el archivo*/

}

/*Función de clasificación, los parámetros son la matriz de estructura y el número de registros*/

void sort(DIRECCIÓN t[],int n)

{

int i,j,flag;

DIRECCIÓN temp /*Se utilizan variables temporales; para intercambiar datos*/

for(i=0;i< n;i++)

{

flag=0 /*Establece la bandera para determinar; si se ha producido un intercambio*/

for(j=0;j

if((strcmp(t[j].name,t[j +1].name))>0) /*Comparar tamaños*/

{

flag=1;

strcpy(temp.name,t[ j].nombre); /*Intercambiar registros*/

strcpy(temp. unit,t[j].units);

strcpy(temp.tele,t[j] .tele);

strcpy(t[j].nombre,t[j +1].nombre);

strcpy(t[j].units,t[j+ 1].unidades);

strcpy(t[j].tele,t [j+1].tele);

strcpy(t[j+1].nombre, temp.nombre);<

/p>

strcpy(t[j+1].units,temp.units);

strcpy(t[j+1].tele,temp.tele);

}

if(flag==0)break; /*Si el flag es 0, significa que no se ha producido el final del ciclo de intercambio*/

}

printf("¡¡ordenación exitosa!!!\n"); /*Mostrar clasificación exitosa*/

}

/*Búsqueda rápida, los parámetros son los matriz de estructura y el número de registros*/

void qseek(ADDRESS t[],int n)

{

char s[20];

int l,r ,m;

printf("\n¡Ordene antes de qseek!\n"); /*Pregunte para confirmar si los registros se han ordenado antes de buscar*/

printf("por favor ingrese el nombre para qseek\n"); /*Solicitar entrada*/

scanf("%s",s /*Ingrese el nombre a buscar); */

l=0 ;r=n-1; /*Establece los valores iniciales de los límites izquierdo y derecho*/

while(l<=r) / *Cuando el límite izquierdo <= el límite derecho*/

{

m=(l+r)/2 /*Calcular la posición media*/

<; p> if(strcmp(t[m].name,s)== 0) /*Compare con el campo de nombre del nodo intermedio para determinar si son iguales*/

{

print(t[m]); /*Si son iguales, llame a la función de impresión para mostrar la información del Registro*/

return /*Return*/

}

if(strcmp(t[m].name,s)<0) / *Si el nodo del medio es pequeño*/

l=m+1 /*Modificar el límite izquierdo*/

else

r=m-1; / *De lo contrario, si el nodo del medio es grande, modifique el límite derecho*/

}

if(l>r) /*Si el límite izquierdo es mayor que el límite derecho*/

printf("not found\n"); /

}

/*Copiar archivo*/

copia nula( )

{

archivo de salida char [20]; /*nombre del archivo de destino*/

int i,n;

DIRECCIÓN temp [M] /*Definir variables temporales*/

ARCHIVO *sfp,*tfp; /*Definir punteros a archivos*/

clrscr();/*Borrar pantalla* /

if((sfp=fopen("record.txt) ","rb"))==NULL) /*Abrir el archivo de registro*/

{

printf("no se puede abrir el archivo\n"); /*Mostrar el información del archivo que no se puede abrir*/

exit(1); /*Salir*/

}

printf("Ingrese el nombre del archivo de salida, por ejemplo c :\\f1\\te.txt:\n"); /*Mensaje rápido*/

scanf("%s", outfile); /*Ingrese el texto de destino

Nombre de archivo*/

if((tfp=fopen(outfile,"wb"))==NULL) /*Abrir el archivo de destino*/

{

printf("no se puede abrir el archivo\n"); /*Mostrar la información del archivo que no se puede abrir*/

exit(1) /*Salir*/

}

fscanf(sfp,"%d",&n); /*Número de registros de archivos leídos*/

fprintf(tfp,"%d",n);/* Número de archivos de destino escritos */

fprintf(tfp,"\r\n"); /*Escribir carácter de nueva línea*/

for(i=0;i

{

fscanf(sfp,"%20s%30s%10s\n",temp[i].nombre,temp[i].units,

temp [i].tele); /*Leer registros*/

fprintf(tfp,"%-20s%-30s%-10s\n",temp[i].name,

temp[i].units,temp[i].tele); /*Escribir registro*/

fprintf(tfp,"\r\n"); carácter */

}

fclose(sfp); /*Cerrar el archivo de origen*/

fclose(tfp); /

printf("¡¡¡Has copiado el archivo correctamente!!!\n"); /*Mostrar copia exitosa*/

}