#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STUDENTS 20
#define MAX_NAME_LENGTH 20
int main() {
printf("\t\t===班级成绩管理系统\n");
// 1.登录和注册
char regest_usr[20] = "";
char regest_pwd[20] = "";
int menu1 = 0;
int flag = 0;
while (1) {
printf("\t\t===1.注册\n");
printf("\t\t===2.登录\n");
printf("请输入选项:");
scanf("%d", &menu1);
switch (menu1) {
case 1: {
printf("请输入注册的账号:");
scanf("%19s", regest_usr);
printf("请输入注册的密码:");
scanf("%19s", regest_pwd);
printf("注册成功\n");
}
break;
case 2: {
char usrName[20] = "";
char pwd[20] = "";
printf("请输入登录账号:");
scanf("%19s", usrName);
printf("请输入登录密码:");
scanf("%19s", pwd);
if (strcmp(usrName, regest_usr) == 0 && strcmp(pwd, regest_pwd) == 0) {
printf("登录成功\n");
flag = 1;
} else {
printf("登录失败\n");
}
}
break;
case 0:
exit(0);
default:
printf("您输入的功能有误,请重新输入\n");
}
if (flag == 1) {
break;
}
}
// 菜单
printf("\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\t7.添加一个学生成绩到最后\n");
printf("\t\t8.输入一个学生姓名,将该学生信息删除\n");
printf("\t\t9.求班学生总成绩和平均分\n");
printf("\t\t10.给出一个成绩的范围,将成绩在该范围的学生信息输出\n");
char arr[MAX_STUDENTS][MAX_NAME_LENGTH];
int brr[MAX_STUDENTS];
int studentCount = 0;
while (1) {
int menu = 0;
printf("请输入你想要的功能:");
scanf("%d", &menu);
switch (menu) {
case 1: {
printf("请输入学生的个数:");
scanf("%d", &studentCount);
for (int i = 0; i < studentCount; i++) {
printf("请输入第%d个学生的姓名和成绩:", i + 1);
scanf("%19s %d", arr[i], &brr[i]);
}
}
break;
case 2: {
printf("学生信息如下:\n");
for (int i = 0; i < studentCount; i++)
{
printf("%s\t%d\n", arr[i], brr[i]);
}
}
break;
case 3: {
int maxIndex = 0, minIndex = 0;
int maxScore = brr[0], minScore = brr[0];
for (int i = 1; i < studentCount; i++)
{
if (brr[i] > maxScore)
{
maxScore = brr[i];
maxIndex = i;
}
if (brr[i] < minScore)
{
minScore = brr[i];
minIndex = i;
}
}
printf("最高分是%s,成绩%d\n", arr[maxIndex], maxScore);
printf("最低分是%s,成绩%d\n", arr[minIndex], minScore);
}
break;
case 4: {
char name[MAX_NAME_LENGTH];
printf("请输入学生的姓名:");
scanf("%19s", name);
for (int i = 0; i < studentCount; i++)
{
if (strcmp(arr[i], name) == 0)
{
printf("%s的成绩是%d\n", arr[i], brr[i]);
break;
}
}
}
break;
case 5: {
for (int i = 0; i < studentCount - 1; i++)
{
for (int j = 0; j < studentCount - 1 - i; j++)
{
if (brr[j] < brr[j + 1])
{
int temp = brr[j];
brr[j] = brr[j + 1];
brr[j + 1] = temp;
char tempName[MAX_NAME_LENGTH];
strcpy(tempName, arr[j]);
strcpy(arr[j], arr[j + 1]);
strcpy(arr[j + 1], tempName);
}
}
}
printf("学生成绩降序排序完成:\n");
for (int i = 0; i < studentCount; i++)
{
printf("%s\t%d\n", arr[i], brr[i]);
}
}
break;
case 6: {
char name[MAX_NAME_LENGTH];
printf("请输入要更改成绩的学生姓名:");
scanf("%19s", name);
for (int i = 0; i < studentCount; i++)
{
if (strcmp(arr[i], name) == 0) {
printf("请输入新成绩:");
scanf("%d", &brr[i]);
printf("%s的成绩已更新为%d\n", arr[i], brr[i]);
break;
}
}
}
break;
case 7: {
if (studentCount >= MAX_STUDENTS)
{
printf("学生数量已达上限。\n");
} else {
printf("请输入新学生的姓名和成绩:");
scanf("%19s %d", arr[studentCount], &brr[studentCount]);
studentCount++;
printf("学生%s已添加。\n", arr[studentCount - 1]);
}
}
break;
case 8: {
char name[MAX_NAME_LENGTH];
printf("请输入要删除的学生姓名:");
scanf("%19s", name);
for (int i = 0; i < studentCount; i++)
{
if (strcmp(arr[i], name) == 0) {
for (int j = i; j < studentCount - 1; j++)
{
strcpy(arr[j], arr[j + 1]);
brr[j] = brr[j + 1];
}
studentCount--;
printf("学生%s已删除。\n", name);
break;
}
}
}
break;
case 9: {
int total = 0;
for (int i = 0; i < studentCount; i++)
{
total += brr[i];
}
printf("班级总成绩为%d,平均分为%.2f\n", total, (float)total / studentCount);
}
break;
case 10: {
int minScore, maxScore;
printf("请输入成绩范围(最小和最大成绩):");
scanf("%d %d", &minScore, &maxScore);
int count = 0;
printf("成绩在%d到%d之间的学生信息:\n", minScore, maxScore);
for (int i = 0; i < studentCount; i++) {
if (brr[i] >= minScore && brr[i] <= maxScore)
{
printf("%s\t%d\n", arr[i], brr[i]);
count++;
}
}
if (count == 0) {
printf("没有学生的成绩在这个范围内。\n");
}
}
break;
case 0:
return 0;
default:
printf("请重新输入\n");
}
}
return 0;
}
===班级成绩管理系统
===1.注册
===2.登录
请输入选项:1
请输入注册的账号:123
请输入注册的密码:123
注册成功
===1.注册
===2.登录
请输入选项:2
请输入登录账号:123
请输入登录密码:123
登录成功
菜单
1.录入学生姓名和成绩
2.展示学生信息
3.查看最高分和最低分学生的信息
4.输入一个学生的姓名,得到成绩
5.将所有学生成绩按照降序进行排序
6.输入一个学生的姓名,更改成绩
7.添加一个学生成绩到最后
8.输入一个学生姓名,将该学生信息删除
9.求班学生总成绩和平均分
10.给出一个成绩的范围,将成绩在该范围的学生信息输出
请输入你想要的功能:1
请输入学生的个数:3
请输入第1个学生的姓名和成绩:张三 100
请输入第2个学生的姓名和成绩:李四 90
请输入第3个学生的姓名和成绩:王五 80
请输入你想要的功能:2
学生信息如下:
张三 100
李四 90
王五 80
请输入你想要的功能:3
最高分是张三,成绩100
最低分是王五,成绩80
请输入你想要的功能:4
请输入学生的姓名:张三
张三的成绩是100
请输入你想要的功能:5
学生成绩降序排序完成:
张三 100
李四 90
王五 80
请输入你想要的功能:6
请输入要更改成绩的学生姓名:张三
请输入新成绩:90
张三的成绩已更新为90
请输入你想要的功能:7
请输入新学生的姓名和成绩: 小明 60
学生小明已添加。
请输入你想要的功能:8
请输入要删除的学生姓名:张三
学生张三已删除。
请输入你想要的功能:9
班级总成绩为230,平均分为76.67
请输入你想要的功能:10
请输入成绩范围(最小和最大成绩):59 100
成绩在59到100之间的学生信息:
李四 90
王五 80
小明 60
请输入你想要的功能:0
ubuntu@ubuntu:day12$
二维数组
├── 4.1 二维数组的引入
│ ├── 定义:由两个下标表示的数组,有行有列
│ ├── 格式:数据类型 数组名[行数][列数]
│ ├── 注意事项
│ │ ├── 行数表示二维数组的行数,列数表示二维数组的列数
│ │ ├── 使用数组元素时,单个下标表示当前行的一维数组起始地址
│ │ ├── 两个下标表示具体的数组元素
│ │ ├── 行标范围[0, M-1],列标范围[0, N-1]
│ │ └── 未初始化的二维数组中的每个变量都是随机值
├── 4.2 二维整型数组的初始化
│ ├── 按行全部初始化:每一行的值放入花括号中
│ ├── 按行部分初始化:未初始化部分用0补齐
│ ├── 按分布方式全部初始化:每行元素不需要使用括弧包裹
│ ├── 按分布方式部分初始化:后面未初始化部分用0补齐
│ └── 特殊初始化:定义时第一维可以省略,由初始化元素个数和列数确定行数
├── 4.3 二维数组的输入输出
│ ├── 输入输出任意元素:arr[i][j]
│ ├── 输出一维数组:使用两层循环
│ └── 示例代码:班级学生成绩输入输出
├── 4.4 二维整型数组的相关操作
│ ├── 整体求和、求最值:累加求和,比较求最值
│ ├── 求每一行的和、最值:先清零再累加,比较更新最值
│ ├── 转置:使用原数组给新数组赋值
│ └── 示例代码:班级学生成绩求和、求最值、转置
├── 4.5 二维字符数组
│ ├── 定义:用于存储多个字符串
│ ├── 格式:char 数组名[行数][列数]
│ ├── 初始化:使用字符填充,使用字符串填充
│ └── 操作:字符串输入输出、排序
└── 练习:完成注册登录功能
├── 注册:输入账号和密码进行注册
├── 登录:输入账号和密码进行登录
└── 登录成功:跳转到指定位置继续执行程序