C语言学生信息管理系统

本文介绍了使用C语言实现学生信息管理系统的过程,旨在熟悉结构体、循环与选择语句、typedef声明新类型以及函数的使用。系统实现了录入、查询、修改、删除、排序和统计等功能,提高了debug能力。在实践中,作者体会到函数化代码的重要性,以及在输出数据时使用%-10s等格式化技巧。此外,详细说明了插入和删除操作的实现方法,并展示了系统的用户界面功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验目的:

1.  熟悉结构体的使用方法

2.  学会综合运用循环语句与选择语句并结合字符串数组及数组实现学生相关信息的排序、查找、录入、删除等功能。

3.  学会使用typedef声明新类型名

4.  学会利用函数简化main()函数,使得程序层次清晰;同时通过使用函数减少重复代码,提高程序的可读性。

5.  学会使用switch语句优化菜单的显示方式,使得菜单层层显示。

6.  提高debug能力。

硬件环境:

联想小新潮7000

I7-8550U+8G内存+128G SSD固态硬盘+1T机械硬盘+NVIDIA  GeForce 940M

软件环境:

操作系统:Windows10

编译器:Dev C++

文本编译器:Notepad++

实验步骤与内容:

1.     #include <stdio.h>,#include<stdlib.h> ,#include<string.h> ,#include"process.h",#include"ctype.h" 声明下面即将使用的头文件

2.     使用typedef定义结构体,用于存储学生的相关信息及方便进行后续操作;

3.             使用循环、数组等,针对菜单提示、成绩录入、修改、添加/追加、删除、查询统计(按学号、姓名、各科成绩查询(包括成绩段查询),按分数段统计人数等)、退出等功能分别声明、定义和调用不同函数实现。

4.             在main()函数中使用swich语句调用相关函数,实现学生信息管理系统的基本功能。

结论分析与体会:

1.  当程序有较多重复或相似的代码时,可以使用函数统一编写相应的功能,在针对每种具体的情况做出适当的调整,从而减少代码量,提高程序的可读性,同时便于程序的后期维护(如debug)。

2.  在输出数据时,可以使用%-10s等输出方式,使得输出的数据左对齐。

3.  可以使用函数对结构体进行整体操作,从而减少代码量。

4.  插入时,首先将插入数据保存起来,采用自后向前循环覆盖法,用插点及其后方的数据自后而前逐一覆盖后一位同学的信息,最后再用插入数据的信息覆盖插入点的信息。

插入时,可以先放在尾部,再与前面的数据交换位置i与j交换,后面的数据依次后退一个单位覆盖后面的数据,当然总数n也要加一(用一个counts记录)另外,插入时可以调用编辑中的录入。

即:t = stu[n+i];

for (k=n+i-1;k>=place;k--)

stu[k+1]=stu[k];

stu[place]= t;

5.  删除时,采用自前向后覆盖法,原理类似于插入。

通过这次较为大型的实验,我明显感觉到自身debug能力的提高,并初步感受到了代码量巨大时细心和规范的习惯的重要性。同时,通过不断地查阅资料,程序的功能也不断地完善,最终不知不觉地写了900多行代码。看到程序真的按照构思正确执行时,内心很有成就感。


用户界面:(功能展示)

1.编辑功能(含录入、修改、删除、插入):

2.显示功能:

3.查询功能

4.排序功能:

5.统计功能:

6.文件功能:既可以读入,也可以修改或进行其他操作并当即保存至本次打开的文件。 

7.退出功能:

代码如下:

#include <stdio.h>
#include <stdlib.h> 
#include <string.h>
#include "process.h"
#include "ctype.h"
typedef struct 
{
    char num[10];
    char name[10];
	char sex[10];
    int internet; 
    int math; 
    int english; 
	double aver;
}Student;
Student stu[1000];
Student*pt=stu;


int input(Student*pt,int n);/*输入若干条记录*/
void show(Student*pt,int n); /*显示所有记录*/
void revise(Student*pt,int n);/*修改*/
int insert_in_the_middle(Student *pt,int n); /*插入(从中部)*/
int Delete(Student *pt,int n); /*按姓名查找,删除一条记录*/  
void inquire_xingming(Student *pt,int n); /*按姓名查找并显示一个记录*/ 
void inquire_average(Student *pt,int n); /*按平均成绩查找并显示一个记录*/ 
void inquire_internet(Student *pt,int n); /*按计算机成绩查找并显示一个记录*/ 
void inquire_math(Student *pt,int n); /*按数学成绩查找并显示一个记录*/ 
void inquire_english(Student *pt,int n); /*按英语成绩查找并显示一个记录*/
void Sort_ID(Student *pt,int n); //按学号排序
void Sort_average(Student *pt,int n); /*按平均成绩排序*/ 
void Sort_internet(Student *pt,int n); /*按计算机成绩排序*/     
void Sort_english(Student *pt,int n); /*按英语成绩排序*/
void Sort_math(Student *pt,int n); /*按数学成绩排序*/ 
void inquire_average_scope(Student *pt,int n); /*按平均成绩段查询*/ 
void inquire_internet_scope(Student *pt,int n); /*按计算机成绩段查询*/
void inquire_math_scope(Student *pt,int n); /*按数学成绩段查询*/ 
void inquire_english_scope(Student *pt,int n); /*按英语成绩段查询*/ 
void statistics(Student *pt,int n);//按分数段统计人数
int File2(Student *pt,int n); /*从文件中读入数据*/ 
void File1(Student *pt,int n); /*将所有记录写入文件*/
int menu(); /*菜单*/
int operation();/*编辑(含录入(可追加)、插入、修改、删除)*/
int inquire();/*查询*/
int Sort();/*排序*/
int File();/*文件*/

FILE *fp;
char fileName[20];

void modify()
{
	
	printf("请输入文件名:(建议使用1.txt)\n输入文件名后,将从文件中读取数据\n若想查看已对此文件进行的操作,请先退出并关闭此程序再查看\n");
	scanf("%s", fileName);
	if((fp = fopen(fileName, "at+")) == NULL)
	{
		printf("文件不存在");
		return;
	}
}


int main()    /*主函数*/ 
{ 
int n=0; 
for(;;)
{
    for(;;) 
	{ 
        switch(menu()) 
		{ 
        case 1:switch(operation())
			{
               case 1:n=input(pt,n);show(pt,n); break;
				  
               case 2:revise(pt ,n);show(pt,n); break;
			   case 3:n = Delete(pt ,n);show(pt,n); break;
			   case 4:n = insert_in_the_middle(pt,n); show(pt,n);break;
		    } break; 
        case 2:show(pt,n);break; 
        case 3: 
            switch(inquire())
			{
               case 1:inquire_xingming(pt,n);break;
               case 2:inquire_average(pt ,n);break;
			   case 3:inquire_internet(pt,n);break;
			   case 4:inquire_math(pt,n);break;
			   case 5:inquire_english(pt,n);break;
               case 6:inquire_average_scope(pt,n);break;
               case 7:inquire_internet_scope(pt,n);break;
               case 8:inquire_math_scope(pt,n);break;
               case 9:inquire_english_scope(pt,n);break;		   
		    } break; 
        case 4:switch(Sort())
			{
               case 1:Sort_ID(pt,n);show(pt,n); break ;          
               case 2:Sort_internet(pt ,n);show(pt,n);break;
			   case 3:Sort_math(pt ,n);show(pt,n); break;
               case 4:Sort_english(pt ,n);show(pt,n); break;
			   case 5:Sort_average(pt ,n);show(pt,n); break;
		    } break; 
        case 5:statistics(pt,n);break; 
        case 6:
        	 modify();
 	        n = File2(pt, n);
             break; 
             
        case 0: 
      	 	 if(fp != NULL)
      	 	 	   fclose(fp); 
            exit(0);   /*结束程序*/ 
		} 
	}
}
}




int input(Student *pt,int n)/*输入若干条记录*/
{
	int i=0;
	char sign,x[10];
	double a=0.0;    
while(sign!='n'&&sign!='N') 
{ 
printf("请输入学生的学号、姓名、性别,计算机、数学、英语分数:\n");
scanf("%s%s%s%d%d%d",stu[n+i].num,stu[n+i].name,stu[n+i].sex,&stu[n+i].internet,&stu[n+i].math,&stu[n+i].english);
a=1.0*(stu[n+i].internet+stu[n+i].math+stu[n+i].english)/3.0; 
stu[n+i].aver=a;
getchar();
printf("是否继续输入?(Y/N):\n");
scanf("%c",&sign);
i++; 
}
File1(pt,n+i);
return(n+i);
}

void show(Student *pt,int n) /*显示所有记录*/
{ 
  int i ;
  printf("------------------------------------------------------------------\n"); /*格式头*/ 
  printf("学号      姓名      性别      计算机    数学      英语      平均成绩 \n"); 
  printf("------------------------------------------------------------------\n");
  for(i=0;i<n;i++) 
  { 
    printf("%-10s%-10s%-10s%-10d%-10d%-10d%-10.2lf\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].internet,stu[i].math,stu[i].english,stu[i].aver);                                                
  }
}

void revise(Student *pt,int n)/*修改*/
{
 int i=0,choice=1;
 char x[10]; 
while(choice!=0)
{   printf("请输入您要修改的学生的学号:\n");
    scanf("%s",x);
	for(i=0;;i++)
	{
		if(strcmp(stu[i].num,x)==0) break;
		else {printf ("not find!\n");
		return;}
	}
        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("请输入您的选择:");
        scanf("%d", &choice);
        switch(choice)
        {                                                          
            case 0:break; 
            case 1:
                printf("请输入新姓名:");
                scanf("%s", stu[i].name);
                break; 
			case 2:                                               
                printf("请输入新的性别:");    
               scanf("%s", stu[i].sex);
                break;
            case 3:                                               
                printf("请输入新的计算机分数:");    
               scanf("%d", &stu[i].internet);
                break;
			case 4:
                printf("请输入新的数学分数:");
               scanf("%d",&stu[i].math);
                break;
			case 5:
                printf("请输入新的英语分数:");                                          
               scanf("%d", &stu[i].english);
                break;
            default:
                printf("\n无效选项!");
                break;
		} break;
	}
	File1(pt,n);
	return;
}



int insert_in_the_middle(Student *pt,int n) //插入(从中部)
{
	int place,k;
	int i=0;
	char sign,x[10];
	double a=0.0;
    Student t;    
	while(sign!='n'&&sign!='N') 
	{ 
        printf ("Please enter the number of the place that you desire to insert in:");
		scanf("%d",&place);
		place--;
		if (place>n+i)
		{
			printf ("Invalid!");
			continue;
		}
		printf("请输入学生的学号、姓名、性别,计算机、数学、英语分数:\n");
		scanf("%s%s%s%d%d%d",stu[n+i].num,stu[n+i].name,stu[n+i].sex,&stu[n+i].internet,&stu[n+i].math,&stu[n+i].english);
		a=1.0*(stu[n+i].internet+stu[n+i].math+stu[n+i].english)/3.0; 
		stu[n+i].aver=a;
		t = stu[n+i];
		for (k=n+i-1;k>=place;k--)
		{
		   stu[k+1]=stu[k];
		}
	    stu[place]= t;
	    getchar();
		printf("是否继续输入?(Y/N):\n");
		scanf("%c",&sign);
		if (sign=='Y'||sign=='y')i++; 
	} 
	File1(pt,n+i); 
	return(n+i+1);
}




//插入时,可以先放在尾部,再与前面的数据交换位置i与j交换,后面的数据依次后退一个单位覆盖后面的数据,当然总数n也要加一(用一个counts记录)
//插入时可以调用编辑中的录入 

                                                                 
int Delete(Student *pt,int n) /*按姓名查找,删除一条记录*/  
{
Student t;	
char s[20]; 
int i;
int j; 
i=0;
printf("输入要删除记录的姓名:"); 
scanf("%s",s); 
while(strcmp(stu[i].name,s)!=0&&i<n) i++; 
if(i==n) 
{printf("not find!\n"); 
return(n); }                                                                    
for(j=i;j<n-1;j++) /*删除操作*/ 
{ 
    t = stu[j];
    stu[j] = stu[j+1];
    stu[j+1] = t;
} 
printf("Delete Successed!\n"); 
File1(pt,n-1);
return(n-1); 
} 


void inquire_xingming(Student *pt,int n) /*按姓名查找并显示一条记录*/ 
{   char s[20];                    
    Student t;
	int i,j,counts=0;
	int b[1000];
    printf("输入姓名:"); 
    scanf("%s",s); 
	for (i=0;i<n;i++)
	{
		if (strcmp(stu[i].name,s)==0&&i<n)
		{
			counts++;
			b[counts]=i;
		}
	}
	if (counts>0)
	{
		printf("------------------------------------------------------------------\n"); /*格式头*/ 
        printf("学号      姓名      性别      计算机    数学      英语      平均成绩 \n"); 
        printf("------------------------------------------------------------------\n");
            for(i=1;i<=counts;i++) 
            { 
            printf("%-10s%-10s%-10s%-10d%-10d%-10d%-10.2lf\n",stu[b[i]].num,stu[b[i]].name,stu[b[i]].sex,stu[b[i]].internet,stu[b[i]].math,stu[b[i]].english,stu[b[i]].aver);                                                
    }

		}
	else
		printf ("not find!\n");
	return;
}

                                
void inquire_average(Student *pt,int n) /*按平均成绩查找并显示一个记录*/ 
{
    Student t;
	int i,j,counts=0;
	float score;
	int b[1000];
    for(i=0;i<n-1;i++) //冒泡排序法// 
    for(j=0;j<n-1-i;j++) 
    if(stu[j].aver<stu[j+1].aver) 
    {
	    t = stu[i]; stu[i] = stu[i+1]; stu[i+1] = t;
	}
	printf ("请输入平均成绩:\n");
	scanf ("%f",&score);
	for (i=0;i<n;i++)
	{
		if (stu[i].aver==score)
		{
			counts++;
			b[counts]=i;
		}
	}
	if (counts>0)
	{
			printf("------------------------------------------------------------------\n"); /*格式头*/ 
            printf("学号      姓名      性别      计算机    数学      英语      平均成绩 \n"); 
            printf("------------------------------------------------------------------\n");
            for(i=1;i<=counts;i++) 
            { 
            printf("%-10s%-10s%-10s%-10d%-10d%-10d%-10.2lf\n",stu[b[i]].num,stu[b[i]].name,stu[b[i]].sex,stu[b[i]].internet,stu[b[i]].math,stu[b[i]].english,stu[b[i]].aver);                                                
    }

		}
	else
		printf ("not find!\n");
	return;
} 

void inquire_internet(Student *pt,int n) /*按计算机成绩查找并显示一个记录*/ 
{ Student t;
	int i,j,counts=0;
	float score;
	int b[1000];
    for(i=0;i<n-1;i++) //冒泡排序法// 
    for(j=0;j<n-1-i;j++) 
    if(stu[j].internet<stu[j+1].internet) 
    {
	    t = stu[i]; stu[i] = stu[i+1]; stu[i+1] = t;
	}
	printf ("请输入计算机成绩:\n");
	scanf ("%f",&score);
	for (i=0;i<n;i++)
	{
		if (stu[i].internet==score)
		{
			counts++;
			b[counts]=i;
		}
	}
	if (counts>0)
	{
			printf("------------------------------------------------------------------\n"); /*格式头*/ 
            printf("学号      姓名      性别      计算机    数学      英语      平均成绩 \n"); 
            printf("------------------------------------------------------------------\n");
            for(i=1;i<=counts;i++) 
            { 
            printf("%-10s%-10s%-10s%-10d%-10d%-10d%-10.2lf\n",stu[b[i]].num,stu[b[i]].name,stu[b[i]].sex,stu[b[i]].internet,stu[b[i]].math,stu[b[i]].english,stu[b[i]].aver);                                                
    }

		}
	else
		printf ("not find!\n");
	return;             
} 

void inquire_math(Student *pt,int n) /*按数学成绩查找并显示一个记录*/ 
{ Student t;
	int i,j,counts=0;
	float score;
	int b[1000];
    for(i=0;i<n-1;i++) //冒泡排序法// 
    for(j=0;j<n-1-i;j++) 
    if(stu[j].math<stu[j+1].math) 
    {
	    t = stu[i]; stu[i] = stu[i+1]; stu[i+1] = t;
	}
	printf ("请输入数学成绩:\n");
	scanf ("%f",&score);
	for (i=0;i<n;i++)
	{
		if (stu[i].math==score)
		{
			counts++;
			b[counts]=i;
		}
	}
	if (counts>0)
	{
			printf("------------------------------------------------------------------\n"); /*格式头*/ 
            printf("学号      姓名      性别      计算机    数学      英语      平均成绩 \n"); 
            printf("------------------------------------------------------------------\n");
            for(i=1;i<=counts;i++) 
            { 
            printf("%-10s%-10s%-10s%-10d%-10d%-10d%-10.2lf\n",stu[b[i]].num,stu[b[i]].name,stu[b[i]].sex,stu[b[i]].internet,stu[b[i]].math,stu[b[i]].english,stu[b[i]].aver);                                                
    }

		}
	else
		printf ("not find!\n");
	return;             
}

void inquire_english(Student *pt,int n) /*按英语成绩查找并显示一个记录*/ 
{ Student t;
	int i,j,counts=0;
	float score;
	int b[1000];
    for(i=0;i<n-1;i++) //冒泡排序法// 
    for(j=0;j<n-1-i;j++) 
    if(stu[j].english<stu[j+1].english) 
    {
	    t = stu[i]; stu[i] = stu[i+1]; stu[i+1] = t;
	}
	printf ("请输入英语成绩:\n");
	scanf ("%f",&score);
	for (i=0;i<n;i++)
	{
		if (stu[i].english==score)
		{
			counts++;
			b[counts]=i;
		}
	}
	if (counts>0)
	{
			printf("------------------------------------------------------------------\n"); /*格式头*/ 
            printf("学号      姓名      性别      计算机    数学      英语      平均成绩 \n"); 
            printf("------------------------------------------------------------------\n");
            for(i=1;i<=counts;i++) 
            { 
            printf("%-10s%-10s%-10s%-10d%-10d%-10d%-10.2lf\n",stu[b[i]].num,stu[b[i]].name,stu[b[i]].sex,stu[b[i]].internet,stu[b[i]].math,stu[b[i]].english,stu[b[i]].aver);                                                
    }

		}
	else
		printf ("not find!\n");
	return;             
}




void Sort_ID(Student *pt,int n) //按学号排序
{ 	int i,j,p,q,r;
	double y;
	char x[20],t[10],s[10];
	for(i=0;i<n-1;i++) /*冒泡法排序*/ 
	for(j=0;j<n-1-i;j++) 
	if(strcmp(stu[j].num,stu[j+1].num)>0) 
	{ strcpy(t,stu[j].num); 
	strcpy(stu[j].num,stu[j+1].num); 
	strcpy(stu[j+1].num,t); 
	strcpy(x,stu[j].name); 
	strcpy(stu[j].name,stu[j+1].name); 
	strcpy(stu[j+1].name,x); 
	strcpy(x,stu[j].sex); 
	strcpy(stu[j].sex,stu[j+1].sex); 
	strcpy(stu[j+1].sex,x); 
	y=stu[j].aver;stu[j].aver=stu[j+1].aver;stu[j+1].aver=y;
	p=stu[j].internet;stu[j].internet=stu[j+1].internet;stu[j+1].internet=p;
	q=stu[j].math;stu[j].math=stu[j+1].math;stu[j+1].math=q;
	r=stu[j].english;stu[j].english=stu[j+1].english;stu[j+1].english=r;
} 
File1(pt,n);
return;
}

 
void Sort_average(Student *pt,int n) /*按平均成绩排序*/ 
{ 	int i,j,p,q,r;
	double y;
	char x[20],t[10],s[10];
	for(i=0;i<n-1;i++) /*冒泡法排序*/ 
	for(j=0;j<n-1-i;j++) 

	if(stu[j].aver>stu[j+1].aver)

   {   	y=stu[j].aver;stu[j].aver=stu[j+1].aver;stu[j+1].aver=y;
		p=stu[j].internet;stu[j].internet=stu[j+1].internet;stu[j+1].internet=p;
		q=stu[j].math;stu[j].math=stu[j+1].math;stu[j+1].math=q;
		r=stu[j].english;stu[j].english=stu[j+1].english;stu[j+1].english=r;
        strcpy(x,stu[j].name);
	    strcpy(stu[j].name,stu[j+1].name);
	    strcpy(stu[j+1].name,x);
        strcpy(t,stu[j].num);
        strcpy(stu[j].num,stu[j+1].num);
	    strcpy(stu[j+1].num,t);
        strcpy(t,stu[j].sex);
        strcpy(stu[j].sex,stu[j+1].sex);
	    strcpy(stu[j+1].sex,t);	 		 
   }
   File1(pt,n);
	  return;

}




void Sort_internet(Student *pt,int n) /*按计算机成绩排序*/ 
{ int i,j,p,q,r;
  double y;
  char x[20],t[10],s[10];
  for(i=0;i<n-1;i++) /*冒泡法排序*/ 
  for(j=0;j<n-1-i;j++) 
   if(stu[j].internet>stu[j+1].internet)
   {   
       y=stu[j].aver;stu[j].aver=stu[j+1].aver;stu[j+1].aver=y;
       p=stu[j].internet;stu[j].internet=stu[j+1].internet;stu[j+1].internet=p;
	   q=stu[j].math;stu[j].math=stu[j+1].math;stu[j+1].math=q;
	   r=stu[j].english;stu[j].english=stu[j+1].english;stu[j+1].english=r;
         strcpy(x,stu[j].name);
	     strcpy(stu[j].name,stu[j+1].name);
	     strcpy(stu[j+1].name,x);
         strcpy(t,stu[j].num);
         strcpy(stu[j].num,stu[j+1].num);
	     strcpy(stu[j+1].num,t);
         strcpy(t,stu[j].sex);
         strcpy(stu[j].sex,stu[j+1].sex);
	     strcpy(stu[j+1].sex,t);		 
   }
   File1(pt,n);
	  return;

}


void Sort_english(Student *pt,int n) /*按英语成绩排序*/ 
{ int i,j,p,q,r;
  double y;
  char x[20],t[10],s[10];
  for(i=0;i<n-1;i++) /*冒泡法排序*/ 
  for(j=0;j<n-1-i;j++) 
   if(stu[j].english>stu[j+1].english)
   {   
		strcpy(t,stu[j].num); 
		strcpy(stu[j].num,stu[j+1].num); 
		strcpy(stu[j+1].num,t); 
		strcpy(x,stu[j].name); 
		strcpy(stu[j].name,stu[j+1].name); 
		strcpy(stu[j+1].name,x); 
		strcpy(x,stu[j].sex); 
		strcpy(stu[j].sex,stu[j+1].sex); 
		strcpy(stu[j+1].sex,x); 
		y=stu[j].aver;stu[j].aver=stu[j+1].aver;stu[j+1].aver=y;
		p=stu[j].internet;stu[j].internet=stu[j+1].internet;stu[j+1].internet=p;
		q=stu[j].math;stu[j].math=stu[j+1].math;stu[j+1].math=q;
		r=stu[j].english;stu[j].english=stu[j+1].english;stu[j+1].english=r;
   }
   File1(pt,n);
	  return;

}

void Sort_math(Student *pt,int n) /*按数学成绩排序*/ 
{ int i,j,p,q,r;
  double y;
  char x[20],t[10],s[10];
  for(i=0;i<n-1;i++) /*冒泡法排序*/ 
  for(j=0;j<n-1-i;j++) 
   if(stu[j].math>stu[j+1].math)
   {   
        strcpy(t,stu[j].num); 
		strcpy(stu[j].num,stu[j+1].num); 
		strcpy(stu[j+1].num,t); 
		strcpy(x,stu[j].name); 
		strcpy(stu[j].name,stu[j+1].name); 
		strcpy(stu[j+1].name,x); 
		strcpy(x,stu[j].sex); 
		strcpy(stu[j].sex,stu[j+1].sex); 
		strcpy(stu[j+1].sex,x); 
		y=stu[j].aver;stu[j].aver=stu[j+1].aver;stu[j+1].aver=y;
		p=stu[j].internet;stu[j].internet=stu[j+1].internet;stu[j+1].internet=p;
		q=stu[j].math;stu[j].math=stu[j+1].math;stu[j+1].math=q;
		r=stu[j].english;stu[j].english=stu[j+1].english;stu[j+1].english=r;
   }
   File1(pt,n);
	  return;

}

void inquire_average_scope(Student *pt,int n) /*按平均成绩段查询*/ 
{
	Student t;
	int i,j,counts=0;
	int b[1000];
    for(i=0;i<n-1;i++) //冒泡排序法// 
    for(j=0;j<n-1-i;j++) 
    if(stu[j].aver<stu[j+1].aver) 
    {
	    t = stu[i]; stu[i] = stu[i+1]; stu[i+1] = t;
	}
	int high,low;
	printf ("请分别输入查询区间的最高成绩和最低成绩:\n");
	scanf("%d %d",&high,&low);
	for (i=0;i<n;i++)
	{
		if (stu[i].aver>=low&&stu[i].aver<=high)
		{
			counts++;
			b[counts]=i;
		}
	}
	if (counts>0)
	{
			printf("------------------------------------------------------------------\n"); /*格式头*/ 
            printf("学号      姓名      性别      计算机    数学      英语      平均成绩 \n"); 
            printf("------------------------------------------------------------------\n");
            for(i=1;i<=counts;i++) 
            { 
            printf("%-10s%-10s%-10s%-10d%-10d%-10d%-10.2lf\n",stu[b[i]].num,stu[b[i]].name,stu[b[i]].sex,stu[b[i]].internet,stu[b[i]].math,stu[b[i]].english,stu[b[i]].aver);                                                
    }

		}
	else
		printf ("not find!");
	return;
}

void inquire_internet_scope(Student *pt,int n) /*按计算机成绩段查询*/ 
{
	Student t;
	int i,j,counts=0;
	int b[1000];
    for(i=0;i<n-1;i++) //冒泡排序法// 
    for(j=0;j<n-1-i;j++) 
    if(stu[j].internet<stu[j+1].internet) 
    {
	    t = stu[i]; stu[i] = stu[i+1]; stu[i+1] = t;
	}
	int high,low;
	printf ("请分别输入查询区间的最高成绩和最低成绩:\n");
	scanf("%d %d",&high,&low);
	for (i=0;i<n;i++)
	{
		if (stu[i].internet>=low&&stu[i].internet<=high)
		{
			counts++;
			b[counts]=i;
		}
	}
	if (counts>0)
	{
			printf("------------------------------------------------------------------\n"); /*格式头*/ 
            printf("学号      姓名      性别      计算机    数学      英语      平均成绩 \n"); 
            printf("------------------------------------------------------------------\n");
            for(i=1;i<=counts;i++) 
            { 
            printf("%-10s%-10s%-10s%-10d%-10d%-10d%-10.2lf\n",stu[b[i]].num,stu[b[i]].name,stu[b[i]].sex,stu[b[i]].internet,stu[b[i]].math,stu[b[i]].english,stu[b[i]].aver);                                                
            }
	}
	else
		printf ("not find!");
	return;
}

void inquire_math_scope(Student *pt,int n) /*按数学成绩段查询*/ 
{
	Student t;
	int i,j,counts=0;
	int b[1000];
    for(i=0;i<n-1;i++) //冒泡排序法// 
    for(j=0;j<n-1-i;j++) 
    if(stu[j].math<stu[j+1].math) 
    {
	    t = stu[i]; stu[i] = stu[i+1]; stu[i+1] = t;
	}
	int high,low;
	printf ("请分别输入查询区间的最高成绩和最低成绩:\n");
	scanf("%d %d",&high,&low);
	for (i=0;i<n;i++)
	{
		if (stu[i].math>=low&&stu[i].math<=high)
		{
			counts++;
			b[counts]=i;
		}
	}
	if (counts>0)
	{
			printf("------------------------------------------------------------------\n"); /*格式头*/ 
            printf("学号      姓名      性别      计算机    数学      英语      平均成绩 \n"); 
            printf("------------------------------------------------------------------\n");
            for(i=1;i<=counts;i++) 
            { 
            printf("%-10s%-10s%-10s%-10d%-10d%-10d%-10.2lf\n",stu[b[i]].num,stu[b[i]].name,stu[b[i]].sex,stu[b[i]].internet,stu[b[i]].math,stu[b[i]].english,stu[b[i]].aver);                                                
            }
	}
	else
		printf ("not find!");
	return;
}

void inquire_english_scope(Student *pt,int n) /*按英语成绩段查询*/ 
{
	Student t;
	int i,j,counts=0;
	int b[1000];
    for(i=0;i<n-1;i++) //冒泡排序法// 
    for(j=0;j<n-1-i;j++) 
    if(stu[j].english<stu[j+1].english) 
    {
	    t = stu[i]; stu[i] = stu[i+1]; stu[i+1] = t;
	}
	int high,low;
	printf ("请分别输入查询区间的最高成绩和最低成绩:\n");
	scanf("%d %d",&high,&low);
	for (i=0;i<n;i++)
	{
		if (stu[i].english>=low&&stu[i].english<=high)
		{
			counts++;
			b[counts]=i;
		}
	}
	if (counts>0)
	{
			printf("------------------------------------------------------------------\n"); /*格式头*/ 
            printf("学号      姓名      性别      计算机    数学      英语      平均成绩 \n"); 
            printf("------------------------------------------------------------------\n");
            for(i=1;i<=counts;i++) 
            { 
            printf("%-10s%-10s%-10s%-10d%-10d%-10d%-10.2lf\n",stu[b[i]].num,stu[b[i]].name,stu[b[i]].sex,stu[b[i]].internet,stu[b[i]].math,stu[b[i]].english,stu[b[i]].aver);                                                
            }
	}
	else
		printf ("not find!");
	return;
}


void statistics(Student *pt,int n)//按分数段统计人数
{      int i,j,a,max,min,k,l,q,p,w;
       k=0,l=0,p=0,q=0,w=0;
      printf("你想统计哪科成绩: 1计算机 2数学  3英语  4平均 \n");
      scanf("%d",&j);
      printf("input 2 score:\n");
      scanf("%d%d",&max,&min);
      if(max<min)
	  {
      a=max;max=min;min=a;  
	  }
	    if(j==1)
		{
			for(i=0;i<99;i++)
			{
			    if(stu[i].internet>=min&&stu[i].internet<=max)  k++;
			}
	    	printf("分数段的人数为 :%d",k);
		}
	    else if(j==2)
		{
			for(i=0;i<99;i++)
			{
			    if(stu[i].math>=min&&stu[i].math<=max)  l++;
			}
	    	printf("分数段的人数为 :%d",l);
		}
	    else if(j==3)
		{
			for(i=0;i<99;i++)
			{
			    if(stu[i].english>=min&&stu[i].english<=max)  p++;
			}
	    	printf("分数段的人数为 :%d",p);
		}
	    else if(j==4)
		
		{
			for(i=0;i<99;i++)
			{
			    if(stu[i].aver>=min&&stu[i].aver<=max)  q++;
			}
	    	printf("分数段的人数为 :%d",q);
		}
    return;
}


int File2(Student *pt, int n) /*从文件中读入数据*/ 
{ int i=0,num; 
if(fp == NULL)
{
	printf("文件不存在");
	return n;
}
fscanf(fp,"%d",&num); /*读入总记录量*/
while(i<num) /*循环读入数据*/
{ 
fscanf(fp,"%s%s%s%d%d%d",stu[n+i].num,stu[n+i].name,stu[n+i].sex,&stu[n+i].internet,&stu[n+i].math,&stu[n+i].english);
i++;
}
for (int k=0;k<num;k++)
{
	stu[k].aver = (stu[k].internet+stu[k].math+stu[k].english)/3.0;
}
n+=num; 
printf("\t\t\tSuccessed!\n");
printf("\t\t\t"); 
system("pause"); 
return(n); 
}   
void File1(Student *pt,int n)               /*将所有记录写入文件*/
{
int i=0;                     /*定义文件指针*/
if(fp == NULL)
{
	printf("文件不存在");
	return;
}
   remove(fileName);
   fp = fopen(fileName, "wt+");
   fprintf(fp,"%d\n",n);             /*循环写入数据*/
   printf("%d", n);
   while(i<n)
   {
fprintf(fp,"%s %s %s %d %d %d \n",stu[i].num,stu[i].name,stu[i].sex,stu[i].internet,stu[i].math,stu[i].english);
            i++;
               }
   // fclose(fp);           /*关闭文件*/
   printf("Successed!\n");          /*返回成功信息*/
} 




int menu()          /*菜单函数*/ 
{ 
int c;                                                     
do{ 
   printf("\t\t****学生信息管理系统菜单****\n");
   printf("\t\t  1. 编辑 \n");
   printf("\t\t  2. 显示 \n");
   printf("\t\t  3. 查询 \n"); 
   printf("\t\t  4. 排序\n"); 
   printf("\t\t  5. 统计\n"); 
   printf("\t\t  6. 文件 \n"); 
   printf("\t\t  0. 退出 \n"); 
   printf("************************************************************\n"); 
     printf("\t\t\t请选择(0-6):"); 
     scanf("%d",&c);
}while(c<0||c>6); 
return(c-0); /*返回选择*/ 

}   


int operation()
{
 printf("\t\t 1. 录入\n"); 
 printf("\t\t 2 .修改\n"); 
 printf("\t\t 3. 删除 \n");
 printf("\t\t 4. 插入 \n");
 printf("\t\t 按其它数字键退出 \n");
int i;
scanf("%d",&i);
return i;
}


int inquire()
{
 printf("\t\t 1. 按姓名查询\n"); 
 printf("\t\t 2 .按平均成绩查询\n");
 printf("\t\t 3 .按计算机成绩查询\n");
 printf("\t\t 4 .按数学查询\n");
 printf("\t\t 5 .按英语查询\n");
 printf("\t\t 6 .按平均成绩段查询\n");
 printf("\t\t 7 .按计算机成绩段查询\n");
 printf("\t\t 8 .按数学成绩段查询\n");
 printf("\t\t 9 .按英语成绩段查询\n");
 printf("\t\t  按其它数字键退出\n");
int i;
scanf("%d",&i);
return i;
}


int Sort()
{
     printf("\t\t 1. 按学号\n"); 
     printf("\t\t 2 .按计算机成绩\n");
     printf("\t\t 3 .按数学成绩\n");
     printf("\t\t 4 .按英语成绩\n");
	 printf("\t\t 5 .按平均成绩\n");
     printf("\t\t按其它数字键退出\n");
     
	 int i;
      scanf("%d",&i);
      return i;
}


int File()
{
 printf("\t\t 1. 从文件中读入数据\n"); 
 printf("\t\t 2 .将所有记录写入文件\n");  
 printf("\t\t   按其它数字键退出 \n");

int i;
scanf("%d",&i);
return i;
}





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值