学生成绩管理系统(c语言)

学生成绩管理系统(C语言)

#include <stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct 
{
	char num[20];
	char name[20];
	char grade[20];
	char major[20];
	int score[2];
	int score1,score2,score3,sum,pj;

}STU;

STU stu[100];
int i=0;

int DengLu(char s1[])//登录
{
	printf("输入密码: ");
	char s2[10];
    int k; 
	int j = 3;
	while (j != 0)
	{
		gets(s2);
		if (strcmp(s2, s1) == 0)break;
		j--;
		printf("密码错误还剩%d次机会,请重新输入: \n",j);
	}
	if(strcmp(s2,s1)==0)
	{
		printf("登录成功!\n");
		return 1;
	}
	else
	{
		printf("登陆失败!\n");
		return 0;
	}
}

void add()//添加信息
{
	printf("请依次输入学生学号,姓名,班级,专业,成绩1,成绩2,成绩3\n");
	scanf("%s %s %s %s %d %d %d",&stu[i].num, &stu[i].name,&stu[i].grade,&stu[i].major,&stu[i].score1,&stu[i].score2,&stu[i].score3);
    stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
	stu[i].pj=(stu[i].sum)/3;
	i++;
	printf("共有%d个学生信息\n",i);
}

void display()//显示当前信息 
{
	int k=0;
	printf("学号   姓名     班级     专业   成绩1   成绩2   成绩3   总成绩   平均成绩\n");
	while(k<i)
	{
		printf("%4s %6s %8s %8s %7d %7d %7d %7d %9d\n",stu[k].num, stu[k].name,stu[k].grade,stu[k].major,stu[k].score1,stu[k].score2,stu[k].score3,stu[k].sum,stu[k].pj);
	    k++;
	}
	printf("\n");
}

void Delete()//删除信息 
{
	int c;
	char name1[20],num1[20];	
	printf("***********删除功能***********\n");
	printf("1.根据学号删除 2.根据姓名删除\n");
	scanf("%d",&c);
	if(c<=0 && c>2)printf("error");
	else{
		int q=0;
		switch (c)
			{
			case 1:
			   printf("输入学生学号:\n");
			   scanf("%s",&num1);
               while(q<i)
			   {
			      if(strcmp(num1,stu[q].num)==0)break;
				   q++;
			   }
			   if(q>i)printf("error\n");
				break;
			case 2:
				printf("输入学生姓名:\n");
			   scanf("%s",&name1);
               while(q<i)
			   {
				   if(strcmp(name1,stu[q].name)==0)break;
			       q++;
			   }
			   if(q>i)printf("error\n");
				break;
		}		 
	for (; q < i; q++)
	{
		stu[q] = stu[q + 1];
	}
	i--;
	}
	printf("删除成功!\n");
}   

void Correct()//修改信息 
{
	int q=0;
	int c;
	char name1[20],num1[20];
	printf("*****************修改功能****************\n");
	printf("1.根据学号修改信息 2.根据姓名修改信息\n");
	scanf("%d",&c);
	if(c<=0 && c>2)printf("error");
	else{
		switch (c)
			{
			case 1:
			   printf("输入学生学号:\n");
			   scanf("%s",&num1);
               while(q<i)
			   {
				   if(strcmp(num1,stu[q].num)==0)break;
			       q++;
			   }
			   if(q>i)printf("error\n");
				break;
			case 2:
				printf("输入学生姓名:\n");
			   scanf("%s",&name1);
               while(q<i)
			   {
				   if(strcmp(name1,stu[q].name)==0)break;
			       q++;
			   }
			   if(q>i)printf("error\n");
				break;
		}
	printf("请依次输入学生学号,姓名,班级,专业,成绩1,成绩2,成绩3\n");
	scanf("%s %s %s %s %d %d %d",&stu[q].num, &stu[q].name,&stu[q].grade,&stu[q].major,&stu[q].score1,&stu[q].score2,&stu[q].score3);
    stu[q].sum=stu[q].score1+stu[q].score2+stu[q].score3;
	stu[q].pj=(stu[q].sum)/3;
	}
	 printf("修改成功!\n"); 
}

void savefile()//保存文件
 {
    int p;
	FILE *fp;
    fp=fopen("学生成绩.txt","w+");
    if(!fp)
    {
        printf("error!\n");
    }
    for(p=0;p<i;p++)
	{
		fprintf(fp,"%s %s %s %s %d %d %d %d %d\n",stu[p].num, stu[p].name,stu[p].grade,stu[p].major,stu[p].score1,stu[p].score2,stu[p].score3,stu[p].sum,stu[p].pj);
	}
    fclose(fp);
    printf("文件已经保存!\n"); 
}

void displayfile()//展示文件信息 
{
	int j=0;
	int k=0;
	FILE *fp;
	if((fp=fopen("学生成绩.txt","r"))==NULL)			
	{
		printf("Can not open file\n");
	}	
	while(!feof(fp))           
	{ 
		fscanf(fp,"%s %s %s %s %d %d %d %d %d\n",&stu[j].num,&stu[j].name,&stu[j].grade,&stu[j].major,&stu[j].score1,&stu[j].score2,&stu[j].score3,&stu[j].sum,&stu[j].pj);
		j++;
	}  
	printf("学号   姓名     班级     专业   成绩1   成绩2   成绩3   总成绩   平均成绩\n");       
	for(k=0;k<j;k++)
		printf("%4s %6s %8s %8s %7d %7d %7d %7d %9d\n",stu[k].num,stu[k].name,stu[k].grade,stu[k].major,stu[k].score1,stu[k].score2,stu[k].score3,stu[k].sum,stu[k].pj);
	fclose(fp);			
}

void paixu()//冒泡法排序
{
	int w,j;
	STU temp;
	for(w=0;w<i;w++)
		for(j=0;j<i-w;j++)
		{
			if(stu[j].sum<=stu[j+1].sum)
			{
				temp=stu[j];
				stu[j]=stu[j+1];
				stu[j+1]=temp;
			}
		}
}

void file1()//平均成绩排序文件
{
	paixu(); 
    int p;
	FILE *fp;
    fp=fopen("学生平均成绩排序表.txt","w+");
    if(!fp)
    {
        printf("error!\n");
    }	
    for(p=0;p<i;p++)
	{
		fprintf(fp,"%s %s %d\n",stu[p].num, stu[p].name,stu[p].pj);
	}
    fclose(fp);
    printf("平均成绩排序文件已经生成!\n"); 
}

void file2()//总成绩排序文件
{
	paixu(); 
    int p;
	FILE *fp;
    fp=fopen("学生总成绩排序表.txt","w+");
    if(!fp)
    {
        printf("error!\n");
    }    
    for(p=0;p<i;p++)
	{
		fprintf(fp,"%s %s %d\n",stu[p].num, stu[p].name,stu[p].sum);
	}
    fclose(fp);
    printf("总成绩排序文件已经生成!\n"); 
}

void find()//折半查找找出给定分数段的人 
{	
    int score,low,high;
    int mid=0,j=0;
	FILE *fp;
	if((fp=fopen("学生总成绩排序表.txt","r"))==NULL)			
	{
		printf("Can not open file\n");
	}
	  while(!feof(fp))           
	  { 
		fscanf(fp,"%s %s %d\n",&stu[j].num,&stu[j].name,&stu[j].sum);
		j++;
	  }         
      fclose(fp);	  
   	printf("输入要查找的总成绩分数:");
	scanf("%d",&score);
    high=j-1;
    while(low<=high)
    {
    	mid=(low+high)/2;
    	if(stu[mid].sum==score)break;
		if(stu[mid].sum<score)high=mid-1;
		if(stu[mid].sum>score)low=mid+1;
	}
	if(low<=high)
	{
	printf("该分数段学生排名第%d位\n",mid+1); 
	int temp=mid;
	int temp1=mid; 
    int n=0,n1=0;
    mid--;
    for(;temp<=j-1;temp++)if(stu[temp].sum==score)++n; 
    for(;mid>=0;mid--)if(stu[mid].sum==score)++n1;
	int total=temp1-n1;
	printf("学号   姓名   总成绩\n"); 
	for(;total<temp1+n;total++)printf("%3s %6s %7d\n",stu[total].num,stu[total].name,stu[total].sum);
    }
    else printf("error!\n"); 
}

int main()
{
	int k;
	char s1[10]="123456";
	k=DengLu(s1);
	if(k==0)exit(0);
	int j=0;
	FILE *fp;
	if((fp=fopen("学生成绩.txt","r"))==NULL)			
	{
		printf("Can not open file\n");
	}
	else
	{
	  while(!feof(fp))           
	  { 
		fscanf(fp,"%s %s %s %s %d %d %d %d %d\n",&stu[j].num,&stu[j].name,&stu[j].grade,&stu[j].major,&stu[j].score1,&stu[j].score2,&stu[j].score3,&stu[j].sum,&stu[j].pj);
		j++;
	  }         
      fclose(fp);	
	  i=j; 
	  printf("当前共有多少个学生:%d\n",i); 
    }
	int c=0;	
  	while (c<10)
		{
			 printf("\n"); 
			 printf("******************************\n");
			 printf(" 1.添加信息         6.总成绩排序\n");
		     printf(" 2.显示文件         7.平均成绩排序\n");
			 printf(" 3.展示数据         8.修改信息\n");
			 printf(" 4.删除信息         9.保存文件\n");
			 printf(" 5.查询信息         10.退出系统\n");
			 printf("******************************\n");
		     printf("请根据你的需要选择(1~10):");
			 scanf("%d",&c);
			 printf("\n"); 
			switch (c)
			{
			case 1:
			    add();
				break;
			case 2:
				displayfile();
				break;
			case 3:
				display();
				break;
			case 4:
			    Delete();
				break;
			case 5:
				find(); 
				break;
			case 6:
			    file2();
				break;
			case 7:
		        file1();
			 	break;
			case 8:
		        Correct();
			 	break;
			case 9:
		        savefile();
			 	break;
			case 10:
			    printf("exit!\n");
			}
		} 
	return 0;
}
发布了14 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/NeverFG/article/details/86488993