新手图书馆管理
[code=C/C++][/#include <iostream>
#include <fstream>
#include <iomanip>
#include"book.cpp"
using namespace std;
void domenu(char c);
void searchbook1();
void drawshanchu();
book temp[100];
void drawmenu()//绘制主菜单
{
const int menuitems=7;//菜单的行数
char menuitem[menuitems][100]=//一行的100字符
{ "\n\n*********欢迎光临本图书馆***********",
" 1.阅览书籍",
" 2.查询书籍",
" 3.借书",
" 4.还书",
" 5.管理员登陆",
" 6.退出系统"
};
do{
system("cls");//清屏
for(int i=0;i<menuitems;i++)
cout<<menuitem[i]<<endl;//屏幕输出主菜单
char choice;
cout<<"请输入1-6之间的选择:"<<endl;
cin>>choice;
domenu(choice);
}while(true);//死循环,出现exit时退出
}
void domenu(char c)
{
switch(c)//关于对应选择的后续操作
{
case '1':
system("cls");
cout<<"***阅览书籍***"<<endl;
void output();
output();
break;
case '2':
system("cls");
void chaxun();
chaxun();
break;
case '3':
system("cls");
cout<<"***借书***"<<endl;
system("pause");
break;
case '4':
system("cls");
cout<<"***还书***"<<endl;
system("pause");
break;
case '5':
void librarian_in();
librarian_in();
break;
case '6':
cout<<"谢谢您的使用...欢迎下次光临!"<<endl;
system("pause");
exit(0);
default:
cout<<"您的输入有误"<<endl;
system("pause");
}
}
int main()//主函数
{
drawmenu();
system("pause");
return 0;
}
void yuelan()
{}
void chaxun()//查询菜单
{
system("cls");
cout<<"***查询书籍***"<<endl;
cout<<"请输入要查询的书名,或者按任意键键返回上级菜单:"<<endl;
searchbook1();
}
void librarian_in()//管理员登陆菜单,有点小问题
{
system("cls");
cout<<"***管理员登陆***\n"<<endl;
cout<<"请输入登录密码:"<<endl;
static int key=000;
cin>>key;
if(key==000)
{
void librarian_do();
librarian_do();
}
else
{
cout<<"您输入的密码有误,按任意键重新输入."<<endl;
system("pause");
librarian_in();
}
}
void librarian_do()//管理员操作菜单及后续操作..
{
system("cls");
cout<<"\n\n你好,请输入你要的操作\n1.添加图书\n2.删除图书\n3.返回主菜单\n你好,请输入你要的操作"<<endl;
char choice;
cin>>choice;
switch(choice)
{
case '1':
system("cls");
void putin();
putin();
system("pause");
break;
case '2':
system("cls");
cout <<"****删除图书****"<<endl;
drawshanchu();
system("pause");
break;
case '3':drawmenu();
default:cout<<"您的输入有误,按任意键重新输入"<<endl;
system("pause");
librarian_do();}
}
void drawshanchu()
{
cout<<"请输入你要删除的图书名:"<<endl;
string c;
cin>>c;
ifstream search("d:\\book.txt",ios::binary);
if(!search)
{
cout<<"打开文件失败!"<<endl;
abort();
}
int i=1;
do
{
search.read((char*)&temp[i],sizeof(temp[i]));
if(search.eof())
break;
if(temp[i].getname()==c)
{
cout<<temp[i].getname()<<setw(10)<<temp[i].getauthor()<<setw(10)<<temp[i].getisbn()<<setw(10)<<temp[i].getstate()<<endl;
cout<<"确定删除?"<<"\n1.是"<<"\n2.否"<<endl;
char choice;
cin>>choice;
switch(choice)
{
case '1':
system("cls");
temp[i].shangchu();
cout<<"删除成功"<<endl;
system("pause");
break;
case '2':
system("cls");
break;
default:cout<<"您的输入有误,按任意键重新输入"<<endl;
system("pause");}
}
else{
system("cls");
cout<<"对不起,你所查询的图书不存在!"<<endl;
}
i++;
}while(true);
}
void putin() //文件输入
{
ofstream fout("d:\\book.txt", ios::binary);
book book1;
char a[200];//书名
char b[200];//书的作者
string c;//书号
cout<<"请输入书名:"<<endl;
cin>>a;
book1.setname(a);
cout<<"请输入书的作者:"<<endl;
cin>>b;
book1.setauthor(b);
cout<<"请输入书号:"<<endl;
cin>>c;
book1.setisbn(c);
book1.setstatue();
fout.write((char *)(&book1), sizeof(book));
fout.close();
}
void output() //文件的提取
{
ifstream fin("d:\\book.txt", ios::binary);
if(!fin)
{
cout<<"文件打开失败!!"<<endl;
abort();
}
int i=1;
cout<<"书名"<<setw(10)<<"作者"<<setw(10)<<"书号"<<setw(10)<<"状态"<<endl;
do{
fin.read((char *)(&temp[i]), sizeof(temp[i]));
if(fin.eof())
break;
cout<<temp[i].getname()<<setw(10)<<temp[i].getauthor()<<setw(10)<<temp[i].getisbn()<<setw(10)<<temp[i].getstate()<<endl;
i++;
}while(true);
fin.close();
system("pause");
}
void searchbook1()//用书名搜索
{
string c;
cin>>c;
ifstream search("d:\\book.txt",ios::binary);
if(!search)
{
cout<<"打开文件失败!"<<endl;
abort();
}
int i=1;
do
{
search.read((char*)&temp[i],sizeof(temp[i]));
if(search.eof())
break;
if(temp[i].getname()==c)
{
cout<<temp[i].getname()<<setw(10)<<temp[i].getauthor()<<setw(10)<<temp[i].getisbn()<<setw(10)<<temp[i].getstate()<<endl;
}
else{
system("cls");
cout<<"对不起,你所查询的图书不存在!"<<endl;
}
i++;
}while(true);
search.close();
system("pause");
}]本人做的图书管理系统...还有些问题...总是在阅览书籍之后再退出系统..总有未处理异常报出,说访问冲突....
望有大师帮帮我....
[解决办法]
这类题目用数据库设计最好,在写程序前,应该想好数据结果怎么设计。
对图书管理,我的设计大概是这样的
1.图书信息记录,新书到了,要录入图书信息,包括作者,书号,题目,关键字,分类。也应该提供修改的功能。一般不需更新,每个图书需要1个唯一的ID来区分,记作图书信息ID。每种书对应一个记录。如图书馆买了20个《C++程序设计》,应该只有1条记录:
2. 图书状态信息:每一本图书对应1条记录,20本数应该对应20条记录。每本书的ID,图书信息ID,状态。状态需要不断更新,每次借出或者归还都要更新状态, 1:表示在图书馆,0:表示不再图书馆。也可以不存储这个字段,直接查询图书借还记录而得到,显示是需要 根据 图书信息ID 得到书名等信息。
3. 图书借还记录,每个记录应该包括,图书ID(2中的图书ID),借阅人ID,借还时间,借出类型(如-1借出,1归还)。注意,图书 借出/归还应该各生成1条记录,而不是将借阅记录清除。不提供修改和删除 借/还 记录的功能。应该通过查询某本书的的 借/还 记录来 得到或者 更新 图书的状态信息。
如果每种书只有1本(图书馆应该不是这么抠门),可将1和2合并。
[解决办法]
逻辑搞不清楚的话,程序肯定搞不好的吧。
[解决办法]
楼主还是单步调试吧,出现内存不可读什么的,就先看看你的指针什么的有没有分配内存,数组有没有越界。本来想给你调试的,发现很多文件都没有。
[解决办法]
用vector写吧。我初学C++的时候用的面向过程思想+链表,各种复杂。现在面向对象+vector。感觉挺容易的