基于C语言的大一第一学期学生信息管理系统(链表)

一、软件功能描述
模块功能说明
1 .add(LinkList *&L) : 添加新的学生信息
2 .expurgate(LinkList *L): 删除已有学生信息
3 . alter(LinkList *L) : 修改已有学生信息
4 .display(LinkList *&L) :浏览全部学生信息
5 .inquire(LinkList *L) :查询单个学生信息
6 .sort(LinkList *L) :排名及统计
7 .seek(LinkList *L) :用于搜索最高分学生
二、 程序设计与实现
(一) 数据结构描述
1 学生节点:

typedef struct Student
{
    char name[100]; 
    char xuehao[100];       
    char id[100];         
    char sex[20];            
    char address[200];    
    int age;               
    char nation[20];      
    int sum;              
    double ave;           
    Score score;           
}stu;

2 课程节点:

 typedef struct score
{
    int score_c;         
    int score_math;         
    int score_english;   
    int score_chinese;   
    int score_sports;    
}Score;

3 链表节点:

typedef struct LinkNode 
{
	stu data; 
	struct LinkNode *next; 
}LinkList;

(二)菜单模块
(1)int main( ):主函数,负责菜单调用
(2)void MainMenu():主菜单
(3) void readFile(LinkList *L):运行前把文件内容读取到电脑内存
(4)void saveFile(LinkList *L):保存学生信息到文件
(三)输入菜单模块
(1)seek(LinkList *L): 搜索函数(用于搜索最高分学生信息)
(2)sort(LinkList *L):排名及统计的函数,用于查询、排榜
(3)ListInsert(LinkList *&L,LinkList *p):用于在链表中插入新节点
(4)InitList(LinkList *&L):初始化链表
(四)数据查询
inquire(LinkList *L):用于查询单个学生信息的函数
(五)数据删除
expurgate(LinkList *L):用于删除学生信息的函数
(六)数据修改
alter(LinkList *L):用于修改学生信息的函数
(七)数据添加
add(LinkList *L):用于添加学生信息的函数
(八)数据浏览
display(LinkList *L):用于浏览全部学生信息的函数
三、代码实现

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#include<Windows.h>
typedef struct score
{
	int score_c;		//C语言成绩
	int score_math;		//高数成绩 
	int score_english;  //英语成绩
	int score_chinese;  //语文成绩
	int score_sports;   //体育成绩 
}Score;
typedef struct Student
{
	char name[100]; 	 //姓名  
	char xuehao[100];  	 //学号  
	char id[100];        //身份证号 
	char sex[20];		 //性别   
	char address[200];   //地址
	int age;			 //年龄  
	char nation[20];     //民族 
	int sum;             //总成绩
	double ave;          //平均分
	Score score;		 //成绩  
}stu;
typedef struct LinkNode//定义节点数据类型
{
	stu data;//链表长度
	struct LinkNode *next;
}LinkList;
void MainMenu()//主菜单
{
	printf("                                ****************************\n");
	printf("                                **欢迎来到学生信息管理系统**\n");
	printf("                                *******AI211 Meredith*******\n");
	printf("                                ****************************\n");
	printf("                                ****************************\n");
	printf("                                **** 1、添加新学生信息   ***\n");
	printf("                                **** 2、删除学生信息     ***\n");
	printf("                                **** 3、修改学生信息     ***\n");
	printf("                                **** 4、显示学生信息     ***\n");
	printf("                                **** 5、排名及统计       ***\n");
	printf("                                **** 6、退出系统         ***\n");
	printf("                                ****************************\n");
}
void InitList(LinkList *&Head)//初始化链表
{
	Head=(LinkList *)malloc(sizeof(LinkList));
	Head->next=NULL; //初始化首节点为空
}
void ListInsert(LinkList *Head,LinkList *p)//插入新节点
{
	LinkList *q=Head;
	while(q->next!=NULL)
	{
		q=q->next;
	}
	p->next=NULL;
	q->next=p;
}
void seek(LinkList *Head)//搜索函数(用于搜索最高分学生信息)
{
	if(Head->next==NULL)
	{
		return;
	}
	int max=0;
	LinkList *q=Head->next;
	int OPtion;
	scanf("%d",&OPtion);
	switch(OPtion)
	{
	case 1:
		{
			while(q)//c语言最高分信息
			{
				if(q->data.score.score_c>max)
				{
					max=q->data.score.score_c;
				}
				q=q->next;
			}
			q=Head->next;
			while(q)
			{
				if(q->data.score.score_c==max)
				{
					printf("学号:%s 姓名:%s 身份证号:%s 性别:%s 民族:%s 地址:%s c语言:%d 高数:%d 英语:%d 语文:%d 体育:%d 年龄:%d\n",q->data.xuehao,q->data.name,q->data.id,q->data.sex,q->data.nation,q->data.address,q->data.score.score_c,q->data.score.score_math,q->data.score.score_english,q->data.score.score_chinese,q->data.score.score_sports,q->data.age);
				}
				q=q->next;
			}
		}
		break;
	case 2:
		{
			while(q)//高数最高分信息
			{
				if(q->data.score.score_math>max)
				{
					max=q->data.score.score_math;
				}
				q=q->next;
			}
			q=Head->next;
			while(q)
			{
				if(q->data.score.score_math==max)
				{
					printf("学号:%s 姓名:%s 身份证号:%s 性别:%s 民族:%s 地址:%s c语言:%d 高数:%d 英语:%d 语文:%d 体育:%d 年龄:%d\n",q->data.xuehao,q->data.name,q->data.id,q->data.sex,q->data.nation,q->data.address,q->data.score.score_c,q->data.score.score_math,q->data.score.score_english,q->data.score.score_chinese,q->data.score.score_sports,q->data.age);
				}
				q=q->next;
			}
		}
		break;
	case 3:
		{
			while(q)//英语最高分信息
			{
				if(q->data.score.score_english>max)
				{
					max=q->data.score.score_english;
				}
				q=q->next;
			}
			q=Head->next;
			while(q)
			{
				if(q->data.score.score_english==max)
				{
					printf("学号:%s 姓名:%s 身份证号:%s 性别:%s 民族:%s 地址:%s c语言:%d 高数:%d 英语:%d 语文:%d 体育:%d 年龄:%d\n",q->data.xuehao,q->data.name,q->data.id,q->data.sex,q->data.nation,q->data.address,q->data.score.score_c,q->data.score.score_math,q->data.score.score_english,q->data.score.score_chinese,q->data.score.score_sports,q->data.age);
				}
				q=q->next;
			}
		}
		break;
	case 4:
		{
			while(q)//语文最高分信息
			{
				if(q->data.score.score_chinese>max)
				{
					max=q->data.score.score_chinese;
				}
				q=q->next;
			}
			q=Head->next;
			while(q)
			{
				if(q->data.score.score_chinese==max)
				{
					printf("学号:%s 姓名:%s 身份证号:%s 性别:%s 民族:%s 地址:%s c语言:%d 高数:%d 英语:%d 语文:%d 体育:%d 年龄:%d\n",q->data.xuehao,q->data.name,q->data.id,q->data.sex,q->data.nation,q->data.address,q->data.score.score_c,q->data.score.score_math,q->data.score.score_english,q->data.score.score_chinese,q->data.score.score_sports,q->data.age);
				}
				q=q->next;
			}
		}
		break;
	case 5:
		{
			while(q)//体育最高分信息
			{
				if(q->data.score.score_sports>max)
				{
					max=q->data.score.score_sports;
				}
				q=q->next;
			}
			q=Head->next;
			while(q)
			{
				if(q->data.score.score_sports==max)
				{
					printf("学号:%s 姓名:%s 身份证号:%s 性别:%s 民族:%s 地址:%s c语言:%d 高数:%d 英语:%d 语文:%d 体育:%d 年龄:%d\n",q->data.xuehao,q->data.name,q->data.id,q->data.sex,q->data.nation,q->data.address,q->data.score.score_c,q->data.score.score_math,q->data.score.score_english,q->data.score.score_chinese,q->data.score.score_sports,q->data.age);
				}
				q=q->next;
			}
		}
		break;
		default:
			{
				printf("请输入正确选项\n");
			}
			break;
	}
}
void alter(LinkList *Head)//修改学生信息
{
	int flag=0;
	printf("请输入您要修改学生的学号:\n");
	char Xuehao[100];
	scanf("%s",Xuehao);
	LinkList *q=Head->next;
	if(Head->next==NULL)//判断该生是否存在
	{
		printf("没有该生信息!\n");
		return;
	}
	while(q!=NULL)
	{
		if(strcmp(q->data.xuehao,Xuehao)==0)
		{
			flag=1;
			printf("请输入您要修改的信息选项:1.姓名 2.成绩(c语言,高数,英语,语文,体育)  3.年龄  4.性别  5.身份证号  6.民族 7.地址\n");
			int option;
			scanf("%d",&option);
			switch(option)
			{
			case 1:
				{
					char Name[100];
					printf("请输入您要修改的名字:");
					scanf("%s",Name);
					printf("修改的名字为:%s\n",Name);
					strcpy(q->data.name,Name);
					printf("修改名字成功!\n");
					break;
				}
			case 2:
				{
					Score sc;
					printf("请输入您要修改的成绩(依次按照c语言、高数、英语、语文、体育写):");
					scanf("%d%d%d%d%d",&sc.score_c,&sc.score_math,&sc.score_english,&sc.score_chinese,&sc.score_sports);
					printf("修改的c语言成绩为:%d  修改的高数成绩为:%d  修改的英语成绩为:%d  修改的语文成绩为:%d  修改的体育成绩为:%d\n",sc.score_c,sc.score_math,sc.score_english,sc.score_chinese,sc.score_sports);  
					q->data.score=sc;
					printf("修改成绩成功!\n");
					break;
				}
			case 3:
				{
					int Age;
					printf("请输入您要修改的年龄:");
					scanf("%d",&Age);
					printf("修改的年龄为:%d\n",Age);
					q->data.age=Age;
					printf("修改年龄成功!\n");
					break;
				}
			case 4:
				{
					char Sex[10];
					printf("请输入您要修改的性别:");
					scanf("%s",Sex);
					printf("修改的性别为:%s\n",Sex);
					strcpy(q->data.sex,Sex);
					printf("修改性别成功!\n");
					break;
				}
				case 5:   
				{
					char Id[100];
					printf("请输入您要修改的身份证号:");
					scanf("%s",Id);
					printf("修改的身份证号为:%s\n",Id);
					strcpy(q->data.id,Id);
					printf("修改身份证号成功!\n");
					break;
				}
				case 6: 	
				{
					char Nation[50];
					printf("请输入您要修改的民族:");
					scanf("%s",Nation);
					printf("修改的民族为:%s\n",Nation);
					strcpy(q->data.nation,Nation);
					printf("修改民族成功!\n");
					break;
				}
				case 7: 	
				{
					char Address[100];
					printf("请输入您要修改的地址:");
					scanf("%s",Address);
					printf("修改的地址为:%s\n",Address);
					strcpy(q->data.address,Address);
					printf("修改地址成功!\n");
					break;
				}
				default:  
				{	
					printf("请输入正确的选项!\n");  
					break;
				}
			}
		}
		q=q->next;
	}
	if(flag==0)
	{
		printf("该生不存在\n");
	}
}
void expurgate(LinkList *Head)//删除学生信息
{
	printf("1.按学号删除\n");
	printf("2.按姓名删除\n");
	printf("请输入您的选项:\n");
	int CHOICE;
	scanf("%d",&CHOICE);
	switch(CHOICE)
	{
	case 1:
		{
			char Xuehao[100];
			printf("请输入您要删除的学生的学号:");
			scanf("%s",Xuehao);
			while(strlen(Xuehao)!=10)
			{
				fflush(stdin);
				printf("请输入十位数字的学号!\n");
				printf("学号:\n");
				scanf("%s",Xuehao);
			}
			LinkList *p,*pa;
			if(Head->next==NULL)//判断该生是否存在
			{
				printf("没有学生信息\n");
				return;
			}
			pa=Head;
			p=pa->next;
			int flag=0;
			while(p)
			{
				if(strcmp(p->data.xuehao,Xuehao)==0)
				{
					flag=1;
					printf("是否确认删除?\n");
					printf("1.确认\n");
					printf("2.取消,返回第一步\n");
					printf("请输入您的选项:\n");
					int OPTION;
					scanf("%d",&OPTION);
					switch(OPTION)
					{
					case 1:
						{
							pa->next=p->next;//删除数据
							free(p);//释放内存
							printf("删除学生成功\n");
						}
						break;
					case 2:
						{
							system("cls");//清屏
							MainMenu();
						}
						break;
						default:
							{
								printf("请输入正确选项!\n");
							}
							break;
					}
					break;
				}
				pa=pa->next;
				p=p->next;
			}
			if(flag==0)
			{
				printf("这个学生不存在\n");
			}
		}
		break;
	case 2:
		{
			char Name[20];
			printf("请输入您要删除的学生的姓名:");
			scanf("%s",Name);
			getchar();
			LinkList *p,*pa;
			if(Head->next==NULL)//判断该生是否存在
			{
				printf("没有学生信息\n");
				return;
			}
			pa=Head;
			p=pa->next;
			int sum=0;
			while(p)
			{
				if(strcmp(p->data.name,Name)==0)
				{
					sum++;
				}
				p=p->next;
			}
			p=pa->next;
			if(sum==1)
			{
				int flag=0;
				while(p)
				{
					if(strcmp(p->data.name,Name)==0)
					{
						flag=1;
						printf("是否确认删除?\n");
						printf("1.确认\n");
						printf("2.取消,返回第一步\n");
						printf("请输入您的选项:\n");
						int OPTION;
						scanf("%d",&OPTION);
						switch(OPTION)
						{
						case 1:
							{
								pa->next=p->next;//删除数据
								free(p);//释放内存
								printf("删除学生成功\n");
							}
							break;
						case 2:
							{
								system("cls");//清屏
								MainMenu();
							}
							break;
							default:
								{
									printf("请输入正确选项!\n");
								}
								break;
						}
						break;
					}
					pa=pa->next;
					p=p->next;
				}
				if(flag==0)
				{
					printf("这个学生不存在\n");
				}	
			}
			else
			{
				printf("姓名为%s的学生有%d个,请根据学号删除!\n",Name,sum);
				char Xuehao[100];
				printf("请输入您要删除的学生的学号:");
				scanf("%s",Xuehao);
				LinkList *p,*pa;
				if(Head->next==NULL)//判断该生是否存在
				{
					printf("没有学生信息\n");
					return;
				}
				pa=Head;
				p=pa->next;
				int flag=0;
				while(p)
				{
					if(strcmp(p->data.xuehao,Xuehao)==0)
					{
						flag=1;
						printf("是否确认删除?\n");
						printf("1.确认\n");
						printf("2.取消,返回第一步\n");
						printf("请输入您的选项:\n");
						int OPTION;
						scanf("%d",&OPTION);
						switch(OPTION)
						{
						case 1:
							{
								pa->next=p->next;//删除数据
								free(p);//释放内存
								printf("删除学生成功\n");
							}
							break;
						case 2:
							{
								system("cls");//清屏
								MainMenu();
							}
							break;
							default:
								{
									printf("请输入正确选项!\n");
								}
								break;
						}
						break;
					}
					pa=pa->next;
					p=p->next;
				}
				if(flag==0)
				{
					printf("这个学生不存在\n");
				}
			}
		}
		break;
		default:
			printf("请输入正确选项!\n");
			break;
	}
}
void add(LinkList *Head)//增加学生信息
{
	char Xuehao[100];
	printf("请输入学生的信息:\n");
	printf("学号:");
	scanf("%s",Xuehao);
	while(strlen(Xuehao)!=10)
	{
		fflush(stdin);
		printf("请输入十位数字的学号!\n");
		printf("学号:\n");
		scanf("%s",Xuehao);
	}
	LinkList *q=Head->next;
	while(q!=NULL)//判断学生信息是否存在
	{
		if(strcmp(q->data.xuehao,Xuehao)==0)
		{
			printf("该学生已存在\n");
			break;
		}
		q=q->next;
	}
	if(q==NULL)
	{
		LinkList *p;
		InitList(p);
		strcpy(p->data.xuehao,Xuehao);
		printf("姓名:");
		char Name[100];
		scanf("%s",Name);
		strcpy(p->data.name,Name);
		printf("身份证号:");
		char Id[100];
		scanf("%s",Id);
		while(strlen(Id)!=18)
		{
			fflush(stdin);
			printf("请输入十八位的身份证号!\n");
			printf("身份证号:\n");
			scanf("%s",Id);
		}
		strcpy(p->data.id,Id);
		printf("性别:");
		char Sex[20];
		scanf("%s",Sex);
		char boy[10]={"男"};
		char girl[10]={"女"};
		while(strcmp(Sex,boy)!=0&&strcmp(Sex,girl)!=0)
		{
			printf("请输入正确的性别:\n");
			scanf("%s",Sex);
		}
		strcpy(p->data.sex,Sex);
		printf("民族:");
		char Nation[50];
		scanf("%s",Nation);
		strcpy(p->data.nation,Nation);
		printf("地址:");
		char Address[100];
		scanf("%s",Address);
		strcpy(p->data.address,Address);
		printf("C语言成绩:");
		Score sc;
		scanf("%d",&sc.score_c);
		while(sc.score_c<0||sc.score_c>100)
		{
			printf("输入错误,请重新输入\n");
			scanf("%d",&sc.score_c);
		}
		p->data.score.score_c=sc.score_c;
		printf("高数成绩:");
		scanf("%d",&sc.score_math);
		while(sc.score_math<0||sc.score_math>100)
		{
			printf("输入错误,请重新输入\n");
			scanf("%d",&sc.score_math);
		}
		p->data.score.score_math=sc.score_math;
		printf("英语成绩:");
		scanf("%d",&sc.score_english);
		while(sc.score_english<0||sc.score_english>100)
		{
			printf("输入错误,请重新输入\n");
			scanf("%d",&sc.score_english);
		}
		p->data.score.score_english=sc.score_english;
		printf("语文成绩:");
		scanf("%d",&sc.score_chinese);
		while(sc.score_chinese<0||sc.score_chinese>100)
		{
			printf("输入错误,请重新输入\n");
			scanf("%d",&sc.score_chinese);
		}
		p->data.score.score_chinese=sc.score_chinese;
		printf("体育成绩:");
		scanf("%d",&sc.score_sports);
		while(sc.score_sports<0||sc.score_sports>100)
		{
			printf("输入错误,请重新输入\n");
			scanf("%d",&sc.score_sports);
		}
		p->data.score.score_sports=sc.score_sports;
		printf("年龄:");
		int Age;
		scanf("%d",&Age);
		p->data.age=Age;
		ListInsert(Head,p);
		printf("添加成功!\n");
	}
}
void inquire(LinkList *Head)//查询学生信息
{
	LinkList *q=Head->next;
	printf("1.按学生学号输入\n");
	printf("2.按学生姓名输入\n");
	printf("请输入您的选项:\n");
	int CHoose;
	scanf("%d",&CHoose);
	switch(CHoose)
	{
	case 1:
		printf("请输入您要查询的学生学号:\n");
		char Xuehao[100];
		scanf("%s",Xuehao);
		while(strlen(Xuehao)!=10)
		{
			fflush(stdin);
			printf("请输入十位数字的学号!\n");
			printf("学号:\n");
			scanf("%s",Xuehao);
		}
		while(q!=NULL)
		{
			if(strcmp(q->data.xuehao,Xuehao)==0)
			{
				printf("姓名:%s\n",q->data.name);
				printf("学号:%s\n",q->data.xuehao);
				printf("身份证号:%s\n",q->data.id);
				printf("性别:%s\n",q->data.sex);
				printf("民族:%s\n",q->data.nation);
				printf("地址:%s\n",q->data.address);
				printf("c语言成绩:%d\n",q->data.score.score_c);
				printf("高数成绩:%d\n",q->data.score.score_math);
				printf("英语成绩:%d\n",q->data.score.score_english);
				printf("语文成绩:%d\n",q->data.score.score_chinese);
				printf("体育成绩:%d\n",q->data.score.score_sports);
				printf("年龄:%d\n",q->data.age);
			}
			q=q->next;
		}
		if(q==NULL)//判断该生是否存在
		{
			printf("没有学生信息\n");
			return;
		}
		break;
	case 2:
		{
			int flag=0;
			printf("请输入您要查询的学生姓名:\n");
			char Name[50];
			scanf("%s",Name);
			while(q!=NULL)
			{
				if(strcmp(q->data.name,Name)==0)
				{
					flag=1;
					printf("姓名:%s\n",q->data.name);
					printf("学号:%s\n",q->data.xuehao);
					printf("身份证号:%s\n",q->data.id);
					printf("性别:%s\n",q->data.sex);
					printf("民族:%s\n",q->data.nation);
					printf("地址:%s\n",q->data.address);
					printf("c语言成绩:%d\n",q->data.score.score_c);
					printf("高数成绩:%d\n",q->data.score.score_math);
					printf("英语成绩:%d\n",q->data.score.score_english);
					printf("语文成绩:%d\n",q->data.score.score_chinese);
					printf("体育成绩:%d\n",q->data.score.score_sports);
					printf("年龄:%d\n",q->data.age);
				}
				q=q->next;
			}
			if(flag==0)
			{
				printf("该生不存在\n");
			}
		}
		break;
		default:
			{
				printf("请输入正确选项!\n");
			}
			break;
	}
}
void display(LinkList *Head)//浏览全部学生信息
{
	LinkList *q=Head->next;
	if(q==NULL)
	{
		printf("还没有学生信息,请增加学生信息\n");
		return;
	}
	else
	{
		printf("|   学号   |  姓名  |      身份证号      |性别|  民族  |         地址         |c语言|高数|英语|语文|体育|年龄|\n");
		printf("--------------------------------------------------------------------------------------------------------------\n");
		while(q)
		{
			printf("|%s|%-8s|%-20s|%-4s|%-8s|%-22s|%-4d|%-5d|%-4d|%-4d|%-4d|%-4d|\n",q->data.xuehao,q->data.name,q->data.id,q->data.sex,q->data.nation,q->data.address,q->data.score.score_c,q->data.score.score_math,q->data.score.score_english,q->data.score.score_chinese,q->data.score.score_sports,q->data.age);
			q=q->next;
		}
	}
}
void sort(LinkList *Head)//排名及统计(冒泡排序)
{
	printf("A.查询学生人数\n");
	printf("B.按性别查询学生人数\n");
	printf("C.按民族查询学生人数\n");
	printf("D.按照平均分数排名\n");
	printf("E.给学生排榜\n");
	printf("F.查询获得某课程的最高分的学生信息\n");
	char choose;
	getchar();//防止吃回车
	scanf("%c",&choose);
	switch(choose)
	{
		case 'A'://查询学生人数
		{
			int total=0;
			LinkList *q=Head;
			while(q!=NULL)
			{
				total++;
				q=q->next;
			}
			printf("学生人数有%d个\n",total-1);
			break;
		}
		case 'B'://按性别查询学生人数
		{
			printf("查找的性别:\n");
			char SEX[3];
			scanf("%s",SEX);
			int sum=0;
			LinkList *q=Head->next;
			while(q!=NULL)
			{
				if(strcmp(q->data.sex,SEX)==0)
				{
					sum++;
				}
				q=q->next;
			}
			printf("性别为%s的学生有%d个\n",SEX,sum);
			break;
		}
		case 'C'://按民族查询学生人数
		{
			printf("查找的民族为:\n");
			char NATion[50];
			scanf("%s",NATion);
			int sum=0;
			LinkList *p=Head->next;
			while(p!=NULL)
			{
				if(strcmp(p->data.nation,NATion)==0)
				{
					sum++;
				}
				p=p->next;
			}
			printf("民族为%s的学生有%d个\n",NATion,sum);
			break;
		}
		case 'D': //统计并排名学生平均分数
		{
			LinkList *q,*p,*r=Head->next;
			if(r==NULL)//判断学生信息是否存在
			{
				printf("还没有学生信息,请增加学生信息\n");
				return;
			}
			while(r)//用两层循环完成排序
			{
				p=r;
				q=r->next;
				LinkList *tmp;//用于排序时暂时存放一个节点
				InitList(tmp);//初始化
				while(q)
				{
					p->data.ave=(p->data.score.score_c+p->data.score.score_math+p->data.score.score_english+p->data.score.score_chinese+p->data.score.score_sports)/5.0;
					q->data.ave=(q->data.score.score_c+q->data.score.score_math+q->data.score.score_english+q->data.score.score_chinese+q->data.score.score_sports)/5.0;
					if(q->data.ave>p->data.ave)//平均分由大到小
					{
						tmp->data.ave=q->data.ave;//先复制q节点信息到tmp
						strcpy(tmp->data.name,q->data.name);
						strcpy(tmp->data.xuehao,q->data.xuehao);
						strcpy(tmp->data.id,q->data.id);
						strcpy(tmp->data.sex,q->data.sex);
						strcpy(tmp->data.nation,q->data.nation);
						strcpy(tmp->data.address,q->data.address);
						tmp->data.age=q->data.age;
						tmp->data.score.score_c=q->data.score.score_c;
						tmp->data.score.score_math=q->data.score.score_math;
						tmp->data.score.score_english=q->data.score.score_english;
						tmp->data.score.score_chinese=q->data.score.score_chinese;
						tmp->data.score.score_sports=q->data.score.score_sports;
						q->data.ave=p->data.ave;//再复制p节点信息到q
						strcpy(q->data.name,p->data.name);
						strcpy(q->data.xuehao,p->data.xuehao);
						strcpy(q->data.id,p->data.id);
						strcpy(q->data.sex,p->data.sex);
						strcpy(q->data.nation,p->data.nation);
						strcpy(q->data.address,p->data.address);
						q->data.age=p->data.age;
						q->data.score.score_c=p->data.score.score_c;
						q->data.score.score_math=p->data.score.score_math;
						q->data.score.score_english=p->data.score.score_english;
						q->data.score.score_chinese=p->data.score.score_chinese;
						q->data.score.score_sports=p->data.score.score_sports;
						p->data.ave=tmp->data.ave;//最后复制节点信息到p
						strcpy(p->data.name,tmp->data.name);
						strcpy(p->data.xuehao,tmp->data.xuehao);
						strcpy(p->data.id,tmp->data.id);
						strcpy(p->data.sex,tmp->data.sex);
						strcpy(p->data.nation,tmp->data.nation);
						strcpy(p->data.address,tmp->data.address);
						p->data.age=tmp->data.age;
						p->data.score.score_c=tmp->data.score.score_c;
						p->data.score.score_math=tmp->data.score.score_math;
						p->data.score.score_english=tmp->data.score.score_english;
						p->data.score.score_chinese=tmp->data.score.score_chinese;
						p->data.score.score_sports=tmp->data.score.score_sports;
					}//完成数据交换
					q=q->next;
				}
				r=r->next;
			}
			display(Head);
			break;
		}
		case 'E'://给学生排榜(包括按课程排序)
		{
			printf("*************************************\n");
			printf("**** 1、按照总成绩排榜            ***\n");
			printf("**** 2、按照c语言成绩排榜         ***\n");
			printf("**** 3、按照高数成绩排榜          ***\n");
			printf("**** 4、按照英语成绩排榜          ***\n");
			printf("**** 5、按照语文成绩排榜          ***\n");
			printf("**** 6、按照体育成绩排榜          ***\n");
			printf("*************************************\n");
			int choice;
			scanf("%d",&choice);
			switch(choice)
			{
			case 1:
				{
					LinkList *q,*p,*r=Head->next;  
					if(r==NULL)//判断学生信息是否存在
					{  
						printf("还没有学生信息,请增加学生信息\n");  
						return;  
					}  
					while(r)//用两层循环完成排序
					{
						p=r;
						q=r->next;
						LinkList *tmp;//用于排序时暂时存放一个节点
						InitList(tmp);
						while(q)
						{
							p->data.sum=p->data.score.score_c+p->data.score.score_math+p->data.score.score_english+p->data.score.score_chinese+p->data.score.score_sports;
							q->data.sum=q->data.score.score_c+q->data.score.score_math+q->data.score.score_english+q->data.score.score_chinese+q->data.score.score_sports;
							if(q->data.sum>p->data.sum)//总成绩由大到小
							{
								tmp->data.sum=q->data.sum;//先复制q节点信息到tmp
								strcpy(tmp->data.name,q->data.name);
								strcpy(tmp->data.xuehao,q->data.xuehao);
								strcpy(tmp->data.id,q->data.id);
								strcpy(tmp->data.sex,q->data.sex);
								strcpy(tmp->data.nation,q->data.nation);
								strcpy(tmp->data.address,q->data.address);
								tmp->data.age=q->data.age;
								tmp->data.score.score_c=q->data.score.score_c;
								tmp->data.score.score_math=q->data.score.score_math;
								tmp->data.score.score_english=q->data.score.score_english;
								tmp->data.score.score_chinese=q->data.score.score_chinese;
								tmp->data.score.score_sports=q->data.score.score_sports;
								q->data.sum=p->data.sum;//再复制p节点信息到q
								strcpy(q->data.name,p->data.name);
								strcpy(q->data.xuehao,p->data.xuehao);
								strcpy(q->data.id,p->data.id);
								strcpy(q->data.sex,p->data.sex);
								strcpy(q->data.nation,p->data.nation);
								strcpy(q->data.address,p->data.address);
								q->data.age=p->data.age;
								q->data.score.score_c=p->data.score.score_c;
								q->data.score.score_math=p->data.score.score_math;
								q->data.score.score_english=p->data.score.score_english;
								q->data.score.score_chinese=p->data.score.score_chinese;
								q->data.score.score_sports=p->data.score.score_sports;
								p->data.sum=tmp->data.sum;//最后复制节点信息到p
								strcpy(p->data.name,tmp->data.name);
								strcpy(p->data.xuehao,tmp->data.xuehao);
								strcpy(p->data.id,tmp->data.id);
								strcpy(p->data.sex,tmp->data.sex);
								strcpy(p->data.nation,tmp->data.nation);
								strcpy(p->data.address,tmp->data.address);
								p->data.age=tmp->data.age;
								p->data.score.score_c=tmp->data.score.score_c;
								p->data.score.score_math=tmp->data.score.score_math;
								p->data.score.score_english=tmp->data.score.score_english;
								p->data.score.score_chinese=tmp->data.score.score_chinese;
								p->data.score.score_sports=tmp->data.score.score_sports;
							}//完成数据交换
							q=q->next;
						}
						r=r->next;
					}
					display(Head);
					break;
				}
			case 2:
				{
					LinkList *q,*p,*r=Head->next;
					if(r==NULL)//判断学生信息是否存在
					{  
						printf("还没有学生信息,请增加学生信息\n");
						return;
					}
					while(r)//用两层循环完成排序
					{
						p=r;
						q=r->next;
						LinkList *tmp;//用于排序时暂时存放一个节点
						InitList(tmp);//初始化
						while(q)
						{
							if(q->data.score.score_c>p->data.score.score_c)//c语言成绩由大到小
							{
								strcpy(tmp->data.name,q->data.name);//先复制q节点信息到tmp
								strcpy(tmp->data.xuehao,q->data.xuehao);
								strcpy(tmp->data.id,q->data.id);
								strcpy(tmp->data.sex,q->data.sex);
								strcpy(tmp->data.nation,q->data.nation);
								strcpy(tmp->data.address,q->data.address);
								tmp->data.age=q->data.age;
								tmp->data.score.score_c=q->data.score.score_c;
								tmp->data.score.score_math=q->data.score.score_math;
								tmp->data.score.score_english=q->data.score.score_english;
								tmp->data.score.score_chinese=q->data.score.score_chinese;
								tmp->data.score.score_sports=q->data.score.score_sports;
								strcpy(q->data.name,p->data.name);//再复制p节点信息到q
								strcpy(q->data.xuehao,p->data.xuehao);
								strcpy(q->data.id,p->data.id);
								strcpy(q->data.sex,p->data.sex);
								strcpy(q->data.nation,p->data.nation);
								strcpy(q->data.address,p->data.address);
								q->data.age=p->data.age;
								q->data.score.score_c=p->data.score.score_c;
								q->data.score.score_math=p->data.score.score_math;
								q->data.score.score_english=p->data.score.score_english;
								q->data.score.score_chinese=p->data.score.score_chinese;
								q->data.score.score_sports=p->data.score.score_sports;
								strcpy(p->data.name,tmp->data.name);//最后复制节点信息到p
								strcpy(p->data.xuehao,tmp->data.xuehao);
								strcpy(p->data.id,tmp->data.id);
								strcpy(p->data.sex,tmp->data.sex);
								strcpy(p->data.nation,tmp->data.nation);
								strcpy(p->data.address,tmp->data.address);
								p->data.age=tmp->data.age;
								p->data.score.score_c=tmp->data.score.score_c;
								p->data.score.score_math=tmp->data.score.score_math;
								p->data.score.score_english=tmp->data.score.score_english;
								p->data.score.score_chinese=tmp->data.score.score_chinese;
								p->data.score.score_sports=tmp->data.score.score_sports;
							}//完成数据交换
							q=q->next;
						}
						r=r->next;
					}
					display(Head);
					break;
				}
			case 3:
				{
					LinkList *q,*p,*r=Head->next;
					if(r==NULL)//判断学生信息是否存在
					{
						printf("还没有学生信息,请增加学生信息\n");
						return;
					}
					while(r)//用两层循环完成排序
					{
						p=r;
						q=r->next;
						LinkList *tmp;//用于排序时暂时存放一个节点
						InitList(tmp);//初始化
						while(q)
						{
							if(q->data.score.score_math>p->data.score.score_math)//高数成绩由大到小
							{
								strcpy(tmp->data.name,q->data.name);//先复制q节点信息到tmp
								strcpy(tmp->data.xuehao,q->data.xuehao);
								strcpy(tmp->data.id,q->data.id);
								strcpy(tmp->data.sex,q->data.sex);
								strcpy(tmp->data.nation,q->data.nation);
								strcpy(tmp->data.address,q->data.address);
								tmp->data.age=q->data.age;
								tmp->data.score.score_c=q->data.score.score_c;
								tmp->data.score.score_math=q->data.score.score_math;
								tmp->data.score.score_english=q->data.score.score_english;
								tmp->data.score.score_chinese=q->data.score.score_chinese;
								tmp->data.score.score_sports=q->data.score.score_sports;
								strcpy(q->data.name,p->data.name);//再复制p节点信息到q
								strcpy(q->data.xuehao,p->data.xuehao);
								strcpy(q->data.id,p->data.id);
								strcpy(q->data.sex,p->data.sex);
								strcpy(q->data.nation,p->data.nation);
								strcpy(q->data.address,p->data.address);
								q->data.age=p->data.age;
								q->data.score.score_c=p->data.score.score_c;
								q->data.score.score_math=p->data.score.score_math;
								q->data.score.score_english=p->data.score.score_english;
								q->data.score.score_chinese=p->data.score.score_chinese;
								q->data.score.score_sports=p->data.score.score_sports;
								strcpy(p->data.name,tmp->data.name);//最后复制节点信息到p
								strcpy(p->data.xuehao,tmp->data.xuehao);
								strcpy(p->data.id,tmp->data.id);
								strcpy(p->data.sex,tmp->data.sex);
								strcpy(p->data.nation,tmp->data.nation);
								strcpy(p->data.address,tmp->data.address);
								p->data.age=tmp->data.age;
								p->data.score.score_c=tmp->data.score.score_c;
								p->data.score.score_math=tmp->data.score.score_math;
								p->data.score.score_english=tmp->data.score.score_english;
								p->data.score.score_chinese=tmp->data.score.score_chinese;
								p->data.score.score_sports=tmp->data.score.score_sports;
							}//完成数据交换
							q=q->next;
						}
						r=r->next;
					}
					display(Head);
					break;
				}
			case 4:
				{
					LinkList *q,*p,*r=Head->next;
					if(r==NULL)//判断学生信息是否存在
					{
						printf("还没有学生信息,请增加学生信息\n");
						return;
					}
					while(r)//用两层循环完成排序
					{
						p=r;
						q=r->next;
						LinkList *tmp;//用于排序时暂时存放一个节点
						InitList(tmp);//初始化
						while(q)
						{
							if(q->data.score.score_english>p->data.score.score_english)//英语成绩由大到小
							{
								strcpy(tmp->data.name,q->data.name);//先复制q节点信息到tmp
								strcpy(tmp->data.xuehao,q->data.xuehao);
								strcpy(tmp->data.id,q->data.id);
								strcpy(tmp->data.sex,q->data.sex);
								strcpy(tmp->data.nation,q->data.nation);
								strcpy(tmp->data.address,q->data.address);
								tmp->data.age=q->data.age;
								tmp->data.score.score_c=q->data.score.score_c;
								tmp->data.score.score_math=q->data.score.score_math;
								tmp->data.score.score_english=q->data.score.score_english;
								tmp->data.score.score_chinese=q->data.score.score_chinese;
								tmp->data.score.score_sports=q->data.score.score_sports;
								strcpy(q->data.name,p->data.name);//再复制p节点信息到q
								strcpy(q->data.xuehao,p->data.xuehao);
								strcpy(q->data.id,p->data.id);
								strcpy(q->data.sex,p->data.sex);
								strcpy(q->data.nation,p->data.nation);
								strcpy(q->data.address,p->data.address);
								q->data.age=p->data.age;
								q->data.score.score_c=p->data.score.score_c;
								q->data.score.score_math=p->data.score.score_math;
								q->data.score.score_english=p->data.score.score_english;
								q->data.score.score_chinese=p->data.score.score_chinese;
								q->data.score.score_sports=p->data.score.score_sports;
								strcpy(p->data.name,tmp->data.name);//最后复制节点信息到p
								strcpy(p->data.xuehao,tmp->data.xuehao);
								strcpy(p->data.id,tmp->data.id);
								strcpy(p->data.sex,tmp->data.sex);
								strcpy(p->data.nation,tmp->data.nation);
								strcpy(p->data.address,tmp->data.address);
								p->data.age=tmp->data.age;
								p->data.score.score_c=tmp->data.score.score_c;
								p->data.score.score_math=tmp->data.score.score_math;
								p->data.score.score_english=tmp->data.score.score_english;
								p->data.score.score_chinese=tmp->data.score.score_chinese;
								p->data.score.score_sports=tmp->data.score.score_sports;
							}//完成数据交换
							q=q->next;
						}
						r=r->next;
					}
					display(Head);
					break;
				}
			case 5:
				{
					LinkList *q,*p,*r=Head->next;  
					if(r==NULL)//判断学生信息是否存在
					{
						printf("还没有学生信息,请增加学生信息\n");
						return;
					}
					while(r)//用两层循环完成排序
					{
						p=r;
						q=r->next;
						LinkList *tmp;//用于排序时暂时存放一个节点
						InitList(tmp);//初始化
						while(q)
						{
							if(q->data.score.score_chinese>p->data.score.score_chinese)//语文成绩由大到小
							{
								strcpy(tmp->data.name,q->data.name);//先复制q节点信息到tmp
								strcpy(tmp->data.xuehao,q->data.xuehao);
								strcpy(tmp->data.id,q->data.id);
								strcpy(tmp->data.sex,q->data.sex);
								strcpy(tmp->data.nation,q->data.nation);
								strcpy(tmp->data.address,q->data.address);
								tmp->data.age=q->data.age;
								tmp->data.score.score_c=q->data.score.score_c;
								tmp->data.score.score_math=q->data.score.score_math;
								tmp->data.score.score_english=q->data.score.score_english;
								tmp->data.score.score_chinese=q->data.score.score_chinese;
								tmp->data.score.score_sports=q->data.score.score_sports;
								strcpy(q->data.name,p->data.name);//再复制p节点信息到q
								strcpy(q->data.xuehao,p->data.xuehao);
								strcpy(q->data.id,p->data.id);
								strcpy(q->data.sex,p->data.sex);
								strcpy(q->data.nation,p->data.nation);
								strcpy(q->data.address,p->data.address);
								q->data.age=p->data.age;
								q->data.score.score_c=p->data.score.score_c;
								q->data.score.score_math=p->data.score.score_math;
								q->data.score.score_english=p->data.score.score_english;
								q->data.score.score_chinese=p->data.score.score_chinese;
								q->data.score.score_sports=p->data.score.score_sports;
								strcpy(p->data.name,tmp->data.name);//最后复制节点信息到p
								strcpy(p->data.xuehao,tmp->data.xuehao);
								strcpy(p->data.id,tmp->data.id);
								strcpy(p->data.sex,tmp->data.sex);
								strcpy(p->data.nation,tmp->data.nation);
								strcpy(p->data.address,tmp->data.address);
								p->data.age=tmp->data.age;
								p->data.score.score_c=tmp->data.score.score_c;
								p->data.score.score_math=tmp->data.score.score_math;
								p->data.score.score_english=tmp->data.score.score_english;
								p->data.score.score_chinese=tmp->data.score.score_chinese;
								p->data.score.score_sports=tmp->data.score.score_sports;
							}//完成数据交换
							q=q->next;
						}
						r=r->next;
					}
					display(Head);
					break;
				}
			case 6:
				{
					LinkList *q,*p,*r=Head->next;  
					if(r==NULL)//判断学生信息是否存在
					{
						printf("还没有学生信息,请增加学生信息\n");
						return;
					}
					while(r)//用两层循环完成排序
					{
						p=r;
						q=r->next;
						LinkList *tmp;//用于排序时暂时存放一个节点
						InitList(tmp);//初始化
						while(q)
						{
							if(q->data.score.score_sports>p->data.score.score_sports)//体育成绩由大到小
							{
								strcpy(tmp->data.name,q->data.name);//先复制q节点信息到tmp
								strcpy(tmp->data.xuehao,q->data.xuehao);
								strcpy(tmp->data.id,q->data.id);
								strcpy(tmp->data.sex,q->data.sex);
								strcpy(tmp->data.nation,q->data.nation);
								strcpy(tmp->data.address,q->data.address);
								tmp->data.age=q->data.age;
								tmp->data.score.score_c=q->data.score.score_c;
								tmp->data.score.score_math=q->data.score.score_math;
								tmp->data.score.score_english=q->data.score.score_english;
								tmp->data.score.score_chinese=q->data.score.score_chinese;
								tmp->data.score.score_sports=q->data.score.score_sports;
								strcpy(q->data.name,p->data.name);//再复制p节点信息到q
								strcpy(q->data.xuehao,p->data.xuehao);
								strcpy(q->data.id,p->data.id);
								strcpy(q->data.sex,p->data.sex);
								strcpy(q->data.nation,p->data.nation);
								strcpy(q->data.address,p->data.address);
								q->data.age=p->data.age;
								q->data.score.score_c=p->data.score.score_c;
								q->data.score.score_math=p->data.score.score_math;
								q->data.score.score_english=p->data.score.score_english;
								q->data.score.score_chinese=p->data.score.score_chinese;
								q->data.score.score_sports=p->data.score.score_sports;
								strcpy(p->data.name,tmp->data.name);//最后复制节点信息到p
								strcpy(p->data.xuehao,tmp->data.xuehao);
								strcpy(p->data.id,tmp->data.id);
								strcpy(p->data.sex,tmp->data.sex);
								strcpy(p->data.nation,tmp->data.nation);
								strcpy(p->data.address,tmp->data.address);
								p->data.age=tmp->data.age;
								p->data.score.score_c=tmp->data.score.score_c;
								p->data.score.score_math=tmp->data.score.score_math;
								p->data.score.score_english=tmp->data.score.score_english;
								p->data.score.score_chinese=tmp->data.score.score_chinese;
								p->data.score.score_sports=tmp->data.score.score_sports;
							}//完成数据交换
							q=q->next;
						}
						r=r->next;
					}
					display(Head);
					break;
				}
				default:
					{
						printf("请输入正确的选项!\n");
						break;
					}
			}
			break;
		case 'F':
			{
				LinkList *q=Head->next;
				printf("******************************\n");
				printf("**** 1、c语言              ***\n");
				printf("**** 2、高数               ***\n");
				printf("**** 3、英语               ***\n");
				printf("**** 4、语文               ***\n");
				printf("**** 5、体育               ***\n");
				printf("******************************\n");
				printf("请输入要查询的最高分学生信息的学科:\n");
				seek(q);
			}
			break;
			default:
				printf("请输入正确的选项!\n");
				break;
		}
	}
}
void readFile(LinkList *Head)//运行前把文件内容读取到电脑内存  
{
	FILE *fp1;
	fp1=fopen("student.txt","r");//以只读方式打开当前目录下的文件
	if(fp1==NULL)
	{
		printf("文件不存在\n");
		exit(0);//终止程序
	}
	int i=0;
	char XUehao[100];   //学号
	char NAme[100];     //名字
	char ID[100];       //身份证号
	char SEx[10];       //性别
	char NAtion[50];    //民族
	char ADdress[100];  //地址
	int AGe;            //年龄
	score sc;           //成绩
	while(fscanf(fp1," %s %s %s %s %s %s %d %d %d %d %d %d",XUehao,NAme,ID,SEx,NAtion,ADdress,&sc.score_c,&sc.score_math,&sc.score_english,&sc.score_chinese,&sc.score_sports,&AGe)!=EOF)
	{
		i++;
	}
	fclose(fp1);
	FILE *fp2;  
	fp2=fopen("student.txt","r");//以只读方式打开当前目录下的文件
	if(fp2==NULL)
	{
		printf("无法打开文件\n");  
		exit(0);//终止程序
	}
	int a=i;
	int b=1;
	char Xuehao[100];   //学号
	char Name[100];     //名字
	char Id[100];       //身份证号
	char Sex[10];       //性别
	char Nation[50];    //民族
	char Address[100];  //地址
	int Age;            //年龄
	while(fscanf(fp2," %s %s %s %s %s %s %d %d %d %d %d %d",Xuehao,Name,Id,Sex,Nation,Address,&sc.score_c,&sc.score_math,&sc.score_english,&sc.score_chinese,&sc.score_sports,&Age)!=EOF)  
	{  
		LinkList *m=(LinkList *)malloc(sizeof(LinkList));
		strcpy(m->data.xuehao,Xuehao);//把后边内容拷贝到前边
		strcpy(m->data.name,Name);
		strcpy(m->data.id,Id);
		strcpy(m->data.sex,Sex);
		strcpy(m->data.nation,Nation);
		strcpy(m->data.address,Address);
		m->data.age=Age;
		m->data.score=sc;
		ListInsert(Head,m);//插入新节点
		m=m->next;
		if(a==b)
		{
			break;
		}
		b++;
	}
	fclose(fp2);//关闭文件
}
void saveFile(LinkList *Head)//保存学生信息到文件
{
	FILE *fp;
	LinkList *p=Head->next;
	if((fp=fopen("student.txt","w"))==NULL)//以只写的方式打开当前目录下的文件
	{
		printf("不能打开此文件,请按任意键退出\n");
		exit(1);//退出
	}
	while(p)
	{
		fprintf(fp,"%s\t%s\t%8s\t%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->data.xuehao,p->data.name,p->data.id,p->data.sex,p->data.nation,p->data.address,p->data.score.score_c,p->data.score.score_math,p->data.score.score_english,p->data.score.score_chinese,p->data.score.score_sports,p->data.age);  
		p=p->next;
	}
	fclose(fp);
}
int main()
{
	system("color 70");
	int a=4;
	printf("正在加载中");
	while(a>=0)
	{
		Sleep(500);
		printf("..........");
		a--;
	}
	printf("加载成功!\n");
	LinkList *Head;
	InitList(Head);
	readFile(Head);//运行前把文件内容读取到电脑
	int Choose;
	MainMenu();//主菜单
	while(1)
	{
		fflush(stdin);//清空缓冲区
		scanf("%d",&Choose);
		switch(Choose)
		{
			case 1://添加信息
			add(Head);
			saveFile(Head);
			system("pause");
			MainMenu();
			printf("请输入您接下来的选项:\n");
			break;
			case 2://删除信息
			expurgate(Head);
			saveFile(Head);
			system("pause");
			MainMenu();
			printf("请输入您接下来的选项:\n");
			break;
			case 3://修改信息
			alter(Head);
			saveFile(Head);
			system("pause");
			MainMenu();
			printf("请输入您接下来的选项:\n");
			break;
			case 4://显示信息
			{
				printf("1.显示全部学生信息\n");
				printf("2.查询学生信息\n");
				int CHOOSE;
				scanf("%d",&CHOOSE);
				switch(CHOOSE)
				{
				case 1:
					display(Head);
					break;
				case 2:
					inquire(Head);
					break;
					default:
						printf("输入错误!\n");
						break;
				}
				system("pause");
				MainMenu();
				printf("请输入您接下来的选项:\n");
			}
			break;
			case 5://查询信息
			sort(Head);
			system("pause");
			MainMenu();
			printf("请输入您接下来的选项:\n");
			break;
			case 6://退出系统
			return 0;
			break;
			default:
				printf("输入错误,请重新输入\n");
				system("pause");
				MainMenu();
				break;	
		}
	}
	return 0;
}

四、注意点
录入文件时应先添加文本文档"student.txt"且文档的编码应为ANSI,否则会打不开文件从而导致程序无法运行。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值