增删改查成绩并排序



#include<stdio.h>

#include<stdlib.h>

#define NUM 30                         //数组个数最大 30

typedef struct

{

   
int no;

   
int score;

}Student;

//被调用函数的声明区

void create();

void display();

void findchj();

void findsxh();

void sort_big();

void sort_small( );

void insert();

void yidong();

void replace();

 

void main()

{

Student stu[NUM];        

int n=0;                       //记录元素的实际个数

int flag=0;                    //记录是否已经建立过成绩数组,flag=0 为未建立

                               //若已建立,则不能重复建立

int choice;

int chj,sxh;

system("cls");

system("color f0");

do

{

        printf("\t\t\t 1. 建立成绩数组 \n");

    
printf("\t\t\t 2. 显示成绩数组 \n");

    
printf("\t\t\t 3. 按给定成绩查找 \n");

    
printf("\t\t\t 4. 按顺序号查询 \n");

    
printf("\t\t\t 5. 从高到低排序输出 \n");

    
printf("\t\t\t 6. 从低到高排序输出 \n");

    
printf("\t\t\t 7. 按给定顺序号插入成绩 \n");

    
printf("\t\t\t 8. 按给定顺序号删除成绩 \n");

    
printf("\t\t\t 9. 按给定顺序号修改成绩 \n");

    
printf("\t\t\t 0. 结束程序 \n");

  
printf("\t\t\t 请输入您的选择:");

  
scanf("%d",&choice);

  
fflush(stdin);

switch(choice)                          

{

case 1:             

      
if(flag==0)

          {

                 printf("\t\t\t请输入建立成绩数组元素个数:\n");

                 scanf("%d",&n);

                 display();

                 break;

          }

          else

           
break;

case 2:    


       if(flag==0)

       {

              printf("数据库为空\n");

              break;

       }

       else

       {

              display();

              break;

       }

case 3: 

       if(flag==0)

       {

              printf("数据库为空\n");

              break;

       }

       else

       {

       

              printf("\t\t\t请输入要查询的成绩:\n");

              scanf("%d",&chj);

        
findchj();

               break;

       }

case 4: 


       if(flag==0)

       {

              printf("数据库为空\n");

              break;

       }

       else

       {

       
printf("\t\t\t请输入要查询的序号:\n");

              scanf("%d",&sxh);

              if(sxh<=NUM)

                     findsxh();

              else

                     printf("顺序号超出范围,不能操作\n");

              break;

       }

case 5: 


       if(flag==0)

       {

              printf("数据库为空\n");

              break;

       }

       else

       {

              sort_big();

              break;

       }

case 6:

       if(flag==0)

       {

              printf("数据库为空\n");

              break;

       }

       else

       {

              sort_small(
);

              break;

       }

case 7: 


       if(flag==0)

       {

              printf("数据库为空\n");

              break;

       }

       else

       {

               printf("\t\t\t请输入要查询的序号:\n");

              scanf("%d",&n);

              if(n<=NUM)

                     insert();

              else

                     printf("顺序号超出范围,不能操作\n");

              break;

       }

case 8: 

              if(flag==0)

              {

              printf("数据库为空\n");

              break;

              }

              else

              {

                     printf("\t\t\t请输入要查询的序号:\n");

                  scanf("%d",&n);

                  if(n<=NUM)

                         yidong();

                  else

                          printf("顺序号超出范围,不能操作\n");

                  break;

              }

case 9:  


       if(flag==0)

              {

              printf("数据库为空\n");

              break;

              }

       else

       {

              printf("\t\t\t请输入要查询的序号:\n");

              scanf("%d",&n);

              if(n<=NUM)

                     replace();

              else

                     printf("顺序号超出范围,不能操作\n");

              break;

       }

case 0: printf("\n\t\t\t 欢迎你再次使用,再见!\n");

exit(0);

default :printf("\n \t\t\t 对不起,您的选择有误,请重新输入!!\n");

}//switch

system("pause");

system("cls");

}while(1);

}

void create(Student s[],int n)

{

       int
i,flag=0;

       printf("请输入元素实际个数\n");

       scanf("%d",&n);

       for(i=0;i<n;i++)

       {

              printf("请输入学生序号\n");

              scanf("%d",&s[i].no);

              printf("请输入成绩\n");

              scanf("%d",&s[i].score);

       }

       flag+=1;

                                                          
//建立成绩数组

}

void display(Student s[],int n)

{

       int
i;

       printf("|
序 号 | 成 绩 |\n");

       for(i=0;i<n;i++)

       {

     
printf("|%5d|%5d|\n",s[i].no,s[i].score);

       }

                                                           
//显示成绩数组

}

void findchj(int chj,Student s[],int n)

{

       int
i,j=0;

       printf("输入你想要查询的成绩:\n");

              scanf("%f",&chj);

              for(i=0;i<n;i++)

              {

                     if(chj!=s[i].score)

                     j+=1;

              }

if(j!=4)

{

       for(i=0;i<n;i++)

       {

              if(chj==s[i].score)

              {

                     printf("|
序 号 | 成 绩 |\n");

                     printf("|%5d|%5d|\n",s[i].no,s[i].score);

              }

       }

}

else

printf("数据库中无此成绩\n");

 //按给定成绩查找,无此成绩则显示数据库中无此成绩,有则把顺序号输出,并输出对应成绩;

}

void findsxh(int sxh,Student s[],int n)

{

       int
i,j=0;

       for(i=0;i<n;i++)

       {

              if(sxh!=s[i].no)

                     j+=1;

       }

       if(j!=4)

       {

       for(i=0;i<n;i++)

       {

              if(sxh==s[i].no)

              {

                     printf("|
序 号 | 成 绩 |\n");

                     printf("|%5d|%5d|\n",s[i].no,s[i].score);

              }

       }

       }

       else

              printf("超出范围\n");

  //按给定顺序号查找,顺序号超出范围则显示超出范围,否则把顺序号输出,并输出对应成绩;

}

void sort_big(Student s[],int n)

{

       int
i,j,t;

       for(i=0;i<n-1;i++)

       {

              if(s[i].score<s[i+1].score)

              {

                     t=s[i].score;

                     s[i].score=s[i+1].score;

                     s[i+1].score=t;

 

                     j=s[i].no;

                     s[i].no=s[i+1].no;

                     s[i+1].no=j;

              }

       }

       printf("|
序 号 | 成 绩 |\n");

       for(i=0;i<n;i++)

       {

     
printf("|%5d|%5d|\n",s[i].no,s[i].score);

       }

                                                 
//按从高到低顺序排序并输出

}

void sort_small(Student s[],int n )

{

    
int i,j,t;

       for(i=0;i<n-1;i++)

       {

              if(s[i].score>s[i+1].score)

              {

                     t=s[i].score;

                     s[i].score=s[i+1].score;

                     s[i+1].score=t;

 

                     j=s[i].no;

                     s[i].no=s[i+1].no;

                     s[i+1].no=j;

              }

       }


       printf("|
序 号 | 成 绩 |\n");

       for(i=0;i<n;i++)

       {

     
printf("|%5d|%5d|\n",s[i].no,s[i].score);

       }                                            //按从低到高顺序排序并输出

}

void insert(int sxh,int chj,Student s[],int
n)

{

       int
i,c;

       int
a[2];

       printf("请输入插入的序号\n");

       scanf("%d",&a[0]);

       for(i=0;i<n;i++)

       {

              c=strcmp(s[i].no,a[0]);

              if(c==0)

              {   

                     printf("学号重复!!请重新输入:");

                            scanf("%d",&a[0]);

              }

       }

       printf("请输入这名同学的成绩\n");

       scanf("%d",&a[1]);

       if(a[1]<0||a[1]>100)

       {

              printf("输入成绩错误,请重新输入\n");

               printf("请输入这名同学的成绩\n");

             scanf("%d",&a[1]);

       }

       n=n+1;

 

                                                   
//按给定顺序号插入成绩

}

void yidong(int sxh,Student s[],int n)

{

  
int i,c,j,b=0;

  
int a[2];

       printf("请输入你想要删除的学号\n");

       scanf("%d",&a[0]);

       for(i=0;i<n;i++)

       {

              c=strcmp(s[i].no,a[0]);

              if(c==0)

              b++;

       }

       if(b!=0)

       {

              for(i=0;i<n;i++)

              {

                     if(strcmp(s[i].no,a[0])==0)

                     {

                            for(j=i;j<n;j++)

                            {

                                   s[j].score=s[j+1].score;

                                   s[j].no=s[j].no-1;

                            }

                     }

              }

       }

       else

              printf("学号不存在\n");

       n=n-1;                                            //按给定顺序号删除成绩

}

void replace(int sxh,Student s[],int n)

{

       int
i,c,b=0;

       int
a[2];

       printf("请输入想要修改成绩的序号\n");

       scanf("%d",&a[0]);

       for(i=0;i<n;i++)

       {

              c=strcmp(s[i].no,a[0]);

              if(c==0)

              b++;

       }

       if(b!=0)

       {

              printf("请输入要修改的成绩\n");

              scanf("%d",&a[1]);

              for(i=0;i<n;i++)

              {

                     if(strcmp(s[i].no,a[0])==0)

                            s[i].score=a[1];

              }

       }

       else

              printf("该序号不存在\n");

 

                                                       //按给定顺序号修改成绩

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值