皖西2021 2022-05-31 19:15 采纳率: 100%
浏览 109
已结题

链表操作用c++操作

15、题目:链表操作
有下面数据结点
商店(商店编号,店名,店址,店经理)
职工(职工号,职工名,性别,工资,开始时间,商店编足)商品(商品号,商品名,产地,单价)
销售(商品号,商店编号,月销售量)
功能要求如下:
(1) 可以实现对商店、职工、商品、销售信息的录入。
(2) 可以按不同的条件查询商店、职工、商品、销售信息。
(3) 可以按不同的条件修改商店、职工、商品、销售信息。
(4) 可以按不同的条件删除商店、职工、商品、销售信息。
(5) 可以查泡职工号为‘005’职工的销售情况。

  • 写回答

1条回答 默认 最新

  • qfl_sdu 2022-05-31 20:41
    关注

    链表的基本操作,比较繁琐,需要链表的嵌套,代码如下:

    #include <iostream>
    #include <string>
    using namespace std;
    
    
    //商品
    typedef struct _stuff
    {
        char id[8];
        char name[20];//名称
        char producer[20]; //产地
        float price;
        
    }Stuff;
    
    typedef struct _stuffnode 
    {
        Stuff data;
        struct _stuffnode* next;
    }StufNode;
    
    
    
    
    //职工结构体
    typedef struct _employee
    {
        char id[8];
        char name[20];
        char sex;
        int solary;
    }Employee;
    
    
    typedef struct _employeenode
    {
        Employee emp;
        struct _employeenode* next;
    }EmpNode;
    
    //销售结构体
    typedef struct _sold 
    {
        char stufid[8]; //商品id
        char empid[8]; //员工ID
        int nmb; //销售产品数量
    }SoldInfo;
    
    typedef struct _slodnode 
    {
        SoldInfo info;
        struct _slodnode *next;
    }SoldNode;
    
    
    //商店结构体
    typedef struct _store 
    {
        char id[8]; //编号
        char name[20];
        char addr[40];
        char manager[20]; //经理
        EmpNode* emps; //雇员链表
        StufNode* stuf;  //商品链表
        SoldNode* sold; //销售信息
    }Store;
    
    typedef struct _storenode
    {
        Store store;
        struct _storenode* next;
    }StoreNode;
    
    
    //根据商店id查找商店
    StoreNode* findStoreById(StoreNode* stores,char* id)
    {
        StoreNode* p= stores->next;
        while(p)
        {
            if(strcmp(p->store.id , id)==0)
                return p;
            else
                p = p->next;
        }
        return 0;
    }
    
    //录入商店信息
    void inputStore(StoreNode* stores)
    {
        StoreNode* p,*t;
        system("cls");
        //移动到末尾
        p = stores;
        while(p->next)
            p = p->next;
    
        //创建新节点
        t = new StoreNode;
        t->next = NULL;
        cout << "请输入商店编号:";
        cin >> t->store.id;
        cout << "请输入商店名称:";
        cin >> t->store.name;
        cout <<"请输入商店地址:";
        cin >> t->store.addr;
        cout <<"请输入商店经理:";
        cin >> t->store.manager;
        //设置商店下的商品和职员链表
        t->store.emps = new EmpNode;
        t->store.emps->next = NULL;
        t->store.stuf = new StufNode;
        t->store.stuf->next = NULL;
        t->store.sold = new SoldNode;
        t->store.sold->next = NULL;
    
        p->next = t;
        cout <<"添加成功!"<<endl;
        system("pause");
    
    }
    //录入商品
    void inputStuf(StoreNode* stores)
    {
        StufNode* stuf = new StufNode;
        StufNode *q;
        StoreNode* p=0;
        system("pause");
        cout <<"请输入商品编号:";
        cin >> stuf->data.id;
        cout <<"请输入商品名称:";
        cin >> stuf->data.name;
        cout <<"请输入商品产地:";
        cin >> stuf->data.producer;
        cout <<"请输入商品价格:";
        cin >> stuf->data.price;
        
        stuf->next = NULL;
        cout <<"请输入商品需要上架的商店编号:";
        char id[8];
        cin >> id;
        p = findStoreById(stores,id);
        if(p)
        {
            q = p->store.stuf;
            while(q->next)
                q = q->next;
            //插入链表尾部
            q->next = stuf;
        }    
        printf("添加成功!\n");
        system("pause");
    }
    
    //录入员工
    void inputEmp(StoreNode* stores)
    {
        StoreNode* p;
        EmpNode* e = new EmpNode;
        EmpNode* q;
        e->next = NULL;
        system("cls");
        cout << "请输入员工编号:";
        cin >> e->emp.id;
        cout <<"请输入员工姓名:";
        cin >> e->emp.name;
        cout <<"请输入性别:";
        cin.clear(); //清空输入缓存
        cin >> e->emp.sex;
        cout <<"请输入待遇:";
        cin >> e->emp.solary;
    
        //测试
        //cout << "输入的员工性别:"<< (char)(e->emp.sex)<< endl;
        cout <<"请输入员工所在的商店编号:";
        char id[8];
        cin >> id;
        p = findStoreById(stores,id);
        if(p)
        {
            q = p->store.emps;
            while(q->next)
                q = q->next;
            //插入
            q->next = e;
            cout <<"插入成功!"<<endl;
        }else
        {
            cout <<"未找到该商店,添加失败!\n";
        }
        system("pause");
    }
    
    //录入信息
    void input(StoreNode* stores)
    {
        int op;
    
        while(1)
        {
            system("cls");
            cout <<"1.录入商店信息"<<endl;
            cout <<"2.录入商品信息"<<endl;
            cout <<"3.录入职工信息"<<endl;
            cout <<"0.返回上一菜单"<<endl;
            cin >> op;
            switch(op)
            {
            case 1: inputStore(stores);break;
            case 2: inputStuf(stores);break;
            case 3: inputEmp(stores);break;
            case 0: return;
            }
        }
    
    }
    
    //显示单条职员信息
    void showSingleEmp(Employee e)
    {
        cout << "编号:"<< e.id <<",姓名:"<<e.name<< ",性别:"<< e.sex<<",待遇:"<<e.solary<<endl;
    }
    void showSingleStuf(Stuff st)
    {
        cout <<"编号:"<< st.id <<",名称:"<<st.name<<",产地:" << st.producer<<",价格:"<<st.price<<endl;
    }
    
    //查询商店的所有职员信息
    void searchEmp(StoreNode* head,char* id)
    {
        StoreNode* p = head->next;
        while(p)
        {
            if(strcmp(p->store.id, id)==0)
            {
                EmpNode* emps = p->store.emps->next;
                while(emps)
                {
                    showSingleEmp(emps->emp);
                    emps = emps->next;
                }
            }
            p = p->next;
        }
        
    }
    
    
    //查询商店的所有商品信息
    void searchStuf(StoreNode* head,char* id)
    {
        StoreNode* p = head->next;
        while(p)
        {
            if(strcmp(p->store.id,id)==0)
            {
                StufNode* stuf = p->store.stuf->next;
                while(stuf)
                {
                    showSingleStuf(stuf->data);
                    stuf = stuf->next;
                }
            }
            p = p->next;
        }
        
    }
    
    //显示所有商店的所有信息
    void showAll(StoreNode* head)
    {
        StoreNode* p = head->next;
        while(p)
        {
            cout <<"-----------------------------------------------"<<endl;
            cout <<"商店编号:"<< p->store.id <<",商店名称:" << p->store.name<<",商店地址:" << p->store.addr <<",经理:"<<p->store.manager<<endl;
            cout <<"    >>商店职员信息:"<<endl;
            searchEmp(head,p->store.id);
            cout <<"    >>商店商品信息:"<<endl;
            p = p->next;
        }
    }
    //查询商品所在的商店信息
    void searchStoreByStuf(StoreNode* head,char* name)
    {
        StoreNode* p = head->next;
        while(p)
        {
            StufNode* stuf = p->store.stuf->next;
            while(stuf)
            {
                if(strcmp(stuf->data.name,name)==0)
                    cout <<"商店编号:"<< p->store.id <<",商店名称:" << p->store.name<<",商店地址:" << p->store.addr <<",经理:"<<p->store.manager<<endl;
                stuf = stuf->next;
            }
            p = p->next;
        }
    }
    
    //信息查询
    void search(StoreNode* head)
    {
        int op;
        char id[8];
        char name[20];
        while(1)
        {
            system("cls");
            cout <<"1.查询特定商店的职员信息"<<endl;
            cout <<"2.查询特定商店的商品信息"<<endl;
            cout <<"3.显示所有商店的所有信息"<<endl;
            cout <<"4.查询某商品所在的商店"<<endl;
            cout <<"0.返回上一菜单"<<endl;
            cin >> op;
            switch(op)
            {
            case 1:
                cout <<"请输入商店的编号:";
                cin >> id;
                searchEmp(head,id);
                break;
            case 2:
                cout <<"请输入商店的编号:";
                cin >> id;
                searchStuf(head,id);
                break;
            case 3:
                showAll(head);
                break;
            case 4:
                cout <<"请输入需要查询的商品名称:";
                cin >> name;
                searchStoreByStuf(head,name);
                break;
            case 0:return;
            }
            system("pause");
        }
    }
    
    //修改商店信息:默认商店ID不可修改
    void mod_store(StoreNode* head)
    {
        cout <<"请输入需要修改信息的商店ID:";
        char id[8];
        cin >> id;
        StoreNode* p = findStoreById(head,id);
        if(p)
        {
            cout <<"商店编号:"<< p->store.id <<",商店名称:" << p->store.name<<",商店地址:" << p->store.addr <<",经理:"<<p->store.manager<<endl;
            cout <<"请输入商店名称:";
            cin >> p->store.name;
            cout <<"请输入商店地址:";
            cin >> p->store.addr;
            cout <<"请输入商店经理:";
            cin >> p->store.manager;
            cout <<"修改成功!"<<endl;
        }else
            cout <<"未找到该ID的商店!"<<endl;
    }
    //修改职员信息
    void mod_emp(StoreNode* head)
    {
        StoreNode* p = head->next;
        char ids[8];
        char ide[8];
        
        cout <<"请输入需要修改信息的员工编号及其所在商店编号:";
        cin >> ide >> ids;
        while(p)
        {
            if(strcmp(p->store.id, ids)==0)
            {
                break;
            }else
                p = p->next;
        }
        if(p)
        {
            EmpNode* emp = p->store.emps->next;
            while(emp)
            {
                if(strcmp(emp->emp.id, ide)==0 )
                {
                    //cout <<"商店编号:"<< p->store.id <<",商店名称:" << p->store.name<<",商店地址:" << p->store.addr <<",经理:"<<p->store.manager<<endl;
                    showSingleEmp(emp->emp);
    
                    cout <<"请输入员工姓名:";
                    cin >> emp->emp.name;
                    cout <<"请输入员工性别:";
                    cin.clear();
                    cin >> emp->emp.sex;
                    cout <<"请输入员工待遇:";
                    cin >> emp->emp.solary;
                    cout <<"修改成功!"<<endl;
                    break;
                }else
                    emp = emp->next;
            }
        }else
            cout <<"未找到该职员!"<<endl;
        
    }
    //修改商品信息
    void mod_stuf(StoreNode* head)
    {
        StoreNode* p = head->next;
        char ids[8];
        char ide[8];
        
        cout <<"请输入需要修改信息的商品编号及其所在商店编号:";
        cin >> ide >> ids;
        while(p)
        {
            if(strcmp(p->store.id , ids)==0)
            {
                break;
            }else
                p = p->next;
        }
        if(p)
        {
            StufNode* st = p->store.stuf->next;
            while(st)
            {
                if(strcmp(st->data.id , ide)==0 )
                {
                    //cout <<"商店编号:"<< p->store.id <<",商店名称:" << p->store.name<<",商店地址:" << p->store.addr <<",经理:"<<p->store.manager<<endl;
                    showSingleStuf(st->data);
    
                    cout <<"请输入商品名称:";
                    cin >> st->data.name;
                    cout <<"请输入商品价格:";
                    cin >> st->data.price;
                    cout <<"请输入商品产地:";
                    cin >> st->data.producer;
                    
                    cout <<"修改成功!"<<endl;
                    break;
                }else
                    st = st->next;
            }
        }else
            cout <<"未找到该商品!"<<endl;
    }
    
    
    //修改信息
    void modInfo(StoreNode* head)
    {
        int op;
        while(1)
        {
            system("cls");
            cout <<"1.修改商店信息"<<endl;
            cout <<"2.修改职员信息"<<endl;
            cout <<"3.修改商品信息"<<endl;
            cout <<"0.返回上一菜单"<<endl;
            cin >> op;
            switch(op)
            {
            case 0:return;
            case 1:mod_store(head);break;
            case 2:mod_emp(head);break;
            case 3:mod_stuf(head);break;
            }
            system("pause");
        }
        
    }
    //删除商店信息
    void del_store(StoreNode* head)
    {
        char id[8];
        cout <<"请输入需要删除的商店ID:";
        cin >> id;
        StoreNode* pre,*p;
        pre = head;
        p = pre->next;
        while(p)
        {
            if(strcmp(p->store.id,id) == 0)
            {
                pre->next = p->next;
                delete p;
                cout <<"删除成功!"<<endl;
                return;
            }else
            {
                pre = p;
                p = p->next;
            }
        }
        cout <<"未找到该商店,删除失败!"<<endl;
    }
    //删除职员信息
    void del_emp(StoreNode* head)
    {
        char ids[8],ide[9];
        cout <<"请输入需要删除的员工编号及其所在商店:";
        cin >> ide >> ids;
        StoreNode* p= head->next;
        while(p)
        {
            if(strcmp(p->store.id, ids)==0)
                break;
            else
                p = p->next;
        }
        if(p)
        {
            EmpNode* pre,*q;
            pre = p->store.emps;
            q = pre->next;
            while(q)
            {
                if(strcmp(q->emp.id , ide)==0)
                {
                    pre->next = q->next;
                    delete q;
                    cout <<"删除成功!"<<endl;
                }else
                {
                    pre = q;
                    q = q->next;
                }
            }
        }else
            cout <<"未找到该职员!"<<endl;
    }
    //删除商品信息
    void del_stuf(StoreNode* head)
    {
        char ids[8],ide[8];
        cout <<"请输入需要删除的商品编号及其所在商店:";
        cin >> ide >> ids;
        StoreNode* p= head->next;
        while(p)
        {
            if(strcmp(p->store.id , ids)==0)
                break;
            else
                p = p->next;
        }
        if(p)
        {
            StufNode* pre,*q;
            pre = p->store.stuf;
            q = pre->next;
            while(q)
            {
                if(strcmp(q->data.id, ide)==0)
                {
                    pre->next = q->next;
                    delete q;
                    cout <<"删除成功!"<<endl;
                }else
                {
                    pre = q;
                    q = q->next;
                }
            }
        }else
            cout <<"未找到该商品!"<<endl;
    }
    
    //删除信息
    void deleteinfo(StoreNode* head)
    {
        int op;
        while(1)
        {
            system("cls");
            cout <<"1.删除商店信息"<<endl;
            cout <<"2.删除职员信息"<<endl;
            cout <<"3.删除商品信息"<<endl;
            cout <<"0.返回上一菜单"<<endl;
            cin >> op;
            switch(op)
            {
            case 0:return;
            case 1:del_store(head);break;
            case 2:del_emp(head);break;
            case 3:del_stuf(head);break;
            }
            system("pause");
        }
    }
    
    
    //产品销售
    void xs(StoreNode* head)
    {
        char idp[8],ids[8],empid[8];
        int nmb;
        system("cls");
        cout <<"请输入销售商品的编号:";
        cin >> idp;
        cout << "请输入销售商品的商店ID:";
        cin >> ids;
        cout <<"请输入销售商品的职员ID:";
        cin >> empid;
        //更新数据
        StoreNode* p = head->next;
        while(p)
        {
            if(strcmp(p->store.id,ids)==0)
                break;
            else
                p = p->next;
        }
        if(p)
        {
            SoldNode* ss = p->store.sold;
            SoldNode* tn = new SoldNode;
            strcpy(tn->info.empid,empid);
            strcpy(tn->info.stufid,idp);
            tn->info.nmb = nmb;
            tn->next = NULL;
            while(ss->next)
                ss = ss->next;
            
            //插入
            ss->next = tn;
            cout <<"销售登记成功!"<<endl;
    
        }else
            cout <<"未找到改商店"<<endl;
        system("pause");
    }
    //显示销售情况
    void xstj(StoreNode* head)
    {
        system("pause");
        char ide[8],ids[8];
        cout <<"请输入所需要查询的员工ID及其所在的商店ID:";
        cin >> ide >> ids;
        StoreNode* p = head->next;
        int flag = 0;
        while(p)
        {
            if(strcmp(p->store.id,ids)==0)
                break;
            else
                p = p->next;
        }
        if(p)
        {
            SoldNode* ss = p->store.sold->next;
            while(ss)
            {
                if(strcmp(ss->info.empid,ide)==0)
                {
                    flag = 1;
                    cout << "商品ID:"<< ss->info.stufid <<",销售数量:"<< ss->info.nmb<<endl;
                }
                ss = ss->next;
            }
            if(flag == 0)
                cout <<"改职员目前尚无销售数据"<<endl;
        }else
            cout <<"未找到改商店"<<endl;
        system("pause");
    }
    
    int main()
    {
        int op;
        StoreNode* head = new StoreNode;
        head->next = NULL;
        while(1)
        {
            system("cls");
            cout <<"----------商店管理系统-----------"<<endl;
            cout <<"  1.信息录入"<<endl;
            cout <<"  2.信息查询"<<endl;
            cout <<"  3.信息修改"<<endl;
            cout <<"  4.信息删除"<<endl;
            cout <<"  5.产品销售"<<endl;
            cout <<"  6.销售情况"<<endl;
            cout <<"  0.退出系统"<<endl;
            cout <<"请选择:";
            cin >> op;
            switch(op)
            {
            case 1:input(head);break;
            case 2:search(head);break;
            case 3:modInfo(head);break;
            case 4:deleteinfo(head);break;
            case 5:xs(head);break;
            case 6:xstj(head);break;
            case 0:return 0;
            }
        }
    }
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月9日
  • 已采纳回答 6月1日
  • 赞助了问题酬金10元 5月31日
  • 创建了问题 5月31日

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line