单链表实现图书管理系统.docx

上传人:b****3 文档编号:24730281 上传时间:2023-06-01 格式:DOCX 页数:15 大小:17.21KB
下载 相关 举报
单链表实现图书管理系统.docx_第1页
第1页 / 共15页
单链表实现图书管理系统.docx_第2页
第2页 / 共15页
单链表实现图书管理系统.docx_第3页
第3页 / 共15页
单链表实现图书管理系统.docx_第4页
第4页 / 共15页
单链表实现图书管理系统.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

单链表实现图书管理系统.docx

《单链表实现图书管理系统.docx》由会员分享,可在线阅读,更多相关《单链表实现图书管理系统.docx(15页珍藏版)》请在冰豆网上搜索。

单链表实现图书管理系统.docx

单链表实现图书管理系统

单链表:

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&&j

j++;

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&&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<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&&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<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;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文件"<

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1