(完整版)C语言本科毕业设计论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子科技大学
毕业设计(论文)任务书题目:
任务与要求:
时间:年月日至年月日共周
学习中心(或办学单位):
专业:
指导单位或教研室:
指导教师:职称:
年月日
毕业设计(论文)任务书
题目:
任务与要求:
时间:年月日至年月日共周
学习中心:(或办学单位)
学生姓名:学号:
专业:
指导单位或教研室:
指导教师:职称:
年月日
毕业设计(论文)进度计划表
本表作评定学生平时成绩的依据之一。
摘要
随着计算机的普及和网络的出现,对信息的需求,书馆业务受到了强烈的冲击,传统的手工管理方式已不能适应现在的信息化社会。
如何利用现有的科学技术条件提高图书信息的管理效率是我们当下要考虑的问题.图书信息管理系统是典型的信息管理系统,其开发主要包括前端应用程序的设计和后台数据库的建立及维护两方面。
对于前者,要求应用程序功能;而对于后者,则要求数据库具有一致性、完整性、安全性等特点。
对此,建立一个规范化,系统化,程序化的图书管理系统迫不急待。
为方便对图书馆书籍、读者资料、借还书等进行高效的管理,特编写程序以提高图书馆的管理效率。
使用程序之后,工作人员可以查询某位读者、某种图书的借阅情况,还可以对当前图书借阅情况进行一些统计,以便全面掌握图书的流通情况等等。
关键词 C语言;图书管理;数据处理;信息技术
AbstraCt
With the popularization of Computer and network, the demand for
information, the library serviCe a strong impaCt, the traditional manual management unable to adapt to the information soCiety now. How to use the existing sCientifiC and teChnologiCal Conditions improve the book information management effiCienCy is our immediate Consideration. Library information management system is an information management a typiCal system, its development mainly inCludes the establishment and maintenanCe of the two front appliCation program design and the baCkstage database. For the former, requires the appliCation program funCtion; and for the latter, it requires a database with ConsistenCy, integrity, safety and so on In this regard, the establishment of a standardized, systematiC, wait the books management system management system programming. For the ConvenienCe of library books, readers information, book borrowing for effiCient management, speCial program to improve library management effiCienCy.After using the program, the staff Can borrow a reader, a book, Can borrow books on the Currentsituation of some statistiCs, so as to fully grasp the flow of books
KEY WORDS
C language, Library Management, Data ProCessing, Information TeChnology
目录
摘要............................................................. (I)
AbstraCt....................................................... . (II)
1 绪论............................................................. . (1)
1.1 选题的背景和选题的意义 (1)
1.1.1 选题的背景 (1)
1.1.2 选题的意义 (1)
1.2 系统的特点 (2)
1.3 需求分析.............................................................
2
2 系统的总体设计 (3)
2.1 系统总体设计 (3)
2.2运行环境和开发工具 (3)
2.2.1开发工具 (3)
2.2.2运行环境 (4)
2.3 系统流程
3 系统的详细设计 (6)
3.1主体界面设计 (6)
3.1.1主函数 (6)
3.1.2输入模块 (7)
3.1.3删除模块 (8)
3.1.4查询模块 (9)
3.1.5修改模块 (11)
3.1.6显示模块 (12)
3.1.7借出模块 (13)
3.1.8归还模块 (14)
3.1.9公共函数 (16)
4 系统调
..17
5系统运行............................................................. (19)
结论............................................................. .. (23)
致谢............................................................. .. (24)
参考文献............................................................. . (25)
附录
程序源代码............................................................. ..26
1 绪论
1.1选题背景和选题意义
1.1.1选题背景
随着社会经济的迅速发展和现代科学技术的进步,人类社会正逐渐走向现代化。
计算机事业的飞速发展,使得以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。
同时,随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越高。
图书馆拥有丰富的文献信息资源,
是社会系统的重要组成部分,在信息社会中的作用愈来愈重要。
图书管理系统是我国大部分学校或其他部门不可缺少的部分,书籍是人类的精神食粮,尤其对一些学校来说,图书馆非常重要。
在软件开发中,以计算机图书为主,称“计算机图书管理系统”。
计算机图书管理系统能够为用户实现借阅图书、管理等,随着计算机科学的日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对图书资源信息进行管理,具有着手工管理所无法比拟的优点,例如:查阅迅速、安全性高、可靠性高、存储量大、保密性好、成本低等。
计算机图书管理系统能够单一定向计算机图书方面,具有实用、精简功能等效率,这些优点能够极大的提高图书管理的效率,也是企业、学校的科学化、正规化管理,与世界接轨的重要条件。
1.1.2选题意义
图书馆的信息化从最初的对图书馆业务管理实行信息化发展到图书馆各个业务流程进行系统和网络化管理,并建立大规模以个体文献目录联机查询为主的资源共享系统。
进入21世纪,充分利用计算机网络和信息技术,逐步实现不同载体的实体文献的信息化管理和多方位的联机查询。
图书馆的计算机信息化管理,就是将传统图书馆业务的手工操作转变成由计算机管理,既图书馆的图书期刊、音像资料等各种载体文献的采编、典藏、流通、检索及常规业务管理工作,采用计算机技术,进行高效、准确的信息化管理。
其根本目的是实现区域内及地区、国家、国家间的资源共享。
要达到资源共享的目的,必须制定一定的标准,只有各个系统都遵循这些标准,不同的系统间才可以实现联机查询、资源共享的效果。
1.2图书管理系统简介
图书管理系统是图书馆的重要组成部分,图书是我们最好的获取信息的方式,但由于图书馆图书收藏量大大增加,使传统的图书管理员的工作日益繁重起来,迫使人们起用新的管理方法来管理图书。
本文通过设计和开发图书馆管理系统的实践,阐述了图书管理软件中所应具有的功能、设计、实现。
介绍了图书管理系统的设计和系统功能的实现过程。
该系统可以运用于高校的图书管理,由图书借阅,图书归还,图书查询,图书信息修改,等多个模块组成,实现了图书资料的计算机网络管理。
一般通用的图书馆管理系统通常包括系统管理、读者管理、编目、图书流通、统计、查询等功能。
比较先进的系统能够在一个界面下实现图书、音像、期刊的管理,设置假期、设置暂离锁、暂停某些读者的借阅权、导入导出读者资料、交换MARC(MaChine Readable Catalogue)数据、升级辅助编目库、征订图书等。
此外,随着工Internet应用的发展,一个完善的系统还应提供无缝接入Internet的功能,通过IE浏览器让读者使用借阅资料查询、更换密码、预约、资料检索等功能。
有些系统还能提供读者自助服务,可以开放一些客户机让读者自行管理密码、查询自己的借阅史、预约资料、检索资料等。
1.3图书管理系统需求分析
为满足图书管理现代化的需求,国内软件商已开发出很多商品化图书管理软件,但他们大多是面向大型专业图书馆而开发的,专业性强,操作和使用比较复杂,难以掌握。
而国内很多中小型图书馆由于管理人员不多且大多数不是图书管理业务的专业人员、业务分工也不是很详细、明确,这样的软件对于他们而言太复杂,所以应用效果并不是很好。
目前在大的图书馆己经有一整套比较完善的信息管理系统,而在一般小型图书馆中大部分工作还是进行手工管理,工作效率低,并不能即时了解图书馆各类图书的库存,读者比较需求的图书难以在短时间内找到,图书
的入库和更新比较麻烦等等,不便于动态及时调整图书结构。
同时由于不可避免的人为因素,造成数据的遗漏、误报等。
为了更好的适应当前中小型图书馆的读者借阅需求,缓解手工管理存在的各种弊端,因此开发了面向中小型图书馆的图书管理系统,为用户提供全方位的信息服务。
通过对中小型图书馆的调查、分析发现,用户的需求可分为4个方面:第一是图书馆的工作人员通过计算机来管理各类图书,分类编号、调整图书结构、增加图书库存,适应读者的需求。
第二是读者能通过计算机来查询浏览图书馆中的图书,来确定自己需要的书籍,为借阅做好准备。
第三是工作人员对读者的借书情况能够作好全面掌握,能及时得到每个读者的当前借阅状态和历史借阅记录。
第四也是图书馆的核心工作,对图书的借阅管理。
在软、硬件方面对系统的需求是软件要易学,容易掌握,可以很简单方便地管理各种图书信息。
硬件的配置要求不能太高,这样可以适应中小型图书馆的经济条件。
总之,中小型图书馆管理信息系统旨在提供一个可以操作的,方便查询的,易于修改的辅助管理系统。
同时提供了系统智能辅助与用户自主选择的两种方式,提高查询效率。
2 系统分析
2 系统的总体设计
2.1 系统总体设计
实用的图书馆管理系统应该包括:
录入:新进图书及基本信息输入
删除:旧图书及基本信息删除
查询:查询要借阅的图书信息
修改:修改已有的图书信息
借书:实现用户办理借书手续
还书:实现用户.办理还书手续
系统以菜单方式工作可以使界面友好,易于操作。
用户可以对本系统进行自己需要的查询或修改操作,如根据用户的需求自动的进行添加操作、删除操作、借还操作。
我们也可以查找所要的图书、查阅图书的详细资料、查阅读者的详细资料。
最后清晰完整的结果于屏幕中。
方便使用者对图书借阅的操作,提高准确性,可以达到事半功倍的效果。
系统采用的是自顶向下、层次化的模块结构。
对于高层模块,采用以事务为中心的设计策略,把一个大的模块逐步分解成较小的相对简单的模块。
对低层模块,采用以变换为中心的设计策略。
为了达到高内聚,低耦合的效果,我们可以把每个模块设计成具有单一功能的模块,使模块间的联系完全是通过主模块的控制和调用来实现。
2.2运行环境和开发工具
2.2.1开发工具
本系统采用C语言作为开发工具,C语言的主要特点如下:
(1)语言简洁、紧凑,使用方便。
(2)运算符和数据类型丰富,具有现代语言的各种数据结构。
(3)具有结构化的语句,。
(4)语法限制不太严格,程序设计自由度大。
(5)生成的目标代码质量高,程序执行效率高。
(6)用C语言编写的程序可移植性比较好,基本上不做任何修改就能运用于各种型号的操作系统中。
(7) C语言允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作,因为C 语言的各种优点,所以本系统使用C语言作为开发环境,简化了编写过程,简化了系统界面。
(8)C语言是一种计算机程序设计语言。
它既具有高级语言的特点,
又具有汇编语言的特点。
它由美国贝尔研究所的D.M.RitChie于1972年推出。
1978后,C语言已先后被移植到大、中、小及微型机上。
它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。
具体应用比如单片机以及嵌入式系统开发。
指针是C语言的一大特色,可以说是C语言优于其它高级语言的一个重要原因。
就是因为它有指针,可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。
C++在这方面做了改进,在保留了指针操作的同时又增强了安全性,受到了一些用户的支持,但是,由于这些改进增加语言的复杂度,也为另一部分所诟病。
Java则吸取了C++的教训,取消了指针操作,也取消了C++改进中一些备受争议的地方,在安全性和适合性方面均取得良好的效果,但其本身解释在虚拟机中运行,运行效率低于C++C。
一般而言,C,C++,java被视为同一系的语言,它们长期占据着程序使用榜的前三名。
2.2.2运行环境
Visual C++ 6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。
Visual C++是一个功能强大的可视化软件开发工具。
自1993年MiCrosoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了Visual C++.NET(Visual C++7.0),但它的应用的很大的局限性,只适用于Windows 2000、Windows XP和Windows NT4.0。
所以实际中,更多的是以Visual C++6.0为平台。
VC6.0由以下三部分组成:
1、Developer Studio,这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,Developer Studio为Visual C++提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能。
我们也知道,Developer Studio并不是专门用于VC的,它也同样用于VB,VJ,VID等Visual Studio家族的其他同胞兄弟。
所以不能把Developer Studio当成Visual C++,它充其量只是Visual C++的一个壳子而已。
2、MFC。
从理论上来讲,MFC也不是专用于Visual C++,Borland C++,C++Builder和SymanteC C++同样可以处理MFC。
同时,用Visual C++编写代码也并不意味着一定要用MFC,只要愿意,用Visual C++来编写SDK程序,或者使用STL,ATL,一样没有限制。
不过,Visual C++本来就是为MFC打造的,Visual C++中的许多特征和语言扩展也是为MFC而设计的,所以用Visual C++而不用MFC就等于抛弃了Visual C++中很大的一部分功能。
但是,Visual C++也不等于MFC。
3、Platform SDK。
这才是Visual C++和整个Visual Studio的精华和灵魂,虽然我们很少能直接接触到它。
大致说来,Platform SDK是以MiCrosoft CC++编译器为核心(不是Visual C++,看清楚了),配合MASM,辅以其他一些工具和文档资料。
上面说到Developer Studio没有编译程序的功能,那么这项工作是由谁来完成的呢?是CL,是NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成Visual Studio的基石。
2.3 系统流程图
设计时应该先设计出主题框架,采用自顶而下、由粗到细的设计方法,主题框架设计完成之后,我们可以再其基础上进行扩充和进一步的改进,从而满足基本的设计
要求,这样的设计可以避免模块的相互冲突。
图 1 结构框图
图书数据:序号、书名、作者、出版社、存数、总数。
管理系统的总体设计与详细设计
3.1总体设计
总体设计目标:使用者可以利用本系统进行对图书馆借阅的各项运算操作,如根据用户的需求自动的进行添加图书,删除图书,借书还书。
查找所要的图书,查阅图书的详细资料,查阅读者的详细资料。
最后清晰完整的结果于屏幕中。
大大方便使用者对图书借阅的操作,不仅节省时间,而且提高准确性,可以达到事半功倍的效果。
总体设计策略:本系统采用的是自顶向下、层次化的模块结构。
对高层模块,采用以事务为中心的设计策略,把一个大的模块逐步分解成较小的相对简单的模块。
对低层模块,采用以变换为中心的设计策略。
为了提高每个模块的内聚性、降低模块间的耦合性,将每个模块设计成具有单一功能的模块(即功能内聚),使模块间的联系完全是通过主模块的控制和调用来实现(即非直接耦合)。
3.2详细设计
主函数
主函数要求设计比较简洁,只提供设输入,处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
流程图如下图2:
图2 主函数流程图
程序:
void main(void)
{
menu: page_title("操作选单");
printf("请用数字键选择操作\n\n");
printf("\t\t\t1 注册新书\t\t\t2 借阅图书\n");
printf("\t\t\t3 查询图书信息\t\t\t4 修改图书信息\n");
printf("\t\t\t5 归还图书\t\t\t6 删除图书\n");
printf("\t\t\t7 显示图书\t\t\t8 退出系统\n");
printf("请按数字键:\n");
switch(getch())
{ case '1' : book_add(); break;
case '2' : book_out(); break;
case '3' : book_search(); break;
case '4' : book_change(); break;
case '5' : book_in(); break;
case '6' : book_del(); break;
case '7' : book_show(); break;
case '8' : exit(0);
} goto menu;
}
输入模块
分析:该模块的功能是假如用户需要新加入新的图书信息,通过键盘输入将新信息逐条加在原来输入文件上但不能覆盖原有信息。
流程图如下图3:
图 3 输入模块流程图
程序:
void book_add(void)
{ int n;
system("cls");
page_title("注册新书");
for(n=0;n<100;n++)
if(books[n].id==0) break;
printf("序号:");
scanf("%d",&books[n].id);
printf("书名:");
scanf("%s",&books[n].name);
printf("作者:");
scanf("%s",&books[n].author);
printf("出版社:");
scanf("%s",&books[n].publish);
printf("数量:");
scanf("%d",&books[n].total);
books[n].store=books[n].total;
return_confirm(); }
删除模块
分析:该模块用于显示所有图书信息,由于记录较多,故而采取分屏显示。
显示完所有纪录后,用户需输入图书编号进而查找图书信息。
流程图如下图4:
图 4 删除模块流程图
程序:
int book_del(void)
{
int n,num,i;
system("cls");
page_title("删除图书");
printf("请输入所要删除的书的编号:");
scanf("%d",&num);
for(n=0;n<100;n++)
{
if(books[n].id==num)
for(i=n;i<100;i++)
{ books[i].id=books[i+1].id;
strcpy(books[i].name,books[i+1].name);
strcpy(books[i].publish,books[i+1].publish);
printf("该书已删除.\n");
return n;
}
}
printf("没有找到相关记录\n");
return -1;
}
查询模块
分析:改模块功能应体现为用户输入图书书名,若有书则查询出来。
流程图如下图5:
程序:
int book_search(void)
{ int n,i=1;
char nam[30];
system("cls");
printf("请输入书名:");
scanf("%s",&nam);
for(n=0;n<100;n++)
{ if((strcmp(books[n].name,nam)==0))
{ printf("序号:%d\t",books[n].id);
printf("书名:%s\t",books[n].name);
printf("作者:%s\t",books[n].author);
printf("出版社:%s\t",books[n].publish);
printf("存数:%d\t",books[n].store);
printf("总数:%d\n",books[n].total);i=0;
} }
if(i==1)
printf("\n没有找到相关记录.\n");
return -1; }
修改模块
分析:该模块功能应体现为用户修改图书信息,若有记录则修改信息。
流程图如下图6:
图6 修改模块流程图
程序:
int book_change(void)
{
int n,i;
system("cls");
page_title("修改图书信息");
printf("请输入要修改的图书编号:");
scanf("%d",&i);
for(n=0;n<100;n++)
{ if(books[n].id==i)
{ printf("修改书名:");
scanf("%s",books[n].name);
printf("修改作者:");
scanf("%s",books[n].author);
printf("修改出版社名:");
scanf("%s",books[n].publish);
printf("修改总数:");
scanf("%d",&books[n].total);
printf("修改图书信息成功.\n");
books[n].store=books[n].total;
return n;} }
printf("\n没有找到相关记录.\n");
return -1;
}
显示模块
分析:该模块功能应体现为显示全部的图书信息。
流程图如下图7:
程序:
int book_show(void)
{int n,i=1;
system("cls");
for(n=0;n<100;n++)
{
if(strlen(books[n].name)!=0)
{
printf("序号:%d\t",books[n].id);
printf("书名:%s\t",books[n].name);
printf("作者:%s\t",books[n].author);
printf("出版社:%s\t",books[n].publish);
printf("存数:%d\t",books[n].store);
printf("总数:%d\n",books[n].total);
i=0;
}
}if(i==1)
printf("\n没有找到相关记录.\n");
return -1;
}
借出模块
分析:该模块功能应体现为用户输入图书序号,若有书则要求输入账号。
流程图如下图8:
图8 借书模块流程图
程序:
void book_out(void)
{int n,s,l,d;
system("cls");
page_title("借阅图书");
if((n=search_book())!=-1&&books[n].store>0)
{printf("请输入借书证序号:");
scanf("%d",&s);
printf("请输入可借天数:");
scanf("%d",&d);
for(l=0;l<10;l++)
{if(books[n].usr[l]==0)
{ books[n].usr[l]=s;
books[n].days[l]=d;
break; } }
books[n].store--; }
if(n!=-1&&books[n].store==0) printf("此书已经全部借出.\n"); return_confirm(); }
归还模块
分析:该模块功能应体现为方便用户归还图书
流程图如下图9:
图9 归还图书模块
程序:
void book_in(void)
{ int n,s,l;
page_title("归还图书");
if((n=search_book())!=-1&&books[n].store<books[n].total) {printf("借阅者图书证列表:\n");
for(l=0;l<10;l++)
if (books[n].usr[l]!=0)
printf("[%d]- %d天\n",books[n].usr[l],books[n].days[l]); printf("请输入借书证序号:");
scanf("%d",&s);
for(l=0;l<10;l++)
{if(books[n].usr[l]==s)
{ books[n].usr[l]=0;
books[n].days[l]=0;
break; }}
books[n].store++;}
if(n!=-1&&books[n].store==books[n].total)
printf("全部入藏.\n");
return_confirm();}
公共函数
定义结构体:
struct BOOK
{ int id,usr[10],total,store,days[10],zt;
char name[31],author[21];
}books[100];
void page_title(char *menu_item)
{ printf("\t\t\t************欢迎使用图书馆管理系统**********\n\n- %s -\n\n",menu_item);}
void return_confirm(void)
{ printf("\n按任意键返回……\n");
getch();
}
4调试与测试
系统测试的目的是为了发现错误而执行程序的过程,成功的测试时发现了至今尚未发现的错误的测试。
测试的目的就是希望能以最少的人力和事件发现潜在的各种错误和缺陷,我们应该根据开发个阶段的需求、设计等文档或程序的内部结构精心设计测试实例,并利用这些实例来运行程序,以便发现错误的过程。
系统测试的原则应该遵循以下基本规则。
(1)应该尽早并且不断地进行测试。
测试不是在系统开发完之后才进行的,由于原始问题的复杂性、开发阶段的多样性以及参加人员的细条等因素,在开发过程中的各个阶段都有可能出现错误,因此,测试应该贯穿在开发的各个阶段,我们应该尽早纠正作物,消除隐患。
(2)测试工作应该避免由原开发软件的人来进行,一方面,开发人员往往不愿否认自己的工作,总认为自己开发的软件过程序没有错误,另一方面,开发人员往往很难发现自己的错误,具有局限性,所以我们应该找其他人来帮忙检查程序。
这样会变得更客观,更有效。
(3)设计测试方案时,不仅要确定输入数据,而且要根据系统功能来确定预期的输出效果和结果。
将实际输出结果和预期结果相比较就能发现测试的对象是否正确,是否有一些隐患。
(4)在设计测试用例时,不仅要设计有效合理的输入条件,还要包含不合理、失效的输入条件。
测试的时候,人们往往习惯按照合理的、正常的情况下进行测试,从而忽略了对异常、不合理、意想不到的情况进行测试,而这些情况可能都是隐患,可能会造成系统的崩溃。
(5)在测试程序时,不仅要检验程序是否做了该做的事情,还要检验程序是否做了不该做的事情。
多余的工作会带来副作用,影响程序的效率,有事会带来潜在的危害或者错误。
(6)严格按照测试计划来进行,避免测试的随意性。
测试计划应该包括测试内容、进度安排、测试环境、测试工具和测试资料等。
严格按照测试计划可以保证进度,使各方面都得以协调进行。
(7)妥善保存测试计划、测试用例,作为软件文档的组成部分,为了以后维护的方便做了铺垫。
(8)测试用例都是精心设计出来的,可以为重新测试或者追加测试提供方便。
当纠正错误、系统功能扩充后,都需要重新进行测试,而这些工作重复性很高,可以利用以前的测试用例,或者在其基础上进行修改,然后在进行测试,这样科技简化系统的维护时间并且提高了维护的效率。
在系统调试过程中,我们可以利用一组简单的数据对程序进行调试,来观察各函数是否有出错现象。
然后用复杂数据对程序进行调试。
然后我们要对系统的各项能力进行测试,看看有没有漏洞或者死循环现象。
数据测试时,如果程序程序错误,要首先找到出错的函数,对函数中各个变量进行观察,有时变量很多,循环多重不要急,对各个数据的观察,对程序的调试有很大的帮助。
你也可以先对几个变量熟悉后,在多重循环里,确定正确的数据,将其跳过调试,对有疑问的数据循环进行仔细观察。
虽然这是比较省力气的活,但对复杂的数据错误并不是很有效,所以仔细观察每个数据的变化对调试的成功与否有决定性作用。
测试时,根本的错误并不一定在运行错误的函数内,或许在前面的函数内已经奠定了这些错误数据的基础,需要反过头来,对所有的的函数进行一项项的调试!从程序运行的第一个函数开始调试。
按照程序运行的步骤下去。
一个个的确定函数的正确性,每确定一个函数,在以后的调试中可以减少对该函数的调试次数,或者直接跳到下一个函数。
所谓的各个击破便是如此。
对头文件中的各个函数的返回值和它所要传入的参变量及其功能更是需要注意。
调试时,需要对错误缩小范围,从整个程序到指定函数,再到指定区域,再到指定行,在对程序缩小范围或对编译没通过的程序缩小错误范围时可以用"* *"来进行调试,确定正常范围,缩小错误范围。