您的位置:首页 > 编程语言 > C语言/C++

期末实训作业C语言实现银行管理系统

2020-01-31 19:50 1241 查看

C语言实现银行管理系统

期末实训作业C语言实现银行管理系统

要求实现的系统能进行以下操作:

  • 开户
  • 销户
  • 查询
  • 存款
  • 取款
  • 挂失
  • 解除挂失
  • 更改密码
  • 退出系统

话不多说,上代码。并不完全是我自己构思自己编写的,是我在社区上看了一些前辈的,然后自己在慢慢改,修改密码的版块换了好几种方法,最后还是决定用这种。觉得还是很垃圾,改密版块还有一个strcmp的使用方法的警告没有办法解决,但是能勉强运行吧。

/*

*作	   者:蓝浩
*root密码:0101
*完成时间:2019年6月27日
*版	   本:v3.0
*文 件 名:银行管理系统
*文件描述:
银行管理项目:主要功能是模拟银行的存取款业务,软件功能囊括了银行从用户开户到最终销户等业务的全过程。
一、账户操作:开户、销户、修改密码、判断用户名密码登录,
二、账户金额操作:登录成功后,下一步选择操作类型。操作类型包括八种:存款、取款、挂失、解挂、开户、销户、查询账户余额、退出,
要求写出需求分析,设计报告,完成银行管理系统设计开发,制作功能说明的PPT。
*/

#include <stdlib.h>
#include<stdio.h>
#include<string.h>
#include <windows.h>
int mingyan();   //用户名验证
int guayan(int);   //挂失验证
int miyan(int);     //密码函数

void qukuan();      //取款函数
void cunkuan();     //存款函数
void chaxun();      //查询函数
void xiaohu();      //销户函数
void kaihu();       //开户函数
void guashi();      //挂失函数
void jiegua();      //解挂函数
void tuichu();      //退出函数
void denglu();      //管理员登录函数
void xiugaimima(); 		//更改密码函数
void zhucaidan(); 	//主菜单函数

//全局变量
char gUser[100][32];            //用户名
char gMima[100][32];            //密码
char Ggua[100][32];				//挂失用户名
char mima_temp[20];
char new_mima[20];
char new_mima1[20];

float YuE[100];                 //存款余额
int UserShu=0;                  //用户数
int guashu=0;                   //挂失用户数

void main()
{
system("color f1"); 	//定义字体颜色 7为背景颜色(白色)1为字体颜色(蓝色)
denglu();				//首界面调用登录函数板块。
int zhiling;
while(zhiling)
{
printf("\n\n\n\n");
printf("\t\t\t<_____________________移动银行管理系统______________________>\n");
printf("\t\t\t||                     (1)取   款                          ||\n");
printf("\t\t\t||---------------------------------||\n");
printf("\t\t\t||                     (2)存   款                          ||\n");
printf("\t\t\t||---------------------------------||\n");
printf("\t\t\t||                     (3)查   询                          ||\n");
printf("\t\t\t||---------------------------------||\n");
printf("\t\t\t||                     (4)开   户                          ||\n");
printf("\t\t\t||---------------------------------||\n");
printf("\t\t\t||                     (5)销   户                          ||\n");
printf("\t\t\t||---------------------------------||\n");
printf("\t\t\t||                     (6)挂   失                          ||\n");
printf("\t\t\t||---------------------------------||\n");
printf("\t\t\t||                     (7)解   挂                          ||\n");
printf("\t\t\t||---------------------------------||\n");
printf("\t\t\t||                     (8)退   出                          ||\n");
printf("\t\t\t||---------------------------------||\n");
printf("\t\t\t||                     (9)更改密码                         ||\n");
printf("\t\t\t<___________________________________________________________>\n");
printf("\n\n\t\t\t请选择操作(1--9):< >\b\b");
printf("请输入您的指令:  ");
scanf("%d",&zhiling);
printf("\n");
switch(zhiling)
{
case 1:                      //跳到取款板块
qukuan();
break;
case 2:                      //跳到存款板块
cunkuan();
break;
case 3:                      //跳到查询板块
chaxun();
break;
case 4:                      //跳到开户板块
kaihu();
break;
case 5:                     //跳到销户板块
xiaohu();
break;

case 6:                     //跳到挂失板块
guashi();
break;
case 7:                    //跳到解挂板块
jiegua();
break;
case 8:
tuichu();			   //跳到退出板块
break;
case 9:
xiugaimima();		   //修改密码
break;
}
}

}

void zhucaidan()
{
int zhiling;
while(zhiling)
{
printf("\n\n\n\n");
printf("\t\t\t<_____________________移动银行管理系统______________________>\n");
printf("\t\t\t||                     (1)取   款                          ||\n");
printf("\t\t\t||---------------------------------||\n");
printf("\t\t\t||                     (2)存   款                          ||\n");
printf("\t\t\t||---------------------------------||\n");
printf("\t\t\t||                     (3)查   询                          ||\n");
printf("\t\t\t||---------------------------------||\n");
printf("\t\t\t||                     (4)开   户                          ||\n");
printf("\t\t\t||---------------------------------||\n");
printf("\t\t\t||                     (5)销   户                          ||\n");
printf("\t\t\t||---------------------------------||\n");
printf("\t\t\t||                     (6)挂   失                          ||\n");
printf("\t\t\t||---------------------------------||\n");
printf("\t\t\t||                     (7)解   挂                          ||\n");
printf("\t\t\t||---------------------------------||\n");
printf("\t\t\t||                     (8)退   出                          ||\n");
printf("\t\t\t||---------------------------------||\n");
printf("\t\t\t||                     (9)更改密码                         ||\n");
printf("\t\t\t<___________________________________________________________>\n");
printf("\n\n\t\t\t请选择操作(1--9):< >\b\b");
printf("请输入您的指令:  ");
scanf("%d",&zhiling);
printf("\n");
switch(zhiling)
{
case 1:                      //跳到取款板块
qukuan();
break;
case 2:                      //跳到存款板块
cunkuan();
break;
case 3:                      //跳到查询板块
chaxun();
break;
case 4:                      //跳到开户板块
kaihu();
break;
case 5:                     //跳到销户板块
xiaohu();
break;

case 6:                     //跳到挂失板块
guashi();
break;
case 7:                    //跳到解挂板块
jiegua();
break;
case 8:
tuichu();			   //跳到退出板块
break;
case 9:
xiugaimima();
break;
}
}
}

void denglu()    				    //登录板块
{
char zhanghu[32]="0101",mima[32];		//定义两个本版块变量,用于储存输入的管理员账号和密码。
int m=1;						//m=1 即为用户名与密码不一致(提示密码错误),会重新弹出以下的界面。
while(m==1)
{
printf("\t\t        ┌================================================================┐\n");
printf("\t\t        │                                                                │\n");
printf("\t\t        ├————————————欢迎进入银行管理系统——————————┤\n");
printf("\t\t        │                                                                │\n");
printf("\t\t        ├================================================================┤\n");
printf("\t\t        │                   请以管理员的身份登陆管理系统!               │\n");
printf("\t\t        ├────────────────────────────────┤\n");
printf("\t\t        │              声明:本银行想存多少久存多少但是无法取款!         │\n");
printf("\t\t        ├────────────────────────────────┤\n");
printf("\t\t        │                   管理员帐号:admin 密码为:admin               │\n");
printf("\t\t        └================================================================┘\n");
printf("\t\t                                                                            \n");
printf("\t\t\t请输入root用户密码: ");
scanf("%s",&mima);
printf("\n");
if(!strcmp(zhanghu,mima))													//当输入的用户名与密码一致时,视为密码正确。否则视为密码错误。
{

printf("\t\t\t▁▁▁▂▂▂▃▃▃▄▄正在登陆,请稍后......▄▅▅▅▆▆▆▇▇▇████\n\n ");		//密码正确是执行的步骤。
m=0;																	//m=0 即为密码正确,不再弹出上面的界面。
}
else{
printf("\n\n\t\t\t\t┌───────——─────────────────┐\n");
printf("\t\t\t\t    **********用户名或密码错误,请重新输入!**********\n");
printf("\t\t\t\t└───────────——─────────────┘\n\n\n"); 							//密码错误时执行的步骤。
}
}
}

void qukuan()       //取款板块
{
int i,m;
float n;
i=mingyan();    //进行调用用户名验证的操作。
m=guayan(i);	//进行调用挂失验证的操作。如果已经挂失则无法进行本次取款操作。
if(m==1){
m=miyan(i);	//调用密码验证函数对密码进行检测。
}
else{
qukuan();	//如果输入的用户名不对则会要求重新输入,输入的密码不对也会要求重新输入。
}
while(m==1)		//进入取款程序
{
printf("\t\t\t请输入您的取款金额: ");
scanf("%f",&n);
if(n<=YuE[i])							    //检测账户余额是否满足输入的取款金额。
{
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t    **********交易成功,请取走您的钞票**********\n");
printf("t\t\t\t\t└────────────────────────┘\n");
YuE[i]=YuE[i]-n; 					    //对取款后的账户余额进行校准。
break;
}
else{   			  						//账户余额不满足输入的取款金额时执行这个语句。

printf("\n\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t\t**********对不起,您的余额不足**********\n");
printf("t\t\t\t\t└────────────────────────┘\n");
break;
}
}
}

void cunkuan()   		//存款板块
{
int i,m;
float n;
i=mingyan();		// 进行调用用户名验证的操作。
m=guayan(i);		//进行调用挂失验证的操作。如果已经挂失则无法进行本次取款操作。
if(m==1){
m=miyan(i);		//调用密码验证函数对密码进行检测。
}
while(m==1)
{
printf("\t\t\t请输入您的存款金额: ");
scanf("%f",&n);
YuE[i]=YuE[i]+n;							//对存款后的账户余额进行校准。
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t\t**********交易成功!**********\n");
printf("t\t\t\t\t└────────────────────────┘\n");
printf("\t\t\t您的当前余额为: %.2f\n",YuE[i]);	//显示本次存款操作后的账户余额。
break;
}

}

void chaxun()    		//查询板块
{
int i,m;
i=mingyan();		// 进行调用用户名验证的操作。
m=guayan(i);		//进行调用挂失验证的操作。如果已经挂失则无法进行本次取款操作。
if(m==1){
m=miyan(i);
}
while(m==1)
{
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t    您的当前余额为: %.2f\n",YuE[i]);
printf("\t\t\t\t└────────────────────────┘\n");
break;
}
}

void kaihu()   //开户板块
{
int i,n=UserShu,j=0;
int t=0;
float m;
int jinjidianhua[20];
int dianhua[20];
int len;
int len1;
int len2;

char *dh;
char *jinjidh;
char *sfz;
char name[20];
char tongxindizhi[32];
char jinjixingming[32];
char jjtelephone[32];
char telephone[32];
char shenfenzheng[32];
char User[32];
char mima1[32];
char mima2[32];		//定义三个变量用于储存输入的用户名、密码和二次确认密码。
printf("\t\t\t请输入您的十位用户名: ");
scanf("%s",User);

for(i=0;i<n+1;i++)
{
if(strcmp(User,gUser[i])==0)		//对用户名进行查重,如果重复则需重新输入。
{
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t\t  **********该用户名已存在**********\n");
printf("\t\t\t\t└────────────────────────┘\n");
break;
}
else								//如果通过用户名查重,则进行此操作。
{
strcpy(gUser[UserShu],User);
while(j!=1)
{
printf("\n\t\t\t请输入您的姓名:");
scanf("%s",&name);
printf("\n\t\t\t请输入您的十八位身份证号:");
scanf("%s",&shenfenzheng);
char *sfz=shenfenzheng;
int len = strlen(sfz);
if(len !=18)
{
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t\t    **********输入有误!**********\n");
printf("\t\t\t\t└────────────────────────┘\n");
zhucaidan();
}
printf("\n\t\t\t请输入您的十一位手机号:");
scanf("%s",&telephone);
char *dh=telephone;
int len1 = strlen(dh);
if(len1 !=11)
{
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t\t    **********输入有误!**********\n");
printf("\t\t\t\t└────────────────────────┘\n");
zhucaidan();
}
/*
while( *sfz != '\n' ) //求字符串的长度
{
len1++;
sfz++;
}
if(len1!=18)
{
printf("\n\t\t\t**********输入有误!**********");
zhucaidan();
}*/
printf("\n\t\t\t请输入您的通信地址:");
scanf("%s",&tongxindizhi);
printf("\n\t\t\t请输入您的紧急联系人姓名:");
scanf("%s",&jinjixingming);
printf("\n\t\t\t请输入您的紧急联系人电话:");
scanf("%s",&jjtelephone);
char *jinjidh=jjtelephone;
int len2 = strlen(jinjidh);
if(len2 !=11)
{
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t\t    **********输入有误!**********\n");
printf("\t\t\t\t└────────────────────────┘\n");
zhucaidan();
}
printf("\t\t\t请输入您的密码: ");
scanf("%s",mima1);
printf("\t\t\t请再次输入您的密码: ");
scanf("%s",mima2);
if(strcmp(mima1,mima2)==0)  //如果两次输入的密码一致,则设置成功,自动进入存款操作界面。
{
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t\t   **********密码设置成功**********\n");
printf("\t\t\t\t└────────────────────────┘\n\n\n");
printf("\t\t\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf("\t\t\t$$$$$                                                              $$$$$\n");
printf("\t\t\t$$$$$********************请为新开账户首次存款!********************$$$$$\n");
printf("\t\t\t$$$$$                                                              $$$$$\n");
printf("\t\t\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf("\n\t\t\t\t请输入您的首次存款金额: ");
scanf("%f",&m);
strcpy(gMima[UserShu],mima1); 					//再次对密码进行校验。
YuE[UserShu]=m;									//讲输入的存款金额打入账户余额。
j=1;
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t\t      **********交易成功!**********\n");
printf("\t\t\t\t└────────────────────────┘\n");
}
else{
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t    **********两次输入不一致,请重新输入**********\n ");		//当输开户时输入的两次密码不一致时执行此操作。 返回到输入第一次密码的步骤,重新输入两次一致的密码。
printf("\t\t\t\t└────────────────────────┘\n");
}
}
UserShu++;												//在数据库中增加一个用户数量。
break;
}
}
}

void xiaohu()    //销户板块
{
int i,n,m;
i=mingyan();				// 进行调用用户名验证的操作。
m=guayan(i);				//进行调用挂失验证的操作。如果已经挂失则无法进行本次取款操作。
if(m==1){
m=miyan(i);				//调用密码验证函数对密码进行检测。
}
while(m==1)
{
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t\t\t您确定要注销您的账户?\n   \t\t\t\t\t\t<1>确认    <2>取消   \n");
printf("\t\t\t\t└────────────────────────┘\n");
printf("\t\t\t请输入您的指令:");
scanf("%d",&n);
if(n==1)									//输入1时执行本语句里的操作。
{
for(i=0;i<UserShu;i++)  				//对要销户的账户进行账号密码的一个确认
{
strcpy(gUser[i],gUser[i+1]);		//调出用户名进行确认 。
strcpy(gMima[i],gMima[i+1]);		//调出用户名对应的密码进行确认。
YuE[i]=YuE[i+1];					//对销户的余额进行清除 。
UserShu--;							//在数据库中减少一个用户数量。
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("t\t\t\t\t\t**********注销账户成功!!**********\n");
printf("t\t\t\t\t└────────────────────────┘\n");
}
}

m=0;
}
}

void guashi()      //挂失板块
{
int n,i,m;
i=mingyan();			// 进行调用用户名验证的操作。
m=guayan(i);			//进行调用挂失验证的操作。如果已经挂失则无法进行本次取款操作。
if(m==1){
m=miyan(i);	//调用密码验证函数对密码进行检测。
}
if(m==1)
{
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t\t\t您确定要挂失您的账户?\n   \t\t\t\t\t\t<1>确认    <2>取消   \n");
printf("\t\t\t\t└────────────────────────┘\n");
printf("\t\t\t请输入您的指令:");
scanf("%d",&n);
if(n==1)
{
strcpy(Ggua[guashu],gUser[i]);		//讲确定挂失的用户名称扔进数据库。
guashu++;							//增加一个挂失用户数据。
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t\t**********账户挂失成功!**********\n",gUser[i]);
printf("\t\t\t\t└────────────────────────┘\n");
}
if(n==2)
{
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t    ******************取消成功!******************\n");
printf("\t\t\t\t└────────────────────────┘\n");
zhucaidan();
}
}
}

void jiegua()      //解挂板块
{
int i,m,j;
i=mingyan();			// 进行调用用户名验证的操作。
m=guayan(i);			//进行调用挂失验证的操作。如果已经挂失则无法进行本次取款操作。
if(m==0)
m=miyan(i)+1;		//调用密码验证函数对密码进行检测。
if(m==2)
{
for(j=0;j<guashu;j++)
{
if(strcmp(gUser[i],Ggua[j])==0)		//如果数据库中没有输入的用户数据,则视为该用户未挂失,直接跳出这次循环。
break;
}
for(;j<guashu;j++)
{
strcpy(Ggua[j],Ggua[j+1]);			//如果数据中能找到输入的用户名,则讲此次输入的用户名拉出记录挂失的数据库,即解挂。
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t\t **********账户解挂成功!**********\n",gUser[i]);
printf("\t\t\t\t└────────────────────────┘\n");
guashu--;
}							//解挂成功后在挂失记录的数据库中减掉一个对应的用户数据。
}
else{
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t\t **********该用户未挂失!**********\n",gUser[i]);
printf("\t\t\t\t└────────────────────────┘\n");
zhucaidan();
}
}

int mingyan()     //用户名验证
{
int m=1,i;
char yonghuming[32];
while(m==1)
{
printf("\t\t\t请输入您的用户名: ");
scanf("%s",yonghuming);
for(i=0;i<UserShu;i++)
if(strcmp(gUser[i],yonghuming)==0) 		//如果输入的用户名与已储存的用户名一致,则视为验证通过。
{
m=0;
break;
}
if(i==UserShu)
{							//如果在已经储存的用户名中未找到输入的用户名,则视为验证未通过。
printf("\n\n\t\t\t\t┌──────────────────────────┐\n");
printf("\t\t\t\t    **********该用户不存在,请确认后重新输入**********\n");
printf("\t\t\t\t└──────────────────────────┘\n");
zhucaidan();
}
return i;
}

}

int guayan(int i)             					//挂失验证
{
int j,n;
for(j=0;j<guashu;j++)
{
if(strcmp(gUser[i],Ggua[j])==0) 		//如果已经储存的挂失用户名与输入的用户名 一致,即为该用户已经挂失,无法重复挂失。
{
printf("\n\n\t\t\t\t┌─────────────————─────────────┐\n");
printf("\t\t\t\t    **********此用户已经挂失,请解挂后再进行操作!**********\n");
printf("\t\t\t\t└─────────────——──——───────────┘\n");
n=0;
break;
zhucaidan();
}
}
if(j==guashu)
n=1;
return n;
}

int miyan(int i)    							//密码验证,为提高安全性,在每一个操作都会调用到本板块。
{
char mima[32];	 							// 定义一个储存输入的密码的变量
while(1)
{
printf("\t\t\t请输入您的密码: ");
scanf("%s",mima);
if(strcmp(gMima[i],mima)==0)			//如果输入的密码与数据库中的密码完全一致,即可视为密码正确。执行if中的语句。
{

printf("\n\t\t\t\t\t**********登陆成功!**********\n\n");
printf("\n\n\t\t\t\t┌────────────────────────┐\n");
printf("\t\t\t\t\t\t当前用户:%s \n",gUser[i]);									//显示用户名以及余额。
printf("\t\t\t\t└────────────────────────┘\n");
break;
}
else{									//如果输入的密码与数据库中的不一致即可视为密码错误,执行else中的语句。
printf("\n\n\t\t\t┌───────────────——───────────┐\n");
printf("\t\t\t  **********您输入的密码不正确,请确认后重新输入**********\n");
printf("\t\t\t└───────────────────——───────┘\n");
zhucaidan();
}
}
return 1;

}

void tuichu()   								//退出板块,因为没有使用txt文件进行永久性的储存,所以这个版块没有进行深入编写,直接退出!
{
denglu();
}

/*
void xiugaimima()   							//修改密码
{
char mima_temp[20];							//用来存放用户输入的密码
char new_mima[20];   						//存放第一次新密码
char new_mima1[20];
char name[32];
int i,m,j;

i=mingyan();	// 进行调用用户名验证的操作。

printf("\t\t\t\t\t请输入原始密码:");
scanf("%s",&mima_temp);
if(!strcmp(mima_temp,gMima))  				//比较原始密码 与 用户输入的密码
{
printf("\t\t\t\t\t请输入新密码:");
scanf("%s",&new_mima);
printf("\t\t\t\t\t请再输一次:");
scanf("%s",&new_mima1);
if(strcmp(new_mima1,new_mima)==0) 		//比较 两次修改后输入的密码
{
strcpy(gMima,new_mima); 			//将 新密码 拷贝给 原始密码,因为知道strcpy函数有这个覆盖的功能,所以先将就着用。
printf("\n\t\t\t\t******密码修改成功!请牢记!******\n");
zhucaidan();

}
else
{
printf("\n\t\t\t\t******两次输入的密码不一致!******\n");
zhucaidan();

}
}
else
{
printf("\n\t\t\t\t\t******原始密码错误!******\n");
zhucaidan();
}
}*/
void xiugaimima()   							//修改密码
{
char name[32];
char xmm1[10]= {0};
char xmm2[10]= {0};
char ch;	  						//存放第二次新密码
int i,m;
int t=0,j=0,r;
i=mingyan();		// 进行调用用户名验证的操作。
m=guayan(i);		//进行调用挂失验证的操作。如果已经挂失则无法进行本次取款操作。
if(m==1){
m=miyan(i);
printf("\t\t\t\t\t请输入新密码:");		//调用密码验证函数对密码进行检测。
scanf("%s",xmm1);

}
/*	while((ch=getch()!='\r'))
{
xmm1[i++]=ch;
putchar('*');
}*/
printf("\t\t\t\t\t请再输一次:");
scanf("%s",xmm2);
/*	while((ch=getch()!='\r'))
{
xmm2[j++]=ch;
putchar('*');
}*/
if(r=strcmp(xmm1,xmm2)!=0) 						//比较 两次修改后输入的密码
{

printf("\n\t\t\t\t******两次输入的密码不一致!******\n");
zhucaidan();
}
else
{
strcpy(gMima,xmm2); 			//将 新密码 拷贝给 原始密码,因为知道strcpy函数有这个覆盖的功能,所以先将就着用。
printf("\n\t\t\t\t******密码修改成功!请牢记!******\n");
zhucaidan();

}
}
  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
性感大学生 发布了2 篇原创文章 · 获赞 1 · 访问量 570 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: