|
|
#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;
|
|
|
}
|