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语言输入输出、循环语句、子函数设计、数组、结构体、文件输入输出等知识点,完成一个简单系统的设计开发。

  • 19
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
目录 一、系统介绍 1 二、总体设计 1 2.1程序模块 1 2.2.函数分析 1 2.3.总体结构 2 三.主要模块的实现 3 四.程序调试 6 五.总结与体会 13 六.源程序清单 14 一、系统介绍 成绩管理系统主要管理学生考试成绩的基本信息。在系统,每个学生是一条记 录,包括姓名、学号、所选课程,而每个学生对应课程有相应成绩。系统要对一个有 N个学生的班级所选课程成绩统一进行管理。包括了学生成绩录入、显示、修排序保存等操作。 二、总体设计 2.1程序模块 主界面 void homepage(); 显示全部成绩 void display(); 录入 插入 void input(); 除记录 void del(); 排序 void sort(); 等待界面 void waiting(); 退出界面 void quit(); 2.2.函数分析 主函数 :调用所定义的函数,实现本系统要求的功能 主界面函数 :显示主页面,并连接其它函数模块 显示函数 : 显示按要求询的信息 录入 插入函数 :录入或插入所需信息 除记录函数 : 除数据原有的信息 排序函数 : 按照要求排列出信息的顺序 等待界面函数 : 在显示期间一个缓冲页面 退出界面函数 : 退出现有页面并返回子菜单 2.3.总体结构 . 三.主要模块的实现 主函数(main) 通过对函数的调用实现录入、显示、修排序保存等功能,有机的联系了所有的模 块,是整个系统正常完整的运行。 主页面函数void homepage() 这个函数主要利用了printf输出了完整的主页面,并且通过函数的调用使这个页面和本 程序的其他功能模块连接了起来! 显示全部成绩函数void display() 这个函数主要通过printf输出提示,操作者输入所找方向,调用先前建立的数组的 存储数据,再通过printf函数按照一定的顺序全部完整的输出出来。完成了整个成绩的 输出,显示。 录入插入函数void input() 这个函数先用到if语句判断输入成绩是否正确,for语句判断学号是否正确,然后用到f or,printf,scanf三的函数完成了对所有学生信息录入,并且保存到系统,又用if, else判断输入数量是否超出数组的容纳量 除记录函数void del() 这个函数先用for,if来判断所输入信息是否属于该系统信息,找到信息后用del()函数 除掉原有的信息,并且用if,else选择是否继续。 排序函数void sort() 这个函数用printf输出操作提示,可以用for,if来实现对每一种方式的排序,在按数字 时用通过函数的调用地方法完成进入每一种排序的页面。 退出界面函数void quit() 这个函数主要通过printf输出"谢谢是由本程序",完成对整个程序运行结束的提醒。 除模式 输入信息 四.程序调试 五.总结与体会 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能 力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新 日异,当今计算机应用在生活可以说得是无处不在。因此作为二十一世纪的大学来说 掌握计算机开发技术是十分重要的。回顾起此次课程设计,至今我仍感慨颇多,的确, 从从拿到题目到完成整个编程,从理论到实践,在一个多星期的日子里,我学到很多很 多的的东西,同时不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到 过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识 是远远不够的,只有把所学的理论知识与实践相结合起来,从理论得出结论,才能真 正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程遇到 问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时 在设计的过程发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得 不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故 。 这次课程设计终于顺利完成了,在设计遇到了很多编程问题,最后在老师的辛勤指 导下,终于完成课程设计。同时,我也学得到很多实用的知识,在次,对给予过我帮助 的各位指导老师和所有同学表示忠心的感谢! 参考文献 《C语言程序设计案例教程》 张基温 编著 清华大学出版社 C程序设计 (第三版) 谭浩强 著 清华大学出版社 《C语言程序设计方法》 邓文新 张宏烈 著 哈尔滨工业大学出版社 《C语言课程设计案例精编》 国水利水电出版社 六.源程序清单 #include<stdio.h> #include<string.h> #include<windows.h> #include<conio.h> void ho

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

82年苏打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值