C语言实训图书管理链表结构.doc_第1页
C语言实训图书管理链表结构.doc_第2页
C语言实训图书管理链表结构.doc_第3页
C语言实训图书管理链表结构.doc_第4页
C语言实训图书管理链表结构.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

. 目录1、问题定义22、系统设计221 总体设计22.2 详细设计32.2.1数据结构设计32.2.2 主控main()函数执行流程32.2.3输入记录模块42.2.4输出记录模块42.2.5添加记录模块42.2.6删除记录模块42.2.7查询记录模块42.2.8函数功能描述43、系统实现531 编码53.1.1 程序预处理53.1.2 主函数main()53.1.3 主菜单界面73.1.4 显示图书信息73.1.5增加图书信息83.1.6删除图书信息83.1.7查询图书信息932 测试与调试103.2.1 概述103.2.2 程序测试114、系统维护135、归纳总结1451 开发经验1452 实训中遇到的问题及解决方法1453 设计中尚存的不足之处1454 感想和心得体会14图书管理02本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和单链表的各种基本操作。本程序中涉及结构体、单链表等方面的知识。通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握利用单链表存储结构实现对图书管理的原理,为进一步开发出高质量的管理信息系统打下坚实的基础。1、问题定义创建一个图书信息管理系统。假设系统中每本图书信息只包括编号、书名、作者名字、单价、出版社名字。程序的运行效果如下图所示,选择菜单实现相应功能。2、系统设计21 总体设计采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。图书管理系统查询图书信息删除图书信息添加图书信息显示图书信息建立图书链表这个图书管理系统要求采用单链表实现,如上图所示,它由如下五个功能模块组成:建立图书链表:完成将数据存入单链表的工作。显示图书信息:显示所有输入的图书信息。添加图书信息:增添图书信息。删除图书信息:删除图书信息。查询图书信息:查询图书信息2.2 详细设计2.2.1数据结构设计l 图书信息结构体typedef struct librarian LIB;/*使结构体变量引用方便*/struct librarian/*图书信息结构体*/ long num;/*编号*/ char name15; /*书名*/ float store; /*单价*/ char auther30; /*作者*/ char publishing30; /*出版社*/ LIB *next; /*指针变量,用以实现链表结构*/;2.2.2 主控main()函数执行流程Switch函数功能1功能4功能3功能2功能5这个图书管理系统执行主流程如上图所示。通过switch函数的选择结构,实现多功能选择。2.2.3输入记录模块输入记录模块主要实现将数据存入单链表中。2.2.4输出记录模块输出记录模块主要实现将数据打印输出。2.2.5添加记录模块添加记录模块主要实现添加数据存入单链表中。2.2.6删除记录模块删除记录模块主要实现删除链表中数据信息。2.2.7查询记录模块查询记录模块主要实现查询链表中数据信息。2.2.8函数功能描述struct librarian。定义结构体system(cls);清除屏幕内容q=(LIB *)malloc(LEN);开辟结构体大小的内存空间printf(输入图书编号:);输出函数scanf(%d,&q-num);输入函数if()else()条件控制for(i=1;in;i+)。控制循环次数return head;函数返回值switch()case1.。case4 switch选择结构实现功能选择void output(LIB *p)/*输出图书信息函数*/LIB *insert(LIB *p, LIB *o)/*插入图书信息函数*/LIB *creat(int n)/*建立图书链表函数*/LIB *del(LIB *p,char *o)/*删除图书信息函数*/LIB *look(LIB *p,char *o)/*查询图书信息函数*/3、系统实现31 编码3.1.1 程序预处理包括加载头文件,定义结构体、常量和变量,并对它们进行初始化工作。#include stdio.h /*标准输入输出函数库*/#include stdlib.h /*标准函数库*/#include string.h /*字符串函数库*/#include conio.h /*屏幕操作函数库*/#include /*表示可以调用此宏定义下的函数*/#define LEN sizeof(LIB) /*宏定义函数方便引用结构体*/3.1.2 主函数main()main()函数主要实现了对整个程序的运行控制,以及相关功能模块的调用。int main()/*主函数*/ LIB *p=0, *h, *q; /*定义链表*/ int m,a; /*保存选择结果变量*/ char n15,num15; /*中间数组*/ do /*主界面*/printf(*n);printf(1:建立图书链表;n2:显示图书信息;n3:添加图书信息;n4:删除图书记录;n 5 :查询图书记录n 0:退出:;n); printf(*n); printf(输入你的选择回车进入:); scanf(%d,&m); switch(m)/*switch选择结构实现功能选择*/ case 1 :/*建立图书链表*/ printf(请输入需要录入本数:); scanf(%d,&a); h=p=creat(a); break; case 2 :/*显示图书信息*/ p=h; output(p); break; case 3 :/*添加图书信息*/ p=h; q=(LIB *)malloc(LEN); printf(输入图书编号:); scanf(%d,&q-num); printf(输入图书名称:); scanf(%s,&q-name); printf(输入图书单价:); scanf(%f,&q-store); while(getchar()!=n); printf(输入图书的作者:); scanf(%s,&q-auther); printf(输入出版社名称:); scanf(%s,&q-publishing); h=p=insert(p,q); break; case 4 :/*删除图书记录*/ p=h; printf(输出你要删除书籍编号:); scanf(%s,num); h=p=del(p,num);break;case 5 :/*查询图书记录*/ p=h; printf(输出你要查询书籍编号:); scanf(%s,num); h=p=look(p,num); break; default : break; while(m);3.1.3 主菜单界面用户进入成绩管理系统时,需要显示主菜单,提示用户进行选择,完成相应任务。此代码被main()函数调用。/*主界面*/printf(*n);printf(1:建立图书链表;n2:显示图书信息;n3:添加图书信息;n4:删除图书记录;n0:退出:;n); printf(*n); printf(输入你的选择回车进入:);3.1.4 显示图书信息 不懂怎么排列,制表就只能这样输出了。printf(编号:%d 书名: %s t单价: %.1f 作者:%s t 出版社 : %s; n,p-num,p-name,p-store,p-auther,p-publishing);3.1.5增加图书信息LIB *insert(LIB *p, LIB *o)/*插入图书信息函数*/ LIB *head=p,*q;/*建立结构体指针变量,head用来保存首链表*/ system(cls);/*清理屏幕*/ if(p=0) /*当链表为空时*/ head=o; o-next=0; else if(o-num)num) /*嵌入结构体通过编号排序*/ head=o; o-next=p; else while(o-num)(p-num)&p-next!=0) q=p; p=p-next; if(p-next=0) p-next=o; o-next=0; else q-next=o; o-next=p; system(cls); return head;3.1.6删除图书信息LIB *del(LIB *p,char *o)/*删除图书信息函数*/ LIB *head=p,*q; if(p=0) printf(没有这本书n); else if(strcmp(p-num,o)=0)/*当首链表为要删除函数时*/ head=p-next; free(p); else while(p!=0) q=p; p=p-next;/*通过链式循环寻找目标编号*/ if(p=0)break; if(strcmp(p-num,o)=0) q-next=p-next; free(p);/*释放目标结点空间*/ break; system(cls); return head;3.1.7查询图书信息和删除函数基本一致,只是把free语句改成相应的printf语句LIB *look(LIB *p,char *o)/*查询图书信息函数*/ LIB *head=p,*q; if(p=0) printf(没有这本书n); else if(strcmp(p-num,o)=0) head=p-next; system(cls); printf(编号:%s 书名: %s t单价: %.1f 作者:%s t 出版社 : %s; n,p-num,p-name,p-store,p-auther,p-publishing); printf(nn按任意键回到主菜单!n); getch(); else while(p!=0) q=p; p=p-next; if(p=0)break; if(strcmp(p-num,o)=0) system(cls); printf(编号:%s 书名: %s t单价: %.1f 作者:%s t 出版社 : %s; n,p-num,p-name,p-store,p-auther,p-publishing); printf(nn按任意键回到主菜单!n); getch(); system(cls); return head;32 测试与调试3.2.1 概述一般情况下,为解决一个问题所编写的程序代码较长,可能包括几百条甚至成千上万条语句。在检查并排除所有语法错误后,还会有不易发现的逻辑错误,因此要对程序进行认真仔细的测试与调试。测试是通过运行程序发现错误的过程,常见的错误有数据溢出、数组越界、进入死循环、语句顺序颠倒、多加“;”或少加“”等等。调试则是确定测试中找到的错误性质并改正错误的过程。测试与调试通常交替进行,即测试调试再测试再调试。能检查出尚未发现的、各种不同类型错误的测试才是成功的测试。测试程序需要测试用例,测试用例可用如下公式表示:测试用例测试数据预期结果。好的测试用例应该是用尽可能少的测试数据发现尽可能多的错误,即发现错误的概率要大。要选择合适的测试数据,使系统在运行时尽量能执行到每条语句,以测试各指令是否正确。还应分别测试输入合法数据与非法数据时,程序的运行情况,。对于合法数据,还要考虑数据的一般性与特殊性,如求最大值的问题,应测试最大值在最前面、最后面、中间某一位置的情况。测试可按模块测试、组装测试和确认测试的步骤进行。(1)模块测试就是分别对各模块进行测试的过程。在编写一个模块后应立即对其进行测试,因为这时对模块记忆深刻,而且单个模块相对较小,所以容易构造测试数据,能方便地检查和改正错误。(2)组装测试就是把所有模块(应该是通过模块测试的模块)按预先制定的计划逐步组装和测试的过程。一般情况下,各模块之间要相互传递数据和控制信息,因此组装测试的主要任务是发现模块接口中的错误。(3)确认测试是最后一个步骤,一般在将软件交付用户之前,应确认软件是否确实满足用户的要求,通常使用接近实际的用例进行测试。3.2.2 程序测试l 在主菜单中选择1当用户输入1并按回车键后,会出现”请输入需要录入本数:” 根据需要输入相应数字即可进入图书信息输入界面;输入相应信息:l 在主菜单中选择2当用户输入2并按回车键后,即可进入显示图书信息界面。l 在主菜单中选择3当用户输入3并按回车键后,即可进入添加图书信息界面。输入相应信息:用功能选项2验证是否添加成功:l 在主菜单中选择4当用户输入4并按回车键后,即可进入删除图书信息界面。输入想要删除图书的编号:用功能选项2验证是否删除成功:l 在主菜单中选择5当用户输入5并按回车键后,即可进入查询图书信息界面。添加几本书测试查询功能:l 在主菜单中选择0当用户输入0并按回车键后,即可执行退出操作。4、系统维护经测试与调试确认软件无错时,开发就告一段落,这时可以交付软件供用户使用,但是在软件的使用过程中还会面临更加漫长的工作,即软件维护。一般维护的工作有:更改使用中发现的错误;为适应实际环境而对程序进行修改;为满足新的需求而对程序作必要的改进等等。5、归纳总结51 开发经验通过对本题目的开发,体会到要掌握以下几点内容。l 大程序的设计风格。按“自顶向下,逐步细化,模块化”的方法进行程序设计。l 编写主函数,并进行测试与调试。当被调函数又需要调用其他函数时,也要遵循逐步细化的原则。C语言提供丰富的库函数,编程序时要善于使用库函数,避免不必要的劳动。l 定义函数时,应选好参数的个数和数据类型。l 学会了链表结构的构成及使用方法。52

温馨提示

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

评论

0/150

提交评论