Red de conocimiento informático - Material del sitio web - Los guerreros ayudan a crear programas en C

Los guerreros ayudan a crear programas en C

#include

#include

#include

#include

#include

#include

#define MAX_NAME_LEN 32

#define MAX_PWD_LEN 32

typedef struct _StudentInfo

{

nombre de char[MAX_NAME_LEN + 1]

pwd de char[MAX_PWD_LEN + 1]; >

int sin firmar correcto;

int sin firmar incorrecto

estructura _StudentInfo *siguiente

}StudentInfo;

StudentInfo* GetNode(StudentInfo *head, char *name)

{

StudentInfo *nodo = head;

while (nodo)

{

if (strcmp(nodo-> nombre, nombre) == 0)

{

Devolver nodo;

}

nodo = nodo->siguiente;

}

Devuelve NULL; StudentInfo* GetPriorNode(StudentInfo *head, StudentInfo *node)

{

StudentInfo *prior = head;

while (antes)

{

si (anterior->siguiente == nodo)

{

retorno anterior;

}

anterior = anterior->siguiente;

}

return NULL;

}

int AddStudentInfo(StudentInfo **head, StudentInfo *info)

{

StudentInfo *nodo;

if (nodo = GetNode(* head, info->nombre))

{

return 0;

}

/* Nuevo nodo de estudiante*/

nodo = (StudentInfo *) malloc( sizeof(StudentInfo));

* node = *info;

/* Agregar nuevo nodo a la lista vinculada*/

if (*head )

{

nodo->siguiente = (*head)->siguiente;

(*head)->siguiente = nodo;

}

else

{

nodo->siguiente = NULL;

*head = nodo;

}

return 1;

}

int AddStudent(StudentInfo * * head, char *nombre, char *contraseña)

{

Información de StudentInfo;

strcpy(info.nombre, nombre);

strcpy(info.pwd, pwd);

info.right = 0;

info.wrong = 0;

info.pwd = 0;

info.pwd = 0.

incorrecto = 0;

return AddStudentInfo(head, &info);

}

void RemoveStudentInfo(StudentInfo **head, StudentInfo *node)

{

StudentInfo *prior;

if (prior = GetPriorNode(*head, node))

{

anterior ->siguiente = nodo->.next;

}

else

{

*head = nodo->siguiente;

}

free(nodo);

}

int RemoveStudent(StudentInfo ** head, char *nombre)

{

StudentInfo *nodo;

if (nodo = GetNode(*head, nombre))

{

RemoveStudentInfo (cabeza, nodo);

Devuelve 1;

}

De lo contrario

{

Devuelve 0;

}

}

void RemoveAllStudent(StudentInfo **head)

{

StudentInfo * nodo = *cabeza, *temp;

while (nodo)

{

temp = nodo->siguiente;

libre (nodo);

nodo = temp;

}

*cabeza = NULL;

}

void ShowStudentInfo (StudentInfo *nodo)

{

printf("Nombre: nombre, nodo->.nombre, nodo->contraseña, nodo->correcto, nodo->incorrecto) ;

}

void PrintStudent(StudentInfo *head, char *name)

{

StudentInfo *node;

if (nodo = GetNode(head, name))

{

ShowStudentInfo(nodo);

}

else

{

printf(" Este estudiante no está matriculado, no hay información.\n");

}

}

void PrintAllStudent(StudentInfo *head)

{

StudentInfo *nodo = head;

int i = 1;

while (nodo)

{

printf("%d ", i);

ShowStudentInfo(nodo);

nodo = nodo->siguiente;

i+

+;

}

}

# define ARCHIVO DE DATOS "D./\\mdd:\\mdd.

data"

/* Variables globales*/

StudentInfo *g_StudentInfoList = NULL;

StudentInfo *g_LogStudent = NULL;

void LoadStudentInfo ()

{

ARCHIVO *infile;

Información de StudentInfo;

infile = fopen(DATAFILE, "rb");

if(!infile)

{

printf("¡Error al abrir DATAFILE, no se puede leer la información del estudiante!\n");

return;

}

while (fread(&info, sizeof(StudentInfo), 1, infile))

{

AddStudentInfo(&g_ StudentInfoList, &info);

}

fclose(infile);

printf("¡Leí correctamente la información del estudiante!\n");

p>

}

void StoreStudentInfo()

{

ARCHIVO *outfile;

StudentInfo * nodo;

outfile = fopen(DATAFILE, "wb");

if (!outfile)

{

printf(" ¡No se pudo abrir DATAFILE, no se pudo almacenar la información del estudiante \n");

return;

}

node = g_StudentInfoList;

while (nodo)

{

fwrite(nodo, tamañode(StudentInfo), 1, archivo de salida);

nodo = nodo->siguiente;

}

fclose(outfile);

printf("¡Almacenando exitosamente la información del estudiante! \n");

}

void ReadString(const char *hint, char *str)

{

hacer

{

printf("%s", sugerencia);

if (scanf("%s", str) ! = 1)

{

printf("Error de formato de entrada, ¡vuelva a escribir!\n");

fflush(stdin);

continuar;

}

fflush(stdin);

descanso;

}

mientras (1);

}

void main()

{

int op;

nombre de char[MAX_NAME_LEN + 1], pwd[MAX_

PWD_LEN + 1], rpwd[MAX_PWD_LEN + 1];

LoadStudentInfo();

srand(time(NULL));

{

printf("Menú:\n1. iniciar sesión\n2. registrarse\n3. cambiar contraseña\n4.mostrar información del estudiante registrado\n7. mostrar toda la información del estudiante registrado\n8. eliminar estudiante registrado información\n9.Eliminar información del estudiante registrado\n9.Eliminar toda la información del estudiante registrado\n0.Salir\n");

hacer

{

op = getch();

}

while (op < '0' | op > '9');

putchar (op);

putchar('\n');

cambiar (op)

{

caso '1':

ReadString ("Ingrese el nombre:", nombre);

ReadString("Ingrese la contraseña:", pwd

if (g_LogStudent = GetNode(g_StudentInfoList, nombre))

{

if (strcmp(g_LogStudent->pwd, pwd) == 0)

{

printf("Inicio de sesión exitoso.\ n");

}

else

{

printf("Contraseña incorrecta, inicio de sesión fallido.\n");

g_LogStudent = NULL;

}

}

else

{

printf ("El estudiante no está registrado, el inicio de sesión falló.\n");

}

descanso;

caso '2':

ReadString("Ingrese el nombre:", nombre);

ReadString("Ingrese la contraseña:", pwd);

ReadString("Ingrese la contraseña:" , rpwd);

if (strcmp(pwd, rpwd) == 0)

{

if (AddStudent(&g_StudentInfoList, nombre, pwd))

{

printf("Registro exitoso..\n");

}

else

{

printf("El estudiante ya existe, el registro falló

ed.\n");

}

}

else

{

printf("El las contraseñas ingresadas dos veces no son las mismas, el registro falló \n");

}

break;

caso '3':

if (!g_LogStudent)

{

printf("¡No hay ningún estudiante conectado, no se puede cambiar la contraseña!\n");

break;

}

ReadString("Ingrese la contraseña nuevamente:", pwd);

ReadString("Ingrese la contraseña nuevamente:", rpwd);

if (strcmp(pwd, rpwd) == 0)

{

strcpy(g_LogStudent->pwd, pwd);

printf( "La contraseña se cambió correctamente.\n");

}

break;

case '4':

if (!g_LogStudent )

{

printf("No hay ningún estudiante conectado actualmente, ¡no puede ver las calificaciones!\n");

break;

}

printf("Número total de preguntas: %d\n Número de preguntas respondidas correctamente: %d\n", g_LogStudent->right + g_LogStudent->wrong, g_LogStudent->. derecha);

ruptura;

caso '5':

if (!g_LogStudent)

{

printf("Ningún estudiante ha iniciado sesión actualmente, ¡no puede ver las calificaciones! \n");

break;

}

mientras (1)

{

int a , o, b, r, n, cho;

a = rand() % 1000;

o = rand() % 4;

b = rand() % 1000;

b = rand() 1000;

cambiar (o)

{

caso 0:

o = '+';

r = a + b;

descanso;

caso 1:

o = '-';

r = a - b;

descanso;

caso 2:

o = '* ';

r = a * b;

descanso;

caso 3:

o = '/';

/* No hay divisor entre 0*/

mientras (

b == 0)

{

b = rand() % 1000;

}

/* Realizar división de enteros*/

a *= b;

r = a / b;

romper;

}

printf ( "preguntar: %d %c %d = ", a, o, b);

while (scanf("%d", &n) != 1)

{

printf("Error de formato de entrada, ¡vuelva a escribir!\n");

fflush(stdin);

}

fflush ( stdin);

if (r == n)

{

g_LogStudent->right++;

printf("Respuesta correcta ! \n");

}

else

{

g_LogStudent->incorrecto++;

printf ( "Respuesta incorrecta, la respuesta correcta es %d!\n", r);

}

printf("¿Continuar la prueba (Y/N )?");

p>

hacer

{

cho = toupper(getch());

}

mientras ( cho ! = 'Y' && cho ! = 'N');

putchar(cho);

putchar('\n');

si (cho = = 'N')

{

descanso;

}

}

descanso;

caso '6':

ReadString("Ingrese el nombre:", nombre);

PrintStudent(g_StudentInfoList, nombre);

break ;

caso '7':

PrintAllStudent(g _StudentInfoList);

printf("Pantalla completa.\n");

break;

case '8':

ReadString("Por favor ingrese nombre:", nombre);

if (RemoveStudent(&g_StudentInfoList, nombre))

{

printf("La información del estudiante se eliminó correctamente.\n");

}

else

{

printf("Estudiante no registrado, no se pudo eliminar la información del estudiante.\n");

}

descanso;

caso '9':

RemoveAllStudent(&g_StudentInfoList);

printf("Eliminación completa.\n");

descanso;

}

}

while(op ! = '0');

StoreStudentInfo();

}