一个小程序:学生成绩的管理(学生成绩表的初始化、插入、删除操作)

该博客介绍了一个使用C语言编写的简单学生成绩管理系统。系统包括初始化、插入、删除和显示学生成绩的功能。通过主函数和自定义函数实现了顺序表的操作,如在指定位置插入和删除元素,并能查看所有学生的成绩。程序采用三层结构,便于理解和维护。
摘要由CSDN通过智能技术生成
//任务
//实现对学生成绩的管理(学生成绩表的初始化、插入、删除操作)
//2.将程序完整的浏览一遍,熟悉程序是如何实现的,以及思考以后如何编写的问题。
//3.熟练掌握程序的格式(三层):基础定义(符号常量、类型重定义、顺序表类型的定义、基本操作)、主函数、函数自定义
#include <stdio.h>
#include <stdlib.h>
#define SUCCESS 1
#define FAILURE 0
#define OVERFLOW 1
#define MAXSIZE 20      //数组的最大空间
//typedef int ElemType;   // 数据元素类型( 可根据问题需要,进行设计)

typedef struct stu{
	int no;
	char name[10];
	float score;
}ElemType;


typedef int Status;     //函数返回值状态

//顺序表的类型定义(具体)
typedef struct 
{
	ElemType*   elem;              //存储空间的起始地址(数组的首地址)
	int length;                  //顺序表的长度
}SqList;


//基本操作(函数声明部分)
Status InitList(SqList &L);   //顺序表的初始化
int ListInsert(SqList &L,ElemType item,int pos);//在第pos个位置插入一个元素item
void ListDel(SqList &L,int pos);//删除指定位置上的元素
void ShowAll(SqList L);//查看顺序表所有元素
void Menu();//显示菜单信息

//以上都是准备工作



//主函数模块
int main()
{
	//定义顺序表L
	SqList L;

	int n;//表长
	int i;//选择
	int pos;  //插入位置
	ElemType item;     //数据元素item
	
	InitList(L);  //初始化顺序表
	
	//初始化成功
	printf("-----------顺序表初始化成功--------------\n");
	while(1)
	{
				//显示顺序表操作菜单
				Menu();
				printf("请输入你的选择:");
				scanf("%d",&i);
				switch(i)
				{
				
				case 1:
					printf("插入操作:\n请输入插入的位置和元素,空格隔开\n");
					scanf("%d %d %s %f",&pos,&item.no,&item.name,&item.score);
					ListInsert( L,item,pos);
					break;
				case 2:
					printf("请输入删除的位置:");
					scanf("%d",&pos);
					ListDel(L, pos);
					break;
				
				case 3:ShowAll(L);break;
				case 0:exit(1);break;
				default:printf("请输入合法的选择值\n");
				}
		
	}
	return 0;
}


void Menu( )
{
	
	printf("-----------1:插入操作--------------\n");
	printf("-----------2:删除操作--------------\n");
	printf("-----------3:查看顺序表所有元素--------------\n");
	printf("-----------0:结束对顺序表的操作--------------\n");
}
//顺序表的初始化
Status InitList(SqList &L)
{
	//填空1
	 L.elem         = (ElemType* )malloc(MAXSIZE * sizeof(ElemType));
	if(!L.elem)
	{
		printf("init list error!\n");
		exit(1);   
	}
	//分配成功,填空2
	L.length=0                ;    //表为空
	printf("分配成功\n");
	return SUCCESS;
}

//插入操作,在pos位置插入元素item
int ListInsert(SqList &L, ElemType item, int pos)
{
	int i = 0;
	int n = L.length;//顺序表长度
	//顺序表满
	if(L.length == MAXSIZE)
	{
		printf("顺序表已满\n");
		return FAILURE;
	}
	
	//插入位置不正确
	if(pos < 1 || pos > n+1)
	{
		printf("插入位置不对\n");
		return FAILURE;
	}
	//位置合法:pos>=1,pos<=n+1
	//i为元素下标
	for(i = n-1;i >= pos-1;i--)
	{
		//填空7
		L.elem[i+1]=L.elem[i]            ;     //将元素依次往后移动一个位置
	}

	//填空8
	    L.elem[pos-1]= item               ;	//插入新元素
	//表长加1
	L.length++;
			
	printf("插入成功\n");
	return SUCCESS;
}
//删除指定位置上的元素
void ListDel(SqList &L,int pos)
{
	ElemType item;
	int i = 0;
	//判断表是否为空
	if(L.length == 0)
	{
		printf("表为空\n");
		return ;
	}
	//位置不合法(小于第一个,大于最后一个)
	if(pos < 1 || pos > L.length)
	{
		printf("位置不合法\n");
		return ;
	}
	//位置合法
	item=L.elem[pos - 1];  //保存元素值
	
	//pos>=1,pos<L->lastIndex 需要将pos之后的所有元素往前移动一个位置
	for(i = pos;i <= L.length - 1;i++)
	{
			//填空9
		L.elem[i]=L.elem[i+1]                    ;//元素依次往前移动一个位置   
	}
	L.length--;
	printf("删除成功\n");
	
}

void ShowAll(SqList L)
{
	int i;
	if(L.length==0)
	{
			printf("顺序表为空\n");
			return;
	}
	for(i=0;i<=L.length - 1;i++)
	{
		printf("学号\t姓名\t成绩\n"); 
		printf("%d\t%s\t%f\t\n",L.elem[i].no,L.elem[i].name,L.elem[i].score);
	}
}

在这里插入图片描述

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Respect@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值