职工信息管理系统(链表版)

(o.0)

信息管理系统一共分为8个功能,如下菜单所示。

void menu()
{
	printf("                                  ************职工管理系统*************\n");
	printf("                                  *        1. 添加职工                *\n");
	printf("                                  *        2. 查询职工                *\n");
	printf("                                  *        3. 对职工数据排序          *\n");
	printf("                                  *        4. 删除职工数据            *\n");
	printf("                                  *        5. 修改职工数据            *\n");
	printf("                                  *        6. 部门职工分析            *\n");
	printf("                                  *        7. 输出信息表              *\n");
	printf("                                  *        8. 保存信息                *\n");
	printf("                                  *        0. 退出程序                *\n");
	printf("                                  *************************************\n");
}

用链表实现系统的第一步要有一个链表,链表的创建包含添加职工函数中。将main函数中的头节点传入函数再用头插法创建链表。

st1 *input(st1*head)//录入职工信息 --------------
{
	int num,m;
	printf("请输入职工人数\n");
	//scanf("%d",&m);
	m=erro(m);
	st1 *j=head;
	st1 *p=head->next;//中间节点
	for(int i=0;i<m;i++)
	{
	    p=(st1*)malloc(sizeof(st1));
		printf("第%d个职工的编号\n",i+1);
		p->bh=erro(p->bh);
		printf("第%d个职工的姓名\n",i+1);
	    scanf("%s",&p->xm);
		printf("部门\n");
		scanf("%s",&p->bm);
		printf("职称\n");
		scanf("%s",&p->zc);
		printf("基本工资\n");
		p->jb=erro(p->jb);
		printf("加班工资\n");
		p->jbb=erro(p->jbb);
		printf("奖金\n");
		p->jj=erro(p->jj);
		p->zgj=p->jb+p->jbb+p->jj;
		//printf("总工资=%d\n"); 
		p->next=head->next;
		head->next=p;
		//p->next=head->next;
		//head->next=p;
	}
	return head;
}

 有了链表之后就可以愉快的实现其他功能了。

首先是查询,分为编号查询和姓名查询。这两个其实差不多,只需要把链表遍历一边找到需要的那个输出就行了。

void find(st1 *head,int no)//编号查询------------- 
{
	int i=0;
	st1 *p=head->next;
	while(p!=NULL)
	{
		if(no==p->bh)
		{
			printf("\n该职工的工资的信息如下:\n");
			printf("职工编号:%d\n",no);
			printf("姓名:");
			printf("%s\n",p->xm);
			printf("部门:");
			printf("%s\n",p->bm);
			printf("职称:");
			printf("%s\n",p->zc);
			printf("基本工资:");
			printf("%.3lf\n",p->jb);
			printf("加班工资:");
			printf("%.3lf\n",p->jbb);
			printf("奖金:");
			printf("%.3lf\n",p->jj);
			printf("总工资:");
			
			printf("%.3lf\n",p->zgj);
			p=p->next;
			i=1;
	    }
	    else
	        p=p->next;
    }
		if(i==0)
	    {
		    printf("查无此人!\n"); 
	    }
}
void finded(st1 *head,char* name)//姓名查询------------- 
{
	int i=0;
	st1 *p=head->next;
	while(p!=NULL)
	{
		if(strcmp(name,p->xm)==0)
		{
			printf("\n该职工的工资的信息如下:\n");
			printf("职工编号:%d\n",p->bh);
			//printf("姓名:");
			//printf("%s\n",p->xm);
			printf("部门:");
			printf("%s\n",p->bm);
			printf("职称:");
			printf("%s\n",p->zc);
			printf("基本工资:");
			printf("%.3lf\n",p->jb);
			printf("加班工资:");
			printf("%.3lf\n",p->jbb);
			printf("奖金:");
			printf("%.3lf\n",p->jj);
			printf("总工资:");
			
			printf("%.3lf\n",p->zgj);
			p=p->next;
			i=1;
	    }
	    else
	        p=p->next;
    }
		if(i==0)
	    {
		    printf("查无此人!\n"); 
	    }
}

然后是排序,这里运用冒泡排序的方法将总工资从小到大排列出来。

void paixu(st1 *head)//***********总工资 
{
	st1 *p,*q,*tail,*l;
	tail=NULL;
	while((head->next->next)!=tail)
	{
		p=head;
		q=head->next;
		while(q->next!=tail)
		{
			if((q->zgj)>(q->next->zgj))
			{
				p->next=q->next;
				q->next=q->next->next;
				p->next->next=q;
				q=p->next;
			}
			q=q->next;
			p=p->next;
		}
		tail=q;
	}
	 printf("排序完成 总工资从小到大为:\n");
	 l=head->next;
    while(l!=NULL)
    {
        if(l->next!=NULL)
            {
                printf("%s号%.3lf元->",l->xm,l->zgj);
                l=l->next;
            }
        else
        {
            printf("%s号%.3lf元",l->xm,l->zgj);
            l=l->next;
        }
    }
    printf("\n");
}

删除功能,仍然是遍历链表找到符合条件的节点进行删除,但是要注意删除后要重新将前后节点相连。

void dele(st1*head)
{
	int no,num=0;
	st1*p,*q,k;
	q=head;
	p=head;
	printf("请输入要删除员工的编号\n");
	no=first(no);
	//printf("%d\n",no);
	//printf("%d\n",p->bh);//p->第一个节点 
	while(p->next!=NULL)
	{
		if(no==p->next->bh)
		{
			k=*p;
			k.next=p->next->next;
			q=p->next;
			free(q);
			num++;
			break;
		}
		p=p->next;
	}
	if(num!=0)
	{
		printf("删除完成!\n");
	}
	else
	printf("查无此人!\n");
}

修改功能,遍历链表寻找要修改的节点。

void reget(st1* head)
{
	int no,n,num=0;
	int bb;
	st1*p;
	head:
		num=0;
	p=head;
	printf("请输入要修改的职工编号\n");
	no=erro(no);
	while(p!=NULL)
	{
		if(p->bh==no)
		{
			loop:
			num++;
			printf("请输入要修改的内容\n");
			printf("1:编号  2:姓名  3:部门  4:职称  5:基本工资  6:加班工资  7:奖金\n");
			n=first(n);
			switch(n)
			{
				case 1:
					printf("请输入\n");
					bb=erro(bb);
					p->bh=bb;
					printf("完成!\n");
					break;
				case 2:
					printf("请输入\n");
					scanf("%s",&p->xm);
					printf("完成!\n");
					break;
				case 3:
					printf("请输入\n");
					scanf("%s",&p->bm);
					printf("完成!\n");
					break;
				case 4:
					printf("请输入\n");
					scanf("%s",&p->zc);
					printf("完成!\n");
					break;
				case 5:
					printf("请输入\n");
					p->jb=erro(p->jb);
					printf("完成!\n");
					break;
				case 6:
					printf("请输入\n");
					p->jbb=erro(p->jbb);
					printf("完成!\n");
					break;
				case 7:
					printf("请输入\n");
					p->jj=erro(p->jj);
					printf("完成!\n");
					break;
				case 0:
					printf("输入错误\n");
					goto loop;
			}
            		
		}
		p=p->next;
		
		
	}
	if(num!=0)
		{
			printf("修改完成\n");
			printf("%d",num);
		}
		else
		{
		    char m[10];
		    printf("查无此人,按t退出\n");
		    scanf("%s",m);
			if(strcmp(m,"t")==0)
			{
				return;
			}
			goto head;
		}
}

分析平均工资的数据,并分析所要分析的职称在所有职称中的占比。仍然是遍历链表来计算。

void fenxi(st1*head)
{
	double x=0;
	char work[20];
	int num=0;
	st1*p;st1*k;
	p=head->next;
	k=head->next;
	printf("平均工资:\n");
	while(p!=NULL)
	{
		x=x+p->zgj;
		num++;
		p=p->next;
	}
	printf("%.3lf\n",x/num);
	loop:
	int i=0;int j=0;
	printf("请输入要查询的职称\n");
	scanf("%s",work);
	while(k!=NULL)
	{
		if(strcmp(work,k->zc)==0)
		{
			j++;
		}
		i++;
		if(k->next!=NULL)
		{
			k=k->next;
		}
		else
		break;
	}
	if(j==0)
	{
		printf("暂没有此职称,请重新输入\n");
		getchar();
		goto loop;
	}
	else
	{
		printf("职务%s:%d /100\n",k->zc,100*j/i);
	}
}

最后就可以将信息输出确保无误后保存在文件里。

void print(st1*head)
{
	st1*p;
	p=head->next;
	while(p!=NULL)
	{
		printf("********************\n");
		printf("* 编号:%d\n",p->bh);
		printf("* 姓名:%s\n",p->xm);
		printf("* 部门:%s\n",p->bm);
		printf("* 职称:%s\n",p->zc);
		printf("* 基本工资:%.3lf\n",p->jb);
		printf("* 加班工资:%.3lf\n",p->jbb);
		printf("* 奖金:%.3lf\n",p->jj);
		printf("********************\n");
		p=p->next;
	}
}
void baocun(st1*head)
{
	FILE *fp;
	int i,d;
	st1*p;
	p=head->next;
	fp=fopen("职工信息.txt","w");
	if(fp==NULL)
	{
		printf("file\n");
		exit(0);
	}
	fprintf(fp,"编号\t");
	fprintf(fp,"姓名\t");
	fprintf(fp,"部门\t");
	fprintf(fp,"职称\t");
	fprintf(fp,"基本工资\t");
	fprintf(fp,"加班工资\t");
	fprintf(fp,"奖金\t");
	fprintf(fp,"\n");
	while(p!=NULL)
	{
		fprintf(fp,"%d\t",p->bh);
		fprintf(fp,"%s\t",p->xm);
		fprintf(fp,"%s\t",p->bm);
		fprintf(fp,"%s\t",p->zc);
		fprintf(fp,"%.3lf    \t",p->jb);
		fprintf(fp,"%.3lf    \t",p->jbb);
		fprintf(fp,"%.3lf\t",p->jj);
		fprintf(fp,"\n");
		p=p->next;
	}
	fclose(fp);
}

完整代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct student 
	{
		int bh;//编号
		char xm[40];//姓名 
		char bm[20];//部门
		char zc[20];//职称 
		double jb;//基本工资
		double jbb;//加班工资 
		double jj;//奖金 
		double zgj;//总工资 
		struct student *next;
	}st1;
void menu()
{
	printf("                                  ************职工管理系统*************\n");
	printf("                                  *        1. 添加职工                *\n");
	printf("                                  *        2. 查询职工                *\n");
	printf("                                  *        3. 对职工数据排序          *\n");
	printf("                                  *        4. 删除职工数据            *\n");
	printf("                                  *        5. 修改职工数据            *\n");
	printf("                                  *        6. 部门职工分析            *\n");
	printf("                                  *        7. 输出信息表              *\n");
	printf("                                  *        8. 保存信息                *\n");
	printf("                                  *        0. 退出程序                *\n");
	printf("                                  *************************************\n");
}
double erro(double num)//开头编号选择----------
{
	while(1)
	{
		if(scanf("%lf",&num)==0)
		{
			while(getchar()!='\n');
		}
		else if(num<=11000&&num>=0)
		{
			break;
		}
		printf("输入错误\n");
	}
}
int first(int num)//开头编号选择----------
{
	int i=5;
	while(1)
	{
		if(scanf("%d",&num)==0)
		{
			while(getchar()!='\n');
		}
		else if(num==1||num==2||num==3||num==4||num==5||num==6||num==7||num==0||num==8)
		{
			break;
		}
		printf("输入错误(%d)\n",i);
		i--;
		if(i==0)
        {
        	printf("结束了!!!");
        	getchar();
        	exit(0);
		}
	}
}
/*void replay(st1 *head,st1 *p,int n)//编号查重 
{
	while(1)
	{
		
	}
} */
st1 *input(st1*head)//录入职工信息 --------------
{
	int num,m;
	printf("请输入职工人数\n");
	//scanf("%d",&m);
	m=erro(m);
	st1 *j=head;
	st1 *p=head->next;//中间节点
	for(int i=0;i<m;i++)
	{
	    p=(st1*)malloc(sizeof(st1));
		printf("第%d个职工的编号\n",i+1);
		p->bh=erro(p->bh);
		printf("第%d个职工的姓名\n",i+1);
	    scanf("%s",&p->xm);
		printf("部门\n");
		scanf("%s",&p->bm);
		printf("职称\n");
		scanf("%s",&p->zc);
		printf("基本工资\n");
		p->jb=erro(p->jb);
		printf("加班工资\n");
		p->jbb=erro(p->jbb);
		printf("奖金\n");
		p->jj=erro(p->jj);
		p->zgj=p->jb+p->jbb+p->jj;
		//printf("总工资=%d\n"); 
		p->next=head->next;
		head->next=p;
		//p->next=head->next;
		//head->next=p;
	}
	return head;
}
void find(st1 *head,int no)//职工查询------------- 
{
	int i=0;
	st1 *p=head->next;
	while(p!=NULL)
	{
		if(no==p->bh)
		{
			printf("\n该职工的工资的信息如下:\n");
			printf("职工编号:%d\n",no);
			printf("姓名:");
			printf("%s\n",p->xm);
			printf("部门:");
			printf("%s\n",p->bm);
			printf("职称:");
			printf("%s\n",p->zc);
			printf("基本工资:");
			printf("%.3lf\n",p->jb);
			printf("加班工资:");
			printf("%.3lf\n",p->jbb);
			printf("奖金:");
			printf("%.3lf\n",p->jj);
			printf("总工资:");
			
			printf("%.3lf\n",p->zgj);
			p=p->next;
			i=1;
	    }
	    else
	        p=p->next;
    }
		if(i==0)
	    {
		    printf("查无此人!\n"); 
	    }
}
void finded(st1 *head,char* name)//职工查询------------- 
{
	int i=0;
	st1 *p=head->next;
	while(p!=NULL)
	{
		if(strcmp(name,p->xm)==0)
		{
			printf("\n该职工的工资的信息如下:\n");
			printf("职工编号:%d\n",p->bh);
			//printf("姓名:");
			//printf("%s\n",p->xm);
			printf("部门:");
			printf("%s\n",p->bm);
			printf("职称:");
			printf("%s\n",p->zc);
			printf("基本工资:");
			printf("%.3lf\n",p->jb);
			printf("加班工资:");
			printf("%.3lf\n",p->jbb);
			printf("奖金:");
			printf("%.3lf\n",p->jj);
			printf("总工资:");
			
			printf("%.3lf\n",p->zgj);
			p=p->next;
			i=1;
	    }
	    else
	        p=p->next;
    }
		if(i==0)
	    {
		    printf("查无此人!\n"); 
	    }
}
void paixu(st1 *head)//***********总工资 
{
	st1 *p,*q,*tail,*l;
	tail=NULL;
	while((head->next->next)!=tail)
	{
		p=head;
		q=head->next;
		while(q->next!=tail)
		{
			if((q->zgj)>(q->next->zgj))
			{
				p->next=q->next;
				q->next=q->next->next;
				p->next->next=q;
				q=p->next;
			}
			q=q->next;
			p=p->next;
		}
		tail=q;
	}
	 printf("排序完成 总工资从小到大为:\n");
	 l=head->next;
    while(l!=NULL)
    {
        if(l->next!=NULL)
            {
                printf("%s号%.3lf元->",l->xm,l->zgj);
                l=l->next;
            }
        else
        {
            printf("%s号%.3lf元",l->xm,l->zgj);
            l=l->next;
        }
    }
    printf("\n");
}
void paixu2(st1*head)
{
	st1 *p,*q,*tail,*l;
	tail=NULL;
	while((head->next->next)!=tail)
	{
		p=head;
		q=head->next;
		while(q->next!=tail)
		{
			if((q->jb)>(q->next->jb))
			{
				p->next=q->next;
				q->next=q->next->next;
				p->next->next=q;
				q=p->next;
			}
			q=q->next;
			p=p->next;
		}
		tail=q;
	}
	 printf("排序完成 基本工资从小到大为:\n");
	 l=head->next;
    while(l!=NULL)
    {
        if(l->next!=NULL)
            {
                printf("%s号%.3lf元->",l->xm,l->jb);
                l=l->next;
            }
        else
        {
            printf("%s号%.3lf元",l->xm,l->jb);
            l=l->next;
        }
    }
    printf("\n");
}	
void dele(st1*head)
{
	int no,num=0;
	st1*p,*q,k;
	q=head;
	p=head;
	printf("请输入要删除员工的编号\n");
	no=first(no);
	//printf("%d\n",no);
	//printf("%d\n",p->bh);//p->第一个节点 
	while(p->next!=NULL)
	{
		if(no==p->next->bh)
		{
			k=*p;
			k.next=p->next->next;
			q=p->next;
			free(q);
			num++;
			break;
		}
		p=p->next;
	}
	if(num!=0)
	{
		printf("删除完成!\n");
	}
	else
	printf("查无此人!\n");
}
void reget(st1* head)
{
	int no,n,num=0;
	int bb;
	st1*p;
	head:
		num=0;
	p=head;
	printf("请输入要修改的职工编号\n");
	no=erro(no);
	while(p!=NULL)
	{
		if(p->bh==no)
		{
			loop:
			num++;
			printf("请输入要修改的内容\n");
			printf("1:编号  2:姓名  3:部门  4:职称  5:基本工资  6:加班工资  7:奖金\n");
			n=first(n);
			switch(n)
			{
				case 1:
					printf("请输入\n");
					bb=erro(bb);
					p->bh=bb;
					printf("完成!\n");
					break;
				case 2:
					printf("请输入\n");
					scanf("%s",&p->xm);
					printf("完成!\n");
					break;
				case 3:
					printf("请输入\n");
					scanf("%s",&p->bm);
					printf("完成!\n");
					break;
				case 4:
					printf("请输入\n");
					scanf("%s",&p->zc);
					printf("完成!\n");
					break;
				case 5:
					printf("请输入\n");
					p->jb=erro(p->jb);
					printf("完成!\n");
					break;
				case 6:
					printf("请输入\n");
					p->jbb=erro(p->jbb);
					printf("完成!\n");
					break;
				case 7:
					printf("请输入\n");
					p->jj=erro(p->jj);
					printf("完成!\n");
					break;
				case 0:
					printf("输入错误\n");
					goto loop;
			}
            		
		}
		p=p->next;
		
		
	}
	if(num!=0)
		{
			printf("修改完成\n");
			printf("%d",num);
		}
		else
		{
		    char m[10];
		    printf("查无此人,按t退出\n");
		    scanf("%s",m);
			if(strcmp(m,"t")==0)
			{
				return;
			}
			goto head;
		}
}
void fenxi(st1*head)
{
	double x=0;
	char work[20];
	int num=0;
	st1*p;st1*k;
	p=head->next;
	k=head->next;
	printf("平均工资:\n");
	while(p!=NULL)
	{
		x=x+p->zgj;
		num++;
		p=p->next;
	}
	printf("%.3lf\n",x/num);
	loop:
	int i=0;int j=0;
	printf("请输入要查询的职称\n");
	scanf("%s",work);
	while(k!=NULL)
	{
		if(strcmp(work,k->zc)==0)
		{
			j++;
		}
		i++;
		if(k->next!=NULL)
		{
			k=k->next;
		}
		else
		break;
	}
	if(j==0)
	{
		printf("暂没有此职称,请重新输入\n");
		getchar();
		goto loop;
	}
	else
	{
		printf("职务%s:%d /100\n",k->zc,100*j/i);
	}
}
void print(st1*head)
{
	st1*p;
	p=head->next;
	while(p!=NULL)
	{
		printf("********************\n");
		printf("* 编号:%d\n",p->bh);
		printf("* 姓名:%s\n",p->xm);
		printf("* 部门:%s\n",p->bm);
		printf("* 职称:%s\n",p->zc);
		printf("* 基本工资:%.3lf\n",p->jb);
		printf("* 加班工资:%.3lf\n",p->jbb);
		printf("* 奖金:%.3lf\n",p->jj);
		printf("********************\n");
		p=p->next;
	}
}
void baocun(st1*head)
{
	FILE *fp;
	int i,d;
	st1*p;
	p=head->next;
	fp=fopen("职工信息.txt","w");
	if(fp==NULL)
	{
		printf("file\n");
		exit(0);
	}
	fprintf(fp,"编号\t");
	fprintf(fp,"姓名\t");
	fprintf(fp,"部门\t");
	fprintf(fp,"职称\t");
	fprintf(fp,"基本工资\t");
	fprintf(fp,"加班工资\t");
	fprintf(fp,"奖金\t");
	fprintf(fp,"\n");
	while(p!=NULL)
	{
		fprintf(fp,"%d\t",p->bh);
		fprintf(fp,"%s\t",p->xm);
		fprintf(fp,"%s\t",p->bm);
		fprintf(fp,"%s\t",p->zc);
		fprintf(fp,"%.3lf    \t",p->jb);
		fprintf(fp,"%.3lf    \t",p->jbb);
		fprintf(fp,"%.3lf\t",p->jj);
		fprintf(fp,"\n");
		p=p->next;
	}
	fclose(fp);
}
int main()
{
	int num;
	st1 *head=(st1*)malloc(sizeof(st1));
	head->next=NULL;
	do
	{
		menu();
		printf("请选择!\n");
		num=first(num);
		    switch(num)
	    {
		    case 1:
		        head=input(head);
		        getchar();
		        printf("按任意键返回主菜单\n");
				getchar(); 
				system("cls");
		        break;
		    case 2:
		    	rein:
		        int no,fi;
				char name[40]; 
		    	printf("1:按编号查  2:按姓名查\n");
		    	fi=first(fi);
		    	if(fi==1)
		    	{
		    	   printf("请输入要查找的员工编号\n");
	               no=erro(no);
		    	   find(head,no);//编号的输入 	
				}
		    	else if(fi==2)
		    	{
		    		printf("请输入员工姓名\n");
		    		scanf("%s",name);
					finded(head,name);
				}
				else
				{
					printf("请重新输入\n");
					goto rein;
				}
				getchar();
				printf("按任意键回到菜单\n");
				getchar();
				system("cls");
				break;
		    case 3:
		        loop:
		        	int choice;
		        	printf("1;总工资排序 2;基本工资排序\n") ;
		        	choice=first(choice);
		        	if(choice==1)
		        	{
		           		paixu(head);
				   	}
		    	    else if(choice==2)
		    	    {
		    	   	    paixu2(head);
				    }
				    else 
				    {
				   		printf("请重新输入\n");
				   		goto loop;
				    }
				    getchar();
				    printf("按任意键回到菜单\n");
			        getchar();
			        system("cls");
				    break;
		   	case 4:
		    		{
		    			dele(head);
		    			getchar();
				        printf("按任意键回到菜单\n");
			        	getchar();
			        	system("cls");
			        	break;
					} 
			case 5:
					{
						char m[40];
						lll:
						reget(head);
						mmm:
						printf("是否继续修改?(yes/no)\n");
						scanf("%s",&m);
	                    if(strcmp(m,"yes")==0)
	                    {
		                    goto lll;
	                    }
	                    else if(strcmp(m,"no")==0)
	                    {
		                    getchar();
				        printf("按任意键回到菜单\n");
			        	getchar();
			        	system("cls");
			        	break;
	                    }
	                    else
	                    {
	                    	printf("请重新输入!\n");
	                    	goto mmm;
						}
						getchar();
				        printf("按任意键回到菜单\n");
			        	getchar();
			        	system("cls");
			        	break;
					}  
			case 6:
			        {
			        	char reg[20];
			        	no1:
				        fenxi(head);
				        no2:
				        printf("是否继续查询?(yes/no)\n");
						scanf("%s",&reg);
	                    if(strcmp(reg,"yes")==0)
	                    {
		                    goto no1;
	                    }
	                    else if(strcmp(reg,"no")==0)
	                    {
		                   getchar();
				        printf("按任意键回到菜单\n");
			        	getchar();
			        	system("cls");
			        	break;
	                    }
	                    else
	                    {
	                    	printf("请重新输入!\n");
	                    	goto no2;
						}
				        getchar();
				        printf("按任意键回到菜单\n");
			        	getchar();
			        	system("cls");
			        	break;
					}
			case 7:
			        {
			        	print(head);
			            getchar();
				        printf("按任意键回到菜单\n");
			        	getchar();
			        	system("cls");
			        	break;
					}
			case 8:     baocun(head);
			            printf("保存完成!\n");
		             	getchar();
				        printf("按任意键回到菜单\n");
			        	getchar();
			        	system("cls");
			        	break;
					{
						
					}
			case 0:
			        {
				         printf("感谢使用!");
					}				
	    }
	}while(num);
}

代码很烂,大家互相学习。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值