1、高级语言程序设计课程设计报告格式规范目 录1 总体设计与算法分析 11.1 课题需求分析 11.2 数据结构设计 21.3 关键算法分析与设计 22 程序流程图与函数说明 32.1程序流程图 32.2函数说明 33 测试数据与测试过程记录 54 遇到的问题及解决方法 65 课程设计小结 7参考文献 8 1 总体设计与算法分析 近年来,随着图书馆规模的不断扩大,图书数量也相应的增加,有关图书的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致图书馆管理上的混乱,人力与物力过多浪费,图书馆管理费用的增加,从而使图书馆的负担过重,影响整个图书馆的运作和控制管理,因此,必须制定一套合理
2、、有效,规范和实用的图书管理系统,对图书资料进行集中统一的管理。 另一方面,IT产业和Internet获得了飞速发展,计算机应用已渗透到了各个领域,引起信息管理的革命,实现了信息的自动化处理,提高了处理的及时性和正确性。 图书管理工作面对大量的可模块化处理的信息,是当今信息革命的一个重要阵地。我们小组开发图书管理信息系统就是采用现代化的信息管理方式代替手工管理方式,提高图书管理工作效率,作到信息的规范管理,科学统计和快速查询,让图书馆更好的为学校,社会服务。1.1 课题需求分析 图书管理系统是一种基于集中统一规划的数据库数据管理新模式。在对图书的管理,其实是对图书数据的管理。本系统的建成无疑会
3、为管理者对图书管理系统提供极大的帮助。使用该系统之后,图书馆管理人员可以通过登录号,作者,出版日期等信息对图书的情况进行管理以及注销等;还可以为借阅者提供查找信息,对图书情况给出一些统计,以全面掌握图书的流通情况。 1.2 数据结构设计链表是线形表的一种,线形表分为顺序存储结构和链式存储结构。线形表的顺序存储结构的特点是逻辑关系上相邻的两个元素物理位置上也相 邻,因此可以随机存取表中任一元素。链式存储结构的特点是用一组任意的存储单元存储线形表的数据元素。链表的最大的优点是对表的添加、删除、查找、排序等操作比较方便1.3 关键算法分析与设计对结点得定义如下:struct book char nu
4、m10; /* 书籍号 */ char bookname20;/*书名*/ char name20; /* 作者 */ char birth20; /* 出版时间*/ int page; int price; /* 书籍价格 */ char addr30; /* 书籍出版单位*/; typedef struct node struct book data; struct node *next; Node,*Link;2.main() 主函数模块主函数是程序入口,采用模块化设计。首先在主程序中打印登陆界面,定义一些必要变量,作一无限循环程序,循环体为一开关语句,该语句设置一个断点,其条件值是通过
5、调用主菜单函数得到的返回值,根据该值,调用相应的功能函数,同时设置一个断点,当返回值为一定条件时结束程序。3. Add(Link l) 增加图书函数模块 Modify(Link l) 修改图书函数模块Qur(Link l) 查询图书函数模块:在这个模块中又分为两个子模块,按书名查找模块和按作者查找。Del(Link l) 删除图书函数模块:在这个模块中又分为两个子模块,按书名删除模块和按作者删除。Save(Link l) 保存程序函数模块4这次编程中主要负责的是对程序的错误提醒,首先定义void printstart(),然后分别对书籍的查找,登录号,书名等做了错误提醒。然后利用指针数组等编出
6、函数,以便最后可以与主函数链接在一起。void printstart() printf(-n); void Wrong() printf(n=提示:输入错误!n); /*NO FIND*/ void Nofind() printf(n=提示:没有找到相应书籍!n); void printc() /* 本函数用于输出中文 */ printf( 书籍编号t书籍名tt价格t出版日期t出版社tt作者n); void printe(Node *p)/* 本函数用于输出英文 */ printf(%-12st%st%dt%st%st%s n, p-data.num,p-data.bookname,p-dat
7、a.price,p-data.birth,p-data.addr,p-data.name); Node* Locate(Link l,char findmess,char nameornum) /* 该函数用于定位链表表中符合要求的接点,并返回该指针 */ Node *r; if(strcmp(nameornum,num)=0) /* 按登陆号查询*/ r=l-next; while(r!=NULL) if(strcmp(r-data.num,findmess)=0) return r; r=r-next; else if(strcmp(nameornum,bookname)=0) /* 按书
8、名查询 */ r=l-next; while(r!=NULL) if(strcmp(r-data.bookname,findmess)=0) return r; r=r-next; return 0; 还有就是对主菜单的设计,首先定义void menu(),然后再输出登记书籍信息,删除书籍信息,查询书籍信息,修改书籍信息,保存书籍信息,浏览书籍信息,图书按登录号排序。在这主菜单中要注意的是排版的时候规划好整体的效果。void menu() printf(nnn); printf(t1登记书籍信息tttt2删除书籍信息nn); printf(t3查询书籍信息tttt4修改书籍信息nn);prin
9、tf(t5保存书籍信息tttt0退出系统nn); printf(t6浏览书籍信息nn);printf(t7图书按登录号排序nn); printf(%* 您好!欢迎登陆图书管理系统 *%); printf(n); 还有就是对书籍的添加功能的设计,首先定义void Add(Link l),然后对书籍按照登录号,书名,作者,出版时间,出版单位进行添加功能的设计。void Add(Link l) /* 增加书籍*/ Node *p,*r,*s; char num10; r=l; s=l-next; while(r-next!=NULL) r=r-next; /* 将指针置于最末尾 */ while(1
10、) printf(n); printf(请你输入登陆号(以0返回上一级菜单:); scanf(%s,num); if(strcmp(num,0)=0) break; while(s) if(strcmp(s-data.num,num)=0) printf(提示:登陆号为%s的书籍已经存在,若要修改请选择4!n,num); printstart(); printc(); printe(s); printstart(); printf(n); return; s=s-next; p=(Node *)malloc(sizeof(Node); strcpy(p-data.num,num); print
11、f(请你输入书名:); scanf(%s,p-data.bookname); getchar(); printf(请你输入作者:); scanf(%s,p-data.name); getchar(); printf(请你输入价格:); scanf(%d,&p-data.price); getchar(); printf(请你输入出版时间); scanf(%s,p-data.birth); getchar(); printf(请输入出版单位); scanf(%s,p-data.addr); getchar(); /* 信息输入已经完成 */ p-next=NULL; r-next=p; r=p;
12、 shoudsave=1; 最后是对图书的查询功能,首先定义void Qur(Link l),然后分别是按登录号和名字进行查找。如果没有办法查找,就显示没有资料可以查询。void Qur(Link l) /* 查询书籍 */ int sel; char findmess20; Node *p; if(!l-next) printf(n=提示:没有资料可以查询!n); return; printf(n=1按登录号n=2按书名查找n); scanf(%d,&sel); if(sel=1)/* 书籍 */ printf(请你输入要查找的书籍:); scanf(%s,findmess); p=Loca
13、te(l,findmess,num); if(p) printf(tttt查找结果n); printstart(); printc(); printe(p); printstart(); else Nofind(); else if(sel=2) /* 姓名 */ printf(请你输入要查找的书名:); scanf(%s,findmess); p=Locate(l,findmess,bookname); if(p) printf(tttt查找结果n); printstart(); printc(); printe(p); printstart(); else Nofind(); else W
14、rong(); 2 程序流程图与函数说明2.1 程序流程图2.2函数说明char num10 定义书籍号 char bookname20 定义书名 char name20 定义作者 char birth20 定义出版时间 int page 定义页 int price 定义书籍价格 char addr30 定义书籍出版单位Add(l ) 定义增加书籍 Del(l ) 定义删除书籍 Qur(l) 定义查询书籍 Modify(l) 定义修改书籍 Save(l) 定义保存书籍 displayALL(l 定义浏览书籍 sort(l) 定义排序书籍3 测试数据与测试过程记录主界面登记书籍信息删除书籍信息查
15、询书籍信息修改书籍信息保存书籍信息浏览书籍信息书籍信息排序 4 遇到的问题及解决方法原先,分配好各自所负责的部分后,各自进行了编写,但是由于平时基础知识的不扎实5 课程设计小结在本次试验中,首先遇到的就是对编程语言的不掌握,其实就是对算法的构建,但是在经过网上的查询,图书的借阅以及多人的合作。最后勉强将这次的试验完成了。在本次的试验中,得到了几点体会。首先是对编程中数组的掌握,数组是程序设计中最基本也是用途最广的一种数据结构,它是一批相同数据类型的有序集合,用一个统一的数组名和各自的下标来唯一确定数组中的元素。按照下标数目的多少,把数组分为一维、二维、多维数组。数组元素值的获取有两种方式,一种
16、方式是在定义数组的同时对其各元素指定初始值(即初始化);另一种方式是在程序运行时利用循环对数组中各元素依次赋值。C语言中没有字符串变量,字符串不是存放在一个变量中而是存放在一个字符数组中,字符串通常作为整体被输入和输出,而其他类型的数组不能作为整体进行输入和输出。字符串存放在字符数组中,但字符数组与字符串可以不等长。字符串以0作为结束标志,字符数组不要求其末尾为0。字符串的长度是指字符串的实际有效字符的个数。C语言提供了很多处理字符串的库函数,用户可以直接调用完成对字符串的操作。在C语言中,指针和数组之间是密不可分的,数组名就是一个指针,表示数组的起始地址。比如在程序的开头就用到了数组,cha
17、r num10; char bookname20;char name20; char birth20; char addr30。第二,明白了编程的基本步骤和注意点。第一步:分析问题。第二步:画出程序的基本轮廓。第三步:实现该程序。第一步: 分析问题 ,在这一步, 作为解决问题的一种方法, 确定要产生的数据(输出)。 作为这一子步的一部分, 你应定义表示输出的变量。 确定需产生输出的数据(称为输入), 作为这一子步的一部分,你应定义表示输入的变量。 研制一种算法, 从有限步的输入中获取输出。 这种算法定义为结构化的顺序操作, 以便在有限步内解决问题。就数字问题而言, 这种算法包括获取输出的计算,
18、 但对非数字问题来说, 这种算法包括许多文本和图象处理操作。第二步: 画出程序的基本轮廓 ,在这一步,,画出程序的基本轮廓。每个句子对应一个简单的程序操作。对一个简单的程序来说,通过列出程序顺序执行的动作, 便可直接产生伪代码。然而, 对复杂一些的程序来说, 则需要将大致过程有条理地进行组织。对此, 应使用自上而下的设计方法。 当使用自上而下的设计方法时,程序分割成几段来完成。列出每段要实现的任务, 程序的轮廓也就有了, 这称之为主模块。当一项任务列在主模块时, 仅用其名加以标识, 并未指出该任务将如何完成。这方面的内容留给程序设计的下一阶段来讨论。将程序分为几项任务只是对程序的初步设计。整个
19、程序设计归结为下图所示的流程图1.。系统的设计,算法的设计,解决一个具体问题时通常有多种算法供选用,因此有必要知道哪一种算法是最好的,这就需要对算法执行效率进行分析。算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上面,所需的资源越多,我们就说该算法的复杂性越高;反之,所需的资源越低,则该算法的复杂性越低。这是在今后的学习总要慢慢提高的一点。流程图的使用可以让程序的脉络显得更清晰,这是一种传统的、广泛应用的且最有争议的算法描述工具,它是利用几何图形的图框来代表各种不同的操作,用“流线”来指示算法的执行方向。第三步: 实现该程
20、序 程序设计的最后一步是编写源码程序。对于源程序, 你应包含注释方式的文件编制, 以描述程序各个部分做何种工作。此外, 源程序还应包含调试程序段, 以测试程序的运行情况, 并允许查找编程错误。一旦程序运行情况良好, 可去掉调试程序段, 然而,文件编制应做为源程序的固定部分保留下来, 便于你或其他人维护和修改。 注意事项有,在编程的时候,各个同学之间的链接要到位,这就必须在设计开始前做好良好的沟通,比如在图书管理系统中定义好登录号,作者名,出版日期等。各分块的设计要先分配好,然后在各个分块设计好的前提之下,一起将分块汇总再一起,然后再编出main函数,调用函数,函数的主界面等。然后再调试,在调试
21、的过程中会有很多的问题,这就必须再靠团队在一起磨合与寻找问题。原先我们是先自己编写,然后慢慢发现很难将各自编的语言组织在一起,经过协商,先确定了将系统分为错误信息提醒,主菜单,增加书籍,查询书籍,删除书籍,修改书籍,程序保存,浏览书籍信息,书籍信息排序,文件的创建。第三,在这次程序设计的一周内,让我深深明白自己在c语言上还欠缺着很多的不足之处,比如用户建立数据这一点还存在很大的问题,面对巨大的任务和一头雾水的时候,终于明白自己的问题是出在哪里,是对知识点的掌握还存在很大的困难。很多要点都是经过网络和书本完成的,所以在今后的学习中还要继续钻研,只有在经过很多的练习后才有可能真正掌握编程的技巧,现在的我们只是一个开始。当然,在编程的一周后,看见大家所编的程序后,每个人的内心都会觉得什么都是值得的,每天晚上的辛苦都是值得的。 参考文献C程序设计 谭浩强编 清华大学出版社C程序设计思想与方法 尹宝林编著 机械工业出版社