数据结构实验图书管理系统.docx
- 文档编号:18915983
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:16
- 大小:78.35KB
数据结构实验图书管理系统.docx
《数据结构实验图书管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构实验图书管理系统.docx(16页珍藏版)》请在冰豆网上搜索。
数据结构实验图书管理系统
电子科技大学教务处制表
实验报告
学生姓名:
学号:
指导教师:
陈昆
实验地点:
计算机学院楼307
实验时间:
2010年6月9日
一、实验室名称:
计算机学院楼307
二、实验项目名称:
三、实验学时:
4学时
四、实验原理:
五、实验目的:
6、实验内容:
创建一个图书管理系统(包括每本书的编号、书名、作者、分类信息),程序采用交互式工作方式,流程如下:
书籍管理:
完成增加新书籍和删除功能,并在完成操作之后按关键字(编号、书名、作者、种类)进行排序(插入、冒泡、快速、堆排序、归并排序等任选一种);现有如下书籍需要管理
编号
书名
作者
分类
001
GaoDengShuXue
ZhangSan
S01
002
LiLunLiXue
LiSi
L01
003
GaoDengShuXue
WangWu
S01
004
XianXingDaiShu
ZhaoLiu
S02
005
ShuJuJieGou
ZhouQi
J01
006
ShuJuKu
ZhouQi
J02
007
ShuJuJieGou
SunBa
J01
008
ShuJuJieGou
ZhangJiu
J01
书籍查找:
用二分法实现下述功能
①按编号查找
②按书名查找
③按作者查找
④按分类查找
七、实验器材(设备、元器件):
pc硬件要求:
CPUPII以上,64M内存,1OOM硬盘空间即可。
软件要求:
DOS3.0以上/Windows98/Me/XP/NT/2000。
八、实验步骤:
九、实验数据及结果分析:
一十、实验结论:
十一、总结及心得体会:
12、对本实验过程及方法、手段的改进建议:
报告评分:
指导教师签字:
实验源代码如下:
#include
#include
intBOOKNUM;//将书的数目定为全局变量,便于增加和删除时更改
constintMAXNUM=500;//最大容纳书的数目
typedefstructBookInfo{//定义书的结构体
charnum[4];
charname[50];
charauthor[50];
charsort[4];
}BookInfo;
voidInitBookList(BookInfoBookList[])//初始化,本书,乱序
{
BOOKNUM=8;
strcpy(BookList[3].num,"001");strcpy(BookList[3].name,"GaoDengShuXue");
strcpy(BookList[3].author,"ZhangSan");strcpy(BookList[3].sort,"S01");
strcpy(BookList[1].num,"002");strcpy(BookList[1].name,"LiLunLiXue");
strcpy(BookList[1].author,"LiSi");strcpy(BookList[1].sort,"L01");
strcpy(BookList[5].num,"003");strcpy(BookList[5].name,"GaoDengShuXue");
strcpy(BookList[5].author,"WangWu");strcpy(BookList[5].sort,"S01");
strcpy(BookList[4].num,"004");strcpy(BookList[4].name,"XianXingDaiShu");
strcpy(BookList[4].author,"ZhaoLiu");strcpy(BookList[4].sort,"S02");
strcpy(BookList[7].num,"005");strcpy(BookList[7].name,"ShuJuJieGou");
strcpy(BookList[7].author,"ZhouQi");strcpy(BookList[7].sort,"J01");
strcpy(BookList[2].num,"006");strcpy(BookList[2].name,"ShuJuKu");
strcpy(BookList[2].author,"ZhouQi");strcpy(BookList[2].sort,"J02");
strcpy(BookList[6].num,"007");strcpy(BookList[6].name,"ShuJuJieGou");
strcpy(BookList[6].author,"SunBa");strcpy(BookList[6].sort,"J01");
strcpy(BookList[0].num,"008");strcpy(BookList[0].name,"ShuJuJieGou");
strcpy(BookList[0].author,"ZhangJiu");strcpy(BookList[0].sort,"J01");
}
voidShowBookInfo(BookInfobook)//显示一本书的信息
{
printf("编号:
%s\n",book.num);
printf("书名:
%s\n",book.name);
printf("作者:
%s\n",book.author);
printf("分类:
%s\n",book.sort);
}
voidSortOnNum(BookInfoBookList[])//按编号排序
{
inti,j;
BookInfotemp;
for(i=1;i { temp=BookList[i]; for(j=i-1;j>=0;j--) { if(strcmp(temp.num,BookList[j].num)<0)BookList[j+1]=BookList[j]; elsebreak; } BookList[j+1]=temp; } } intFindOnNum(BookInfoBookList[],charkey[])//以编号为关键字进行二分查找 { intlow=0,high=BOOKNUM-1,mid; while(low<=high) { mid=(low+high)/2; if(strcmp(key,BookList[mid].num)==0) returnmid; elseif(strcmp(key,BookList[mid].num)<0) high=mid-1; elselow=low+1; } return-1; } voidFindOnName(BookInfoBookList[],charkey[])//以书名为关键字查找 { inti,j=0; for(i=0;i { if(strcmp(BookList[i].name,key)==0) { j++; printf("满足该关键字的第%d本图书的详细信息如下: \n",j); ShowBookInfo(BookList[i]);} if(i==BOOKNUM-1&&j==0) { printf("抱歉,暂无此图书\n"); break; } } } voidFindOnAuthor(BookInfoBookList[],charkey[])//以作者为关键字查找 { inti,j=0; for(i=0;i { if(strcmp(BookList[i].author,key)==0) { j++; printf("满足该关键字的第%d本图书的详细信息如下: \n",j); ShowBookInfo(BookList[i]); } if(i==BOOKNUM-1&&j==0) { printf("抱歉,暂无此图书\n"); break; } } } voidFindOnSort(BookInfoBookList[],charkey[])//以分类为关键字查找 { inti,j=0; for(i=0;i { if(strcmp(BookList[i].sort,key)==0) { j++; printf("满足该关键字的第%d本图书的详细信息如下: \n",j); ShowBookInfo(BookList[i]); } if(i==BOOKNUM-1&&j==0) { printf("抱歉,暂无此图书\n"); break; } } } voidInsertBook(BookInfoBookList[],BookInfoNewBook)//增加书目 { inti=0,j; if(BOOKNUM>MAXNUM)printf("ERROR! "); while(strcmp(NewBook.num,BookList[i].num)>0&&i for(j=BOOKNUM-1;j>=i;j--)BookList[j+1]=BookList[j]; BookList[i]=NewBook; BOOKNUM++; } BookInfoDeleteBook(BookInfoBookList[],charnum[])//删除书目 { inti=0,j; BookInfodb; strcpy(db.num,"000"); if(BOOKNUM<=0)returndb; while((strcmp(BookList[i].num,num)! =0)&&(i if(i==BOOKNUM)returndb; db=BookList[i];//用db存储待删除元素以便返回,可避免被后续操作覆盖掉而返回错误结果 for(j=i;j BOOKNUM--; returndb; } voidShowBookListInfo(BookInfoBookList[])//显示现有图书清单 { inti; printf("Informationofthebooks\n"); printf("*********************************************************\n"); printf("%-10s","编号"); printf("%-30s","书名"); printf("%-30s","作者"); printf("分类"); printf("\n"); for(i=0;i { printf("%-10s",BookList[i].num); printf("%-30s",BookList[i].name); printf("%-30s",BookList[i].author); printf("%s\n",BookList[i].sort); } } intmain(void)//主函数 { intn; BookInfoBookList[MAXNUM]; InitBookList(BookList);//初始化 top: ;//跳转开关 do{//交互式菜单定义 printf("请选择您要执行的功能: \n"); printf("1.显示现有书目信息\n"); printf("2.将书目按编号排序\n"); printf("3.增加书目\n"); printf("4.删除书目\n"); printf("5.查找书目\n"); printf("6.退出本系统\n"); scanf("%d",&n); switch(n) { case1: {//1.显示现有书目信息 ShowBookListInfo(BookList); break; } case2: {//2.将书目按编号排序 SortOnNum(BookList); printf("排序后书目信息如下: \n"); ShowBookListInfo(BookList); break; } case3: {//3.增加书目 BookInfoNewBook; printf("请输入新增书目信息: \n"); fflush(stdin); printf("编号: ");gets(NewBook.num); printf("书名: ");gets(NewBook.name); printf("作者: ");gets(NewBook.author); printf("分类: ");gets(NewBook.sort); InsertBook(BookList,NewBook); printf("新增后书目信息如下: \n"); ShowBookListInfo(BookList); break; } case4: {//4.删除书目 charnum[4]; BookInfodb; printf("请输入您要删除书目的编号: ");scanf("%s",num); db=DeleteBook(BookList,num); if(strcmp(db.num,"000")! =0) { printf("您要删除的书目信息为: \n"); ShowBookInfo(db); printf("删除后书目信息如下: \n"); ShowBookListInfo(BookList); } else printf("输入错误,没有此图书! \n"); break; } case5: {//5.查找书目 repeat: ; printf("请输入您要查找的关键字类型: \n"); printf("1.编号\n"); printf("2.书名\n"); printf("3.作者\n"); printf("4.分类\n"); intm,i; scanf("%d",&m); if(m>4||m<1) { printf("您的输入有误,请核实后重新输入: \n"); gotorepeat; } switch(m) { case1: {//1.按编号查找 charnum[4]; fflush(stdin); printf("请输入要查询的书目编号(xxx): "); gets(num); i=FindOnNum(BookList,num); if(i<0) { printf("抱歉,暂无此图书\n"); break; } else { printf("该图书的详细信息如下: \n"); ShowBookInfo(BookList[i]); } break; } case2: {//2.按书名查找 charname[100]; fflush(stdin); printf("请输入要查询的书目名称: "); gets(name); FindOnName(BookList,name); } case3: {//3.按作者查找 charauthor[50]; fflush(stdin); printf("请输入要查询的书目作者: "); gets(author); FindOnAuthor(BookList,author); } case4: {//4.按分类查找 charsort[4]; fflush(stdin); printf("请输入要查询的书目分类(xxx): "); gets(sort); FindOnSort(BookList,sort); } } } case6: break;//6.退出本系统 default: { printf("\n对不起,请输入有效的排序选项(从-6选择)! ! \n"); gototop; } } }while(n! =6); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 图书 管理 系统