You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
red_envelope/C_language_red_envelope.c

124 lines
4.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct user test_user;
typedef struct red_envelope test_red_envelope;
typedef struct user* p_user;
typedef struct red_envelope* p_red_envelope;
struct user{
char name[100];
p_red_envelope send_envelope[100];
p_red_envelope receive_envelope[100];
};
struct red_envelope{
long int time;
long int money;
char words[100];
p_user sender;
p_user receiver;
};
int main()
{
/* 我的第一个 C 程序 */
int i=0;
printf("Hello, World! \n"); //测试语句
test_user first; //创建用户结构体实例first
strcpy(first.name,"张三"); //用户名为张三
for(;i<=29;i=i+1){
first.send_envelope[i]=malloc(sizeof(struct red_envelope));
first.receive_envelope[i]=malloc(sizeof(struct red_envelope));
} //由于用户结构体中红包数组类型为结构体红包指针,在创建实例的时候不会根据
//结构体红包实例大小分配内存,因此需要手动分配
test_user second; //创建用户结构体实例second
strcpy(second.name,"李四"); //用户名为李四
for(i=0;i<=29;i=i+1){
second.send_envelope[i]=malloc(sizeof(struct red_envelope));
second.receive_envelope[i]=malloc(sizeof(struct red_envelope));
} //创建用户second
test_red_envelope firstred; //创建红包实例
firstred.money=10; //为红包实例赋初值金额为10
strcpy(firstred.words,"恭喜发财"); //为红包实例赋初值,祝福语为恭喜发财
firstred.receiver=malloc(sizeof(struct user)); //由于红包结构体中发送人与接收人为用户结构体指针,在创建实例的时候不会根据
firstred.sender=malloc(sizeof(struct user)); //用户结构体实例大小分配内存,因此需要手动分配,防止后续地址内存错误
giveRedEnvelope(first,second,firstred);
test_red_envelope secondred; //创建红包实例
secondred.money=11; //为红包实例赋初值金额为11
strcpy(secondred.words,"共同发财"); //为红包实例赋初值,祝福语为共同发财
secondred.receiver=malloc(sizeof(struct user)); //由于红包结构体中发送人与接收人为用户结构体指针,在创建实例的时候不会根据
secondred.sender=malloc(sizeof(struct user)); //用户结构体实例大小分配内存,因此需要手动分配,防止后续地址内存错误
giveRedEnvelope(second,first,secondred);
printf("\n用户名:%s",first.name);
printf("\n收红包列表:\n");
for(i=0;i<=29;i=i+1){
if(first.receive_envelope[i]->money==0)
break;
printf("金额:%d",first.receive_envelope[i]->money);
printf("\n祝福语:%s",first.receive_envelope[i]->words);
printf("\n发送人:%s",first.receive_envelope[i]->sender->name);
}
printf("\n发红包列表:\n");
for(i=0;i<=29;i=i+1){
if(first.send_envelope[i]->money==0)
break;
printf("金额:%d",first.send_envelope[i]->money);
printf("\n祝福语:%s",first.send_envelope[i]->words);
printf("\n接收人:%s",first.send_envelope[i]->receiver->name);
}
printf("\n用户名:%s",second.name);
printf("\n收红包列表:\n");
for(i=0;i<=29;i=i+1){
if(second.receive_envelope[i]->money==0)
break;
printf("金额:%d",second.receive_envelope[i]->money);
printf("\n祝福语:%s",second.receive_envelope[i]->words);
printf("\n发送人:%s",second.receive_envelope[i]->sender->name);
}
printf("\n发红包列表:\n");
for(i=0;i<=29;i=i+1){
if(second.send_envelope[i]->money==0)
break;
printf("金额:%d",second.send_envelope[i]->money);
printf("\n祝福语:%s",second.send_envelope[i]->words);
printf("\n接收人:%s",second.send_envelope[i]->receiver->name);
}
return 0;
}
int acceptRedEnvelope(test_user *receiver,test_user *sender,test_red_envelope red_envelope){
printf("%s用户准备接收来自%s用户的%d元的红包\n",(*receiver).name,(*sender).name,red_envelope.money);
int flag=0;
int i;
for(i=0;i<=29;i=i+1){
if ((*receiver).receive_envelope[i]->money==0){
flag=i;
break;
}
}
*(*receiver).receive_envelope[flag]=red_envelope;
printf("%s用户已成功接收到%s用户发来的%d元红包\n",(*receiver).name,(*sender).name,red_envelope.money);
return 0;
}
int giveRedEnvelope(test_user *sender,test_user *receiver,test_red_envelope red_envelope){
printf("%s用户准备发%d元的红包给%s用户\n",(*sender).name,red_envelope.money,(*receiver).name);//控制台输出
strcpy(red_envelope.receiver->name,receiver->name);//此处偷懒,仅将发送人与接收人的用户名赋给红包实例(形参)
strcpy(red_envelope.sender->name,sender->name);
acceptRedEnvelope(receiver,sender,red_envelope);
int flag=0;
int i;
for(i=0;i<=29;i=i+1){
if ((*sender).send_envelope[i]->money==0){
flag=i;
break;
}
}
*(*sender).send_envelope[flag]=red_envelope;
printf("%s用户成功发送%d元的红包给%s用户\n",(*sender).name,red_envelope.money,(*receiver).name);
return 0;
}