简单的学生管理(C语言)

#include<stdio.h>
#include<stdlib.h>
#include<string.h> 
struct Student_type{
	char name[13];
	char stuNo[12];
	float score[3];
	float sum;
}stu[20];
//向文件stuInfo.txt中输入信息保存学生信息 (追加) 
void save1(int t){
	FILE *fp;
	int i;
	fp = fopen("stuInfo.txt","a");                    //D:\\C语言\\学生信息\\stuInfo.txt
	if(fp==NULL){                    //先判断是否存在这个文件,存在再进行下一步操作 
		printf("Can't open file");
		exit(0);
	}
	printf("请输入学生信息(姓名,学号,语文成绩,数学成绩,英语成绩。每组数据之间以空格分开,每位学生换行输入):\n");
	for(i=0;i<t;i++){                                            //获取追加的学生信息 
		scanf("%s %s %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
		stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
	}
	
	for(i=0;i<t;i++){                         //把学生信息写入文件 
	fprintf(fp,"%s %s %f %f %f %f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
		
		}
			fclose(fp);
	}
//向文件stuInfo.txt中输入信息保存学生信息 (重写)	
/*
C语言中,文件打开方式有多种。其中常用三种, 
1. 'r'方式打开的文件只可以读,只能向计算机输入数据,且这个文件必须是存在的。
'r+'方式打开的文件可以读也可以写。 
2. 'w'方式打开的方式只可以写,只能用于向打开的文件写数据.
如果这个文件不存在,计算机会建立一个以指定名字命名的文件。
如果这个文件存在,先把这个文件删除在重新建立一个以指定名字命名的文件。
'w+'方式打开的文件可读可写。 
3. 'a'方式打开的只可以写,只能用于向打开的文件写数据.
如果文件不存在,出错。
如果文件存在,光标自动移动到文件末尾。 
4.用'r+'方式打开的文件可以读也可以写。 文件一存在,方便读写。
 用'w+'方式打开则是县新建一个文件,先向文件写入数据,再从文件中读取数据。 
'a+'方式打开的文件可读可写。原来的文件不会被删除,文件读写文职标记移动到文件末尾,可以添加也可以读。 

*/ 
void save2(int t){
	FILE *fp;
	int i;
	fp = fopen("stuInfo.txt","w");
		printf("请输入学生信息(姓名,学号,成绩,成绩,成绩。每组数据之间以空格分开,每位学生换行输入):\n");
	for(i=0;i<t;i++){
		scanf("%s %s %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
		stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
	}
	if(fp==NULL){
		printf("Can't open file");
		exit(0);
	}
	for(i=0;i<t;i++){
	fprintf(fp,"%s %s %f %f %f %f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
		
		}
			fclose(fp);
	}
//从文件stuInfo .txt中获取信息并打印 
void show(int count){
	FILE *fp;
	int i;
    fp = fopen("stuInfo.txt","r");
	if(fp==NULL){
		printf("Can't open file");
		system("pause");
		exit(0);
	}
	printf( "            姓名     学号       语文      数学       英语      总分\n"); 
	for(i=0;i<count;i++){
		fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
		printf("%15s %12s %10f %10f %10f %10f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
	}
	fclose(fp);
}

//对文件里的数据进行排序兵重写 
void order(int count){
	struct Student_type temp;
	FILE *fp;
	int i,j,max;
	fp = fopen("stuInfo.txt","w+");
	if(fp==NULL){
		printf("Can't open file");
		exit(0);
	}
	for(i=0;i<count;i++){
		fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
	}
	for(i=0;i<count;i++){
		max = i;
		for(j=i+1;j<count;j++){
		if(stu[j].sum>stu[max].sum){
			max = j;
			}
			}
			temp = stu[i];
		    stu[i]=stu[max];
		    stu[max]= temp;
		
		printf("============%f\n",stu[i].sum);
	}
/*	for(i=0;i<count;i++){
	printf("%15s %12s %10f %10f %10f %10f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
	}*/
	for(i=0;i<count;i++){
	fprintf(fp,"%s %s %f %f %f %f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
	}
}
//主菜单 
void menu(){
printf("========菜单========\n");	
printf("1.添加学生信息\n"); 
printf("2.查找学生信息\n"); 
printf("3.展示所有学生信息\n");
printf("4.排序\n");
printf("5.修改学生信息\n");
printf("0.退出\n");
}
//副菜单 
void menu2(){
printf("1.按学号查找\n"); 
printf("2.按姓名查找\n"); 
} 
//副菜单 
void menu3(){
printf("1.重写学生信息\n"); 
printf("2.追加学生信息\n"); 
}
//按学号查找 
void check1(int count){
	FILE *fp;
	int i,j,k=-1;
	char vivo[12];
	fp = fopen("stuInfo.txt","r");
	printf("请输入学号:");
	scanf("%s",vivo);
	if(fp==NULL){
		printf("Can't open file");
		system("pause");
		exit(0);
	}
	for(i=0;i<count;i++){
		fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
		if(strcmp(stu[i].stuNo,vivo)==0){
			k=i;
		}
		if(k>=0){
		printf( "           姓名        学号       语文      数学       英语      总分\n"); 
		printf("%15s %12s %10f %10f %10f %10f\n",stu[k].name,stu[k].stuNo,stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].sum);	
		break;
		}
		
	}
	if(k<0){
		printf("对不起,你要查找的学生不存在!\n");
	}
	
	fclose(fp);	
	
} 
//按姓名查找 
void check2(int count){
	FILE *fp;
	int i,j,k=-1;
	char oppo[15];
	fp = fopen("stuInfo.txt","r");
	printf("请输入姓名:");
	scanf("%s",oppo);
	if(fp==NULL){
		printf("Can't open file");
		system("pause");
		exit(0);
	}
	for(i=0;i<count;i++){
		fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
		if(strcmp(stu[i].name,oppo)==0){
			k=i;
		}
		if(k>=0){
		printf( "             姓名      学号       语文      数学       英语      总分\n"); 
		printf("%15s %12s %10f %10f %10f %10f\n",stu[k].name,stu[k].stuNo,stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].sum);	
		break; 
		}
		
	}
if(k<0){
		printf("对不起,你要查找的学生不存在!\n");
	}
	fclose(fp);	
	
} 
//修改学生信息 
void update(int count){
		FILE *fp;
	int i,j,k;
	char oppo[12];
	fp = fopen("stuInfo.txt","w+");
	printf("请输入学号或者姓名:");
	scanf("%s",oppo);
	if(fp==NULL){
		printf("Can't open file");
	}
	for(i=0;i<2;i++){
		fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
		k= -1;
		if(strcmp(stu[i].name,oppo)==0||strcmp(stu[i].stuNo,oppo)==0){
				k=i;
				break;
		}
		}
       if(k<0) {
       	printf("对不起,你要查找的学生不存在!\n");
	   } else{
	   		for(i=0;i<count;i++){
		fscanf(fp,"%s %s %f %f %f %f",stu[i].name,stu[i].stuNo,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].sum);
	                            }
	   	printf("请输入学生信息(姓名,学号,成绩,成绩,成绩。每组数据之间以空格分开):\n");
		scanf("%s %s %f %f %f",stu[k].name,stu[k].stuNo,&stu[k].score[0],&stu[k].score[1],&stu[k].score[2]);
		stu[k].sum=stu[k].score[0]+stu[k].score[1]+stu[k].score[2];
	   		for(i=0;i<count;i++){
	fprintf(fp,"%s %s %f %f %f %f\n",stu[i].name,stu[i].stuNo,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
	       }
	   	
	   }
	fclose(fp);	
}
//主函数 
int main()
{
	int i,j,k,count;
	printf("请输入已有学生的人数:(文件中有2个学生的信息):");
	scanf("%d",&count); 
	while(1){
		menu();
		printf("请选择:");
		scanf("%d",&j);
		switch(j){
			case 1:
					menu3();
			scanf("%d",&j);
			switch(j){
				case 1:
				printf("请输入添加学生信息的人数:");
				scanf("%d",&k);
				 save2(k);
				count = 0;
				count = count +k; 
				break;
				case 2: 
				printf("请输入添加学生信息的人数:");
				scanf("%d",&k);
		    	save1(k);
				count = count +k; 
				break;
				default : printf("你输入的选项不存在");
			    break;	
			} 
			 break;	
			case 2:
				menu2();
			scanf("%d",&j);
			switch(j){
				case 1: check1(count);
				break;
				case 2: check2(count);
				break;
				default : printf("你输入的选项不存在");
			    break;	
			} 
			break;
			case 3: show(count);
			break;
			case 4 : 
			order(count);
			break;
			case 5: update(count);
			break;
			case 0: exit(0);
			default : printf("你输入的选项不存在");
			break;	
			
		} 
	} 
	return 0;
 } 
 /*
 //向文件stuInfo.txt中输入信息保存学生信息 
void save(int t){
	FILE *fp;
	int i;
	fp = fopen("D:\stuInfo.txt","ab+");
	printf("Please input data of student:\n");
	for(i=0;i<t;i++){
		scanf("%s%d%d%f%f%f",stu[i].name,stu[i].stuNo,&stu[i].age,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
	}
	if(fp==NULL){
		printf("Can't open file");
		exit(0);
	}
	for(i=0;i<t;i++){
		if(fwrite(&stu[i],sizeof(struct Student_type),1,fp)!=1){
			printf("File write error!");
			fclose(fp);
		}
	}
}
//从文件stuInfo .txt中获取信息并打印 
void show(){
	FILE *fp;
	int i;
	fp = fopen("D:\stuInfo.txt","ab+");
	if(fp==NULL){
		printf("Can't open file");
		exit(0);
	}
	for(i=0;i<10;i++){
		fread(&stu[i],sizeof(struct Student_type),1,fp);
		printf("%-13s%12d%4d%f\n",stu[i].name,stu[i].stuNo,stu[i].age,stu[i].score[0],stu[i].score[1],stu[i].score[2]); 
	}
	
	fclose(fp);
}*/

  

转载于:https://www.cnblogs.com/zzu-general/p/7491345.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值