数据结构->顺序表->学生信息管理系统(简单版)

简单详细版学生管理系统使用顺序表

功能:能录入学生信息、删除学生信息、修改学生信息,查询学生信息

具体实现代码

头文件和重命名

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
typedef stu data_t; 

定义结构体

typedef struct STU{
	char xuehao[20]; //学号
	char name[20]; //姓名
	float score; //成绩
}stu;

定义顺序表

typedef struct list{
	data_t data[SIZE];
	int last;
}seqlist;

各个功能板块函数声明

//初始化(malloc)
seqlist *createSeqlist();
//判空: 空的话返回1
int seqlist_is_empty(seqlist *seq);
//判满: 满的话返回1
int seqlist_is_full(seqlist *seq);
//求学生数量
int seqlist_length(seqlist *seq);
//插入学生信息
int seqlistInsert(seqlist *seq);
//按学号查找
int seqlistFindByXuehao(seqlist *seq, char *xuehao);
//按姓名查找
int seqlistFindByData(seqlist *seq, char *name);
//删除学生信息
int seqlistDeleteByNum(seqlist *seq,char *num);
//根据分数修改
int seqlistChangeByScore(seqlist *seq);
//输出
void seqlist_dispaly(seqlist *seq);
//功能菜单
void menu();
//清空顺序表
void seqlistClear(seqlist *seq);

函数功能具体的实现

初始化

seqlist *createSeqlist()
{
	seqlist *seq = (seqlist *)malloc(sizeof(seqlist));
	if(NULL == seq)
	{
		perror("malloc");
		return NULL;
	}
	memset(seq->data, 0, sizeof(data_t)*SIZE);//清零
	
	seq->last = -1;
	return seq;
}

判空

//判空: 空的话返回1
int seqlist_is_empty(seqlist *seq)
{
	return (seq->last == -1)?1:0;
}

判满

//判满: 满的话返回1
int seqlist_is_full(seqlist *seq)
{
	return (seq->last == SIZE -1)?1:0;
}

求学生数量

//求学生数量
int seqlist_length(seqlist *seq)
{
	return seq->last+1;
}

插入信息

//插入学生信息
int seqlistInsert(seqlist *seq)
{
	 if (seqlist_is_full(seq))
    {
        printf("该表已满。");
        return -1;
    }
    seq->last++;
	puts("请按以下格式输入\n学号 姓名 成绩");
    scanf("%s %s %f",seq->data[seq->last].xuehao,seq->data[seq->last].name,&seq->data[seq->last].score);
    return 0;
}

查找

//按学号查找
int seqlistFindByXuehao(seqlist *seq, char *xuehao)
{
	if (seqlist_is_empty(seq))
    {
        printf("该表为空。");
        return -1;
    }
	int i;
	for(i=0; i<=seq->last; i++)
	{
		if( strcmp( seq->data[i].xuehao, xuehao )  == 0 )
		{
			printf("找到该学生\n");
			printf("学号     姓名    成绩\n");
			printf("%s      %s     %.2f\n", seq->data[i].xuehao, seq->data[i].name,seq->data[i].score);
			return i;//返回学生的位置
		}
	}
	printf("没有这个学生\n");
	return -1;
}

//按姓名查找
int seqlistFindByData(seqlist *seq, char *name)
{
	if(seqlist_is_empty(seq))
		return -1;
	int i;
	for(i=0; i<=seq->last; i++)
	{
		if( strcmp( seq->data[i].name, name )  == 0 )
		{
			printf("找到该学生\n");
			printf("学号     姓名    成绩\n");
			printf("%s      %s     %.2f\n", seq->data[i].xuehao, seq->data[i].name,seq->data[i].score);
			return 0;	
		}
	}
	printf("没有这个学生\n");
	return -1;
}

删除

//删除学生信息
int seqlistDeleteByNum(seqlist *seq,char *num)
{
    if (seqlist_is_empty(seq))
    {
        printf("该表为空。");
        return -1;
    }
    else
    {
        for (int j=0;j<=seq->last;j++)
        {
            if (!strcmp(seq->data[j].xuehao,num))
            {
                int pos = j+1;
                for (int i=pos-1;i<seq->last;i++)
                {
                    strcpy(seq->data[i].name,seq->data[i+1].name);
                    strcpy(seq->data[i].xuehao,seq->data[i+1].xuehao);
                    seq->data[i].score = seq -> data[i+1].score;
                }
                break;
            }
        }
    }
    seq->last--;
    return 0;
}

修改

//根据分数修改
int seqlistChangeByScore(seqlist *seq)
{
    int x,y;
    printf("输入要修改的成绩和修改后的成绩:\n");
    scanf("%d %d",&x,&y);
    for (int i=0;i<=seq->last;i++)
    {
        if (seq->data[i].score == x)
        {
            seq->data[i].score = y;
			printf("修改成功\n");
        }
    }
    return 0;
}

输出

//输出全部学生信息
void seqlist_dispaly(seqlist *seq)
{
	if(seqlist_is_empty(seq))
	{
        printf("The list is empty.\n");
    }
	printf("学号     姓名    成绩\n");
	int i;
	for(i=0; i<= seq->last ;i++)
	{
		printf("%s      %s     %.2f\n", seq->data[i].xuehao, seq->data[i].name,seq->data[i].score);		
	}
}

功能菜单

//功能菜单
void menu()
{
	puts("******************************************");
	puts("+++++++++++欢迎来到学生管理系统+++++++++++");
	puts("******************************************");
    puts("+++++******  1.添加学生信息  ******+++++++");
	puts("******************************************");
    puts("+++++******  2.姓名查找学生  ******+++++++");
	puts("******************************************");
    puts("+++++******  3.学号查找学生  ******+++++++");
	puts("******************************************");
	puts("+++++******  4.显示学生信息  ******+++++++");
	puts("******************************************");
	puts("+++++******  5.删除学生信息  ******+++++++");
	puts("******************************************");
	puts("+++++******  6.统计所有学生  ******+++++++");
	puts("******************************************");
	puts("+++++******  7.修改学生成绩  ******+++++++");
	puts("******************************************");
	puts("+++++******  8.清空学生信息  ******+++++++");
	puts("******************************************");
    puts("+++++******  0.退出学生系统  ******+++++++");
	puts("******************************************");
    puts("+++++  请输入对应序号执行对应的操作  +++++");
	puts("******************************************");
}
//清空顺序表
void seqlistClear(seqlist *seq)
{
    seq->last = -1;
}

主函数

//主函数
int main(int argc, const char *argv[])
{
	seqlist *seq = createSeqlist();//创建表
	if(NULL == seq)
	{
		printf("createSeqlist failed\n");
		return -1;
	}
	int a ;
	char n[20] = {0};
	char i[20] = {0};
	char num[20] = {0};
	while(1)
	{
		menu();
		scanf("%d",&a);
		switch(a)
		{
			case 1 :seqlistInsert(seq);break;//输入信息
			case 2 :
				printf("请输入要查询的姓名:");
				scanf("%s",n);
				seqlistFindByData(seq,n); 
				break;//根据name查找信息
			case 3 :/
				printf("请输入要查询的学号:");
				scanf("%s",i);
				seqlistFindByXuehao(seq,i);
				break;//根据学号查找信息
			case 4 :seqlist_dispaly(seq);break;//显示所有学生信息
			case 5 :
				printf("输入删除学号:");
                scanf("%s",num);//删除学生
				seqlistDeleteByNum(seq,num);
				printf("删除成功\n");
                break;
			case 6 :
				printf("总共有%d位学生!!!!\n",seqlist_length(seq));
				break;//统计学生数量
			case 7 :
				seqlistChangeByScore(seq);//修改成绩
				break;
			case 8 :seqlistClear(seq);seqlist_dispaly(seq);break;
			case 0 :return 0;
			default:break;
		}
	}
	return 0;
}

销毁顺序表

void seqlist_destroy(seqlist **seq)
{
	free(*seq);

	*seq = NULL;
}

个人总结

主要是对顺序表的操作,增删改查,画图理解顺序表,熟悉顺序表的原理就行!*还有对顺序表的销毁,文章未写。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值