C语言 学生成绩管理系统

(1)题目:学生成绩管理系统

(2)设计要求

(2.1)输入一个班的学生的基本信息(包括学号,姓名,性别和五门课程成绩)。

(2.2)按姓名或者学号查找、修改、删除和保存各位同学的信息。

2.3)计算每个学生各门功课总分和平均分,按学号或总分排序出每个学生的信息及总分和平均分和名次。

2.4)计算全班各门功课的平均分,显示每门课程中低于平均分的每一个同学的信息。

2.5)显示每门科目中,成绩在90分以上的学生信息,以及每门科目中不及格的学生信息。

(2.6)以菜单进行管理,正确输入密码后进入系统,将输入的信息保存到文件中以备后续使用。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define HEADER printf("姓名\t学号\t性别\t语文\t数学\t英语\t体育\t政治\n")
#define  PRINT printf("%s\t%d\t%s\t%d\t%d\t%d\t%d\t%d\n",student[i].name, student[i].id, student[i].sex, student[i].Chinese, student[i].Maths, student[i].English, student[i].PE, student[i].Politics)
#define HEADER1 printf("姓名\t学号\t性别\t语文\t数学\t英语\t体育\t政治\t总分\t平均分\t名次\n")
#define PRINT1 printf("%s\t%d\t%s\t%d\t%d\t%d\t%d\t%d\t%.2f\t%.2f\t%d\n", student[i].name, student[i].id, student[i].sex, student[i].Chinese, student[i].Maths, student[i].English, student[i].PE, student[i].Politics, student[i].sum, student[i].average, i+1);
int N=0;
struct student{
	int id;//学号 
	char name[30];//名字 
	char sex[20];//性别 
	int Chinese;//语文 
	int Maths;//数学 
	int English;//英语 
	int PE;//体育 
	int Politics;//政治 
	double sum;//总分 
	double average;//平均分 
}student[10];
void check()
{
	char userName[5];//用户名
	char userPWD[5];//密码
	int i;
	for(i=1; i<4; i++){
		/*用户名和密码均为123*/
		printf("\n      请您输入您的用户名(123):");
		scanf("%s", userName);
		printf("\n       请您输入您的密码(123):"); 
		scanf("%s", userPWD);
		if(((strcmp(userName,"123"))==0)&&((strcmp(userPWD,"123"))==0))//验证用户名和密码 
		{
			printf("密码正确!\n");
			break;
		}else{
			if(i<3){
				printf("用户名或密码错误,请重新输入!\n");
			}else{
				printf("您已连续3次将用户名或密码输入错误,系统将退出!\n");
				exit(1);
			}
		}
	} 
	system("cls");
} 
int namesearch()//按姓名查询 
{
	int i, flag=0;
	char name[30];
	printf("请输入姓名:");
	scanf("%s", name);
	for(i=0; i<N; i++){
		if((strcmp(name,student[i].name))==0){
			flag=1;
			break;
		}	
		}
		if(flag==0)
		return -1;
		else
		return i;
}
int idsearch()//按学号查询 
{
	int i, flag=0, id;
	printf("请输入学号:");
	scanf("%d", &id);
	for(i=0; i<N; i++){
		if(id==student[i].id){
			flag=1;break;
		}
	}
	if(flag==0)
	return -1;
	else
	return i;
}
void idline()//按学号排序
{
	int i, j;
	for(i=1; i<N; i++){
		for(j=0; j<N-i; j++){
			if(student[j].id<student[j+i].id){
				student[N]=student[j];
				student[j]=student[j+1];
				student[j+1]=student[N];
			}
		}
	}
 } 
void sumline()//按总分排序 
{
	int i, j;
	for(i=1; i<N; i++){
		for(j=0; j<N-i; j++){
			if(student[j].sum<student[j+1].sum){
				student[N]=student[j];
				student[j]=student[j+1];
				student[j+1]=student[N];
			}
		}
	}
}
double Chinese()//语文平均分 
{
	int i, k;
	double result;
	for(i=0; i<N; i++){
		k+=student[i].Chinese;
	}
	result=(double)k/N;
	return result;
}
double Maths()//数学平均分 
{
	int i, k;
	double result;
	for(i=0; i<N; i++){
		k+=student[i].Maths;
	}
	result=(double)k/N;
	return result;
}
double English()//英语平均分 
{
	int i, k;
	double result;
	for(i=0; i<N; i++){
		k+=student[i].English;
	}
	result=(double)k/N;
	return result; 
}
double PE()//体育平均分 
{
	int i, k;
	double result;
	for(i=0; i<N; i++){
		k+=student[i].PE;
	}
	result=(double)k/N;
	return result;
}
double Politics()//政治平均分 
{
	int i, k;
	double result;
	for(i=0; i<N; i++){
		k+=student[i].Politics;
	}
	result=(double)k/N;
	return result;
}
void shuru(int i)//输入学生信息 
{
	int a;
	printf("请输入该生的姓名:\n");
	scanf("%s", student[i].name);
	printf("请输入该生的学号:\n");
	scanf("%d", &student[i].id );
	printf("请输入该生的性别:\n (1) 男\n (2) 女\n");
	scanf("%d", &a);
	switch(a){
		case 1:strcpy(student[i].sex,"男"); break;
		case 2:strcpy(student[i].sex,"女"); break;
		 default:printf("选择错误,请重新选择\n");break;
	}
	printf("请输入该生的语文成绩:\n");
	scanf("%d", &student[i].Chinese);
	printf("请输入该生的数学成绩:\n");
	scanf("%d", &student[i].Maths );
	printf("请输入该生的英语成绩:\n");
	scanf("%d", &student[i].English);
	printf("请输入该生的体育成绩:\n");
	scanf("%d", &student[i].PE );
	printf("请输入该生的政治成绩:\n");
	scanf("%d", &student[i].Politics);
	student[i].sum =(double)(student[i].Chinese +student[i].English +student[i].Maths +student[i].PE +student[i].Politics );
	student[i].average =(double)student[i].sum /5;
	printf("输入完毕!\n"); 
}
void first()//保存学生信息 
{
    int i, n;
	printf("请输入你要输入的学生个数:");
	scanf("%d", &n);
	for(i=N;i<n+N;i++){
		shuru(i);//输入数据 
	}
	N=n+N;
	system("pause");
}
void second()//修改学生成绩 
{
	char name[30], sex[20];
	int i, choice;
	if(N>0){
		printf(" (1) 按姓名修改\n (2) 按学号修改\n 请选择:");
		scanf("%d", &choice);
		switch(choice){
			case 1:i=namesearch();
			if(i!=-1){
				printf("找到了!\n");
				HEADER;
				PRINT;
				shuru(i);
			}else
			printf("未找到该生数据!\n");break;
			case 2:i=idsearch();
				if(i!=-1){
					printf("找到了!\n");
					HEADER;
					PRINT;
			        shuru(i);
				}else
				printf("未找到该生数据!\n");break;
				default:printf("输入错误!\n");break;
		} 
	}else
	printf("没有学生数据!\n");
	system("pause");
}
void third()//删除学生信息 
{
	char name[30], sex[20];
	int i, choice, a, j;
	if(N>0){
		printf(" (1) 按姓名删除\n (2) 按学号删除\n 请选择:");
		scanf("%d", &choice);
		switch(choice){
			case 1:i=namesearch();
			if(i!=-1){
				printf("找到了!\n");
				HEADER;
				PRINT;
				for(j=i;j<N-1;j++){
					student[j]=student[j+1];
				}
				N--;
				printf("删除完毕!\n");
			}else
			printf("未找到该生数据!\n");break;
			case 2:i=idsearch();
			if(i!=-1){
				printf("找到了!\n");
				HEADER;
				PRINT;
				for(j=i; j<N-1; j++){
					student[j]=student[j+1];
				}
				N--;
				printf("删除完毕!\n");
			}else 
			printf("未找到该生数据!\n");break;
			default:printf("输入错误!\n");break;
		} 
	}else
	printf("没有学生数据!\n");
	system("pause");
}
void fourth()//查找学生信息 
{
		int i, choice;
	if(N>0){
		printf(" (1) 按姓名查找\n (2)按学号查找\n 请选择:");
		scanf("%d", &choice);
		switch(choice){
			case 1:i=namesearch();
			if(i!=-1){
				printf("找到了!\n");
				HEADER;
				PRINT;
			}else
				printf("未找到该生数据!\n");break;
				case 2:i=idsearch();
				if(i!=-1){
					printf("找到了!\n");
					HEADER;
					PRINT;
				}else
				printf("未找到该生数据!\n");break;
				default:printf("输入错误!\n");break;	
		}
	}else
		printf("没有学生数据!\n");
	system("pause");
	
}
void fifth()//排序学生成绩 
{
	int i, choice;
	if(N>0){
	printf(" (1) 按学号排序\n (2)按总分排序\n 请选择:");
	scanf("%d", &choice); 
	switch(choice){
		case 1:
			idline();
			HEADER1;
			for(i=0; i<N; i++){
				PRINT1;
			}
			break;
			case 2:
				sumline();
				HEADER1;
				for(i=0; i<N; i++){
					PRINT1;
				}
				break;
				default:printf("输入错误!\n");break;
         }
	}else
	printf("没有学生数据!\n");
	system("pause");
}
void sixth()//查看各门功课的平均分 
{
	int i;
	double result;
	printf("语文:\n");
	result=Chinese();//result等于语文平均分 
	HEADER;
	for(i=0; i<N; i++){
		if(result>(double)student[i].Chinese)
		PRINT;
	}
	printf("数学:\n");
	result=Maths();
	HEADER;
	for(i=0; i<N; i++){
		if(result>student[i].Maths)
		PRINT;
	}
	printf("英语:\n");
	result=English();
	HEADER; 
	for(i=0; i<N; i++){
		if(result>student[i].English );
		PRINT;
	}
	printf("体育:\n");
	result=PE();
	for(i=0; i<N;i++){
		if(result>student[i].PE );
		PRINT;
	}
	printf("政治:\n");
	result=Politics();
	for(i=0; i<N; i++){
		if(result>student[i].Politics );
		PRINT;
	}
	system("pause");
}
void seventh()//查看各门功课情况 
{
	int i;
	printf("语文:\n成绩90分以上:\n");
	HEADER;
	for(i=0;i<N;i++){
		if(90<=student[i].Chinese );
		PRINT;
	}
	printf("不及格学生:\n");
	HEADER;
	for(i=0;i<N;i++){
		if(60>student[i].Chinese)
		PRINT;
	}
	printf("数学:\n成绩90分以上:\n");
	HEADER;
	for(i=0;i<N;i++){
		if(90<=student[i].Maths );
		PRINT;
	}
	printf("不及格学生:\n");
	HEADER;
	for(i=0;i<N;i++){
		if(60>student[i].Maths)
		PRINT;
	}
	printf("英语:\n成绩90分以上:\n");
	HEADER;
	for(i=0;i<N;i++){
		if(90<=student[i].English );
		PRINT;
	}
	printf("不及格学生:\n");
	HEADER;
	for(i=0;i<N;i++){
		if(60>student[i].English)
		PRINT;
	}
	printf("体育:\n成绩90分以上:\n");
	HEADER;
	for(i=0;i<N;i++){
		if(90<=student[i].PE );
		PRINT;
	}
	printf("不及格学生:\n");
	HEADER;
	for(i=0;i<N;i++){
		if(60>student[i].PE)
		PRINT;
	}
	printf("政治:\n成绩90分以上:\n");
	HEADER;
	for(i=0;i<N;i++){
		if(90<=student[i].Politics );
		PRINT;
	}
	printf("不及格学生:\n");
	HEADER;
	for(i=0;i<N;i++){
		if(60>student[i].Politics)
		PRINT;
        }
	system("pause");
}

void baocun()
{
	FILE *fp1;
	int i=0;
	fp1=fopen("学生成绩管理一.txt","wb");
	for(i=0;i<N;i++){	
	fprintf(fp1,"%s %d %s %d %d %d %d %d\n",student[i].name,student[i].id,student[i].sex,student[i].Chinese,student[i].Maths,student[i].English,student[i].PE,student[i].Politics);	
	}
	fclose(fp1);
}

void menu()
{
	int choice;
	FILE *fp1;
	int i=0;
	fp1=fopen("学生成绩管理一.txt", "rb");
	if(fp1==NULL){
		fp1=fopen("学生成绩管理一.txt", "wb");
     }
	N=i; 
	while(1)
	{
		printf("-----------------------------------------------\n");
		printf("\t\t欢迎使用学生成绩管理系统\n");
		printf("\t\t (1) 保存学生信息\n");
		printf("\t\t (2) 修改学生信息\n");
		printf("\t\t (3) 删除学生信息\n");
		printf("\t\t (4) 查找学生信息\n");
		printf("\t\t (5) 排序学生信息\n");
		printf("\t\t (6) 查看各门功课的平均分情况\n");
		printf("\t\t (7) 查看各门课程的情况\n");
		printf("\t\t (0) 退出系统\n");
		printf("------------------------------------------------\n");
		printf("请输入您的选择:"); 
		scanf("%d", &choice);
		switch(choice){
			case 1:
				first();break;
			case 2:
				second();break;
			case 3:
				third();break;
			case 4:
				fourth();break;
			case 5:
				fifth();break;
			case 6:
				sixth();break;
			case 7:
				seventh();break;
			case 0:
				break;
			default:
				printf("输入错误!\n");break;	
		}
		system("pause");
	}
}
int main()
{
	check();
    menu();
}



 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值