C语言文件IO实现图书馆管理系统,登录、注册、借书、还书和新增书籍

一、简单实现

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAUGFzc2Jlcnk=,size_20,color_FFFFFF,t_70,g_se,x_16

library.c

#include<stdio.h>        //图书馆管理系统面向多用户,最多可借十本书 
#include<string.h>       
#include<stdlib.h>       //书籍管理者,账号 :management 密码:自定义   
#include"manage.h"      

FILE *ma;     
FILE *fp, *yh, *pt, *yh1; 
int a=1;

int main(void)
{  
    int number;
	int bookamount, i=0, sizename;
    char title[10], title1[10], returnbook[10];
	char username[20], username1[20], username2[20], password[10], password1[10];
	char simplebook[10], allbook[10][10] = {"1","1","1","1","1","1","1","1","1","1"};  
	
	printf("==========欢迎来到图书馆==========\n"); 
	break1: printf("1:登录\n2:注册\n3:退出\n输入操作序号:");
	
	number = number_1();  //返回操作数字 
	if (number == 3) 
	{
		exit_t();
	}
	
    printf("用户名:");
	scanf("%s", &username);   
	printf("密码:");
	scanf("%s", &password);
	
	char content[20] = "目录#";
	strcpy(username2, username);
	strcat(username2, "||");
	strcat(content, username); 
	strcat(username, "||");
	strcat(username, password);  //合并用户名和密码 

	//登录 
	if (number == 1)
	{
		fp = fopen("userinfo1", "r");

		while (fscanf(fp, "%s", username1) == 1) 
		{
			if (strcmp(username, username1)!=0) //用户名和密码验证 
			{
			    a = 0; 
	    	}
		    else
		    {
		    	printf("登录成功!\n");
				a = 1; 
				break;
			}
		}

		if (a == 0)
		{
			printf("登录失败!用户或密码错误!\n");
			goto break1;  
		}
	}
	
	else if (number ==2 )   //注册
	{	
		printf("密码确认:");
		scanf("%s", &password1);
		
		sizename = sizeusername(username2);    //返回输入了多少个字符串 
		
		fp = fopen("userinfo1", "r");           //验证用户名是否重复 
		while (fscanf(fp, "%s", username1) == 1)   
		{
			if (strncmp(username1, username2, sizename) == 0)
			{
				printf("用户名重复!\n");
				fclose(fp);
				goto break1; 
			}	
			
		} 
		
		fclose(fp);
		
		if (strcmp(password, password1) != 0)
		{
			printf("注册失败!密码不一致。\n"); 
			goto break1;   
		}
		
		else
		{
			printf("注册成功!\n");
			strcat(username, "\n");       //合并换行,加入换行是为了更好的在文件中显示
			fp = fopen("userinfo1", "a+");
			fprintf(fp, username);        
		}
	}
	
	if (strncmp(username, "management||", 7) == 0);	//判断是否为管理员,如果是管理员跳转
	{
	    management();	
	}
		  	 
	allbooktitle();     

	//借书还书
	break2: printf("1:借书\n2:还书\n3:退出\n输入操作序号:");
	
	number = number_1();    
	
	yh = fopen(content, "a+"); 
   
	if (number == 1)          //借书,限制借书本数10本 
	{ 
		bookamount = 0; 
		
		while (fscanf(yh, "%s", title1) == 1)
		{
			bookamount++;	
		}
	
		if (bookamount < 10)    //判断借书是否超过10本 
		{
		    printf("输入借书名称:"); 
	        scanf("%s", title);
		    
	        yh1 = fopen(content, "r"); 
		    while (fscanf(yh1, "%s", title1) == 1) 
			{
			    if (strcmp(title1, title) == 0)
			    {
			    	printf("已借此书!\n");
			    	fclose(yh1);
			    	goto break2;
				}
			} 
			 
		    fclose(yh1);
		     
		    a = findbook(title);
		    
		    if (a != 0)
	    	{
		    	printf("查无此书!\n");
		    	goto break2;
		    }
		    strcat(title, "\n");   
	    	fprintf(yh, title);    
	    	fclose(yh);           
	    	printf("借书成功!\n"); 
	    	goto break2;
		}
		
	    else
	    {
	    	printf("借书数量以上线,请还书!\n");
	    	goto break2;  
		}	
	}
	
	else if (number == 2 )           //还书 
	{
		a = 0; 
		printf("已借书目录:\n");             //打印已借书目录
		
		while (fscanf(yh, "%s", title1)==1)
		{
			a++;
			printf(" %s 、", title1);
			if(a % 5 == 0)
			printf("\n");else;
		} 
		
		printf("\n还书名称:");
		scanf("%s", returnbook); 
		fseek(yh, 0L, SEEK_SET); 
		           
		while (fscanf(yh, "%s", title1) == 1) 
		{   
		    a = 1;
			if (strcmp(title1,returnbook) == 0)  //检查是否有此书,返回为0则有 
			{
			    bookamount = 0;
				fseek(yh, 0L, SEEK_SET);   
				     
				while (fscanf(yh, "%s", simplebook) == 1)    //将已借的书储存在数组中 
				{
					strcpy(allbook[bookamount], simplebook);
					bookamount++;
			    }
			    
				fclose(yh);                    
				pt = fopen(content, "w");
				         
				for (i = 0; i < 10; i++)
				{
					if (strcmp(allbook[i], "1") == 0) break;
					if (strcmp(allbook[i], returnbook) != 0)
					{
						strcat(allbook[i], "\n");
						fprintf(pt, allbook[i]);
					}
				}
				
				printf("还书成功!\n");
				fclose(pt);      
			    break;
			}
		    else a = 0;	
		}
		if (a != 1)
		{
			printf("查无此书!请重新操作。\n");
		}
	    
		goto break2;   
	}
	else  //退出
	{
		exit_t();
	}
	
	
    return 0;
}

management.h

#include<stdio.h>  
#include<string.h>
#include<stdlib.h>

extern FILE *fp, *yh, *pt, *yh1; 
extern FILE *ma;
extern int a;

int number_1()   //得出操作数字 
{
	int breaknumber;
	char number1[10];
	
	while ( scanf("%s", &number1) )  
	
	{
		if (strcmp(number1, "1") == 0)
		{
			breaknumber = 1;
			return breaknumber;
			break;
		}
		else if ( strcmp(number1, "2")==0 )
		{
			breaknumber=2;
			return breaknumber;
			break;
		}
		else if ( strcmp(number1, "3") == 0)
		{
			breaknumber=3;
			return breaknumber;
			break;
		}
		else
		{
			printf("输入错误!\n输入操作序号:");
		}
	}
} 
 
int sizeusername(char s[20])  //得出输入了多少个字符串 
{
	int i = 0, ch = 0;
	
	while ( s[i] != '\0')
	{
		ch++; 
		i++;
	}
	return ch;
}

void exit_t()  //退出 
{
	printf("退出成功!\n");
	fclose(fp);
	fclose(yh);
	exit(0);
}

void allbooktitle()  //输出图书馆书籍 
{
	a=0;
	char bookname[10];
	ma=fopen("书籍","r");
	
	printf("图书馆书籍:\n");
	
	while ( fscanf(ma, "%s", bookname) == 1)
	{
	    a++;
	    printf(" %s 、", bookname);
	    if(a%8==0)
	    {
	    	printf("\n");
		}  
	}
	
	fclose(ma);
	printf("\n");
	
 } 
 
int findbook(char bookname[10])   //判断书籍中是否有此书 
 {
    char simplebook[10];
    
    ma = fopen("书籍","r");
    
	while ( fscanf(ma, "%s", simplebook) == 1)  
	{  
		a=1;
		if( strcmp(simplebook, bookname) == 0) 
		{
			a=0;
			break;
		}
	}
	
	fclose(ma);
	return a;
}
 
void management()  
{
	int number;
	char bookname[10],title1[10];
	
	break3: printf("1:更改书籍\n2:查看数据\n3:退出\n输入操作序号:");
	
	number = number_1();
	if (number == 1)  
	{
	    break4:	printf("1:添加\n2:删除\n3:返回\n输入操作序号:");
		number = number_1();
		
		if(number == 1)        //添加 
		
		{
			ma = fopen("书籍", "a+");
		    printf("输入书籍名称:");
		    scanf("%s",&bookname); 
		    
		    yh1 = fopen("书籍", "r"); 
		    while( fscanf(yh1, "%s", title1) == 1) 
			{
			    if( strcmp(title1, bookname) == 0)
			    {
			    	printf("已有此书!\n");
			    	fclose(yh1);
			    	goto break4;
				}
			} 
			 
		    fclose(yh1);
		   
		    strcat(bookname, "\n");
		    fprintf(ma, bookname);
	    	fclose(ma);
	    	printf("添加成功!\n");
		    goto break4;
		}
		
		else if (number == 2)     //删除 
		
		{
			allbooktitle();
			
			FILE *ma1;
			char outbook[10];
			
			printf("输入移除的书籍:"); 
			scanf("%s", &outbook);
			
			a = findbook(outbook);
			
			if (a != 0);
	    	{
		    	printf("查无此书!\n");
		    	goto break4;
		    }
		    
			ma = fopen("书籍", "r");
			ma1 = fopen("中间书籍", "w");
			while (fscanf(ma, "%s", bookname) == 1)
			{
				if (strcmp(bookname, outbook) != 0)
				{
					strcat(bookname, "\n");
					fprintf(ma1, bookname);
				}
			} 
			
			fclose(ma1);
			fclose(ma);
			
			ma=fopen("书籍", "w");
			ma1=fopen("中间书籍", "r");
			
			while(fscanf(ma1, "%s", bookname)==1)
			{
				strcat(bookname, "\n");
				fprintf(ma, bookname);
			}
			
			fclose(ma1);
			fclose(ma);
			
			printf("删除成功!\n");
			goto break4;
		}
		
		else goto break3;
	}
	
	else if (number == 2) 
	{
	    break5:	printf("1:查看书籍\n2:查看用户\n3:返回\n输入操作序号:");
	    
		number = number_1();
		
		if(number == 1)      //查看书籍 
		{
			allbooktitle();
	    	goto break5;
		}
		
		else if (number == 2)  //查看用户
		{
			ma = fopen("userinfo1", "r");
			printf("用户名||密码:\n");
			
			while(fscanf(ma, "%s", bookname) == 1)
			{
				printf("%s", bookname);
				printf("\n");
			}
			
	    	fclose(ma);
		    goto break5;
		}
		else goto break3;
	}
	else exit_t();    //退出 
}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAUGFzc2Jlcnk=,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAUGFzc2Jlcnk=,size_20,color_FFFFFF,t_70,g_se,x_16

       首次使用要先注册名称management,密码自定义,作为管理将书籍写入,有错请联系删改,谢谢!

       建议:文件指针的引用很乱,建议自己写代码时不要定义全局变量;可以通过函数传递指针,用完文件指针及时关闭,goto最好语句不要用。

   要养成良好的代码书写格式。

1a0618c0a4b240bc8c491691bf3b6d58.png

二、加入链表

具体内容不变,相关函数变了。

manage2.h

#ifndef MANAGE_H_
#define MANAGE_H_

#include<stdio.h>  
#include<string.h>
#include<stdlib.h>
#include<stdbool.h> 

typedef struct node
{
	char Item[20];
	struct node *next;
	
}Node;

typedef struct{
	Node *list;
}Link;

/*得出输入数字                            */
/*返回值为1,2,3                         */ 
int number_1(void);

/*得出输入了多少个字符串                  */
int sizeusername(char s[20]);

/*退出                                    */
void exit_t(Link *plist);
 
/*管理员                                  */ 
void management(Link* plist);
 
/*链表初始化                              */
void InitializeList(Link* plist);

/*确定链表是否为空                        */
bool ListIsEmpty(const Link* plist);

/*确定链表是否为满                        */
/*返回true为还有内存空间,否则无可利用空间*/ 
bool ListIsFull(const Link* plist);

/*链表末尾添加项                          */
/*返回true添加成功,否则失败              */ 
bool AddItem(char item[], Link *plist);

/*遍历链表,把函数作用于每一项            */
/*返回true为找到传入的字符串,否则没有该项*/ 
bool Traverse(const Link* plist, void (*pfun)(char item[]), char str[]);

/*释放已分配内存                          */
void EmptyTheLlist(Link* plist);

/*链表实现书籍的输出                      */ 
void allbooktitle(Link* plist); 
  
#endif

manage2.c

#include"manage.h"
#include<stdio.h>  
#include<string.h>
#include<stdlib.h>
#include<stdbool.h> 

extern FILE *fp, *yh, *pt, *yh1; 
extern FILE *ma;
extern int a;

/*输出函数            */ 
static void ShowItem(char item[]);

/*得出输入数字 */
int number_1(void)   
{
	int breaknumber;
	char number1[10];
	while (scanf("%s", &number1)) {
		if (strcmp(number1, "1") == 0) {
			breaknumber = 1;
			return breaknumber;
		}
		else if (strcmp(number1, "2") == 0 ) {
			breaknumber = 2;
			return breaknumber;
		}
		else if (strcmp(number1, "3") == 0) {
			breaknumber = 3;
			return breaknumber;
			break;
		}
		else
		    printf("输入错误!\n输入操作序号:");
	}
} 

 /*得出输入了多少个字符串*/
int sizeusername(char s[20])   
{
	int i = 0, ch = 0;
	while(s[i] != '\0') {
		ch++; 
		i++;
	}
	return ch;
}

/*退出 */
void exit_t(Link *plist)  
{
	EmptyTheLlist(plist);
	printf("退出成功!\n");
	fclose(fp);
	fclose(yh);
	exit(0);
}
 
 /*管理员*/ 
void management(Link* plist)  
{
	bool right;
	int number;
	char bookname[10], title1[10];
break3: printf("1:更改书籍\n2:查看数据\n3:退出\n输入操作序号:");
	number = number_1();
	if (number == 1) {
break4:	printf("1:添加\n2:删除\n3:返回\n输入操作序号:");
		number = number_1();
		if (number == 1) {//添加
			ma = fopen("书籍", "a+");
		    printf("输入书籍名称:");
		    scanf("%s", &bookname); 
		    
		    yh1 = fopen("书籍", "r"); 
		    while (fscanf(yh1, "%s", title1) == 1) {
			    if (strcmp(title1, bookname) == 0) {
			    	printf("已有此书!\n");
			    	fclose(yh1);
			    	goto break4;
				}
			}  
		    fclose(yh1);
		   
		    strcat(bookname, "\n");
		    fprintf(ma, bookname);
	    	fclose(ma);
	    	printf("添加成功!\n");
		    goto break4;
		}
		else if(number==2){     //删除  
			allbooktitle(plist);
			FILE *ma1;
			char outbook[10];
			printf("输入移除的书籍:"); 
			scanf("%s", &outbook);
			
			right = Traverse(plist, NULL, outbook);
			
			if (right == false) {
		    	printf("查无此书!\n");
		    	goto break4;
		    }
			ma = fopen("书籍", "r");
			ma1 = fopen("中间书籍", "w");
			while (fscanf(ma, "%s", bookname) == 1) {
				if (strcmp(bookname, outbook) != 0) {
					strcat(bookname,"\n");
					fprintf(ma1,bookname);
				} 
			} 
			fclose(ma1);
			fclose(ma);
			ma = fopen("书籍", "w");
			ma1 = fopen("中间书籍", "r");
			while(fscanf(ma1, "%s", bookname) == 1) {
				strcat(bookname, "\n");
				fprintf(ma, bookname);
			}
			fclose(ma1);
			fclose(ma);
			printf("删除成功!\n");
			goto break4;
		}
		else
		    goto break3;
	}
	else if(number == 2) 
	{
	    break5:	printf("1:查看书籍\n2:查看用户\n3:返回\n输入操作序号:");
		number = number_1();
		if (number == 1){      //查看书籍  
			allbooktitle(plist);
	    	goto break5;
		}
		else if (number == 2)  //查看用户
		{
			ma = fopen("userinfo1","r");
			printf("用户名||密码:\n");
			while (fscanf(ma, "%s", bookname) == 1) {
				printf("%s",bookname);
				printf("\n");
			}
	    	fclose(ma);
		    goto break5;
		}
		else
		    goto break3;
	}
	else 
	    exit_t(NULL);    //退出 
}

/*链表初始化*/
void InitializeList(Link* plist)
{
	plist->list = NULL;
}

/*确定链表是否为空          */
bool ListIsEmpty(const Link* plist)
{
	if (plist->list == NULL) {
		return false;
	}
	else {
		return true;
	}
}

/*确定链表是否为满          */
bool ListIsFull(const Link* plist)
{
	int num;
	Node* p;
	p = (Node*)malloc(sizeof(Node));
	if (p == NULL) {
		num = 0;
	}
	else {
		num = 1;
	}
	free(p);
	if (num == 0)
		return false;
	else
		return true;
}

/*链表末尾添加项            */
bool AddItem(char item[], Link* plist)
{
	bool full = ListIsFull(plist);
	if (full == false) {
		printf("链表以满!\n");
		return false;
	}
	Node* pnew;
	Node* scan = plist->list;
	pnew = (Node*)malloc(sizeof(Node));
	if (pnew == NULL) {
		return false;
	}
	strcpy(pnew->Item, item);
	pnew->next = NULL;
	if (plist->list == NULL) {
		plist->list = pnew;
	}
	else
	{
		while (scan->next != NULL) {
			scan = scan->next;
		}
		scan->next = pnew;
	}
	return true;
}

/*遍历链表,把函数作用于每一项*/
bool Traverse(const Link* plist, void (*pfun)(char item[]), char str[])
{
	
	int n = 0;
	bool right;
	if(right = ListIsEmpty(plist) == false)
	{
		printf("无书籍\n");
		return false;
	}
	Node* scan = plist->list;
	if(str == NULL){
		printf("图书馆书籍:\n");
	    while (scan != NULL) {
	    	(*pfun)(scan->Item);
		    scan = scan->next;
		    n++;
		    if(n%8 == 0){
			    printf("\n");
		    }
		}
		return true;
	}
	else{
		while (scan != NULL) { 
		    if (strcmp(scan->Item,str) == 0){
		    	return true;
			} 
			scan = scan->next;
		}
	}
	return false;
}

/*输出函数            */ 
static void ShowItem(char item[])
{
	printf("% -15s ", item);
}

/*释放已分配内存            */
void EmptyTheLlist(Link* plist)
{
	Node* psave;
	while (plist->list = NULL)
	{
		psave = plist->list->next;
		free(plist->list);
		plist->list = psave;
	}
}

/*链表实现书籍的输出  */ 
void allbooktitle(Link* plist)
{
	bool right;
	EmptyTheLlist(plist);
	FILE* fpuser;
	fpuser = fopen("书籍", "r");
	char bookname[10];
	InitializeList(plist);
	while (fscanf(fpuser, "%s", bookname) == 1)
	{
		right = AddItem(bookname, plist);
		if(right == false){
			return; 
		}
	}
	Traverse(plist, ShowItem, NULL);
	fclose(fpuser);
	printf("\n");
}

library2.c

#include<stdio.h>        //图书馆管理系统面向多用户,最多可借十本书 
#include<string.h>       
#include<stdlib.h> 
#include<stdbool.h>      //书籍管理者,账号 :management 密码:777   
#include"manage.h"      

FILE *ma;     
FILE *fp, *yh, *pt, *yh1; 
int a=1;

int main(void)
{  
    bool right;     
    int number;
    Link plink;
	int bookamount, i=0, sizename;
    char title[10], title1[10], returnbook[10];
	char username[20], username1[20], username2[20], password[10], password1[10];
	char simplebook[10], allbook[10][10] = {"1","1","1","1","1","1","1","1","1","1"};  
	printf("==========欢迎来到图书馆==========\n"); 
break1: printf("1:登录\n2:注册\n3:退出\n输入操作序号:");
	
	number = number_1();  //返回操作数字 
	if (number == 3) {
		exit_t(&plink);
	}
	
    printf("用户名:");
	scanf("%s", &username);   
	printf("密码:");
	scanf("%s", &password);
	
	char content[20] = "目录#";
	strcpy(username2, username);
	strcat(username2, "||");
	strcat(content, username); 
	strcat(username, "||");
	strcat(username, password);              //合并用户名和密码 

	/*登录*/ 
	if (number == 1){
		fp = fopen("userinfo1", "r");
		while (fscanf(fp, "%s", username1) == 1){
			if (strcmp(username,username1) != 0) 
			    a = 0;                       //用户名和密码验证 
		    else{
		    	printf("登录成功!\n");
				a = 1;
				break;
			}
		}
		if(a == 0){
			printf("登录失败!用户或密码错误!\n");
			goto break1;  
		} 	
	}
	else if (number == 2)                         /*注册*/
	{	
		printf("密码确认:");
		scanf("%s", &password1);
		
		sizename = sizeusername(username2);    //返回输入了多少个字符串 
		
		fp = fopen("userinfo1", "r");           //验证用户名是否重复 
		while (fscanf(fp,"%s",username1) == 1) {
			if (strncmp(username1, username2, sizename) == 0) {
				printf("用户名重复!\n");
				fclose(fp);
				goto break1; 
			}	
		} 
		fclose(fp);
		if (strcmp(password, password1) != 0) 	{
			printf("注册失败!密码不一致。\n"); 
			goto break1;   
		}
		else {
			printf("注册成功!\n");
			strcat(username, "\n");       //合并换行,加入换行是为了更好的在文件中显示
			fp = fopen("userinfo1", "a+");
			fprintf(fp, username);        
		}
	}
	
	if (strncmp(username, "management||", 7) != 0);	//判断是否为管理员,如果是管理员跳转
	else management(&plink);
	
	allbooktitle(&plink);

	//借书还书
break2: printf("1:借书\n2:还书\n3:退出\n输入操作序号:");
	
	number = number_1();    
	
	yh = fopen(content, "a+");    
	if (number == 1)          //借书,限制借书本数10本 
	{
		bookamount = 0; 
		while (fscanf(yh, "%s", title1) == 1)
		bookamount++;
		
		if (bookamount < 10)     {//判断借书是否超过10本
		    printf("输入借书名称:"); 
	        scanf("%s", title);
	        yh1 = fopen(content, "r"); 
		    while (fscanf(yh1, "%s", title1) == 1) {
			    if (strcmp(title1, title) == 0) {
			    	printf("已借此书!\n");
			    	fclose(yh1);
			    	goto break2;
				}
			}  
		    fclose(yh1);
		     
			right = Traverse(&plink, NULL, title);
		    if (right == false) {
		    	printf("查无此书!\n");
		    	goto break2;
		    }
		    
		    strcat(title, "\n");   
	    	fprintf(yh, title);    
	    	fclose(yh);           
	    	printf("借书成功!\n"); 
	    	goto break2;
		}
	    else {
	    	printf("借书数量以上线,请还书!\n");
	    	goto break2;  
		}	
	}
	else if (number == 2 ){           //还书 
		a = 0; 
		printf("已借书目录:\n");             //打印已借书目录
		while (fscanf(yh, "%s", title1) == 1) {
			a++;
			printf(" %-15s ", title1);
			if (a % 5 == 0)
			    printf("\n");
		} 
		
		printf("\n还书名称:");
		scanf("%s", returnbook); 
		fseek(yh,0L, SEEK_SET);            
		
		while (fscanf(yh, "%s", title1) == 1) 
		{   
		    a =1 ;
			if (strcmp(title1, returnbook) == 0) {//检查是否有此书,返回为0则有  	
			    bookamount = 0;
				fseek(yh, 0L, SEEK_SET);        
				while (fscanf(yh, "%s", simplebook) == 1) {   //将已借的书储存在数组中  
					strcpy(allbook[bookamount], simplebook);
					bookamount++;
			    }
			    
				fclose(yh);                    
				pt = fopen(content, "w");         
				for(i=0; i<10; i++) {
					if (strcmp(allbook[i],"1") == 0)
					   break;
					if (strcmp(allbook[i], returnbook) != 0) {
						strcat(allbook[i], "\n");
						fprintf(pt, allbook[i]);
					}
				}
				printf("还书成功!\n");
				fclose(pt);      
			    break;
			}
		    else a = 0;	
		}
		if (a == 1);
	    else
	        printf("查无此书!请重新操作。\n");
		goto break2;   
	}
	else  //退出
	    exit_t(&plink);
	
    return 0;
}

  • 14
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值