标题:C语言虚拟抢红包
取消只看楼主
漂流瓶子
Rank: 2
等 级:论坛游民
帖 子:22
专家分:77
注 册:2019-1-14
结帖率:100%
已结贴  问题点数:20 回复次数:6 
C语言虚拟抢红包
    即将过年了,每当过年,最大的期待就是能收到很多的红包,毕竟那是真金白银,可以买好多好多的东西,手机啊,笔记本电脑啊,以及漂流的衣服,化妆品等。
    同样的,如今的很多社交软件,也大多支持红包系统,最常见的就是qq跟微信了。
    才学c语言,虽然很多知识还没有学通,但是还是想尝试做一个红包系统。
    首先,c语言红包系统,主要分为三个模块:
    用户管理模块
    钱包管理模块
    红包管理模块

    用户管理模块,用来保存用户信息,用户信息包括:用户名,钱包余额。
    钱包充值模块,用来往用户钱包充值和提现(充值和提现是虚拟的,并不涉及真钱,只是自己闹着玩的)。
    红包管理模块,用来管理发出去的红包。每发出去的红包,都有一个红包id和余额,防止红包无限的领取。

    首先来数据结构定义:
    用户管理模块{
字符串类型    用户名;
浮点类型    钱包余额;
};

钱包管理模块{
    整型    交易id;
    字符串类型    用户名;
    整型    交易时间;
整型    交易类型(0:充值,1:体现,2:红包支出,3:红包收入);
浮点类型    金额;
};

红包管理模块{
整型    红包ID;
整型    红包数量;
整型    剩余数量;
浮点类型    红包余额;
};

运行逻辑:
1.    程序启动,初始化10个用户,用户余额为0;
2.    调用充值函数,给其中一个用户充值一定的金额;
3.    调用发红包函数,设定发送的红包金额和数量;
4.    所有用户依次领取红包,通过随机数来确定领取金额,并打印领取金额。
5.    所有资金往来,都记录到钱包管理模块中,形成一个统一的账本。

大体思想就这样,求各位大佬看看,这样设计有没有啥问题,谢谢。
搜索更多相关主题的帖子: 模块 用户 管理 类型 整型 
2019-01-17 10:04
漂流瓶子
Rank: 2
等 级:论坛游民
帖 子:22
专家分:77
注 册:2019-1-14
得分:0 
回复 楼主 漂流瓶子
其实不用真的钱充值,做个类似的游戏就行了,我的想法是这样的。
2019-01-17 10:42
漂流瓶子
Rank: 2
等 级:论坛游民
帖 子:22
专家分:77
注 册:2019-1-14
得分:0 
数据库是什么?不加可以吗?
2019-01-17 11:22
漂流瓶子
Rank: 2
等 级:论坛游民
帖 子:22
专家分:77
注 册:2019-1-14
得分:0 
回复 5楼 漂流瓶子
我就是想自己跟自己玩,你觉得这样设计能行吗?我正在写代码,晚上打算贴出来,能帮忙看看吗?
2019-01-17 14:01
漂流瓶子
Rank: 2
等 级:论坛游民
帖 子:22
专家分:77
注 册:2019-1-14
得分:0 
回复 9楼 do8do8do8
好的,试试,今天晚上争取弄出来。
2019-01-17 17:35
漂流瓶子
Rank: 2
等 级:论坛游民
帖 子:22
专家分:77
注 册:2019-1-14
得分:0 
C语言模拟抢红包源码,楼下贴出
2019-01-19 22:53
漂流瓶子
Rank: 2
等 级:论坛游民
帖 子:22
专家分:77
注 册:2019-1-14
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct user_table{
    int id;
    char name[16];
    float amount;
};

struct wallet_table{
    int id;
    int type;
    int user_id;
    time_t date;
    float amount;
};

struct hb_table{
    int id;
    int max_count;
    int count;
    float amount;
};

struct user_table user_list[10];
struct wallet_table wallet_list[1000];
struct hb_table hb_list[1000];

int add_user(char name[], int len){
    static int count = 0;
    int i;
    if(count > 9){
        fprintf(stderr, "user is full\n");
        return -1;
    }
    user_list[count].id = count;
    user_list[count].amount = 0.0;
    for(i=0;i<len;i++)
        user_list[count].name[i] = name[i];
    user_list[count].name[i] = '\0';
    count++;
    return count - 1;
}

int add_wallet(int type, int user_id, float amount){
    static int count = 0;
    if(count > 999){
        fprintf(stderr, "wallet is full\n");
        return -1;
    }
    wallet_list[count].id = count;
    wallet_list[count].type = type;
    wallet_list[count].user_id = user_id;
    wallet_list[count].date = time(NULL);
    wallet_list[count].amount = amount;
    count++;
    return count - 1;
}

int add_hb(int number, float amount){
    static int count = 0;
    if(count > 999){
        fprintf(stderr, "hb is full\n");
        return -1;
    }
    hb_list[count].id = count;
    hb_list[count].max_count = number;
    hb_list[count].count = number;
    hb_list[count].amount = amount;
    count++;
    return count - 1;
}

void deposit(char name[], int len, float amount){
    int i, j, status;
    for(i=0;i<9;i++){
        status = 0;
        for(j=0;j<len;j++){
            if(user_list[i].name[j] != name[j]){
                status = 1;
                break;
            }
        }
        if(status == 0){
            user_list[i].amount += amount;
            printf("%s deposit %f Yuan\n", name, amount);
            return;
        }
    }
    fprintf(stderr, "no user name:%s\n", name);
}

void get_hb(char name[], int len, int hb_id){
    int i, j, status, a;
    float b;
    for(i=0;i<9;i++){
        status = 0;
        for(j=0;j<len;j++){
            if(user_list[i].name[j] != name[j]){
                status = 1;
                break;
            }
        }
        if(status == 0)
            goto a1;
    }
    fprintf(stderr, "no user name:%s\n", name);
    return;

    a1:
    for(j=0;j<999;j++){
        if(hb_list[j].id == hb_id)
            goto a2;
    }
    fprintf(stderr, "no hb_id:%d\n", hb_id);
    return;

    a2:
    a = rand() % 100;
    b = (float)a / 100;
    if(hb_list[j].count <= 0){
        fprintf(stderr, "The hb is null\n");
        return;
    }
    else if(hb_list[j].count == 1){
        b = hb_list[j].amount;
    }
    else{
        b *= hb_list[j].amount;
    }
    hb_list[j].amount -= b;
    user_list[i].amount += b;
    printf("%s get %f Yuan hb\n", name, b);
}

int put_hb(char name[], int len, float amount, int number){
    int i, j, status, a;
    int hb_id;
    float b;
    for(i=0;i<9;i++){
        status = 0;
        for(j=0;j<len;j++){
            if(user_list[i].name[j] != name[j]){
                status = 1;
                break;
            }
        }
        if(status == 0)
            goto a1;
    }
    fprintf(stderr, "no user name:%s\n", name);
    return -1;

    a1:
    if(user_list[i].amount >= amount){
        add_wallet(2, user_list[i].id, amount);
        hb_id = add_hb(number, amount);
        user_list[i].amount -= amount;
        printf("%s put %f Yuan hb.\n", name, amount);
        return hb_id;
    }
    fprintf(stderr, "%s amount is too few\n", name);
}

int main(){
    int hb_id;
    add_user("Xiao Ming", 9);
    add_user("Xiao Hong", 9);
    add_user("Xiao Liang", 10);
    add_user("Xiao Guang", 10);

    deposit("Xiao Ming", 9, 100.0);
    add_wallet(0, 0, 100.0);

    hb_id = put_hb("Xiao Ming", 9, 5.0, 3);

    srand(time(NULL));
    get_hb("Xiao Hong", 9, hb_id);
    get_hb("Xiao Liang", 10, hb_id);
    get_hb("Xiao Guang", 10, hb_id);

    return 0;
}
2019-01-19 22:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-492720-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.083407 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved