学生成绩管理系统

题目:学生管理系统设计
功能:学生管理系统设计,每个学生信息作为一条记录,学号、成绩、平均分。
系统要求实现以下功能:
1、输入功能:录入学生信息(包括学生学号、成绩、平均分等);
2、显示功能:完成学生记录的显示。
3、查找功能:完成按学号查找学生的相关记录,并显示。
分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。2、完成信息的录入和显示(即通过编程创建文件,输入学生信息并可将文件内容显示出来)3、输入成绩(计算出平均成绩以及排序)4、按学号查询其学生成绩。
要求:1、用C语言实现程序设计;
2、利用结构体数组、等实现学生信息表达、查询等,充分体现数据结构的知识;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序要有注释。
5、程序中所用到的排序查找方法需采用数据结构中所学方法实现,要求方法实用效率高。

.C

#include <stdio.h>
#include <stdlib.h>
#define N 10 
int n; 
typedef struct stu{
	int num;
	float score[3];
	float ave;
}STU;

STU st[N];

//******帮助菜单*******
void help()
{
	printf("**************************************\n");
	printf("*     学生成绩管理系统--帮助菜单     *\n");
	printf("**************************************\n");
	printf("*        H = 显示帮助菜单            *\n");
	printf("*        T = 成绩录入                *\n");
	printf("*        A = 计算学生平均成绩        *\n");
	printf("*        L = 列出成绩表              *\n");
	printf("*        P = 按平均成绩由高到低排序  *\n");
	printf("*        S = 按学号查询学生成绩      *\n");
	printf("*        C = 清屏                    *\n");
	printf("*        Q = 退出系统                *\n");
	printf("**************************************\n");
}
//*****成绩录入*******
void type()
{
	int i;
	printf("请输入学生人数:");
	scanf("%d", &n);
	printf("请输入%d名学生的三门课成绩:\n", n);
	printf("学号	语文	数学	外语\n");

	for(i = 1; i <= n; i++)
	{
		st[i-1].num = i;
		printf("%d	 ",st[i-1].num);
		scanf("%f	%f	%f",&st[i-1].score[0], &st[i-1].score[1], &st[i-1].score[2]);
	}
}
//*****列出成绩******
void list()
{
	int i;
	printf("学生成绩如下:\n");
	printf("学号	语文	数学	外语	平均分\n");
	for(i = 1; i <= n; i++)
	{
		printf("%d	%.1f	%.1f	%.1f	%.1f\n", st[i-1].num, st[i-1].score[0], st[i-1].score[1], st[i-1].score[2], st[i-1].ave);
	}
}
//*****求出平均值******
void average()
{
	int sum = 0, i;
	for(i = 0; i < n; i++)
	{
		sum = st[i].score[0] + st[i].score[1] + st[i].score[2];
		st[i].ave = sum / 3;
	}
	printf("平均分已计算。请使用命令L查看。\n");
}
//*****按平均分从高到低排序*****
void sort()
{
	int i, j;
	STU tmp;
	for(i = 0; i < n-1; i++)
	{
		for(j = 0; j < n-i-1; j++)
		{
			if(st[j].ave < st[j+1].ave)
			{
				tmp = st[j];
				st[j] = st[j+1];
				st[j+1] = tmp;
			}
		}
	}
	printf("完成排序。请使用命令L查看\n");
}
//*****按学号查询******
void search()
{
	int i, j;
	printf("请输入要查找的学生学号:");
	scanf("%d", &i);
	for(j = 0; j < n; j++)
	{
		if(st[j].num == i)
		{
			printf("%d	%.1f	%.1f	%.1f	%.1f\n", i, st[j].score[0], st[j].score[1], st[j].score[2], st[j].ave);
		}
	}
}
//*****新增学生的成绩录入******
void add()
{
	int i,addnum;
	printf("请输入学生人数:");
	scanf("%d", &addnum);
	printf("请输入%d名学生的三门课成绩:\n", addnum);
	printf("学号	语文	数学	外语\n");
	n = n + addnum;
	for(i = n - addnum; i < n; i++)
	{
		st[i].num = i+1;
		printf("%d	 ",st[i].num);
		scanf("%f	%f	%f",&st[i].score[0], &st[i].score[1], &st[i].score[2]);
	}
 

}

.main

#include <stdio.h>
#include <stdlib.h>
#include "stu.h"
int main(int argc, const char *argv[])
{
	char order;
	help();
	while(1)
	{
		printf("请输入命令=");
		scanf("%c", &order);
		switch(order)
		{
			case 'H':
				help();
				break;
			case 'T':
				if(n == 0)
					type();
				else
					add();
				break;
			case 'A':
				if(n == 0)
					puts("成绩表为空!请先使用命令T录入学生成绩。");
				else
					average();
				break;
			case 'L':
				if(n == 0)
					puts("成绩表为空!请先使用命令T录入学生成绩。");
				else
					list();
				break;
			case 'P':
				if(n == 0)
					puts("成绩表为空!请先使用命令T录入学生成绩。");
				else
					sort();
				break;
			case 'S':
				if(n == 0)
					puts("成绩表为空!请先使用命令T录入学生成绩。");
				else
					search();
				break;
			case 'C':
				system("clear");
				break;
			case 'Q':
				exit(1);
		}
		getchar();//用scanf输入字符时,会同时把回车接受到,放在
				//缓存区中,执行下次while循环时,会打印两次输出语句,
				//所以使用getcahr来接收垃圾字符	
	}
	
	return 0;
}


.h

extern int n; 
void help();
void type();
void list();
void average();
void sort();
void search();
void add();

Makefile

CC=gcc
OBJS=.o .o (.c和main)
CFLAGS=-c -Wall -g

stu:$(OBJS)
	$(CC) $(OBJS) -o $@
$(OBJS):%.o:%.c
	$(CC) $(CFLAGS) $^ -o $@

.PHONY:
clean:
	rm *.o stu

源码:https://download.csdn.net/download/m0_53601375/20464907

希望看到此文章的小伙伴们,如果有什么错误,欢迎下方留言,本人肯定虚心接受并改正!大家一起共同进步。如果对你有所帮助,可以给博主一个小小的赞👍。 谢谢❥(^_-)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值