171211—链表书写&对类(book题)的润色

一.
链表不知道是啥时候的事情了,之前自己看完书上例题后,按着自己理解的思路试着写了个链表。
每次都在三个之后停止运行。
调试后有:
这里写图片描述
之前用手画模拟流程的时候没找出明显错误。今天干脆再试一次。最后发现问题出在这里:
这里写图片描述
在第一次(头指针找到第一个链节,且s生成第二环时),第一节的next指针是没有指向的,即p->next无物所指。实际上从第一节开始,这个链表就已经断掉了。
(第一次执行“p=p->next”就乱掉了)
修改后代码如下:

int main()
{
        struct node
    {
        int data;
        node *next;
    };
    node *head=NULL,*p,*s;
    s=new node;
    cout<<"Please cin the data:";
    cin>>s->data;
    while(s->data!=0)
    {
        if(head==NULL) 
        {
            head=s;
            p=s;
        }  
        else
        {
            p=p->next;
        }

        s=new node; //生成新结点并存储数据。 
        p->next=s;
        cout<<"Please cin the data:";
        cin>>s->data;
    }
    p->next=NULL;
    delete s; 

    s=head;
    while(s!=0)
    {
        cout<<s->data<<'\t';
        s=s->next;
    }
    cout<<endl;
}

二.类。
给之前单薄的图书借还管理加了点友好化的东西。但还是很鸡肋,不能创建和管理多种图书,不能查找

#include<iostream>
#include<cstring>
using namespace std;

class Book
{
  public:

    //Book(char *p,double price,int number)  //怎么把书名输进去??? 
    //{
      //}  z暂时看着不行 

    Book(char bookname[],double price,int number) 
    {
        strcpy(this->bookname,bookname);    //解决书名的传递赋值问题。 
        this->price=price;
        this->number=number;
     }    

    void display()
    {
        cout<<"书目:《"<<this->bookname<<"》"<<endl;
        cout<<"当前剩余"<<this->number<<"本"<<endl;
     } 

    void borrow()
    {
        this->number--;
        cout<<"书目:《"<<this->bookname<<"》"<<endl;
        cout<<"当前剩余"<<this->number<<"本"<<endl;
    }

    void restore()
    {
        this->number++;
        cout<<"书目:《"<<this->bookname<<"》"<<endl;
        cout<<"当前剩余"<<this->number<<"本"<<endl;
    }

  private:
    char bookname[100];
    double price;
    int number;

};

int main()
{
    char name[]={"Sherlockhomles"};
    Book One(name,100,40);
    One.display();
    cout<<"借书请按1;归还请按2;退出请按0."<<endl;
    int n;
    cin>>n;  //就是说,如果我想实现多次输入的一个功能,我不一定要全打包在while循环里,我完全可以在其前放一个单独的,用来启动的。 
    while(n)
    {
      if(n==1||n==2)
      {
              switch(n)
        {
          case 1:  One.borrow();break;
          case 2:  One.restore();break;
        }       
        cin>>n;
      }
      else
      {
         cout<<"请不要调戏可怜的计算机系统哦~请输入0,1或2.退出请按0"<<endl;
         cin>>n;
      }

    }

    cout<<"欢迎再次使用本系统。"<<endl; 


 } 

P.S. 昨日协会培训,于C++学习的最大感悟是,字符串的相关知识真的太重要太重要。要再好好看看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值