C语言 基于C语言学生成绩管理系统编程设计 实现增、删、改、查、成绩排序、保存当前录入得全部学生信息和成绩,程序启动时需要打开上次保存得数据文件,读入到内存中。

基于C语言学生成绩管理系统编程设计要

1.系统功能:
(1)通过菜单的形式实现人机交互界面
(2)实现录入学生基本信息和成绩功能
(3)实现删除指定学生的基本信息和成绩功能
(4)实现修改指定学生的基本信息和成绩功能
(5)实现查询指定学生的基本信息和成绩功能
(6)对学生成绩实现从大到小排序
(7)保存当前录入得全部学生信息,程序启动时需要打开上次保存得数据文件,读入到结构体中。
(8)每次执行完操作需要清屏

流程框图

在这里插入图片描述

代码内容

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define N 20
int length=0;
struct Student{
    
    
	int num;	//学号
	char name[9];	//姓名
	char sex;	//性别
	float grade;	//成绩
}s[N+1];	//结构体数组,s[0]用作哨兵
void display(){
    
    
	printf("★☆☆☆☆学生成绩管理系统☆☆☆☆★\n");
	printf("	★|1.添加学生信息|★\n");
	printf("	★|2.显示学生信息|★\n");
	printf("	★|3.按成绩排序  |★\n");
	printf("	★|4.查找单个学生|★\n");
	printf("	★|5.删除指定学生|★\n");
	printf("	★|6.修改学生信息|★\n");
	printf("	★|0.退出该程序  |★\n");
	printf("★☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆★\n");
	printf("请输入要使用的功能:\n");
}
//判断学号是否被占用
bool isUsed(int n){
    
    
	//true:被占用,false:未被占用
	bool flag=false;
	for(int i=1;i<=length;i++){
    
    
		if(n==s[i].num)
			flag=true;
	}
	return flag;
}
//增添学生信息
void Add_management(struct Student *s){
    
    
	printf("增添学生信息:\n");
	char yn='Y';
	for(int i=length+1;yn=='Y';i++){
    
    
		printf("请输入学生的学号:");
		while(scanf("%d",&s[i].num)){
    
    
			if(isUsed(s[i].num))
				printf("该学号被占用,请重新输入:\n");
			else
				break;
		}
		printf("请输入学生的姓名:");
		//scanf("%s",s[i].name);
		fflush(stdin);	//清空默认缓冲区
		gets(s[i].name);
		printf("请输入学生的性别:");
		//scanf("%c",&s[i].sex);
		s[i].sex=getchar();
		printf("请输入学生的成绩:");
		scanf("%f",&s[i].grade);
		fflush(stdin);
		length++;
		printf("是否继续录入学生信息输入Y/N\n");
		//scanf("%c",&yn);	
		yn=getchar();	
	}
}
//显示全部学生信息
void Show(){
    
    
	for(int i=1;i<=length;i++)
		printf("学生的学号为:%d\t学生的姓名为:%s\t学生的性别为:%c\t学生的成绩为:%.2f\n",s[i].num,s[i].name,s[i].sex,s[i].grade);
}
//按成绩排序,从大到小排序
void Sort(struct Student *s){
    
    //使用冒泡排序
	int flag=1;	//flag用来标记某一趟排序是否发生交换
	for(int i=1;i<length&&flag==1;i++){
    
    
		flag=0;
		for(int j=1;j<=length-i;j++){
    
    
			if(s[j].grade<s[j+1].grade){
    
    
				s[0]=s[j];
				s[j]=s[j+1];
				s[j+1]=s[0];
				flag=1;
			}
		}
	}
	Show();	//显示全部学生信息
}
//查找单个学生
void Find_student(int n){
    
    
	int flag=0;//用于标记是否找到该学生
	for(int i=1;i<=length;i++){
    
    
			if(n==s[i].num){
    
    
				flag=1;
				printf("学生的学号为:%d\t学生的姓名为:%s\t学生的性别为:%c\t学生的成绩为:%.2f\n",s[i].num,s[i].name,s[i].sex,s[i].grade);
				break;
			}	
		}
	if(flag==0)
		printf("未找到该学生\n");
}
//删除指定学生
void Delete_student(int n,struct Student *s){
    
    
	int flag=0;
	for(int i=1;i<=length;i++){
    
    
		if(n==s[i].num){
    
    
			for(int j=i;j<length;j++)
				s[j]=s[j+1];
			length--;
			flag=1;
			printf("删除成功!");
			break;
		}
	}
	if(flag==0)
		printf("未找到该学生\n");
}
//修改学生信息
void Set_student(int n,struct Student *s){
    
    
	int flag=0;
	for(int i=1;i<=length;i++){
    
    
		if(n==s[i].num){
    
    
			flag=1;
			printf("请输入学生的姓名:");
			fflush(stdin);	//清空默认缓冲区
			gets(s[i].name);
			printf("请输入学生的性别:");
			s[i].sex=getchar();
			printf("请输入学生的成绩:");
			scanf("%f",&s[i].grade);
			printf("修改完毕!\n");
			break;
		}
	}
	if(flag==0)
		printf("未找到该学生\n");
}
void read_file(struct Student *s){
    
    
	FILE *fp=fopen("D:\\coding\\c\\management.txt","r");	//定义文件指针,并打开文件
	if(fp==NULL){
    
    //未找到文件,文件指针就为空
		printf("文件打开出错!\n");
		exit(0);	//退出程序
	}
	for(int i=1;!feof(fp);i++){
    
    
		fread(&s[i],sizeof(struct Student),1,fp);//把文件的内容读入到学生的结构体中
		//fscanf(fp,"%d%s%c%f",&s[i].num,s[i].name,&s[i].sex,&s[i].grade);
		length++;//学生个数加一
	}
	length-=1;
	fclose(fp);//释放文件
}
void write_file(){
    
    
	FILE *fp=fopen("D:\\coding\\c\\management.txt","w");//定义文件指针,并打开文件
	if(fp==NULL){
    
    //未找到文件,文件指针就为空
		printf("文件打开出错!\n");
		exit(0);	//退出程序
	}
	for(int i=1;i<=length;i++){
    
    
		fwrite(&s[i],sizeof(struct Student),1,fp);//把结构体的内容转入到文件中
	}	
	fclose(fp);//释放指针
}
int main(){
    
    
	read_file(s);//导入学生信息
	display();//操作界面
	int n,t;
	while(scanf("%d",&n)){
    
    
		switch(n){
    
    
			case 1:
				Add_management(s);	//输入学生信息
				system("pause");	//暂停函数
				system("cls");	//清屏函数
				display();//操作界面
				break;
			case 2:
				Show();	//显示全部学生信息
				system("pause");
				system("cls");
				display();
				break;
			case 3:
				Sort(s);	//按成绩排序,从大到小排序
				system("pause");
				system("cls");
				display();
				break;
			case 4:
				printf("请输入学生学号:");
				scanf("%d",&t);
				Find_student(t);	//查找单个学生
				system("pause");
				system("cls");
				display();
				break;
			case 5:
				printf("请输入学生学号:");
				scanf("%d",&t);
				Delete_student(t,s);	//删除指定学生
				system("pause");
				system("cls");
				display();
				break;
			case 6:
				printf("请输入学生学号:");
				scanf("%d",&t);
				Set_student(t,s);	//修改学生信息
				system("pause");
				system("cls");
				display();
				break;
			case 0:
				printf("欢迎下次使用!\n");
				write_file();//保存学生信息
				exit(0);
			default:
				printf("请重新输入!\n");
				break;
		}
	}
	return 0;
}

效果展示

1.操作界面
在这里插入图片描述
2.添加学生信息
在这里插入图片描述
3.显示学生信息
在这里插入图片描述
4.按成绩排序并输出
在这里插入图片描述
5.查找单个学生
在这里插入图片描述
6.删除学生信息
在这里插入图片描述
在这里插入图片描述
7.修改学生信息
在这里插入图片描述
在这里插入图片描述
8.退出程序
在这里插入图片描述
*9.再次打开程序
在这里插入图片描述

总结

这次试验让我受益颇深,对C语言又有了新的认知,现在学到的只是还是比较浅显的,设计出来的这个程序还是有很多地方可以改善完善的,比如代码的健壮性和高效性都略有不足,这些都需要自己课后再下功夫。
本程序旨在训练我们的C语言基本编程能力,通过串联C语言输入输出、循环语句、子函数设计、数组、结构体、文件输入输出等知识点,完成一个简单系统的设计开发。

猜你喜欢

转载自blog.csdn.net/qq_54388490/article/details/122104705