#include <iostream>
#include <fstream>
using namespace std;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fprint(int score[],long num[],char name[][10]); //打印文件函数
int read(int score[],long num[],char name[][10]);/*定义输入函数*/
void sums(int *sum,float *aver,int score[],int n);/*求和函数*/
void print(long num[],int score[],int n,char name[][10]);/*输出函数*/
void paixu(int n,long num[],int score[],int (*compare)(int a,int b),char name[][10]); /*排序函数*/
int ascending(int a,int b);/*升序*/
int descending(int a,int b);/*降序*/
void paixus(int n,long num[],int score[],int (*compare)(int a,int b),char name[][10]); /*学号排序函数*/
void research(long num[],int score[],int n,long x,char name[][10]); /*查找函数*/
void tongji(int score[],int n); /*统计五个等级函数*/
void namesort(char name[][10],int n,long num[],int score[]);
void nameresearch(long num[],int score[],char research1[],char name[][10],int n);
int main()
{ int n,n1,score[50]; long num[50],x; /*定义学号成绩*/
char name[50][10],research1[10];
int sum=0;float aver=0; /*定义求和与平均分*/
printf("---------------------------------------输入学生学号、姓名和成绩(当输入错误格式时停止输入)---------------------------\n"); /*输入学号成绩*/
n=read(score,num,name);
printf("***********************************1、录入每个学生的学号和考试成绩到文件student.file中*********************************\n***********************************2、计算课程的总分和平均分**********************************************************\n***********************************3、按成绩由高到低排出名次表*********************************************************\n***********************************4、按成绩由低到高排出成绩表*********************************************************\n***********************************5、按学号由小到大排出成绩表*********************************************************\n***********************************6、按学号查询学生排名及考试成绩****************************************************\n***********************************7、统计优秀(90-100)、良好(80-90)、中等(70-80)、及格(60-70)、不及格(60以下)************************************* 各阶段的人数以及所占百分比*******************************************************\n***********************************8、输出每个学生的姓名、学号、考试成绩以及课程总分和平均分***************************\n***********************************9、按姓名的字典顺序排出成绩表*******************************************************\n**********************************10、按学生姓名查询排名及考试成绩******************************************************");
p:printf("\n\n\n-----------------------------------------输入想要的指令(按数字)---------------------------------\n");
scanf("%d",&n1); /*选择想要的选项*/
switch(n1)
{case 1:fprint(score,num,name);goto p;break;
case 2:sums(&sum,&aver,score,n);printf("sum=%d,aver=%f",sum,aver);goto p;break;
case 3:paixu(n,num,score,descending,name);print(num,score,n,name);goto p;break;
case 4:paixu(n,num,score,ascending,name);print(num,score,n,name);goto p;break;
case 5:paixus(n,num,score,ascending,name);print(num,score,n,name);goto p;break;
case 6:paixus(n,num,score,ascending,name);printf("输入要查找的学号\n");scanf("%ld",&x);research(num,score,n,x,name);goto p;break;
case 7:tongji(score,n);goto p;break;
case 8:paixus(n,num,score,ascending,name);print(num,score,n,name);printf("sum=%d,aver=%f",sum,aver);goto p;break;
case 9:namesort(name,n,num,score);print(num,score,n,name);goto p;break;
case 10:printf("输入要查找的姓名:");scanf("%s",research1);nameresearch(num,score,research1,name,n);goto p;break;
default:
printf("错误");
}
system("pause");
return 0;
}
void fprint(int score[],long num[],char name[][10])
{ int i=0;
ofstream outfile("studentfile",ios::out);
if(!outfile)
{ cerr<<"open error!"<<endl;
exit(1);
}
outfile<<"学号"<<" "<<"姓名"<<" "<<"成绩"<<endl;
do
{ outfile<<num[i]<<" "<<name[i]<<" "<<score[i]<<endl;
i++;
}while(num[i]!=-1);
outfile.close();
cout<<"录入完成"<<endl;
}
int read(int score[],long num[],char name[][10])/*输入函数*/
{ int i=-1;
printf("学号\t姓名\t成绩\n");
do{ i++;
scanf("%ld%s%d",&num[i],&name[i],&score[i]);
}while(num[i]>0&&score[i]>0&&score[i]<101&&name[i]>0);
return i;
}
void sums(int *sum,float *aver,int score[],int n) /*求和函数*/
{ for(int i=0;i<n;i++)
{ *sum=*sum+score[i];
}
*aver=(float)*sum/n;
}
void print(long num[],int score[],int n,char name[][10]) /*打印函数*/
{ printf("学号\t姓名\t成绩\n");
for(int i=0;i<n;i++)
printf("%ld\t%s\t%d\n",num[i],name[i],score[i]);
}
void paixu(int n,long num[],int score[],int (*compare)(int a,int b),char name[][10]) /*成绩排序函数*/
{ int t2;long t1;char temp[10];
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{ if((*compare)(score[j],score[i]))
{t1=num[j];num[j]=num[i];num[i]=t1;
t2=score[j];score[j]=score[i];score[i]=t2;
strcpy(temp,name[i]);
strcpy(name[i],name[j]);
strcpy(name[j],temp);
}
}
}
}
int ascending(int a,int b)/*升序*/
{ return a<b;
}
int descending(int a,int b)/*降序*/
{ return a>b;
}
void paixus(int n,long num[],int score[],int (*compare)(int a,int b),char name[][10]) /*学号排序函数*/
{ int t2;long t1;char temp[10];
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{ if((*compare)(num[j],num[i]))
{t1=num[j];num[j]=num[i];num[i]=t1;
t2=score[j];score[j]=score[i];score[i]=t2;
strcpy(temp,name[i]);
strcpy(name[i],name[j]);
strcpy(name[j],temp);
}
}
}
}
void research(long num[],int score[],int n,long x,char name[][10]) /*学号查找函数*/
{
int low=0,heigh=n-1,mid;
while(low<=heigh)
{mid=low+(heigh-low)/2;
if(x>num[mid])
low=mid+1;
else if(x<num[mid])
heigh=mid-1;
else
{ printf("学号\t姓名\t成绩\n");
printf("%ld\t%s\t%d",num[mid],name[mid],score[mid]);goto a;}
}
printf("未找到");
a: ;
}
void tongji(int score[],int n) /*统计五个等级函数*/
{ int count[5]={0,0,0,0,0};
for(int i=0;i<n;i++)
{switch(score[i]/10)
{case 9:count[0]=count[0]+1;break;
case 8:count[1]=count[1]+1;break;
case 7:count[2]=count[2]+1;break;
case 6:count[3]=count[3]+1;break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:count[4]=count[4]+1;break;
}
}
printf("优秀:%.2f%%良好:%.2f%%中等:%.2f%%及格:%.2f%%不及格:%.2f%%",(float)count[0]/n*100,(float)count[1]/n*100,(float)count[2]/n*100,(float)count[3]/n*100,(float)count[4]/n*100);
}
void namesort(char name[][10],int n,long num[],int score[])/*姓名排序函数*/
{ char temp[10];int t2;long t1;
for(int i=0;i<n-1;i++)
{for(int j=i+1;j<n;j++)
{if(strcmp(name[j],name[i])<0)
{strcpy(temp,name[i]);
strcpy(name[i],name[j]);
strcpy(name[j],temp);
t1=num[j];num[j]=num[i];num[i]=t1;
t2=score[j];score[j]=score[i];score[i]=t2;
}
}
}
}
void nameresearch(long num[],int score[],char research1[],char name[][10],int n)/*姓名查找函数*/
{ int i=-1;
do{i++;
}while(strcmp(research1,name[i])!=0);
printf("%ld\t%s\t%d\n",num[i],name[i],score[i]);
}
评论0