2022-03-18作业

2022-05-26  本文已影响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;
}
上一篇下一篇

猜你喜欢

热点阅读