ADD file via upload

master
xmu35320202201156 3 years ago
parent 0d630a7680
commit 9e0f90e5d3

@ -0,0 +1,123 @@
#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;
}
Loading…
Cancel
Save