⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 051150033.cpp

📁 学生成绩管理系统 (1)每一条记录包括一个学生的学号、姓名、3门课成绩、平均成绩。 (2)输入功能:可以一次完成若干条记录的输入。 (3)排序功能:按学生平均成绩进行排序。 (4)插入功能:
💻 CPP
字号:
#include <stdio.h>      /*I/O函数*/
#include <stdlib.h>     /*其它说明*/
#include <string.h>     /*字符串操作函数*/
#define  M 1000
int N=0;                /*记录已经存在的记录条数*/
int H=0;
struct student          /*定义数据结构*/
 { char number[8];
   char name[16];
   float score[3];
   float average;
 }stud[M],temp;

/*以下是函数声明*/
  void inorder(struct student stud[]);   /*排列记录*/
  void insert(struct student stud[]);    /*插入记录*/
  void enter(struct student stud[]);     /*输入记录*/
  void print(struct student stud[]);     /*显示记录*/
  void quit(void);                       /*退出系统*/
  int flag(struct student stud[]);       /*返回值为0或1*/
  int menu(void);                        /*菜单*/

void main()             /*主函数*/
{ 
    for(;;)             /*无限循环*/
    { switch(menu())    /*调用主菜单函数,返回值整数作开关语句的条件*/
      { case 1: enter(stud);  break;   /*输入记录*/
	case 2: inorder(stud);break;   /*排序*/
        case 3: insert(stud); break;   /*插入记录*/
        case 4: quit();                /*如菜单返回值为4程序结束*/
       }
     }
}

/*输入数据函数*/
void enter(struct student stud[])
 { int n=0,i,j,k,c;
   char b[4];
   float sum;
   printf("How many students' record do you want to enter? n=%d",n);
   scanf("%d",&n);      /*输入一次要输入记录数*/
   for(i=0;i<n;)
    { sum=0;            /*统计三科总分*/
      printf("Input the %dth student's number ",N+1);
      scanf("%s",stud[N].number);        /*输入学号*/
      /*以下if-else语句判断所输记录是否存在*/
      if(flag(stud))    /*调用返回值为0或1函数,判断所输入的学号是否已经存在,存在就执行if语句*/
       {
         printf("The record has exist.\n");
         printf("Input again.");
         getchar();
       }
      else
       { printf("Input the %dth student's name ",N+1);
         scanf("%s",stud[N].name);       /*输入姓名*/
         for(j=0;j<3;j++)
          { do
            {
             printf("Input the %dth student's score(%d)",N+1,j+1);      /*打印提示*/
stud[N].score[j]=atof(b);   /*将字符串强制转换成实型,得值赋给stud[N].score[j]*/
             if(stud[N].score[j]<=0||stud[N].score[j]>100)              /*判断分数是否在0-100之间*/
              {
               k=1;                      /*分数不在0-100之间时k值为1*/
               printf("Error input !!!\n");
               printf("Input again ...\n");            /*打印出错提示*/
              }
             else
              k=0;                       /*分数在0-100之间时k值为0*/
            } while(k);                   /*由k值决定是否要循环*/
            sum+=stud[N].score[j];       /*统计三科总分*/
          }
         stud[N].average=sum/3.0;        /*平均分*/
        }
         printf("\nEnter success !!!\n");
         printf("\nPress any key to return.");
	 getchar();
         N++;                            /*记录数加1*/
         i++;
         H=1;
      }
 }

/*排序函数*/
void inorder(struct student stud[])
 { int i,j,k;
   for(i=0;i<N-1;i++)
    { k=i;
      /*以下for语句为选择法排序*/
      for(j=i+1;j<N;j++)
       if(stud[j].average>stud[k].average)
         k=j;
         if(k!=i)
          {
           temp=stud[k];
           stud[k]=stud[i];
           stud[i]=temp;
           H=1;
          }
    }
   printf("\n\n\n\n\n\n\n\n\n\n\n");
   printf("                      ");
   printf("********* Has been inoder!! *********\n");     /*排序成功提示*/
 }


/*插入记录函数*/
void insert(struct student stud[])
 { int i,j,k;
   float sum;
   char flag='y',b[4];
   while(flag=='y')
    { sum=0;
      k=0;
      printf("Input the student's number you want to insert:");
      scanf("%s",stud[N].number);        /*输入要插入记录的学号*/
      for(i=0;i<N;i++)
       if(strcmp(stud[i].number,stud[N].number)==0)       /*查找要插入记录是否存在*/
         k=1;
      if(k)             /*判断要插入记录是否存在*/
       {
         printf("The record has exist.\n");
       }
      else
       { printf("Input the student's name you want to insert:");
         scanf("%s",stud[N].name);       /*输入要插入记录的名字*/
         for(j=0;j<3;j++)
          { do
             { printf("Input the student's score(%d):",j+1);
               scanf("%s",b);            /*输入分数*/
               stud[N].score[j]=atof(b);
               if(stud[N].score[j]<=0||stud[N].score[j]>100)    /*判断分数是否在0-100之间*/
                { k=1;
                  printf("Error input !!!\n");
                  printf("Input again ...\n");
                }
               else
                 k=0;
             }while(k);
            sum=sum+stud[N].score[j];    /*三科总分*/
           }
           stud[N].average=sum/3.0;      /*平均分*/
           /*以下for语句为插入*/
           for(j=0;j<N;j++)
            if(stud[j].average<stud[N].average)
             { i=N;
               temp=stud[N];
               for(;i>j;)
                { stud[i]=stud[i-1]; 
                  i--;
                }
               stud[j]=temp;
               j=N;
             }
           N++;
           H=1;         /*记录数加1*/
           printf("\nInsert success !!!\n\n");
        }
       printf("If you want to go on press:y\n");
       printf("Else press any key to menu:");
       flag=getchar();     /*获取一个字符判断是否要继续插入*/
     }
 }

/*退出系统函数*/
void quit(void)
 { char a;
   if(H)
    { printf("\n\n\n\n\n\n\n\n\n\t\t  Do you want to save the datas have changed ?");
      printf("\n\n\t\t\t\t   y & n ? ");
      printf("\n\t\t\t\t     ");
      a=getchar();
      printf("%c",a);
      getchar();
      if(a=='y')
       { 
         /*以下printf语句为打印再见语句*/
         printf("\n\n\n\n\n\n\n\n\n\n\n");
	 printf("\t\t\t\b\b\b\b**********");
	 printf(" See you\a");
	 printf(" next time\a");
	 printf(" !\a");
         printf(" **********");
         printf("\n\n\n\n\n\n\n\n\n\n\n");
         printf("\t\t\t********** Bye Bye !!! **********");
	 exit(0);       /*退出系统*/
       }

      else
       {
        /*以下printf语句为打印再见语句*/
        printf("\n\n\n\n\n\n\n\n\n\n\n");
	printf("\t\t\t\b\b\b\b**********");
	printf(" See you\a");              
	printf(" next time\a");            
	printf(" !\a");                    
	printf(" **********");
	printf("\n\n\n\n\n\n\n\n\n\n\n");
        printf("\t\t\t********** Bye Bye !!! **********");
        exit(0);        /*退出系统*/
       }
    }
   else
    {/*以下printf语句为打印再见语句*/
     printf("\n\n\n\n\n\n\n\n\n\n\n");
     printf("\t\t\t\b\b\b\b**********");
     printf(" See you\a");              
     printf(" next time\a");            
     printf(" !\a");                    
     printf(" **********");
     printf("\n\n\n\n\n\n\n\n\n\n\n");
     printf("\t\t\t********** Bye Bye !!! **********");
     exit(0);           /*退出系统*/
    }
 }

/*返回值为0或1函数*/
int flag(struct student stud[])
 { int i,flag=0;
   /*以下判断学号是否相同*/
   for(i=0;i<N;i++)
   if(strcmp(stud[i].number,stud[N].number)==0)
     flag=1;            /*相同返回1,否则返回0*/
   return(flag);
 }

/*菜单函数*/
int menu(void)
 { int n;
   char a[5];
   /*以下是菜单图案*/
   do
   {
    printf("\n");
    printf("\t\t ________________________________________________\n");
    printf("\t\t||\t\t    The menu:\t\t\t||\n");
    printf("\t\t||----------------------------------------------||\n");
    printf("\t\t|| (1) Enter the studens' records               ||\n");
    printf("\t\t||----------------------------------------------||\n");   
    printf("\t||      || (2) inorder the records by the average score ||      ||\n");
    printf("\t||------||----------------------------------------------||------||\n");
    printf("\t||      || (3) Insert a student's record                ||      ||\n");
    printf("\t||      ||----------------------------------------------||      ||\n");
    printf("\t\t|| (4) Quit                                     ||\n");
    printf("\t\t|------------------------------------------------|\n");
    /*以下语句是输入菜单函数要返回的值*/
    printf("\n\t\t\tChoose the item you want (1-4):( )\b\b");
    scanf("%s",a);
    n=atoi(a);
    if(n<1||n>4)
      {
       printf("\t\t\t    Error input. Input again.");
      }
   }
   while(n<1||n>4);
   return(n);
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -