当前位置:编程学习 > C/C++ >>

用C++语言解决"班级成绩管理"

项目描述:
班级每个学期的成绩管理是比较烦琐的一项工作,现在需要制作一个软件,实现班级成绩的基本管理和统计。
项目要求
1、能实现班级中每位学生每门课程的成绩管理(成绩的录入,成绩的修改)
2、能计算每位同学的平均成绩和总成绩,并实现输出
3、能计算所有同学某门课程的平均成绩计算
4、能实现班级每位同学的单科和总成绩的排名
5、能实现所有成绩的文件存储
6、能实现所有计算结果的文件保存
答案:
/*这个项目的核心是对存放学员信息的结构数组的操作*/
#include<stdio.h>
/*首先创建一个学员信息的结构*/
struct student
{
int num; //学号
char name[20]; //姓名
float score[3]; //三门课的成绩
float ave; //三门课的平均成绩
}stu[50];//声明一个结构类型的数组

/*定义录入学员信息的录入函数。因为要给结构数组stu[]赋值,
所以是有返回值的,返回类型是一个结构*/
struct student input()
{
struct student in;
int i;
float sum=0;
printf("\n 学号:");
scanf("%d",&in.num);//注意,这里的in.num它是一个成员变量,是个变量,所以'&'别忘了
printf(" 姓名:");
fflush(stdin);
gets(in.name);
printf(" 三门课的成绩 \n");
/*用一个循环来为score[]赋值并累加成绩*/
for(i=0;i<3;i++)
{
printf(" 成绩%d:",i+1);
scanf("%f",&in.score[i]);
sum+=in.score[i];
}
in.ave=sum/3;//计算出平均成绩
return in;
}

/*定义显示学员信息的函数*/
void display(struct student *s,int n)
{
int i;
printf("\n 学号\t姓名\t平均成绩\n");
for(i=0;i<n;i++,s++)//指针循环遍历结构数组时,要让指针也++
{
printf(" %d\t%s\t%5.2f\n",s->num,s->name,s->ave);
}
}

/*定义按学员平均成绩排序的函数*/
void sort(struct student *s,int n)
{
int i,j;
struct student d;//定义一个中间交换变量
for(i=0;i<n;i++)
{
for(j=0;j<n-1-i;j++)
{
if((s+j)->ave<(s+j+1)->ave)
{ //交换的是结构数组里的结构变量
d=*(s+j);
*(s+j)=*(s+j+1);
*(s+j+1)=d;
}
}
}
}

/*定义插入函数*/
void insert(struct student *s,int n)
{
int i,j;
struct student in;
printf("\n 请输入要插入的学员信息");
in=input();
for(i=0;i<n;i++,s++)
{
if(s->ave<in.ave)//前面定义的排序函数是个降序排列,所以寻找一个比插入的平均成绩小的位置
break;
}
if(i<n)
{
for(j=n;j>i;j--)
{
*(s+j)=*(s+j-1);//为插入的结构变量留出位置,其他结构变量往后移一位
}
*(s+i)=in;
}
else//当插入的平均成绩最低时
{
for(j=n;j>0;j--)
{
*(s+j)=*(s+j-1);
}
*(s+0)=in;
}

}

/*定义删除函数*/
void delet(struct student *d,int n)
{
int i,j,no;
printf("\n 请输入要删除学员的学号:");
scanf("%d",&no);
for(i=0;i<n;i++,d++)
{
if(d->num==no)
break;
}
if(i>=n)
printf("\n 没有该学员。\n");
else
{
d=d-i;
for(j=i;j<n;j++)
{
*(d+j)=*(d+j+1);
}
}


}

void main()
{
int i,count=0;//count用来统计输入学员的个数
char ans;
float sum=0;
/*由于不确定学员个数,所以用“回答 y or n ”
来确定是否继续输入学员信息*/
printf("\n 请输入所有学员的信息");
ans='y';
while(ans=='y')
{
if(count<=50)
{
stu[count]=input();//调用录入函数
count++;
printf("\n 是否还要输入学员信息?(y/n)");
fflush(stdin);
ans=getchar();
}
else
printf("\n 学员的个数已超过了最多人数50");
}
printf("\n 排序前的学员信息如下:");
display(stu,count);//调用显示学员信息函数,传递的参数是结构数组和学员的个数
sort(stu,count);//调用排序函数
printf("\n 排序后的学员信息如下:");
display(stu,count);
printf("\n 是否要插入新学员?(y/n)");
fflush(stdin);
ans=getchar();
while(ans=='y')
{
insert(stu,count);//调用插入函数
count++;//插入一个,学员的人数也要加一个
printf("\n 是否还要插入新学员?(y/n)");
fflush(stdin);
ans=getchar();
}
printf("\n 插入新学员后的学员信息如下:");
display(stu,count);
printf("\n 是否要删除某个学员?(y/n)");
fflush(stdin);
ans=getchar();
while(ans=='y')
{
delet(stu,count);//调用删除函数
count--;//删除一个,学员的人数也要减一个
printf("\n 是否还要删除某个学员?(y/n)");
fflush(stdin);
ans=getchar();
}
printf("\n 删除某个学员后的学员信息如下:");
display(stu,count);

}

上一个:用C++编程,如何实现某个文件无法复制
下一个:有好的C++题目,给我发一些

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,