程序为什么单步执行没有问题,直接运行就会出现问题

马凌翔 2015-12-22 05:45:42
#include<iostream>
#include<iomanip>
#include <stdlib.h>
using namespace std;

class Book
{
public:
int book_id;
char book_name[20];
char writer[20];
int now_number;
int sum_number;
Book();
};
class Member
{
public:
int ID;
int borrow_number;
int borrow_book_id;
int time;
Member()
{
borrow_book_id=0;
time=0;
ID=0;
borrow_number=0;
}
};

class Node
{
public:
int data;
Node* next;
Node(int _data)
{
data=_data;
next = NULL;
}
};
class Index
{
private:
Node* head;
public:
Index()
{
head = NULL;
}
void insert(Node *node, int index)
{
if (head == NULL)
{
head = node;
return;
}
if (index == 0)
{
node->next = head;
head = node;
return;
}
Node *current_node = head;
int count = 0;
while (current_node->next != NULL && count < index - 1)
{
current_node = current_node->next;
count++;
}
if (count == index - 1)
{
node->next = current_node->next;
current_node->next = node;
}
}
void output()
{
if (head == NULL)
{
return;
}
Node *current_node = head;
while (current_node != NULL)
{
cout << current_node->data <<endl;
current_node = current_node->next;
}
cout << endl;
}
void delete_node(int index)
{
if(head==NULL)
{
return ;
}
Node *current_node=head;
int count=0;
if(index==0)
{
head=head->next;
delete current_node;
return ;
}
while(current_node->next!=NULL&&count<index-1)
{
current_node=current_node->next;
count++;
}
if(count==index-1 &¤t_node->next!=NULL)
{
Node *delete_node=current_node->next;
current_node->next=delete_node->next;
delete delete_node;
}
}
int serch(int index)
{
if (head == NULL)
{
return 0;
}
Node *current_node = head;
while(current_node->data!=index && current_node->next != NULL)
{
current_node=current_node->next;
}
if(current_node->data==index)
{
return 1;
}
else
{
return 0;
}
}
};

Book::Book()
{
book_id=0;
now_number=0;
sum_number=0;
}

void add(Book *str_book,Index *str_index)
{
system("cls");
int new_id,count=0;
cout<<"请输入图书的书号"<<endl;
cin>>new_id;
while(str_book->book_id==new_id||str_book->book_id==0)
{
str_book++;
count++;
}
if(str_book->book_id==new_id)
{
cout<<"此图书存在,请输入增加库存量"<<endl;
int i;
cin>>i;
str_book->sum_number=i;
}
else
{
int i;
str_book->book_id=new_id;
cout<<"请输入图书书名"<<endl;
cin.ignore(1024,'\n');
cin.getline(str_book->book_name,20);
cout<<"作者姓名"<<endl;
cin.getline(str_book->writer,20);
cout<<"请输入采购量"<<endl;
cin>>i;
str_book->now_number=i;
str_book->sum_number=i;
cout<<"收录完毕"<<endl;
cout<<"请按回车键确认"<<endl;
getchar();
}
}
void serch(Book *str_book)
{
system("cls");
int x;
cout<<"请输入图书书号"<<endl;
cin>>x;
while(str_book->book_id==x||str_book->book_id==0)
{
str_book++;
}
if(str_book==0)
{
cout<<"对不起,没有此图书"<<endl;
}
else
{
cout<<"图书书号:"<<str_book->book_id<<endl;
cout<<"图书书名:"<<str_book->book_name<<endl;
cout<<"作者姓名:"<<str_book->writer<<endl;
cout<<"现存量:"<<str_book->now_number<<endl;
cout<<"库存量:"<<str_book->sum_number<<endl;
}
getchar();
}

void borrow(Book *str_book,Member *str_member)
{
system("cls");
int x,y;
cout<<"请输入借书会员号:"<<endl;
cin>>y;
while(str_member->ID==y||str_member->ID==0)
{
str_member++;
}
if(str_member->ID==0)
{
cout<<"对不起,没有此会员"<<endl;
}
else
{
cout<<"请输入所借图书书号"<<endl;
cin>>x;
while(str_book->book_id==x||str_book->book_id==0)
{
str_book++;
}
if(str_book->book_id==0)
{
cout<<"对不起,没有此图书"<<endl;
}
else
{
if(str_book->now_number==0)
{
cout<<"图书库存为0,无法借阅"<<endl;
}
else
{
int y;
cout<<"请输入借书时间:"<<endl;
cin>>y;
str_member->time=y;
str_book->now_number--;
str_member->borrow_number++;
str_member->borrow_book_id=x;
cout<<"借书成功"<<endl;
}
}
}
getchar();
}

void get(Book *str_book,Member *str_member)
{
system("cls");
int x,y;
cout<<"请输入归还图书会员号:"<<endl;
cin>>y;
while(str_member->ID==y||str_member->ID==0)
{
str_member++;
}
if(str_member->ID==0)
{
cout<<"对不起,没有此会员"<<endl;
}
else
{
cout<<"请输入归还图书书号:"<<endl;
cin>>x;
while(str_book->book_id==x||str_book->book_id==0)
{
str_book++;
}
if(str_book->book_id==0)
{
cout<<"对不起,没有此图书"<<endl;
}
else
{
str_book->now_number++;
str_member->borrow_number--;
str_member->time=0;
str_member->borrow_book_id=0;
cout<<"还书成功"<<endl;
}
}
getchar();
}

void drop(Book *str_book,Index *str_index)
{
system("cls");
int x,count=0;
cout<<"请输入删除图书书号:"<<endl;
cin>>x;
while(str_book->book_id==x||str_book->book_id==0)
{
str_book++;
count++;
}
if(str_book->book_id==0)
{
cout<<"对不起,没有此图书"<<endl;
}
else
{
while(str_book->book_id==0)
{
str_book[count]=str_book[count+1];
count++;
cout<<"删除成功"<<endl;
}
}
getchar();
}

void add_member(Member *str_member)
{
system("cls");
while(str_member->ID==0)
{
str_member++;
}
cout<<"请输入会员ID:"<<endl;
cin>>str_member->ID;
cout<<"增加成功"<<endl;
getchar();
}

void serch_member(Member *str_member)
{
system("cls");
int y;
cout<<"请输入查询会员号:"<<endl;
cin>>y;
while(str_member->ID==y||str_member->ID==0)
{
str_member++;
}
if(str_member->ID==0)
{
cout<<"对不起,没有此会员"<<endl;
}
else
{
cout<<"会员ID为:"<<str_member->ID<<endl;
cout<<"会员所借图书册数为:"<<str_member->borrow_number<<endl;
}
getchar();
}

void drop_member(Member *str_member)
{
system("cls");
int y,count=0;
cout<<"请输入删除会员号:"<<endl;
cin>>y;
while(str_member->ID==y||str_member->ID==0)
{
str_member++;
count++;
}
if(str_member->ID==0)
{
cout<<"对不起,没有此会员"<<endl;
}
else
{
while(str_member->ID==0)
{
str_member[count]=str_member[count+1];
count++;
cout<<"删除成功"<<endl;
}
}
getchar();
}

void borrow_book(Book *str_book,Member *str_member)
{
system("cls");
while(str_member->borrow_number==0)
{
cout<<'\t'<<setw(8)<<"会员ID"<<'\t'<<setw(8)<<"所借图书ID"<<'\t'<<setw(8)<<"借书期限"<<endl;
cout<<'\t'<<setw(8)<<str_member->ID<<'\t'<<setw(8)<<str_member->borrow_book_id<<'\t'<<setw(8)<<str_member->time;
str_member++;
}
getchar();
}

void put()
{
system("cls");
cout<<'\t'<<"********************欢迎进入图书馆借阅系统********************"<<endl;
cout<<'\t'<<"******************** 请选择所需要的功能 ********************"<<endl;
cout<<'\t'<<"*****1 增加图书 2 查询图书******"<<endl;
cout<<'\t'<<"*****3 图书借阅 4 归还图书******"<<endl;
cout<<'\t'<<"*****5 删除图书 6 增加会员******"<<endl;
cout<<'\t'<<"*****7 查询会员 8 删除会员******"<<endl;
cout<<'\t'<<"*****9 借书信息 0 退出系统******"<<endl;
cout<<'\t'<<"*************************************************************"<<endl;
}
int main()
{

int x;
Member *str_member=new Member[100];
Book *str_book=new Book[100];
Index *str_index=new Index;
while(1)
{
put();
cin>>x;
switch(x)
{
case 1:add(str_book,str_index) ;break;
case 2:serch(str_book); break;
case 3:borrow(str_book,str_member); break;
case 4:get(str_book,str_member); break;
case 5:drop(str_book,str_index); break;
case 6:add_member(str_member); break;
case 7:serch_member(str_member);break;
case 8:drop_member(str_member);break;
case 9:borrow_book(str_book,str_member);break;
}
}
}

以上是完整程序,每次进入主函数中while循环后,子程序就很快结束,直接回到循环
...全文
1184 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
未狂 2015-12-24
  • 打赏
  • 举报
回复
单步调试没问题,直接运行出错 有很大可能就是索引越界,前几步都正常,推进大了,代码逻辑出错,指针越界、数组越界都有可能
seanking1987 2015-12-23
  • 打赏
  • 举报
回复
LZ会单步跟踪,到关键步骤打印一下值不就找到错误所在了?
lm_whales 2015-12-23
  • 打赏
  • 举报
回复
插入算法错误,书被你插入到数组外部了
jackydi 2015-12-23
  • 打赏
  • 举报
回复
程序也太长了。
赵4老师 2015-12-23
  • 打赏
  • 举报
回复
void add_member(Member *str_member)
{
    system("cls");
    Member *s=str_member;
    while(s->ID==0)
    {
        s++;
    }
    cout<<"请输入会员ID:"<<endl;
    cin>>s->ID;
    cout<<"增加成功"<<endl;
    Sleep(2000);
}
马凌翔 2015-12-22
  • 打赏
  • 举报
回复
目前好了,我发现是因子函数中while的判断条件错误了,已经改正如下
#include<iostream>
#include<iomanip>
#include <stdlib.h>
#include <windows.h>
using namespace std;

class Book
{
public:
	int book_id;
	char book_name[20];
	char writer[20];
	int now_number;
	int sum_number;
	Book();
};
class Member
{
public:
	int ID;
	int borrow_number;
	int borrow_book_id;
	int time;
	Member()
	{
		borrow_book_id=0;
		time=0;
		ID=0;
		borrow_number=0;
	}
};

class Node 
{
public:
    int data;
    Node* next;
    Node(int _data) 
	{
		data=_data;
        next = NULL;
    }
};
class Index 
{
private:
    Node* head;
public:
    Index() 
	{
        head = NULL;
    }
    void insert(Node *node, int index) 
	{
        if (head == NULL) 
		{
            head = node;
            return;
        }
        if (index == 0) 
		{
            node->next = head;
            head = node;
            return;
        }
        Node *current_node = head;
        int count = 0;
        while (current_node->next != NULL && count < index - 1) 
		{
            current_node = current_node->next;
            count++;
        }
        if (count == index - 1) 
		{
            node->next = current_node->next;
            current_node->next = node;
        }
    }
    void output() 
	{
        if (head == NULL) 
		{
            return;
        }
        Node *current_node = head;
        while (current_node != NULL) 
		{
            cout << current_node->data <<endl;
            current_node = current_node->next;
        }
        cout << endl;
    }
    void delete_node(int index)
	{
        if(head==NULL)
		{
			return ;
		}
        Node *current_node=head;
        int count=0;
        if(index==0)
		{
            head=head->next;
            delete current_node;
            return ;
        }
        while(current_node->next!=NULL&&count<index-1)
		{
            current_node=current_node->next;
            count++;
        }
        if(count==index-1 &¤t_node->next!=NULL)
		{
            Node *delete_node=current_node->next;
            current_node->next=delete_node->next;
            delete delete_node;
        }
    }
	int serch(int index)
	{
		if (head == NULL) 
		{
            return 0;
        }
		Node *current_node = head;
		while(current_node->data!=index && current_node->next != NULL)
		{
			current_node=current_node->next;
		}
		if(current_node->data==index)
		{
			return 1;
		}
		else
		{
			return 0;
		}
	}
};

Book::Book()
{
	book_id=0;
	now_number=0;
	sum_number=0;
}

void add(Book *str_book,Index *str_index)
{
	system("cls");
	int new_id,count=0;
	cout<<"请输入图书的书号"<<endl;
	cin>>new_id;
	while(str_book->book_id!=new_id&&str_book->book_id==0)
	{
		str_book++;
		count++;
	}
	if(str_book->book_id==new_id)
	{
		cout<<"此图书存在,请输入增加库存量"<<endl;
		int i;
		cin>>i;
		str_book->sum_number=i;
	}
	else
	{
		int i;
		str_book->book_id=new_id;
		cout<<"请输入图书书名"<<endl;
		cin.ignore(1024,'\n');
		cin.getline(str_book->book_name,20);
		cout<<"作者姓名"<<endl;
		cin.getline(str_book->writer,20);
		cout<<"请输入采购量"<<endl;
		cin>>i;
		str_book->now_number=i;
		str_book->sum_number=i;
		cout<<"收录完毕"<<endl;
		cout<<"回到主程序"<<endl;
		Sleep(2000);
	}
}
void serch(Book *str_book)
{
	system("cls");
	int x;
	cout<<"请输入图书书号"<<endl;
	cin>>x;
	while(str_book->book_id!=x&&str_book->book_id!=0)
	{
		str_book++;
	}
	if(str_book->book_id==0)
	{
		cout<<"对不起,没有此图书"<<endl;
	}
	else
	{
		cout<<"图书书号:"<<str_book->book_id<<endl;
		cout<<"图书书名:"<<str_book->book_name<<endl;
		cout<<"作者姓名:"<<str_book->writer<<endl;
		cout<<"现存量:"<<str_book->now_number<<endl;
		cout<<"库存量:"<<str_book->sum_number<<endl;
	}
	Sleep(2000);
}

void borrow(Book *str_book,Member *str_member)
{
	system("cls");
	int x,y;
	cout<<"请输入借书会员号:"<<endl;
	cin>>y;
	while(str_member->ID!=y&&str_member->ID!=0)
	{
		str_member++;
	}
	if(str_member->ID==0)
	{
		cout<<"对不起,没有此会员"<<endl;
	}
	else
	{
		cout<<"请输入所借图书书号"<<endl;
		cin>>x;
		while(str_book->book_id!=y&&str_book->book_id!=0)
		{
			str_book++;
		}
		if(str_book->book_id==0)
		{
			cout<<"对不起,没有此图书"<<endl;
		}
		else
		{
			if(str_book->now_number==0)
			{
				cout<<"图书库存为0,无法借阅"<<endl;
			}
			else
			{
				int y;
				cout<<"请输入借书时间:"<<endl;
				cin>>y;
				str_member->time=y;
				str_book->now_number--;
				str_member->borrow_number++;
				str_member->borrow_book_id=x;
				cout<<"借书成功"<<endl;
			}
		}
	}
	Sleep(2000);
}

void get(Book *str_book,Member *str_member)
{
	system("cls");
	int x,y;
	cout<<"请输入归还图书会员号:"<<endl;
	cin>>y;
	while(str_member->ID!=y&&str_member->ID!=0)
	{
		str_member++;
	}
	if(str_member->ID==0)
	{
		cout<<"对不起,没有此会员"<<endl;
	}
	else
	{
		cout<<"请输入归还图书书号:"<<endl;
		cin>>x;
		while(str_book->book_id!=y&&str_book->book_id!=0)
		{
			str_book++;
		}
		if(str_book->book_id==0)
		{
			cout<<"对不起,没有此图书"<<endl;
		}
		else
		{
			str_book->now_number++;
			str_member->borrow_number--;
			str_member->time=0;
			str_member->borrow_book_id=0;
			cout<<"还书成功"<<endl;
		}
	}
	Sleep(2000);
}

void drop(Book *str_book,Index *str_index)
{
	system("cls");
	int x,count=0;
	cout<<"请输入删除图书书号:"<<endl;
	cin>>x;
	while(str_book->book_id!=x&&str_book->book_id!=0)
	{
		str_book++;
		count++;
	}
	if(str_book->book_id==0)
	{
		cout<<"对不起,没有此图书"<<endl;
	}
	else
	{
		while(str_book->book_id==0)
		{
			str_book[count]=str_book[count+1];
			count++;
			cout<<"删除成功"<<endl;
		}
	}
	Sleep(2000);
}

void add_member(Member *str_member)
{
	system("cls");
	while(str_member->ID==0)
	{
		str_member++;
	}
	cout<<"请输入会员ID:"<<endl;
	cin>>str_member->ID;
	cout<<"增加成功"<<endl;
	Sleep(2000);
}

void serch_member(Member *str_member)
{
	system("cls");
	int y;
	cout<<"请输入查询会员号:"<<endl;
	cin>>y;
	while(str_member->ID!=y&&str_member->ID!=0)
	{
		str_member++;
		cout<<str_member->ID<<endl;
	}
	if(str_member->ID==0)
	{
		cout<<"对不起,没有此会员"<<endl;
	}
	else
	{
		cout<<"会员ID为:"<<str_member->ID<<endl;
		cout<<"会员所借图书册数为:"<<str_member->borrow_number<<endl;
	}
	Sleep(2000);
}

void drop_member(Member *str_member)
{
	system("cls");
	int y,count=0;
	cout<<"请输入删除会员号:"<<endl;
	cin>>y;
	while(str_member->ID==y&&str_member->ID==0)
	{
		str_member++;
		count++;
	}
	if(str_member->ID==0)
	{
		cout<<"对不起,没有此会员"<<endl;
	}
	else
	{
		while(str_member->ID==0)
		{
			str_member[count]=str_member[count+1];
			count++;
			cout<<"删除成功"<<endl;
		}
	}
	Sleep(2000);
}

void borrow_book(Book *str_book,Member *str_member)
{
	system("cls");
	while(str_member->borrow_number!=0)
	{
		cout<<'\t'<<setw(8)<<"会员ID"<<'\t'<<setw(8)<<"所借图书ID"<<'\t'<<setw(8)<<"借书期限"<<endl;
		cout<<'\t'<<setw(8)<<str_member->ID<<'\t'<<setw(8)<<str_member->borrow_book_id<<'\t'<<setw(8)<<str_member->time;
		str_member++;
	}
	Sleep(2000);
}

void put()
{
	system("cls");
	cout<<'\t'<<"********************欢迎进入图书馆借阅系统********************"<<endl;
	cout<<'\t'<<"********************  请选择所需要的功能  ********************"<<endl;
	cout<<'\t'<<"*****1 增加图书                               2 查询图书******"<<endl;
	cout<<'\t'<<"*****3 图书借阅                               4 归还图书******"<<endl;
	cout<<'\t'<<"*****5 删除图书                               6 增加会员******"<<endl;
	cout<<'\t'<<"*****7 查询会员                               8 删除会员******"<<endl;
	cout<<'\t'<<"*****9 借书信息                               0 退出系统******"<<endl;
	cout<<'\t'<<"*************************************************************"<<endl;
}
int main()
{
	
	int x=1;
	Member *str_member=new Member[10];
	Book *str_book=new Book[10];
	Index *str_index=new Index;
	while(x!=0)
	{
		put();
		cin>>x;
		switch(x)
	{
	case 1:add(str_book,str_index) ;break;
	case 2:serch(str_book); break;
	case 3:borrow(str_book,str_member); break;
	case 4:get(str_book,str_member); break;
	case 5:drop(str_book,str_index); break;
	case 6:add_member(str_member); break;
	case 7:serch_member(str_member);break;
	case 8:drop_member(str_member);break;
	case 9:borrow_book(str_book,str_member);break;
	}
	}
	return 0; 
}
但是,,有另外一个问题,就是为什么我的add函数赋值以后,其他函数在调用就没有值了

65,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧