简单的学生管理系统(c语言线性表-顺序存储)

作业题干如下:

学生成绩管理

学号成绩
188
287
399
489
578
687
798

1.将线性表初始化为如上所示的完整表;
2.统计:查找表中成绩低于平均值的学生,并输出其学号;
3.排序功能;
4.插入:将学号,成绩插入到顺序表中的合适位置。

代码实现如下:

#include "stdio.h"
#include "stdlib.h"
#define initsize 100
#define error -1
#define ok 0
typedef struct {
	int id;
	int mark;
}stu;
typedef struct {
	stu* data;
	int maxsize;
	int length;
}seqlist;
void create_list(seqlist* L)
{
	L->data = (stu*)malloc(initsize * sizeof(stu));
	L->length = 0;
	L->maxsize = initsize;
}
int insert_list(seqlist* L, int i, int e1, int e2)
{
	if (i<1 || i>L->length + 1)
		return error;
	if (L->length > L->maxsize)
		return error;
	for (int k = 0;k < L->length;k++)
	{
		if (L->data[k].id == e1)
			return error;
	}
	for (int j = L->length;j >= i;j--)
	{
		L->data[j].id = L->data[j - 1].id;
		L->data[j].mark = L->data[j - 1].mark;
	}
	L->data[i - 1].id = e1;
	L->data[i - 1].mark = e2;
	L->length++;
	return ok;
}
int delete_list(seqlist *L, int i)
{
	if (i<1 || i>L->length + 1)
		return error;
	for (int j = i;i < L->length;j++)
	{
		L->data[i - 1].id = L->data[i].id;
		L->data[i - 1].mark = L->data[i].mark;
	}
	L->length--;
	return ok;
}
void print_list(seqlist* L)
{
	int i;
	for (i = 0;i < L->length;i++)
		printf("%d   %d\n", L->data[i].id,L->data[i].mark);
}
int average_list(seqlist* L,int n)
{
	float sum = 0, avg = 0;
	int i;
	for (i = 0;i < L->length;i++)
	{
		sum = sum + L->data[i].mark;
	}
	avg = sum / L->length;
	if (L->data[n].mark < avg)
		printf("%d ", L->data[n].id);
	return 0;
}
void sort_list(seqlist* L)
{
	int len = L->length, i, tmp;
	while (len > 1)
	{
		for (i = 0;i < len - 1;i++)
		{
			if (L->data[i].mark > L->data[i+1].mark)
			{
				tmp = L->data[i].mark;L->data[i].mark = L->data[i + 1].mark;L->data[i + 1].mark = tmp;
				tmp = L->data[i].id;L->data[i].id = L->data[i + 1].id;L->data[i + 1].id = tmp;
			}
		}
		len--;
	}
}
int main()
{
	seqlist list;
	create_list(&list);
	insert_list(&list, 1, 1, 88);
	insert_list(&list, 2, 2, 87);
	insert_list(&list, 3, 3, 99);
	insert_list(&list, 4, 4, 89);
	insert_list(&list, 5, 5, 78);
	insert_list(&list, 6, 6, 87);
	insert_list(&list, 7, 7, 98);
	printf("The list has been created successfully!\n");
	printf("0->End the Program.\n");
	printf("1->Find students whose marks lower than average.\n");
	printf("2->Sort the list.\n");
	printf("3->Insert new messages.\n");
	printf("4->Print the list.\n");
	int tmp,number=7,i,id,mark,flag=0;
	while (1)
	{
		scanf_s("%d", &tmp);
		if (tmp == 0) break;
		else if (tmp == 1)
		{
			printf("Ids of students whose marks lower than average are:\n");
			for (i = 0;i < number;i++)
			{
				average_list(&list, i);
			}
			printf("\n");
		}
		else if (tmp == 2)
		{
			sort_list(&list);
			printf("The list has been sorted successfully!\n");
		}
		else if (tmp == 3)
		{
			printf("Please input the student's id and marks you want to insert:\n");
			scanf_s("%d %d", &id, &mark);
			flag=insert_list(&list, number +1, id, mark);
			if (flag == error)
				printf("ERROR!\n");
			else
			printf("Inserted successfully!\n");
			flag = 0;
		}
		else if (tmp == 4)
		{
			printf("ID Marks\n");
			print_list(&list);
		}
		else
		{
			printf("Error!Please input number from 0 to 4!\n");
		}
	}
	return 0;
}
``
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

赤赤赤赤赤赤

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

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

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

打赏作者

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

抵扣说明:

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

余额充值