苏州科技学院二○一四~二○一五学年第二学期电子与信息工程学院课程设计报告书课程名称:班级:学号:姓名:指导教师:二○一五年三月1.题目小型图书信息管理系统2.功能1、信息录入,包括记录的追加和插入;2、信息删除;3、信息修改;4、信息排序和查询;5、信息的保存和装载;6、简单的帮助。3.要求(1)整个系统均用C语言实现;(2)利用指针、链表来实现图书馆的数据结构设计;(3)系统具有输入、显示、查询、删除、排序、插入,保存、读取基本功能;(4)系统的各个功能模块都用函数的形式来实现;(5)可以将图书信息保存在文件中。(6)可以将图书信息从文件中读取出来。4.设计内容整个系统除了主函数外,另外还有6个函数,实现八大功能:输入功能,查找功能,插入功能,保存功能,删除功能,读取功能。各个函数的详细设计说明分别如下:4.1主函数main()利用无限次循环for(;;)实现各函数的调用,系统根据输入的数字选项来调用相应的函数。4.2初始化函数book*create()这是一个无参函数,它的作用是使链表初始化,使head的值为NULL。4.3输入函数Insert(book*head)这是一个无参函数,用来执行图书信息的输入。算法:先声明一个首节点head,并将head-next设为NULL。每输入一个数据就声明一个新节点p,把p-next设为NULL,并且链接到之前列表的尾端。N-S流程图如下:while(p-next!=NULL)输入图书信息INSERTSUCCESS4.4修改函数change(book*head)用于修改图书信息。算法:输入需修改图书的书名,判断是否有本书,若有,再进行修改。N-S流程图如下:当输入的图书名存在输入新的图书信息Pd=1当pd=0,没有此书4.5显示记录函数voidPrint(book*head)这是一个不返回值的有参函数,将记录的输出。算法:先将p结点的指针指向第一个结点,将p结点的数据输出,再将p结点的指针指向下一结点,将下一结点的数据输出。重复执行此步聚直到p指针指向NULL为止。N-S流程图如下:p=head,使指向第一个结点输出p所指向的结点p指向一下个结点当p指的不是表尾4.6查找记录函数voidsearch(book*head)这是一个不返回值的有参函数,形参为“链表头的指针”,实现按书名对某书进行查找,并显示所查找到的记录。算法:采用线性查找法往下一个节点查找。输入所要查找的图书的名称,设一个指针变量p,先指向第一个结点,当strcmp(p-name,name1)&&p!=NULL时,使p后移一个结点,如果p!=NULL,输出p所指的结点。N-S流程图如下:输入要查找的学生的学号sp=head,使p指向第一结点当记录的书名不是要找的,或指针不为空时p=p-nextp!=NULL如果指针不为空是否显示没有该输出p所指向的结点图书4.7删除记录函数Delete(book*head)这是一个有参函数,形参为“链表头的指针”,先输入要删除的图书的名称,找到后进行删除。算法:从p指向的第一个结点开始,检查该结点中的bookname是否等于输入的要求删除的那个书名。如果相等就将该结点删除,如不相等,就将p后移一个结点,再如此进行下去,直到遇到表尾为止。N-S流程图如下:p=head输入入要删除的图书当(strcmp(p-bookname,temp)==0)pd=1p=p-next;p是要删除的结点是否删除成功未找到本书5.调试分析在编写完程序后,点击编译,显示是1个错误。但是往上看的时候,却是很多。改的时候发现有些是句子写错了,然后再看看书,上网查下,就改好了。还有2处是打错字母了……最后0error(s),0warning(s)。但是在信息录入的时候,输入到pubtime后出错,程序停止运行,仔细看了程序,才发现在输入pubtime和price时,句子中&忘记打了……后面程序中也有几处关于&的问题,还有是%d与%f写错了。能输入信息后,在浏览和查询时,输出的信息和上面对应的项目不对应,还有一些是地址。然后输入数据,多次更改后,把数据对应了起来。6.总结通过这个作业,我又对链表,指针等有了一些了解,能更好的运用。还上网查了一些资料,对这门课有了加强。当编写完这个程序,并成功运行起来,我感觉到有一种成就感,我觉得这种感觉对学习是很有帮助的,能帮我在学习中找到乐趣。程序如下#includestdio.h#includestring.h#includestdlib.hstructbook{charauthor[25];charbookname[25];charpublisher[25];intpubtime;intinnum;floatprice;structbook*next;};structbook*create(){structbook*head;head=(structbook*)malloc(sizeof(structbook));head-next=NULL;returnhead;}voidSave(structbook*head){structbook*p;FILE*fp;p=head;if((fp=fopen(data.txt,w+))==NULL){printf(cannotopenthisfile\n);exit(0);}fprintf(fp,innumbooknameauthorpublisherpubtimeprice\n);while(p-next!=NULL){p=p-next;fprintf(fp,%-6d%-10s%-10s%-10s%-10d%-8f,p-innum,p-bookname,p-author,p-publisher,p-pubtime,p-price);fclose(fp);printf(信息已保存!\n);}}voidInsert(structbook*head){structbook*s,*p;p=head;while(p-next!=NULL){p=p-next;}s=(structbook*)malloc(sizeof(structbook));printf(inputtheinnum:\n);scanf(%d,&s-innum);printf(inputthebookname:\n);scanf(%s,s-bookname);printf(inputtheauthorname:\n);scanf(%s,s-author);printf(inputthepublisher:\n);scanf(%s,s-publisher);printf(inputthepubtime:\n);scanf(%d,&s-pubtime);printf(inputtheprice:\n);scanf(%f,&s-price);printf(\n);p-next=s;p=s;s-next=NULL;printf(INSERTSUCCESS!\n);}voidSearch(structbook*head){structbook*p;charname1[20];p=head;if(head==NULL||head-next==NULL)printf(libraryisempty!);elseprintf(inputthename1:\n);scanf(%s,name1);while(p-next!=NULL){p=p-next;if(strcmp(p-bookname,name1)==0){printf(found!\n);printf(innum:%d\n,p-innum);printf(bookname:%s\n,p-bookname);printf(author:%s\n,p-author);printf(pubtime:%d\n,p-pubtime);printf(publisher:%s\n,p-publisher);printf(price:%f\n,p-price);}if(p-next==NULL)printf(\n查询结束!);}}voidPrint(structbook*head){structbook*p;if(head==NULL||head-next==NULL){printf(\n\t无记录\n);return;}p=head;printf(\n登录号书名作者出版单位出版时间价格\n);while(p-next!=NULL){p=p-next;printf(%-d%-8s%-8s%-8s%-5d%-8f\n,p-innum,p-bookname,p-author,p-publisher,p-pubtime,p-price);}}voidchange(structbook*head){structbook*p;intpd=0;chartemp[20];p=head;printf(要修改的书名:);scanf(%s,temp);while(p-next!=NULL){p=p-next;if(strcmp(p-bookname,temp)==0){printf(输入登录号码:);fflush(stdin);scanf(%d,&p-innum);printf(输入书名:);fflush(stdin);scanf(%s,p-bookname);printf(输入作者名:);fflush(stdin);scanf(%s,p-author);printf(输入出版社:);fflush(stdin);scanf(%s,p-publisher);printf(输入出版时间:);fflush(stdin);scanf(%d,&p-pubtime);printf(输入价格:);fflush(stdin);scanf(%d,&p-price);printf(\n);pd=1;}}if(pd==0){printf(没有记录);}return;}voidDelete(structbook*head){structbook*s,*p;chartemp[20];intpd;pd=0;p=s=head;printf(请输入要删除的书名!);scanf(%s,temp);while(p!=NULL){if(strcmp(p-bookname,temp)==0){pd++;break;}p=p-next;}if(pd==1){for(;s-next!=p;){s=s-next;}s-next=p-next;free(p);printf(删除成功!);}else{printf(未找到本书);}return;}intmain(void){structbook*head;charchoice;head=NULL;for(;;){printf(图书管理系统\n);printf(1信息录入\n);printf(2信息浏览\n);printf(3信息查询\n);printf(4信息修改\n);printf(5信息删除\n);printf(6退出\n);fflush(stdin);scanf(%c,&choice);if(choice=='1'){if(head==NULL){head=create();}Insert(head);}elseif(choice=='2'){Print(head);}elseif(choice=='3'){Search(head);}elseif(choice=='4'){change(head);}elseif(choice=='5'){Delete(head);}elseif(choice=='6'){printf(\n);printf(谢谢使用\n);break;}else{printf(输入错误\n);break;}}return0;}