和上一篇几乎没差,学习了顺序表,简单实现了按位置增添学生信息和删除学生信息
1、完成学生信息管理系统
要求:定义一个班级,包括多个学生,以及记录实际学生的个数
1> 完成班级的创建,创建时,需要传递班级实际人数
2> 完成班级学生的信息录入工作
3> 完成将班级学生按成绩进行降序排序工作
4> 输出班级中成绩最好和最差学生的信息
5> 完成信息的输出工作
6> 完成班级的销毁工作
7>按位置插入学生
8>按位置删除学生
//main.c
#include"student.h"
int main(int argc, char const *argv[])
{
int n = 0;
int size = 0;
Stu newstudent;
int pos = 0;
printf("请输入班级人数:");
scanf("%d",&size);
Class *class = createClass(size);
while(1)
{
print_menu();
printf("请输入需要实现的功能:");
scanf("%d", &n);
getchar();
switch (n)
{
case 1:
input_Student(class);
break;
case 2:
jiangxu(class);
outputall_Student(class);
break;
case 3:
max_min_Student(class);
break;
case 4:
outputall_Student(class);
break;
case 5:
xiaohui(&class);
break;
case 6:
pos = 0;
printf("请输入学生姓名:");
scanf("%s",newstudent.name);
printf("请输入学生年龄:");
scanf("%d",&newstudent.age);
printf("请输入学生成绩:");
scanf("%lf",&newstudent.score);
printf("请输入你想插入的位置:");
scanf("%d",&pos);
insert_pos_Student(class,pos,newstudent);
break;
case 7:
pos = 0;
printf("请输入你需要删除的学生位置:");
scanf("%d",&pos);
delete_pos_Student(class,pos);
break;
case 0:
goto END;
default:
break;
}
}
END:
return 0;
}
//hanshu.c
#include"student.h"
void print_menu()
{
printf("\t\t======1.录入学生信息======================\n");
printf("\t\t======2.按成绩降序========================\n");
printf("\t\t======3.输出成绩最高和最低的学生信息======\n");
printf("\t\t======4.输出所有学生信息==================\n");
printf("\t\t======5.销毁班级==========================\n");
printf("\t\t======6.插入学生==========================\n");
printf("\t\t======7.删除学生==========================\n");
printf("\t\t======0.退出==============================\n");
}
//创建班级
Class *createClass(int size)
{
if(size > MAX)
{
printf("班级人数超过最大容量\n\n");
return NULL;
}
Class *class = (Class *)malloc(sizeof(Class));
if(class == NULL)
{
printf("空间申请失败\n\n");
return NULL;
}
class -> size = size;
return class;
}
//1.录入学生信息
void input_Student(Class *class)
{
for(int i = 0;i < class->size;i++)
{
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", class->student[i].name);
printf("请输入第%d个学生的年龄:", i + 1);
scanf("%d", &class->student[i].age);
printf("请输入第%d个学生的成绩:", i + 1);
scanf("%lf", &class->student[i].score);
printf("\n");
}
}
//2.按成绩降序
void jiangxu(Class *class)
{
for(int i = 1;i < class->size;i++)
{
for(int j = 0;j < class->size - i;j++)
{
if(class->student[j].score < class->student[j+1].score)
{
Stu temp = class->student[j];
class->student[j] = class->student[j+1];
class->student[j+1] = temp;
}
}
}
}
//3.输出成绩最高和最低的学生信息
void max_min_Student(Class *class)
{
Stu max = class->student[0];
Stu min = class->student[0];
for(int i = 0;i < class->size;i++)
{
if(max.score < class->student[i].score)
{
max = class->student[i];
}
if(min.score > class->student[i].score)
{
min = class->student[i];
}
}
printf("成绩最高的学生:\n");
printf("姓名\t年龄\t成绩\n");
printf("%s\t%d\t%.2lf\n\n", max.name, max.age, max.score);
printf("成绩最低的学生:\n");
printf("姓名\t年龄\t成绩\n");
printf("%s\t%d\t%.2lf\n\n", min.name, min.age, min.score);
}
//4.输出所有学生信息
void outputall_Student(Class *class)
{
printf("姓名\t年龄\t成绩\n");
for(int i = 0;i < class->size;i++)
{
printf("%s\t%d\t%.2lf\n",class->student[i].name,class->student[i].age,class->student[i].score);
}
printf("\n");
}
//5.销毁班级
void xiaohui(Class **class)
{
if(*class != NULL)
{
free(*class);
*class = NULL;
printf("完成班级销毁工作\n\n");
}
}
//6.插入学生
void insert_pos_Student(Class *class,int pos,Stu newstudent)
{
if(NULL == class || pos < 0 || pos > class->size)
{
printf("插入失败\n");
return ;
}
for(int i = class->size-1;i >= pos;i--)
{
class->student[i+1] = class->student[i];
}
class->student[pos] = newstudent;
class->size++;
printf("插入成功\n");
}
//7.按位置删除学生
void delete_pos_Student(Class *class,int pos)
{
if(NULL == class || pos < 0 || pos > class->size)
{
printf("删除失败\n");
return ;
}
for(int i = pos;i < class->size-1;i++)
{
class->student[i] = class->student[i+1];
}
class->size--;
printf("删除成功\n");
}
//student.h
#ifndef STUDENT_H
#define STUDENT_H
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 100 //最大容量
//定义学生类型
typedef struct Stu
{
char name[20];
int age;
double score;
}Stu;
//定义班级类型
typedef struct Class
{
Stu student[MAX]; //存放学生的容器
int size; //实际人数
}Class;
void print_menu();
Class *createClass(int size); //创建班级
void input_Student(Class *class); //1.录入学生信息
void jiangxu(Class *class); //2.按成绩降序
void max_min_Student(Class *class); //3.输出成绩最高和最低的学生信息
void outputall_Student(Class *class); //4.输出所有学生信息
void xiaohui(Class **class); //5.销毁班级
//6.按位置插入学生
void insert_pos_Student(Class *class,int pos,Stu newstudent);
//7.按位置删除学生
void delete_pos_Student(Class *class,int pos);
#endif
输出结果如下: