数据结构课程设计图书管理系统
- 格式:doc
- 大小:424.00 KB
- 文档页数:32
西安交通大学编号学院计算机系课程设计(数据结构)班级姓名学号指导教师二○一三年 6 月 26 日课程设计任务书及成绩评定课题名称图书管理系统Ⅰ、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。
(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
2、设计题目要求:设计内容:本系统应完成一下几方面的功能:输入信息——enter();显示信息———display( );查找以书名作为关键字———search( );删除信息———delete( );存盘———save ( );装入———load( ) ;设计要求:1)每条信息至包含:书名(B_NAME )作者名(B_AUTHOR)编号名(B_NO)出版社(B_PUB)馆藏量(B_SUM)2)作为一个完整的系统,应具有友好的界面和较强的容错能力3)上机能正常运行,并写出课程设计报告Ⅱ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一三年月日目录第一章概述 (1)第二章系统分析 (2)第三章概要设计………………………………………………………第四章详细设计………………………………………………………第五章运行与测试……………………………………………………第六章总结与心得……………………………………………………参考文献………………………………………………………………第一章概述七个模块第二章系统分析图书管理基本内容包括:添加,查找,删除图书信息,,上述基本功能用链式存储比较方便,由于查找,删除都是以书名或电话号码为关键字进行的,因此要用到双向链表,效率高,以实现各种功能。
由此重点和难点是双向链表的建立,查找,删除等基本操作。
图书管理软件,通过各种接口函数完成对图书的添加,查找,删除,看似简单,实际实现起来,还是有点困难,关键是要考虑到各种情况程序执行时的命令:本程序为了使用时的方便,采用菜单式的方式来完成程序的演示,几乎不用输入什么特殊的命令,只需按提示输入选者即可。
界面友好,适合用户使用习惯。
测试数据。
在我的这个图书管理软件中;基本函数有dlink *enter(dlink *h);// 输入图书信息函数int menu_select();//菜单选择函数dlink *add(dlink *h);//增加读者信息函数void search(dlink *h) ;//查找图书函数dlink *deletebyB_name(dlink *h);// 以书名为关键字删除dlink *deletebyno(dlink *h) ;//以图书编号为关键字删除void output(dlink *h);// 输出图书信息函数void searchbyB_name(dlink *h) //按书名查找void searchbyno(dlink *h) //按编号查找void save(dlink *h) //保存图书信息到文件详细分析:1.通过dlink *creatlist(){dlink *head,*p,*r;p=new dlink;head=p;r=head;p->Rlink=NULL;return head; // 创建双向链表2.通过dlink *enter(dlink *h)函数输入图书信息3.通过调用void search(dlink *h)函数选择是以书名还是编号方式进行查找,分别调用函数void searchbyB_name(dlink *h),void searchbyno(dlink *h)完成相应功能。
3.调用函数dlink *add(dlink *h)增加图书详细。
4.通过调用dlink *deletebyB_name(dlink *h),dlink *deletebyno(dlink *h),分别以书名,电话号码为关键字进行删除。
5.调用void output(dlink *h)函数输出所有图书信息6.调用void save(dlink *h)函数保存图书信息。
第三章概要设计1.数据结构设计:添加,查找,删除图书信息,用链式存储比较方便,由于查找,删除都是以书名或电话号码为关键字进行的,因此要用到双向链表,效率高,以实现各种功能。
由此重点和难点是双向链表的建立,查找,删除等基本操作。
2.算法的设计:本系统从整体上分为7大模块:(1)输入图书信息(2)查找图书信息 //根据指定关键字进行相关查找(3)显示图书信息 //显示所有图书信息(4)增加图书信息 //向图书管理中增加图书信息(5)删除图书信息 //根据指定关键字删除图书信息(6)存储图书信息 //存储图书管理中的图书信息(7)退出程序3.功能模块图:图3.1 系统功能模块图第四章详细设计程序源代码为:#include<iostream>#include<malloc.h>#include<string>#include<iomanip>#include <conio.h>#include <stdlib.h>using namespace std;unsigned int num=0;struct information{string B_name;string B_author;string B_no;string B_pub;string B_sum;};struct information a[120];typedef struct doublelink //定义{struct information data;struct doublelink *Llink,*Rlink;}dlink;dlink *enter(dlink *h);dlink *insert(dlink *h) ;int menu_select();dlink *add(dlink *h);void search(dlink *h) ;dlink *deletebyB_name(dlink *h);dlink *deletebyno(dlink *h) ;void output(dlink *h);dlink *creatlist(){dlink *head,*p,*r;p=new dlink;head=p;r=head;p->Rlink=NULL;return head;}//*********************************************************dlink *enter(dlink *h) //创建{ dlink *head,*r,*p,*q;head=h;r=h;q=h->Rlink;system("cls");//新建用户信息p=new dlink;cout<<"\n\t\t**************** 请输入图书信息****************"<<endl;cout<<"请输入书名:"<<endl;cin>>p->data.B_name;cout<<"请输入作者名: "<<endl;cin>>p->data.B_author;cout<<"请输入编号名: "<<endl;cin>>p->data.B_no;cout<<"请输入出版社: "<<endl;cin>>p->data.B_pub;cout<<"请输入馆藏量名: "<<endl;cin >>p->data.B_sum;p->Rlink=NULL;while(q!=NULL){r=q;q=q->Rlink;}p->Llink=r;r->Rlink=p;r=p;num++;char z;cout<<" 是否要继续插入新图书信息? (Y/N):"<<endl;cin>>z;if((z=='y')||(z=='Y'))head=insert(head);return head;}//***********************************************************************dlink *insert(dlink *h) //插入新用户信息{ dlink *head=h;if(num==0){ cout<<"\n\t图书管理中没有任何图书信息,确认要添加吗?(Y/N)"<<endl;char z;cin>>z;if((z=='y')||(z=='Y'))head=add(head);else ;}elsehead=add(head);return head;}//*****************************************************************dlink *add(dlink *h){dlink *head,*r,*p,*q;head=h;r=h;q=h->Rlink;system("cls");//新建用户信息p=new dlink;cout<<"\n\t\t**************** 请输入图书信息****************"<<endl;cout<<"请输入书名:"<<endl;cin>>p->data.B_name;cout<<"请输入作者名: "<<endl;cin>>p->data.B_author;cout<<"请输入编号名: "<<endl;cin>>p->data.B_no;cout<<"请输入出版社: "<<endl;cin>>p->data.B_pub;cout<<"请输入馆藏量名: "<<endl;cin >>p->data.B_sum;p->Rlink=NULL;while(q!=NULL){r=q;q=q->Rlink;} //whilep->Llink=r;r->Rlink=p;r=p;num++;char z;cout<<" 是否要继续插入新图书信息? (Y/N):"<<endl;cin>>z;if((z=='y')||(z=='Y'))head=insert(head);return head;}//*******************************************************************************************void searchbyB_name(dlink *h) //按书名查找{if(num==0){cout<<"\n\t当前通讯录没有任何联系人信息!!!"<<endl;cout<<"\n\t\t\t*****无法执行查找操作!!!!******"<<endl;cout<<endl;}else{dlink *head,*p,*q;string nam;head=h;p=h->Rlink;int i,j=1,k=1,mark=0;system("cls");cout<<"请输入要查找的图书书名:"<<endl;cin>>nam;for(i=k;i<=num;i++,p=p->Rlink){while(p&&p->data.B_name!=nam){q=p;p=p->Rlink;j++;}if(p){cout<<"您要查找的图书信息为:"<<endl;cout<<"*******************************************************************************"<<endl;cout<<"\n\t书名: "<<p->data.B_name<<endl;cout<<"\n\t作者名: "<<p->data.B_author<<endl;cout<<"\n\t编号名: "<<p->data.B_no<<endl;cout<<"\n\t出版社: "<<p->data.B_pub<<endl;cout<<"\n\t馆藏量: "<<p->data.B_sum<<endl;cout<<"*******************************************************************************"<<endl;cout<<endl;mark=1;if(p->Rlink==NULL){cout<<"\n\t已无重名信息"<<endl;cout<<"\n\t您是否继续下一个查找???(Y/N)"<<endl;char z;cin>>z;if((z=='y')||(z=='Y'))search(head);else break;}}if(p==NULL){if(mark==1){if(q->data.B_name!=nam){cout<<"\n\t已无重名信息"<<endl;cout<<"\n\t您是否继续下一个查找???(Y/N)"<<endl;char z;cin>>z;if((z=='y')||(z=='Y'))search(head);else break;}}else{cout<<"\n\t\t^^^^^搜索的图书不存在!!!!!^^^^^^"<<endl;cout<<endl;cout<<"\n\t您是否继续下一个查找???(Y/N)"<<endl;char z;cin>>z;if((z=='y')||(z=='Y'))search(head);else break;;}}}//for}//else}//wai//**************************************************************************void searchbyno(dlink *h) //按电话号码查找{if(num==0){cout<<"\n\t当前通讯录没有任何联系人信息!!!"<<endl;cout<<"\n\t\t\t*****无法执行查找操作!!!!******"<<endl;cout<<endl;}else{dlink *head,*p,*q;string booknum;head=h;p=h->Rlink;int j=0,k=1;system("cls");cout<<"请输入要查找的图书电话号码:"<<endl;cin>> booknum;while(p&&p->data.B_no!=booknum){q=p;p=p->Rlink;j++;}if(p){cout<<"您要查找的图书信息为:"<<endl;cout<<"*******************************************************************************"<<endl;cout<<"\n\t书名: "<<p->data.B_name<<endl;cout<<"\n\t作者名: "<<p->data.B_author<<endl;cout<<"\n\t编号名: "<<p->data.B_no<<endl;cout<<"\n\t出版社: "<<p->data.B_pub<<endl;cout<<"\n\t馆藏量: "<<p->data.B_sum<<endl;cout<<"*******************************************************************************"<<endl;cout<<endl;}else {cout<<"\n\t\t^^^^^搜索的图书不存在!!!!!^^^^^^"<<endl;cout<<endl;cout<<"\n\t您是否继续下一个查找???(Y/N)"<<endl;char z;cin>>z;if((z=='y')||(z=='Y'))search(head);else ;;}}//else}//wai//*********************************************************************************void search(dlink *h){dlink *head;head=h;int choic;cout<<"\n\t\t1-按图书编号查找2-按书名查找";cout<<"\n\t\t请选择:";cin>>choic;switch (choic){case 1:searchbyno(head);break;case 2:searchbyB_name(head);break;}}//***********************************************************************************dlink *deletebyB_name(dlink *h) //按书名删除{dlink *head,*p,*q;if(num==0){ cout<<"\n\t\t当前通讯录没有任何联系人信息!!!"<<endl;cout<<"\n\t\t\t\t删除操作无法执行!!!!!!!!!"<<endl;}else{string nam;int flag=1,k=1,i,j=1;head=h;p=h->Rlink;system("pause");system("cls");cout<<"请输入要删除的图书书名:"<<endl;cin>>nam;for(i=k;i<=num;i++,p=p->Rlink){while(p&&p->data.B_name!=nam){q=p;p=p->Rlink;j++;} //whileif(p) //waiif{cout<<"您要删除的图书信息为:"<<endl;cout<<"weiyu"<<j+1<<"weizhi"<<endl;cout<<"*******************************************************************************"<<endl;cout<<"\n\t书名: "<<p->data.B_name<<endl;cout<<"\n\t作者名: "<<p->data.B_author<<endl;cout<<"\n\t编号名: "<<p->data.B_no<<endl;cout<<"\n\t出版社: "<<p->data.B_pub<<endl;cout<<"\n\t馆藏量: "<<p->data.B_sum<<endl;cout<<"*******************************************************************************"<<endl;char z;cout<<"您确定要删除该图书信息吗?(Y/N)"<<endl;cin>>z;if((z=='y')||(z=='Y')){if(num==1){p->Llink->Rlink=NULL;free(p);num--;}elseif(p->Llink==head){ p->Rlink->Llink=head;p->Llink->Rlink=p->Rlink;free(p);num--;}else if(p->Rlink==NULL){p->Llink->Rlink=NULL;free(p);num--;}else{ p->Rlink->Llink=p->Llink;q->Rlink=p->Rlink;free(p);num--;}cout<<"\n\t\t已删除成功!"<<endl;break;/*char s;cout<<"\n您是否继续删除相同书名的图书???(Y/N)"<<endl;cin>>s;if((s=='y')||(s=='Y'))continue;else break; */}else {cout<<"\n\t已放弃删除!!"<<endl;//有问题char d;cout<<"\n您是否继续删除相同书名的图书???(Y/N)"<<endl;cin>>d;if((d=='y')||(d=='Y'))continue;else break;}}//waiifelse {cout<<"没有此图书信息"<<endl;char a;cout<<"\n您是否要继续删除???(Y/N)"<<endl;cin>>a;if((a=='y')||(a=='Y'))head=deletebyB_name(head);elsebreak;}}//for}//elsecout<<endl;return head;}//wai//************************************************************************dlink *deletebyno(dlink *h) //按电话号码删除{dlink *head,*p,*q;if(num==0){ cout<<"\n\t\t当前通讯录没有任何联系人信息!!!"<<endl;cout<<"\n\t\t\t\t删除操作无法执行!!!!!!!!!"<<endl;}else{string booknum;int flag=1,k=1,j=0;head=h;p=h->Rlink;system("pause");system("cls");cout<<"请输入要删除的图书编号:"<<endl;cin>> booknum;while(p&&p->data.B_no!= booknum){q=p;p=p->Rlink;j++;} //whileif(p) //waiif{cout<<"您要删除的图书信息为:"<<endl;cout<<"*******************************************************************************"<<endl;cout<<"\n\t书名: "<<p->data.B_name<<endl;cout<<"\n\t作者名: "<<p->data.B_author<<endl;cout<<"\n\t编号名: "<<p->data.B_no<<endl;cout<<"\n\t出版社: "<<p->data.B_pub<<endl;cout<<"\n\t馆藏量: "<<p->data.B_sum<<endl;cout<<"*******************************************************************************"<<endl;char z;cout<<"您确定要删除该图书信息吗?(Y/N)"<<endl;cin>>z;if((z=='y')||(z=='Y')){if(num==1){p->Llink->Rlink=NULL;free(p);num--;}elseif(p->Llink==head){ p->Rlink->Llink=head;p->Llink->Rlink=p->Rlink;free(p);num--;}else if(p->Rlink==NULL){p->Llink->Rlink=NULL;free(p);num--;}else{ p->Rlink->Llink=p->Llink;q->Rlink=p->Rlink;free(p);num--;}cout<<"\n\t\t已删除成功!"<<endl;char a;cout<<"\n您是否要继续删除???(Y/N)"<<endl;cin>>a;if((a=='y')||(a=='Y'))head=deletebyno(head);else ;}else {cout<<"\n\t\t已放弃删除!!"<<endl;char a;cout<<"\n您是否要继续删除???(Y/N)"<<endl;cin>>a;if((a=='y')||(a=='Y'))head=deletebyno(head);else ;}} else{cout<<"\n\t没有此图书信息"<<endl;char a;cout<<"\n\n您是否要继续删除???(Y/N)"<<endl;cin>>a;if((a=='y')||(a=='Y'))head=deletebyno(head);else ;}}cout<<endl;return head;}dlink *dele(dlink *h){dlink *head;head=h;int choic;cout<<"\n\t\t1-按编号删除2-按书名删除";cout<<"\n\t\t请选择:";cin>>choic;switch (choic){case 1:head=deletebyno(head);break;case 2:head=deletebyB_name(head);break;}return head;}void output(dlink *h) // 输出{dlink *p;if(num==0){cout<<"\n\t\t当前通讯录没有任何联系人信息!!!"<<endl;cout<<"\n\t\t\t*****无法执行显示操作!!!!******"<<endl;}else{int i=0;p=h->Rlink;system("pause");system("cls");cout<<"\n\t\t输出所有图书的信息:"<<endl;cout<<"\n\t\t\t当前图书管理共有"<<num<<"个图书信息"<<endl;for(i=1;i<=num;i++){cout<<"\n\t\t\t第"<<i<<"个图书信息为:"<<endl;cout<<"*******************************************************************************"<<endl;cout<<"\n\t书名: "<<p->data.B_name<<endl;cout<<"\n\t作者名: "<<p->data.B_author<<endl;cout<<"\n\t编号名: "<<p->data.B_no<<endl;cout<<"\n\t出版社: "<<p->data.B_pub<<endl;cout<<"\n\t馆藏量: "<<p->data.B_sum<<endl;cout<<"*******************************************************************************"<<endl;p=p->Rlink;}}cout<<endl;}int menu_select(){int b;cout<<"********~(^o^)~~欢迎使用图书管理软件请按任意键进入主菜单!~~(^o^)~~********"<<endl;getch();system("cls");cout<<"\t\t*****WELCOME TO USE THIS SOFTWARE *****************"<<endl;cout<<"\t\t*****************图书管理软件********************"<<endl;cout<<"\t\t************* COPYRIGHT 2011 *********************"<<endl;cout<<"\t\t******DESIGNED BY DaiJunYou O (∩_∩)O哈哈~ *****"<<endl;cout<<"\t\t***************** MENU *************************"<<endl;cout<<"\n\t\t1: 输入图书信息"<<endl;cout<<"\n\t\t2: 查找图书信息"<<endl;cout<<"\n\t\t3: 显示图书信息"<<endl;cout<<"\n\t\t4: 增加图书信息"<<endl;cout<<"\n\t\t5: 删除图书信息"<<endl;cout<<"\n\t\t6: 存储图书信息"<<endl;cout<<"\n\t\t7: 退出本程序"<<endl;for(;;){cout<<"\n****Please make your choice(1~7)**** "<<endl;cout<<"\nYour choice is : ";cin>>b;if(b<1||b>7)continue;else{return b;break;}}}int WriteLinklistToFile(const char* strFile, dlink *h){FILE *fpFile;dlink *head = h;dlink *p;p=head->Rlink;if(!(fpFile = fopen(strFile,"w")))//以写的方式打开{printf("Open file failed\n");return 0;}while(p){fprintf(fpFile,"%s\t%s\t%s\t%s\t%s\t%s\t\n",p->data.B_name,p->data.B_author,p->data.B_no,p->data.B_pub,p->data.B_sum);p=p->Rlink;}fclose(fpFile);return 1;};void save(dlink *h){ cout<<"暂不支持很快会解决"<<endl;exit(0);dlink *head;head=h;int a;char* strB_name = "test.txt";a=WriteLinklistToFile(strB_name, head);}void main(){ dlink *head;head=creatlist();system("cls");for(;;){switch(menu_select()){case 1:head=enter(head);break;case 2:search(head);break;case 3:output(head);break;case 4:head=insert(head);break;case 5:head=dele(head);break;case 6:save(head) ;break;case 7:exit(0);}}}第五章运行与测试程序测试数据及执行流程如下系列截图:图书管理总界面,如图5.1所示,只需用户作出相应选择即可。