2024.11.14(二维数组相关作业)

思维导图

完成一个班级成绩管理系统

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值