以前的作业——用顺序表编一个学生管理系统

以前的作业——用顺序表编一个学生管理系统
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
typedef struct 

    int num; 
    char name[15]; 
    double score; 
}STD;
typedef struct
{
 STD * data;
 int length;
 int listsize;
}sqlist;
int create(sqlist *l,int maxsize);
int insert(sqlist *l,int i,STD x);
int dele(sqlist *l,int i,STD *x);
int update(sqlist l,int i,STD x);
int location(sqlist l,int *x);
int findscore(sqlist l,double x);
int dispsqlist(sqlist l);
int fun(sqlist *l,int n);
int menu();

//主函数
void main()
{
 int n,m,maxsize;
 double h;
 sqlist l;
 STD s;
    printf("请输入表长:");
 scanf("%d",&maxsize);
 create(&l,maxsize);
 l.listsize =maxsize;
    printf("请输入存入的学生信息个数:\n");
 scanf("%d",&m);
 l.length =m;
 for(int i=0;i<m;i++)
 {
  printf("请输入第%d个学生的学号、姓名、成绩\n",i+1);
  scanf("%d%s%lf",&l.data [i].num ,l.data [i].name ,&l.data [i].score );
 }
   
 while(1)
 {
  n=menu();
  switch(n)
  { 
   //创建新生数据表
  case 1:printf("请输入需要创建的新生人数:");
   scanf("%d",&maxsize);
   create(&l,maxsize);
   printf("按任意键继续!\n");
   getch();
   break;
   //插入新生数据
  case 2:printf("请输入插入的位置:\n");
   scanf("%d",&n);
   printf("请输入需要插入的新生学号、姓名、成绩,用空格隔开:\n");
   scanf("%d%s%lf",&s.num ,s.name ,&s.score );
   insert(&l,n,s);
   printf("按任意键继续\n");
   getch();
   break;
   //删除新生数据
  case 3:printf("请输入需要删除新生的学号:\n");
   scanf("%d",&s.num );
   n=location(l,&s.num );
   if(dele(&l,n,&s))
  {
   printf("删除学生数据为%d %s %.2f\n",s.num ,s.name ,s.score );
   printf("按任意键继续!\n");
  }
   getch();
   break;
   //修改新生数据
  case 4:printf("请输入需要修改的学生学号:\n");
   scanf("%d",&s.num  );
   n=location(l,&s.num );
   printf("请输入修改后的学生姓名、信息:\n");
   scanf("%s%lf",s.name ,&s.score );
   update(l,n,s);
   printf("按任意键继续!\n");
   getch();
   break;
   //查询成绩分段
  case 5:printf("请输入需要查询的成绩的下线:\n");
   scanf("%lf",&h);
   printf("满足成绩大于等于%.2f的新生如下:\n",h);
   findscore(l,h);
   printf("\n");
            printf("按任意键继续!\n");
   getch();
   break;
   //显示新生数据
  case 6:printf("新生成绩如下:\n");
   dispsqlist(l);
   printf("\n");
            printf("按任意键继续!\n");
   getch();
   break;
  case 7:fun(&l,l.length );
   printf("排序后\n");
            dispsqlist(l);
      printf("按任意键继续!\n");
   getch();
   break;
  case 0:exit(0);
  }//switch
 }//while
}
//
int create(sqlist *l,int maxsize)
{
 l->data =new STD[maxsize];
 if(l->data ==NULL){printf("申请内存失败!\n");return 0;}
 l->length =0;
 l->listsize =maxsize;
    return 1;
}
//
int insert(sqlist *l,int i,STD x)
{
 int k;
 if(i<1||i>l->length +1){printf("插入位置异常!\n");return 0;}
 if(l->length ==l->listsize ){printf("容量不够!\n");return 0;}
 for(k=l->length ;k>=i;k--)
  l->data[k]=l->data [k-1];
 l->data [i-1]=x;
 l->length ++;
 return 1;
}
//
int dele(sqlist *l,int i,STD *x)
{
 int k;
 if(i<1||i>l->length ){printf("位置异常!\n");return 0;}
 if(l->length ==0){printf("没有数据,不能删除!\n");return 0;}
 *x=l->data [i-1];
 for(k=i;k<l->length ;k++)
  l->data [k-1]=l->data [k];
 l->length --;
 return 1;
}
//
int update(sqlist l,int i,STD x)
{
    if(i<1||i>l.length ){printf("位置异常!\n");return 0;}
 if(l.length ==0){printf("没有数据,不能更新!\n");return 0;}
 l.data [i-1]=x;
 return 1;
}
//
int location(sqlist l,int *x)
{
 int i;
 if(l.length ==0){printf("没有数据!\n");return 0;}
 for(i=0;i<l.length ;i++)
  if(*x==l.data [i].num )return i+1;
  return 0;
}
//
int findscore(sqlist l,double x)
{
 for(int i=0;i<l.length ;i++)
  if(l.data [i].score>=x)
   printf("%d  %s  %.2f\n",l.data [i].num ,l.data [i].name ,l.data [i].score);
  return 1;
}
//
int dispsqlist(sqlist l)
{
 int i;
 if(l.length ==0){printf("没有数据!\n");return 0;}
 for(i=0;i<l.length ;i++)
  printf("%d  %s  %.2f\n",l.data [i].num ,l.data [i].name ,l.data [i].score );
 return 1;
}
//
int fun(sqlist *l,int n)

    STD st; 
    for(int t=0;t<n;t++)//冒泡排序
        for(int i=0;i<n-t-1;i++) 
            if(l->data[i].score<l->data [i+1].score)//当分数比后边的小时就交换彼此的数据。 
            { 
                st=l->data[i];
    l->data[i]=l->data[i+1] ; 
                l->data [i+1] = st; 
   }
    return 1; 

//
int menu()
{
 int n;
 while(1)
 {
  printf("******欢迎使用新生成及管理系统******\n");
  printf("1.创建一个空表    2.插入新生数据\n");
  printf("3.删除新生数据    4.修改新生数据\n");
  printf("5.查询成绩分段    6.显示新生数据\n");
  printf("7.新生成绩排序    0.退出\n");
  printf("************************************\n");
  printf("请选择功能编号(0-7):\n");
  scanf("%d",&n);
  getchar();//吃回车
  if(n<0||n>8)
   printf("输入有误,重新选择,按任意键继续!\n");
  else return n;
 }
}