📄 function.c
字号:
}
//清除信息框内容
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 + -