《图书馆里系统课程设计报告.doc》由会员分享,可在线阅读,更多相关《图书馆里系统课程设计报告.doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言试验报告一、实验题目:图书信息管理二、实验时间:xx周三、实验地点:xx四、实验目的:1. 综合运用所学的C语言知识解决一个比较实际的简单问题,侧重对、数组、函数、指针、结构体和文件等相关的综合应用,使同学们能进一步熟悉掌握C语言的基本使用方法,进一步提升自己的编程能力并逐渐培养编程思维,进 而 不断提高同学们解决问题的能力,并为以后语言学习打下良好基础。2.通过实践性的操作而积累编程的经验,以便在今后的编程过程中编出更高质量的代码。3.养成独立思考的能力,能够自学没学过的函数,并能够正确运用。五、实验要求:1. 每人一题,独立完成;设计要求有界面菜单。2. 此次课程设计在规定的时间必须
2、在实验室完成,不得以任何理由在其他地点进行。3. 每人需按照选题规则确定好自己的题目(注意不是多人完成一题,每人独立完成一题),不得以任何理由选择其他的题目,当然在完成自己的题目之后根据个人兴趣可以继续选作其他题目;4. 每人必须撰写课程设计报告,并上交程序代码电子稿(每位同学先建立一个文件夹,取名规则为“学好+姓名”,文件夹里存放上交电子内容,每班取一个文件夹名,取名规则为班级号,内放该班同学上交内容,每班学习委员统一收起后交给指导老师)。5. 课程设计的成绩有两部分组成:考勤(30%)+程序检查成绩(40%)+报告检查成绩(30%)。六、实验思路:1. 先建立一个结构体,把每本图书的信息作
3、成一个节点。2. 然后利用链表将其连接,使用链表的建立、删除、插入、输出等函数达到图书的一系列功能。3. 以上是程序的主题思想,然后在主程序中利用switch语句将链表的各个函数调用,实现程序的菜单功能。4. 最后我又设计了程序界面。并将界面函数与switch语句放在主函数中的一个for循环语句中。5.流程图:开始建立链表输出函数创建结构体建立链表删除函数创建链表建立函数与建立链表插入函数 界面函数输入不正确输入x调用插入链表函数调用创建链表函数调用输出链表函数调用删除链表函数七、实验过程:#include #include 各种库函数的调用.#include #include #define
4、 NULL 0#define LEN sizeof(struct book)#define format %ld,%s,%s,%s,%ftypedef struct book结构体的建立,既节点的制作。这是每本图书的具体信息。long num;char bookname10;char publishingname20;char authorname10;float price;struct book *next;book;n为节点的个数,同时也为图书的个数。book bk1000;int n=0;void login() /*界面*/system(cls);printf(nnnntt=Welc
5、ome to Library system=n);printf(tt= - 软件工程-xx班 - xx制作=n);void main_face() /*主菜单界面*/ printf(n);printf(n);printf(tt新书录入t tt删除t n); printf(tt插入 t tt输出t n); printf(tt请选择: n); printf(n); printf(n);struct book *creat(void) struct book *head;struct book *p1,*p2;n=0;p1=p2=(struct book * )(malloc(LEN);printf
6、(请输入图书ISBN:n);scanf(%ld,&p1-num);printf(请输入书名:n);scanf(%s,p1-bookname10);printf(请输入出版社:n);scanf(%s,p1-publishingname20);printf(请输入作者名:n);scanf(%s,p1-authorname10);printf(请输入图书价格:n);scanf(%f,&p1-price);链表的建立函数head=NULL;while(p1-num!=0)n=n+1;if(n=1)head=p1;else p2-next=p1;p2=p1;p1=(struct book *)(mall
7、oc(LEN);printf(请输入图书ISBN:n);scanf(%ld,&p1-num);printf(请输入书名:n);scanf(%s,p1-bookname10);printf(请输入出版社:n);scanf(%s,p1-publishingname20);printf(请输入作者名:n);scanf(%s,p1-authorname10);printf(请输入图书价格:n);scanf(%f,&p1-price);p2-next=NULL;return (head);void print(struct book *head) struct book *p;printf(nNow,T
8、hese %d records are:n,n);链表的输出函数p=head;if(head!=NULL)do printf(format,p-num,p-bookname10,p-publishingname20,p-authorname10,p-price);p=p-next;while (p!=NULL);struct book *del(struct book *head,long num) struct book *p1,*p2;if (head=NULL) printf (nlist null! n);goto end;p1=head;while (num!=p1-num&p1-n
9、ext!=NULL)p2=p1;链表的删除函数p1=p1-next;if(num=p1-num)if(p1=head)head=p1-next;else p2-next=p1-next;printf(delete:%ldn,num);n=n+1;else printf(%ld not been found! n,num);end:return (head);struct book *insert (struct book *head,struct book *nb) 链表的插入函数struct book *p0,*p1,*p2;p1=head;p0=nb;if(head=NULL)head=p
10、0;p0-next=NULL;else while (p0-nump1-num)&(p1-next!=NULL)p2=p1;p1=p1-next;if(p0-numnum)if(head=p1) head=p0;else p2-next=p0 ;p0-next=p1;else p1-next=p0;p0-next=NULL;n=n+1;return (head);void main () /*主程序*/struct book *head,*nb;long del_num;int x;for (;)实现反复使用函数的循环login();main_face();scanf(%d,&x);if (x
11、=1&xnum);printf(请输入书名:n);scanf(%s,nb-bookname10);printf(请输入出版社:n);scanf(%s,nb-publishingname20);printf(请输入作者名:n);scanf(%s,nb-authorname10);printf(请输入图书价格:n);scanf(%f,&nb-price);while (nb-num!=0)head=insert(head,nb);print(head);printf(input the inserted record:);nb=(struct book *)malloc(LEN);printf(请
12、输入图书ISBN:n);scanf(%ld,&nb-num);printf(请输入书名:n);scanf(%s,nb-bookname10);printf(请输入出版社:n);scanf(%s,nb-publishingname20);printf(请输入作者名:n);scanf(%s,nb-authorname10);printf(请输入图书价格:n);scanf(%f,&nb-price);case 4: print(head);default :printf(大哥,您输入不正确,请重新输入!);free (book) 使用后将内存空间释放!3867八、实验总结:得:本程序在完成后能顺利实
13、现管理图书信息的功能;在实现中用到了链表、数组、指针,使得代码的效率提高了;失:本程序功能简陋,且在调用内存地址时有一定几率出现错误。九、实验心得:1我发现在设计程序前必须了解需要解决问题的实质结构,知道应该用什么方法解决它。2在设计程序后应该知道什么方法更加简便,如何表达效率更高,以便修改程序。3在设计程序中要仔细写入代码,尽量不出现认为造成的输入错误。4在程序完成后要整理思路,去发现是否存在逻辑错误。5. 我还发现在一个实验的过程中有暂时不会写的程序可以先用一个空函数代写,等其他部分写完后再重新补全。6. 同时也认识到没有完美的程序,程序的功能是可以无限扩展的,只要想到的功能,就是能够实现的,也许只是暂时没想到用什么方法写出来罢了。7. 再有,编程是一个连续的工程,这一点跟做数学题或写论文是一样的,断断续续的写是没有任何好处的,很可能会出现前言不搭后语的情况,所以我尽量每次尽可能的多写一些连续性强的代码。以免出现类似的问题。8. C语言是一种面向过程的语言,所以在处理问题时不能像那些OOP(面向对象的语言)那样把重点放在对象的抽象化的处理上,而是把重心放在解决问题的算法上。在这一点上,我通过这几次的实验发现,在平时就应该多写代码。积累一定的代码,以便在以后的工作学习中使用。