学生宿舍管理系统

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

typedef struct sushe //宿舍 
{
	char name[100];  //姓名
	char sushehao[100];  //宿舍号
	char banji[100];  //班级 
	char xueyuan[100];  //学院 
	int cnt; //费用 
	struct sushe* next;  //下一个宿舍 
}Sushe;
Sushe* sushe_head;  //宿舍头指针
int sushe_amount;  //总人数 

struct node //用户所住宿舍 
{
	int borrow_amount, max_amount; //所住人数量, 最多住人量 
	double tax;  //超出时限收费比率
	time_t come_time[10], go_time[10];  //住、毕业时间
	Sushe borrow_sushe[6];  //每个宿舍最多住6位同学 
};

typedef struct student //同学 
{
	char student_name[30];  //用户名
	char password[30];  //密码
	char ID[30]; //证件号码
	int admin;  //是否管理员
	struct node student_sushe;  //学生宿舍信息 
	struct student* next;  //下一位学生
}Student;
Student* student_head;  //学生头指针
Student* admin;  //管理员账号
int student_amount;  //学生总数量

//程序功能区
void main_menu();  //主菜单

//主菜单功能区
void student_register();  //学生注册
void student_login();  //学生登录
void admin_login();  //管理员登陆

//核心功能区
void creat_student_list(char*, char*, char*);  //创建学生链表
void creat_sushe_list(char*, char*, char*, char*, int);  //创建宿舍链表
void student_initi(Student*);  //学生宿舍管理初始化
void load();  //从文件中加载数据
void save();  //保存数据到文件

//用户功能区
void student_menu(Student*);  //学生菜单 
void student_change(Student*);  //更改学生信息
int delete_student(Student*);  //删除账号
void borrow_sushe(Student*);  //入住管理 
void return_sushe(Student*);  //离开管理
void history(Student*);  //宿舍记录

//管理员功能区
void admin_initi();  //管理员账号初始化
Student* serch_studentname(char*);  //查找用户名
void admin_menu(Student*);  //管理员菜单
void query_student();  //学生信息查询
void admin_student();  //管理学生信息
void all_history(); //查看学生宿舍情况 
Student* serch_student();  //按序号搜索学生 
void set_admin(Student*);  //设置管理员

//宿舍管理功能区
void add_sushe();  //增加宿舍信息
void delete_sushe();  //删除宿舍信息
void browse_sushe();  //宿舍信息浏览

int main()
{
	main_menu();
	printf("退出系统成功,谢谢使用!\n");
	system("pause"); system("ziqing");
	return 0;
}


void main_menu()  //主菜单
{
	load();
	while (1)
	{
		printf("+*******************************+\n");
		printf("   宿舍管理系统\n");
		printf("请选择操作!\n");
		printf("1、学生注册\n");
		printf("2、学生登陆\n");
		printf("3、管理员登陆\n");
		printf("0、退出\n");
		printf("+*******************************+\n");
		int op; scanf("%d", &op); system("ziqing");
		switch (op)
		{
		case 1: student_register(); break;
		case 2: student_login();  break;
		case 3: admin_login();  break;
		case 0: return;
		default: printf("输入错误,请重新输入!\n"); system("pause"); system("ziqing"); break;
		}
	}
}


/********主菜单功能区***********
void student_register()  //学生注册
{
	char name[30];
	printf("请输入要注册的学生姓名:\n");
	scanf("%s", name);
	Student* account;
	if (account = serch_studentname(name), account != NULL)
	{
		printf("该学生已存在,请重新输入!\n");
		system("pause"); system("ziqing"); return;
	}
	printf("请输入您的账号密码:\n");
	char password[30];
	scanf("%s", password);
	printf("请输入您的证件号码(不超过30个数字):\n");
	char ID[30];
	scanf("%s", ID);
	creat_student_list(name, password, ID);
	printf("恭喜您注册成功!\n");
	++student_amount;
	system("pause"); system("ziqing");
}

void student_login()  //学生登录
{
	char name[30];
	printf("请输入您的姓名:\n");
	scanf("%s", name);
	Student* account;
	if (account = serch_studentname(name), account == NULL)
	{
		printf("该用户名不存在,请注册或重新登陆!\n");
		system("pause"); system("ziqing"); return;
	}
	printf("请输入您的账号密码:\n");
	scanf("%s", name);
	if (strcmp(account->password, name))
	{
		printf("密码错误,请确认后重新登陆!\n");
		system("pause"); system("ziqing"); return;
	}
	printf("恭喜您登录成功,即将跳转用户界面...\n");
	system("pause"); system("ziqing");
	student_menu(account);
}

void admin_login()  //管理员登陆
{
	char name[30];
	printf("尊敬的管理员:\n");
	printf("请输入您的管理账号:\n");
	scanf("%s", name);
	Student* account;
	if (account = serch_studentname(name), account == NULL)
	{
		printf("该账号不存在,请重新输入!\n");
		system("pause"); system("ziqing"); return;
	}
	if (!account->admin)
	{
		printf("该账号暂无管理权限,请联系相关管理人员!\n");
		system("pause"); system("ziqing"); return;
	}
	printf("请输入该管理账号的密码:\n");
	scanf("%s", name);
	if (strcmp(account->password, name))
	{
		printf("密码错误,请确认后重新登陆!\n");
		system("pause"); system("ziqing"); return;
	}
	printf("恭喜您登录成功,即将跳转管理界面...\n");
	system("pause"); system("ziqing");
	admin_menu(account);
}

/********核心功能区***********
void creat_student_list(char* name, char* password, char* ID)  //创建学生链表
{
	Student* np = (Student*)malloc(sizeof(Student));
	np = student_head;
	while (np->next) np = np->next;
	Student* tp = (Student*)malloc(sizeof(Student));
	strcpy(tp->student_name, name);
	strcpy(tp->password, password);
	strcpy(tp->ID, ID);
	tp->admin = 0;
	tp->next = NULL;
	student_initi(tp);
	np->next = tp;
	save();
}

void creat_sushe_list(char* name, char* sushehao, char* banji, char* xueyuan, int cnt)  //创建宿舍链表
{
	Sushe* np = (Sushe*)malloc(sizeof(Sushe));
	np = sushe_head;
	while (np->next) np = np->next;
	Sushe* tb = (Sushe*)malloc(sizeof(Sushe));
	strcpy(tb->name, name);
	strcpy(tb->sushehao, sushehao);
	strcpy(tb->banji, banji);
	strcpy(tb->xueyuan,xueyuan);
	tb->cnt = cnt;
	tb->next = NULL;
	np->next = tb;
	save();
}

void student_initi(Student* account)  //学生宿舍管理初始化
{
	account->student_sushe.borrow_amount = 0;
	account->student_sushe.max_amount = 10;
	account->student_sushe.tax = 1.0;
	memset(account->student_sushe.come_time, 0, sizeof(account->student_sushe.come_time));
	memset(account->student_sushe.go_time, 0, sizeof(account->student_sushe.go_time));
	memset(account->student_sushe.borrow_sushe, 0, sizeof(account->student_sushe.borrow_sushe));
}

void load()  //从文件中加载数据
{
	sushe_head = (Sushe*)malloc(sizeof(Sushe));
	sushe_head->next = NULL;
	sushe_amount = 0;

	FILE* fp2;
	fp2 = fopen("sushe.txt", "rt");
	if (fp2 == NULL)
	{
		fp2 = fopen("sushe.txt", "wt");
		if (fp2 == NULL)
		{
			printf("信息存储失败!\n"); exit(0);
		}
		fclose(fp2);
	}
	else
	{
		Sushe* bp = (Sushe*)malloc(sizeof(Sushe));
		bp = sushe_head;
		Sushe* tp = (Sushe*)malloc(sizeof(Sushe));
		while (fread(tp, sizeof(Sushe), 1, fp2))
		{
			bp->next = tp;
			++sushe_amount;
			tp = tp->next;
			tp = (Sushe*)malloc(sizeof(Sushe));
			bp = bp->next;
		}
		fclose(fp2);
	}

	student_head = (Student*)malloc(sizeof(Student));
	student_head->next = NULL;
	student_amount = 0;

	FILE* fp1;
	fp1 = fopen("student.txt", "rt");
	if (fp1 == NULL)
	{
		admin_initi(); return;
	}
	Student* np = (Student*)malloc(sizeof(Student));
	np = student_head;
	Student* temp = (Student*)malloc(sizeof(Student));
	while (fread(temp, sizeof(Student), 1, fp1))
	{
		np->next = temp;
		++student_amount;
		temp = temp->next;
		temp = (Student*)malloc(sizeof(Student));
		np = np->next;
	}
	admin = student_head->next;
	fclose(fp1);
}

void save()  //保存数据到文件
{
	FILE* fp = fopen("student.txt", "wt");
	Student* temp = student_head->next;
	while (temp)
	{
		fwrite(temp, sizeof(Student), 1, fp);
		temp = temp->next;
	}
	fclose(fp);

	fp = fopen("sushe.txt", "wt");
	Sushe* tb = sushe_head->next;
	while (tb)
	{
		fwrite(tb, sizeof(Sushe), 1, fp);
		tb = tb->next;
	}
	fclose(fp);
}


/********学生功能区***********
void student_menu(Student* account)  //学生菜单
{
	while (1)
	{
		printf("*************************************************\n");
		printf("    欢迎您!\n");
		printf("请输入选项前的数字以确认操作!\n");
		printf("1、学生信息系统\n");
		printf("2、宿舍记录\n");
		printf("3、宿舍信息\n");
		printf("4、修改账号信息\n");
		printf("5、删除账号\n");
		printf("0、退出登陆\n");
		printf("*************************************************\n");
		int op; scanf("%d", &op); system("ziqing");
		switch (op)
		{
		case 1: borrow_sushe(account); break;
		case 2: history(account); system("pause"); system("ziqing"); break;
		case 3: browse_sushe(); system("pause"); system("ziqing"); break;
		case 4: student_change(account);  break;
		case 5: if (delete_student(account))
		{
			printf("该账号已被删除,请重新登陆!\n");
			system("pause"); system("ziqing");
			return;
		}
				else break;
		case 0: printf("账号登出成功!\n"); system("pause"); system("ziqing"); return;
		default: printf("错误指令,请重新输入!\n"); system("pause"); system("ziqing"); break;
		}
	}
}

void student_change(Student* account)  //更改学生信息
{
	printf("待修改用户:%s\t 您现在可以更改您的个人信息!\n", account->student_name);
	printf("请重新输入您的密码:\n");
	char password[30];
	scanf("%s", password);
	strcpy(account->password, password);
	printf("用户%s\t账号密码已修改!\n", account->student_name);
	printf("请重新输入您的证件号码:\n");
	char ID[30];
	scanf("%s", ID);
	strcpy(account->ID, ID);
	printf("用户%s\t证件号码已修改!\n", account->student_name);
	save();
	printf("用户%s\t个人信息修改成功,正在返回上一界面...\n", account->student_name);
	system("pause"); system("ziqing");
}

int delete_student(Student* account)  //删除账号
{
	printf("********************************************\n");
	if (!strcmp(account->student_name, admin->student_name))
	{
		printf("用户%s拥有最高权限,不可被删除!!!正在返回上一层...\n", admin->student_name);
		system("pause"); system("ziqing"); return 0;
	}
	printf("是否需要删除账号%s?\n", account->student_name);
	printf("请输入相应数字以继续操作!\n");
	printf("1、是\t0、否\n");
	int op;  scanf("%d", &op);
	if (op == 1)
	{
		if (account->student_sushe.borrow_amount)
		{
			printf("删除失败!该宿舍有%d位同学还在居住!\n", account->student_sushe.borrow_amount);
		}
		else
		{
			Student* tp = (Student*)malloc(sizeof(Student));
			tp = student_head;
			Student* np = (Student*)malloc(sizeof(Student));
			np = student_head->next;
			while (np)
			{
				if (!strcmp(np->student_name, account->student_name))
				{
					tp->next = np->next;
					free(np); --student_amount;
					save();
					printf("账号已删除成功!\n");
					system("pause"); system("ziqing");
					return 1;
				}
				tp = np;
				np = np->next;
			}
		}
	}
	else if (!op) printf("已取消本次操作!\n");
	else printf("输入选项错误,请重新输入!正在返回上一层...\n");
	system("pause"); system("ziqing"); return 0;
}

void borrow_sushe(Student* account)  //宿舍管理
{
	printf("用户%s:请输入您的有效身份证件号码(不超过30位)以继续!\n", account->student_name);
	char ID[30]; scanf("%s", ID); system("ziqing");
	if (strcmp(account->ID, ID))
	{
		printf("身份证件号码与账号不匹配,请检查后重新输入!\n");
		system("pause"); system("ziqing"); return;
	}
	while (1)
	{
		int ans = account->student_sushe.borrow_amount, Max = account->student_sushe.max_amount;
		if (ans == Max)
		{
			printf("学生%s: 宿舍还剩余%d人 ,最多可住 %d人 !\n", account->student_name, ans, Max);
			system("pause"); system("ziqing"); return;
		}
		browse_sushe();
		printf("请输入您需要查询的宿舍序号(输入 -1 退出查询操作):\n");
		int cnt; scanf("%d", &cnt);
		if (cnt == -1)
		{
			printf("已成功退出学生信息系统!\n"); system("pause"); system("ziqing");
			return;
		}
		else if (cnt > sushe_amount || cnt <= 0)
		{
			printf("请正确输入上表中已有的宿舍序号!\n");
		}
		else
		{
			printf("请设置您需要居住的时间(不超过4年):\n");
			int year; scanf("%d", &year);
			if (year > 4 || year<= 0)
				printf("输入居住时间不被允许,请重新输入!\n");
			else
			{
				Sushe* tb = (Sushe*)malloc(sizeof(Sushe));
				tb = sushe_head->next;
				for (int i = 1; i < cnt; ++i)
					tb = tb->next;
				account->student_sushe.borrow_sushe[ans] = *tb;
				account->student_sushe.come_time[ans] = time(NULL);
				account->student_sushe.go_time[ans] = time(NULL) + year*3600*24*365;
				++account->student_sushe.borrow_amount;
				--sushe_amount;
				save();
				printf("学生%s:居住%s成功!\n", account->student_name, tb->name);
			}
		}
		system("pause"); system("ziqing");
	}
}

void return_sushe(Student * account)  //还书管理
{

	while (1)
	{
		history(account);
		if (!account->student_sushe.borrow_amount)
		{
			system("pause"); system("ziqing"); return;
		}
		printf("请输入您需要离开的宿舍人员(输入-1退出)!\n");
		int cnt = 0; scanf("%d", &cnt); system("ziqing");
		if (cnt == -1)
		{
			printf("正在退出宿舍系统,请稍后...\n");
			system("pause"); system("ziqing"); return;
		}
		if (cnt > account->student_sushe.borrow_amount || cnt < 0)
		{
			printf("请正确输入上述宿舍号!\n");
		}
		else
		{
			int i = 0;
			for (--cnt; i < cnt; ++i);

			char name[100];
			strcpy(name, account->student_sushe.borrow_sushe[i].name);
			time_t t = time(NULL);
			printf("*************************************************\n");
			printf("规定离开时间:%s", ctime(&account->student_sushe.go_time[i]));
			printf("当前时间:%s", ctime(&t));
			if (t > account->student_sushe.go_time[i])
			{
				double cost = t / 360 / 24 * account->student_sushe.tax;
				printf("由于您未在指定日期内离开%s,要支付违约金%.2lf元\n", name, cost);
			}
			else printf("宿舍%s人员离开未超出时间,无需支付违约金!\n", name);
			for (; i < account->student_sushe.borrow_amount; ++i)
			{
				account->student_sushe.borrow_sushe[i] = account->student_sushe.borrow_sushe[i + 1];
				account->student_sushe.come_time[i] = account->student_sushe.come_time[i + 1];
				account->student_sushe.go_time[i] = account->student_sushe.go_time[i + 1];
			}
			--account->student_sushe.borrow_amount;
			++sushe_amount;
			save();
			printf("宿舍%s人员离开成功!\n", name);
		}
		system("pause"); system("ziqing");
	}
}

void history(Student * account)  //宿舍记录
{
	int n = account->student_sushe.borrow_amount;
	printf("*************************************************************\n");
	printf("用户%s:\n", account->student_name);
	if (!n)
	{
		printf("暂无人员入住记录!\n"); return;
	}
	printf("入住人员宿舍号:\n");
	for (int i = 0; i < n; ++i)
	{
		struct node t = account->student_sushe;
		time_t nt = time(NULL)-t.go_time[i+1];
		double cost = 0.0;
		if (nt > 0) cost = t.tax * (nt / 360/ 24);
		printf("%d:\n", i + 1);
		printf("  宿舍号:%s\n", t.borrow_sushe[i].name);
		printf("  入住时间:%s", ctime(&t.come_time[i]));
		printf("  规定毕业时间:%s", ctime(&t.go_time[i]));
		if (nt > 0) printf("  是否超时:否\n");
		else printf("  是否超时:是\n");
		printf("  违约费用:%.2lf\n", cost);
	}
}


/********管理员功能区***********
void admin_initi()  
{
	FILE* fp = fopen("student.txt", "wb");
	if (fp == NULL)
	{
		printf("管理员初始化失败!\n"); exit(0);
	}
	admin = (Student*)malloc(sizeof(Student));
	strcpy(admin->student_name, "admin");
	strcpy(admin->password, "123456");
	strcpy(admin->ID, "20200802050100");
	admin->admin = 1;
	admin->next = NULL;
	student_initi(admin);
	student_head->next = admin;
	student_amount = 1;
	save();
	fclose(fp);
}

Student* serch_studentname(char* name)  //查找用户名
{
	Student* np = student_head->next;
	while (np)
	{
		if (!strcmp(np->student_name, name)) return np;
		np = np->next;
	}
	return NULL;
}

void admin_menu(Student * account)  //管理员菜单
{
	while (1)
	{ 
		printf("*************************************************\n");
		printf("    欢迎您!\n");
		printf("请输入选项前的数字以确认操作!\n");
		printf("1、增加宿舍信息\n");
		printf("2、删除宿舍信息\n");
		printf("3、宿舍信息\n");
		printf("4、管理用户信息\n");
		printf("0、退出登陆\n");
		printf("*************************************************\n");
		int op; scanf("%d", &op); system("ziqing");
		switch (op)
		{
		case 1: add_sushe(); break;
		case 2: delete_sushe(); break;
		case 3: browse_sushe(); system("pause"); system("ziqing"); break;
		case 4: admin_student(); break;
		case 0: printf("退出管理账号成功!\n"); system("pause"); system("ziqing"); return;
		default: printf("错误的指令,请重新输入!\n"); system("pause"); system("ziqing"); break;
		}
	}
}

void query_student()  //用户信息查询
{
	int cnt = 1;
	Student* np = (Student*)malloc(sizeof(Student));
	np = student_head->next;
	printf("序号\t用户名\t\t密码\t\t证件号码\t\t是否管理员\n");
	while (np)
	{
		printf("%d\t%s\t\t%s\t\t%s\t\t", cnt, np->student_name, np->password, np->ID);
		if (np->admin) printf(" 是\n");
		else printf(" 否\n");
		np = np->next;
		++cnt;
	}
}

void admin_student()  //管理用户信息
{
	while (1)
	{
		printf("*************************************************\n");
		printf("    欢迎使用\n");
		printf("请输入选项前的数字以确认操作!\n");
		printf("1、查看用户信息\n");
		printf("2、修改用户信息\n");
		printf("3、查看用户宿舍情况\n");
		printf("4、删除用户账号\n");
		printf("0、返回总管理界面\n");
		printf("*************************************************\n");
		Student* np = (Student*)malloc(sizeof(Student));
		int op; scanf("%d", &op); system("ziqing");
		switch (op)
		{
		case 1: query_student(); system("pause"); system("ziqing"); break;
		case 2: if (np = serch_student(), np != NULL) student_change(np);
				else
		{
			system("pause"); system("ziqing");
		}
				break;
		case 3: all_history(); break;
		case 4:if (np = serch_student(), np != NULL)
		{
			int admin = np->admin;
			if (delete_student(np) && admin)
				printf("该账号已被删除,请重新登陆!\n");
			system("pause"); system("ziqing");
			return;
		}
			   else
		{
			system("pause"); system("ziqing");
		}
			   break;
		case 0: printf("退出用户管理界面成功!\n"); system("pause"); system("ziqing"); return;
		default: printf("错误的指令,请重新输入!\n"); system("pause"); system("ziqing"); break;
		}
	}
}

void all_history() //查看用户入住离校情况
{
	while (1)
	{
		printf("###########################################################\n");
		printf("欢迎使用用户宿舍入住查询系统!\n");
		Student* account = (Student*)malloc(sizeof(Student));
		account = serch_student();
		if (account)
		{
			history(account);
			printf("查阅成功!\n");
			printf("是否毕业,是请按1,不是请按0\n");
			int op; scanf("%d", &op); system("ziqing");
			switch(op)
			{
				case 1:
					return_sushe(account);
					break;
				case 0: system("pause"); system("ziqing"); return;
				default : printf("错误的指令,请重新输入!\n"); system("pause"); system("ziqing"); break;
			}
			system("pause"); system("ziqing"); return;
		}
		system("pause"); system("ziqing");
	}
}

Student* serch_student()  //按序号搜索用户
{
	query_student();
	printf("请输入待操作的用户序号:\n");
	int cnt; scanf("%d", &cnt); system("ziqing");
	if (cnt > student_amount || cnt <= 0)
		printf("请正确输入上图中待操作的用户序号!\n");
	else
	{
		Student* tb = (Student*)malloc(sizeof(Student));
		tb = student_head->next;
		for (int i = 1; i < cnt; ++i)
			tb = tb->next;
		return tb;
	}
	return NULL;
}
/********学生功能区***********
void add_sushe()  //增加学生信息
{
	char name[100], sushehao[100], banji[100], xueyuan[100];
	int cnt;
	printf("请输入需要添加的学生名称:\n");
	scanf("%s", name);
	printf("请输入需要添加的学生宿舍号:\n");
	scanf("%s", sushehao);
	printf("请输入需要添加的学生班级:\n");
	scanf("%s", banji);
	printf("请输入需要添加的学生学院:\n");
	scanf("%s", xueyuan);
	printf("请输入需要添加的学生宿舍费用:\n");
	scanf("%d", &cnt);
	++sushe_amount;
	creat_sushe_list(name, sushehao, banji, xueyuan, cnt);
	printf("添加学生 %s 成功!\n", name);
	system("pause"); system("ziqing");
}

void delete_sushe()  //删除宿舍信息
{
	while (1)
	{
		browse_sushe();
		printf("请输入待删除的宿舍序号(输入 -1 退出):\n");
		int cnt; scanf("%d", &cnt);
		if (cnt == -1)
		{
			printf("已成功退出删除系功能!\n"); system("pause"); system("ziqing");
			return;
		}
		else if (cnt > sushe_amount || cnt <= 0)
		{
			printf("请正确输入上图中待删除的学生序号!\n");
		}
		else
		{
			Sushe* tb = (Sushe*)malloc(sizeof(Sushe));
			Sushe* np = (Sushe*)malloc(sizeof(Sushe));
			np = sushe_head;
			tb = sushe_head->next;
			for (int i = 1; i < cnt; ++i)
			{
				np = tb;
				tb = tb->next;
			}
			np->next = tb->next;
			free(tb); --sushe_amount;
			save();
			printf("该学生已从系统内删除成功!\n");
		}
		system("pause"); system("ziqing");
	}
}

void browse_sushe()  //学生信息浏览
{
	int cnt = 1;
	if (!sushe_amount)
	{
		printf("系统内暂无该学生信息,请联系管理员添加学生信息!\n");
		return;
	}
	Sushe* tb = (Sushe*)malloc(sizeof(Sushe));
	tb = sushe_head->next;
	printf("系统内学生信息如下:\n");
	printf("%s%16s%16s%16s%16s%16s\n","序号","姓名","宿舍号","班级","学院","宿舍费用\n");
	while (tb)
	{
		printf("%-16d%-16s%-16s%-16s%-16s%-8d\n", cnt, tb->name, tb->sushehao,
			tb->banji, tb->xueyuan, tb->cnt);
		tb = tb->next; ++cnt;
	}
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值