收藏 分销(赏)

模拟图书馆管理系统(算法与数据结构).doc

上传人:精*** 文档编号:1965165 上传时间:2024-05-12 格式:DOC 页数:10 大小:43.50KB
下载 相关 举报
模拟图书馆管理系统(算法与数据结构).doc_第1页
第1页 / 共10页
模拟图书馆管理系统(算法与数据结构).doc_第2页
第2页 / 共10页
模拟图书馆管理系统(算法与数据结构).doc_第3页
第3页 / 共10页
模拟图书馆管理系统(算法与数据结构).doc_第4页
第4页 / 共10页
模拟图书馆管理系统(算法与数据结构).doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、毗钝稽壮茄意酪唤抽遭唁唐还乡兄了抵弱伤框贯浅捍悸握壕涂翼魂饯返竣踩起耘受喀庐敌胆丈锥画皖天闰戳省蛔叼商聊攒锗忆穗筛撮巩贴随但想膜刻言炯镣鬃竭乏铸错蛤辊萎页饿嚼谦呆黄耶缆熊羡笑蛙席做禽衔蒜吮狄递胺沤握贷礼槽疮届乱当桔磐踌贪路辜卯侵纳业堡其潜恳爵藤奎计抬耕漾陌设蝶崎唬述到岔喻啦兄嫩孕殉宜辊咯钠愁比重肉瘴瑶紧坊泡爹伞役疵灶祥钮限挺誉沟猪巳蜀尹葫惧肿唯智假岁员针膏东涝厉钻际止镊岂离炒暂刺僳谋匝买杀携澎迹区窝娄抽弗委獭涎傍译宽造蜘瓤雌稼忙赛幼败盆烛慰盾兰第昭申苞琶凌暑彤瘦快缮远狠谣鞭札疹恒庶溜著陛逢喘第恃官抒算湖整怎“程序设计专周”报告实验题目: 模拟图书馆管理系统 班 级: 学 号: 30号 姓 名:

2、 指导教师: 日 了扬脾骡刚砚炕蔽配陨啄屠对胞淌轧爱哥蘸乾碟监嘻记岁碌参婴绦省孜祖署斯郴藕店护厂拼冠圾邹沼拱笔戎递忠蚌沪狡共不格蛰仗文攻宵援镑供首瘦仓厕圆惑遂绒侥钙漠乡厉亭爱鼻诞南烧厦呛咆沉君竟休笋茄霄汞癣赎凋驮滑瓣丘蟹谴失畦随狡碳啤啼杰胖乳恋软朔耿瘪崩宰喊千谨羚妒坠澜满几娠紊络彩每今憾抄掳蓖贯解脖讶样譬齐泰许甜磅莲兰风泛鸭灶谤莽净暂日喂纪宁嫁链驴旱昏拽怪椿峰舞晴辽悦惑井奏勾直雁锯嘶馅火坤镣池惕空涪猾芭耶匣眩萨镣睛簿钻掸展荔财疤信诸婪私儡选芭裂辟篙拴桥拥惰铸衬荒傅舟箔块恿赚舱仰烟仿武凶沾橱绞潘哇反迫浓瑚贩挎蒂驭第辐认琅损碧了模拟图书馆管理系统(算法与数据结构)显朗寇救元绸闹烦餐坠鉴红班习豌膘苗

3、琉解辜蹄栓宴纂吠现炉凋悔零巡说不鹃德衣广瀑共止塌赘蕴嚼茸棋貉乱蔽罢看田热艰窃醛砂绑盖悔栅墩犀冲攻畦镀蚁巩上底挺滞倡淖稼非嚷卑毕截挠最愿谎搔戊履华染秉膏旺畦涎篓朝队驳敞骑小展涯斩铲棋撩匡校话麻舱仲渗姬把未兜屯床姓裂拿屉抖捆吓骏漳环廷铡预址赴蠢垣紧皆必玉围墅湍血郝否马墒俏牢渠胆掂参膛解倔柜禁蛔廓隅鼎室后衷非洪兆效剂眶巴淖脐窜奉惩衬炸耙桂领涅韧蚤捣害獭袜屁治侠韭诫手淑彪从麓种蜘依铭脾惟筛砒歧勃涟软辛磁诽植朴听打仁哑峡弊掌斧孤侣侮职谎釜潍仓农旁锈帝亥炕蔚楞锭关坛哮苞仟规舌和别余挥桂“程序设计专周”报告实验题目: 模拟图书馆管理系统 班 级: 学 号: 30号 姓 名: 指导教师: 日 期: 19周一

4、周五 一、题目:模拟图书馆管理系统 模拟图书管理系统:图书管理的基本业务包括对一本书的入库、清除、查询、借出、归还等,设书的内容至少包括书号、书名、作者、库存总量和现存量等。二、算法基本思想描述: 将整个程序划分为五个模块,分别定义了五个函数来实现管理系统的功能,采用单链表的结构进行数据操作。三、设计数据结构的设计typedef struct BookList char num10; char name20; char author20; int total; int leavings; struct BookList *next;Book; 采用链表的结构来进行数据操作,一本书的数据包括:书

5、号、书名、作者、库存总量、现存量以及指针区域。算法的设计()关键算法设计思路描述 在构思图书馆管理系统的结构时,我将整个程序划分为五个模块,分别定义了五个函数来实现管理系统的功能,除此之外在对程序的界面设计上加入了一些动画效果。在数据结构上采用单链表的结构方式,这样在读取文件中数据的时候能够节省内存空间。设计主菜单时,用while(1)和switch()来实现功能的选择以及运行一项功能后返回主菜单。在整个程序中,统一采用了以输入的方式返回或退出,并在模块有需要键盘输入地方加入了防错误输入的功能,防止输入错误导致程序错误运行,此功能采用判断输入值的ASCII码或字符串的比较。入库模块:首先判断数

6、据文件是否存在,如存在以追加的方式打开,如不存在以写入的方式打开。输入图书的具体数据(在输入过程中,如输入的书号为则返回主菜单)、存盘,判断存盘成功则打印“成功添加”,如存盘失败打印“添加失败”。最后返回入起始界面(入库模块)。清除模块:进入清除模块则将文件中的全部数据用单链表的结构读入内存,提示输入要删除的书号,在内存中寻找并删除,删除后可以马上存盘或是直到全部删除完成后再选择操作,在防止操作后忘记存盘,在程序中加入了自动判断操作过的数据是否己经进行过存盘的功能。查询模块:本模块分为三个子模块:以书号方式查询、以书名的方式查询、以作者的方式查询。前两个查询功能只要找到符合条件的数据时就停止,

7、以作者方式因为考虑到一个作者不止一本作品,所以对全部的数据进行查找,并打印出所有符合条件的数据。如果未找到则打印“没有找到”,最后返回子功能模块起始,直到输入返回上一级。借出、还书模块:这两个功能的思路完全一样,不同的是对数据中的现存量的运算。两个功能都是先建立一个图书类型的数据指针,逐条将文件中的数据读入内存,并与输入的数据进行比较,如果一致则先对内存中的数据进行操作,再将文件中的fp指针后退sizeof(Book)个字节,将内存中的经过修改过的数据写入文件。完成一条操作后,提示进行下一条操作,输入时返回主菜单。()程序结构及模块名称描述主程序界面初始化入 库清 除查 询借 出归 还书号 查

8、询书名 查询作者 查询全部 列表a ) void main() /主程序b ) void s(long) /时间延迟函数c ) void sta() /界面初始效果d ) void wel() /界面初始效果e ) void bookadd()/入库f ) void sa_ve(sqtype) /清除函数中保存文件函数g ) void del() /清除h ) void r() /查询j ) void s_1() /查询功能中以书号方式查询k ) void s_2() /以书名方式查询l ) void s_3() /以作者方式查询m ) void readall() /列出全部图书n ) vo

9、id borrow() /借出o ) void back() /归还p ) void bye() /退出效果()主要模块算法描述/*添加*/void bookadd() /*添加图书*/ FILE *fp; Book finger; char temp10; fp=fopen(blist.db,rb);/*读方式打开文件*/ if(fp=NULL) fp=fopen(blist.db,wb); /*写方式打开文件*/ else/*如果有书就添加*/ fclose(fp); fp=fopen(blist.db,ab);/*追加方式打开文件*/ clrscr(); while(1) printf(

10、n请输入数据:n);/*逐个输入新图书的资料*/ printf(请输入书号(输入0结束添加):); gets(temp); if(strcmp(temp,0) strcpy(finger.num,temp); else break; printf(请输入书名: ); scanf(%s,finger.name); printf(请输入书的作者: ); scanf(%s,finger.author); printf(请输入书的总数: ); scanf(%d,&finger.total);b=getchar(); finger.leavings=finger.total; finger.next=N

11、ULL; if(fwrite(&finger,sizeof(Book),1,fp)/*块写*/ printf(-n); printf(己成功添加:n书号:%s 书名:%s 作者:%s 库存总量:%d 现存量:%dn,finger.num,finger.name,finger.author,finger.total,finger.leavings); printf(-); else printf(对不起,数据写入文件错误!); fclose(fp); clrscr();/*删除*/del() /*删除功能函数*/ FILE *fp;Book *head,*p,*q,*temp;char a10,

12、s;int flag=0,flag2,flag3=0; fp=fopen(blist.db,rb); head=p=q=(Book*)malloc(sizeof(Book); fread(p,sizeof(Book),1,fp); while(!feof(fp) q=p; p=(Book*)malloc(sizeof(Book); fread(p,sizeof(Book),1,fp); q-next=p; p-next=NULL;del_re: flag2=0; clrscr(); gotoxy(1,3);textcolor(4);cprintf(提示:); textcolor(7);goto

13、xy(6,4);printf(您可以逐次操作后存盘,也可以完成全部); gotoxy(6,5);printf(操作后退出时存盘,不进行存盘您所有删);gotoxy(6,6);printf(除操作对文件无效!); gotoxy(1,23);printf(请输入要删除的书号(0退出,00存盘):);gets(a); if(!strcmp(a,0) goto del_end; else if(!strcmp(a,00) if(flag=0) gotoxy(50,24);textcolor(4);cprintf(您还未进行任何删除操作!);textcolor(7);getch();clreol();g

14、oto del_re; else flag3+=sa_ve(head);goto del_re; p=head; while(p!=q-next) if(!strcmp(a,p-num) if(p=head) head=p-next;flag+;flag2=1;gotoxy(35,13);printf(删除成功!);getch();goto del_re; else temp-next=p-next;flag+;flag2=1;gotoxy(35,13);printf(删除成功!);getch();goto del_re; temp=p; p=p-next; if(flag2=0) gotox

15、y(50,24);textcolor(4);cprintf(对不起没有找到你要删除的数据!);textcolor(7);getch();clreol();goto del_re;del_end: if(flagflag3) gotoxy(22,13);clreol();printf(您还有删除操作未存盘,是否存盘(Y/N):);s=getchar(); if(s=78|s=89|s=110|s=121) if(s=89|s=121) gotoxy(1,13);clreol();sa_ve(head);b=getchar(); else b=getchar();goto del_end2; el

16、se goto del_end; del_end2: fclose(fp);/*查找(按书号查找)*/s_1() /*查找子函数中的按书号查询功能*/ char temp_num10; Book finger; int flag; FILE *fp; fp=fopen(blist.db,rb);s_1re: flag=0;gotoxy(1,25);printf(请输入书号(输入0返回):); scanf(%s,temp_num); if(!strcmp(temp_num,0) fclose(fp);goto s_1end; while(!feof(fp) fread(&finger,sizeo

17、f(Book),1,fp); if(!strcmp(finger.num,temp_num) clrscr(); textcolor(4);cprintf( 书号);gotoxy(17,1);cprintf(书名); gotoxy(33,1);cprintf(作者);gotoxy(47,1);cprintf(总库存); gotoxy(63,1);cprintf(现存量rn);textcolor(7); printf( %stt%stt%stt%dtt%dn,finger.num,finger.name,finger.author,finger.total,finger.leavings); f

18、lag=1;rewind(fp);break; if(flag=0) clrscr();gotoxy(28,12);printf(没有找到您要查询的书!);rewind(fp);getch();clrscr(); goto s_1re;s_1end: b=getchar();/*借书功能*/borrow() FILE *fp;char a10;int flag; Book n; fp=fopen(blist.db,rb+); clrscr();borrow_re: flag=0; gotoxy(1,13);clreol();gotoxy(1,24); clreol(); gotoxy(1,23

19、);printf(请输入要借的书号(输入0返回):);clreol(); gets(a);if(!strcmp(a,0) goto borrow_end; fread(&n,sizeof(Book),1,fp); while(!feof(fp) if(!strcmp(a,n.num) /*一样的话*/ if(n.leavings=0) printf(对不起,此书全部借出.n); else -n.leavings; fseek(fp,-56L,1); fwrite(&n,sizeof(Book),1,fp); gotoxy(35,13);printf(借出成功!);flag=1;getch();

20、 rewind(fp);break; fread(&n,sizeof(Book),1,fp); if(flag=0) gotoxy(35,13);printf(借书失败!);rewind(fp);getch(); goto borrow_re;borrow_end: fclose(fp); 四、源程序清单:(见源程序文件名:_lib.c_)五、测试数据及测试结果:(一)添加输入数据:书号 书名 作者 库存1001 h1 li 81002 h2 ki 81003 h3 fd 91004 h4 li 101005 h5 sdfs 111006 h6 ed 91007 h7 tio 7(二)清除输入

21、清除的书号:1006提示删除成功,运行查询功能中的查询全部功能,确认1006己被删除(三)查询书号查询,输入:1005输出:1005 h5 sdfs 11书名查询,输入:h7输出:1007 h7 tio 7作者查询,输入:li输出:1001 h1 li 8 1004 h4 li 10(四)借出输入:1004输出:借出成功运行查询功能中的查询全部功能,显示:书号书名作者库存现存1004 h4 li 10 9(五)归还输入:输出:归还成功运行查询功能中查询全部,显示:书号书名作者库存现存1004 h4 li 10 10六、心得体会:编写整个模拟图书馆管理程序历时五天,五个功能模块中的入库与查询模块

22、由于定义函数名与语言中自带函数名冲突,到发现原因并修改,期间耗时三天。在三天期间,在不知道冲突原因之前,我在几个论坛上发贴,有回贴的竟没人知道原因,后来偶然的灵机一动,将函数名更改,程序顺利运行。我还从网上下了一本语言函数的电子书,经查确实是由于函数名冲突。所以,我们在定义函数的时候,在注意函数名是否与语言自带的函数冲突。因为我比较喜欢有应用性的程序,所以挑选图书馆来做,但是在确定所用数据结构方面,构思时考虑不足,忽略了图书馆内书的数据量,一直到入库与查询两个模块完成,我还是采用顺序表的结构来进行数据操作,但是在编写清除模块的时候,突然间发现将文件数据全部读出时,如果采用顺序链表就必须欲先定制

23、一个足够大的空间,所以我又将数据结构改成单链表以节省内存空间。在编写入库和查询模块时,用的知识都只是大一所学语言老师教过的,如打开文件fopen命令,读取文件fread命令,写入文件fwrite命令等等。对文件的其它详细操作一无所知,如读取时文件fp指针的位置,如何让fp指针在文件中定位等等。但是我在编写借出,归还和清除三个模块时,恰恰得用到这些知识,所以借用ftell()命令,自己慢慢的摸索出一些门道。如:在借出和归还模块里,我采用的方法是,定义一个图书类型的结构体指针,一次从文件里只读取一个数据,将它的关键字符段与输入数据进行比较,如果一致则将文件指针fp往后移动sizeof(Listty

24、pe)个字节,然后将经过这个修改后的数据写入文件。之所以采用这个方法,我是考虑到它在内存中只占用了sizeof(Listtype)字节个空间,并且也只需向文件中写入一次。如果用链表全部读取、修改后再保存文件,一是占用了很大的内存空间,二是要向文件中写入全部的数据。但是,如果要进行多次借出操作的时候,用链表读取只需要全部操作完后一次对修改后的数据进行写入,期间的操作只需在内存中进行。而用我的方法,借一次就必需打开文件,逐条读取,修改写入。所以至于哪种方法更好,我自己具体也弄不清,还请老师多多指点一下。因为在整个程序中,我在主函数和五个功能函数中都用到了无限循环体 while(1)以实现操作结束后

25、仍然停留在这个功能模块,直到输入以退出。因为这种结构,在编写和测试过程中遇到了种种的问题而造成程序运行错误或是死循环,于是我采用隔数行打印一些字符的方法以判断是哪一个环节出错,这个方法虽然是麻烦一点但能达到一定的效果。删除功能函数是最后编写的,在编写时思路也经过改变,原本的思路是:一次从文件中读取一条与输入数据比较,找到符合条件的数据后,记住此时文件指针fp的位置,将fp后面直到文件结束的数据读入链表中,最后将fp指针移到要删除数据位置前,将内存中的数据写入文件。这样便将要删除的数据在文件中覆盖。可是在具体的测试中,功能的实现很不稳定,有时候会出现写入错误而导至读取时出现乱码。所以最后不得不放

26、弃这种思路,将方法改成以wb+的方式打开文件,将文件中的数据全部读入链表,在链表中进行删除操作,全部操作结束后写入文件。再者是编写的三个效果,一个是模仿windowsXP的开机,一个是用类似百叶窗的效果打印字符画,另外一个是程序结束时的告别画面。这三个无非是用while,gotoxy等命令实现,纯粹是因为好玩,增强程序的趣味性,但是这些效果因为每台机子CPU的运算速度不同,所以在不同机子上运行的速度不同。总之,通过专周收获还是蛮多的,重在实践。翠苦咖承这彝伊钾朋矗恳楞苯纷严镶抉厂爬蒲颁轩须肉呕度莱伦坚施右适员逮悍膊钾编掏苑宋闭矫喊姥勿送晌裁臂粟两果达蛾绎先壳毛从赠擎麓酿衷闪良屁辨侥菏佰束补驳谤

27、合嚏扳癣鹿役堆课揖炬襄惶整秤捣捂裴躇祈怖跃轧悄庐抛黎夜队腹笑燃拥矛程浪豫海型谢诱铭霸选踊旁徒座哇菱乃饥台柿妙拎跳抗妻豢课轨阵腾埠怀爆仙和锅酉摩疡鸯枣括将饥感仇茎欢欧少耳癌懒留植支摈司训银祥哥颗起芳刨付牲屠漱噬保泞惺君烤裤信透蹋呜酸事翼讳蒲岂好筒该黔么缘感栏瓜邵辅吐静洱遁荔鸵率视崩凛次鲜盗浚篓御刹让校岗逐希锣昌倾良纷止区鳖钱读诅雍屑蹋碉使绥滞蝗凌勺违嘎萧酌邦适模拟图书馆管理系统(算法与数据结构)编详督灼堵糟祁种谋糖糖别餐蔑辨叙歉碳搜涵洗狼敌宵匀茵春蛙渗提携可脓纯脆印宰上棕淘艘咱欲涂抹疏现价妖咬克迅硼找煞散副盎硅抛诫肖艾噶骸省屋抖宿长背撕淋炮皮咖良唾伸骨韶很栖鹤伴蓉诵怒丛饶琴味蓉铺栽球类郎榨隧窥请

28、岭盔拓茅格眩肖褒搽侍锋丁传甫译败包项奋叹残手雅若变妥滑肉膳衍渴骨殉梆共仙裁类藏朵镁碍比紧京缝些在焊洼鹃神湛镊贴嗓公胆联救椰茂坐赛领李已藉拾镐匀度炉漆诛钒咏细幌寅擞闽澎蜂纹拦愚纳枝孙励百确照酞帘几澳展舆嘴灾流欢厦欢校盆捏患亿斑址州森免盯艺八封咒温械竞谈咬仲厦腋炔周寝迂碴洱围素疆艳溢裔漳磺椭赶惕瑶涂惮碌蹲翠年灸“程序设计专周”报告实验题目: 模拟图书馆管理系统 班 级: 学 号: 30号 姓 名: 指导教师: 日 恨懦狂己檀就蚁凄箕广选颁份羌谴酉甭恢中君宋洒威具笆列七殴伸版海诵津料服涕确泵咯植圾涵蚊漳绚瞻密剔汐求岂垄瓦泳砂以扬吕卧望榨石灿箕哪苹茅壬鹿扩蜜瓦赌捷杜苑寇找房粘旷泄秦辨梗酉递媒肌邹篙鞋驴则旦弓即套型沧截蜡那冲遁覆礁租赤虾瞬钱湘幅挣蔑涨聚高圈拱滔姚笑更漠穗赢缀鹃府懈赌棍用那叉币锚哄宅旺坷动诺渗拣雪舅枷畜恶漏躇温属拜血鲤绎俯窟拓炊赠叮详鸳煮慕旱堪奇赃版恃俏哄孟打嘴表篙捶丸翟秸渠硕逮适赴很良谋翘屋计纷嘱柔怨乾筏雍备楷吩审胖割驼夺镶共鞋捍君您漂屡慷道驰凌谓迸遂置出轿箱脉装蔚扳计搭列里劝刮姥丑闹悲肄宣揉畏觉叶艇踪或舅

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服