基于C语言完成的学生信息管理系统

编辑器:Dev.C++

该系统的学生数据储存到txt文件,每次运行从txt文件中读取学生信息,可进行添加、删除、修改等等操作。

环境搭建

#include<stdio.h>
#include<stdlib.h> 
#include<string.h> 
#define N 10 
void seek();//查找学生信息 
void add();//添加学生信息 
void de();//删除学生信息
void revise();//修改学生信息 
void save();//保存学生信息(保存信息) 
void present();//浏览学生信息
void refresh();//刷新学生信息 
void menu();//菜单
void quit();//退出系统 
void enter();//清空信息 
void sort();//排序信息
void find();//查找信息
void good();
int n,t;//n为当前系统的人数,t为选择项
struct student{
	char name[15];
	char ID[6];
	char sex;
	int age;
	int grade[3];
}stu[N];
int len=sizeof(struct student); 

 菜单功能

void menu()//菜单
{
	printf("----------------------------------------\n");
	printf("       欢迎使用学生信息管理系统\n");
	printf("     1.查找 2.添加 3.删除 4.浏览  \n"); 
	printf("     5.排序 6.修改 7.显示最好成绩  \n"); 
	printf("     8.帮助 9.退出\n");				
	printf("          当前有%d位学生信息           ",n); 
	printf("\n");
	printf("----------------------------------------\n");
}

查找功能

void find()
{
	char ID[10];

	int i,x,re=0,flag=0;
	while(1)
	{	printf("请输入你要查找学生信息的学号");
		scanf("%s",&ID);
		getchar(); 
		for(i=0;i<n;i++)
		{
			if(strcmp(ID,stu[i].ID)==0)
			{
			printf("找到了!!\n");
			printf("学号:%s\t ",stu[i].ID);
			printf("姓名:%s\t ",stu[i].name);
			printf("性别:%c\t ",stu[i].sex);
			printf("年龄:%d\t ",stu[i].age);
			printf("高等数学:%d 英语:%d C语言:%d",stu[i].grade[0],stu[i].grade[1],stu[i].grade[2]);
			printf("\n");
			flag=1;
			break;
			}
		} 
		if(flag!=1)
		printf("无该学号的学生信息!\n");
		
		printf("是否继续查找(1/0)"); 
		scanf("%d",&x);
		switch(x)
		{
		case 1:break;
		case 0:re=1;break;	
		}

		if(re==1)
		break;
	}
	
 } 

添加功能

void add()//添加 
{
	int m,j,g;//m为需要添加的学生人数
	printf("请输入你要添加的人数:");
	scanf("%d",&m);
	int i=n;
	if(m>0);
	{
		while(i<n+m)
		{
		printf("请输入第%d位学生的信息\n",i+1);
			
flag:		printf("请输入学号:"); 
			scanf("%s",stu[i].ID); 
			getchar();
			
//----------判断学号有无重复----------
			int j;
			for(j=0;j<i;j++)
			if(strcmp(stu[i].ID,stu[j].ID)==0) 
			{
				printf("学号已重复,请重新输入 ");
				goto flag;
			}
//----------判断学号有无重复----------			
			
			printf("请输入姓名:");
			scanf("%s",stu[i].name); 
			getchar(); 
			
			printf("请输入性别F(女)或M(男):"); 
			scanf("%c",&stu[i].sex); 
			getchar(); 
			
			printf("请输入年龄:"); 
			scanf("%d",&stu[i].age); 
			
			printf("请输入三科成绩(用空格隔开):");
			scanf("%d%d%d",&stu[i].grade[0],&stu[i].grade[1],&stu[i].grade[2]);
			FILE *p=fopen("学生信息.txt","ab+");
			if(p==NULL)
			exit(0); 
			fwrite(&stu[i],len,1,p);
			fclose(p);
			i++;
		}
		printf("学生信息已经添加!!!\n"); 
			printf("------------------------------------------------------------------------------------------\n");
			for(i=n;i<n+m;i++)
			{
				printf("学号:%s \t",stu[i].ID);
				printf("姓名:%s \t",stu[i].name);
				printf("性别:%c \t",stu[i].sex);
				printf("年龄:%d \t",stu[i].age);
				printf("高等数学:%d 英语:%d C语言:%d",stu[i].grade[0],stu[i].grade[1],stu[i].grade[2]);
				
				printf("\n");
			}
			
			printf("------------------------------------------------------------------------------------------\n");
	}
	n+=m;
}

删除功能 

void de()//删除 
{
	//更新:删除后把文件清空重新保存 
	int i,flag,flag1;
	char ID1[10]; 
	if(n!=0)
	{
		for(i=0;i<n;i++)
		{
		printf("学号:%s ",stu[i].ID);
		printf("姓名:%s ",stu[i].name);
		printf("性别:%c ",stu[i].sex);
		printf("年龄:%d ",stu[i].age);
		printf("高等数学:%d 英语:%d C语言:%d",stu[i].grade[0],stu[i].grade[1],stu[i].grade[2]);
		printf("\n");
		}
		while(1)
		{
		printf("请选择你要删除的信息(填学号):");
		scanf("%s",&ID1);
		for(i=0;i<n;i++)
		{
			if(strcmp(ID1,stu[i].ID)==0)
			{
				printf("找到了!\n");
				printf("真的要删除?(1/0)\n");
				scanf("%d",&flag);
				switch(flag)
				{
				case 1:
				{
					int j;
					//memset(&stu[i],0,sizeof(struct student));
					
					for(j=i;j<n;j++)//删除的信息后面的信息往前一位,要删除的信息被前一信息覆盖,即删除 
					{
						stu[j]=stu[j+1];
					}
					n-=1;
					FILE *p=fopen("学生信息.txt","wb");
					if(p==NULL)
					exit(0);
					for(i=0;i<n;i++)
					{
						if(fwrite(&stu[i],len,1,p)!=1) 
						{
						printf("不能保存\n");	
						getchar(); 
						}
						
					}
					fclose(p);
				break;
				}
				case 0:flag1=1;break;
				}	
			}
		}
		if(flag1==1);
		break;
		
		printf("找不到!\n");	
	}
		
	}
	
	else
	printf("无信息可删除!");
	system("pause");
}

浏览功能

void present()//浏览信息 
{
	int i,j;
	if(n>0)
	{
		for(i=0;i<n;i++)
		{
			printf("学号:%s   ",stu[i].ID);
			printf("姓名:%s   ",stu[i].name);
			printf("性别:%c   ",stu[i].sex);
			printf("年龄:%d   ",stu[i].age);
			printf("高等数学:%d 英语:%d C语言:%d",stu[i].grade[0],stu[i].grade[1],stu[i].grade[2]);
			printf("\n");
		}
		system("pause");	
	}
	else
	{
		printf("无学生信息");
		system("pause");	
	} 
}

刷新功能

void reflash()//刷新.读取文件的学生信息 
{
	long size,m=0,flag;
	FILE *p=fopen("学生信息.txt","rb");	
	if(p==NULL)
		{
		exit(0);	
		}

	fseek(p,0,SEEK_END);
	size=ftell(p);
	
	if(size!=0)
	{
		rewind(p); 
		while(fread(&stu[n],len,1,p)==1)//每次读取一个学生信息 
		{	
		int k;
		for(k=0;k<n;k++)
			{
				if(strcmp(stu[k].ID,stu[n].ID)==0)//判断单个是否重复 
				{
				printf("学号信息已重复!");
				memset(&stu[n],0,len);
				flag=1;//是,读取的该信息清空 
				break; 
				}
			if(flag==1)
			continue;
		 	} 
//逐个判断操作台有没有重复的 
			n++; 
		}
	}

		
	else
	{
		printf("文件内无学生信息!\n");	
	}
	
	fclose(p);
}

修改功能

void revise()//修改信息 
{	
	//更新:修改完的信息覆盖掉文件中的信息 
	char ID[10];
	present();
	while(1)
	{
		printf("请问你需要修改学生信息的学号是:");
		scanf("%s",&ID);
		getchar(); 
		int i,j,flag=0;
		for(i=0;i<n;i++)
		{
			if(strcmp(ID,stu[i].ID)==0)
			{
			j=i;//记录找到的学生信息下标 
			flag=1;//找到了 
			break;
			}
		}
		if(flag==1)//开始修改 
		{	while(1)
			{
				printf("请选择修改选项或退出:1.学号2.姓名3.性别4.年龄5.三科成绩 0.退出\n");
				int x; 
				scanf("%d",&x);
				switch(x)
				{
				case 1:
					{
					printf("请输入学号:");
					scanf("%s",&stu[j].ID);
					printf("修改成功!");
					}
				case 2:
					{
					printf("请输入新名字:\n");
					scanf("%s",&stu[j].name);
					printf("修改成功!");
					break;	
					}
				case 3:
					{
					printf("请修改性别");
					scanf("%c",&stu[j].sex);
					getchar(); 
					printf("修改成功!");
					break;
					}	 
				case 4:
					{
					int Age;
					printf("请输入新年龄:\n");
					scanf("%d",&Age);
					stu[j].age=Age;
					printf("修改成功!");
					break;	
					}
					
					break; 
				case 5:
					{
						int Grade[3];
					printf("请输入新成绩");
					scanf("%d %d %d",&Grade[0],&Grade[1],&Grade[2]);
					stu[j].grade[0]=Grade[0],stu[j].grade[1]=Grade[1],stu[j].grade[2]=Grade[2];
					printf("修改成功!");
					break;	
					}
				
				case 0:
					{
						//开始查找文件中的要修改的文件,将控制台修改完的信息覆盖到文件中要修改的信息
				FILE *p=fopen("学生信息.txt","r+b");	
				if(p==NULL)
				{
					exit(0);	
				}		
				fseek(p,j*len,SEEK_SET);//把指针移向到要文件中要修改的信息 
				fwrite(&stu[j],len,1,p); 
				fclose(p);
					return;
					}
			
				}
				printf("学号:%s\t ",stu[i].ID);
				printf("姓名:%s\t ",stu[i].name);
				printf("性别:%c\t ",stu[i].sex);
				printf("年龄:%d\t ",stu[i].age);
				printf("高等数学:%d 英语:%d C语言:%d",stu[i].grade[0],stu[i].grade[1],stu[i].grade[2]);
				printf("\n");		
			}
			
		} 
		else
		{
			printf("找不到该学号的学生信息\n"); 
		}	
	}
	
}

排序功能

void sort()//排序信息 
{
f:	printf("总成绩按1.升序/2.降序/3.退出\n");
	int i,j,flag;
	scanf("%d",&flag);
	if(flag==1)
	{
	for(i=0;i<n;i++)
	{
		for(j=0;j<n-i-1;j++)
		{
			if(stu[j].grade[0]+stu[j].grade[1]+stu[j].grade[2]<stu[j+1].grade[0]+stu[j+1].grade[1]+stu[j+1].grade[2])
			{
				struct student temp;
				temp=stu[j];
				stu[j]=stu[j+1];
				stu[j+1]=temp;
			}
		}
	}
	present();	
	}
	else if(flag==2) 
	{
		for(i=0;i<n;i++)
	{
		for(j=0;j<n-i-1;j++)
		{
			if(stu[j].grade[0]+stu[j].grade[1]+stu[j].grade[2]>stu[j+1].grade[0]+stu[j+1].grade[1]+stu[j+1].grade[2])
			{
				struct student temp;
				temp=stu[j];
				stu[j]=stu[j+1];
				stu[j+1]=temp;
			}
		}
	}
	present();
	}
	else if(flag==3)
	{
		return;
	}
	else 
	{
		printf("输入错误!");
		goto f;
	}
}

 显示最好成绩功能

void good()
{
	if(n>0)
	{
			printf("开始显示显示最好成绩\n");
			int i,j,sum,temp;
			sum=stu[0].grade[0]+stu[0].grade[1]+stu[0].grade[2];
			for(i=0;i<n;i++)
			{
				temp=stu[i].grade[0]+stu[i].grade[1]+stu[i].grade[2];
				if(temp>sum)
				{
					j=i;
					sum=temp;	
				}
			}
				printf("最好成绩是:"); 
				printf("学号:%s  ",stu[j].ID);
				printf("姓名:%s  ",stu[j].name);
				printf("性别:%c  ",stu[j].sex);
				printf("年龄:%d  ",stu[j].age);
				printf("高等数学:%d 英语:%d C语言:%d",stu[j].grade[0],stu[j].grade[1],stu[j].grade[2]);
				printf("\n");
	} 
	system("pause");
} 

清空功能 

void enter1()//清空系统 
{
	FILE *p=fopen("学生信息.txt","w");
	if(p==NULL)
	exit(0);
	fclose(p);	
} 

提示功能

void help()
{
	printf("一、请按菜单中选择前编号输入指令\n");
	printf("二、遇到(1/0),1代表是,0代表否\n");
	printf("三、输入或修改学号名字,不要输入空格!\n");
	printf("四、选项10是清空文件内信息,选项11是清空控制台信息"); 
	system("pause"); 
}

清空控制台数据功能 

void enter2()
{
	memset(&stu,0,len);
	n=0;
}

退出功能 

void quit()//退出系统 
{
	exit(0);
}

 主函数用来控制程序逻辑

int main()
{		
		reflash();
		printf("学生信息读取完毕\n");
	while(1)
	{	
		
		menu();
		printf("请输入指令:");
		scanf("%d",&t);
		switch(t)
		{
		case 1:find();break;
		case 2:add();break;
		case 3:de();break;
		case 4:present();break;
		case 5:sort();break;
		case 6:revise();break;
		case 7:good();break;
		case 8:help();break;  
		case 9:quit();break;
		case 10:enter1();break;	
		case 11:enter2();break; 
		default:printf("输入指令有误,请重新输入!:\n");goto f;												
		} 
	}
	return 0; 
}

发现错误欢迎指正!!!

  • 20
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
给别人编的。。。留着也没多大用处要做一个学生信息管理系统1.系统管理员进入(请输入密码)2.一级菜单(1.信息维护,2.信息检索,3.信息统计,4.退出)3.二级菜单(信息维护(1.建立学生成绩文件,2.添加学生记录,3.删除学生记录,4.修改学生记录,5.返回上级菜单)) 信息检索(1.按班级查找2.返回上级菜单)信息统计(1.成绩统计2.返回上级菜单)说明1。用口令(密码)形式严整管理员身份(可输入三次),合法者进入,否则程序结束。2.有关功能说明1)建立学生成绩表(模块A)建立新的学生成绩文件输入若干学生记录,包括姓名,学号,班级,课程编号,成绩。2)添加学生记录(模块B)在已存在的学生成绩文件中添加新记录。3)删除学生记录(模块C)在学生成绩文件中删除有三门课程不及格的学生记录。删除前,逐条显示符合删除条件的学生姓名,成绩,确认后再删除。4)修改学生信息(模块D)输入学生学号,在学生成绩文件中找出该学生记录。在屏幕上逐条显示该学生的各条记录。每显示一条,询问是否修改,如果”Y“输入修改后的数据,将文件原记录删除,保存新的记录。5)按姓名和班级查找(模块E)输入姓名显示相应信息。6)信息统计(模块F)同时按照班级和课程统计每门课程,每个班级的平均成绩,最高分,最低分。在屏幕上先依次显示各门课程,对应的各个班级的统计数据。7)退出信息管理系统,返回操作系统

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值