华清远见上海中心22071班 8.19作业

 学生管理系统

1.系统主体

#include "stu.h"
extern int n; 
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;
	while(1)
	{
		printf("请输入学生人数:");
		scanf("%d", &n);
		if(n>10||n<0)
		{
			printf("学生人数不符合错误,请重新输入:");
		}
		else
		{
			printf("请输入%d名学生的三门课成绩:\n", n);
			printf("学号	语文	数学	外语\n");
			break;
		}
	}
	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");
	for(i=1;i<=n;i++)
	{
		st[i-1].num = i;
		printf("%d\t%.2f\t%.2f\t%.2f",st[i-1].num,st[i-1].score[0], st[i-1].score[1], st[i-1].score[2]);
		printf("\n");
	}
}
//*****求出平均值******
void average()
{
	int sum;
	for(int i=1;i<=n;i++)
	{
		sum=st[i-1].score[0]+st[i-1].score[1]+st[i-1].score[2];
		st[i-1].ave=sum/3.0;
	}
	printf("平均成绩已计算,请按P查看平均成绩排序\n");
}
//*****按平均分从高到低排序*****
void sort()
{
	for(int i=1;i<n;i++)
	{
		int max=i-1;
		for(int j=0;j<n-i;j++)
		{
			if(st[max].ave<st[i+j].ave)
			{
				max=i+j;
			}
		}
		struct STU temp=st[max];
		st[max]=st[i-1];
		st[i-1]=temp;
	}
	printf("学号	语文	数学	外语  	平均分\n");
	for(int i=1;i<=n;i++)
	{
		printf("%d\t%.2f\t%.2f\t%.2f\t%.2f",st[i-1].num,st[i-1].score[0], st[i-1].score[1], st[i-1].score[2],st[i-1].ave);
		printf("\n");
	}
}
//*****按学号查询******
void search()
{
	int num;
	while(1)
	{
		printf("请输入学号:");
		scanf("%d",&num);
		int flag=0;
		for(int i=0;i<n;i++)
		{
			if(num==st[i].num)
			{
				flag=1;
				printf("学号	语文	数学	外语  	平均分\n");
				printf("%d\t%.2f\t%.2f\t%.2f\t%.2f",st[i].num,st[i].score[0], st[i].score[1], st[i].score[2],st[i].ave);
				printf("\n");
				break;
			}
			else
			{
				continue;
			}
		}
		if(flag==0)
		{
			printf("未找到该学生,请按回车键重试\n");
		}
		else
		{
			break;
		}
	}
}
//*****新增学生的成绩录入******
void add()
{
	int new;
	while(1)
	{
		if(n==N)
		{
			printf("人数达到上线,无法添加\n");
			break;
		}
		printf("已记录%d人,还可以录入%d人\n",n,N-n);
		printf("输入要添加的学生人数:");
		scanf("%d",&new);
		if(new>(N-n)||new<0)
		{
			printf("输入不正确,重新输入");
			continue;
		}
		printf("请输入%d名学生的成绩:\n", new);
		printf("学号 语文 数学 外语\n");
		for(int i=n;i<(n+new);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]);
		}
		break;
	}
	n=n+new;
}

2.分文件

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

3.头文件

#include <stdio.h>
#include <stdlib.h>
#define N 10
int n;
typedef struct STU
{
    int num;
    float score[3];
    float ave;
}STU;
void help();
void type();
void list();
void average();
void sort();
void search();
void add();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值