(C语言)学生信息管理系统

程序简单易操作,有相应的提示信息
实现了输入,查找,修改,删除和学生全部信息的输出

 - 正在增加添加学生信息的自定义函数,有些问题还没有解决,希望大家给出宝贵意见。
第一次发博客,希望大家多多指教如果想看我未实现功能的代码可私聊我,然后发给你,看看问题出在哪里,共同探讨,共同进步。

*我们的C语言作业是ATM机和学生信息管理系统二选一*

**建议了解好各种语句、函数的作用。** __在设计程序的时候先做一个蓝图,比如要什么功能,怎么扩展,如何才能达到要求。__


下面是我的代码:

 

#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<string.h>
#define N 3		//定义N为学生人数,直接在这修改学生的人数即可 ,然后再设置一个n,把N的值赋给n让代码更加灵活 
	struct Student 
{
    char studentID[20];
   char studentName[20];
   int scoreChinese;
   int scoreMath;
   int scoreEnglish;
}stu[N];	//定义一个结构体名为stu,里面包含学生学号、姓名、语文、数学和英语成绩 

	int i;
	int n=N;	//把N赋给n,起到可以修改n的值的作用 
	void data_input_save();
	void print_message();
	void swi(int x);
	void data_search();
	void data_correction(); 
	void data_delete();	 
	void data_display();	//定义一个全局变量i,不需要在局部再次定义。对上面的几个自定义函数的进行声明。 
	int main()
	{
	int num,num1,inspect;
	print_message();
	scanf("%d",&num);
	swi(num);		//选择你要进行的操作 

	while(num!=0){
	printf("请问你还需要操作什么吗?\n");
	print_message();
	scanf("%d",&inspect);
	num=inspect;
	system("cls");	//将你前面输出的信息进行清屏 
	swi(num);
	} 		//当你没有选择0退出操作系统的时候,依然提示你需要进行什么操作,直到你退出为止 

	return 0 ;
}


	void print_message(){
	printf("*****学生成绩管理系统*****\n");
	printf("                  \n");
	printf("1.学生成绩输入\n");
	printf("2.学生成绩信息查询\n");
	printf("3.学生成绩信息更改\n");
	printf("4.学生成绩信息删除:\n");
	printf("5.将全部学生的信息输出\n");
	printf("0.退出\n");
	printf("                  \n");
	printf("******************\n");	
	printf("请选择<0~5>");
	}				//提示信息 
	
	void data_input_save(){
	printf("请输入学生的成绩:");
	for(i=0;i<n;i++)
	scanf("%s %s %d %d %d",stu[i].studentID,stu[i].studentName,&stu[i].scoreChinese,&stu[i].scoreMath,&stu[i].scoreEnglish);	//进行学生成绩的输入,并存到结构体stu[i]中,此时数据在缓冲区 
	printf("成功输入学生信息!\n");		//提示输入信息完成 
	FILE *fp;		//这是一个文件指针,在#include<stdio.h>已经定于了的,直接拿来用即可 
	if((fp=fopen("C:\\stu.txt","wb+"))==NULL){	//用读写的方式打开一个二进制文件,这里采用了wb+(如果指定文件不存在将会建立新的文件) 
	printf("cannot open file \n");
	exit(0);
	}
	for(i=0;i<n;i++)
	if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1)	//利用循环把你上面输入的数据一一写到文件中 
	printf("file write error\n");
	fclose(fp);
		}
		
	void data_search(){
	FILE *fp;
	if((fp=fopen("C:\\stu.txt","rb+"))==NULL){	//采用读写的方式打开指定文件 
	printf("cannot open file \n");
	exit(0);
	}
	char in[20];
	int k;
	int flag=0;		//这里定义的flag是检查你是否输入学号错误 
	printf("请输入要查询学生成绩的学号:\n");
	scanf("%s",in);
	for(i=0;i<N;i++)
	fread(&stu[i],sizeof(struct Student),1,fp);		//将文件中的数据一一读到结构体数组中 
	for(i=0;i<N;i++)
	if(strcmp(in,stu[i].studentID)==0) {	//把输入的学号一一与数组里的学号进行对比,找到则输出学生的对应信息,若找不到则输出学号不存在! 
	k=i;
	flag=1;
	printf("学号:%-6s 姓名:%-6s 语文成绩:%-6d 数学成绩:%-6d 英语成绩:%-6d\n",stu[k].studentID,stu[k].studentName,stu[k].scoreChinese,stu[k].scoreMath,stu[k].scoreEnglish);
}	
	if(flag==0)
	printf("学号不存在!\n");
	fclose(fp);
}

	void data_correction(){
	printf("请输入要修改学生成绩所对应的学号:\n");
	FILE *fp;
	if((fp=fopen("C:\\stu.txt","rb+"))==NULL){
	printf("cannot open file \n");
	exit(0);
	}
	char in[20];
	int k,flag=0; 
	char studentID[20],studentName[20];
	int scoreChinese,scoreMath,scoreEnglish;
	scanf("%s",in);
	for(i=0;i<n;i++)
	fread(&stu[i],sizeof(struct Student),1,fp);
	for(i=0;i<n;i++)
	if(strcmp(in,stu[i].studentID)==0){		//把输入的学号一一与数组里的学号进行对比,找到则要修改学生的对应信息,若找不到则输出学号不存在!
	k=i;
	flag=1; }
	if(flag==1){
	printf("请输入所要修改的学生的对应信息:\n"); 
	scanf("%s%s%d%d%d",studentID,studentName,&scoreChinese,&scoreMath,&scoreEnglish);	//输入修改后的学生信息 
	strcpy(stu[k].studentID,studentID);		
	strcpy(stu[k].studentName,studentName);
	
	stu[k].scoreChinese=scoreChinese;
	stu[k].scoreMath=scoreMath;

	stu[k].scoreEnglish=scoreEnglish;		//把输入的信息就行覆盖,此时原有信息已经更改为现输入信息 
		if((fp=fopen("C:\\stu.txt","rb+"))==NULL){
	printf("cannot open file \n");
	exit(0);
	}
	for(i=0;i<n;i++)
	fwrite(&stu[i],sizeof(struct Student),1,fp);	//把输入的信息一一写回文件中 
	printf("信息修改成功!\n");
	}
	if(flag==0)
	printf("学号不存在!\n");
	fclose(fp);
	}
	
	void data_delete(){
	FILE *fp;
	if((fp=fopen("C:\\stu.txt","rb+"))==NULL){
	printf("cannot open file \n");
	exit(0);
		}
	char in[20];
	printf("请输入你要删除学生成绩信息的学号\n");	
	int k,flag=0,n=N;
	scanf("%s",in);
	for(i=0;i<n;i++)
	fread(&stu[i],sizeof(struct Student),1,fp);
	for(i=0;i<n;i++)
	if(strcmp(in,stu[i].studentID)==0){		//把输入的学号一一与数组里的学号进行对比,找到要删除学生,若找不到则输出学号不存在!
	char in[20];
	k=i;
	flag=1; 
	for(k=i;k<n-1;k++)
	stu[k]=stu[k+1]; 	//找到该学生的对应数组的元素几,然后把后面的数组元素信息覆盖的前一个,此时是n个学生信息在里面,倒数第一和第二是一样的信息,前往下看,会解决这个问题 
	if((fp=fopen("C:\\stu.txt","rb+"))==NULL){
	printf("cannot open file \n");
	exit(0);
		}
	for(i=0;i<n-1;i++)
	fwrite(&stu[i],sizeof(struct Student),1,fp);	//把上面的n个学生信息写到文件中 
	fflush(stdin);
			for(i=0;i<n-1;i++)
	fread(&stu[i],sizeof(struct Student),1,fp);		//这里采用for循环只把n-1个学生的信息重新覆盖写回文件中,达到删除学生信息的要求 
	for(i=0;i<n-1;i++)
	fwrite(&stu[i],sizeof(struct Student),1,fp);
}
			if(flag==1){
			printf("删除成功!\n");
	} 
	if(flag==0)
	printf("学号不存在!\n");
	fclose(fp);
}
	void data_display(){
	FILE *fp;
	if((fp=fopen("C:\\stu.txt","rb+"))==NULL){
	printf("cannot open file \n");
	exit(0);
	}
	for(i=0;i<n;i++){
	fread(&stu[i],sizeof(struct Student),1,fp);		//从文件中读取所以学生的信息到缓冲区,然后把学生信息全部输出 
	printf("学号:%-6s 姓名:%-6s 语文成绩:%-6d 数学成绩:%-6d 英语成绩:%-6d\n",stu[i].studentID,stu[i].studentName,stu[i].scoreChinese,stu[i].scoreMath,stu[i].scoreEnglish);
	}
	fclose(fp); //记得用完文件后记得关闭,避免造成缓冲区堵塞 
	}
	
	void swi(int x){
	switch(x){
	case 0: printf("你已退出学生信息管理系统!欢迎再次使用!\n");break;
	case 1: data_input_save();break;
	case 2: data_search();break; 
	case 3: data_correction();break;
	case 4: data_delete();break; 
	case 5: data_display();break;
	default:break;
	}	
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值