使用结构体完成学生(学号、姓名、性别、成绩)管理系统
1> 使用菜单实现
2> 功能1:完成对学生信息的录入,确定人数,完成输入
2> 功能2:完成对学生信息的输出
3> 功能3:输出成绩最高和最低学生的信息
4> 功能4:输出学生的总成绩和平均成绩
5> 功能5:对学生信息按成绩进行排序,根据传入的升降序,确定排序功能、
6> 功能6:提示并输入要查找的学生名字,查找该名字是否存在于该班级
7> 功能0:退出
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100
int size = 0;
//定义学生结构体
struct Student
{
int num;
char name[20];
char sex[20];
int score;
};
//定义录入学生信息函数
void do_insert(struct Student *student)
{
//实际学生人数的录入
printf("请输入要录入学生的个数:");
scanf("%d", &size);
getchar();
//循环录入学生信息
for(int i=0; i<size; i++)
{
printf("请输入第%d个学生的学号:", i+1);
scanf("%d", &student[i].num);
printf("请输入第%d个学生的姓名:", i+1);
scanf("%s", student[i].name);
printf("请输入第%d个学生的性别:", i+1);
scanf("%s", student[i].sex);
printf("请输入第%d个学生的分数:", i+1);
scanf("%d", &student[i].score);
printf("\n");
}
printf("录入成功\n");
}
//定义展示学生信息函数
void do_show(struct Student *student)
{
printf("目前的学生信息如下:\n");
printf("\t学号\t姓名\t性别\t成绩\n");
for(int i=0; i<size; i++)
{
printf("\t%d\t%s\t%s\t%d\n",\
student[i].num, student[i].name, student[i].sex, student[i].score);
}
}
//定义展示成绩最高和最低学生的信息函数
void do_maxmin(struct Student *student)
{
int max = 0,maxi = 0,min = 0,mini = 0;
max = student[0].score;
min = student[0].score;
for(int i=0;i<size;i++)
{
if(max < student[i].score)
{
max = student[i].score;
maxi = i;
}
if(min > student[i].score)
{
min = student[i].score;
mini = i;
}
}
printf("成绩最高的学生信息如下:\n");
printf("\t学号\t姓名\t性别\t成绩\n\t%d\t%s\t%s\t%d\n",\
student[maxi].num, student[maxi].name, student[maxi].sex, student[maxi].score);
printf("成绩最低的学生信息如下:\n");
printf("\t学号\t姓名\t性别\t成绩\n\t%d\t%s\t%s\t%d\n",\
student[mini].num, student[mini].name, student[mini].sex, student[mini].score);
}
//定义展示总成绩和平均成绩函数
void do_sumaver(struct Student *student)
{
int sum = 0,aver = 0;
for(int i=0;i<size;i++)
{
sum += student[i].score;
}
aver = sum/size;
printf("总成绩为%d,平均成绩为%d\n",sum,aver);
}
//定义学生信息排序函数
void do_px(struct Student *student,int flag)
{
if(flag == 0)
{
for(int i=1;i<size;i++)
{
for(int j=0;j<size-i;j++)
{
if(student[j].score > student[j+1].score)
{
struct Student temp = student[j];
student[j] = student[j+1];
student[j+1] = temp;
}
}
}
printf("排序成功!\n");
}
else if(flag == 1)
{
for(int i=1;i<size;i++)
{
for(int j=0;j<size-i;j++)
{
if(student[j].score < student[j+1].score)
{
struct Student temp = student[j];
student[j] = student[j+1];
student[j+1] = temp;
}
}
}
printf("排序成功!\n");
}
else
printf("输入数字错误!\n");
}
//定义查找学生信息函数
int do_find(struct Student *student)
{
char str[MAX] = "";
printf("请输入要查找的学生名字:");
scanf("%s",str);
getchar();
for(int i=0;i<size;i++)
{
if(strcmp(str,student[i].name) == 0)
{
return i;
}
}
return -1;
}
/*****************主程序*******************/
int main(int argc, const char *argv[])
{
//定义一个学生数组
struct Student student[MAX];
memset(student,0,sizeof(student)); //初始化
//菜单
int menu = 0;
while(1)
{
printf("\n\t\t======学生管理系统========\n");
printf("\t\t1、录入学生信息\n");
printf("\t\t2、展示学生信息\n");
printf("\t\t3、展示成绩最高和最低学生的信息\n");
printf("\t\t4、展示学生总成绩和平均成绩\n");
printf("\t\t5、学生信息排序\n");
printf("\t\t6、查找学生信息\n");
printf("\t\t0、退出\n");
printf("请输入操作码:");
scanf("%d", &menu);
getchar(); //吸收回车
//对操作码多分支选择
switch(menu)
{
case 1:
{
do_insert(student);
}
break;
case 2:
{
do_show(student);
}
break;
case 3:
{
do_maxmin(student);
}
break;
case 4:
{
do_sumaver(student);
}
break;
case 5:
{
int flag = 0;
printf("请输入0(升序)或1(降序):");
scanf("%d",&flag);
do_px(student,flag);
}
break;
case 6:
{
int n = 0;
n = do_find(student);
if(n == -1)
{
printf("该学生不存在!");
}
else
{
printf("该学生信息如下:\n");
printf("\t学号\t姓名\t性别\t成绩\n\t%d\t%s\t%s\t%d\n",\
student[n].num, student[n].name, student[n].sex, student[n].score);
}
}
break;
case 0:goto END;
default:printf("您输入的功能有误,请重新输入\n");
}
}
END:
return 0;
}
运行结果:
思维导图: