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

//学生成绩管理系统(C语言实现)
#include<stdio.h> 
#include<stdlib.h>
#include<string.h>//C语言里面关于字符数组的函数定义的头文件,常用函数有strlen、strcmp、strcpy等等
#include<conio.h>//用getchar()、getch()就要包含<conio.h>
#include<dos.h> 
#define LEN sizeof(struct student)
#define FORMAT "%d%10s%16d%13d%15d%19.2f\n"
#define DATA  stu[i].num,stu[i].name,stu[i].gaos_score,stu[i].cyy_socre,stu[i].English_score,stu[i].sum
struct student//定义结构体 
{
	int num;//学号 
	char name[20];//姓名 
	int gaos_score;//高数成绩        由于在vc++里不能对浮点型进行初始化,故定义为int型而不是定义成float,double等 
	int cyy_socre;//C语言成绩 
	int English_score;//大英成绩 
	float sum;//总成绩 
}stu[100];//由于不知道输入多少名学生信息,故直接定义足够大的数组长度 
int main()
{
	  //对各函数模板进行声明
	void show();//显示信息 
	void input();//输入信息 
	void search();//查询信息
	void del();//删除信息
	void modify();//修改信息
	void insert();//插入信息
	void order();//排序
	void number();//统计学生人数 
	void menu();//菜单 
	void bben();//版本信息 
	int n;
	bben();
	menu();
  scanf("%d",&n);//输入选择功能的编号
  while(n)
  { switch(n)
     { case 1: input();break;
       case 2: search();break;
       case 3: del();break;
       case 4: modify();break;
       case 5: insert();break;
       case 6: order();break;
       case 7: number();break;
       case 8: show();printf("请按任意键返回菜单!\n");break;
       default:break;
     }
    getch();
    menu();//执行完功能再次显示菜单界面
    scanf("%d",&n);//输入选择功能的编号
  }
  return 0;
}
void bben()
{
	int i,j;
	system("cls");
	printf("\n\n\n\n\n");
	printf("                                           *                            *            \n");
	printf("                                          ***                          ***           \n");
	printf("                                         *****                        *****          \n"); 
	printf("                               ***************欢迎进入学生成绩管理系统***************\n");
	printf("                               **                                                  **\n");
	printf("                               **                                                  **\n");
	printf("                               **                    版本1.2                       **\n");
	printf("                               **                                                  **\n");
	printf("                               **                                                  **\n");
	printf("                               **                  16网络工程x                     **\n");
	printf("                               **                                                  **\n");
	printf("                               **                                                  **\n");
	printf("                               **                     某某某                       **\n");
	printf("                               **                                                  **\n");
	printf("                               ******************************************************\n");
	printf("\n\n\n\n\n\n\n"); 
	system("pause");//画面停止 
}
void menu()
{
	system("cls");//清屏 
	
	printf("\n\n\n\n\n                                    ********************菜单********************\n");
	printf("                                    *                                          *\n");
	printf("                                    *               0.退出                     *\n");
	printf("                                    *               1.输入信息                 *\n");
	printf("                                    *               2.查询信息                 *\n");
	printf("                                    *               3.删除信息                 *\n");
	printf("                                    *               4.修改信息                 *\n");
	printf("                                    *               5.插入信息                 *\n");
	printf("                                    *               6.排序输出                 *\n");
	printf("                                    *               7.学生人数                 *\n");
	printf("                                    *               8.显示信息                 *\n");
	printf("                                    *                                          *\n");
	printf("                                    ********************************************\n");
	printf("                                    请输入您要执行的序号(0--8):");
	
}
void show()
 { FILE *fp;
   int i,a=0;
   fp=fopen("data.txt","rb");//打开文件 
   while(!feof(fp))//判断文件指针*fp是否指向文件末尾 
   {
   if(fread(&stu[a] ,LEN,1,fp)==1) 
   a++;
   }  
   fclose(fp);
   printf("学号        姓名           高数         C语言         大学英语         总分\t\n");
   for(i=0;i<a;i++)
       { 
	   printf(FORMAT,DATA);//将信息打印
       }
}
void input()//录入学生信息模块 
{
	
	int i,a=0,n;//a是记录的条数
	char ch[2];
	FILE *fp;//定义文件指针
	if((fp=fopen("data.txt","a+"))==NULL)//打开指定文件  a+:为读/写打开一个指定文件  第一次打开文件,寻找原本存在的学生信息并且显示出来 
	{
		printf("不能打开文件\n");
		return;
	} 
	while(!feof(fp))
	{
		if(fread(&stu[a],LEN,1,fp)==1)
		a++;                             //记录当前条数 
	
	}
	fclose(fp);
	if(a==0)
	printf("不能记录!\n");
	else
	{
		system("cls");
		show();
    }
    if((fp=fopen("data.txt","wb"))==NULL)//wb:(只写)为输出打开一个二进制文件   第二次打开文件,往文件里写入学生信息 
    {
    	printf("不能打开文件\n");
    	return;
    }
    for(i=0;i<a;i++)
    fwrite(&stu[i],LEN,1,fp);
    printf("请输入y/n(提示,输入y继续输入,输入n结束输入):");
    scanf("%s",ch);
    while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
    {
    	printf("学号");
		scanf("%d",&stu[a].num);
		for(i=0;i<a;i++)
		if(stu[i].num==stu[a].num)
		{
			printf("该学号已存在,请按任何键继续!");
			getch();
			fclose(fp);
			return;
		}
		printf("姓名:");
		scanf("%s",stu[a].name);
		printf("高数:");
		scanf("%d",&stu[a].gaos_score);
		printf("C语言:");
		scanf("%d",&stu[a].cyy_socre);
		printf("英语:");
		scanf("%d",&stu[a].English_score);
		stu[a].sum=stu[a].gaos_score+stu[a].cyy_socre+stu[a].English_score;
		if(fwrite(&stu[a],LEN,1,fp)!=1)
		{
			printf("不能保存!");
			getch();
		}
		else
		{
			printf("%s 已被保存!\n",stu[a].name);
			a++;
		}
		printf("是否继续y/n(提示,输入y继续输入,输入n结束输入):");
		scanf("%s",ch);
    }
    fclose(fp);
    printf("OK!请按任意键返回主菜单!\n");
}





void search()//查询学生信息 
{
FILE *fp;
int snum,i,a=0;
char ch[2];
if((fp=fopen("data.txt","rb"))==NULL)//rb:(只读)以二进制形式 
{
 printf("不能打开文件\n");
 return;	
}
while(!feof(fp)) 
{
if(fread(&stu[a],LEN,1,fp)==1)
  a++;
  }
  
  fclose(fp);
if(a==0)
{
	printf("没有记录!\n");
	return;
}	
printf("请输入要查询学生的学号:");
scanf("%d",&snum);
for(i=0;i<a;i++)
if(snum==stu[i].num)
{
	printf("已经找出该学生,是否要显示(y/n):");
	scanf("%s",ch);
	if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
	{
		printf("学号        姓名           高数         C语言        大学英语         总分\t\n");
		printf(FORMAT,DATA); 
		break;
	}
	}
if(i==a) printf("未能找到要查询的信息!\n");
printf("请按任意键返回主菜单!\n");
}




void del()//删除学生信息 
{
FILE *fp;
int snum,i,j,a=0;
char ch[2];
if((fp=fopen("data.txt","r+"))==NULL)
{
 printf("不能打开文件\n");
 return;	
}
while(!feof(fp)) 
 if(fread(&stu[a],LEN,1,fp)==1)
  a++;
  fclose(fp);
if(a==0)
{
	printf("没有记录!\n");
	return;
}
printf("请输入要删除学生的学号:");
scanf("%d",&snum);
for(i=0;i<a;i++)
if(snum==stu[i].num)
break;
printf("已经找到该学生,是否删除(y/n):");
scanf("%s",ch);
if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)//判断是否要进行删除
      for(j=i;j<a;j++)
	      stu[j]=stu[j+1];//将后一个记录移到前一个记录的位置
      a--;//记录的总个数减1
      if((fp=fopen("data.txt","wb"))==NULL)
     { 
	 printf("不能打开文件\n");
	 return;
	 }
  for(j=0;j<a;j++)//将更改后的记录重新写入指定的磁盘文件中
      if(fwrite(&stu[j] ,LEN,1,fp)!=1)
       { 
	   printf("不能保存!\n");
      getch();
	  }
  fclose(fp);
  printf("修改成功!\n");
  printf("请按任意键返回主菜单!\n");		
}






void modify()//修改学生信息
{
	FILE  *fp;
	int snum,i,j,a=0;
	if((fp=fopen("data.txt","r+"))==NULL)
	{
		printf("不能打开文件!\n");
		return;
	}
	while(!feof(fp))  //判断文件指针是否指到文件末尾
	if(fread(&stu[a],LEN,1,fp)==1)
	a++;
	if(a==0)
	{
		printf("没有记录!\n");
		fclose(fp);
		return;
	} 
   printf("请输入你想修改的信息的学生学号!\n");
   scanf("%d",&snum);
   for(i=0;i<a;i++)
   if(snum==stu[i].num)
   break;
   printf("已经找到该学生,请进行修改!\n");
   printf("姓名:");
		scanf("%s",stu[i].name);
		printf("高数:");
		scanf("%d",&stu[i].gaos_score);
		printf("C语言:");
		scanf("%d",&stu[i].cyy_socre);
		printf("英语:");
		scanf("%d",&stu[i].English_score);
		stu[i].sum=stu[i].gaos_score+stu[i].cyy_socre+stu[i].English_score;
		if((fp=fopen("data.txt","wb"))==NULL)
		{
			printf("不能够打开文件!\n");
			return;
		}
		for(j=0;j<a;j++)
		if(fwrite(&stu[j],LEN,1,fp)!=1)
		{
			printf("不能保存!\n");
			getch();
		}
		fclose(fp);
		printf("请按任意键返回主菜单!\n");
}
void insert()//插入学生信息 
{
	FILE *fp;
	int i,j,k,snum,m=0;
	if((fp=fopen("data.txt","r+"))==NULL)
	{
		printf("不能打开文件!\n");
		return; 
	}
	while(!feof(fp))
	if(fread(&stu[m],LEN,1,fp)==1)
	m++;
	if(m==0)
	{
		printf("没有记录!\n");
		fclose(fp);
		
	}
    printf("请选择你要插入的位置!(输入要插入的已存在的学号)\n");
	scanf("%d",&snum);
	for(i=0;i<m;i++)
	if(snum==stu[i].num)
	break;
	for(j=m-1;j>i;j--)//将i以后的数字依次推后一位 
	stu[j+1]=stu[j];
	printf("请输入新的信息!\n");
	printf("学号:");
	scanf("%d",&stu[i+1].num);
	for(k=0;k<m;k++)
	if(stu[k].num==stu[i+1].num)
	{
		printf("学生信息已经成功插入,请按任意键继续!\n");
		getch();
		fclose(fp);
	   
	   
	} 
	printf("姓名:");
	scanf("%s",stu[i+1].name);
	printf("高数成绩:");
	scanf("%d",&stu[i+1].gaos_score);
	printf("C语言成绩:");
	scanf("%d",&stu[i+1].cyy_socre);
	printf("英语成绩:");
	scanf("%d",&stu[i+1].English_score);
	stu[i+1].sum =stu[i+1].gaos_score+stu[i+1].cyy_socre+stu[i+1].English_score;
     if((fp=fopen("data.txt","wb"))==NULL)
	{
		printf("不能够打开文件!\n");
		return;
	} 
		for(k=0;k<m+1;k++)
	    if(fwrite(&stu[k] ,LEN,1,fp)!=1)
		{
			printf("不能够保存!\n");
			getch();
		}
		fclose(fp);
		printf("请按任意键返回主菜单!\n");
}





void order()//将成绩进行排序并输出 
{
	FILE *fp;
	struct student t;
	int i,j,m=0;
	if((fp=fopen("data.txt","r+"))==NULL)
	{
		printf("不能够打开文件!\n");
		return;
	}	
	while(!feof(fp))
	if(fread(&stu[m],LEN,1,fp)==1)
	m++;
	fclose(fp);
	if(m==0)
	{
		printf("没有记录!\n");
		return;
	}
	if((fp=fopen("data.txt","wb"))==NULL)
	{
	printf("不能打开文件!\n");
	return;
	}
	for(i=0;i<m-1;i++)
	for(j=i+1;j<m;j++)
	if(stu[i].sum<stu[j].sum)
	{
		t=stu[i];
		stu[i]=stu[j];
		stu[j]=t;
	}
	if((fp=fopen("data.txt","wb"))==NULL)
	{
		printf("不能打开!\n");
		return; 
	}
	for(j=0;j<m;j++)
	if(fwrite(&stu[j],LEN,1,fp)!=1)
       { 
        printf("%s不能储存!\n"); 
        getch();
      }
  fclose(fp);
  
  show();
  printf("请按任意键返回主菜单!\n");
}





void number()//统计学生数量 
{
  FILE *fp;
  int m=0;
  if((fp=fopen("data.txt","r+"))==NULL)
  {
  	printf("不能够打开文件!\n");
  	return;
  }	
  while(!feof(fp))
  if(fread(&stu[m],LEN,1,fp)==1)
  m++;
  if(m==0)
  {
  	printf("不能够记录!\n");
  	fclose(fp);
  	return;
  }
  printf("这个班共有%d个学生!\n",m);
  fclose(fp);
  printf("请按任意键返回主菜单!\n");
}

猜你喜欢

转载自blog.csdn.net/Fhujinwu/article/details/77933493