#Linux 中 的 GCC 规划 # Sistema de lotería

C

Sistema de gestión de loterías

1. Introducción a la función

Tres identidades: usuario ordinario, notario y administrador.

  • Usuarios habituales: registrarse, iniciar sesión, recargar, comprar billetes de lotería, etc.
  1. Registro: ingrese el número de cuenta, verifique los duplicados, ingrese la contraseña. Esta información se almacena en la lista vinculada y se escribe en un archivo local.
  2. Inicio de sesión: Ingrese el número de cuenta, la contraseña y la contraseña debe estar cubierta con "*". Necesita ingresar el código de verificación.
  3. Ver información personal: después de iniciar sesión, vaya a la página secundaria. Los usuarios pueden ver su propia información (número, nombre de usuario, contraseña, saldo).
  4. Modificar contraseña: la nueva contraseña no puede ser coherente con la contraseña anterior; de lo contrario, generará un error de modificación.
  5. Recarga de cuenta: Ingrese la cantidad a recargar y confirme.
  6. Compra de boletos de lotería: Hay boletos de lotería que se emiten en el retiro periódico, de lo contrario no puede comprarlos; los boletos de lotería los emite el administrador. Los usuarios pueden generar números de lotería aleatoriamente o completarlos a mano.
  7. Ver historial: los usuarios pueden poseer sus registros de compras anteriores. Busque el nodo que compró en la lista de lotería.
  • Notario:
  1. La cuenta y la contraseña se fijan como: notery
  2. Al iniciar sesión, debe ocultar su contraseña y solicitar un código de verificación.
  3. Sorteo: después de iniciar sesión, (siempre que ya se haya emitido un boleto de lotería) sorteo. Y determina. Genere aleatoriamente varios números como números ganadores.
  4. Una vez finalizado el sorteo, el notario puede decidir si emite el bono inmediatamente.
  5. Los notarios pueden jugar en su tiempo libre. Hasta ahora, solo se ha completado "Piedra, papel, tijera". También se desarrollarán "Snake Snake" y "Tank Battle".
  • administrador:
  1. Puede ver la información de todos los usuarios.
  2. Puede consultar la información de un solo usuario.
  3. Se emiten billetes de lotería y el número de lotería se genera automáticamente en función de la fecha y la hora. El precio unitario de la lotería debe ser fijado por el administrador.
  4. Puede ordenar la lista de usuarios (según el nombre o ID) y guardarla.
  5. Se emiten bonificaciones. Bajo el número de lotería que se está emitiendo actualmente, se determina que un usuario lo ha comprado y el notario sacará la lotería. Según el número de lotería del usuario, el premio se saca del pozo de premios y se distribuye al usuario ganador.
  6. Agregue dinero manualmente al pozo de premios.
  7. eliminar usuarios. El administrador puede eliminar un usuario.
  8. Ver toda la información de compra. De la lista de lotería, se muestra toda la información de la lotería.

La interfaz interactiva implica:

Este proyecto adopta el diseño de la arquitectura MVC, es decir, módulo, interfaz y control.

En src / lotview.c, use system ("clear"); y printf (); para actualizar la pantalla continuamente para lograr un efecto interactivo dinámico.

En src / lotcontrol.c, la lógica de control de cada interfaz está constituida por switch y case.
Una de las funciones más básicas es: choose = key_udrl (choose, 4,3); esta función es el núcleo de los efectos dinámicos interactivos. Modifique el valor de elección mediante los botones y números arriba, abajo, izquierda y derecha en el teclado para ingresar la lógica correspondiente. Y actualice dinámicamente en lotview.c.

Dificultades técnicas:

  • La base de datos no se utiliza, pero se crea una lista vinculada y se guarda en un archivo local.
  • En el proceso de uso de la lista vinculada, están involucradas la aplicación y liberación de memoria dinámica.
  • Por primera vez en la vida, comencé a darme cuenta de la terrible falla secundaria y del buen hábito de prevenir las fallas secundarias.

2. Código

Dirección de descarga del código del proyecto: https://github.com/Kshine2017/My_GCC/tree/master/lottery_Kshine201708

El directorio del proyecto es el siguiente:

root@kshine-virtual-machine:/home/kshine/桌面/lottery_Kshine201708# tree
.
├── bin
│   └── main
├── common.bin
├── include
│   ├── freelink.h
│   ├── fun.h
│   ├── gamejsb.h
│   ├── loadsave.h
│   ├── lotcontrol.h
│   ├── lottery.h
│   ├── lotview.h
│   ├── pic.h
│   └── udrl.h
├── iss.bin
├── makefile
├── obj
│   ├── freelink.o
│   ├── fun.o
│   ├── gamejsd.o
│   ├── loadsave.o
│   ├── lotcontrol.o
│   ├── lottery.o
│   ├── lotview.o
│   ├── main.o
│   ├── pic.o
│   └── udrl.o
├── src
│   ├── freelink.c
│   ├── fun.c
│   ├── gamejsd.c
│   ├── loadsave.c
│   ├── lotcontrol.c
│   ├── lottery.c
│   ├── lotview.c
│   ├── main.c
│   ├── pic.c
│   ├── udrl.c
│   └── 锛_
├── tic.bin
└── user.bin

Elija algunos archivos o funciones y haga un análisis de visualización simple:

  1. udrl.c (arriba abajo derecha izquierda)
#include <stdio.h>
#include <stdlib.h>
#include "lotview.h"
int key_udrl(int choose,int menu_num,int mode)
{
 	printf("\n\033[47;31m\t\t\t敲击Enter继续!\033[0m\n");
 	getchar();
while (1)
{
	char c =0;
	if(mode==1)
  	{
   		V_main_menu_move(choose);
  	}
  	else if(mode==2)
  	{
  		 V_game_move(choose);
 	 }
	 else if(mode==3)
 	 {
   		V_other_move(choose);
  	}
	else if(mode==4)
  	{
   		V_sort_move(choose);
  	}
 	 else if(mode==5)
  	{
  	 V_admin_menu_move(choose);
 	 }
 	 else if(mode==6)
 	 {
   		V_user_menu_move(choose);
 	 }
 	 else if(mode==7)
 	 {
  		 V_notery_menu_move(choose);
  	}
	while(1) //自动清掉奇怪的符号
  	{
  		 system("stty -icanon");//关闭缓冲区,输入字符无需回车直接接受
                    c=getchar();  
   		if(c=='\n')
   		{
    		 	return choose;
 	 	}
                 if((c>='a'&&c<='z')&& (c>='A'&&c<='Z') && (c>='9'&&c<='0')) 
  		{
    			printf("\b");
    			continue;
   		}
   		else  //是字母或者数字
  		 {
    			break;
   		}
       }
	//得到上下左右或者字母数字 
       	 if(c<='9'&&c>='0')//返回数值,直接控制
   	 {
  	 	choose = (int)(c-'0');//不要急着返回
    	}
  	else
  	{
   		if(c=='A')//up
   		{
    			choose--;
   		}
   		if(c=='B')//down
   		{
    			choose++;
   		}
   		if(c=='D')//left
   		{
    			choose=0;
   		}
  		if(c=='C')//right
   		{
   	 		//进入当前的choose菜单
    			break;
   		}
 	}
	//--------------------
  	if(choose<0)
  	{
   		choose += menu_num;
  	}
 	 if(choose>menu_num-1)
  	{
   		choose -=(menu_num); 
 	 }
 	 //-----动态显示
  	//V_main_menu_move(choose);
  	//----
    }
 	return choose;
 }

En el archivo fun.c

  1. // Bloquear el valor de entrada
char* secret_num(char* str)
{
 	char ch=0;
        int i=0;
        getchar();
        while(1)
        {
                system("stty -icanon");//关闭缓冲区,输入字符无需回车直接接受
	      ch=getchar();
                printf("\b@");
                if(ch=='\n')
	      {
                        break;
                }
        str[i++]=ch;
        }
        str[i]='\0';
        return str;
}
  1. //Código de verificación

int identifying_code()
{
 	char array[100]={"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"};
 	char a[5]="";
 	char b[5]="";
	srand(time(NULL));
 	a[0]=array[rand()%62];
 	a[1]=array[rand()%62];
 	a[2]=array[rand()%62];
 	a[3]=array[rand()%62];
	printf("验证码是:");
 	printf("\033[42;31m%s\033[0m\n",a);
 	printf("请输入您的验证码:");
 	scanf("%s",b);
 	if(strcmp(a,b)==0)
 	{
  		printf("验证成功!\n");
  		return 0;
	 }
	 else
 	{
  		printf("验证失败!");
  		return 1;
	 }
 	return 0;
}

3. Compila y ejecuta

El archivo MAKE se escribe en el proyecto y el usuario puede ingresar directamente make o make clean.

CC:=gcc
DEPEND:=obj/main.o
DEPEND+=obj/lotcontrol.o
DEPEND+=obj/fun.o
DEPEND+=obj/udrl.o
DEPEND+=obj/lotview.o
DEPEND+=obj/loadsave.o
DEPEND+=obj/freelink.o
DEPEND+=obj/pic.o
DEPEND+=obj/lottery.o
DEPEND+=obj/gamejsd.o
bin/main:$(DEPEND)
 $(CC)    $^ -o $@
obj/%.o:src/%.c
 $(CC) -c $^ -o $@ -Iinclude
clean:
 rm -rf obj/$(DEPEND)
 rm -rf src/*.c~

4. Ejecutar pantalla

Pantalla de bienvenida:

Pantalla de bienvenida

Interfaz principal:
Interfaz principal

Inicio de sesión de usuario:
Inicio de sesión de usuario

Interfaz de usuario
Interfaz de usuario

Historial de vista de usuario
Los usuarios ven los registros históricos de compras

Interfaz de notario:
Interfaz de notario

Interfaz de administrador:
Interfaz de administrador

Orden administrador-usuario:
Orden de usuario administrador

Interfaz de otra información:
Interfaz principal de otra información

La información básica es información de texto. El icono es la pantalla de inicio. El código QR es la imagen del código QR en el que me aburrí y convertí la URL de una organización. (Los usuarios pueden convertir imágenes en matrices de acuerdo con sus propias necesidades y luego reemplazarlas aquí). Debido a que el terminal utiliza un solo carácter para representar un píxel y para evitar que el patrón pierda su forma, la imagen es muy grande. Esta es también una de las desventajas de la pantalla del terminal. Vamos a mostrar el código QR que se muestra.
Código QR

También hay algunas funciones que debe descubrir y mejorar usted mismo.

Supongo que te gusta

Origin blog.csdn.net/Kshine2017/article/details/85280331
Recomendado
Clasificación