今天带来的是一个对图书编号和价格设定程序 不是很完善希望大家给与建议进行修改

今晚就编译了一个动态链表来实验图书编号价格代码,可能不是很完善很简明 希望大家给与建议,下面是实现代码和运行结果:

#include"stdafx.h"
#include<iostream>
#include<string>
using namespace std;
class Book
{
public:
int num;
float price;
Book*next;
};
Book*head=NULL;//创建类Book的一个头指针并且赋空;
bool check(string str)//bool型函数,接收参数是字符串
{
for(int i=0;i<str.length();i++)
{
if((str[i]>'9'||str[i]<'0')&&(str[i]!=','))//0-9之外就是输入的为字符,而且我们要确保小数点不算在其中
return false;//若含有字符串就返回假,否则返回真
else
return true;
}
}
Book*creat()//f返回Book类的指针
{
Book*p1,*p2;//创建了两个节点p1,p2
p1=new Book;//new关键字创建一个节点,用p1指向它
head=p1;//把p1节点作为头节点赋给head指针
p2=p1;//这里把p1也赋给p2节点
cout<<"请输入图书的编号,以0结束"<<endl;
string str;
cin>>str;
while(!check(str))//因为while循环需要为1时候才运行循环,上面的bool型变量输入字符时返回false,所有我们需要让用户
{                 //在这个循环中重新输入,即需要进入while循环,即是让条件加!即满足while循环可以进行循环
cout<<"输入的不是数字,请重新输入,按0返回!"<<endl;
cin>>str;
}
p1->num=atoi(str.c_str());//这里将字符串转换为整数
if(p1->num!=0)
{
cout<<"请输入图书的价格:"<<endl;
cin>>str;
while(!check(str))
 {                 
cout<<"输入的不是数字,请重新输入,按0返回!"<<endl;
cin>>str;
 }
  p1->price=atof(str.c_str());//这里将字符串转换为浮点型变量
}
else
{
delete p1;p2=NULL;p2->next=NULL;head=NULL;//因为删除p1指针,就是p2和p2next指针都不存在需要赋空,同意head指针也需要赋空
return head;                              //这里说白就是num=0,则后面的节点都要赋空,没必要使用了
}
while(p1->num!=0)//这里如果节点p1的num不为0,则执行循环,while循环无法对字符串进行判断,需要使用bool变量
{
p2=p1;//这里把p1节点赋给p2
p1=new Book;//这里创建一个新节点赋给p1;
cout<<"请输入图书的编号,以0结束"<<endl;
cin>>str;
   while(!check(str))
  {                 
cout<<"输入的不是数字,请重新输入,按0返回!"<<endl;
cin>>str;
  }
   p1->num=atoi(str.c_str());//这里将字符串转换为整数
   if(p1->num!=0)
   {
cout<<"请输入图书的价格:"<<endl;
cin>>str;
while(!check(str))
   {                 
cout<<"输入的不是数字,请重新输入,按0返回!"<<endl;
cin>>str;
   }
  p1->price=atof(str.c_str());//这里将字符串转换为浮点型变量
   }
   p2->next=p1;//这里把p1赋给p2的next指针,即p1为下一个节点
}               //这里需要注意就是把谁的地址或者指针赋值别人的next指针,即告诉编译器下一个节点就是

        delete p1;
p2->next=NULL;
return head;
}
void showbook(Book*head)
{
cout<<endl;
cout<<"图书信息如下:"<<endl;
while(head)
{
cout<<"图书的编号为:"<<head->num<<"\t";
   cout<<"价格: "<<head->price<<endl;
head=head->next;
}

}

int main()
{
        Book*head=NULL;
head=creat();
showbook(head);
system("pause");
return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值