【C/C++】文件操作实例——学生信息管理

 对C语言中文件操作函数的使用实例,曾经的一道作业题。

现在用Java比较多,回过头才发现曾经学习的C已经忘却了不少┭┮﹏┭┮

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100

typedef struct{
    long int sto;
    char stun[20];
    float goal[3];
    float aver;
    float sum;
    } STU;

void manu(){
	printf("***************************************************************************\n");
	printf("***                       学生信息管理菜单               		***\n");
	printf("***            1、录入学生信息                 				***\n");
	printf("***            2、查询学生信息                 				***\n");
	printf("***            3、添加学生信息                 				***\n");
	printf("***            4、学生信息排序                 				***\n");
	printf("***            5、插入学生信息                 				***\n");
	printf("***            6、修改学生信息                 				***\n");
	printf("***            7、删除学生信息                 				***\n"); 
	printf("***            0、输入0退出程序                 			***\n"); 
	printf("***************************************************************************\n");
} 

void insert(FILE *fp,STU s[]){
	//录入数据 
	int num=0;
	printf("请依次输入学号、用户名、语数英三科成绩:\n"); 
    if((fp=fopen("timu.dat","w"))==NULL){
        printf("cannot open the file!");
    }
	scanf("%ld%s%f%f%f",&s[num].sto,s[num].stun,&s[num].goal[0],&s[num].goal[1],&s[num].goal[2]);
	fprintf(fp,"%ld  %s  %f  %f  %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2]);	
    fclose(fp);
}

void secret(FILE *fp,STU s[]){
	int f;
	printf("请选择查询方式:\n");
	printf("1、按学号顺序查询\n");
	printf("2、查询所有学生信息\n");
	scanf("%d",&f);
	switch(f){
		case 1:{
			long int stoo;
			printf("请输入学号:");
			scanf("%ld",&stoo);
			int num=0;
			if((fp=fopen("timu.dat","r"))==NULL){
		        printf("cannot open the file!");
		    }
		    for(num;num<rows(fp);num++){
		    	fscanf(fp,"%ld  %s  %f  %f  %f\n",&s[num].sto,s[num].stun,&s[num].goal[0],&s[num].goal[1],&s[num].goal[2]);
				s[num].aver=(s[num].goal[0]+s[num].goal[1]+s[num].goal[2])/3;
				s[num].sum=s[num].goal[0]+s[num].goal[1]+s[num].goal[2];	
		    	if(s[num].sto==stoo){
		    		printf("%ld  %s  %7.2f  %7.2f  %7.2f  %7.2f  %7.2f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2],s[num].aver,s[num].sum);
		    	}
		    }
		    fclose(fp);
			break;
		}
		case 2:{
			int num=0;
			if((fp=fopen("timu.dat","r"))==NULL){
		        printf("cannot open the file!");
		    }
		    for(num;num<rows(fp);num++){
		    	fscanf(fp,"%ld  %s  %f  %f  %f\n",&s[num].sto,s[num].stun,&s[num].goal[0],&s[num].goal[1],&s[num].goal[2]);
				s[num].aver=(s[num].goal[0]+s[num].goal[1]+s[num].goal[2])/3;
				s[num].sum=s[num].goal[0]+s[num].goal[1]+s[num].goal[2];	
		    		printf("%ld  %s  %7.2f  %7.2f  %7.2f  %7.2f  %7.2f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2],s[num].aver,s[num].sum);
		    }
		    fclose(fp);
			break;
		}
		default: printf("输入有错\n");
	}
}

int add(FILE *fp,STU s[]){
	//添加信息 
	long int stoo;
	int num=0;
	char stunn[20];
	float goall[3];
    if((fp=fopen("timu.dat","a"))==NULL){
        printf("cannot open the file!");
        return 0; 
    }
	scanf("%ld%s%f%f%f",&stoo,stunn,&goall[0],&goall[1],&goall[2]);
    for(num;num<rows(fp);num++){
    	fscanf(fp,"%ld  %s  %f  %f  %f\n",&s[num].sto,s[num].stun,&s[num].goal[0],&s[num].goal[1],&s[num].goal[2]);	
    	if(stoo==s[num].sto){
    		printf("学号重复,不能重新录入!\n");
    		return 0;
    	}
    }
	fprintf(fp,"%ld  %s  %f  %f  %f\n",stoo,stunn,goall[0],goall[1],goall[2]);
	printf("添加成功!\n");		
    fclose(fp);
}

int sort(FILE *fp,STU s[]){
	int num=0;
	if((fp=fopen("timu.dat","r"))==NULL){
        printf("cannot open the file!");
        return 0;    
    }
	for(num;num<rows(fp);num++){
    	fscanf(fp,"%ld  %s  %f  %f  %f\n",&s[num].sto,s[num].stun,&s[num].goal[0],&s[num].goal[1],&s[num].goal[2]);
		s[num].aver=(s[num].goal[0]+s[num].goal[1]+s[num].goal[2])/3;
		s[num].sum=s[num].goal[0]+s[num].goal[1]+s[num].goal[2];
	//	printf("%f",s[num].aver);
	//	printf("%ld  %s  %f  %f  %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2]);
    } 
    STU tmp;
    int t,y;
      	
	int o;
	printf("请选择排序方式:\n");
	printf("1、按学号顺序排列;\n");
	printf("2、按语文成绩排列;\n");
	printf("3、按数学成绩排列;\n");
	printf("4、按英语成绩排列;\n"); 
	printf("5、按平均成绩排列;\n");
	printf("6、按总成绩排列;\n");
	scanf("%d",&o);
	switch(o){
		case 1:{
			for(t=0;t<rows(fp)-1;t++){
		    	for(y=0;y<rows(fp)-t-1;y++){
		    		if(s[y+1].sto<s[y].sto){
		    			tmp=s[y];
		    			s[y]=s[y+1];
		    			s[y+1]=tmp;
		    		}
		    	}
		    }
		    for(num=0;num<rows(fp);num++){	
				printf("%ld  %s  %f  %f  %f  %f  %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2],s[num].aver,s[num].sum);
		    }			
			break;
		}
		case 2:{
			for(t=0;t<rows(fp)-1;t++){
		    	for(y=0;y<rows(fp)-t-1;y++){
		    		if(s[y+1].goal[0]<s[y].goal[0]){
		    			tmp=s[y];
		    			s[y]=s[y+1];
		    			s[y+1]=tmp;
		    		}
		    	}
		    }
		    for(num=0;num<rows(fp);num++){	
				printf("%ld  %s  %f  %f  %f  %f  %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2],s[num].aver,s[num].sum);
		    }						
			break;
		}
		case 3:{
			for(t=0;t<rows(fp)-1;t++){
		    	for(y=0;y<rows(fp)-t-1;y++){
		    		if(s[y+1].goal[1]<s[y].goal[1]){
		    			tmp=s[y];
		    			s[y]=s[y+1];
		    			s[y+1]=tmp;
		    		}
		    	}
		    }
		    for(num=0;num<rows(fp);num++){	
				printf("%ld  %s  %f  %f  %f  %f  %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2],s[num].aver,s[num].sum);
		    }						
			break;
		}
		case 4:{
			for(t=0;t<rows(fp)-1;t++){
		    	for(y=0;y<rows(fp)-t-1;y++){
		    		if(s[y+1].goal[2]<s[y].goal[2]){
		    			tmp=s[y];
		    			s[y]=s[y+1];
		    			s[y+1]=tmp;
		    		}
		    	}
		    }
		    for(num=0;num<rows(fp);num++){	
				printf("%ld  %s  %f  %f  %f  %f  %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2],s[num].aver,s[num].sum);
		    }						
			break;
		}
		case 5:{
			for(t=0;t<rows(fp)-1;t++){
		    	for(y=0;y<rows(fp)-t-1;y++){
		    		if(s[y+1].aver<s[y].aver){
		    			tmp=s[y];
		    			s[y]=s[y+1];
		    			s[y+1]=tmp;
		    		}
		    	}
		    }
		    for(num=0;num<rows(fp);num++){	
				printf("%ld  %s  %f  %f  %f  %f  %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2],s[num].aver,s[num].sum);
		    }						
			break;
		}
		case 6:{
			for(t=0;t<rows(fp)-1;t++){
		    	for(y=0;y<rows(fp)-t-1;y++){
		    		if(s[y+1].sum<s[y].sum){
		    			tmp=s[y];
		    			s[y]=s[y+1];
		    			s[y+1]=tmp;
		    		}
		    	}
		    }
		    for(num=0;num<rows(fp);num++){	
				printf("%ld  %s  %f  %f  %f  %f  %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2],s[num].aver,s[num].sum);
		    }						
			break;
		}
	} 
    //重新写入
    fclose(fp);
    return 0;
}

int charu(FILE *fp,STU s[]){
	long int cha;
	int num,t,tmp; 
	printf("请输入想要插入位置,在学号为多少的学生前插入:\n");
	scanf("%d",&cha);
	if((fp=fopen("timu.dat","r"))==NULL){
        printf("cannot open the file!");
    }
    for(num=0;num<rows(fp);num++){
    	fscanf(fp,"%ld  %s  %f  %f  %f\n",&s[num].sto,s[num].stun,&s[num].goal[0],&s[num].goal[1],&s[num].goal[2]);	
    	printf("!!!!%ld  %s  %f  %f  %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2]);
    }
    fclose(fp);
    int just;
    for(num=0;num<rows(fp);num++){
    	if(s[num].sto==cha){
    		for(t=rows(fp);t>num;t--){
    			s[t]=s[t-1];
    			printf("@@@@@%ld  %s  %f  %f  %f\n",s[t].sto,s[t].stun,s[t].goal[0],s[t].goal[1],s[t].goal[2]);
    		}
    		printf("请输入插入的学生信息:\n");
    		scanf("%ld %s %f %f %f",&s[t].sto,s[t].stun,&s[t].goal[0],&s[t].goal[1],&s[t].goal[2]);
    		
//    		for(num=0;num<rows(fp)+1;num++){
//		    	printf("%ld  %s  %f  %f  %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2]);
//		    }
		    tmp=rows(fp);
		    //printf("%d\n",tmp);
    		if((fp=fopen("timu.dat","w"))==NULL){
		        printf("cannot open the file!");
		    } 
		    for(num=0;num<tmp+1;num++){
		    //	printf("%ld  %s  %f  %f  %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2]);
		    	fprintf(fp,"%ld  %s  %f  %f  %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2]);
		    }
		    fclose(fp);
    		printf("插入成功!\n");
    		break;
    	}
    }	
    return 0;
}

int delet(FILE *fp,STU s[]){
	long int cha;
	int num,t,tmp; 
	printf("请输入想要删除的信息学号:\n");
	scanf("%d",&cha);
	if((fp=fopen("timu.dat","r"))==NULL){
        printf("cannot open the file!");
    }

    for(num=0;num<rows(fp);num++){
    	fscanf(fp,"%ld  %s  %f  %f  %f\n",&s[num].sto,s[num].stun,&s[num].goal[0],&s[num].goal[1],&s[num].goal[2]);	
    }
    fclose(fp);
    int just;
    for(num=0;num<rows(fp);num++){
    	if(s[num].sto==cha){
    		for(t=num;t<rows(fp);t++){
    			s[t]=s[t+1];
    		}
    		break;
    	}
    }
    tmp=rows(fp);
	if((fp=fopen("timu.dat","w"))==NULL){
        printf("cannot open the file!");
    } 
    for(num=0;num<tmp-1;num++){
    	fprintf(fp,"%ld  %s  %f  %f  %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2]);
    }
	printf("删除成功!\n");
	fclose(fp);
	return 0;
}

int rows(FILE *fp){
    char buf[1000];
    int lineCnt = 0;
    if((fp=fopen("timu.dat","r"))==NULL){
        printf("cannot open the file!");
        return 0;    
    }
    while (fgets(buf, 1000, fp)) // fgets循环读取,直到文件最后,才会返回NULL
        lineCnt++; // 累计行数
    fclose(fp);
    //printf("file line count = %d\n", lineCnt);
    return lineCnt;
}

int xiugai(FILE *fp,STU s[]){
	int q,num,fs,tmp;
	char sr[20];
	long int xiu;
	FILE *fpq;
	
	printf("请输入想要修改的学生学号:\n");
	scanf("%ld",&xiu);
	printf("1、修改姓名;\n");
	printf("2、修改语文成绩;\n");
	printf("3、修改数学成绩;\n");
	printf("4、修改英语成绩;\n");
	scanf("%d",&q);
	switch(q){
		case 1:{
			printf("输入新姓名:\n");
			scanf("%s",sr);
			if((fp=fopen("timu.dat","r"))==NULL){
		        printf("cannot open the file!");
		        return 0;    
		    }
			for(num=0;num<rows(fp);num++){
		    	fscanf(fp,"%ld %s %f %f %f\n",&s[num].sto,s[num].stun,&s[num].goal[0],&s[num].goal[1],&s[num].goal[2]);
		    	if(s[num].sto==xiu){
		    		strcpy(s[num].stun,sr);
		    	}
		    }
		    fclose(fp);
		    tmp=rows(fp);
		    if((fp=fopen("timu.dat","w"))==NULL){
		        printf("cannot open the file!");
		        return 0;    
		    }
		    for(num=0;num<tmp;num++){
		    	fprintf(fp,"%ld %s %f %f %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2]);
		    }
		    fclose(fp);	
			break;
		}
		case 2:{
			printf("输入新语文成绩:\n");
			scanf("%d",&fs);
			if((fp=fopen("timu.dat","r"))==NULL){
		        printf("cannot open the file!");
		        return 0;    
		    }
			for(num=0;num<rows(fp);num++){
		    	fscanf(fp,"%ld %s %f %f %f\n",&s[num].sto,s[num].stun,&s[num].goal[0],&s[num].goal[1],&s[num].goal[2]);
		    	if(s[num].sto==xiu){
		    		s[num].goal[0]=fs;
		    	}
		    }
		    fclose(fp);
		    tmp=rows(fp);
		    if((fp=fopen("timu.dat","w"))==NULL){
		        printf("cannot open the file!");
		        return 0;    
		    }
		    for(num=0;num<tmp;num++){
		    	fprintf(fp,"%ld %s %f %f %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2]);
		    }
		    fclose(fp);	
			break;
		}
		case 3:{
			printf("输入新数学成绩:\n");
			scanf("%d",&fs);
			if((fp=fopen("timu.dat","r"))==NULL){
		        printf("cannot open the file!");
		        return 0;    
		    }
			for(num=0;num<rows(fp);num++){
		    	fscanf(fp,"%ld %s %f %f %f\n",&s[num].sto,s[num].stun,&s[num].goal[0],&s[num].goal[1],&s[num].goal[2]);
		    	if(s[num].sto==xiu){
		    		s[num].goal[1]=fs;
		    	}
		    }
		    fclose(fp);
		    tmp=rows(fp);
		    if((fp=fopen("timu.dat","w"))==NULL){
		        printf("cannot open the file!");
		        return 0;    
		    }
		    for(num=0;num<tmp;num++){
		    	fprintf(fp,"%ld %s %f %f %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2]);
		    }
		    fclose(fp);	
			break;
		}
		case 4:{
			printf("输入新英语成绩:\n");
			scanf("%d",&fs);
			if((fp=fopen("timu.dat","r"))==NULL){
		        printf("cannot open the file!");
		        return 0;    
		    }
			for(num=0;num<rows(fp);num++){
		    	fscanf(fp,"%ld %s %f %f %f\n",&s[num].sto,s[num].stun,&s[num].goal[0],&s[num].goal[1],&s[num].goal[2]);
		    	if(s[num].sto==xiu){
		    		s[num].goal[2]=fs;
		    	}
		    }
		    fclose(fp);
		    if((fp=fopen("timu.dat","w"))==NULL){
		        printf("cannot open the file!");
		        return 0;    
		    }
		    for(num=0;num<tmp;num++){
		    	fprintf(fp,"%ld %s %f %f %f\n",s[num].sto,s[num].stun,s[num].goal[0],s[num].goal[1],s[num].goal[2]);
		    }
			fclose(fp);		
			break;
		}				
	}
}

int main(){
    STU s[N];
    FILE *fp;
    int i;
    while(1){
    	manu();
    	printf("请输入以上操作序号:");
    	scanf("%d",&i);
    	switch(i){
    		case 1:
    			insert(fp,s);
    			break;
    		case 2:
    			secret(fp,s);
    			break;	
    		case 3:
    			add(fp,s);
    			break;	
    		case 4:
    			sort(fp,s);
    			break;	
    		case 5:
    			charu(fp,s);
    			break;	
    		case 6:
    			xiugai(fp,s);
    			break;	
			case 7:
				delet(fp,s);
    		case 0:
    			exit(0);
    	}
    }
    return 0;  
}
发布了31 篇原创文章 · 获赞 6 · 访问量 4179

猜你喜欢

转载自blog.csdn.net/zhenliangit0918/article/details/104290943