C语言学生管理系统图文超详细版(拷贝即用)

花哥哥的瞎扯:

大一的课设学生管理系统,因为学也学不精,望各位大神轻点骂,多指点一下吖。注释写得相对的仔细,认真看玩就没有不会的!哈哈哈加油!

实现功能:

建立学生结点之后再弄一个链表,用尾插法的方式添加学生元素,主要是由主函数,自定义函数,还有菜单框架函数,及选择功能函数之间的调换,实现主要功能有:增加、删除、修改、统计排序和查询以及信息的存储功能。

理解流程图:

运行环境准备:

 Dev-C++

代码区:

//@你的花哥哥-花森制作
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<bits/stdc++.h>
#include<conio.h>
using namespace std;
struct student//创建学生信息结构体。 
{
	char name[20];
	char nation[10];
	char sex[2];
	long int idnum;
	float math;
	float english;
	float sum;
	
};
struct Node//链表的结点结构。 
{
	struct student data;
	struct Node*next;
	
};

//链表的创建:
Node*creatNode();//1.创建结点

//链表的删除:
struct Node*deleteNodebyname(Node*headNode);//1.按姓名删除结点 
struct Node*deleteNodebynum(Node*headNode, char num[]);//2.按学号删除结点 

//链表的遍历统计:
struct Node*aver(Node*headNode);//1.统计平均数
void mathnopass(Node*headNode);//2.数学未及格人数 
void englishnopass(Node*headNode); //3.英语未及格人数输出与统计 
void selectsex(Node*headNode);//4. 按性别统计学生人数 
void selectnation(Node*headNode);//5.按民族统计学生人数 


//链表的输出:
void printlist(Node*headNode); //1.遍历打印学生信息 

//文件的操作:
void savefile(Node*headNode); //1.文件的保存 
void readfile(Node*headNode);//2.文件的读取
void asavefile(Node*headNode);//3.文件的追加 

//菜单框架:
void printstar();//1.打印横条 * 号 
void print();//2.打印边边 * 号 
void menu();//3.主菜单框架
void menuofdelete();//4.删除菜单框架
void menuofnumalter();//5.按学号修改
void menuofnopass();//6.不及格人数菜单
void menusort(); //排序菜单框架 
 
//界面选择功能:
void keydown();
void keydowndelete();//2.删除菜单
void keydownbynumalter();//3.修改菜单 
void keydownsort();//4.单科成绩排序菜单 
void keydownnopass();//5.不及格人数菜单 

//修改类函数:
Node*altername(Node*headNode);//1.修改姓名
Node*alteridnum(Node*headNode);//2.修改学号
Node*altermath(Node*headNode);//3.修改数学成绩 
Node*alterenglish(Node*headNode);//4.修改英语成绩  

//排序类函数:
void sortmath(Node*headNode); //1.数学成绩排序
void sortaver(Node*headNode);//2.平均成绩排序  
//主程序 
int main()
{
	menu();
	keydown();
	
	return 0;
} 

//链表的创建 :
struct Node*creatNode()//创建学生结点,并填入数据data,返回这结点的指针。 
{
	/*struct Node  *headNode;
	headNode=(struct Node*)malloc(sizeof(struct Node));//sizeof函数计算该结构体的所占的内存大小,malloc创建一个结构体大小的内存地址。 
	headNode->next=NULL; */ 
	Node*pnew;
	Node*ptail;
	Node*p=NULL;
	int i=0;
	cout<<endl;
	cout<<"开始学生信息的录入..."<<endl;
	cout<<endl;
	cout<<"小提示:输入学号为0时停止输入!"<<endl;
	cout<<endl; 
	while(1)
	{
		cout<<"请输入第"<<i+1<<"个学生信息"<<endl; 
		pnew=(struct Node*)malloc(sizeof(struct Node));
		cout<<"学号:";cin>>pnew->data.idnum;
		if(pnew->data.idnum==0) break;
		fflush(stdin);
		cout<<"姓名: "; cin>>pnew->data.name;
		cout<<"民族: "; cin>>pnew->data.nation;
		cout<<"性别: "; cin>>pnew->data.sex;
		cout<<"数学成绩: ";cin>>pnew->data.math;
		cout<<"英语成绩:";cin>>pnew->data.english;
		cout<<endl; 
		pnew->next=NULL;	
		if(i==0)//建立第一个结点的时候 
		{
			p=pnew;
			ptail=pnew;
		}
		else
		{
			ptail->next=pnew;
			ptail=ptail->next;
		}
		i++;	
	}
	return p;//头指针是一个元素 
}

//链表结点的删除 :
struct Node*deleteNodebyname(Node*phead)//按姓名遍历查找并删除。
{
	if(phead==NULL)//头指针的判断是否为空 
	{
		cout<<"无学生数据"<<endl;
		return phead;
	}
	else
	{
		cout<<"请输入要删除的学生姓名:"<<endl; 
	    char name[20];
	    cin>>name;
	    struct Node*p=phead->next;
	    struct Node*q=phead;
	    if(q!=NULL&&p==NULL)//链表只有一个元素情况 
	    {
		    if(strcmp(phead->data.name,name)==0)
		    {
			    phead=phead->next;
			    free(q);
			    cout<<"删除成功"<<endl;
		    }
	    }
	    else
	    {
		    while(p!=NULL)//不是一个元素就进循环 
            {
		        if(strcmp(phead->data.name,name)==0)//如果第一个数直接是匹配的元素。 
		        {
		   	        phead=phead->next;
		  	        free(q);
		  	        cout<<"删除成功"<<endl; 
		   	        break;
		        }
		        if(strcmp(p->data.name,name)==0)//p指针来找要匹配的元素,然后q指向p的前一个。 
		        {
			        q->next=p->next;
			        free(p);
			        cout<<"删除完毕"<<endl;
			        break; 
		        }
		        q=p;
		        p=p->next; 	    
	        }
	        if(p==NULL)//P指针走到最后 
	        {
	        	cout<<"无该学生数据"<<endl; 
	        }
	    }
	    return phead;
	}
}
struct Node*deleteNodebynum(Node*phead)//按学号进行删除。 
{
	if(phead==NULL)
	{
		cout<<"无学生数据"<<endl;
		return phead;
	}
	else
	{
		cout<<"请输入要删除的学生学号:"<<endl; 
	    long int num;
	    cin>>num;
	    struct Node*p=phead->next;
	    struct Node*q=phead;
	    if(q!=NULL&&p==NULL)
	    {
		    if(phead->data.idnum==num)
		    {
			    phead=phead->next;
			    free(q);
			    cout<<"删除成功"<<endl;
		    }
	    }
	    else
	    {
		    while(p!=NULL)//不是一个元素就进循环 
            {
		        if(phead->data.idnum==num)//如果第一个数直接是匹配的元素。 
		        {
		   	        phead=phead->next;
		  	        free(q);
		  	        cout<<"删除成功"<<endl; 
		   	        break;
		        }
		        if(p->data.idnum==num)//p指针来找要匹配的元素,然后q指向p的前一个。 
		        {
			        q->next=p->next;
			        free(p);
			        cout<<"删除完毕"<<endl;
			        break; 
		        }
		        q=p;
		        p=p->next; 	    
	        }
	        if(p==NULL)
	        {
	        cout<<"无该学生数据"<<endl; 
	        }
	    }
	    return phead;
	}
}
	
//链表结点的遍历输出:
void printlist(Node*headNode) //遍历打印输出学生的个人信息 。 
{
	cout<<"正在为您导出学生信息..."<<endl;
	struct Node*pmove=headNode;
	if(pmove==NULL)
	{
		cout<<"无学生信息!"<<endl; 
	} 
	else
	{
		cout.width(4);
	    cout<<"编号 "<<"姓名 "<<" 数学  "<<"英语  "<<endl;
	    while(pmove!=NULL)
	    {
		    cout<<pmove->data.idnum<<"    "<<pmove->data.name<<"   "<<pmove->data.math<<"    "<<pmove->data.english<<endl; 
		    pmove=pmove->next;
        }
	} 
}

//遍历统计 :
struct Node*aver(Node*headNode)//计算每名学生的平均数 
{
	float ave;
	Node*p=headNode;
	Node*phead=p;
	if(p==NULL)
	{
		cout<<"无学生信息 无法求平均数"<<endl;
	}
	else
	{
		cout<<"开始统计成绩信息..."<<endl;
		cout<<"编号 "<<"姓名 "<<"数学 "<<"英语 "<<"平均分"<<endl;
		while(p!=NULL)
        {
    	    ave=(p->data.math+p->data.english)/2;
    	    p->data.sum=ave;
		    cout<<p->data.idnum<<"    "<<p->data.name<<"   "<<p->data.math<<"   "<<p->data.english<<"    "<<ave<<endl;
		    p=p->next;
	    }
	}
	return phead;	
}
void mathnnopass(Node*headNode)
{
	int i=0;
	Node*p=headNode;
	if(p==NULL)
	{
	    cout<<"无学生信息!"<<endl;
	}
	else
	{
		cout<<endl;
	    cout<<"开始统计数学成绩不及格信息..." <<endl;
	    cout<<"姓名 "<<"编号 "<<"数学 "<<endl;
	    cout<<endl;
	    while(p!=NULL)
        {
            if(p->data.math<60)
		    {
		    	i++;
		        cout<<p->data.name<<"  "<<p->data.idnum<<"    "<<p->data.math<<endl;
			}
			p=p->next;    
	    }  
	}
	cout<<endl;
	cout<<"数学总共有"<<i<<"个学生不及格!" <<endl;
	cout<<endl; 
}
void englishnopass(Node*headNode)
{
	int i=0;
	Node*p=headNode;
	if(p==NULL)
	{
	    cout<<"无学生信息!"<<endl;
	}
	else
	{
		cout<<endl;
	    cout<<"开始统计数学成绩不及格信息..." <<endl;
	    cout<<"姓名 "<<"编号 "<<"英语 "<<endl;
	    cout<<endl;
	    while(p!=NULL)
        {
            if(p->data.english<60)
		    {
		    	i++;
		        cout<<p->data.name<<"  "<<p->data.idnum<<"    "<<p->data.english<<endl;
			}
			p=p->next;    
	    }  
	}
	cout<<endl;
	cout<<"英语总共有"<<i<<"个学生不及格!" <<endl;
	cout<<endl;
	
}
void selectsex(Node*headNode)
{ 	
	cout<<endl;
	cout<<"开始按性别统计学生人数..."<<endl;
	cout<<"请输入性别(男 or 女):"<<endl;
	char sex[2];
	cin>>sex;
	int i=0;
	Node*p=headNode;
	if(p==NULL)
	{
	    cout<<"无学生信息!"<<endl;
	}
	else
	{
	    while(p!=NULL)
        {
            if(strcmp(p->data.sex,sex)==0)
		    {
		    	i++;
			}
			p=p->next;    
	    }  
	}
	cout<<endl;
	cout<<"总共有"<<i<<"个" <<sex<<"学生!"<<endl;
	cout<<endl;
	 
	 
}
void selectnation(Node*headNode)
{ 	
	cout<<endl;
	cout<<"开始按民族统计学生人数..."<<endl;
	cout<<"请输入XXX族:"<<endl;
	char nation[10];
	cin>>nation;
	int i=0;
	Node*p=headNode;
	if(p==NULL)
	{
	    cout<<"无学生信息!"<<endl;
	}
	else
	{
	    while(p!=NULL)
        {
            if(strcmp(p->data.nation,nation)==0)
		    {
		    	i++;
			}
			p=p->next;    
	    }  
	}
	cout<<endl;
	cout<<"总共有"<<i<<"个" <<nation<<"学生!"<<endl;
	cout<<endl;
	 
	 
}

//修改类
struct Node*altername(Node*headNode)
{
	cout<<"请输入要修改的学生学号:"<<endl;
	long int num;
	cin>>num;
	struct Node*p=headNode;
	Node*phead=headNode;
	if(p==NULL) cout<<"表格为空"<<endl;
	while(p!=NULL) 
	{
		
		if(p->data.idnum==num)
		{
			char n[20];
			cout<<"请输入新的姓名:"<<endl;
			cin>>n;
			strcpy(p->data.name,n);
			cout<<"修改成功!"<<endl; 
			break;	 
		}
		p=p->next;
	}
	if(p==NULL)
	{
		cout<<"无该学生信息"; 
	}
	return phead;
	
}
 
struct Node*alteridnum(Node*headNode)//修改学号 
{
	cout<<"请输入要修改的学生学号:"<<endl;
	long int num;
	cin>>num;
	struct Node*p=headNode;
	Node*phead=headNode;
	if(p==NULL) cout<<"表格为空"<<endl ;
	while(p!=NULL) 
	{
		
		if(p->data.idnum==num)
		{
			long int n;
			cout<<"请输入新的学号:"<<endl;
			cin>>n;
			p->data.idnum=n;
			cout<<"修改成功!"<<endl;
			break;	 
		}
		p=p->next;
	}
	if(p==NULL)
	{
		cout<<"无该学生信息"; 
	}
	return phead;
			
}

struct Node*altermath(Node*headNode)//修改数学成绩 
{
	cout<<"请输入要修改的学生学号:"<<endl;
	long int num;
	cin>>num;
	struct Node*p=headNode;
	Node*phead=headNode;
	if(p==NULL) cout<<"表格为空" <<endl;
	while(p!=NULL) 
	{
		
		if(p->data.idnum==num)
		{
			float n;
			cout<<"请输入新的数学成绩:"<<endl;
			cin>>n;
			p->data.math=n;
			cout<<"修改成功!"<<endl;
			break;	 
		}
		p=p->next;
	}
	if(p==NULL)
	{
		cout<<"无该学生信息"; 
	}
	return phead;
}

struct Node*alterenglish(Node*headNode)//修改英语成绩
{
	cout<<"请输入要修改的学生学号:"<<endl;
	long int num;
	cin>>num;
	struct Node*p=headNode;
	Node*phead=headNode;
	if(p==NULL) cout<<"表格为空" <<endl;
	while(p!=NULL) 
	{
		
		if(p->data.idnum==num)
		{
			float n;
			cout<<"请输入新的英语成绩成绩:"<<endl;
			cin>>n;
			p->data.english=n;
			cout<<"修改成功!"<<endl;
			break;	 
		}
		p=p->next;
	}
	if(p==NULL)
	{
		cout<<"无该学生信息"<<endl; 
	}
	return phead;
	
} 

//排序类型
void sortmath(Node*headNode)
{
	cout<<"开始进行数学成绩的排序..." <<endl;
    int i,j;
	int len=0;
	struct Node*p;
	struct Node* r;
	struct Node*t=headNode;
	if(t==NULL)
	{
	    cout<<"该表格为空!"<<endl;
	}
	else//表格不为空时就进入 
	{
		
		while(t!=NULL)//计算链表的长度 
	    {
		    len=len+1;
		    t=t->next;
	    }
	    
		
	    for(i=0,p=headNode;i<len-1;++i,p=p->next)//int i 不能放在这里面,因为括号里的类型不全是int类型,还有指针的类型。 
	   {
		    for( j=i+1,r=p->next;j<len;++j,r=r->next)
		    {
			    if(p->data.math<r->data.math)
			    {
				    float temp;
				    temp=p->data.math;
				    p->data.math=r->data.math;
				    r->data.math=temp;
				    char t[20];
					strcpy(t,p->data.name);
					strcpy(p->data.name,r->data.name);
					strcpy(r->data.name,t);
			    }
		    }
	   }
	    int count=1;
	    t=headNode;
		Node*pnew=(struct Node*)malloc(sizeof(struct Node));
		pnew->next=t;
	    cout<<"名次"<<"  "<<"姓名"<<"  "<<"数学成绩"<<endl; 
	    while(t!=NULL)//遍历输出部分 
	    {
	    	cout<<count<<"     "<<t->data.name<<"     "<<t->data.math<<endl;
			pnew=pnew->next; 
		    t=t->next;
		    if(t!=NULL)
		    {
		    	if(pnew->data.math!=t->data.math) count++;   
			}
		    
						
	    }   
	}		
} 

void sortaver(Node*headNode)
{
	cout<<"开始进行平均成绩的排序..." <<endl;
    int i,j;
	int len=0;
	float ave;
	struct Node*p;
	struct Node* r;
	struct Node*t=headNode;
	if(t==NULL)
	{
	    cout<<"该表格为空!"<<endl;
	}
	else//表格不为空时就进入 
	{
		while(p!=NULL)
        {
    	    ave=(p->data.math+p->data.english)/2;
    	    p->data.sum=ave;
		    p=p->next;
	    }
		while(t!=NULL)//计算链表的长度 
	    {
		    len=len+1;
		    t=t->next;
	    }
	    
		
	    for(i=0,p=headNode;i<len-1;++i,p=p->next)//int i 不能放在这里面,因为括号里的类型不全是int类型,还有指针的类型。 
	   {
		    for( j=i+1,r=p->next;j<len;++j,r=r->next)
		    {
			    if(p->data.sum<r->data.sum)
			    {
				    float temp;
				    temp=p->data.sum;
				    p->data.sum=r->data.sum;
				    r->data.sum=temp;
				    char t[20];
					strcpy(t,p->data.name);
					strcpy(p->data.name,r->data.name);
					strcpy(r->data.name,t);
			    }
		    }
	   }
	    int count=1;
	    t=headNode;
		Node*pnew=(struct Node*)malloc(sizeof(struct Node));
		pnew->next=t;
	    cout<<"名次"<<"  "<<"姓名"<<"  "<<"平均成绩"<<endl; 
	    while(t!=NULL)//遍历输出部分 
	    {
	    	cout<<count<<"     "<<t->data.name<<"     "<<t->data.sum<<endl;
			pnew=pnew->next; 
		    t=t->next;
		    if(t!=NULL)
		    {
		    	if(pnew->data.sum!=t->data.sum) count++;   
			}				
	    }   
	}		
}

//文件的操作:
void savefile(Node*headNode)//文件的建立保存,通过遍历把每一条数据都保存。 
{
	struct Node*p=headNode;
	FILE*fp=fopen("student.txt","w");//*fp为一个文件的指针,fopen(文件名,创建的文件权限类型) 文件权限类型:"r","W","a","w+","a+" 。
	while(p!=NULL)
	{
		fwrite(p,sizeof(Node),1,fp);//遍历保存记录的语句。 
		p=p->next;
	}
	fclose(fp) ;
}
void asavefile(Node*headNode)//文件的建立保存,通过遍历把每一条数据都保存。 
{
	struct Node*p=headNode;
	FILE*fp=fopen("student.txt","a");//*fp为一个文件的指针,fopen(文件名,创建的文件权限类型) 文件权限类型:"r","W","a","w+","a+" 。
	while(p!=NULL)
	{
		fwrite(p,sizeof(Node),1,fp);//遍历保存记录的语句。 
		p=p->next;
	}
	fclose(fp) ;
}
Node* readfile(char *filename)//文件的读取。 
{
	Node *phead=NULL;
	FILE *fp;
	if((fp=fopen(filename,"r"))==0) return phead;
	Node *ptail, *pnew;
	int i=0;
	student s;
	while(fread(&s,sizeof(Node),1,fp)!=0)
	{
		pnew=(Node*)malloc(sizeof(Node));
		pnew->data=s;
		pnew->next=NULL;		
		if(i==0)
		{
			phead=pnew;
			ptail=pnew;			
		}
		else
		{
		    ptail->next=pnew;
		    ptail=pnew;
	    }
	    i++;
	}
	fclose(fp);
	return phead;//第一个元素的指针 
}

//菜单选择器 
void keydown()
{
	char choice;
    fflush(stdin);
	choice=getch();
	switch(choice)
	{
		case '0'://退出管理系统。 
			break;	
		case '1'://学生个人信息的录入。
		{
		   	Node*headNode=creatNode();
		   	asavefile(headNode);
		   	system("pause");
		   	system("cls");
		   	menu();
		   	keydown();  
		   	break;
		}
	
		case '2'://遍历输出所有的学生记录。 
		{
			char filename[100];
			strcpy(filename,"student.txt");
			Node*headNode=readfile(filename);
		    printlist(headNode);
		    system("pause");
			system("cls");
			menu();
			keydown();
		    break;
		}
				
		case '3'://平均分
		{
		    char filename[100];
			strcpy(filename,"student.txt");
			Node*headNode=readfile(filename);
			headNode=aver(headNode);
			savefile(headNode);
			system("pause");
			system("cls");
			menu();
			keydown();
		    break;
	    }
	    case '4'://删除修改信息 
	    {
	    	system("cls");
	    	menuofdelete();
	    	keydowndelete();
			break;	
		}
		case '5':
		{
			system("cls");
			menuofnopass();
			keydownnopass();
			break;
		}
		case '6':
		{
			system("cls");
			menusort(); 
			keydownsort();
			break;
		} 
		case '7'://按性别统计人数 
		{
			char filename[100];
			strcpy(filename,"student.txt");
			Node*headNode=readfile(filename);
			selectsex(headNode);
			savefile(headNode);
			system("pause");
			system("cls");
			menu();
			keydown();
		    break;
			
		}
		case '8':
		{
			char filename[100];
			strcpy(filename,"student.txt");
			Node*headNode=readfile(filename);
			selectnation(headNode);
			savefile(headNode);
			system("pause");
			system("cls");
			menu();
			keydown();
		    break;
		}
		default:
		{
			cout<<"输入错误 请重新输入!"<<endl;
			system("pause");
			system("cls");
			menu(); 
			keydown();
			break; 
	    }	 
	}	

}

void keydowndelete()//删除修改方式菜单。 
{
	
	char choice;
    fflush(stdin);
	choice=getch();
	switch(choice)
	{
		case '0':
		{
			system("cls");
			menu();
			keydown();
			break;
		} 
		case '1'://1,按照姓名查找删除 。 
		{
		    char filename[100];
	    	strcpy(filename,"student.txt");
	    	struct Node*phead=readfile(filename);
			phead=deleteNodebyname(phead);
			savefile(phead);
			system("pause");
			system("cls");
			menuofdelete();
			keydowndelete();
			break;
		}	
		case '2'://2,按照学号查找删除。 
		{
			char filename[100];
	    	strcpy(filename,"student.txt");
			struct Node*phead=readfile(filename);
			phead=deleteNodebynum(phead);
			savefile(phead);
			system("pause");
			system("cls");
			menuofdelete();
			keydowndelete();
		    break;
		}
		case '3'://按学号修改信息 
		{
			system("cls");
			menuofnumalter();
			keydownbynumalter();
			
			break;
			 
		} 
		default:
		{
			
		    cout<<"输入错误"<<endl;
			system("pause"); 
			system("cls");
			menuofnumalter();
			keydownbynumalter();
	    	break;
		}	
	} 
}
void keydownbynumalter()//按照学号修改选择器 
{
	char choice;
    fflush(stdin);
	choice=getch();
	switch(choice)
	{
		case '0'://返回到主菜单
		{
			system("cls");
			menu();
			keydown();
			break;
		}
		case '1'://修改学号 
		{
			char filename[100];
	    	strcpy(filename,"student.txt");
			struct Node*headNode=readfile(filename);
			headNode=alteridnum(headNode);
			savefile(headNode);
			system("pause");
			system("cls");
			menuofnumalter(); 
			keydownbynumalter();
			break;
			
		}
		case '2'://修改姓名 
		{
			char filename[100];
	    	strcpy(filename,"student.txt");
			struct Node*headNode=readfile(filename);
			headNode=altername(headNode);
			savefile(headNode);
			system("pause");
			system("cls");
			menuofnumalter(); 
			keydownbynumalter();
			break;
			
		}
		case '3'://修改数学成绩 
		{
			char filename[100];
	    	strcpy(filename,"student.txt");
			struct Node*headNode=readfile(filename);
			headNode=altermath(headNode);
			savefile(headNode);
			system("pause");
			system("cls");
			menuofnumalter(); 
			keydownbynumalter();
			break;
		}
		case '4'://修改英语成绩 
		{
			char filename[100];
	    	strcpy(filename,"student.txt");
			struct Node*headNode=readfile(filename);
			headNode=alterenglish(headNode);
			savefile(headNode);
			system("pause");
			system("cls");
			menuofnumalter(); 
			keydownbynumalter();
			break;
		} 
		default:
		{
			cout<<"您输入错误请重新输入!"<<endl; 
			system("pause");
			system("cls");
			menuofnumalter(); 
			keydownbynumalter();
		}
		 
	}
}

void keydownnopass()
{
	char choice;
    fflush(stdin);
	choice=getch();
	switch(choice)
	{
		case '0':
	    {
	    	system("cls");
		    menu();
		    keydown();
		    break;
	    }
	    case '1'://数学不及格人数 
	    {
	    	char filename[100];
	    	strcpy(filename,"student.txt");
			struct Node*headNode=readfile(filename);
			mathnnopass(headNode);
			system("pause");
			system("cls");
			menuofnopass();
			keydownnopass();
			break;
				
        }
        case '2'://英语不及格人数 
	    {
	    	char filename[100];
	    	strcpy(filename,"student.txt");
			struct Node*headNode=readfile(filename);
	    	englishnopass(headNode);
	    	system("pause");
			system("cls");
			menuofnopass();
			keydownnopass();
			break;	
	    }
	    default:
		{
			cout<<"您输入错误请重新输入!"<<endl;
			system("pause");
			system("cls");
			menuofnopass();
			keydownnopass();
			break;
		} 
	}
	
}
void keydownsort()
{
	char choice;
    fflush(stdin);
	choice=getch();
	switch(choice)
	{
		case '0':
	    {
	    	system("cls");
		    menu();
		    keydown();
		    break;
	    }
	    case '1'://数学排序 
	    {
	    	char filename[100];
	    	strcpy(filename,"student.txt");
			struct Node*headNode=readfile(filename);
			sortmath(headNode); 
			system("pause");
			system("cls");
			menuofnopass();
			keydownnopass();
			break;
				
        }
        case '2'://平均成绩排序 
	    {
	    	char filename[100];
	    	strcpy(filename,"student.txt");
			struct Node*headNode=readfile(filename);
	    	sortaver(headNode);
	    	system("pause");
			system("cls");
			menuofnopass();
			keydownnopass();
			break;	
	    }
	    default:
		{
			cout<<"您输入错误请重新输入!"<<endl;
			system("pause");
			system("cls");
			menuofnopass();
			keydownnopass();
			break;
		} 
	}
}

//菜单框架:
void menu()//功能表的菜单框架。 
{
	void printstar();
	void print();
	printstar();
	print();
	cout<<"*       学生成绩管理系统       *"<<endl;
	print();
	printstar();  
	print();                                   
	cout<<"*            主菜单            *"<<endl;
	print();
	cout<<"*       1.学生信息的录入       *"<<endl;
	cout<<"*       2.学生信息的遍历       *"<<endl;
	cout<<"*       3.学生成绩的平均       *"<<endl;
	cout<<"*       4.信息删除和修改       *"<<endl;
	cout<<"*       5.不合格成绩统计       *"<<endl;
	cout<<"*       6.成绩名次的排序       *"<<endl;
	cout<<"*       7.性别统计学生数       *"<<endl;
	cout<<"*       8.民族统计学生数       *"<<endl;
	cout<<"*       0.管理系统的退出       *"<<endl;
	print();
	print();
	print();
	cout<<"*                              *"<<endl;
	printstar();
	cout<<"请选择以上功能(0-6):"<<endl;	
}

void menuofdelete()
{
	void printstar();
	void print();
	printstar();
	print();
	cout<<"*          删除修改菜单        *"<<endl;
	print();
	printstar();                                     
	cout<<"*                              *"<<endl;
	print();
	cout<<"*        0.返回到主菜单        *"<<endl;
	cout<<"*        1.按照姓名删除        *"<<endl;
	cout<<"*        2.按照学号删除        *"<<endl;
	cout<<"*        3.按学号改信息        *"<<endl;
	cout<<"*                              *"<<endl;
	print();
	print();
	print();
	print();
	cout<<"*                              *"<<endl;
	printstar();
	cout<<"请选择以上功能(0-3):"<<endl;
}

void menuofnumalter()
{
	void printstar();
	void print();
	printstar();
	print();
	cout<<"*         按学号修改菜单       *"<<endl;
	print();
	printstar();                                     
	cout<<"*                              *"<<endl;
	print();
	cout<<"*        0.返回到主菜单        *"<<endl;
	cout<<"*        1.修改学生学号        *"<<endl;
	cout<<"*        2.修改学生姓名        *"<<endl;
	cout<<"*        3.修改数学成绩        *"<<endl;
	cout<<"*        4.修改英语成绩        *"<<endl;
	cout<<"*                              *"<<endl;
	print();
	print();
	print();
	print();
	cout<<"*                              *"<<endl;
	printstar();
	cout<<"请选择以上功能(0-4):"<<endl;
}

void menuofnopass()
{
	void printstar();
	void print();
	printstar();
	print();
	cout<<"*        单科成绩不及格        *"<<endl;
	print();
	printstar();                                     
	cout<<"*                              *"<<endl;
	print();
	cout<<"*        0.返回到主菜单        *"<<endl;
	cout<<"*        1.数学不及格数        *"<<endl;
	cout<<"*        2.英语不及格数        *"<<endl;
	cout<<"*                              *"<<endl;
	cout<<"*                              *"<<endl;
	print();
	print();
	print();
	print();
	cout<<"*                              *"<<endl;
	printstar();
	cout<<"请选择以上功能(0-2):"<<endl;
}
void menusort()
{
	void printstar();
	void print();
	printstar();
	print();
	cout<<"*           排序菜单           *"<<endl;
	print();
	printstar();                                     
	cout<<"*                              *"<<endl;
	print();
	cout<<"*        0.返回到主菜单        *"<<endl;
	cout<<"*        1.数学成绩排序        *"<<endl;
	cout<<"*        2.平均成绩排序        *"<<endl;
	cout<<"*                              *"<<endl;
	cout<<"*                              *"<<endl;
	print();
	print();
	print();
	print();
	cout<<"*                              *"<<endl;
	printstar();
	cout<<"请选择以上功能(0-2):"<<endl;
}


void printstar() //此处有30个星号
{
	cout<<"********************************"<<endl;  
}
void print() 
{
	cout<<"*                              *"<<endl;
}

 话痨:

当时弄这个鬼东西,差点没有给我累死,还好当时还有几位不遗余力的解答我的奇奇怪怪的问题,予以表扬吖。

网站推荐(2020年):

花森酱个人资源导航:huasenjio.top/nav(必备)

花森酱个人笔录博客:huasenjio.top(资源教程)

花哥哥严肃说:

所学的知识均从课本,课外读物,网上收集资料,如果哪有侵权惹到您不开心丫,此外还有我也是小白,如果哪有认识不对的地方系统您抽我一耳光说我哪错了,联系企鹅号:184820911,有哪不明白或没事都可以找我,陪聊,陪吃不陪睡。

发布了28 篇原创文章 · 获赞 34 · 访问量 6078

猜你喜欢

转载自blog.csdn.net/L184820911/article/details/88802322
今日推荐