zoukankan      html  css  js  c++  java
  • 学生信息管理系统-顺序表&&链表(数据结构第一次作业)

    实验目的 :

    1 、掌握线性表的定义;

    2 、掌握线性表的基本操作,如建立、查找、插入和删除等。

    实验内容:

    定义一个包含学生信息(学号,姓名,成绩)的的 顺序表和链表,使其具有如下功能:

    (1) 根据指定学生个数,逐个输入学生信息;

    (2) 逐个显示学生表中所有学生的相关信息;

    (3) 根据姓名进行查找,返回此学生的学号和成绩;

      (4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);

      (5) 给定一个学生信息,插入到表中指定的位置;

      (6) 删除指定位置的学生记录;

      (7) 统计表中学生个数。

     

    参考信息 :

    Definition of structure student :

    typedef struct {

        char no[8];   //8 位学号

        char name[20]; // 姓名

        int price;     // 成绩

    }Student;

     

    Definition of sequential list:

    typedef  struct {

      Student  *elem;     // 指向数据元素的基地址

      int  length;       // 线性表的当前长度                                                           

     }SqList ;

             

    Definition of linked list :

    typedef struct LNode{

         Student   data;       // 数据域

         struct LNode  *next;   // 指针域

    }LNode,*LinkList;  

     

     

    实验要求 :

    (1) 程序要添加适当的注释,程序的书写要采用 缩进格式 。

    (2) 程序要具在一定的 健壮性,即当输入数据非法时, 程序也能适当地做出反应,如 插入删除时指定的位置不对等等。

    (3) 程序要做到 界面友好,在程序运行时用户可以根据相应的提示信息进行操作。

    (4) 上传源程序到课堂派。顺序表的源程序保存为SqList.cpp,链表的源程序保存为LinkList.cpp

     

     

    顺序表的源程序:

     

    #include<stdio.h>  
    #include<malloc.h>  
    #include<stdlib.h>  
    #include<string.h>  
    #define OK 1  
    #define ERROR 0  
    #define OVERFLOW -2  
    #define MAXSIZE 100  
      
    typedef int Status; // 定义函数返回值类型  
      
    typedef struct  
    {  
        char no[10]; // 学号  
        char name[20]; // 姓名  
        int score; // 成绩   
    }student;  
      
    typedef student ElemType;  
      
    typedef struct  
    {  
        ElemType *elem; // 存储空间的基地址   
        int length; // 当前长度   
    }SqList;  
      
    Status InitList(SqList *L) // 构造空的顺序表 L   
    {     
        L->elem=(ElemType *)malloc(sizeof(ElemType)*MAXSIZE);  
        if(!L->elem)  exit(OVERFLOW);  
        L->length=0;  
        return OK;  
    }  
      
    ElemType GetElem(SqList &L,int i) // 访问顺序表,找到 i位置,返回给 e  
    {  
        return L.elem[i];  
    }  
      
    int Search(SqList &L,char str[]) // 根据名字查找,返回该同学在顺序表中的编号   
    {  
        for(int i=1;i<=L.length;i++)  
        {  
            if(strcmp(L.elem[i].name,str)==0)  
                return i;  
        }  
        return 0;  
    }  
      
    Status ListInsert(SqList &L,int i,ElemType e) // 在 i位置插入某个学生的信息   
    {  
        if((i<1)||(i>L.length+1)) return ERROR;  
        if(L.length==MAXSIZE)   return ERROR;  
        for(int j=L.length;j>=i;j--)  
        {  
            L.elem[j+1]=L.elem[j];  
        }  
        L.elem[i]=e;  
        ++L.length;  
        return OK;  
    }  
      
    Status ListDelete(SqList &L,int i) // 在顺序表中删除 i位置的学生信息   
    {  
        if((i<1)||(i>L.length))   return ERROR;  
        for(int j=i;j<=L.length;j++)  
        {  
            L.elem[j]=L.elem[j+1];  
        }  
        --L.length;  
        return OK;  
    }  
      
    void Input(ElemType *e)  
    {  
        printf("姓名:");  scanf("%s",e->name);  
        printf("学号:");  scanf("%s",e->no);  
        printf("成绩:");  scanf("%d",&e->score);  
        printf("输入完成
    
    ");  
    }  
      
    void Output(ElemType *e)  
    {  
        printf("姓名:%-20s
    学号:%-10s
    成绩:%-10.2d
    
    ",e->name,e->no,e->score);  
    }  
      
    int main()  
    {  
        SqList L;  
        ElemType a,b,c,d;  
        printf("------------10.2.34版-----------
    ");  
        puts("1. 构造顺序表");   
        puts("2. 录入指定人数的学生信息");  
        puts("3. 显示学生表中的所有信息");  
        puts("4. 根据姓名查找该学生,并返回学号和成绩");  
        puts("5. 根据某指定位置显示该学生信息");   
        puts("6. 在指定位置插入学生信息");  
        puts("7. 在指定位置删除学生信息");  
        puts("8. 统计学生个数");  
        puts("0. 退出");
        printf("------------------------
    ");
        int x,choose;  
        while(1)  
        {  
            puts("请输入你要选择的功能前的序号:");  
            scanf("%d",&choose);  
            if(choose==0)   break;  
            switch(choose)  
            {  
                case 1:  
                    if(InitList(&L))  
                        printf("成功建立顺序表
    
    ");  
                    else  
                        printf("顺序表建立失败
    
    ");  
                    break;  
                case 2:  
                    printf("请输入要录入学生的人数(小于100):");  
                    scanf("%d",&x);  
                    for(int i=1;i<=x;i++)  
                    {  
                        printf("第%d个学生:
    ",i);  
                        Input(&L.elem[i]);  
                    }  
                    L.length=x;  
                    puts("");  
                    break;  
                case 3:  
                    for(int i=1;i<=x;i++)  
                    {  
                        a=GetElem(L,i);  
                        Output(&a);  
                    }  
                    break;  
                case 4:  
                    char s[20];  
                    printf("请输入要查找的学生姓名:");  
                    scanf("%s",s);  
                    if(Search(L,s))  
                        Output(&L.elem[Search(L,s)]);  
                    else  
                        puts("对不起,查无此人");  
                    puts("");  
                    break;  
                case 5:  
                    printf("请输入要查询的位置:");  
                    int id1;  
                    scanf("%d",&id1);  
                    b=GetElem(L,id1);  
                    Output(&b);  
                    break;  
                case 6:  
                    printf ("请输入要插入的位置:");  
                    int id2;  
                    scanf("%d",&id2);  
                    printf("请输入学生信息:
    ");  
                    Input(&c);  
                    if(ListInsert(L,id2,c))  
                    {  
                        x++;  
                        puts("插入成功");  
                        puts("");  
                    }  
                    else  
                    {  
                        puts("插入失败");  
                        puts("");     
                    }  
                    break;  
                case 7:  
                    printf("请输入要删除的位置:");  
                    int id3;  
                    scanf("%d",&id3);  
                    if(ListDelete(L,id3))  
                    {  
                        x--;  
                        puts("删除成功");  
                        puts("");  
                    }  
                    else  
                    {  
                        puts("删除失败");  
                        puts("");     
                    }  
                    break;  
                case 8:  
                    printf("已录入的学生个数为:%d
    
    ",L.length);  
                    break;  
            }  
        }  
        printf("
    
    谢谢您的使用,请按任意键退出
    
    
    ");  
        system("pause");  
        return 0;  
    }  


    链表的源程序:

    #include<stdio.h>  
    #include<malloc.h>  
    #include<stdlib.h>  
    #include<string.h>  
    #define OK 1  
    #define ERROR 0  
    #define OVERFLOW -2  
    #include<iostream>
    using namespace std;
      
    typedef int Status; // 定义函数返回值类型   
      
    typedef struct  
    {  
        char no[10]; // 学号  
        char name[20]; // 姓名  
        double score; // 成绩   
    }student;  
      
    typedef student ElemType;  
      
    typedef struct LNode  
    {  
        ElemType data; // 数据域  
        struct LNode *next; //指针域   
    }LNode,*LinkList;  
      
    Status InitList(LinkList &L) // 构造空链表 L   
    {  
        L=(struct LNode*)malloc(sizeof(struct LNode));  
        L->next=NULL;  
        return OK;  
    }  
      
    Status GetElem(LinkList L,int i,ElemType &e) // 访问链表,找到 i位置的数据域,返回给 e   
    {  
        LinkList p;  
        p=L->next;  
        int j=1;  
        while(p&&j<i)  
        {  
            p=p->next;  
            ++j;  
        }  
        if(!p||j>i)  return ERROR;  
        e=p->data;  
        return OK;  
    }  
      
    Status Search(LNode L,char str[],LinkList &p) // 根据名字查找   
    {  
        p=L.next;   
        while(p)  
        {  
            if(strcmp(p->data.name,str)==0)  
                return OK;  
            p=p->next;  
        }  
        return ERROR;  
    }  
      
    Status ListInsert(LinkList L,int i,ElemType e) // 在 i个位置插入某个学生的信息   
    {  
        LinkList p,s;  
        p=L;  
        int j=0;  
        while(p&&j<i-1)  
        {  
            p=p->next;  
            ++j;  
        }  
        if(!p||j>i-1)    return ERROR;  
        s=(struct LNode*)malloc(sizeof(LNode));  
        s->data=e;  
        s->next=p->next;  
        p->next=s;  
        return OK;  
    }  
      
    Status ListDelete(LinkList p,int i) // 删除 i位置的学生信息   
    {  
        int j=0;  
        while((p->next)&&(j<i-1))  
        {  
            p=p->next;  
            ++j;  
        }  
        if(!(p->next)||(j>i-1))   return ERROR;  
        LinkList q;  
        q=p->next;  
        p->next=q->next;   
        delete q;  
        return OK;  
    }  
      
    void Input(ElemType *e)  
    {  
        cout<<"姓名:";
            cin>>e->name;
        cout<<"学号:";
            cin>>e->no;
        cout<<"成绩:";
            cin>>e->score;
        cout<<"完成输入
    
    ";  
    }  
      
    void Output(ElemType *e)  
    {  
        printf("姓名:%-20s
    学号:%-10s
    成绩:%-10.2lf
    
    ",e->name,e->no,e->score);  
    }  
      
    int main()  
    {  
        LNode L;  
        LinkList p;  
        ElemType a,b,c,d;  
        cout<<"------------10.2.34版 -----------
    ";  
        cout<<"1. 构造顺序表
    ";   
        cout<<"2. 录入指定人数的学生信息
    ";  
        cout<<"3. 显示学生表中的所有信息
    ";  
        cout<<"4. 根据姓名查找该学生,并返回学号和成绩
    ";  
        cout<<"5. 根据某指定位置显示该学生信息
    ";   
        cout<<"6. 在指定位置插入学生信息
    ";  
        cout<<"7. 在指定位置删除学生信息
    ";  
        cout<<"8. 统计学生个数
    ";  
        cout<<"0. 退出
    ";
        cout<<"------------------------
    ";
        int n,choose=-1;  
        while(choose!=0)  
        {  
            puts("请输入你要选择的功能前的序号:");  
            cin>>choose ; 
            if(choose==0)   
                break;
            else if (choose==1) 
            {
                if(InitList(p))  
                    cout<<"建立顺序表成功
    ";  
                else  
                    cout<<"建立顺序表失败
    ";  
    
            } 
                        
            else if (choose==2) 
            {
                cout<<"将要输入学生的人数:";  
                cin>>n;  
                for(int i=1;i<=n;i++)  
                {  
                       printf("第%d个学生:
    ",i);  
                    Input(&a);  
                    ListInsert(&L,i,a);  
                }  
                 
            }
             
                        
            else if (choose==3)  
            {
                for(int i=1;i<=n;i++)  
                {  
                    GetElem(&L,i,b);  
                    Output(&b);  
                }  
            
            } 
            else if (choose==4)  
            {
                char s[20];  
                cout<<"请输入要查找的学生姓名:";
                cin>>s;  
                if(Search(L,s,p))  
                    Output(&(p->data));  
                else  
                    cout<<"对不起,查无此人";  
                puts("");  
            
            } 
            else if (choose==5)  
            {
                cout<<"请输入要查询的位置:";  
                int id1;  
                cin>>id1;  
                GetElem(&L,id1,c);  
                Output(&c);  
            
            }  
            else if (choose==6) 
            {
                cout<<"请输入要插入的位置:";  
                int id2;  
                cin>>id2;  
                cout<<"请输入学生信息:
    ";   
                Input(&d);  
                if(ListInsert(&L,id2,d))  
                {  
                    n++;  
                    cout<<"插入成功"; ;  
                    puts("");  
                }  
                else  
                {  
                    cout<<"插入失败"; 
                    puts("");     
                }  
               
            } 
            else if (choose==7)
            {
                cout<<"请输入要删除的位置:";  
                int id3;  
                cin>>id3; 
                if(ListDelete(&L,id3))  
                {  
                    n--;  
                    cout<<"删除成功";  
                    puts("");  
                }  
                else  
                {
                    cout<<"删除失败";
                    puts("");     
                }  
                    
            }  
            else if (choose==8) 
                   {
                       cout<<"已录入的学生个数为:"<<n<<endl; 
                       break;
                }  
       
        }    
        cout<<"
    
    谢谢您的使用,请按任意键退出
    
    
    ";  
        system("pause");    
        return 0;  
    }
  • 相关阅读:
    js中split字符串分割
    获取日期,实时显示当前时间,时间相减
    5.5.4 函数内部属性
    单选按钮radio和下拉选择select,ajax返回数据回显对应值
    如何在HTML不同的页面中,共用头部与尾部?
    android-Activity(四大组件之一)
    android-ImageView及其子类
    android-ActionBar
    android- 菜单
    android-Fragment
  • 原文地址:https://www.cnblogs.com/xisheng/p/7810782.html
Copyright © 2011-2022 走看看