思维导图
完成一个班级成绩管理系统
ubuntu@ubuntu:student_C_2024_11_14$ cat honework_class_2024_11_14.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define QA 50 //学生的个数
#define AZ 20 //姓名的长度
int main(int argc, const char *argv[])
{
char studentName[QA][AZ] ;//学生姓名数组
int studentScore[QA] = {0};//学生成绩数组
int studentpeople = 0;//记录学生人数
//准备容器存储注册账号和注册密码
char register_user[20] = "";//注册名称
char register_pwd[20] = "";//注册密码
int flag = 0;//判断是否登录的标识符
int menu1 = 0;//菜单1的选择
while(1)
{
printf("\t\t1.注册\n");
printf("\t\t2.登录\n");
printf("\t\t0.退出\n");
printf("请输入选项:");
scanf("%d",&menu1);
//多分支选择
switch(menu1)
{
case 1:// 注册操作
{
printf("请输入注册账户:");
scanf("%s",register_user);
printf("请输入注册密码:");
scanf("%s",register_pwd);
//验证??
printf("注册成功\n");
}
break;
case 2://登录操作
{
char useNAme[20] = "";//登录账号
char userpwd[20] = "";//登录密码
printf("请输入登录账号:");
scanf("%s",useNAme);
printf("请输入登录密码:");
scanf("%s",userpwd);
//判断登录是否成功
if(strcmp(useNAme,register_user)==0&&strcmp(userpwd,register_pwd)==0)
{
printf("登录成功\n");
flag = 1;
}
else
{
printf("登录失败\n");
}
}
break;
case 0: exit(0);
default:printf("你输入的功能有误,请从新输入\n");
}
if(flag == 1)
{
break; //结束循环
}
}
if(flag == 1)//登录后才可以操作
{
//学生管理系统
while(1)
{
printf("**********学生管理系统**********\n");
printf("功能1:完成信息的录入\n");
printf("功能2:展示学生信息\n");
printf("功能3:求最高分和最低分学生的信息\n");
printf("功能4:查找,提示并输入一个姓名,输出该学生对于的成绩\n");
printf("功能5:将所有学生按照成绩的降序进行排序\n");
printf("功能6:修改信息,提示并输入一个学生姓名,更改该学生的成绩\n");
printf("功能7:添加学生,提示并输入一个学生姓名及成绩,添加到最后\n");
printf("功能8:提示并输入一个学生的姓名,从系统中将该学生的信息删除\n");
printf("功能9:求班级总成绩及平均分\n");
printf("功能10:提示并输入一个范围,将成绩在该范围内的学生信息全部输出\n");
printf("功能0:退出系统\n");
printf("请输入你的选择: ");
int menu2;//菜单2的选择
scanf("%d",&menu2);
getchar();
switch(menu2)
{
case 1://功能1:完成信息的录入
//(姓名(二维字符数组)和成绩(一维整形数组))
{
char arr[AZ]="";//中间变量
for(int i=studentpeople;i<QA;i++)
{
printf("请输入学生姓名(输入“000”则结束录入):");
scanf("%s",arr);
getchar();
//gets(arr);//输入到一个中间变量
if(strcmp(arr,"000")==0)
{
printf("录入完成\n");
break;
}
else
{
strcpy(studentName[i],arr);
}
printf("请输入学生成绩:");
scanf("%d",&studentScore[i]);
getchar();
studentpeople++;
}
}
break;
case 2://功能2:展示学生信息
{
for(int i=0;i<studentpeople;i++)
{
//puts(studentName[i]);//输出
printf("%s\t%d\n",studentName[i],studentScore[i]);
}
printf("查看成功\n");
}
break;
case 3://功能3:求最高分和最低分学生的信息
{
char max[AZ] = "";//最高分姓名
char min[AZ] = "";//最低分姓名
int max1 = studentScore[0];//最高分
int min1 = studentScore[0];//最低分
int maxxb=0,minxb=0;//记录两最值下标
for(int i=0;i<studentpeople;i++)
{
if(max1<studentScore[i])//遍历求出最大值
{
max1 = studentScore[i];
maxxb = i;
}
if(min1>studentScore[i])//遍历求出最小值
{
min1 = studentScore[i];
minxb = i;
}
}
//输出结果
printf("最高分是%s,成绩为:%d\n",studentName[maxxb],max1);
printf("最低分是%s,成绩为:%d\n",studentName[minxb],min1);
}
break;
case 4: //功能4:查找,提示并输入一个姓名,
//输出该学生对应的成绩
{
char name[AZ] = "";//输入的姓名
printf("请输入你要查找学生的姓名: ");
scanf("%s",name);
for(int i=0;i<studentpeople;i++)
{
if(strcmp(name,studentName[i])==0)//查找目标学生
{
printf("姓名:%s\t成绩:%d\n",studentName[i],studentScore[i]);
}
}
printf("查找成功\n");
}
break;
case 5:
//功能5:将所有学生按照成绩的降序进行排序
{
int serial = 0;//排序时记录位置的序号
char name[AZ] = "";//交换时姓名的中间变量
int flag = 0;
for(int i=0;i<studentpeople-1;i++)
{
serial=i;
for(int j=i;j<studentpeople;j++)
{
if(studentScore[serial]<studentScore[j])
{
serial = j;
// flag =1;
}
}
if(serial !=i)
{
//姓名
strcpy(name,studentName[serial]);
strcpy(studentName[serial],studentName[i]);
strcpy(studentName[i],name);
//分数
studentScore[i] = studentScore[i]+studentScore[serial];
studentScore[serial] = studentScore[i]-studentScore[serial];
studentScore[i] = studentScore[i]-studentScore[serial];
}
else
{
continue;
}
}
printf("排序完成\n");
}
break;
case 6:
//功能6:修改信息,提示并输入一个学生姓名
//更改该学生的成绩
{
char name[AZ] = "";//输入的姓名
int scorexg = 0;
int flag = 0;
printf("请输入你要修改学生的姓名: ");
scanf("%s",name);
getchar();
for(int i=0;i<studentpeople;i++)
{
if(strcmp(name,studentName[i])==0)//查找目标学生
{
flag = 1;//表示查找到
printf("请输入修改后的成绩\n");
scanf("%d",&scorexg);
studentScore[i] = scorexg;
printf("修改成功\n");
}
}
if(flag == 0)
{
printf("没有找到该姓名的学生\n");
}
printf("\n");
}
break;
case 7:
//功能7:添加学生,提示并输入一个学生姓名及成绩,添加到最后
{
printf("请输入学生姓名:");
scanf("%s",studentName[studentpeople]);
printf("请输入学生成绩:");
scanf("%d",&studentScore[studentpeople]);
studentpeople++;
printf("添加成功\n");
}
break;
case 8:
//功能8:提示并输入一个学生的姓名,从系统中将该学生的信息删除
{
char name[AZ] = "";//输入的姓名
int flag = 0;
printf("请输入你要删除学生的姓名: ");
scanf("%s",name);
for(int i=0;i<studentpeople;i++)
{
if(strcmp(name,studentName[i])==0)//查找目标学生
{
flag = 1;
for(int j=i;j<studentpeople;j++)//修改
{
strcpy(studentName[j],studentName[j+1]);
studentScore[j] = studentScore[j+1];
}
studentpeople--;
}
}
if(flag == 1)
{printf("删除成功\n");}
else{printf("删除失败\n");}
}
break;
case 9:
//功能9:求班级总成绩及平均分
{
int sum = 0;//总成绩
double average = 0;//平均分
for(int i=0;i<studentpeople;i++)
{
sum+=studentScore[i];
}
average = (double)sum/studentpeople;
printf("总成绩为%d,平均分为%.2lf\n",sum,average);
}
break;
case 10:
{
int Above ,below;
//功能10:提示并输入一个范围,将成绩在该范围内的学生信息全部输出
printf("输入你求取成绩区间的上限(包含输入的数):");
scanf("%d",&Above);
printf("输入你求取成绩区间的下限(包含输入的数):");
scanf("%d",&below);
for(int i=0;i<studentpeople;i++)
{
if(studentScore[i]<=Above&&studentScore[i]>=below)
{
printf("姓名:%s\t成绩:%d\n",studentName[i],studentScore[i]);
}
}
}
break;
case 0:exit(0);
default :
printf("你输入的编号暂时未定义功能,请从新选择编号\n");
}
}
}
return 0;
}