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

作业题干如下:

学生成绩管理

学号 成绩
1 88
2 87
3 99
4 89
5 78
6 87
7 98

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;
}
``

你可能感兴趣的:(日常刷题,c语言)