WHCSRL 技术网

c语言用顺序表实现学生信息的添加、插入、删除、查找功能

#include<stdio.h>
#include<stdlib.h>
#include<string.h> 
#define MAX  20

typedef    struct{
        int   no;  //8位学号 
        char name[20];  //姓名
        float score;         //成绩 
}Student;
    
typedef    struct{
    Student *elem;  //指向数据元素的基地址 
    int length;     //线性表的当前长度 
}SqList;         

void InitList(SqList &L) //初始化 
{
   L.elem=(Student *)malloc(MAX*sizeof(Student));// 为顺序表分配一个大小为MAX的数组空间
   //L.elem= new Student[MAX];
   L.length=0;
   if(!L.elem)
   {
      printf("顺序表初始化失败"); //储存分配失败退出
   } else printf("顺序表初始化成功"); 
  

 /* void GetElem(SqList L,int i,Student &e)
{
    if (i<1 || i>L.length) 
    {
      printf("error");
    }
    e=L.elem[i-1];

}*/
void LocateElem (SqList &L,int i)  //对指定位置进行查找,并返回其信息 
{
        if(1<=i&&i<=L.length)
        {
                    printf(" 该同学的姓名是:%%s ",L.elem[i-1].name);
                    printf(" 该同学的学号是:%%d ",L.elem[i-1].no);
                    printf(" 该同学的成绩是:%%f ",L.elem[i-1].score);    
        }else printf("没有该同学"); 
        system("PAUSE");
        system("cls"); 
}
void FindElem(SqList &L,char e[])  //根据姓名进行查找,并返回此学生的学号和成绩 
{
    int l=0;
    for(int i=0;i<L.length;i++)
        {
          if(strcmp(L.elem[i].name,e)==0)    
            {
                    printf(" 该同学的学号是:%%d,",L.elem[i].no);
                    printf(" 该同学的成绩是:%%f.",L.elem[i].score);
                    l++;
            }
        }
        if(l==0)
        {
            printf(" 没有该同学信息");
        }
        system("PAUSE");
        system("cls"); 
}
void  ListInsert(SqList &L,int i)  //在顺序表L中第i个位置插入新的元素e,并判断插入范围是否合法 
{
    system("cls"); 
    if((i<1)||(i>L.length+1))
    {
        printf(" 输入的i不合法");
    }
        system("PAUSE");
        system("cls"); 
    if(L.length==MAX)
    { 
    printf(" 表已满,不可添加");
        system("PAUSE");
        system("cls"); 
    } 
    
      for(int j=L.length-1;j>=i-1;j--)    
    { 
        L.elem[j+1]=L.elem[j];
    }             //插入位置以及之后的元素后移 
    printf("请按依次输入您想要插入的学生信息的学号、姓名、成绩(用空格隔开): ");
    scanf("%%d%%s%%f",&L.elem[i-1].no,&L.elem[i-1].name,&L.elem[i-1].score);           //将新元素e放在第i个位置上 
    ++L.length;
    printf("插入学生信息成功 "); 
    printf("请按任意键返回"); 
/*    system("PUASE");
    system("cls");*/

int  ListDelete(SqList &L,int i)  //在顺序表中删除第i个元素 
{
    if(i<1||i>L.length)
    {
        printf(" 您输入的i值不合法"); 
        system("PAUSE");
        system("cls");     
        return 0;
    }
    int j;
    j=i;    
        for(int j=i;j<=L.length-1;j++)
        {
            L.elem[j-1]=L.elem[j];
        }
    --L.length;
    printf(" 删除成功");
        system("PAUSE");
        system("cls");     
}

void InitSqList(SqList &L,int n)   // 传入初始化好的顺序表地址,以及要录入学生的人数 

     int m,i;
    printf(" 请按照顺序填写 学号 姓名 成绩 ");
    for(i=0;i<n;i++)
    {
         m=1;
        printf(" 请输入学第%%d位学生的信息 ",i+1);    
        printf("学号:"); 
        while(m) 
        {
          scanf("%%d",&L.elem[i].no);
          if(L.elem[i].no<0)
          {
              printf("您输入的数字不合法 请重新输入第%%d位学生的八位学号:",i+1);
          } else m=0; 
        }
        printf("姓名:");
        m++;
        while(m)
        {
         scanf("%%s",&L.elem[i].name);
          if(L.elem[i].name<0)
          {
              printf("您输入的姓名不合法 请重新输入第%%d位学生的姓名:",i+1);
          } else m=0; 
        }
        printf("成绩:");
        m++; 
            while(m)
        {
         scanf("%%f",&L.elem[i].score);
          if(L.elem[i].score<0)
          {
              printf("您输入的成绩不合法 请重新输入第%%d位学生的成绩:",i+1);
          } else m=0; 
        }
    } 
    L.length=n+L.length;
    printf("录入信息成功。"); 
    system("PAUSE"); //防止窗口关闭
    system("cls"); //清屏 
}
void OutSqList(SqList &L)
{
    system("cls");
    printf(" 下面是学生信息 ");
    printf(" 学号            姓名            成绩 ");
    for(int i=0;i<L.length;i++)
    {
        printf(" %%d",L.elem[i].no); 
        printf(" %%s",L.elem[i].name); 
        printf(" %%f",L.elem[i].score); 
        printf(" ");
    }
    printf(" 表中学生总人数为:%%d ",L.length);
    system("PAUSE");
    system("cls");

void Display()
{
    printf(" ");
    printf(" ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇ ");
    printf(" ************************************************ ");
    printf(" *******♂欢迎进入学生信息功能管理界面♀******* ");
    printf(" ************************************************ ");
    printf(" ************************************************ ");
    printf(" ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ ");
    printf(" →←→←→←1. 学生信息添加系统 →←→←→←→ ");
    printf(" ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ ");
    printf(" →←→←→←2.学生信息删除系统 →←→←→←→ ");
    printf(" ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ ");
    printf(" →←→←→←3.显示学生信息系统 →←→←→←→ ");
    printf(" ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ ");
    printf(" →←→←→←4.插入学生信息修改系统 →←→←→←→ ");
    printf(" ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ ");
    printf(" →←→←→←5.查找学生信息系统 →←→←→←→ ");
    printf(" €€ €€ €€ €€ €€ €€ €€ €€ €€ €€   ");
    printf(" ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇ ");        
    printf(" ");
//    printf(" 请输入所需功能的对应字母 ");
}

main()
{
   char xh[20];
   char xm[20];
   float cj; 
   int numb,n;
   SqList L;
   InitList(L);  //初始化顺序表 
   while(1)
    {
      Display();
      printf(" 请输入所需功能的对应数字 ");
      scanf("%%d",&numb);
      switch (numb)
      {
          case 1: 
          system("cls");
          printf("请输入要录入学生的人数:"); 
          scanf("%%d",&n);
          InitSqList(L,n);
          break;
        case 2:
                int m;
                system("cls");
                printf("请输入要删除的第几个位置的学生信息:"); 
                scanf("%%d",&m);
                ListDelete(L,m);
                break;
        case 3:
                OutSqList(L); 
                break;
        case 4:
                int i;  
                printf("请输入要在第几个位置插入学生信息:"); 
                scanf("%%d",&i);
                ListInsert(L,i);
                    system("PUASE");        
                    system("cls");
                break;
        case 5:
                int n,q;
                char e[20];
                system("cls");
                 printf(" 1.根据姓名进行查找 ");
                printf(" 2.对指定位置查找 ");
                printf(" 请输入需要进行查找的类型:");
                scanf("%%d",&n);
                if(n==1)
                {
                    printf(" 请输入要查找的姓名:");
                    scanf("%%s",&e);
                    FindElem(L,e); 
                } else 
                 {
                     printf(" 请输入要查找的学生序号:");
                     scanf("%%d",&q);
                     LocateElem (L,q);
                         
                 }
          
      } 
    }    
}
 

推荐阅读