小型图书管理系统报告书_第1页
小型图书管理系统报告书_第2页
小型图书管理系统报告书_第3页
小型图书管理系统报告书_第4页
小型图书管理系统报告书_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、苏州科技学院二一四 二一五学年第一学期电子与信息工程系课程设计报告书课程名称: 程序设计基础实践 班 级: 电子Z1311 学 号:_姓 名: 李辉 指导教师: 严迪新 二一五年十二月1.题目小型图书信息管理系统的设计与实现2.功能(1)每一条记录包括一本书的书名、作者名、出版单位、出版时间、分类号、价格共6条内容。(2)录入功能:可以一次完成无数条记录的输入,也可以追加插入记录末尾。(3)浏览功能:完成本次录入的全部书目记录的显示,显示修改后、删除后、排序后、装载后的记录。(4)修改功能:输入要修改的书名,然后依次重新输入图书信息。 (5)排序功能:按图书的价格由低

2、到高进行排序。(6)查询功能:输入要查询的书名,显示该图书的全部信息。(7)保存功能:将图书记录保存在盘下文件名为data.txt的文件中,可选择是否保留原来的内容。(8)读取功能:将保存在txt文件中的图书记录读取出来。(9)简单帮助功能:显示本程序设计的特点方法等。(10)退出功能:退出系统。(11)有一个清晰美观界面来调用各个功能。3.设计内容整个系统除了主函数外,还有10个函数,实现录入、浏览、修改、排序、查询、保存、读取、简单帮助等功能。3.1主函数int main(void)返回值为整型的不带参函数,函数执行结束后,返回0。通过无限循环for(;)和if else的多层选择实现调用

3、各子函数。下面是主程序运行时的菜单程序。3.2新建链表头结点函数 struct books_list * create(struct books_list *head)第一次运行时,链表中没有内容,新建一个头结点,并将头结点的next指为空,返回头结点的指针。3.3插入函数 void InsertDoc(struct books_list *head)返回值为空,形参为链表的头结点指针。定义一个字符型的标志位,并给它赋值为Y,插入函数的主体都在while循环里while(flag='Y'|flag='y'),即如果输入的是大写Y或是小写的y均执行插入操作,在输入

4、提示中输入N或n。程序执行之前,将结构体指针变量指向头结点,然后遍历到链表的结尾,最后执行插入操作。即每次插入的结点都在链表的尾部。其插入功能如下:其流程图如下:3.4浏览函数void Print_Book_Doc(struct books_list * head)定义一个结构体指针变量p,判断链表的头结点是否为空,如果为空,输出没有图书记录的提示并退出函数。如果有的话,把p指向链表的头结点,先打印表头,然后遍历整个链表,将链表中的结点按固定格式输出,最后打印表尾。示例如下:3.5信息修改函数 void info_change(struct books_list * head)同样先判断链表是

5、否为空,如果非空的话,从头依次遍历整个链表,通过字符串比较函数查找相同的书名,如果有的话,将相应信息再次输入,如果没有的话,输出没有相应书目。示例如下:下面是修改后的浏览,可以看出原来书名为we的已经改成了gh的记录。3.6删除函数void Delete(struct books_list * head)同样先判断链表是否为空,如果非空的话,执行通过书名删除程序。先定义两个结构体指针变量,一个作为遍历用,另一个作为中间变量。另外定义一个整型的标志位panduan并赋初值为0,遍历整个链表,通过字符串比较函数查找相同的书名,如果有的话则panduan赋值为1,然后跳出执行删除操作,否则输出提示您

6、输入的书目不存在,请确认后输入!下面是删除后浏览的内容。之后的排序截图是原来的记录,对比可看到书名为sd的被删除。执行删除操作时先找到需要删除结点的上一个结点,将上一个结点的next指向原来删除结点指向的next,然后将删除的结点释放掉。3.7排序函数struct books_list * selectsort(struct books_list * head)这里使用的是选择排序,其思想是新建另一个链表,每次从原链表中取出最小的结点放在新建链表中,最后组成一个新的链表。最后返回新链表的头结点。示例如下:3.8查询函数void search_book(struct books_list *he

7、ad)同样先判断链表是否为空,如果非空的话,执行通过书名查询程序。然后遍历整个链表,如果找到就输出该书目的详细信息,最后输出查询完毕的提示,否则提示没有该书目。示例如下:3.9 保存函数void save(struct books_list * head)会提示是否保留原来的数据,如果否的话,打开文件的方式是w+,如果原来有数据的话,将会被删掉。如果是的话,则以追加的形式a+,数据会在原来的数据末尾继续保存。保存的具体操作和浏览相似,只不过是利用fprint函数将链表中的数据输出在打开的文件中。下面是txt文件内容:3.10文件读取函数void load()以只读的形式打开保存的文件,如果打开

8、不成功,则提示文件打开失败。否则将文件中的内容读出以字符形式显示,一直到文件的结尾停止。最后关闭文件输出读取成功的提示,如果文件内容为空,则输出也为空。示例如下:3.11简单帮助函数void help()利用输出函数printf输出本系统的注意事项特点等。下面是帮助中的内容:4.调试分析1.在调试的过程中,没有调试成功的调试窗口也要注意关掉,否则会影响后面的程序,出现闪退现象。2.解决重新输入的问题,如果输入的不是选项中的,则提示输入错误,再次调入主函数。3.执行了修改操作后,完成价格输入后程序不再往下走,价格前必须有取址符号。4.初始界面选择保存会出现错误,新增文件打开判断。5.修复空记录时

9、进行修改的错误,判断为空时即退出。6.增加如果没有相应的书目,则输出没有相应的书目。7.增加查询时没有书目的提示。8.修复文件读取是否成功的提示,文件不存在则提示文件读取失败,若文件存在,但内容为空,依然提示读取成功,但显示内容为空。9.增加并修复链表内容为空时的保存操作。链表为空时,则给出提示,保存函数结束。若文件打开失败,则给出提示。10.输出格式的对齐,尽量保持美观。11.增加价格输入时的提示。5.总结这次的课程设计是一个可以说是炼狱的过程,从最初的没有一点头绪,到最后可以实现所有的功能,并且能考虑实际情况增加一些控制。最初我便锁定用结构体链表来做,当然这对自己来说是一个挑战。因为即使江

10、苏省计算机二级通过了,但对链表的实际操作并没有深刻的认识和体会。我决定从头开始,一步一个脚印走。所以当大家都在网上找资料开始做时,我在一个字符一个字符地敲书上给的例子,修改并尝试每种操作,体会每个函数的操作内涵。因为通过二级考试的经验告诉我:学编程这东西,必须得自己动手练习,只看没有作用的。有了砖,剩下的就是盖房子的事情了。但盖房子要有个框架结构,没有设计经验就要参考别人的,吸取别人的经验,为己所用。所以这时前面对链表的学习就十分重要了,因为改别人的程序前提是读懂别人的程序,理解别人的控制思想。但是不要被别人的程序束缚,要有自己的控制思想,然后用从别人那里学来的东西控制程序按自己的想法做事。当

11、然这不是一个容易的过程。最初是在别人的程序上改改,但是很多情况下改别人的程序,改一处会出现很多错误。这时我采取了程序的设计方法自上而下,自简而繁。新建一个程序,先在主程序里把框架搭起来,然后写每个子程序,直到子函数调试无误时再写下一个子函数。这样做的好处是:结构十分清晰明了。如果出现错误,便在此函数里找就行了,这样写个几百行的程序,在自己眼里不过是几个子函数名而已。还有一个重大的问题就是:录入记录需要保存在文件里并且能读出来。因此我又学了关于文件操作的一系列知识。其实,关于文件的操作方法真的很多,不止书上列举的那些。对文件有了深入了解后,我可以按照自己的想法在保存时可以选择原来的数据是否保留,这是我感到自豪的地方。最后就是程序的整体调试了。我以前学习电气自动化编写PLC程序给我最大的体会就是你编写的程序可以在你理解的固定的操作方法下实现老师要求,但是程序是给别人用的,别人未必会按照你的操作顺序操作。所以我最后的工作就是考虑一些可能出现的情况该如何处理,比如:执行保存

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论