c语言复习题求帮助
假设一个班由一名教师和若干学生(<=5人)组成,教师信息包括工号、姓名,学生信息包括学号、姓名和成绩。请编写程序,模拟班级的管理,主要管理功能包括班级信息输出、按学号查找学生(查找成功则输出学生信息)、插入学生、删除学生(按学号删除)。要求:(1)老师、学生需定义为结构体。
(2)班级中学生需根据学生实际人数动态分配空间。
(3)各功能需单独封装函数。
(4)代码编写规范(空行、注释、参数及类型命名等)
由于毕业太久,给忘记了,求帮助!!
补充代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 5
//定义教师
typedef struct teacher
{
int tno;
char tname[MAXSIZE];
} Teacher;
//定义学生
typedef struct student
{
int sno;
char sname[MAXSIZE];
int grade;
} Student;
//定义班级
typedef struct classinfo
{
Teacher tea;
Student* stu[MAXSIZE];
int n;
}Class;
//初始化班级
//返回值:班级结构体指针
Class *initClass()
{
//动态分配空间
Class *pc=(Class *)malloc(sizeof(Class));
if(pc)
{
//初始化教师信息
printf("请输入教师信息(工号,姓名):");
se);
//初始化学生信息 canf("%d,%s",&(pc->tea).tno,(pc->tea).tnam
pc->n=0;
for(int i=0;i<MAXSIZE;i++)
pc->stu[i]=NULL;
}
return pc;
}
//打印教师信息
//参数ps:教师指针
void printTeacher(Teacher *pt)
{
printf("%d\t%s",pt->tno,pt->tname);
printf("\n");
}
//打印学生信息
//参数ps:学生指针
void printStudent(Student *ps)
{
printf("%d\t%s\t%d",ps->sno,ps->sname,ps->grade);
printf("\n");
}
//打印班级信息
//参数pc:班级指针
void printClass(Class *pc)
{
//打印教师信息
printf("教师信息(工号\t姓名):");
printTeacher(&pc->tea);
//打印学生信息
printf("学生信息(学号\t姓名\t专业):\n");
for(int i=0;i<pc->n;i++)
printStudent(pc->stu[i]);
printf("\n");
}
//插入学生
//参数pc:班级指针,参数stu:学生指针
//返回值:1:成功,0:失败(空间满)
int inserStu(Class *pc,Student *stu)
{
if(pc->n==MAXSIZE)
return 0;
else
{
pc->stu[pc->n]=stu;
pc->n++;
return 1;
}
}
//查找学生
//参数pc:班级指针,参数stu:学生指针(学号为查找值)
//返回值:>=0,成功,代表在其中的索引位置:-1:失败(没有找到)
int searchStu(Class *pc,Student *stu)
{
return 0;
}
int deleteStu(Class *pc,Student *stu)
{
return 0;
}
//插入学生
//参数pc:班级指针
void Insert(Class *pc)
{
int no,grade;
char name[MAXSIZE];
//输入待插入学生的信息
printf("请输入要插入学生的学号:");
scanf("%d",&no);
printf("请输入要插入学生的姓名:");
scanf("%s",name);
printf("请输入要插入学生的成绩:");
scanf("%d",&grade);
//构造待插入学生的指针
Student *stu=(Student *)malloc(sizeof(Student));
stu->sno=no;
strcpy(stu->sname,name);
stu->grade=grade;
//插入操作
int ret=inserStu(pc,stu);
//输出插入结果
if(ret)
printf("插入成功\n");
else
printf("空间满,插入失败\n");
}
void Search(Class *pc)
{
int no;
//输入要查找学生的学号
printf("请输入要插入学生的学号:");
scanf("%d",&no);
Student stu;
stu.sno=no;
int ret=searchStu(pc,&stu);
//输出插入结果
if(ret==-1)
printf("没有找到\n");
else
{
printf("学生信息如下:\n");
printStudent(pc->stu[ret]);
}
}
void Delete(Class *pc)
{
}
//释放指针(*pc)指向的空间,同时将(*pc)值置为空
void destroy(Class **pc)
{
if((*pc)!=NULL)
{
if((*pc)->n>0)
{
for(int i=0;i<(*pc)->n;i++)
{
free((*pc)->stu[i]);
(*pc)->stu[i]=NULL;
}
}
free((*pc));
(*pc)=NULL;
}
}
void printChoice()
{
printf("\n请选择功能:\n");
printf("\t1.打印班级信息\n");
printf("\t2.查找学生\n");
printf("\t3.插入学生\n");
printf("\t4.删除学生\n");
printf("\t5.退出程序\n");
printf("请选择:");
}
int main()
{
Class *pc=initClass();
if(!pc)
{
printf("空间分配失败");
return 0;
}
int choice=-1;
while(1)
{
printChoice();
scanf("%d",&choice);
switch(choice)
{
case 1:
printClass(pc);
break;
case 2:
Search(pc);
break;
case 3:
Insert(pc);
break;
case 4:
Delete(pc);
break;
case 5:
destroy(&pc);
return 0;
default:
printf("输入错误");
break;
}
}
}