c++期末课设《新生基本信息统计软件》验收报告(附源码)

1.课题来源

课题名称:《新生基本信息统计软件》

课题来源:《C++面向对象程序设计》课程设计任务书
体现面向对象的特性:类与对象的特性,封装机制,数据成员等特性。

2.系统需求描述

课题需要完成的具体任务

有新生来报到,要逐个录入其信息,如:学生姓名,性别,专业,出生日期,家庭地址,英语入学成绩。要求设计链表类来实现,并统计学生人数。

文本界面为

 1. 新增学生信息

 2.  删除学生信息

 3. 导入学生信息(已经保存于的文件信息)

 4. 学生信息搜索(按姓名)

 5. 学生信息统计(按性别)

 6. 按英语成绩排序

 7. 学生信息保存

 8. 退出

3.系统设计

3.1.课题的总体结构

程序文件的总体结构:

3.2.核心功能模块与类设计

类图和函数接口:

 

 

3.4.程序(系统)详细设计

程序流程图:

4.程序(系统)实现

程序(系统)执行结果图:

系统登录界面:

系统功能菜单界面:

新生信息添加界面:

删除新生信息界面:

新生信息修改界面:

插入新生信息界面:

 

按姓名查询信息界面:

按英语成绩排序:

按性别统计新生个数:

查看所有新生信息:

程序实现了逐个录入新生信息,如:学生姓名,性别,专业,出生日期,家庭地址,英语入学成绩。对新生信息的删除,修改,插入,以及根据英语成绩进行排序,统计学生人数等基础功能。

以下是带详细注释的全部源代码

//2022.12.10-15 c++期末课设


#include<bits/stdc++.h>
#include<conio.h>
#include<time.h>
#include<fstream>
#include<windows.h>
using namespace std;
 
class Student {//存放数据的节点类
	public:
		void Set_name(string name) 
		{	        //姓名
			this->name=name;
		}
		/*  this关键字与其他语言相同,将对象本身作为默认参数传递到
		类或结构体的非静态方法,用以访问类的其他属性或方法。
		但是c++比其他语言好理解,因为this代表的是对象的地址,而
		非对象本身。其他语言不能使用地址,就说本身实在难以理解  */
		void Set_sex(string sex) 
		{         	//性别
			this->sex=sex;
		}
		void Set_major(string major) 
		{          //专业
			this->major=major;
		}
		void Set_num(int num) 
		{          		//学号
			this->num=num;
		}
		void Set_age(int age) 
		{                 	//年龄
			this->age=age;
		}
		void Set_date(string date) 
		{           	//出生日期
			this->date=date;
		}
		void Set_address(string address) 
		{      	//家庭住址
			this->address=address;
		}
		void Set_score(int score) 
		{               //英语入学成绩
			this->score=score;
		}
		void Set_next(Student *next) 
		{          	//next指针
			this->next=next;
		}
		string get_name() 
		{
			return name;
		}
		string get_sex() {
			return sex;
		}
		string get_major() 
		{
			return major;
		}
		int get_num() 
		{
			return num;
		}
		int get_age() {
			return age;
		}
		string get_date() 
		{
			return date;
		}
		string get_address()
		{
			return address;
		}
		int get_score() 
		{
			return score;
		}
		Student *get_next() 
		{
			return next;
		}
	private:
		string name,sex,date,address,major;
		int num,score,age;
		Student *next;
};
 
class List {
	public:
		List();
		void insert_list();				 	//添加新生的信息
		void delete_list();			    	//删除新生的信息
		void update_list();					//修改新生的信息
		void charu();						//插入新生的信息
		void look_name();					//按姓名查询新生信息
		void paixu_list();					//按英语入学成绩排序
		void count();						//按性别统计新生个数
		void print_all();					//查看全部新生的信息
		void save();						//保存新生的信息
		void read();						//读取新生的信息
	private:
		Student *head;
};
 
List::List() 
{		                         //建立头结点
	head=new Student();
	/*	new的使用。
		new+数据类型(初值),返回值为申请空间的对应数据类型的地址。*/
	///	printf("%p\n",head);
		
	if(head==NULL)
    {
		cout<<"链表创建失败"<<endl;
		exit(0);
	}
	head->Set_next(NULL);
	//printf("%p\n",head);
	//system("pause");
}
 
void List::insert_list() 
{		  		//添加新生的信息
	string name,sex,date,address,major;
	int  num,score,age;
	int x=1;
	Student *p1,*r;
	r=head;
	while(r->get_next()!=NULL) //使结点循环到最后
	{	
		r=r->get_next();
	}
	while(x) 
	{
		p1=head;
		int y=1;
		Student *p=new Student;
		if(p==NULL)
		{
			cout<<"链表创建失败"<<endl;
			exit(0);
		}
		cout<<"请输入你要添加的学生学号:";
		cin>>num;
		while(p1->get_next()) 
		{
			if(p1->get_next()->get_num()==num) 
			{
				y=2;
				cout<<"已经有此学生的信息,请重新输入\n\n";
				break;
			}
			p1=p1->get_next();
		}
		if(y==2) 
		{
			continue;
		} 
		else 
		{
			p->Set_num(num);
			cout<<"请输入你要添加的学生姓名:";
			cin>>name;
			p->Set_name(name);
			cout<<"请输入你要添加的学生性别:";
			cin>>sex;
			p->Set_sex(sex);
			cout<<"请输入你要添加的学生年龄:";
			cin>>age;
			p->Set_age(age);
			cout<<"请输入你要添加的学生的出生日期:";
			cin>>date;
			p->Set_date(date);
			cout<<"请输入你要添加的学生的家庭住址:";
			cin>>address;
			p->Set_address(address);
			cout<<"请输入你要添加的学生专业:";
			cin>>major;
			p->Set_major(major);
			cout<<"请输入你要添加的学生的英语入学成绩:";
			cin>>score;
			p->Set_score(score);
			r->Set_next(p); //和前结点连接
			r=p;
			cout<<endl;
			cout<<"此学生的信息添加成功!请问是否还要继续添加?"<<endl;
			cout<<"输入0则结束,继续添加请输入其它任意数字键:";
			cin>>x;
			system("CLS");
		}
		r->Set_next(NULL);//尾结点指向空
	}
}
 
void List::delete_list() 
{			   //删除新生的信息
	int x=1,num2;
	Student *p;
	while(x) 
	{
		int y=1;
		p=head;
		cout<<"请输入你要删除的学生的学号:";
		cin>>num2;
		while(p->get_next()!=NULL) 
		{
			if(p->get_next()->get_num()==num2) 
			{
				y=2;
				Student *q=NULL;
				q=p->get_next();
				p->Set_next(q->get_next());
				delete q;
				q=NULL;
				break;
			}
			p=p->get_next();
		}
		if(y==1)
		{
			cout<<"无此学号!"<<endl<<endl<<endl;
		}
		if(y==2)
		{
			cout<<endl;
			cout<<"此学生的信息删除成功!请问是否还要继续删除?"<<endl;
		}
		cout<<"输入0则结束,继续删除请输入其它任意数字键:";
		cin>>x;
		cout<<endl;
	}
}
 
void List::look_name() //按姓名查询新生信息
{		       	 
	int x=1;
	string name2;
	Student *p;
	while(x) 
	{
		int y=1;
		p=head;
		cout<<"请输入要查询学生的姓名:";
		cin>>name2;
		cout<<endl;
		while(p->get_next()!=NULL) 
		{
			if(p->get_next()->get_name()==name2) 
			{
				y=0;
				cout<<"姓名:"<<p->get_next()->get_name()<<endl;
				cout<<"学号:"<<p->get_next()->get_num()<<endl;
				cout<<"性别:"<<p->get_next()->get_sex()<<endl;
				cout<<"年龄:"<<p->get_next()->get_age()<<endl;
				cout<<"出生日期:"<<p->get_next()->get_date()<<endl;
				cout<<"家庭住址:"<<p->get_next()->get_address()<<endl;
				cout<<"专业:"<<p->get_next()->get_major()<<endl;
				cout<<"英语入学成绩:"<<p->get_next()->get_score()<<endl;
			}
			p=p->get_next();
		}
		if(y==1) 
		{
			cout<<"无此姓名!"<<endl<<endl<<endl;
		}
		cout<<endl;
		cout<<"此学生的信息查询成功!请问是否还要继续查询?"<<endl;
		cout<<"输入0则结束,继续查询请输入其它任意数字键:";
		cin>>x;
		cout<<endl;
	}
}
 
void List::update_list() //按学号修改新生信息
{		     
	string name,sex,date,major,address;
	int  num,score,age;
	int x=1,num2;
	Student *p;
	while(x) 
	{
		int y=1;
		p=head;
		cout<<"请输入你要修改的学生的学号:";
		cin>>num2;
		cout<<"\n"<<endl;
		while(p->get_next()!=NULL) 
		{
			if(p->get_next()->get_num()==num2) 
			{
				y=0;
				cout<<"请输入你要修改的学生的姓名:";
				cin>>name;
				p->get_next()->Set_name(name);
				cout<<"请输入你要修改的学生的学号:";
				cin>>num;
				p->get_next()->Set_num(num);
				cout<<"请输入你要修改的学生的性别:";
				cin>>sex;
				p->get_next()->Set_sex(sex);
				cout<<"请输入你要修改的学生的年龄:";
				cin>>age;
				p->get_next()->Set_age(age);
				cout<<"请输入你要修改的学生的出生日期:";
				cin>>date;
				p->get_next()->Set_date(date);
				cout<<"请输入你要修改的学生的家庭住址:";
				cin>>address;
				p->get_next()->Set_address(address);
				cout<<"请输入你要修改的学生的专业:";
				cin>>major;
				p->get_next()->Set_major(major);
				cout<<"请输入你要修改的学生的英语入学成绩:";
				cin>>score;
				p->get_next()->Set_score(score);
				break;
			}
			p=p->get_next();
		}
		if(y==1) 
		{
			cout<<"无此学号!"<<endl<<endl<<endl;
		}
		cout<<endl;
		cout<<"此学生的信息修改成功!请问是否还要继续修改?"<<endl;
		cout<<"输入0则结束,继续修改请输入其它任意数字键:";
		cin>>x;
		cout<<endl;
	}
}
 
void List::charu() 
{			          //按学号插入新生信息
	string name,sex,date,address,major;
	int  num,score,age;
	int x=1,num2;
	Student *r,*p;
	while(x) 
	{
		int y=1;
		p=head;
		Student *p1=new Student;
		cout<<"请输入你要插入哪个学号后面:"<<endl;
		cin>>num2;
		while(p->get_next()!=NULL) 
		{
			if(p->get_next()->get_num()==num2) //判断是否有此学号
			{	
				y=2,r=head;
				cout<<"请输入你要插入的学生的学号:";
				cin>>num;
				while(r->get_next()) 
				{
					if(r->get_next()->get_num()==num) 
					{
						y=3;
						cout<<"已经有此学号,请重新输入学号:"<<endl;
					}
					r=r->get_next();
				}
				if(y==3) 
				{
					continue;
				}
				p1->Set_num(num);
				cout<<"请输入你要插入的学生的姓名:";
				cin>>name;
				p1->Set_name(name);
				cout<<"请输入你要插入的学生的性别:";
				cin>>sex;
				p1->Set_sex(sex);
				cout<<"请输入你要插入的学生的年龄:";
				cin>>age;
				p1->Set_age(age);
				cout<<"请输入你要插入的学生的出生日期:";
				cin>>date;
				p1->Set_date(date);
				cout<<"请输入你要插入的学生的家庭住址:";
				cin>>address;
				p1->Set_address(address);
				cout<<"请输入你要插入的学生的专业:";
				cin>>major;
				cout<<"请输入你要插入的学生的英语入学成绩:";
				cin>>score;
				p1->Set_score(score);
				p1->Set_next(p->get_next()->get_next());
				p->get_next()->Set_next(p1);
				break;
			}
			p=p->get_next();
		}
		if(y==1) 
		{
			cout<<"无此学号!"<<endl;
		}
		if(y==2) 
		{
			cout<<endl;
			cout<<"此学生的信息插入成功!请问是否还要继续插入?"<<endl;
		}
		cout<<"输入0则结束,继续插入请输入其它任意数字键:";
		cin>>x;
		cout<<endl;
	}
}
 
void List::paixu_list() //按英语入学成绩排序
{			   	 
	int x,y,z;
	string a,b,c,d,e;
	Student *p=head;
	Student *p1;
	Student *p2;
	while(p->get_next()!=NULL) 
	{
		p1=p->get_next();
		p2=p1->get_next();
		while(p2!=NULL) 
		{
			if(p1->get_score()<p2->get_score()) 
			{
				x=p1->get_score();
				p1->Set_score(p2->get_score());
				p2->Set_score(x);
 
				y=p1->get_age();
				p1->Set_age(p2->get_age());
				p2->Set_age(y);
 
				z=p1->get_num();
				p1->Set_num(p2->get_num());
				p2->Set_num(z);
 
				a=p1->get_name();
				p1->Set_name(p2->get_name());
				p2->Set_name(a);
 
				b=p1->get_sex();
				p1->Set_sex(p2->get_sex());
				p2->Set_sex(b);
 
				c=p1->get_major();
				p1->Set_major(p2->get_major());
				p2->Set_major(c);
 
				d=p1->get_date();
				p1->Set_date(p2->get_date());
				p2->Set_date(d);
 
				e=p1->get_address();
				p1->Set_address(p2->get_address());
				p2->Set_address(e);
			}
			p2=p2->get_next();
		}
		p=p->get_next();
	}
}
 
void List::count() //按性别统计新生个数
{                    
	Student *p=head;
	int sum=0,i=0,j=0;
	while(p->get_next()) 
	{
		if(p->get_next()->get_sex()=="男") 
		{
			i++;
		} 
		else if(p->get_next()->get_sex()=="女") 
		{
			j++;
		}
		p=p->get_next();
	}
	sum=i+j;
	cout<<"学生的数量为:"<<sum<<endl;
	cout<<"男生数量为:"<<i<<endl;
	cout<<"女生数量为:"<<j<<endl;
	system("pause");
}
 
void List::print_all() //查看全部新生的信息
{		       
	
	Student *p=head;
	cout.setf(ios::left,ios::adjustfield) ;
	cout.fill(' ');
	while(p->get_next()) 
	{
		cout<<"姓名:"<<setw(8)<<p->get_next()->get_name()<<"\t"<<"学号:"<<setw(5)<<p->get_next()->get_num()
		    <<"性别:"<<setw(5)<<p->get_next()->get_sex()<<"年龄:"<<setw(5)<<p->get_next()->get_age()
		    <<"出生日期:"<<setw(11)<<p->get_next()->get_date()<<"家庭住址:"<<setw(10)<<p->get_next()->get_address()
		    <<"专业:"<<setw(9)<<p->get_next()->get_major()<<"英语入学成绩:"<<setw(4)<<p->get_next()->get_score()<<endl;
		p=p->get_next();
	}
	system("pause");
}
 
void List::save()  //保存新生的信息
{	                
	Student *p=head->get_next();
	ofstream outfile;//定义输出文件类对象
	outfile.open("新生信息.txt",ios::out);//以输出的方式打开文件
	outfile<<p->get_name()<<"\t"<<p->get_num()<<"\t"<<p->get_sex()<<"\t"<<p->get_age()<<"\t"
	       <<p->get_date()<<"\t"<<p->get_address()<<"\t"<<p->get_major()<<"\t"<<p->get_score();
	p=p->get_next();
	if (!outfile) 
	{
		cout<<"信息保存失败 信息储存终止"<< endl;
		return;
	}
	while(p!=NULL) 
	{
		outfile<<endl<<p->get_name()<<"\t"<<p->get_num()<<"\t"<<p->get_sex()<<"\t"<<p->get_age()<<"\t"
		       <<p->get_date()<<"\t"<<p->get_address()<<"\t"<<p->get_major()<<"\t"<<p->get_score();
		p=p->get_next();
	}
	outfile.close();
	cout<<"新生信息保存成功"<<endl;
	cout<<"正在为您跳转到主菜单,请稍等..."<<endl;
	Sleep(1000);
}
 
void List::read() //读取新生的信息
{                     
	Student *r=head;
	ifstream infile;//定义输入文件类对象
	int num,age,score;
	string name,sex,date,address,major;
	infile.open("新生信息.txt",ios::in);//以输入的方式打开文件
	if(!infile) 
	{
		return;
	}
	while(infile>>name>>num>>sex>>age>>date>>address>>major>>score) 
	{
		Student *p=new Student;
		p->Set_name(name);
		p->Set_num(num);
		p->Set_sex(sex);
		p->Set_age(age);
		p->Set_date(date);
		p->Set_address(address);
		p->Set_major(major);
		p->Set_score(score);
		r->Set_next(p); //和前结点连接
		p->Set_next(NULL);
		r=p;
	}
	infile.close();
	cout<<"新生信息已导入"<<endl;
	cout<<"正在为您跳转到主菜单,请稍等..."<<endl;
	Sleep(1000);
}
 
class menu 
{
	public:
		void begin();
		void menu1();
		void yincang(char *p);
		void prove();
		void menu2();
		void end();
};
 
void menu::begin() 
{
	cout<<"\n\n\n";
	cout<<"\t\t*************************************************"<<endl;
	cout<<"\t\t******                                     ******"<<endl;
	cout<<"\t\t******     欢迎来到新生基本信息统计系统    ******"<<endl;
	cout<<"\t\t******           使用请先登录账号          ******"<<endl;
	cout<<"\t\t******                                     ******"<<endl;
	cout<<"\t\t*************************************************"<<endl;
	cout<<"\n\n\n";
}
 
void menu::menu1() 
{
	begin();
	char a[20]= {"666666"};
	char b[20]= {"666666"};
	char x[20];
	char y[20];
	while(1) {
		cout<<"请输入您的账号:";
		cin>>x;
		if(strcmp(a,x)==0) 
		{
			cout<<"请输入您的密码:";
			yincang(y);
			if(strcmp(b,y)==0) 
			{
				prove();
				system("cls");
				menu2();
				break;
			} 
			else
				cout<<"您输入的密码错误!"<<endl;
		} 
		else
			cout<<"您输入的账号错误!"<<endl;
	}
}
 
void menu::yincang(char *p)//隐藏密码展现***
{                                   
	int i=0;
	char ch;
	while(1) 
	{
		ch=getch();
		/*
		这个函数是一个不回显函数,当用户按下某个字符时,函数自动读
		取,无需按回车;这个函数并非标准函数所在头文件:conio.h	
   		函数用途:从控制台读取一个字符,但不显示在屏幕上
    	函数原型:int getch(void)
    	返回值:读取的字符  */
    
		if(ch!=8&&ch!=13) 
		{
			p[i]=ch;
			cout<<"*";
			i++;
		} 
		else if(ch==8) //删除键
		{
			if(i!=0)
			{
				cout<<"\b \b";
				p[i]='\0';
				i--;
			}
		} 
		else if(ch==13) //读到回车结束
		{
			cout<<"\n";
			break;
		}
	}
}
 
void menu::prove()//登录随机数字验证
{                                       
	int u,v;
	srand(time(0));
	while(1)
	{
		u=rand()%10000+1000;
/*你会发现每次产生的随机数都是相同的,因为rand 函数产生的随机数是伪随机数,是根据一个数按照某个公式推算出来的,这个数我们称之为“种子”,但是这个种子在系统启动之后就是一个定值。*/
		cout<<"验证码为:"<<u;
		cout<<endl;
		cout<<"请输入验证码:";
		cin>>v;
		if(v==u)
		{
			break;
		} 
		else
		{
			cout<<"验证码错误!请重新输入:";
			u=rand()%10000+1000;
			cout<<"验证码为:"<<u;
			cout<<endl;
			cout<<"请输入验证码:";
			cin>>v;
			if(v==u)
			{
				cout<<"恭喜您登录成功!";
				break;
			}
		}
	}
}
 
void menu::menu2() 
{
	List C;
	C.read();
	system("CLS");
	while(1) 
	{
		cout<<"================================================================================\n";
		cout<<"||                         新生基本信息统计系统                               ||\n";
		cout<<"||============================================================================||\n";
		cout<<"||============================================================================||\n";
		cout<<"||                      <1>添加新生的信息                                     ||\n";
		cout<<"||                      <2>删除新生的信息                                     ||\n";
		cout<<"||                      <3>修改新生的信息                                     ||\n";
		cout<<"||                      <4>插入新生的信息                                     ||\n";
		cout<<"||                      <5>按姓名查询新生信息                                 ||\n";
		cout<<"||                      <6>按入学英语成绩排序                                 ||\n";
		cout<<"||                      <7>按性别统计新生个数                                 ||\n";
		cout<<"||                      <8>查看全部新生的信息                                 ||\n";
		cout<<"||                      <9>读取新生的信息                                     ||\n";
		cout<<"||                      <0>保存后退出系统                                     ||\n";
		cout<<"================================================================================\n";
		cout<<"请输入数字来选择对应的服务种类:";
		int n;
		if(!(cin>>n)) 
		{
			system("CLS");
			cout<<"输入格式错误,请重新输入!"<<endl;
			cin.clear();
			cin.sync();
			cin.ignore();		//清空缓存区
			
		}
		else 
		{
			switch(n) 
			{
				case 1 :
					system("CLS");
					C.insert_list();
					C.save();
					system("CLS");
					break;
				case 2 :
					system("CLS");
					C.delete_list();
					C.save();
					system("CLS");
					break;
				case 3 :
					system("CLS");
					C.update_list();
					C.save();
					system("CLS");
					break;
				case 4 :
					system("CLS");
					C.charu();
					C.save();
					system("CLS");
					break;
				case 5 :
					system("CLS");
					C.look_name();
					system("CLS");
					break;
				case 6 :
					system("CLS");
					C.paixu_list();
					C.print_all();
					system("CLS");
					break;
				case 7 :
					system("CLS");
					C.count();
					system("CLS");
					break;
				case 8 :
					system("CLS");
					C.print_all();
					system("CLS");
					break;
				case 9 :
					system("CLS");
					C.read();
					system("CLS");
					break;
				case 0 :
					system("CLS");
					C.save();
					end();
					break;
				default:
					system("CLS");
					cout<<"输入错误!没有此服务!请重新输入!"<<endl;
			}
		}
	}
}
 
void menu::end() 
{
	cout<<"\n\n\n\n\n";
	cout<<"\t\t*************************************************"<<endl;
	cout<<"\t\t******                                     ******"<<endl;
	cout<<"\t\t******    谢谢使用新生基本信息统计系统     ******"<<endl;
	cout<<"\t\t******           欢迎下次使用              ******"<<endl;
	cout<<"\t\t******                                     ******"<<endl;
	cout<<"\t\t*************************************************"<<endl;
	exit(0);
}
 
int main() 
{
	
	menu mu;
	mu.menu1();
	return 0;
}
 

程序通过清除缓存区以及基础的对不合法输入数据的应答,基本实现了对不可接受的非法输入处理,保证了程序的基本健壮性,对于可扩展性,本人不才,本软件可扩展性尚且不强。

5.分析与讨论

程序解决的问题:   

程序实现了逐个录入新生信息,如:学生姓名,性别,专业,出生日期,家庭地址,英语入学成绩。对新生信息的删除,修改,插入,以及根据英语成绩进行排序,统计学生人数等基础功能。

未解决的问题

对类的继承与多态的熟练掌握

针对课题讨论的具体内容

链表类的灵活运用,指针的基础操作,文件的使用

在小组中帮助组员解决的问题

链表类的灵活运用,指针的基础操作,文件的使用

本课程设计实施过程中所取得的经验教训

在本次课程设计过程中我学习到了this指针的用法以及随机数的生成,还有对于隐式密码输入的方法,更重要的是我对c++的特性类与对象有了更深的理解和感悟,同时我也吸取了经验与教训,作为学生,我还有很长的学习之路要走,我要积极学习专业知识,目光放长远,作为同伴,我们在学习过程中要互相帮助,共同进步。

6.结束语

在此次课程设计过程中我的收获颇多,在绘制流程图环节我第一次接触了绘图软件,在类图制作环节我学会了制作表格,当然这些都少不了小组成员的相互帮助,此外,通过这次课程设计,让我对之前的知识有了更加精准的掌握,同时掌握了不少新的知识,又增进了小组成员之间的友谊,让我们看到了彼此的优缺点,激发了我学习的斗志,通过此次课程设计,不仅对我本学期的知识掌握情况进行了检测,同时也为我们提供了一次收获友情与知识的机会!


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值