单链表实现图书管理系统.docx
《单链表实现图书管理系统.docx》由会员分享,可在线阅读,更多相关《单链表实现图书管理系统.docx(13页珍藏版)》请在冰豆网上搜索。
单链表实现图书管理系统
单链表:
typedefstruct{
charnum[20];
charname[50];
floatpri;
}Book;
typedefstructLNode{//线性表的单链表存储
Bookbook;//数据域
structLNode*next;//指针域
}LNode,*LinkList;
voidInput(LinkList&L){//前插法创建图书链表
LinkListp;
L=newLNode;
L->next=NULL;//初始化单链表
ifstreaminFile("book.txt");
if(!
inFile){
cerr<<"Cannotopenthisfile!
"<exit
(1);
}
charbook_head1[10],book_head2[10],book_head3[10];//定义文件中标题
inFile>>book_head1>>book_head2>>book_head3;//读取文件中的标题
while(!
inFile.eof()){//到达文件尾部前逐行依次读取所有图书数据
p=newLNode;//生成新结点
inFile>>p->book.num>>p->book.name>>p->book.pri;
p->next=L->next;//插入到表头
L->next=p;h
}
inFile.close();
cout<<"读取完毕!
"<}
voidOutput(LinkList&L){//输出
LinkListp;
p=L->next;
while(p){
cout<book.num<<"\t"<book.name<<"\t"<book.pri<p=p->next;
}
cout<<"\n信息显示完毕\n"<}
voidSearchname(LinkList&L){
LinkListp;
p=L->next;
charname1[20];
cout<<"请输入要查找的书名:
";
cin>>name1;
while(p){
if(strcmp(name1,p->book.name)==0){
cout<book.num<<"\t"<book.name<<"\t"<book.pri<}
p=p->next;
}
}
voidSearchnum(LinkList&L){
inti;
intj=0;
LinkListp;
p=L->next;//p指向第一个结点
cout<<"请输入要查找的书籍的位置";
cin>>i;
while(p&&jj++;
p=p->next;
}
if(!
p||j>i){//第i个元素不存在
cout<<"错误!
"<}
cout<<"第"<
"<cout<book.num<<"\t"<book.name<<"\t"<book.pri<}
voidMax(LinkList&L){
LinkListpmax,p;
pmax=L->next;
p=L->next->next;
while(p){
if(p->book.pri>pmax->book.pri)
pmax=p;
p=p->next;
}
cout<book.num<<"\t"<book.name<<"\t"<book.pri<}
voidSort(LinkListL){
cout<<"此功能还未实现,研究中"<}
voidInverse(LinkList&L){
LinkListp;//待插入到链表的节点
LinkListq;
p=L->next;
L->next=NULL;//初始化链表
ofstreamoutFile("bookinverse.txt");
//每一次将p插入到L(头结点)与L->next(链表的第一个结点之间)
while(p){
q=p->next;
p->next=L->next;
L->next=p;
p=q;
}
p=L->next;//循环完后,p指向的是链表末尾,需要重置回首元结点,否则无法写入文件
while(p){
cout<book.num<<"\t"<book.name<<"\t"<book.pri<outFile<book.num<<"\t"<book.name<<"\t"<book.pri<p=p->next;
}
cout<<"信息已写入bookinverse.txt中!
"<}
voidCount(LinkListL){
inti=0;
LinkListp;
p=L->next;
while(p){
i++;
p=p->next;
}
cout<<"当前的图书总数为:
"<
}
voidInsert(LinkListL){
Bookbk;
LinkListp=L;//初始化
LinkLists=newLNode;//新结点s
inti;
intj=0;
cout<<"请输入待插入书籍的位置"<cin>>i;
cout<<"请输入待插入的书籍的信息"<cout<<"书号:
"<cin>>bk.num;
cout<<"书名:
"<cin>>bk.name;
cout<<"价格:
"<cin>>bk.pri;
while(p&&jj++;
p=p->next;
}
if(!
p||j>i-1){
cout<<"错误!
"<}
s->book=bk;//将结点s的数据域置为bk
s->next=p->next;//将结点s插入L中
p->next=s;
//重新写入book.txt文件
ofstreamoutFile("book.txt");
p=L->next;
while(p){
outFile<book.num<<"\t"<book.name<<"\t"<book.pri<p=p->next;
}
cout<<"插入新的书籍后的书籍信息已重新写入book.txt文件"<}
voidDelete(LinkListL){
Bookbk1;
LinkListp=L;//初始化
LinkListq;//临时保存被删除结点的地址以备释放
inti;
intj=0;
cout<<"请输入待删除书籍的位置"<cin>>i;
while(p->next&&jj++;
p=p->next;
}
if(!
(p->next)||j>i-1){
cout<<"错误!
"<}
q=p->next;
p->next=q->next;
bk1=q->book;
deleteq;
//重新写入book.txt文件
ofstreamoutFile("book.txt");
p=L->next;
while(p){
outFile<book.num<<"\t"<book.name<<"\t"<book.pri<p=p->next;
}
cout<<"删除所选书籍后的书籍信息已重新写入book.txt文件"<}
顺序表
typedefstruct{
Book*book;
intlength;//图书表的图书记录个数
}SqList;
voidInput(SqList&L){
inti=0;
charbook_head1[10],book_head2[10],book_head3[10];//定义文件中标题
L.book=newBook[MAXSIZE];
ifstreaminFile("book.txt");//打开文件
if(!
inFile){
cerr<<"Cannotopenthisfile!
"<exit
(1);
}
inFile>>book_head1>>book_head2>>book_head3;//读取文件中的标题
L.length=0;
while(!
inFile.eof()){//逐行依次读取所有图书数据
inFile>>L.book[i].num>>L.book[i].name>>L.book[i].pri;
i++;//记录图书个数
}
L.length=i;
inFile.close();
cout<<"\n读取book.txt信息完毕!
"<}
voidOutput(SqListL){
for(inti=0;icout<}
cout<<"\n信息显示完毕\n"<}
voidSearchname(SqList&L){
inty;
charname1[20];
cout<<"请输入要查找的书名:
";
cin>>name1;
for(y=0;y//比较输入的name1与结构体数组中name是否相同;
if(strcmp(name1,L.book[y].name)==0){
cout<