⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 function.c

📁 软件的名称:学生信息管理系统 软件的功能:登录功能、主菜单功能、学生信息录入功能、学生记录的排序功能、查询和删除功能、学生信息打印功能、记录保存功能、记录读取功能、分数统计报表功能和退出功能等。
💻 C
📖 第 1 页 / 共 3 页
字号:
}

//清除信息框内容
CleaseMessage()
{
	ClearScreen(1,19,78,21);//清除信息框内容
}

//无纪录时提示
void NOStuInfoMessage()
{
	CleaseMessage();//清除信息框内容
	ClearScreen(54,17,78,17);//清除输入的
	ShowMessge("NO student information!Input any key black...");
	getch();
	CleaseMessage();//清除信息框内容
}

//添加记录超过100条后提示
void Over_hundred()
{
	CleaseMessage();//清除信息框内容
	ClearScreen(54,17,78,17);//清除输入的
	ShowMessge("number of student is more than 100 !Input any key black...");
    getch();
    CleaseMessage();//清除信息框内容
}

//打印空操作提示
void EmptyMessage(int fromx,int fromy,int tox,int toy)
{
	CleaseMessage();//清除信息框内容	
	ShowMessge("Your inputed cannot be empty!...press any key to continue");
	getch();
	CleaseMessage();//清除信息框内容	
	ClearScreen(fromx,fromy,tox,toy);//清除前一次操作
	SetXY(fromx,fromy);
}

//打印非法字符提示
void InvalidMessage(int fromx,int fromy,int tox,int toy)
{
	CleaseMessage();//清除信息框内容
	ShowMessge("Your inputed contain invalid character!...press any key to continue");
	getch();
	CleaseMessage();//清除信息框内容	
	ClearScreen(fromx,fromy,tox,toy);//清除前一次操作
	SetXY(fromx,fromy);
}
//打印超出范围提示
void ExceedMessage(int fromx,int fromy,int tox,int toy)
{
	CleaseMessage();//清除信息框内容
	ShowMessge("Your inputed  exceeds!...press any key to continue");
	getch();
	CleaseMessage();//清除信息框内容	
	ClearScreen(fromx,fromy,tox,toy);//清除前一次操作
	SetXY(fromx,fromy);
}

//打印页面专用的清除函数
void CleanPrint()
{
	ClearScreen(30,17,78,17);//清除前一次输入
	CleaseMessage();//清除信息框内容
	ClearScreen(1,6,78,15);//清除页面已经打印出来的内容
}

/*打印学生信息属性名称
*/
  void PrintStuAttribute(char str[],int distance,int xcursor,int ycursor)
{
    int i;
	SetXY(xcursor+distance,2);
	printf("%s",str);
	SetXY(xcursor,ycursor);
	printf("%-4s%-21s%-4s%-6s%-6s%-8s%-6s%-9s%-7s%-6s","SNO","NAME","AGE","MATH","CHIN","ENGLISH","PHY","CHEMIAL",
		"TOT","AVG");
	SetXY(xcursor,ycursor+1);
	for(i=0;i<78;i++)
		printf("-");
} 
//求总分
float  Totalscore(student *p,int num)
{
	int i;
	float totalscore=0;
	for(i=0;i<num;i++)
	{
		totalscore+=p->score[i];
	}
	return totalscore;
}

//求平均分
float Avgscore(student *p,int num)
{
	float avg=0;
	avg=Totalscore(p,num)/num;
	return avg;
}

//打印学生数据
void PrintData(student **temp,int count,int pageno,int totalpage)
{
	int i=0;
	int j=0;
	int from;
	int to;
	int ft=0;
	int k;//to-from
	float totalscore=0;//总分
	float avg=0;//平均分
	student *p;
	p=*temp;
	from=(pageno-1)*PAGESIZE;
	to=pageno*PAGESIZE;
	if(to>count)to=count;
	k=to-from;
	while(i<from)
	{	
		i++;
		p=p->next;
	}
		do
		{
		SetXY(1,6+j++);
		totalscore=0;
		avg=0;
	    totalscore=Totalscore(p,5);
		avg=Avgscore(p,5);
		printf("%-4s%-21s%-4d%-6.1f%-6.1f%-8.1f%-6.1f%-9.1f%-7.1f%-6.1f",p->sno,p->name,
			p->age,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4],totalscore,avg);
		p=p->next;
		ft++;
		}while(ft<k);
	ClearScreen(1,16,9,16);
	SetXY(1,16);
	printf("[%d / %d]",pageno,totalpage);//更新页码
	return;
}

//处理跳转
void GotoPage(student **temp,int count,int flag,int pageno,int totalpage)
{
	char ch[3];
	int  select=-1;//接受判断返回值
	SetXY(40,17);
	printf("Goto[%d--%d]:",1,totalpage);
    do
	{
		SetXY(53,17);
		input(ch,2);
		//select=MainMenuValidate(ch,'1',(char)(totalpage%10+48));//调用主菜单验证函数
		select=InputValidate(ch,1,totalpage);
		if (select==1)
		{		
			EmptyMessage(53,17,60,17);//打印空操作提示
		}	
		else if(select==2)
		{
			InvalidMessage(53,17,60,17);//打印非法字符提示
		}
		else if(select==3)
		{		
			ExceedMessage(53,17,60,17);//打印超出范围提示
		}
		else if(select==0)
		{ 
			CleanPrint();
			PrintData(temp,count,atoi(ch),totalpage);//打印跳转到的那页记录	
			break;
		}
	}while(1);	
	return;
}

//打印学生记录 包括分页
int PrintStu(student **temp,int count,int flag,char title[],int back)
{
	int pageno=1;//第几页
	int totalpage;//总共几页
	char str[1];//
	int select;//菜单选择
	PrintStuAttribute(title,32,1,4);
    if(count<=0)
	{
		ShowMessge("No any student information");
        return -1;
	}	
    totalpage=count%PAGESIZE==0 ? count/PAGESIZE:count/PAGESIZE+1;//算出总共页数
	PrintData(temp,count,pageno,totalpage);//先打印第一页学生记录
	SetXY(1,16);
	printf("[%d / %d]",pageno,totalpage);
	SetXY(10,16);
	printf(" [1]First [2]Down [3]Up [4]Last [5]Goto:_[0]Back");
	if(flag==1)
		printf("[6]Del");
    else if(flag==2)
	    printf("[6]NextProject");
	SetXY(1,17);
	if(flag==1 || flag==2)
		printf("Please make you choose[0-6]:");
	else 
		printf("Please make you choose[0-5]:");
	do
	{	
		str[0]='\0';
		SetXY(30,17);
		input(str,1);
		if(flag!=0)
			select=MainMenuValidate(str,'0','6');//调用主菜单验证函数
		else
			select=MainMenuValidate(str,'0','5');//调用主菜单验证函数
		if (select==1)
		{		
			EmptyMessage(30,17,35,17);//打印空操作提示
		}	
		else if(select==2)
		{
			InvalidMessage(30,17,35,17);//打印非法字符提示
		}
		else if(select==3)
		{		
			ExceedMessage(30,17,35,17);//打印超出范围提示
		}
		else if(select==0)
		{
			if(str[0]=='1')
			{
				pageno=1;
				CleanPrint();//清除信息框,前一次输入,已打印内容
				PrintData(temp,count,pageno,totalpage);//先打印第一页学生记录
			}
			else if(str[0]=='2')
			{
				pageno++;
				CleanPrint();//清除信息框,前一次输入,已打印内容
				if(pageno>=totalpage)
					pageno=totalpage;
				PrintData(temp,count,pageno,totalpage);//先打印第一页学生记录
			}
			else if(str[0]=='3')
			{
				pageno--;
				CleanPrint();//清除信息框,前一次输入,已打印内容
				if(pageno<=0)
					pageno=1;
				PrintData(temp,count,pageno,totalpage);//先打印第一页学生记录
			}
			else if(str[0]=='4')
			{
				pageno=totalpage;
				CleanPrint();//清除信息框,前一次输入,已打印内容
				PrintData(temp,count,pageno,totalpage);//先打印第一页学生记录
			}
			else if(str[0]=='5')
			{
				CleaseMessage();//清除信息框内容
				GotoPage(temp,count,flag,pageno,totalpage);	
				
			}
			else if(str[0]=='0')
			{
				return 0;
			}
			else
			{   if(flag!=0 && str[0]=='6')
				{		
					return 6;
				}
			}
		}
	}while(1);	
}
//学号升序
void SnoSortaAsc(student *head,int count)
{
	int i=0;
	int j;
	student *p1,*p2;
	char sno[5];
	char name[25];
    int  age;
	float score;
	p1=head;
	if(p1->next!=NULL)
	{
       for(i=0;i<count;i++)
	   {		   p1=head;
		   do
		   {
			p2=p1->next;//p2是后一个结点
			if(strcmp(p1->sno,p2->sno)>0)
			{
				strcpy(sno,p1->sno);
				strcpy(p1->sno,p2->sno);
				strcpy(p2->sno,sno);
				strcpy(name,p1->name);
				strcpy(p1->name,p2->name);
				strcpy(p2->name,name);
				age=p1->age;
				p1->age=p2->age;
				p2->age=age;
				for(j=0;j<5;j++)
				{
					score=0;
					score=p1->score[j];
					p1->score[j]=p2->score[j];
					p2->score[j]=score;
				}
			}
			p1=p2;
		}while(p2->next!=NULL);
	   }
	}
}

//学号降序
void SnoSortDesc(student *head,int count)
{
	int i=0;
	int j;
	student *p1,*p2;
	char sno[5];
	char name[25];
    int  age;
	float score;
	p1=head;
	if(p1->next!=NULL)
	{
       for(i=0;i<count;i++)
	   {		   p1=head;
		   do
		   {
			p2=p1->next;//p2是后一个结点
			if(strcmp(p1->sno,p2->sno)<0)
			{
				strcpy(sno,p1->sno);
				strcpy(p1->sno,p2->sno);
				strcpy(p2->sno,sno);
				strcpy(name,p1->name);
				strcpy(p1->name,p2->name);
				strcpy(p2->name,name);
				age=p1->age;
				p1->age=p2->age;
				p2->age=age;
				for(j=0;j<5;j++)
				{
					score=0;
					score=p1->score[j];
					p1->score[j]=p2->score[j];
					p2->score[j]=score;
				}
		}
			p1=p2;
		}while(p2->next!=NULL);
	   }
	}

}

//总分升序
//flag决定是否要打印
void ScoreSortAsc(student *head,int count,int flag)
{
	int i=0;
	int j;
	student *p1,*p2;
	char sno[5];
	char name[25];
    int  age;
	float score;//临时变量
	float score1;
	float score2;
	p1=head;
	if(p1->next!=NULL)
	{
       for(i=0;i<count;i++)
	   {		   
		   p1=head;
		   do
		   {
			   score1=0;//清零
			   score2=0;
			   p2=p1->next;//p2是后一个结点
			   score1=Totalscore(p1,5);
			   score2=Totalscore(p2,5);
			   if(score1>score2)
			   {
					strcpy(sno,p1->sno);
					strcpy(p1->sno,p2->sno);
					strcpy(p2->sno,sno);
					strcpy(name,p1->name);
					strcpy(p1->name,p2->name);
					strcpy(p2->name,name);
					age=p1->age;
					p1->age=p2->age;
					p2->age=age;
					for(j=0;j<5;j++)
					{
						score=0;
						score=p1->score[j];
						p1->score[j]=p2->score[j];
						p2->score[j]=score;
					}
			   }
			   p1=p2;
		   }while(p2->next!=NULL);			
		}
	 }
}

//总分降序
//flag决定是否要打印
void ScoreSortDesc(student *head,int count,int flag)
{
	int i=0;
	int j;
	student *p1,*p2;
	char sno[5];
	char name[25];
    int  age;
	float score;//临时变量
	float score1;
	float score2;
	p1=head;
	if(p1->next!=NULL)
	{
       for(i=0;i<count;i++)
	   {		   
		   p1=head;
		   do
		   {
			   score1=0;//清零
			   score2=0;
			   p2=p1->next;//p2是后一个结点
			   score1=Totalscore(p1,5);
			   score2=Totalscore(p2,5);
			   if(score1<score2)
			   {
					strcpy(sno,p1->sno);
					strcpy(p1->sno,p2->sno);
					strcpy(p2->sno,sno);
					strcpy(name,p1->name);
					strcpy(p1->name,p2->name);
					strcpy(p2->name,name);
					age=p1->age;
					p1->age=p2->age;
					p2->age=age;
					for(j=0;j<5;j++)
					{
						score=0;
						score=p1->score[j];
						p1->score[j]=p2->score[j];
						p2->score[j]=score;
					}
			   }
			   p1=p2;
		   }while(p2->next!=NULL);			
		}
	 }
}

//平均分降序
//flag决定是否要打印
void AvgSortDesc(student *head,int count,int flag)
{
	int i=0;
	int j;
	student *p1,*p2;
	char sno[5];
	char name[25];
    int  age;
	float score;//临时变量
	float avg1;
	float avg2;
	p1=head;
	if(p1->next!=NULL)
	{
       for(i=0;i<count;i++)
	   {		   
		   p1=head;
		   do
		   {
			   avg1=0;//清零
			   avg2=0;
			   p2=p1->next;//p2是后一个结点
			   avg1=Avgscore(p1,5);
			   avg2=Avgscore(p2,5);
			   if(avg1<avg2)
			   {
					strcpy(sno,p1->sno);
					strcpy(p1->sno,p2->sno);
					strcpy(p2->sno,sno);
					strcpy(name,p1->name);
					strcpy(p1->name,p2->name);
					strcpy(p2->name,name);
					age=p1->age;
					p1->age=p2->age;
					p2->age=age;
					for(j=0;j<5;j++)
					{
						score=0;
						score=p1->score[j];
						p1->score[j]=p2->score[j];
						p2->score[j]=score;
					}
			   }
			   p1=p2;
		   }while(p2->next!=NULL);			
		}
	 }
	if(flag==1)
		PrintStu(&head,count,0,"Score Sort Asc",2);
}















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -