Diseño de cursos, código fuente completo del sistema de gestión salarial

#include lt;stdio.hgt;

#include lt;string.hgt;

#include lt;ctype.hgt;

#include lt;stdlib.hgt;

#define MONTH_NUM 5 /* El mes más*/

estructura trabajador

{

int number; /* El número de trabajo de cada trabajador*/

char name[15] /* El nombre de cada trabajador*/

int salario[MONTH_NUM]; /* Salario M-mes de cada trabajador*/

int suma; /* Salario total de cada trabajador*/

promedio flotante /* Salario promedio de cada trabajador* /

estructura trabajador *siguiente;

};

typedef estructura trabajador STU;

char Menú(void);

int Ascendente(int a, int b);

int Descendente(int a, int b);

void IntSwap(int *pt1, int *pt2

void CharSwap(char *pt1, char *pt2);

void FloatSwap(float *pt1, float *pt2);

STU *AppendNode(STU *head , const int m);

STU *DeleteNode(STU *head, int nodeNum);

STU *ModifyNode(STU *head, int nodeNum, const int m

STU *SearchNode(STU *head, int nodeNum);

STU *Appendsalary(STU *head, const int m);

void Totalsalary(STU *head , const int m);

void Printsalary(STU *head, const int m);

STU *Deletesalary(STU *head, const int m);

void Modifysalary(STU *head, const int m);

void Sortsalary(STU *head, const int m, int (*compare)(int a, int b));

p>

void Searchsalary(STU *head, const int m);

void DeleteMemory(STU *head);

main()

{

char ch;

int m;

>

STU *head = NULL;

printf("Ingrese el mes a registrar (mlt; 10): ");

scanf("d", amp; m );

mientras (1)

{

ch = Menú()

cambiar (ch)

;

{

case'1': head = Appendsalary(head, m);

Totalsalary(head, m

break; p >

case'2': Printsalary(head, m);

break;

case'3': head = Deletesalary(head, m); >

printf("\nDespués de eliminado\n");

Printsalary(head, m

break

case'4'; Modificarsalario(cabeza, m);

Salario total(cabeza, m);

printf("\nDespués de modificado\n"); m );

descanso;

caso'5': Searchsalary(head, m

descanso

caso'6); ' :Ordenarsalario(cabeza, m, Descendente);

printf("\nordenado en orden descendente por suma\n"); >

break;

case'7': Sortsalary(head, m, Ascendente);

printf("\nordenado en orden ascendente por suma\n"); /p> p>

Printsalary(head, m);

break;

case'0': exit(0); head);

printf("¡Fin del programa!");

break;

default: printf("¡Error de entrada!"); >

break;

}

}

}

char Menú(void)

{

char ch;

printf("\nAdministrar el trabajo de los trabajadores

Información\n");

printf(" 1.Agregar registros\n");

printf(" 2.Enumerar registros\n");

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

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

printf(" 5. Buscar registro\n" )

printf(" 6. Ordenar en orden descendente\n");

printf(" 7. Ordenar en orden ascendente\n"); printf(" 0.Exit\n");

printf("Ingrese su elección:");

scanf(" c", amp; ch /* before); c Agregue un espacio y lea el carácter de retorno de carro almacenado en el búfer en */

return ch;

}

STU *Appendsalary(STU *head, const int m)

{

int i = 0

char c

hacer{

head = AppendNode(head, m); /*Agregar un nodo al final de la lista vinculada*/

printf("¿Quieres agregar un nuevo registro (Y/N)?");

scanf(" c", amp; c /*Hay un espacio antes de c*/

i;

} while (c== 'Y' | c=='y');

printf("¡Se han añadido d nuevos nodos!\n", i);

return head;

}

STU *Deletesalary(STU *head, const int m)

{

int i = 0, nodeNum;

char c;

do{

printf("Ingrese el número de registro que desea eliminar: "); , amp; nodeNum) ;

head = DeleteNode(head, nodeNum); /*Eliminar la información del trabajador con el número de trabajador nodeNum*/

Printsalary(head, m); *Mostrar los trabajadores en la lista vinculada actual Información sobre cada nodo*/

printf("¿Quieres eliminar un nodo(S/N)?");

scanf( " c", amp; c); / *Hay un espacio antes de c*/

i;

} while (c=='Y' || c==' y');

printf("¡Se han eliminado d nodos!\n", i

return head

}

<); p>void Modificarsalario(STU *head, const int m)

{

int i = 0, nodeNum

char

hacer{

>

printf("Ingrese el número de registro que desea modificar: ");

scanf("d", amp; nodeNum

head = ModifyNode(head); , nodeNum, m); /*Modificar el nodo con el número de trabajador nodeNum*/

printf("¿Quieres modificar un nodo(Y/N)?");

scanf ("c",amp;c); /*Hay un espacio antes de c*/

i;

} while (c=='Y' || c ==' y');

printf("¡los nodos d han sido modificados!\n", i);

}

void Totalsalary(STU * cabeza, const int m)

{

STU *p = cabeza

int i

mientras (p != NULL; ) /* Si no es el final de la tabla, entonces bucle */

{

p-gt; sum =

for (i; =0; ilt; m; i )

{

p-gt; suma = p-gt; >

p-gt; promedio = (float)p-gt; sum / m;

p = p-gt; /*Deje que p apunte al siguiente nodo*/

}

}

void Sortsalary(STU *head, const int m, int (*compare)(int a, int b))

{

STU *pt;

int bandera = 0, i;

hacer{

bandera = 0; >

pt = head;

/*Si el salario total del último nodo es mayor que el salario total del nodo anterior, intercambie los datos en los dos nodos

Tenga en cuenta que solo se intercambian los datos del nodo y el orden de los nodos permanece sin cambios, es decir, el contenido del siguiente puntero del nodo no se intercambia*/

while (pt-gt; next!= NULL).

{

if ((*comparar) (pt-gt; next-gt; suma, pt-gt; suma))

{

IntSwap(amp; pt-gt; número, amp; pt-gt; siguiente -gt; número

CharSwap(pt-gt; nombre, pt-gt; next-gt; nombre);

for (i=0; ilt; m; i )

{

IntSwap(amp;pt-gt;salario[i], amp;pt-gt;next-gt;salario[i]);

<

p> }

IntSwap(amp; pt-gt; suma, amp; pt-gt; next-gt; suma

FloatSwap(amp; pt-gt; promedio, amp;pt-gt;next-gt;average);

bandera = 1;

}

pt = pt-gt;next;

}

} while(bandera);

}

/*Intercambiar dos enteros*/

void IntSwap( int *pt1, int *pt2)

{

int temp

temp = *pt1

*pt1 = *pt2; ;

*pt2 = temp;

}

/*Intercambiar dos números reales*/

void FloatSwap (float *pt1, flotante *pt2)

{

temperatura flotante

temp = *pt1

*pt1 = * pt2;

*pt2 = temp;

}

/*Intercambiar dos cadenas*/

void CharSwap(char * pt1, char *pt2)

{

char temp[15];

strcpy(temp, pt1);

strcpy( pt1, pt2);

strcpy(pt2, temp);

}

/* Determine si los datos están ordenados en orden ascendente, alt; si b es verdadero, entonces Ordene en orden ascendente; orden*/

int Ascendente(int a, int b)

{

return a lt;

}

p>

/* Determine si los datos se ordenan en orden descendente, agt; si b es verdadero, entonces se ordenan en orden descendente*/

int Descending(int a, int b)

{

return a gt; b;

}

void Searchsalary(STU *head, const int m)

{

int número, i;

STU *findNode;

printf("Ingrese el número de registro que desea encontrar: ");

scanf("d", & número);

findNode = SearchNode(head, number);

if (findNode == NULL)

{

printf("¡No encontrado!\n");

}

else

{

printf ("\nNo.3d8s", findNode-gt; número, findNode-gt; nombre

for (i=0; ilt;

m; i )

{

printf("7d", findNode-gt; salario[i]); printf("9d9.2f\n", findNode-gt; suma, findNode-gt; promedio

}

}

void Printsalary(STU); *cabeza, const int m)

{

STU *p = cabeza;

char str[100] = {'\0'}, temp[ 3];

int i, j = 1;

strcat(str, "Nombre del número "); m; i )

{

strcat(str, "salario");

itoa(i, temp, 10); > strcat(str, temp);

strcat(str, " ");

}

strcat(str, " suma promedio" p>

printf("s", str); /*Imprime el encabezado de la tabla*/

while (p != NULL) /*Si no es el final de la tabla, imprimir en un bucle*/

{

printf("\nNo.3d15s", p-gt; número, p-gt; nombre

); for (i=0; ilt; m ; i )

{

printf("7d", p-gt; salario[i]); }

printf ("9d9.2f", p-gt; suma, p-gt; promedio);

p = p-gt /*Deje que p apunte a el siguiente nodo*/

j;

}

printf("\n"); p>STU *AppendNode(STU *cabeza, const int m)

{

STU *p = NULL

STU *pr = cabeza

int j;

p>

p = (STU *)malloc(sizeof(STU)); /*Aplicar memoria para el nodo recién agregado*/

if (p == NULL) /*Si la aplicación de memoria falla, imprima un mensaje de error y salga del programa*/

{

printf("No hay suficiente memoria para asignar ");

exit(0);

p>

}

if (head == NULL) /*Si la lista enlazada original es vacío, establezca el nuevo nodo como el primer nodo*/

{

head = p;

}

else /*Si la lista enlazada original no está vacía, agregue el nuevo nodo al final de la lista*/

{

/*Si no ha alcanzado el final de la lista, continúe moviendo el puntero pr , hasta que pr apunte al final de la tabla*/

while (pr-gt; next != NULL)

{

pr = pr-gt; next;

}

pr-gt; next = p; */

}

pr = p; /*Deje que pr apunte al nuevo nodo*/

printf("Ingrese datos del nodo...") ;

printf("\nNúmero de entrada:") ;

scanf("d", amp;p-gt;número);

printf(" Nombre de entrada: ");

scanf("s ", p-gt; nombre);

for (j=0; jlt; m; j)

{

printf("Entrada salariod:", j 1

scanf("d", p-gt; salario j

); }

pr-gt; next = NULL; / *Establece el nuevo nodo al final de la lista*/

return head /*Devuelve el puntero del nodo principal del vinculado. lista después de agregar el nodo*/

}

STU *ModifyNode(STU *head, int nodeNum, const int m)

{

int j;

STU *newNode;

newNode = SearchNode(head, nodeNum);

if (newNode == NULL)

{

printf("¡No encontrado!\n");

}

else

{

printf("Ingrese los datos del nuevo nodo:\n");

printf("Ingrese el nombre:

scanf("s", newNode-gt; nombre);

for (j=0; jlt; m; j)

{

printf("Entrada salariod: ", j 1); /p>

scanf("d", newNode-gt; salario j

}

}

return head;

}

STU *DeleteNode(STU *head, int nodeNum)

{

STU *p = head, *pr = head;

if (head == NULL) /*La lista enlazada es

Vacío, sin nodo, el nodo no se puede eliminar*/

{

printf("¡No hay tabla vinculada!\n");

return(head);

}

/*Si no se encuentra el nodo nodeNum y no se llega al final de la tabla, continúe buscando*/

while (nodeNum != p-gt; número amp ;amp; p-gt; siguiente != NULL)

{

pr = p

p = p-gt; next;

}

if (nodeNum == p-gt; number) /*Si se encuentra el nodo nodeNum, elimine el nodo*/

{

if (p == head) /*Si el nodo a eliminar es el primer nodo, deje que head apunte al segundo nodo*/

{

head = p-gt; next;

}

else /*Si el nodo que se va a eliminar no es el primer nodo, apunte el puntero del nodo anterior al siguiente nodo del actual. nodo*/

{

pr-gt; siguiente = p-gt;

}

libre(p); /*Liberar la memoria asignada para el nodo eliminado*/

}

else /*No se encontró el nodo a eliminar*/

{

printf("¡Este nodo no ha sido encontrado!\ n");

}

return head /*Devuelve el puntero del nodo principal de la lista enlazada después. eliminando el nodo*/

}

STU *SearchNode(STU *head, int nodeNum)

{

STU *p = head;

int j = 1;

while (p != NULL) /*Si no es el final de la tabla, bucle*/

{

if (p-gt; number == nodeNum) return p;

p = p-gt; /*Deje que p apunte al siguiente nodo*/

j;

}

return NULL ;

}

void DeleteMemory(STU *head)

{

STU *p = head, *pr = NULL;

while (p != NULL) /*Si no es el final de la tabla, suelte la memoria ocupada por el nodo*/

{

pr = p /*In Guarda el puntero del nodo actual en pr*/

p =; p-gt; next; /*Deje que p apunte al siguiente nodo*/

free(pr);

/*Libera la memoria ocupada por el nodo actual señalado por pr*/

}

}

Simplemente conformate con ello, solo agrega algunas funciones faltantes tú mismo. . .

nos, siendo duradero y desempeñando un papel extraordinario. Es muy beneficioso revisar el desarrollo histórico del concepto de función y echar un vistazo al proceso histórico de continuo refinamiento, profundización y enriquecimiento del concepto de función. Esto no sólo nos ayuda a mejorar la claridad de nuestra comprensión de los ins y. saca del concepto de función, pero también nos ayuda a comprender el enorme papel que juegan los conceptos matemáticos en el desarrollo y el aprendizaje matemático. (1) Marx alguna vez creyó que el concepto de función se originó a partir del estudio de ecuaciones indefinidas en álgebra. Dado que Diofanto ya había estudiado ecuaciones indefinidas en la época romana, el concepto de funciones ya había comenzado al menos en ese momento. Desde la revolución astronómica de Copérnico, los deportes se convirtieron en un problema común para los científicos del Renacimiento. La gente piensa: como la Tierra no es el centro del universo, tiene el suyo propio. La órbita del planeta es elíptica. ¿Cuál es el principio? Además, estudiar la ruta, el alcance y la altura que puede alcanzar el proyectil en la superficie terrestre, así como el impacto de la velocidad del proyectil en la altura y el alcance, no son solo problemas que los científicos están tratando de resolver, sino también problemas que los estrategas militares deben resolver. El concepto de función es un concepto matemático derivado del estudio del movimiento, y el movimiento es la fuente mecánica del concepto de función. (2) Mucho antes de que se propusiera claramente el concepto de función, los matemáticos ya habían entrado en contacto y estudiado muchas funciones específicas, como funciones logarítmicas, funciones trigonométricas, funciones hiperbólicas, etc. Descartes notó la dependencia de una variable de otra en su geometría analítica alrededor de 1673, pero no se dio cuenta en ese momento de la necesidad de refinar el concepto general de funciones, por lo que no fue hasta finales del siglo XVII que el cálculo de Newton y Leibniz fue simplemente establecido. Los matemáticos aún no han descubierto el significado general de las funciones. En 1673, Leibniz usó por primera vez la palabra función para representar "potencia", y luego la usó para representar las cantidades geométricas de cada punto de la curva, como la abscisa, la ordenada, la longitud de la tangente, etc. Se puede ver que el significado matemático original de la palabra función es bastante amplio y vago. Casi al mismo tiempo, Newton estaba hablando de cálculo. No fue hasta 1689 que el matemático suizo Johann Bernoulli definió claramente el concepto de función basándose en el concepto de función de Leibniz. Bernoulli llamó a la cantidad formada por la variable X y la constante de cualquier forma una "función de X", expresada como yx. Porque las operaciones que conectaban variables y constantes en aquella época eran principalmente operaciones aritméticas, operaciones trigonométricas, etc. Entonces, más tarde, Euler simplemente nombró la fórmula formada al conectar la variable X y la constante C usando estas operaciones como una función analítica, que se dividió en funciones algebraicas y funciones trascendentales. A mediados del siglo XVIII, D'Alembert y Euler introdujeron el término "función arbitraria" debido a sus investigaciones sobre la vibración de las cuerdas. Al explicar el concepto de "función arbitraria", D'Alembert dijo que significa "expresión analítica arbitraria". Euler creía que se trataba de "una curva trazada arbitrariamente". Ahora parece que ésta es la expresión de función, una extensión del concepto de función. (3) El concepto de función carece de una definición científica, lo que genera marcadas contradicciones entre la teoría y la práctica. Por ejemplo, las ecuaciones diferenciales parciales se utilizan ampliamente en tecnología de ingeniería, pero la falta de definiciones científicas de funciones limita en gran medida el establecimiento de la teoría de ecuaciones diferenciales parciales. De 1833 a 1834, Gauss comenzó a centrar su atención en la física. En el proceso de cooperación con W. Wilbur para inventar el telégrafo, realizó una gran cantidad de experimentos magnéticos y propuso la importante teoría de que "la fuerza es inversamente proporcional al cuadrado de la distancia", lo que hizo que la función pareciera una rama independiente de matemáticas. Las necesidades prácticas impulsan a las personas a estudiar más a fondo la definición de funciones. Más tarde, la gente dio esta definición: si una cantidad depende de otra cantidad, y cuando esta última cambia, la primera cantidad también cambia, entonces la primera cantidad se llama función de la segunda cantidad. "Aunque esta definición aún no ha revelado la esencia de la función, ha inyectado cambios y movimiento en la definición de función, lo cual es un progreso bienvenido en la historia del desarrollo del concepto de función", dijo el matemático francés Fourier. quien tuvo mayor influencia en su obra fue . Fourier reveló profundamente la naturaleza de las funciones y creía que las funciones no necesitan limitarse a expresiones analíticas. En 1822, dijo en su famoso libro "La teoría analítica del calor", "En general, una función representa un conjunto conexo de valores u ordenadas, cada una de las cuales es arbitraria... No asumimos que estas ordenadas obedecen a * * leyes iguales constantes; son adyacentes en todos los aspectos.
  • Conversación cruzada o boceto adecuado para estudiantes de secundaria