📄 2.c
字号:
#include <stdio.h>
#include <ctype.h> //包含该头文件,程序中要用到toupper()函数
#include <stdlib.h> //包含该头文件,程序中要用到strcmp()函数
struct student
{
int num; //学号
char name[20]; //姓名
int score_1; //成绩1
int score_2; //成绩2
int score_3; //成绩3
float avg; //平均成绩
};
//以下5行为函数声明,自定义了5个函数
void input(struct student stu[50]);
void display(struct student stu[50]);
void sort(struct student stu[50]);
void insert_record(struct student stu[50]);
void delete_record(struct student stu[50]);
int total=0; //总人数,初始化为0
void main()
{
struct student stu[50];
input(stu); //调用input函数输入学员信息
printf("排序前的学员信息如下:\n");
display(stu); //调用display函数输出学员信息
sort(stu); //调用sort函数对学员的平均成绩进行排序
printf("排序后的学员信息如下:\n");
display(stu); //调用display函数输出排序后的学员信息
insert_record(stu); //调用insert函数插入学员信息
delete_record(stu); //调用delete_record函数删除学员的信息
}
void input(struct student stu[50]) //定义input函数,该函数功能是输入学员信息
{
int i; //循环变量,用于控制输入的次数
int sum; //存放总成绩
char select;
printf("---------------------------------请输入学员信息---------------------------------\n");
i=0;
do
{
printf("\n学号:");
scanf("%d",&stu[i].num); //输入学号
printf("\n姓名:");
scanf("%s",&stu[i].name); //输入姓名
printf("\n三门成绩:\n");
printf("成绩1:");
scanf("%d",&stu[i].score_1);//输入成绩1
sum=0; //初始化为0
sum=sum+stu[i].score_1; //累加成绩1
printf("成绩2:");
scanf("%d",&stu[i].score_2);//输入成绩2
sum=sum+stu[i].score_2; //累加成绩2
printf("成绩3:");
scanf("%d",&stu[i].score_3);//输入成绩3
sum=sum+stu[i].score_3; //累加成绩3
stu[i].avg=sum/3.0; //求平均成绩
printf("是否继续输入下一位学员信息?(Y/N)");
fflush(stdin);
select=toupper(getchar());
i++; //录入的人数加1
printf("\n");
}
while(select!='N' && i<50);
total=i; //将已录入的人数保存在total中
}
void display(struct student stu[50])//定义display函数,该函数功能是输出学员信息
{
int i;
printf("学号\t\t姓名\t\t平均成绩\n");
//用for循环输出结构体数组stu中的元素值
for(i=0;i<total;i++)
{
printf(" %d\t\t%s\t\t%.2f\n",stu[i].num,stu[i].name,stu[i].avg);
}
printf("\n");
}
void sort(struct student stu[50]) //定义sort函数,该函数的功能是对平均成绩排序(由高到低)
{
int i;
int j;
struct student Temp;
//用冒泡排序法对平均成绩进行排序
for(i=0;i<total-1;i++) //控制比较趟数,total为已录入的总人数
{
for(j=0;j<total-i-1;j++) //控制每趟比较的次数
{
if(stu[j].avg<stu[j+1].avg) //因为是由高到低的排序,所以是成绩低的应和成绩高的交换
{
Temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=Temp;
}
}
}
}
void insert_record(struct student stu[50]) //定义insert函数,该函数的功能是插入学员信息
{
int sum;
char select;
printf("是否要插入新学员?(Y/N)");
fflush(stdin);
select=toupper(getchar());
if(select=='N') //输入为'N'时,不插入学员记录,则直接输出结构体数组中的学员信息
{
printf("\n学员的信息如下\n");
display(stu);
return;
}
//do-while的循环体执行是在输入'Y'的情况下,表示要插入学员记录
do
{
if(total==50) //限制录入的人数不能超过50
{
printf("\n对不起!已录满50人,不能再输入学员信息:\n");
return;
}
else
{
printf("\n学号:");
scanf("%d",&stu[total].num);
printf("\n姓名:");
scanf("%s",&stu[total].name);
printf("\n三门成绩:\n");
printf("成绩1:");
scanf("%d",&stu[total].score_1);
sum=0;
sum=sum+stu[total].score_1;
printf("成绩2:");
scanf("%d",&stu[total].score_2);
sum=sum+stu[total].score_2;
printf("成绩3:");
scanf("%d",&stu[total].score_3);
sum=sum+stu[total].score_3;
stu[total].avg=sum/3.0; //计算平均成绩
total++; //插入了一条学员信息,学员人数加1
printf("还要继续插入新学员吗?(Y/N)");
fflush(stdin);
select=toupper(getchar());
}
}
while(select!='N');
sort(stu); //调用sort函数对插入新学员后的数据库进行从新排序
printf("\n插入新学员后的学员信息如下:\n");
display(stu); //调用display函数输出插入新学员后的学员信息
}
void delete_record(struct student stu[50]) //定义delete_record函数,该函数的功能是删除学员信息
{
int i;
int j;
int number;
int record=total; //把总人数存放在record中,主要是为了控制格式输出。
char select;
printf("是否要删除某位学员?(Y/N)");
fflush(stdin);
select=toupper(getchar());
if(select=='N') //输入为'N'时,不删除学员记录,则直接输出结构体数组中的学员信息
{
printf("\n学员的信息如下:\n");
display(stu);
return;
}
//do-while的循环体执行是在输入'Y'的情况下,表示要删除学员记录
do
{
printf("\n请输入要删除的学员的学号:\n");
scanf("%d",&number); //输入要删除学员的学号
for(i=0;i<total;i++) //查找该学员的学号,查找次数为最多为total次
{
if(number==stu[i].num) //查找到了学号为number学员的信息
{
//通过for循环进行删除运算
for(j=i;j<total;j++)
{
stu[j]=stu[j+1];
}
total--; //删除一位学员后总人数减1
}
}
printf("\n还要删除某位学员吗?(Y/N)");
fflush(stdin);
select=toupper(getchar());
}
while(select=='Y');
if(total<record) //表示程序中删除了学员
{
printf("\n删除部分学员后学员的信息如下:\n");
display(stu); //调用display函数输出删除后所有学员的信息
}
else //没有查找到欲删除学号的学员信息
{
printf("\n对不起!没有查找到你要删除的学员\n\n学员的信息如下:\n");
display(stu);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -