顺序表实现学生管理系统

顺序表实现学生管理系统部分功能

头文件

#ifndef _STUDENT_H_
#define _STUDENT_H_
#define MAX 40      //班级最大容纳量
#include<string.h>

//定义学员类型
typedef struct
{
    char name[20];  //姓名
    char sex;      //性别
    double score;     //分数
}Stu;

//定义班级类型
typedef struct
{
    Stu data[MAX];   //存储学员的数组
    int len;      //当前班级人数
}Class, *Class_ptr;
//创建班级
Class_ptr class_create();

//判满
int class_full(Class_ptr C);

//判空
int class_empty(Class_ptr C);

//向指定位置添加学员
int class_add(Class_ptr C,int pos,Stu s);

//输入班级学员信息
void class_input(Stu s);

//输出班级学员信息
void class_show(Class_ptr C);

//根据姓名查找学员信息
int class_search(Class_ptr C,char name[]);

//显示指定位置学员信息
Stu class_pos(Class_ptr C,int pos);

//删除指定位置学员信息
int class_delete(Class_ptr C,int pos);

//释放内存
void class_free(Class_ptr C);


#endif

源文件

#include"student.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//创建班级
Class_ptr class_create()
{
	Class_ptr C=(Class_ptr)malloc(sizeof(Class));
	if(NULL==C)
	{
		printf("班级创建失败\n");
		return NULL;
	}
	memset(C->data,0,sizeof(C->data));
	C->len=0;
	printf("班级创建成功\n");
	return C;
}

//判满
int class_full(Class_ptr C)
{
	if(NULL==C)
	{
		printf("班级不合法\n");
		return 0;
	}
	return C->len==MAX;
}

//判空
int class_empty(Class_ptr C)
{
	if(NULL==C)
	{
		printf("班级不合法\n");
		return 0;
	}
	return C->len==0;
}

//添加学员
int class_add(Class_ptr C,int pos,Stu s)
{
	if(NULL==C||class_full(C)||pos<0||pos>=C->len)
	{
		printf("添加失败\n");
		return 0;
	}
	for(int i=C->len-1;i>=pos;i--){
		C->data[i+1]=C->data[i];
	}
	C->data[pos]=s;
	C->len++;
	printf("添加成功\n");
	return 0;
}

//输入班级学员信息
void class_input(Stu s)
{
	printf("请输入学员的姓名:");
	scanf("%s",s.name);
	printf("请输入学员的性别(M|W):");
	scanf(" %c",&s.sex);
	printf("请输入学员的分数:");
	scanf(" %lf",&s.score);
}

//输出班级学员信息
void class_show(Class_ptr C)
{
	if(NULL==C||class_empty(C)){
		printf("操作失败\n");
		return ;
	}
	printf("当前班级人员信息如下:\n");
	printf("姓名\t性别\t分数\n");
	for(int i=0;i<C->len;i++){
		printf("%s\t%c\t%lf\n",C->data[i].name,	C->data[i].sex,C->data[i].score);
	}
}

//根据姓名查找学员信息
int class_search(Class_ptr C,char name[])
{
	if(NULL==C||class_empty(C)){
	printf("操作失败\n");
	return -1;
	}
	for(int i=0;i<C->len;i++){
		if(strcmp(C->data[i].name,name)==0){
			return i;
			printf("%s\t%c\t%lf\n",C->data[i].name,\
				C->data[i].sex,\
				C->data[i].score);
		}else{
			printf("查无此人\n");
		}
	}
	return 0;
}

//显示指定位置学员信息
Stu class_pos(Class_ptr C,int pos)
{
	if(NULL==C||class_empty(C)||pos<0||pos>=C->len){
		printf("操作失败\n");
	return  ;
	}
	printf("%s\t%c\t%lf\n",C->data[pos].name,\
				C->data[pos].sex,\
				C->data[pos].score);
	return C->data[pos];

}

//删除学员信息
int class_delete(Class_ptr C,int pos)
{
	if(NULL==C||class_empty(C)||pos<0||pos>=C->len){
		printf("删除失败\n");
		return -1;
	}
	for(int i=pos+1;i<C->len;i++){
		C->data[i-1]=C->data[i];
	}
	C->len--;
	printf("删除成功\n");
	return 1;
}

//释放内存
void class_free(Class_ptr C)
{
	if(NULL!=C)
	{
		free(C);
		C=NULL;
	}
}

测试文件

#include"student.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{
	
	Class_ptr C=class_create();
	if(NULL==C){
		return -1;
	}
	int choice,n,i;
	Stu a,b,c;
	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");
	while(1)
	{
		printf("请选择功能:");
		scanf("%d",&choice);
		switch(choice)
		{
			case 1:
				printf("请输入学生人数:");
				scanf("%d",&n);
				for(i=0;i<n;i++){
					printf("第%d个学生:\n",i+1);
					class_input(C->data[i]);
				}
				C->len=n;
				break;
			case 2:
				class_show(C);
				break;
			case 3:;
				char name[20];
				printf("请输入要查找学生的姓名:");
				scanf("%s",name);
				class_search(C,name);
				break;
			case 4:
				printf("请输入要查询的位置:");
				int pos1;
				scanf("%d",&pos1);
				class_pos(C,pos1);
				break;
			case 5:
				printf("请输入要添加的位置:");
				int pos2;
				scanf("%d",&pos2);
				printf("请输入此人信息:\n");
				class_input(c);
				if(class_add(C,pos2,c)){;
					printf("插入成功\n");
				}else{
					printf("插入失败\n");
				}
				break;
			case 6:
				printf("请输入要删除学员的位置:");
				int pos3;
				scanf("%d",&pos3);
				class_delete(C,pos3);
				break;
			case 7:
				printf("已录入学员个数为:%d\n",C->len);
				break;
			case 8:
				class_free(C);
				break;
			default:
				printf("输入不合理\n");
		}
	}
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值