单链表实现图书管理系统.docx
- 文档编号:4084791
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:13
- 大小:17.34KB
单链表实现图书管理系统.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< 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< } p=p->next; } } voidSearchnum(LinkList&L){ inti; intj=0; LinkListp; p=L->next;//p指向第一个结点 cout<<"请输入要查找的书籍的位置"; cin>>i; while(p&&j j++; p=p->next; } if(! p||j>i){//第i个元素不存在 cout<<"错误! "< } cout<<"第"< "< cout< } 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< } 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< outFile< 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&&j j++; 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< p=p->next; } cout<<"插入新的书籍后的书籍信息已重新写入book.txt文件"< } voidDelete(LinkListL){ Bookbk1; LinkListp=L;//初始化 LinkListq;//临时保存被删除结点的地址以备释放 inti; intj=0; cout<<"请输入待删除书籍的位置"< cin>>i; while(p->next&&j j++; 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< 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;i cout< } 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< break; } } } voidSearchnum(SqList&L){ inti; cout<<"请输入要查找的书的位置"< cin>>i; cout< } voidMax(SqListL){ intmax=0; cout<<"价格最高的书是: "< cout<<"书号"<<"\t"<<"书名"<<"\t"<<"价格"< for(inti=0;i { if(L.book[i].pri>L.book[max].pri) max=i; } cout< for(intj=0;j { if(j! =max) if(L.book[j].pri==L.book[max].pri) cout< } cout< } voidSort(SqListL){ //冒泡排序 Bookbook1;//重新定义一个结构体变量 for(intm=0;m for(intn=0;n if(L.book[n].pri //交换结构体数组的值 book1=L.book[n]; L.book[n]=L.book[n+1]; L.book[n+1]=book1; } } } //写入booksort.txt文件 ofstreamoutFile("booksort.txt",ios: : out); for(m=0;m outFile< } outFile.close(); cout<<"排序后书籍信息已写入booksort.txt文件"< } voidInverse(SqListL){ Input(L); Bookbook2; inti,j,k; k=L.length/2; for(i=0;i j=L.length-1-i; book2=L.book[i]; L.book[i]=L.book[j]; L.book[j]=book2; } //写入bookinverse.txt文件 ofstreamoutFile("bookinverse.txt"); for(i=0;i outFile< } outFile.close(); cout<<"排序后书籍信息已写入bookinverse.txt文件"< } voidCount(SqListL){ cout<<"当前的图书总数为: "< } voidInsert(SqListL){ Bookbook3; inti; intj; cout<<"请输入待插入书籍的位置"< cin>>i; cout<<"请输入待插入的书籍的信息"< cout<<"书号: "< cin>>book3.num; cout<<"书名: "< cin>>book3.name; cout<<"价格: "< cin>>book3.pri; if(i<1||i>L.length+1){//i值不合法 cout<<"输入的位置错误,请重新输入: "< cout<<"请输入待插入书籍的位置"< cin>>i; } for(j=L.length-1;j>=i-1;j--){ L.book[j+1]=L.book[j];//输入位置及之后的元素位置后移 } L.book[i-1]=book3;//将新元素book3放入第i个位置 L.length++;//表长增加1 //重新写入book.txt文件 ofstreamoutFile("book.txt"); for(i=0;i outFile< } outFile.close(); cout<<"插入新的书籍后的书籍信息已重新写入book.txt文件"< } voidDelete(SqListL){ Bookbook4; inti; intj; cout<<"请输入待删除书籍的位置"< cin>>i; if(i<1||i>L.length){ cout<<"输入的位置错误,请重新输入: "< cout<<"请输入待删除书籍的位置"< cin>>i; } book4=L.book[i-1];//将要删除的元素保存在book4中 for(j=i;j<=L.length-1;j++){ L.book[j-1]=L.book[j];//删除位置之后的元素前移 } L.length--;//表长-1 //重新写入book.txt文件 ofstreamoutFile("book.txt"); for(i=0;i } outFile.close(); cout<<"删除所选书籍后的书籍信息已重新写入book.txt文件"< } WelcomeTo Download! ! ! 欢迎您的下载,资料仅供参考!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单链表 实现 图书 管理 系统