C语言学生成绩管理系统

本系统由链表以及函数组成,具体内容如下图所示:

由多个模块共同组成,核心在于对链表的操作。大体思路是 从文件中读取信息,将其存储到链表中,然后就是对链表的操作。

1.在所有的操作之前有一个验证系统,验证访客是否合法,其实就是字符串的应用,代码如下:

void teacher_system()
{
    int count=3;
    char admin[10];
    char pword[20];
    int i=0;
    while(count)
    {
        printf("用户名:");
        fflush(stdin);
        gets(admin);
        printf("密码:");
        char c;                                    
        gets(pword);
        if((strcmp(admin,"TC")==0)&&(strcmp(pword,"hello_world")==0))
        {
            printf("\n");
            printf("密码正确!");
            printf("\n");
            break;
        }
        else
        {
            printf("\n账户或密码错误,请重新输入!\n");
            count--;
            continue;
        }
    }
    if(count==0)
        {
            printf("密码错误三次,账户已锁定!");
            exit(0);
        }

}

因为个人能力有限,所以账号和密码都是内嵌式的。此函数增加了一个功能,当账号或者密码输错三次后,会自动退出。

2。接下来就是从文件中读取信息了,这涉及到建表的创建以及文件的读取

void creat1(Link head)
{
    Link r=head;
    FILE *fp;
    char name_[20];
    char num_[10];
    float score_[3];
    float s_;
    printf("请输入完整路径及文件名:");
    while(1)
    {   
        scanf("%s",filename);
        FILE *fp_=fopen(filename,"rt");
        fflush(stdin);
        if(fp_==NULL)
        {
            printf("文件不存在,请重新输入:");
            continue;
        }
        else
        {
            fp=fp_;
            break;            
        }
    }
    while(fscanf(fp,"%s%s%f%f%f%f",name_,num_,&score_[0],&score_[1],&score_[2],&s_)!=EOF)
    {
        Link node=(data *)malloc(sizeof(data));
        r->next=node;
        strcpy(node->name,name_);
        strcpy(node->num,num_);
        for(int i=0;i<3;i++)
            node->score[i]=score_[i];
        node->s=s_;
        r=node;
    }
    r->next=NULL;
}

首先打开文件,如果文件路径不正确,会重新输入直至输入正确(while(1)模块),接下来读取信息并将信息存储到链表中,这里使用了  fscanf()函数,因为fread()函数是对二进制文件操作的,所以这里使用fscanf()函数,读取每行的信息时,按照 姓名,学号,三门成绩以及总成绩的顺序,来进行读取,将其存储到链表的节点里,其实这里除了while(fscanf(.......)!=EOF)外,剩下的部分都和链表操作一样。

3.删除信息:

void delete(Link head)
{
    char name[10];
    printf("请输入需要删除的学生姓名:");
    while(1)
    {
        Link p=head->next;
        Link pre=head->next;
        scanf("%s",name);
        while(p)
        {
            if(strcmp(p->name,name)!=0)
            {
                pre=p;
                p=p->next;
            }
            else 
                break;
        }
        if(p==head->next)
            {
                head->next=p->next;
                free(p);
            }
        else if(p==NULL)
        {
            printf("学生信息不存在,请重新输入!\n");
            continue;
        }
        else if(p->next==NULL)
        {
            pre->next=NULL;
            free(p);
        }
        else
        {
            pre->next=p->next;
            free(p);
        }
        break;
    }
}

删除信息首先要找到信息,如果学生不存在会继续输入,由于被删除学生可能是头节点尾节点或者中间节点,所以这里分类讨论,其中  pre 是前驱节点,p是当前的节点,接下来就是链表的删除操作了

4.增添信息 

void insert(Link head)                                  //尾插
{
    Link end=head->next;
    while(end->next)
        end=end->next;
    Link new=(data *)malloc(sizeof(data));
    end->next=new;
    printf("学号:");
    scanf("%s",new->num);
    printf("姓名:");
    scanf("%s",new->name);
    printf("高数,大英,C语言成绩:\n");
    for(int j=0;j<3;j++)
        {
            scanf("%f",&new->score[j]);
            new->s=new->s+new->score[j];
        }
    new->next=NULL;   
}

 这里使用了尾插法,通过while循环找到最后一个节点,然后在尾节点后增加新的节点

5.查找信息

Link search_num(Link head)
{
    char num[10];
    Link p;
    printf("请输入学号:");
    while(1)
    {
        scanf("%s",num);
        Link q=head->next;
        while(q)
        {
            if(strcmp(q->num,num)!=0)
            {
                q=q->next;
            }
            else
                break;
        }
        if(q==NULL)
            {
                printf("未找到该生信息!\n");
                printf("请重新输入:");
                continue;
            }
        else
            {
                p=q;
                break;
            }
        
    }
    return p;
}

这里是由学号查找信息的,因为学号是char 类型的,所以使用了 strcmp()函数

6.更改信息

void change_num(Link head)
{
    char num[10];
    printf("请输入学号:");
    while(1)
    {
        scanf("%s",num);
        Link q=head->next;
        while(q)
        {
            if(strcmp(q->num,num)!=0)
            {
                q=q->next;
            }
            else
                break;
        }
        if(q==NULL)
            {
                printf("未找到该生信息!\n");
                printf("请重新输入:");
                continue;
            }
        else
            {
                char x;
                printf("需要更改什么信息?\n");
                printf("A 姓名 B 成绩\n");
                fflush(stdin);
                while(1)
                {
                    scanf("%c",&x);
                    if(x=='A')
                    {
                        printf("请输入正确的姓名:");
                        scanf("%s",q->name);
                        break;
                    }
                    else if(x=='B')
                        {
                            printf("请重新输入\'%s\'的各科成绩:\n",q->name);
                            q->s=0;
                            for(int j=0;j<3;j++)
                                {
                                    scanf("%f",&q->score[j]);
                                    q->s+=q->score[j];
                                }
                            break;
                        }
                    else
                    {
                        printf("输入有误!\n");
                        printf("请重新输入:");
                        continue;
                    }
                }
            }
        break;
    }
}

要修改学生信息首先应该找到该生的信息,还有一种简便的方法是调用“查找信息”函数,然后进行更改

7.对学生成绩进行排序

void sort_s(Link head)
{
    char name_[10];
    char num_[10];
    int score_[10];
    int s_;
    Link p,q;
    for(p=head->next;p!=NULL;p=p->next)
        for(q=head->next;q->next!=NULL;q=q->next)
        {
            if(q->s<q->next->s)
            {
                strcpy(num_,q->num);
                strcpy(q->num,q->next->num);
                strcpy(q->next->num,num_);
                strcpy(name_,q->name);
                strcpy(q->name,q->next->name);
                strcpy(q->next->name,name_);
                for(int i=0;i<3;i++)
                    {
                        score_[i]=q->score[i];
                        q->score[i]=q->next->score[i];
                        q->next->score[i]=score_[i];
                    }
                s_=q->s;
                q->s=q->next->s;
                q->next->s=s_;
            }
        }
}

采用冒泡排序的思想,使用两层循环,模拟冒泡排序中的

for(i=0;i<n-1;i++)

        for(j=0;j<n-i-1;j++)

然后就是交换数值

8.计算每门课程的平均分

void ave(Link head,float *math_,float *english_,float *C_,float *math,float *english,float *C)
{
    int i=0,j=0;
    Link p;
    p=head->next;
    *math=0,*english=0,*C=0;
    while(p)
    {   
        *math+=p->score[0];
        *english+=p->score[1];
        *C+=p->score[2];
        p=p->next;
        j++;
    }
  *math_=*math*1.0/j;
  *english_=*english*1.0/j;
  *C_=*C*1.0/j;
  
}

因为此处需要返回多个数值,所以使用指针来完成(当然也可以使用全局变量),math_,English_.....是每门课程的平均成绩,math,English.....是每门课程的总成绩,通过依次遍历链表,求出每门课程的总成绩,然后除以总人数,得到的就是平均成绩

9.输出低于平均分的学生

void out(Link head,float *math_,float *english_,float *C_)
{
    Link p=head->next;
    float x[3];
    x[0]=*math_;
    x[1]=*english_;
    x[2]=*C_;
    while(1)
    {
        int i;
        printf("高数不及格的学生为:");
        for(i=0;i<3;i++)
            {
                if(x[0]>p->score[0])
                    printf("\'%s\' ",p->name);
                p=p->next;
            }
        fflush(stdin);
        p=head->next;
        printf("\n大英不及格的学生为:");
        for(i=0;i<3;i++)
        {
            if(x[1]>p->score[1])
                printf("\'%s\' ",p->name);
            p=p->next;
        }
        p=head->next;
        fflush(stdin);
        printf("\nC语言不及格的学生为:");
        for(i=0;i<3;i++)
        {
            if(x[2]>p->score[2])
                printf("\'%s\' ",p->name);
            p=p->next;
        }
        break;
    }  
}

上一步求出来了每门课程的平均分,接下里就是根据平均分输出不及格学生了,因为要输出三门课程的不及格学生,所以使用了三个循环(没有想到更好的办法),需要注意的是,输出一门不及格学生后,都要回到头节点去,否则只会输出一门的不及格学生

10.输出信息

void output(Link head)
{
    Link ipos=head->next;
    printf("*************************************************************************\n");
    printf("姓名         学号           高数        大英    C语言       总分\n");
    printf("*************************************************************************\n");
    while(ipos)
    {
       printf("%s\t     %s\t    ",ipos->name,ipos->num);
        for(int i=0;i<3;i++)
            printf("%.2f\t",ipos->score[i]);
        printf("    %.2f",ipos->s);
        printf("\n");
        ipos=ipos->next;
    }
}

这个没有什么要说的

11.保存信息

void save(Link head)
{       
        FILE *fp;
        Link p;
        fflush(stdin);
        fp=fopen(filename,"wt");
        char ch1[]={"名次"},ch2[]={"姓名"},ch3[]={"学号"},ch4[]={"高数"},ch5[]={"大英"},ch6[]={"C语言"},ch7[]={"总分"};
        fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t",ch1,ch2,ch3,ch4,ch5,ch6,ch7);
        fputc('\n',fp);
        int i;
        for(p=head->next,i=1;p!=NULL;p=p->next,i++)
        {
            fprintf(fp,"%d\t%s\t%s\t",i,p->name,p->num);
            for(int j=0;j<3;j++)
            {
                fprintf(fp,"%.2f\t",p->score[j]);
            }
            fprintf(fp,"%.2f",p->s);
            fputc('\n',fp);
        }
        fclose(fp);
        printf("成绩信息已保存到%s",filename);
}

将学生的信息保存到文件中,这里的filename是刚开始录入成绩时的文件名,所以只在录入信息时输入一次,保存信息时会直接保存在这个文件里

12.还有一个菜单界面

void menu()
{
	system("cls"); 
	printf("*----------------------------------------------------*\n");
	printf("*               欢迎使用TC实验室成绩管理系统         *\n");
	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("*               9: 保存成绩信息                    *\n");
	printf("*               0: 保存信息并退出系统               *\n");
	printf("*----------------------------------------------------*\n");
	printf("选择操作<0-9>                                         \n");
}

源码如下:
 

#include<malloc.h>
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#include<io.h>
char filename[50];
typedef struct Data 
{
    char num[10];
    char name[10];
    float score[3];
    float s;
    struct Data *next;
}*Link,data;
Link head();
void menu();                                            //头指针
void creat1(Link head);                                 //创造节点  录入信息
void delete(Link head);                                 //删除节点
Link search_num(Link head);                             //根据学号查找节点
void insert(Link head);                                 //尾插节点
void change_num(Link head);                             //根据学号更改
void output(Link head);                                 //输出信息
void sort_s(Link head);                                 //按总成绩排序 
void teacher_system();                                  //教师管理系统(删除,修改,插入)
void ave(Link head,float *math_,float *english_,float *C_,float *math,float *english,float *C);//math_.....为平均成绩                                    //求平均值
void out(Link head,float *math_,float *english_,float *C_);                                    //不及格人名单
void save(Link head);                                   //保存
int main()
{
    menu();
    char admin[10];
    char pastword[10];
    int option;
    int student;
    char filename[30];
    Link head_=head();
    float math,english,C;                            //math.....为每门的总成绩
    float math_,english_,C_;                         //math_.....为每门的均分
    while(1)
    {
        scanf("%d",&option);
        if(option>=2&&option<=7)
        {
            printf("您还未输入文件信息,不能执行此操作!\n");
            printf("请重新输入:");
            fflush(stdin);
            continue;
            
        }
        else if(option<0||option>9)
        {
            printf("输入有误,请重新输入:");
            continue;
        }
        else if(option==0)
        {
            printf("系统已退出!");
            exit(0);
        }
        else
        {
            printf("请新输入管理员密码:\n");
            teacher_system();
            creat1(head_);
            printf("成绩信息已读取完毕!");
            system("pause");
            menu();                      
            while(1)
            {              
                printf("\n请输入下一步指令:");
                fflush(stdin);
                int option_;
                scanf("%d",&option_);
                switch(option_)
                {
                    case 1:
                    {
                        printf("成绩已经录入请重新操作!\n");
                        continue;
                    }
                    case 2:
                    {
                        delete(head_);
                        printf("*************************************************************************\n");
                        printf("正在删除,请稍后");
                        for(int i=0;i<3;i++)
                            {
                                printf(".");
                                Sleep(1000);
                            }
                        printf("\n删除成功\n");
                        printf("删除后的信息如下:\n");
                        output(head_);
                        printf("\n");
                        continue;    
                    }
                    case 3:
                    {
                        menu();
                        insert(head_);
                        Sleep(500);
                        printf("添加成功!\n");
                        continue;
                    }
                    case 4:
                    {
                        menu();
                        printf("\n");
                        menu();
                        printf("修改成功!");
                    }    
                    case 5:
                    {
                        menu();
                        Link p=search_num(head_);
                        printf("\'%s\'的信息如下:\n");
                        printf("姓名         学号           高数        大英    C语言       总分\n");
                        printf("%s\t     %s\t    ",p->name,p->num);
                        for(int i=0;i<3;i++)
                            printf("%.2f\t",p->score[i]);
                        printf("    %.2f",p->s);
                        break;
                    }
                    case 6:
                    {
                        menu();
                        sort_s(head_);
                        printf("排名如下:\n");
                        output(head_);
                        printf("\n");
                        continue;
                    }
                    case 7:
                    {
                        menu();
                        output(head_);
                        printf("\n");
                        continue;
                    }

                    case 8:
                    {   
                        menu();                       
                        ave(head_,&math_,&english_,&C_,&math,&english,&C);
                        printf("              高数        大英        C语言\n");
                        printf("平均分         %.2f      %.2f       %.2f\n",math_,english_,C_);
                        out(head_,&math_,&english_,&C_);
                        continue;
                    }
                    case 9:
                    {
                        save(head_);
                        continue;
                    }
                    case 0:
                    {
                        printf("系统已退出,感谢您的使用!");
                        exit(0);
                    }
                }   
            }
        }
    }
 

}
void menu()
{
	system("cls"); 
	printf("*----------------------------------------------------*\n");
	printf("*               欢迎使用TC实验室成绩管理系统         *\n");
	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("*               9: 保存成绩信息                    *\n");
	printf("*               0: 保存信息并退出系统               *\n");
	printf("*----------------------------------------------------*\n");
	printf("选择操作<0-9>                                         \n");
}
void teacher_system()
{
    int count=3;
    char admin[10];
    char pword[20];
    int i=0;
    while(count)
    {
        printf("用户名:");
        fflush(stdin);
        gets(admin);
        printf("密码:");
        char c;                                    
        gets(pword);
        if((strcmp(admin,"TC")==0)&&(strcmp(pword,"hello_world")==0))
        {
            printf("\n");
            printf("密码正确!");
            printf("\n");
            break;
        }
        else
        {
            printf("\n账户或密码错误,请重新输入!\n");
            count--;
            continue;
        }
    }
    if(count==0)
        {
            printf("密码错误三次,账户已锁定!");
            exit(0);
        }

}
Link head()
{
    Link head=(data *)malloc(sizeof(data));
    head->next=NULL;
    return head;
}
void creat1(Link head)
{
    Link r=head;
    FILE *fp;
    char name_[20];
    char num_[10];
    float score_[3];
    float s_;
    printf("请输入完整路径及文件名:");
    while(1)
    {   
        scanf("%s",filename);
        FILE *fp_=fopen(filename,"rt");
        fflush(stdin);
        if(fp_==NULL)
        {
            printf("文件不存在,请重新输入:");
            continue;
        }
        else
        {
            fp=fp_;
            break;            
        }
    }
    while(fscanf(fp,"%s%s%f%f%f%f",name_,num_,&score_[0],&score_[1],&score_[2],&s_)!=EOF)
    {
        Link node=(data *)malloc(sizeof(data));
        r->next=node;
        strcpy(node->name,name_);
        strcpy(node->num,num_);
        for(int i=0;i<3;i++)
            node->score[i]=score_[i];
        node->s=s_;
        r=node;
    }
    r->next=NULL;
}
void insert(Link head)                                  //尾插
{
    Link end=head->next;
    while(end->next)
        end=end->next;
    Link new=(data *)malloc(sizeof(data));
    end->next=new;
    printf("学号:");
    scanf("%s",new->num);
    printf("姓名:");
    scanf("%s",new->name);
    printf("高数,大英,C语言成绩:\n");
    for(int j=0;j<3;j++)
        {
            scanf("%f",&new->score[j]);
            new->s=new->s+new->score[j];
        }
    new->next=NULL;   
}
void delete(Link head)
{
    char name[10];
    printf("请输入需要删除的学生姓名:");
    while(1)
    {
        Link p=head->next;
        Link pre=head->next;
        scanf("%s",name);
        while(p)
        {
            if(strcmp(p->name,name)!=0)
            {
                pre=p;
                p=p->next;
            }
            else 
                break;
        }
        if(p==head->next)
            {
                head->next=p->next;
                free(p);
            }
        else if(p==NULL)
        {
            printf("学生信息不存在,请重新输入!\n");
            continue;
        }
        else if(p->next==NULL)
        {
            pre->next=NULL;
            free(p);
        }
        else
        {
            pre->next=p->next;
            free(p);
        }
        break;
    }
}
Link search_num(Link head)
{
    char num[10];
    Link p;
    printf("请输入学号:");
    while(1)
    {
        scanf("%s",num);
        Link q=head->next;
        while(q)
        {
            if(strcmp(q->num,num)!=0)
            {
                q=q->next;
            }
            else
                break;
        }
        if(q==NULL)
            {
                printf("未找到该生信息!\n");
                printf("请重新输入:");
                continue;
            }
        else
            {
                p=q;
                break;
            }
        
    }
    return p;
}
void change_num(Link head)
{
    char num[10];
    printf("请输入学号:");
    while(1)
    {
        scanf("%s",num);
        Link q=head->next;
        while(q)
        {
            if(strcmp(q->num,num)!=0)
            {
                q=q->next;
            }
            else
                break;
        }
        if(q==NULL)
            {
                printf("未找到该生信息!\n");
                printf("请重新输入:");
                continue;
            }
        else
            {
                char x;
                printf("需要更改什么信息?\n");
                printf("A 姓名 B 成绩\n");
                fflush(stdin);
                while(1)
                {
                    scanf("%c",&x);
                    if(x=='A')
                    {
                        printf("请输入正确的姓名:");
                        scanf("%s",q->name);
                        break;
                    }
                    else if(x=='B')
                        {
                            printf("请重新输入\'%s\'的各科成绩:\n",q->name);
                            q->s=0;
                            for(int j=0;j<3;j++)
                                {
                                    scanf("%f",&q->score[j]);
                                    q->s+=q->score[j];
                                }
                            break;
                        }
                    else
                    {
                        printf("输入有误!\n");
                        printf("请重新输入:");
                        continue;
                    }
                }
            }
        break;
    }
}
void output(Link head)
{
    Link ipos=head->next;
    printf("*************************************************************************\n");
    printf("姓名         学号           高数        大英    C语言       总分\n");
    printf("*************************************************************************\n");
    while(ipos)
    {
       printf("%s\t     %s\t    ",ipos->name,ipos->num);
        for(int i=0;i<3;i++)
            printf("%.2f\t",ipos->score[i]);
        printf("    %.2f",ipos->s);
        printf("\n");
        ipos=ipos->next;
    }
}
void sort_s(Link head)
{
    char name_[10];
    char num_[10];
    int score_[10];
    int s_;
    Link p,q;
    for(p=head->next;p!=NULL;p=p->next)
        for(q=head->next;q->next!=NULL;q=q->next)
        {
            if(q->s<q->next->s)
            {
                strcpy(num_,q->num);
                strcpy(q->num,q->next->num);
                strcpy(q->next->num,num_);
                strcpy(name_,q->name);
                strcpy(q->name,q->next->name);
                strcpy(q->next->name,name_);
                for(int i=0;i<3;i++)
                    {
                        score_[i]=q->score[i];
                        q->score[i]=q->next->score[i];
                        q->next->score[i]=score_[i];
                    }
                s_=q->s;
                q->s=q->next->s;
                q->next->s=s_;
            }
        }
}
void ave(Link head,float *math_,float *english_,float *C_,float *math,float *english,float *C)
{
    int i=0,j=0;
    Link p;
    p=head->next;
    *math=0,*english=0,*C=0;
    while(p)
    {   
        *math+=p->score[0];
        *english+=p->score[1];
        *C+=p->score[2];
        p=p->next;
        j++;
    }
  *math_=*math*1.0/j;
  *english_=*english*1.0/j;
  *C_=*C*1.0/j;
  
}
void out(Link head,float *math_,float *english_,float *C_)
{
    Link p=head->next;
    float x[3];
    x[0]=*math_;
    x[1]=*english_;
    x[2]=*C_;
    while(1)
    {
        int i;
        printf("高数不及格的学生为:");
        for(i=0;i<3;i++)
            {
                if(x[0]>p->score[0])
                    printf("\'%s\' ",p->name);
                p=p->next;
            }
        fflush(stdin);
        p=head->next;
        printf("\n大英不及格的学生为:");
        for(i=0;i<3;i++)
        {
            if(x[1]>p->score[1])
                printf("\'%s\' ",p->name);
            p=p->next;
        }
        p=head->next;
        fflush(stdin);
        printf("\nC语言不及格的学生为:");
        for(i=0;i<3;i++)
        {
            if(x[2]>p->score[2])
                printf("\'%s\' ",p->name);
            p=p->next;
        }
        break;
    }  
}
void save(Link head)
{       
        FILE *fp;
        Link p;
        fflush(stdin);
        fp=fopen(filename,"wt");
        char ch1[]={"名次"},ch2[]={"姓名"},ch3[]={"学号"},ch4[]={"高数"},ch5[]={"大英"},ch6[]={"C语言"},ch7[]={"总分"};
        fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t",ch1,ch2,ch3,ch4,ch5,ch6,ch7);
        fputc('\n',fp);
        int i;
        for(p=head->next,i=1;p!=NULL;p=p->next,i++)
        {
            fprintf(fp,"%d\t%s\t%s\t",i,p->name,p->num);
            for(int j=0;j<3;j++)
            {
                fprintf(fp,"%.2f\t",p->score[j]);
            }
            fprintf(fp,"%.2f",p->s);
            fputc('\n',fp);
        }
        fclose(fp);
        printf("成绩信息已保存到%s",filename);
}

增加:我在校园管理系统

  • 1
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值