通过C语言实现一个简单的项目:学生成绩管理系统

news/2024/5/20 0:36:07 标签: c语言, 数据结构, 快速排序

##实现功能

  1. 学生成绩输入
  2. 显示学生成绩
  3. 插入学生成绩
  4. 统计学生总人数
  5. 删除学生成绩
  6. 按照学号查询学生成绩
  7. 按照学号快速排序

1.头文件与结构体的创建

#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OK 1
#define OVERFLOW -2
#define MAXSIZE 200
typedef int status;
typedef int ElemType;

typedef struct {
	char name[20];
	int number;
	int math;
	int C;
	int English;
}student;

typedef struct {
	student *elem;
	int Length;
}Sqlist;

1.主程序代码

int main(void)
{

	Sqlist L;
	InitList(L);
	int quit;
	
	printf("******学生成绩管理系统******\n");
	printf("1.学生成绩输入\n");
	printf("2.显示学生成绩\n");	
	printf("3.插入学生成绩\n");
	printf("4.统计学生总人数\n");
	printf("5.删除学生成绩\n");
	printf("6.按照学号查询学生成绩\n");
	printf("7.按照学号快速排序\n");
	printf("0.退出系统");
		
	
	while(quit!=0)
	{
	    printf("\n\n请选择相应操作:");
		scanf("%d",&quit);
		if(quit==1)
		{
			int n;	
			printf("\n请输入学生的总人数:");
			scanf("%d",&n);
			ListImport(L,n);
			
		}
		else if(quit==2)
		{
			ListOutput(L,L.Length);
		}
		else if(quit==3)
		{
			int t;
			printf("输入要插入的位置:");
			scanf("%d",&t);
			ListInsert(L,t);
		}
		else if(quit==4)
		{
			int t; 
			t=ListLenght(L);
			printf("学生的总人数为:%d人",t);

		}
		else if(quit==5)
		{
			int t,s;
			printf("输入要删除的位置:");
			scanf("%d",&t);
			s=ListDelete(L,t);
			if(s!=0)
			{
				printf("删除成功!!!");
			}
			else
			{
				printf("删除失败!!!");
			}
		}
		else if(quit==6)
		{
			QuickSort(L,1,L.Length);
			int t,i;
			printf("输入要查询学生的学号:");
			scanf("%d",&t);
			i=Search(L,t,0,L.Length);
			if(i==0)
			{
				printf("无此学号的学生");
			}
			else
			{
				printf("姓名:%s\n",L.elem[i].name);
		        printf("学号:%d\n",L.elem[i].number);
		        printf("数学成绩:%d\n",L.elem[i].math);
		        printf("英语成绩:%d\n",L.elem[i].English);
		        printf("C语言成绩:%d\n",L.elem[i].C);
			}

		}
		else if(quit==7)
		{
			QuickSort(L,1,L.Length);
			printf("排序成功!!!");

		}
		else if(quit==0)
		{}
		else
		{
			printf("输入错误,请重新输入");
		}

	}

	
	printf("\n\n***退出成功***\n");
	printf("***欢迎下次使用***\n");

}

2.子函数代码

//初始化线性表
status InitList(Sqlist& L)
{
	L.elem = (student*)malloc(MAXSIZE * sizeof(student));
	if (!L.elem)exit(-2);
	L.Length = 0;
	return OK;
}


//线性表输入
status ListImport(Sqlist& L, int n)
{
	int i;
	if (!L.elem)return ERROR;
	for (i = 1; i <= n; i++)
	{
		printf("\n请输入第%d个学生的信息:\n",i);
		printf("姓名:");
		scanf("%s", L.elem[i].name);
		printf("学号:");
		scanf("%d", &L.elem[i].number);
		printf("数学成绩:");
		scanf("%d", &L.elem[i].math);
		printf("英语成绩:");
		scanf("%d", &L.elem[i].English);
		printf("C语言成绩:");
		scanf("%d", &L.elem[i].C);

		++L.Length;
	}
	return OK;
}


//线性表的输出
status ListOutput (Sqlist& L,int n)
{
	int i;
	if(!L.elem)return ERROR;
	for(i=1;i<=n;i++)
	{
		printf("姓名:%s\n",L.elem[i].name);
		printf("学号:%d\n",L.elem[i].number);
		printf("数学成绩:%d\n",L.elem[i].math);
		printf("英语成绩:%d\n",L.elem[i].English);
		printf("C语言成绩:%d\n",L.elem[i].C);
	}
}


//在线性表的第i个元素插入元素
status ListInsert(Sqlist& L, int i)  
{
	int j;
	if (i<1 || i>L.Length + 1)return ERROR;
	if (L.Length == MAXSIZE)return ERROR;
	for (j = L.Length; j >= i; j--)
	{

		L.elem[j+1]=L.elem[j];
	}
	
	printf("请输入第%d个学生的信息:\n",i);
	printf("姓名:");
	scanf("%s", L.elem[i].name);
	printf("学号:");
	scanf("%d", &L.elem[i].number);
	printf("数学成绩:");
	scanf("%d", &L.elem[i].math);
	printf("英语成绩:");
	scanf("%d", &L.elem[i].English);
	printf("C语言成绩:");
	scanf("%d", &L.elem[i].C);
	    
	++L.Length;
	return OK;
}


//在线性表的第i个元素删除元素 
status ListDelete(Sqlist& L, int i)
{
	int j;
	if (i<1 || i>L.Length)return ERROR;
	for (j = i; j <= L.Length; j++)
	{
		L.elem[j] = L.elem[j+1];
	}
	--L.Length;
	return OK;
}


//求线性表的长度
status ListLenght(Sqlist L)
{
	return L.Length;
}


//按姓名直接插入排序
void InsertSort(Sqlist &L)
{
	int i,j;
	student s;
	for(i=1;i<L.Length;i++)
	{
		if(L.elem[i].name<L.elem[i-1].name)
		{
			s=L.elem[i];
			L.elem[i]=L.elem[i-1];
			for(j=i-1;s.name<L.elem[j].name;j--)
				L.elem[j+1]=L.elem[j];
			L.elem[j+1]=s;

		}
	}

}


//按学号快速排序
int Partition(Sqlist &L,int first,int end)
{
	int i,j;
	student temp;
	i=first;
	j=end;
	while(i<j)
	{
		while(i<j&&L.elem[i].number<L.elem[j].number)j--;
		if(i<j)
		{
			temp=L.elem[i];
			L.elem[i]=L.elem[j];
			L.elem[j]=temp;
			i++;
		}
		while(i<j&&L.elem[i].number<=L.elem[j].number)i++;
		if(i<j)
		{
			temp=L.elem[i];
			L.elem[i]=L.elem[j];
			L.elem[j]=temp;
			j--;
		}
		
	}
	return i;

}
void QuickSort(Sqlist &L,int first,int end)
{
	int pivot;
	if(first<end)
	{
		pivot=Partition(L,first,end);
		QuickSort(L,first,pivot-1);
		QuickSort(L,pivot+1,end);
	}
}



//按照学号的折半查找
int Search(Sqlist L,int key,int low,int high)
{
	
	while(low<=high)
	{
		int mid;
		mid=(low+high)/2;
		if(key==L.elem[mid].number)
		{
			return mid;
		}
		else if(key<L.elem[mid].number)
		{
			high=mid-1;
		}
		else
		{
			low=mid+1;
		}
	}
	return ERROR;
}

http://www.niftyadmin.cn/n/1106472.html

相关文章

abcde依次进入一个队列_队列:生产消费模式及线程池的运用

队列&#xff1a;生产消费模式及线程池的运用❝ 关注公众号 MageByte&#xff0c;设置星标获取最新干货。 “加群” 进入技术交流群获更多技术成长。❞向固定大小的线程池投放请求任务时&#xff0c;若果线程池中没有空闲资源了&#xff0c;这时候还有新的请求进来&#xff0c;…

【深度学习框架】

一、tensorflow 二、caffe 三、pytorch 四、对比转载于:https://www.cnblogs.com/EstherLjy/p/9359934.html

GPL加剧开源社区内裂痕大演选边站(转)

GPL加剧开源社区内裂痕大演"选边站"(转)[more]  作者&#xff1a;Johnathan Zuck  来源&#xff1a;Linux人有关GPL最新草稿的争论正在给开源和自由软件倡导者之间带来问题。 “[The GPL 3]不再以公平的原则工作了。它纯粹是一个煽动者&#xff0c;而且只对FSF的极…

Elasticsearch安装及遇到的问题(CentOS 7.3 64位)

Elasticsearch安装 使用root用户创建一个其他用户&#xff0c;(elasticsearch不能在root账户下安装)# 添加一个名字是es工作组 groupadd es # 添加用户es设置密码elasticsearch并设置工作组es useradd es -g es -p elasticsearch 下载elasticsearch包https://www.elastic.co/cn…

maven最全教程

Maven 教程 1、Maven概述 Maven 是什么&#xff1f; Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置&#xff0c;因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周…

[Unity动画]02.动画播放

[Unity动画]02.动画播放 参考链接&#xff1a; http://www.cnblogs.com/hont/p/5100472.html 上一篇是直接通过界面来控制动作的播放&#xff0c;这篇将使用脚本去管理对象的动作 API解析&#xff1a; Animator.IsInTransition&#xff1a;是否处于过渡状态 状态机如下&#xf…

期刊投稿状态_说清楚了!SCI投稿全过程解析及拒稿后处理

关注我 为学术期刊点赞&#xff01;&#xff01;有些小伙伴后台说对投稿过程很没有概念&#xff0c;不同期刊不同状态。今天我们就对SCI投稿过程、投稿状态做一个总结和解析以及拒稿后处理对策及接受后期相关问答&#xff1a;(一)投稿前准备工作和需要注意的事项、投稿过程相关…

安全缺陷持续升高,新系统带来新缺陷(转)

安全缺陷持续升高&#xff0c;新系统带来新缺陷(转)[more]  尽管还没有过去&#xff0c;2006年的安全缺陷已经创下了新的记录。但不幸中的万幸是&#xff1a;只有较少的缺陷的危险性较高。 去年&#xff0c;Internet Security Systems(ISS)发现了5195个软件缺陷。它在周一发布…