美文网首页
2022-03-18作业

2022-03-18作业

作者: 晨颜 | 来源:发表于2022-05-26 19:10 被阅读0次

    (1)基于顺序存储的源程序清单

    #include<iostream.h> 
    #include<string.h> 
    #include<iomanip.h> 
    using namespace std;
    typedef int Status; 
    #define OK 1 
    #define ERROR 0 
    #define Maxsize 50 
    //学生信息的定义  
    typedef struct 
    {     
        char no[10];   //10 位学号     
        char name[20]; //姓名     
        int  score;     //成绩 
    }Student;
    //顺序表的定义 
    typedef  struct 
    {   
        Student  *elem;     //指向数据元素的基地址   
        int  length;       //线性表的当前长度                                                          
    }SqList; 
    void CreatList(SqList &L,int n);//根据指定学生个数 n,逐个输入学生信息; 
    void OutputList(SqList L);//逐个显示学生表中所有学生的相关信息; 
    void FindList(SqList &L,char name[]);//根据姓名进行查找,返回此学生的学号和成绩; 
    void GetList(SqList L,int i);//根据指定位置i可返回相应学生信息(学号,姓名,成绩); 
    Status InsertList(SqList &L,int i,Student stu);//给定学生信息,插入到表中指定的位置;  
    Status DeleteList(SqList &L,int i);// 删除指定位置的学生记录; 
    Status CountList(SqList L);// 统计表中学生个数。
    Status menu();//显示菜单 
    
    int main()
    {
        SqList L;  
        L.length=0;
        Student stu;
        int n;//总人数   
        int i,m;  
        char a;  
        char no[10];   //10 位学号     
        char name[20]; //姓名     
        int  score; //分数   
        cout<<"请输入学生的个数:\n";  
        cin>>n; 
        CreatList(L,n);
        cout<<"依次显示学生表中所有学生的相关信息:\n"; 
        OutputList(L); 
        menu(); 
        while(1)
        {
            cout<<"请输入功能选项:";  
            cin>>a;
            //判断功能是否存在,不存在就重新输入 
            while(a!='i'&&a!='I'&&a!='d'&&a!='D'&&a!='f'&&a!='F'&&a!='c'&&a!='C'&&               
            a!='o'&&a!='O'&&a!='g'&&a!='G'&& a!='q'&&a!='Q')
            {
                 cout<<"暂时没有此功能,请重新输入:";
                 fflush(stdin);             
                 cin>>a; 
            }  
            switch(a)
            {
                case 'i':
                case 'I':
                    cout<<"请输入要插入的位置:";
                    cin>>i;
                    cout<<"请输入学号:"<<endl;
                    cin>>stu.no;
                    cout<<"请输入姓名:"<<endl;
                    cin>>stu.name;
                    cout<<"请输入成绩:"<<endl;
                    cin>>stu.score;
                    InsertList(L,i,stu);
                    OutputList(L);
                    break;
                case 'd':
                case 'D':
                    cout<<"请输入要删除的位置:";
                    cin>>i;
                    DeleteList(L,i);
                    OutputList(L);
                    break;
                case 'f':
                case 'F':
                    cout<<"请输入要查找的学生名:";
                    cin>>name;
                    FindList(L,name); 
                    break;
                case 'c':
                case 'C':
                    cout<<"统计的学生个数为:"<<CountList(L)<<endl;
                    break;
                case 'o':
                case 'O':
                    OutputList(L);
                    break;
                case 'g':
                case 'G':
                    cout<<"请输入要查找的位置:";
                    cin>>m;
                    GetList(L,m);
                    break;
                default:
                return 0;
            }
        }       
        return 0;
    }
    Status menu()       //显示菜单 
    {
        cout<<"----------------------\n";     
        cout<<"插入功能请输 i 或 I\n";     
        cout<<"删除功能请输 d 或 D\n";     
        cout<<"查找功能请输 f 或 F\n";     
        cout<<"求学生人数请输入 c 或 C\n";     
        cout<<"输出功能请输 o 或 O\n";     
        cout<<"定位功能请输 g 或 G\n";     
        cout<<"退出功能请输 q 或 Q\n";      //以上为功能介绍     
        cout<<"----------------------\n";     
        fflush(stdin);      
    } 
    void CreatList(SqList &L,int n) //根据指定学生个数,逐个输入学生信息; 
    {
        int i;
        for(i=0;i<n;i++)
        {
            cout<<"请输入第"<<i+1<<"个学生的信息:"<<endl;
            cout<<"请输入学号:"<<endl;
            cin>>L.elem[i].no;
            cout<<"请输入姓名:"<<endl;
            cin>>L.elem[i].name;
            cout<<"请输入成绩:"<<endl;
            cin>>L.elem[i].score;
            L.length++;     
        }       
    }
    void OutputList(SqList L)//逐个显示学生表中所有学生的相关信息; 
    {
        int i;
        for(i=0;i<L.length;i++)
        {
            cout<<"学生学号:"<<L.elem[i].no<<endl;
            cout<<"学生姓名:"<<L.elem[i].name<<endl;
            cout<<"学生成绩:"<<L.elem[i].score<<endl;
        }
    } 
    Status InsertList(SqList &L,int i,Student stu)//给定一个学生信息,插入到表 中指定的位置; 
    {
        int m;
        if(i<1||i>L.length+1||L.length==Maxsize)
        {
            cout<<"无法插入!"<<endl;
        }
        else
        {
            for(m=L.length-1;m>=i-1;m--)//循环后移 
            {
                L.elem[m+1]=L.elem[m]; 
            }
            L.elem[i-1]=stu;
            L.length++;
            return OK;
        }
    }
    Status DeleteList(SqList &L,int i)// 删除指定位置的学生记录;
    {
        int j;
        if(i<1||i>L.length+1)
            return ERROR;
        for(j=i;j<=L.length-1;j++)
        {
            L.elem[j-1]=L.elem[j];
        }
        L.length--;
        return OK;
    }
    void FindList(SqList &L,char name[])//根据姓名进行查找,返回此学生的学号和成绩;
    {
        int i;
        for(i=0;i<L.length;i++)
        {
            if(strcmp(L.elem[i].name,name)==0)
                break;  
        }
        if(i>=L.length)
                cout<<"表中没有该学生!"<<endl;
            else
                cout<<"学号:"<<L.elem[i].no<<endl
                <<"成绩:"<<L.elem[i].score<<endl; 
    } 
    Status CountList(SqList L)// 统计表中学生个数。
    {
        return L.length;
    }
    void GetList(SqList L,int i)//根据指定的位置 i 可返回相应的学生信息(学号,姓名,成绩);
    {
        if(i<1||i>L.length+1)
            cout<<"查找有误!"<<endl;
        else
            cout<<"学号:"<<L.elem[i-1].no<<endl
            <<"姓名:"<<L.elem[i-1].name<<endl
            <<"成绩:"<<L.elem[i-1].score<<endl; 
    }
    

    (2)基于链式存储的源程序清单

    #include<iostream.h> 
    #include<string.h> 
    #include<iomanip.h> 
    using namespace std;
    typedef int Status; 
    #define OK 1 
    #define ERROR 0 
    #define Maxsize 50 
    //学生信息的定义  
    typedef struct 
    {     
        char no[10];   //10 位学号     
        char name[20]; //姓名     
        int  score;     //成绩 
    }Student;
    typedef struct LNode
    {
        Student data;
        struct LNode *next;
    }LNode,*LinkList;
    
    Status InitList(LinkList &L);//构造一个空的单链表L 
    void CreatList(LinkList &L,int n);//根据指定学生个数 n,逐个输入学生信息; 
    void OutputList(LinkList L);//逐个显示学生表中所有学生的相关信息; 
    void FindList(LinkList &L,char name[]);//根据姓名查找,返回此学生的学号和成绩; 
    void GetList(LinkList L,int i);//指定位置i可返回相应学生信息(学号,姓名,成绩); 
    Status InsertList(LinkList &L,int i,Student stu);//给定学生信息,插入表中指定的位置;  
    Status DeleteList(LinkList &L,int i);// 删除指定位置的学生记录;
    Status CountList(LinkList L);// 统计表中学生个数。
    Status menu();//显示菜单 
    int main()
    {
        LinkList L;  
        Student stu;
        int n;//总人数   
        int i,m;  
        char a;  
        char no[10];   //10 位学号     
        char name[20]; //姓名     
        int  score; //分数   
        cout<<"请输入学生的个数:\n";  
        cin>>n; 
        CreatList(L,n);
        cout<<"依次显示学生表中所有学生的相关信息:\n"; 
        OutputList(L); 
        menu();
        while(1)
        {
            cout<<"请输入功能选项:";  
            cin>>a;
            //判断功能是否存在,不存在就重新输入 
            while(a!='i'&&a!='I'&&a!='d'&&a!='D'&&a!='f'&&a!='F'&&a!='c'&&a!='C'&&               
            a!='o'&&a!='O'&&a!='g'&&a!='G'&& a!='q'&&a!='Q')
            {
                 cout<<"暂时没有此功能,请重新输入:";
                 fflush(stdin);             
                 cin>>a; 
            }  
            switch(a)
            {
                case 'i':
                case 'I':
                    cout<<"请输入要插入的位置:";
                    cin>>i;
                    cout<<"请输入学号:"<<endl;
                    cin>>stu.no;
                    cout<<"请输入姓名:"<<endl;
                    cin>>stu.name;
                    cout<<"请输入成绩:"<<endl;
                    cin>>stu.score;
                    InsertList(L,i,stu);
                    break;
                case 'd':
                case 'D':
                    cout<<"请输入要删除的位置:";
                    cin>>i;
                    DeleteList(L,i);
                    OutputList(L);
                    break;
                case 'f':
                case 'F':
                    cout<<"请输入要查找的学生名:";
                    cin>>name;
                    FindList(L,name); 
                    break;
                case 'c':
                case 'C':
                    cout<<"统计的学生个数为:"<<CountList(L)<<endl;
                    break;
                case 'o':
                case 'O':
                    OutputList(L);
                    break;
                case 'g':
                case 'G':
                    cout<<"请输入要查找的位置:";
                    cin>>m;
                    GetList(L,m);
                    break;
                default:
                return 0;
            }
        }
        return 0;
    }
    Status menu()
    {
        cout<<"----------------------\n";     
        cout<<"插入功能请输 i 或 I\n";     
        cout<<"删除功能请输 d 或 D\n";     
        cout<<"查找功能请输 f 或 F\n";     
        cout<<"求学生数请输入 c 或 C\n";     
        cout<<"输出功能请输 o 或 O\n";     
        cout<<"定位功能请输 g 或 G\n";     
        cout<<"退出功能请输 q 或 Q\n";      //以上为功能介绍     
        cout<<"----------------------\n";     
        fflush(stdin);      
    } 
    Status InitList(LinkList &L)//构造一个空的单链表L
    {
        L=new LNode;
        L->next=NULL;
        return OK; 
    } 
    void CreatList(LinkList &L,int n)//根据指定学生个数 n,逐个输入学生信息;
    {
        int i;
        LNode *r, *p;
        L=new LNode;
        L->next=NULL;
        r=L;    //尾指针r指向头结点 
        for(i=0;i<n;i++)
        {
            p = new LNode;//生成新节点p 
            cout<<"请输入第"<<i+1<<"个学生的信息:"<<endl;
            cout<<"请输入学号:"<<endl;
            cin>>p->data.no;
            cout<<"请输入姓名:"<<endl;
            cin>>p->data.name;
            cout<<"请输入成绩:"<<endl;
            cin>>p->data.score;
            p->next=NULL;
            r->next=p;
            r=p; 
        }
    }
    void OutputList(LinkList L)//逐个显示学生表中所有学生的相关信息;
    {
        LNode *p; 
        p=L->next;
        while(p)
        {
            cout<<"学生学号:"<<p->data.no<<endl;
            cout<<"学生姓名:"<<p->data.name<<endl;
            cout<<"学生成绩:"<<p->data.score<<endl;
            p=p->next;
        }
    }
    Status DeleteList(LinkList &L,int i)// 删除指定位置的学生记录; 
    {
        int j=0;
        LNode *p,*q; 
        p=L;
        while((p->next)&&(j<i-1))
        {
            p=p->next;
            j++;
        }
        if(!(p->next)||(j>i-1))
            return ERROR;
        q=p->next;
        p->next=q->next;
        delete q;
        return OK;
    }
    void FindList(LinkList &L,char name[])//根据姓名进行查找,返回此学生的学号和成绩;
    {
        LNode *p;
        p=L->next;
        while(p && strcmp(p->data.name,name)!=0)
        {
            p=p->next;
        }
        if(p==NULL)
            cout<<"表中没有该学生!"<<endl;
        else
            cout<<"学号:"<<p->data.no<<endl
            <<"成绩:"<<p->data.score<<endl; 
    }
    Status CountList(LinkList L)// 统计表中学生个数。
    {
        int cnt=0;
        LNode *p;
        p=L->next;
        while(p)
        {
            p=p->next;
            cnt++;
        }
        return cnt;
    }
    void GetList(LinkList L,int i)//根据指定的位置 i 可返回相应的学生信息(学号,姓名,成绩);
    {
        LNode *p;
        int j=1;
        p=L->next;
        while(p && j<i)
        {
            p=p->next;
            j++;
        }
        if(!p||j>i)
            cout<<"表中没有该学生!"<<endl;
        else
            cout<<"学号:"<<p->data.no<<endl
            <<"姓名:"<<p->data.name<<endl
            <<"成绩:"<<p->data.score<<endl; 
    } 
    Status InsertList(LinkList &L,int i,Student stu)//给定学生信息,插入到表中指定的位置;
    {
        LNode *p,*s;
        p=L;
        int j=0;
        while(p && (j<i-1))
        {
            p=p->next;
            j++;
        }
        if(!p||j>i-1)
            return ERROR;
        s=new LNode;
        s->data=stu;
        s->next=p->next;
        p->next=s;
        return OK;
    }

    相关文章

      网友评论

          本文标题:2022-03-18作业

          本文链接:https://www.haomeiwen.com/subject/dpbkjrtx.html