当前位置: 代码迷 >> C语言 >> 我们的项目题
  详细解决方案

我们的项目题

热度:168   发布时间:2006-10-21 17:24:26.0
我们的项目题

/* ***********************************************************************************
用C语言编写一个程序实现学员成绩管理,每个学员包括3门课的成绩。从键盘输入学员信
息,包括学号、姓名、三门课成绩,计算出学员的平均成绩,按照学员平均成绩由大到小排序
。另外需要增加下面的管理功能:A:插入功能。B删除功能。
************************************************************************************** */
#include<stdio.h>
#include<string.h>
#define N 50
/*定义结构*/
struct student
{
int num;
char name[20];
float chengji[3];
double pjcj;
}stu[N];
/*声明5个自定义函数分别实现录入、显示、排序、插入、删除功能*/
void luru(int);
void xianshi(int);
void paixu(int);
void charu(int);
void shanchu(int);
void main()
{
char ch='y';
int count=0;
printf("请输入学员信息。\n");
printf("\n");
while(ch=='y'||ch=='Y')
{
/*调用录入函数实现录入功能*/
luru(count);
count++;
printf(" 是否继续?(y or n)");
fflush(stdin);
ch=getchar();
printf("\n");
}
printf("排序前的学员信息如下:\n");
/*调用显示函数,使录入的学员信息显示出来*/
xianshi(count);
printf("排序后的学员信息如下:\n");
/*调用排序函数,使录入学员的平均成绩由大到小排序*/
paixu(count);
printf("是否要插入新学员?(y or n)");
/*调用插入函数,插入一个学员信息把其平均成绩和其他学员一起由大到小排序*/
fflush(stdin);
ch=getchar();
printf("\n");
if(ch=='y'||ch=='Y')
{
/*调用插入函数,实现插入功能*/
charu(count);
count++;
printf("插入新学员后的学员信息如下:\n");
/*调用显示函数来显示插入学员信息后的结果*/
xianshi(count);
}
printf("是否要删除某个学员:(y or n)");
fflush(stdin);
ch=getchar();
if(ch=='y'||ch=='Y')
{
/*调用删除函数,实现删除功能*/
shanchu(count);
}
}
void luru(int a)
{
int i;
int sum=0;
printf("学号:");
scanf("%d",&stu[a].num);
printf("\n");
printf("姓名:");
fflush(stdin);
gets(stu[a].name);
printf("\n");
printf("三门成绩:\n");
/*通过for循环输出学员3个成绩并累加*/
for(i=0;i<3;i++)
{
printf("成绩%d:",i+1);
scanf("%f",&stu[a].chengji[i]);
sum+=stu[a].chengji[i];
}
printf("\n");
stu[a].pjcj=sum/3.0;
}
void xianshi(int a)
{
int i;
printf("学号\t姓名\t\t平均成绩\n");
for(i=0;i<a;i++)
printf("%d\t%s\t\t%5.1f\n",stu[i].num,stu[i].name,stu[i].pjcj);
printf("\n");
}
void paixu(int a)
{
struct student temp;
int i,j;
for(i=0;i<a;i++)
{
for(j=0;j<a-i-1;j++)
{
if(stu[j].pjcj<stu[j+1].pjcj)
{
/*交换元素*/
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
printf("学号\t姓名\t\t平均成绩\n");
for(i=0;i<a;i++)
printf("%d\t%s\t\t%5.1f\n",stu[i].num,stu[i].name,stu[i].pjcj);
printf("\n");
}
void charu(int a)
{
int i,j;
double sum=0;
struct student temp;
printf("请输入要插入的学员信息:\n");
printf("学号:");
scanf("%d",&temp.num);
printf("\n");
printf("姓名:");
fflush(stdin);
gets(temp.name);
printf("\n");
printf("三门成绩:\n");
for(i=0;i<3;i++)
{
printf("成绩%d:",i+1);
scanf("%f",&temp.chengji[i]);
sum=sum+temp.chengji[i];
}
printf("\n");
temp.pjcj=sum/3.0;
/*查找第一个小于要插入成绩的位置*/
for(i=0;i<a;i++)
{
if(stu[i].pjcj>temp.pjcj)
break;
}
/*为插入的成绩留出位置*/
for(j=a;j>i;j--)
{
stu[j]=stu[j-1];
}
stu[i]=temp;//将要插入的成绩保存到该位置
}
void shanchu(int a)
{
int i,j,no;
printf("请输入要删除的学员学号:");
scanf("%d",&no);
printf("\n");
for(i=0;i<a;i++)
{
if(no==stu[i].num)
break;
}
if(i<a)
{
/*将删除的学员信息通过循环由后面的元素覆盖*/
for(j=i;j<a-1;j++)
stu[j]=stu[j+1];
printf("删除后的学员信息为:");
printf("学号\t姓名\t\t平均成绩\n");
/*通过循环输出删除后的学员信息*/
for(i=0;i<a-1;i++)
printf("%d\t%s\t\t%5.1f\n",stu[i].num,stu[i].name,stu[i].pjcj);
}
else
printf("没有找到要删除学员的信息\n");
}

搜索更多相关的解决方案: 项目  

----------------解决方案--------------------------------------------------------
  相关解决方案