学生的记录由学号、姓名、专业组成,根据班级人数,将学生记录存放在结构体数组中。由于部分同学转专业,学生记录发生了变化。请编程实现根据学号查询学生记录并修改专业,分别输出转专业和未转专业的学生记录。要求:班级人数、学生记录由键盘输入(结构数组解决,不要用指针)
定义学生结构体,然后用结构体数组存储数据,转专业就是修改结构体中的专业字段。
参考如下:
#include <stdio.h>
#include <stdlib.h>
#define MAXNMB 100
//定义学生信息
typedef struct _studentinfo
{
int id;//学号
char name[20]; //姓名
char major[20];//专业
int ischange; //是否转过专业,0表示没有转过,1表示转过
}Student;
//录入学生信息
void input(Student stu[],int* nmb)
{
int i;
system("cls");
printf("请输入学生人数:");
scanf("%d",nmb);//注意这里是nmb,因为nmb本身就是指针
for (i=0;i<*nmb;i++)
{
printf("请输入学生%d的学号:",i+1);
scanf("%d",&stu[i].id);
printf("请输入学生%d的姓名:",i+1);
scanf("%s",stu[i].name);
printf("请输入学生%d的专业:",i+1);
scanf("%s",stu[i].major);
stu[i].ischange = 0;
}
printf("录入成功!\n");
system("pause");
}
//转专业
void change(Student stu[],int nmb)
{
int i;
int id;
system("cls");
printf("请输入需要转专业的学生的学号:");
scanf("%d",&id);
for (i=0;i<nmb;i++)
{
if(stu[i].id == id)
{
printf("请输入新专业:");
scanf("%s",stu[i].major);
printf("修改成功\n");
stu[i].ischange = 1;
break;
}
}
if(i==nmb)
printf("未找到该学号的学生!\n");
system("pause");
}
//输出转专业和未转专业学生的信息
void show(Student stu[],int nmb)
{
int i;
system("cls");
//输出未转过专业的学生信息
printf("未转过专业的学生信息\n");
for (i=0;i<nmb;i++)
{
if(!stu[i].ischange)
printf("%-10d %-20s %-20s\n",stu[i].id,stu[i].name,stu[i].major);
}
printf("转过专业的学生信息\n");
for (i=0;i<nmb;i++)
{
if(stu[i].ischange)
printf("%-10d %-20s %-20s\n",stu[i].id,stu[i].name,stu[i].major);
}
system("pause");
}
int main()
{
Student stu[MAXNMB];
int nmb=0;
int op;
while(1)
{
system("cls");
printf("-------------------------\n");
printf(" 欢迎使用学生管理系统\n");
printf(" 1.录入学生信息\n");
printf(" 2.转专业\n");
printf(" 3.显示学生信息\n");
printf(" 4.退出系统\n");
printf("-------------------------\n");
printf("请选择:");
scanf("%d",&op);
switch(op)
{
case 1:
input(stu,&nmb);
break;
case 2:
change(stu,nmb);
break;
case 3:
show(stu,nmb);
break;
case 4:
return 0;
}
}
return 0;
}
这不是数据库的内容,用c太麻烦
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!