您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 南航C语言课程设计通讯录管理系统链表实现
2013.5C语言课程设计报告专业:电气工程及自动化班级:0312207姓名:惠琦学号:031220732指导教师:黄元元时间:2013年5月031220732HQC语言课程设计报告目录1、摘要..........................................................................................................12、题目描述与解决方案....................................................................12-1.题目描述.............................................................................................12-2.问题分析与解决..............................................................................13、程序设计...............................................................................................23-1.程序流程设计...................................................................................23-2.课设要求部分设计.........................................................................2*3-3.创新点与细节.................................................................................33-4.已知的不足........................................................................................44、设计感想与心得...............................................................................54-1.对课设的感想...................................................................................54-2.对C语言的想法.............................................................................75、流程图与函数调用关系...............................................................86、源程序及各函数的详细说明....................................................96-1.数据结构与函数说明....................................................................9*6-2.程序清单.........................................................................................127、测试流程与典型数据..................................................................317-1.编译/测试环境与测试数据......................................................317-2.测试流程与测试结果..................................................................318、参考文献.............................................................................................320031220732HQC语言课程设计报告1、摘要报告将详细描述“电话簿管理系统”的C语言实现方案,程序代码将以C语言形式给出。报告将包括程序总体设计的介绍以及各子函数功能的说明,同时也包括在做课程设计过程中的心得体会,最终将给出典型数据与测试流程。2、题目描述与解决方案2-1.题目描述课设题目要求实现一个”电话簿系统”的基本管理功能,包括录入、删除、查找、导入导出等,要求以VisualC++为开发环境,以C语言为编程语言,设计相关菜单并实现中英文数据的处理。2-2.题目分析与解决程序实现的功能较多,因此采用自顶向下逐步精化的设计方法,在程序大框架设计完成的情况下,每项功能编写子函数实现。数据结构采用链表,算法采用头结点非空的链表的基本算法。问题解决后将处理细节问题,如输入输出问题,界面美化问题等。具体实现参考报告第3与第6部分。1031220732HQC语言课程设计报告3、程序设计本部分提及的流程或功能的具体实现参考报告第6部分。3-1.程序流程设计STEP1、运行主程序,打印菜单并获取用户操作命令,跳至STEP2STEP2、按用户的命令调用相应子程序,若命令为退出则执行STEP3,否则调用完子程序后跳回STEP1STEP3、释放占用内存,打印退出程序信息并退出程序具体实现参考报告第3与第6部分。3-2.课设要求部分设计1、设计了以下函数实现课设基本实现要求(参数略,下同):Create(),Quit(),Display(),Insert_a_record(),Delete_a_record(),Query_a_record(),AddfromText(),WritetoText(),Display_Main_Menu()(这些函数用于具体子功能的初步实现);Query(),Insert(),Delete()(这些函数涉及链表的具体操作,为具体子功能的实现服务);getfilename(),Pause()(这些函数用于提高程序可读性)。2、设计了以下函数实现课设附加实现要求:Reverse(),DeleteSame()。2031220732HQC语言课程设计报告*3-3.创新点与细节在充分实现课设要求后,设计了一些附加功能并附带设计了对应的二级菜单。同时,着重对输入输出操作、数据读入操作过程中的一些细节进行了处理。I、细节处理:(针对课设要求本身的改进)1、对每次读入操作做了细致的处理,包括获取多余的换行符、及时清空标准输入流内的内容等,有效避免了用户误输入过多指令造成的意想不到的错误。特别设计了_TCStructInitial()函数对结构体初始化,用于解决某些编译器带来的运行乱码问题。2、较为严格地对读入的通讯录数据进行检验,存储电话簿信息的结构体类型中增添了wrong成员记录该条信息是否可能有误。对于关键字段为空的错误数据自动容错处理或者提示用户手工处理。特别设计了_Error_Detecter()函数检查可能的错误。有效避免了用户误输入与误操作对程序正常运行带来的影响。3、处理了其他细节,降低误操作的可能性。如创建链表时判断链表是否为空并给出提示,防止用户误操作(即将插入记录与创建电话簿两种功能严格区分,这能有效避免未释放空间的产生)。又如,对于删除同名记录还判断是否同名但信息不同的情况,允许用户自行决定是否删除。优化了用户界面的友好程度。4、编程时尽量采用效率最高的链表算法。提交的源程序中(非报告中的程序)部分函数代码后增添了多种效果等同的代码(注释掉了),报告中最终保留的所有涉及链表操作的算法大多已实现遍历一次即可达成目的(时间复杂度O(n))。3031220732HQC语言课程设计报告II、附加功能(创新点):1、设计了查错、备份、恢复备份的功能,程序运行时默认主动检查错误并自动备份,用户可选择手动关闭查错功能。如果程序遭遇异常终止,用户的数据将存储在一个备份文件中,且用户可以在下次运行时从备份文件恢复记录。设计了_Backup()函数实现备份。2、对于错误的数据,设计了相应的修改程序,主动提示可能需要修改的成员与当前内容,并允许用户对某一字段进行修改(而不需要重新输入整条记录)。设计了_Modify()函数实现上述功能。3、设计了二级菜单用于实现上述功能的调用,同时设计了一些琐碎的小功能,如改变软件背景与文字颜色的功能和“关于”程序和彩蛋小游戏。设计了ExtraFunction()实现上述功能(恢复数据功能也在该函数内完成)。3-4.已知的不足1、代码冗长,维护起来不如最精简版本容易。(可削减所有附加功能以解决)2、输入输出细节处理过多,影响程序可读性。(可适当减少处理)3、某些代码效率不高,如查错功能在数据规模极大时会极大拖累运行效率。4、采用了批处理命令,只适合WINDOWS平台、DOS平台,可移植性一般。5、采用了在C++中被认为是不安全的标准库函数,如scanf等。图1-二级菜单效果图4031220732HQC语言课程设计报告4、设计感想与心得4-1.对课设的感想#define我笔者因为有Pascal语言的学习经验,我在寒假中简单自学了C语言。开学后由于要准备省二级考试,我将三组课设题目作为极好的上机习题,其雏形很早就已完成。然而课设并不是平时上机作业实现各类链表操作那样简单的事情,在经过系统的学习之后,我对C语言有了更深入的了解,重读数月前编写的程序,发现了许多细节上的不足。虽然实现链表的基本操作并算不是困难的事情,但实现一个稍具规模的项目已经需要编程者编程前进行十分详细的规划。我一开始打算偷懒,直接修改编好的程序,但由于课设实际要求与当时编写的代码有出入(甚至冲突),加上初学时编写的程序代码风格十分不好,修改和维护的时间成本变得非常高,最终我仍然选择重新编写。项目的骨干即链表的处理和菜单的设计并没有花去我太多时间,在初步完成后的调试过程中,我发现了许许多多细节问题需要处理,将这些细节一个一个处理完耗费了我大量时间,然而看到程序日臻完善我还是很欣慰的。考虑到各种可能的突发状况和用户的误操作,我决定设计一些课设没有要求的功能如查错和备份功能,实现这些功能并没有花去太多时间,并且在这一过程中我还完成了一些“用处不大”的小程序(改变界面颜色和彩蛋小游戏等)。编写课程程序过程中,我也与一些同学进行了交流与探讨。探讨过程中我明白了一点,设计程序算法相比编写实际程序要重要得多。事先设计良好的算法(或者规划出合理的流程)似乎需要耗去一些时间,但事实证明如果一有编程思路就开始敲键盘,即便C语言学得非常扎实,最终写出的程序往往比采用良好算法的程序要复杂得多而且容易出错不5031220732HQC语言课程设计报告容易修改,最终调试代码花去的时间会超过设计算法的时间,可谓得不偿失。比如课设的DeleteSame()函数,有的同学不假思索地用了两层循环遍历实现,时间复杂度达到O(n^2),核心代码需要20行,然而如果事先观察链表内容特征,链表已经按姓名排好了,其实只要遍历一次就可以检测并删除所有重名结点,时间复杂度仅O(n),不考虑过多细节的话核心代码只要7行。再比如Reverse()函数,实现链表转置,其实不算难题,有的同学想当然地开了一条新链来存储转置后的程序,核心代码30行以上,空间、时间复杂度陡增,且编程不易,但如果事先画个图,就会发现,单向链表的转置也只要一次遍历就可完成,且核心代码只要6行。整个项目的实现,从设计到编程到完成报告,花了我数晚时间。课设使我积累了更多的上机编程经验,也使我对C有了更深的认识,我明
本文标题:南航C语言课程设计通讯录管理系统链表实现
链接地址:https://www.777doc.com/doc-1062545 .html