C语言学习_结构体

题目要求:学生的记录由学号、姓名、专业组成,根据班级人数,将学生记录存放在结构体数组中,由于部分同学转专业,学生记录发生了变化,请编程实现根据学号查询查询学生并修改专业,分别输出转专业和未转专业的学生记录。要求:班级人数、学生记录均由键盘输入
#include<stdio.h>
#define M 100
//要求:1.结构体内部成员为学号、姓名、专业:(完成)
// 2.可以输入学生总人数和学生信息(完成)
// 3.输出学生总人数,以及学生的个人信息(完成)
// 4.班级人数、学生记录均由键盘输入(完成)
// 5.通过学号查询并修改该学生的专业(完成)
// 6.分别输出转专业和未转专业的学生记录(完成)
struct Student
{
int Num; //学生学号
int flag; //用来判断是否转专业,不需要显示出来 ,0表示未转专业,1表示转过专业
char Name[20]; //学生姓名
char Pro[20]; //学生专业
};
int main()
{
int Scanf(struct Student stu[]);
int Output(struct Student stu[], int m);
int Change(struct Student stu[], int m);
int Printf(struct Student stu[], int m);
struct Student stu[M],*p=stu;
int m; //用于记录输入的学生总人数
int a = 3; //用于选择方式
m=Scanf§;
Output(p, m);
while (a!=0)
{
printf("\n若要修改学生专业请输入1,若要输出转专业和未转专业的学生记录请输入2,若要结束程序请输入0:");
scanf("%d", &a);
if (a == 1)
{
Change(p, m);
}
else if (a == 2)
{
Printf(p, m);
}
}
system(“pause”);
return 0;
}
//输入学生总人数和学生信息
int Scanf(struct Student stu[])
{
int i, m;
printf("\n请输入学生总人数,不得超过100人:");
scanf("%d", &m);
printf(“请输入学生个人信息:学号,姓名,专业:\n”);
for (i = 0; i < m; i++)
{
scanf("%d", &stu[i].Num);
scanf("%s", stu[i].Name);
scanf("%s", stu[i].Pro);
stu[i].flag = 0;
}
return m;
}
//输出学生的总人数以及学生的个人信息
int Output(struct Student stu[],int m)
{
int i;
for (i = 0; i < m; i++)
{
printf(“学号:%d,”,stu[i].Num);
printf(“姓名:%s,”,stu[i].Name);
printf(“专业:%s”,stu[i].Pro);
printf("\n");
}
return 0;
}
//通过学号修改学生专业
int Change(struct Student stu[], int m)
{
int i;
int j=0; //用于判断输入的学号是否存在
int m_num; //用于存放要修改的学生学号
printf("\n请输入要修改的学生学号:");
scanf("%d", &m_num);
for (i = 0; i < m; i++)
{
if (m_num == stu[i].Num)
{
printf("\n该学号的学生已找到:");
printf("\n请输入新的专业:");
printf("\n新专业为:");
scanf("%s", stu[i].Pro);
stu[i].flag = 1;
printf("\n修改成功,学生信息更新为:");
printf("%学号:%d,", stu[i].Num);
printf(“姓名:%s,”, stu[i].Name);
printf(“专业:%s”, stu[i].Pro);
j = 1;
break;
}
}
if (j != 1)
{
printf("\n输入学号有误,请重新输入:");
}
return 0;
}
//分别输出转专业和未转专业的学生个人记录
int Printf(struct Student stu[], int m)
{
int i;
int j=0,k=0; //让多余的话只输出一次
//转专业的学生个人信息输出
for (i = 0; i < m; i++)
{
if (stu[i].flag == 1)
{
if (j == 0)
{
printf("\n转专业的学生个人信息为:\n");
j = 1;
}
printf("%学号:%d,", stu[i].Num);
printf(“姓名:%s,”, stu[i].Name);
printf(“专业:%s”, stu[i].Pro);
printf("\n");
}
}
if (j == 0)
{
printf("\n没有学生转过专业\n");
}
//未转专业个人信息输出
for (i = 0; i < m; i++)
{
if (stu[i].flag == 0)
{
if (k == 0)
{
printf("\n未转专业的学生个人信息为:\n");
k = 1;
}
printf("%学号:%d,", stu[i].Num);
printf(“姓名:%s,”, stu[i].Name);
printf(“专业:%s”, stu[i].Pro);
printf("\n");
}
}
return 0;
}
//实验结果:
在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值