




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
高级语言程序设计课程设计报告设计题目:图书馆信息管理系统 姓 名:专 业:软件工程班 级: 联系方式:指导老师: 2009年6月8日目录一、课程设计题目及目标3二、设计思想(示意图)4三、程序特点及功能5四、类 、对象及各成员函数设计原理及功能简介6五、图书馆管理系统程序源代码9六、调试记录9七、感想及总结13八、致谢16九、参考资料16一、课程设计题目及目标题目为:图书馆信息管理系统设计目标为:通过此次课程设计,对所学知识加以巩固,会灵活运用训练大家的编程素质,养成耐心细致的习惯。 锻炼思维能力,养成多思考的习惯,同时有助于培养团队意识 了解大型程序的编写过程,为以后编写大型程序和开发软件打下基础。1. 掌握面相对象程序设计的功能抽象和数据抽象方法,掌握类,对象的使用的方法;2. 掌握数据类型的使及不同程序方式的应用.3. 掌握函数使用技巧,包括函数类型的选择,含参数的传递方式等;4. 掌握使用数组,指针,引用,文件等编程的方法.5. 掌握C+流类库的使用.6. 掌握C+模板的使用;7. 掌握中小型规模程序的设计,开发,调试的全过程.二、设计思想(示意图)case 6:m-inquire()图书借阅归还情况查询case 2:m-old_out()旧书删除case3:m-inquire_about_book() 图书查询int menu()主菜单返回用户选择18case 4:m-borrow()图书借阅(先查询后借阅)case 5:m-back()图书归还main()主函数switch(menu()case18book *mcase 1:m-new_in()新 case 1:m-new_in()新书录入新书录入 录入case 7:m-information_in()管理员及读者信息录入case 8:m-exit()退出图书管理系统三、程序特点及功能 包括图书查询、借阅、归还、及新书录入、旧书删除、借阅归还情况查询及读者信息录入、管理员信息录入的功能 查询图书有按编号,按书名,按书分类,和在库图书查询。图书借阅后就标记为已借阅,可通过查询菜单查询。新书录入前要先输入工作证姓名和编号,与文件library.dat保存的管理员信息对照。若符合,则可进入,否则不可。每次录入新书自动以二进制方式保存在文件book.dat中。借出归还图书记录以二进制方式保存在文件borrow.dat中,可通过借阅归还图书查询菜单查询。借阅图书的读者需输入图书卡姓名和编号,与文件reader.dat保存的读者信息对照。若符合,则可进入,否则不可。读者信息和管理员信息可通过信息录入菜单录入,进入该菜单需输入口令(zhimakaimen)。录入信息分别以二进制方式保存在文件reader.dat和library.dat中。四、类 、对象及各成员函数设计原理及功能简介(4个文件:book.dat储存馆藏图书borrow.dat储存学生借阅归还图书信息library.dat储存管理员工作证信息(已存管理员zhengfengjuan,工作证编号:0901)reader.dat储存读者信息(已存图书卡姓名zhengfengjuan,编号001)首先建立了一个工程。工程包括一个命名空间managemanage包括四个结构:time jie reader tushu 一个类:bookreader:包括char型成员变量:name1、hao(分别存储读者图书卡姓名及编号)tushu:包括char型成员变量:name2、bian_hao(分别存储图书书名及编号),int型bow(存储图书出借情况:若借出则为1,否则为0。默认为0)time:包括三个int型成员变量:year month day 用于存储借阅、归还图书时间Jie:包括成员变量char型reader_name20、reader_hao10、book_hao10(分别存储借阅学生姓名、图书卡号、所借图书编号), time结构型time1、time2 (分别存储借书时间、还书时间)book:包括一个默认构造函数book(),七个成员函数,成员变量:int型指针menu_select(void),结构tushu型T200,M200,jie型jieyue50,reader型R20 包括一个主菜单,一个主函数,和一个指向各成员函数的指针。主菜单用于显示该图书管理系统功能及各个子菜单请输入用户选择,返回1到8之间的数字在主函数中,通过switch语句,根据用户选择来由指针完成对各个成员函数的调用包括七个成员函数1、void new_in( )新进图书录入 该菜单设置访问权限:只有管理员可访问,因此进入菜单前要先输入管理员工作证姓名及编号,并与文件library.dat中信息对照,若输入正确,方可进入。 管理员输入图书书名及编号,存入数组T200中,并将T.bowl值设为0(图书未借出) 将输入图书信息以二进制方式写入文件book.dat文件中。 若管理员工作证编号输入错误,则输出提示信息。 之后询问是否继续录入新书,若是,则允许再次输入。若否,则返回主菜单 2、void olda_out( )旧书删除 该菜单设置访问权限:只有管理员可访问,因此进入菜单前要先输入管理员工作证姓名及编号,并与文件library.dat中信息对照,若输入正确,方可进入。 管理员输入要删除图书书名及编号,然后以二进制方式打开文件book.dat,读出文件信息,若与管理员输入图书信息不相同,则将该图书信息写入数组M200中。否则不写之后再将数组M200以二进制方式写入文件book.dat中最后询问是否继续删除旧书,若是,则允许再次输入。若否,则返回主菜单3、void inquire_about_book( )图书查询(包括按书名查询,按书编号查询,分类显示,在库图书显示退出查询菜单)该菜单所有人均可访问。首先请用户做出选择:输入数字14再用switch语句列出各个选择:该菜单设置一个do while循环,允许多次输入首先请用户输入查询的图书书名,在以二进制方式打开文件book.dat,以二进制方式读出文件中信息,并将其存入数组T中,若输入图书书名与文件中图书信息符合,则输出提示信息:您要找的图书馆藏有,并检验Ti.bow值,若为0,则输出,且尚未被借走,并输出该书编号,提示用户到指定位置查询,若为1,则提示用户:该书已被借走。若输入图书book.dat中无相符信息,则提示用户:您要找的图书馆藏无之后询问是否继续按书名查询,若否,则返回查询菜单按编号查询原理同按书名查询,只是输入为图书编号之后询问是否继续按编号查询,若是,则继续。若否,则返回查询菜单该菜单设置一个do while循环,允许多次输入首先列出图书各个分类请用户做出选择然后以二进制方式打开文件book.dat,读出图书信息并将其存入数组T中,若T中数组编号首字母与用户输入选择相同 则输出该图书书名及编号,即将该类图书全部列出之后询问是否继续按书分类查询,若是,则继续。若否,则返回查询菜单该菜单设置一个do while循环,允许多次输入以二进制方式打开文件book.dat,读出图书信息并将其存入数组T中,然后在屏幕上输出图书信息:编号及书名 退出该查询菜单4、void borrow( )图书借阅该菜单所有人均可访问。 首先请用户输入图书卡姓名及编号,然后以二进制方式打开reader.dat文件,若输入图书卡编号与在文件中有相符信息,可开始借阅,否则输出提示信息:图书卡姓名或编号输入有误若输入正确,则先提示用户输入想借的图书类别,并在屏幕显示该类别图书,再请用户输入所借图书编号,以二进制方式打开文件book.dat,将符合条件图书T.bow标记为1(已借出) 然后输入借阅时间,若正确,则将该学生借阅信息存入数组jieyue50,并以二进制方式写入文件borrow.dat,提示用户:借书成功。否则提示用户:借书时间输入有误之后询问是否继续借书,若是,则继续。若否,则返回主菜单5、void return( )图书归还该菜单所有人均可访问。 首先请用户输入图书卡姓名及编号,然后以二进制方式打开reader.dat文件,若输入图书卡编号与在文件中有相符信息,可开始归还,否则输出提示信息:图书卡姓名或编号输入有误 若输入正确,则请用户输入要归还图书编号,以二进制方式打开文件book.dat,将该图书标记为未出借,然后请用户输入还书时间,并以二进制方式打开文件borrow.dat文件,若还书时间输入正确,将其赋给数组jieyue.time2则将该学生还书信息以二进制方式写入文件borrow.dat,提示用户:还书成功。否则提示用户:还书时间输入有误 之后询问是否继续还书,若是,则继续。若否,则返回主菜单6、void inquire( )读者借阅与归还图书情况查询该菜单设置一个do while循环,允许多次输入该菜单所有人均可访问。请用户输入图书卡姓名及编号,然后以二进制方式打开borrow.dat文件,将该学生借阅与归还图书信息输出到屏幕之后询问是否继续查询,若是,则继续。若否,则返回主菜单7、void information_in( )读者信息录入 该菜单设置一个do while循环,允许多次输入。 该菜单设置访问权限:只有管理员和管理员信息录入人员可访问 进入该菜单需输入口令(zhimakaimen)输入正确方可进入,否则输出提示信息:口令输入有误,您无权进入该菜单若输入正确,则选择操作:1管理员信息录入2读者信息录入。1管理员信息录入人员输入管理员工作证姓名及编号将其存入数组L30,并将其以二进制方式写入文件library.dat中2管理员输入学生图书卡姓名及编号,将其存入数组R20,并将其以二进制方式写入文件reader.dat中 之后询问是否继续录入,若是,则继续。若否,则返回主菜单8、exit( )退出图书馆管理系统 的选择每个成员函数调用之前有一个system语句对屏幕颜色及字体颜色进行设置(即每个字菜单背景与字体颜色不同)每个子菜单结束后都自动返回主菜单 五、图书馆管理系统程序源代码/该程序用于演示图书馆管理系统 /完成时间:2009/05/17 /制作人:郑凤娟/E-mail:1098335141 六、调试记录1、开始时,不太懂构造函数,析构函数的用法,照书生搬硬套。一般情况,类中可以不用析构函数2、建立链表时,注意每次最好清空,否则可能出现占用内存的情况,能用数组最好不用链表3、while循环初始值一定要归0,for循环要注意循环变量一致4、以二进制方式打开文件,注意读和写要分开进行,分别声明ifstream和ofstream的两个变量打开文件要设置if语句,检验是否成功打开,调试成功之前,每次使用break、abort()、exict(1)、continue之前要加system(”pause”)语句二进制文件读和写后要注明(ios:in|ios:binary)和(ios:out|ios:binary),in和out,不能省略,否则文件读写不会生效,即使已声明了ifstream型变量,或ofstream型变量每次读和写结束,要及时关闭文件,否则下次不能成功打开若文件只读出不对其改动不需再写入区分ios:app和ios:out,文件读出后,信息以改变,要将改后信息读入,需从文件头开始写入用ios:out。要想文件中追加信息用ios:appvoid book:new_in()/此菜单只有管理员可访问,须先输入工作证姓名和编号才可进入 char ans; bool flage; int i=0,k; char the_name20,bian_hao10;/the_name表示输入的管理员姓名,bian_hao表示输入的管理员工作证编号 ofstream out; do ifstream in; in.open(library.dat,ios:binary|ios:in); /以二进制方式打开文件library.dat,读出文件中信息,并将其存入数组L30中,L.name表示管理员编号,L.bian_hao表示管理员。 /若输入工作证编号与文件中储存图书管理员信息相同,则输入正确 if(!in) cout文件library打开失败!n; system(pause); abort(); flage=false; coutthe_name; coutbian_hao; while(!in.eof() in.read(char*)&Lk,sizeof(library); if(strcmp(L,the_name)=0&strcmp(Lk.hao1,bian_hao)=0)/若工作证编号及姓名输入正确flage=true则可进入新书录入,否则不可 flage=true; break; k+; in.close(); if(!flage) cout您的工作证编号或姓名输入有误,请重新输入!n; /若工作证姓名或编号输入错误,则输出提示信息 system(pause); while(!flage); 二进制文件以数组形式读写操作,初始值要归0。原来未归0.出现错误:将k赋值为0,程序正常运行以二进制方式打开文件时,ios:in和ios:out要写在 ios:binary之之前,即写成ios:in |ios:binary或ios:out| ios:binary.否则有时可能不能正常将文件中内容读出或写入5、用户每次错误输入最好添加提示信息6、各个结构对象要在成员函数中使用,要将结构与类放在同一命名空间中,并将该对象设为类的成员变量 开始将结构放在应用文件中声明:/应用程序 #include #include#include #include book.husing namespace std;using namespace manage;/丢弃当前输入行上剩余的所有输入/同时丢弃行末的n /主菜单 struct librarychar name20;char hao110; ;并在成员函数中声明该结构对象,出现错误:C:Documents and SettingsAdministrator桌面郑课程设计源程序课程设计.cpp library undeclared (first use this function) 后来,我将结构与各个类放在同一命名空间,并将该对象声明为类的成员变量,程序正常7、strcmp(m1,m2)中,m1与m2要为同一类型,不能分别为字符串型和字符数组8、atoi()函数是把字符串转换成数字,如果是非数字字符则将转化成09、若函数中多次使用while,for循环及if,else语句,编写时应注意格式工整,有益于保持思维清晰10、若暂时找不到错误,就从开头在可能出错的地方一个一个排查,特别是循环if,else,和用break和exit(1) 开始和结束的地方 七、感想及总结感想:图书馆信息管理系统,这个程序历时一个多月,编写代码用了三天,修改代码中格式错误用了不到五天。剩下的时间主要是调试程序。这几个多月来,我学到最多的就是坚持和忍耐,我终于知道了要成为一名编程人员,甚至是工程师所应具备的最重要的素质,那就是忍耐和坚持,再加上细心。还有,就像我的青春谁做主中蕾蕾说的:世上的事没有困难和容易之分,只有你想做不想做。开始的时候,我觉得编600多行的程序是很难的一件事,一直没有动手开始。后来直到丁志豪讲过他的程序,我才意识到该开始啦。别人能编出来,我也能,应为我觉得我的c+学的不比他差。刚开始的两天没有头绪,这时候我们宿舍还没有人开始。没有人可商量。我就整天到图书馆里查资料,后来经过几番比较,我觉得自己对图书馆比较熟悉,可以编一个图书馆信息管理系统。又查了许多资料用了两天时间完成了代码的编写。我记得因为没有参考,所以当时的思路不太确定,有些细节,当时也没仔细考虑。等到调试的时候发现了一些问题根本无法解决,就中途翻了两次。就是在代码语法错误修改的过程中也遇到了许多问题。我知道这是因为我平时练的少,一些问题没有遇到过,那几天就整天抱着电脑,一有空闲就一遍遍检查。室友们都在看电影电视,笑声传过来,对我是很大的诱惑。我真想就此放弃。可我还是决定坚持下去。强制自己,程序不编出来不上网。但是有些语法错误真的很难改正,有的甚至一天一个错误都改不了。我又一遍遍的查课本,告诉自己我能行。我庆幸自己坚持了下去。调试的过程更漫长,原来以为代码正确,程序马上就成功了。但事实上还有很多问题,比如一些暂时没意识到的逻辑错误。像我编的图书信息管理,就出现了已借阅过该图书,下次借阅仍可借阅,借阅后归还不上的逻辑错误。这些还很难改正。到讲的时候都没有完全改正确。直到老师听完我的程序说,tushu那个结构的变量可以再加上一些来显示该图书是否借出。才一语惊醒梦中人。我才想到在tushu那结构中再加一个成员变量,借出图书时改变它的值,这样下次查阅时,看这个变量的值,就可显示图书是否借出。其实,要是大致将程序调好就行,我早就可以交啦,也有好几次,我想就这样交了吧。但我想既然做了,就做到最好,在听了别的同学的程序后我又在一些细节方面做了改动,让自己的程序更强壮。听了老师的建议,做了一些改动,让自己的程序可读性更强,更实用。其实调试的过程中,我想把借阅和归还图书这两个功能去掉。应为我觉得需要考虑的太多,而且在用链表的过程中遇到了很多问题。如果单纯只有新书录入,图书查询,借阅归还查询这些功能,我可以至少提前两个星期上交自己的程序,应为那些没什么难度,我早就调好啦。可我知道图书馆信息管理系统如果不包括图书借阅、归还、旧书删除就太不完整啦,也太不实用,那我编这个程序就没什么实际意义啦。最后几次翻书,查资料我决定用数组,放弃链表。事实证明数组更合适,不容易出错,而且还简单。当然,我也把链表弄懂了。在编写以二进制方式读出写入文件操作时,因为不太懂,也在那卡住了。问了老师好几次,我又在网上查了几次,到图书馆翻了些书,二进制问题终于解决啦!虽然室友们都在看电视电影上网,但我庆幸自己在这一个多月内克制住了自己。静下心来编好自己的程序。我是我们宿舍第一个编出来的,我也敢说我比她们编得都好。因为开始的晚,所以到现在才完成。这次我也学到了凡是要早做准备。不要一拖再拖。这次我做的最好的就是文件源代码备了很多份,桌面一份,D盘一份,E盘一份,U盘里还有。在程序快要成功的时候电脑出故障了。其实之前就出现了一次:下午刚调好,忘了保存,到晚上再看才发现,从头再改。本打算第二天讲的,因为没做好准备,就没讲好。这一次电脑出了故障,放在桌面的东西全没啦,幸好U盘里有备份。其实,编程的过程中,我不只一次的想到偷工减料,随便应付一下,或是从网上下点儿,一改便成。但我还时自己把它完成啦!现在看着几十页的草稿,我有种如释重负的感觉,编写的过程中学到了许多老师没有讲过的东西,更重要的是,我学会了坚持,学会了耐心、不急躁。现在很骄傲,应为这是我第一次独立完成的大程序。(虽然只有1000多行),我尝到了编程的快乐:在于发现问题,并锲而不舍,一遍遍坚持查阅、修改、解决的过程。 总结:不要被问题吓倒,不要害怕困难,万事早做准备。编程序前,要有一个整体思路,确定是否用类,用几个结构,每个结构的意图和作用在电脑上敲上代码之前,要保证整个程序思路清晰,程序大致思路已确定,细节已基本确定,类中各个成员函数联系,已确定好。以免敲上后反悔,若要换一种思路,或该程序部分函数大片要改变,要注意将现有程序备份,以免再次反悔修改错误时不骄不躁,不会及时向老师同学请教,即使查书,不要自己闷头硬抠,浪费时间不太懂的,要及时上网或查资料将其弄懂,并及时做好笔记(方便以后查阅),最好不要照搬,这样容易将自己的程序弄得一团糟对于暂时没有办法解决,确定应该可以解决的问题,可以先放一放。但一般都要及时解决,以免以后找不到办法而使整个程序思路改变变量声明的太多,要及时在后边注上注释,以免下次检查时不明所以确定自己正确就要坚持自己的观点,并付出努力将它做好。虚心向被人求教,也要帮助别人,有时候自己的新想法,可能在帮别人或和别人讨论的过程中产生不要太好高骛远,解决完一个问题再看另一个,以防中间问题无法解决,造成整个程序需要重新考虑不管别人怎样做,既然做了,就把它做到最好,别急着上交。文件要做好备份,以免电脑出现故障,使原文件丢失。八、致谢 感谢c+老师给我讲了那么多,特别是那次差点占用了老师的吃饭时间。其实最重要的是老师平时给我们讲的许多学姐学长们的事,让我喜欢上了C+。喜欢上了编程。 也谢谢我妈,因为在程序编到一半,我妈给我打电话,我已经半个月没跟她打电话了。我告诉她我最近正在编程序,我还说有点想放弃。她说没有解决不了的事,不会就问老师。刚开始学这个专业,我告诉她,很难学,她就跟我说过,既然选了就好好学,用心总会学好,大不了比别人多下点功夫。这次虽然没说让我别放弃。但我知道她的意思。 谢谢我的室友们,特别是赵斐,帮我打了好多次水!也谢谢丁志豪给我讲了不止一遍的链表,让我把这一点弄懂了。九、参考资料 /content/05/011/10/894_18281.htm1C+中文件的输入输出:一些有用的函数,二进制文件的处理 /blog/cns!5fa635e2ba4f9bb6!490.entryC+中二进制文件的输入输出 C+课程设计 机械工业出版社 2004年12月链表的使用 string类 通讯录设计 含
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 租赁合同范本怎么签约
- 学生书本租售合同范本
- 教培工资合同范本
- 假山工程担保合同范本
- 个人电子借款合同范本
- 低层公寓出租合同范本
- 文员制定合同范本模板
- 过敏性紫癜关节型护理查房
- 回收桌椅合同范本
- 简易扇灰合同范本
- 巷道围岩注浆加固施工安全技术措施
- 实验中学初一新生分班考试数学试卷附答案
- 区治安巡防队员面试题
- 施工组织设计施工总体部署完整版
- TUPSW微机控制电力专用不间断电源(UPS)系统使用说明书
- 骨质疏松诊治与中医药
- LY/T 2383-2014结构用木材强度等级
- GB/T 528-2009硫化橡胶或热塑性橡胶拉伸应力应变性能的测定
- 中日关系历史
- GB/T 15171-1994软包装件密封性能试验方法
- 2023年江苏省中学生生物学竞赛(奥赛)初赛试题和答案
评论
0/150
提交评论