C语言设计报告(电子通讯录)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
辽宁工程技术大学
高级语言程序设计(C)课程设计报告书
设计题目:电子通讯录
2013年01月
目录
一、引言……………………………………
二、系统功能和原始数据………………………………………
三、程序总体设计………………………………………………
四、功能模块函数设计和调试………………………………
五、程序清单……………………………………………………
六、课程设计总结……………………………………………
一、引言
通过使用C语言编程实现通讯录管理系统的基本功能,并设计了简单的界面。该程序主要使用的是数组的相关操作,包括结构体数组的输入、输出、查找、删除等。用到的知识点是结构体类型定义结构提数组的的定义及应用。另外还用到了大量的自定义函数。本人设计的这个通讯录系统也初步实现了人员信息的显示、删除、查找、添加等必要的功能。
二、系统功能和原始数据
2.1 原始数据
录入内容包括ID号,姓名,性别,出生日期,固定电话号码,移动电话号码,QQ号码,电子邮箱,通讯地址和邮编等。其中出生日期又包括年份,月份和日期三项。
2.2 系统功能
●查找功能:能够提供检索除功能,他可以随心所欲的查找通讯录中任意一位
朋友的详细信息。通讯录结构中的许多项,都可以作为查找的线索,例如出生日期,邮编和姓名。
●自动排序功能:它能提供按姓名等排序的功能
●纪录和读盘功能:在用户结束程序时,如果做了改动操作,程序会提示用户
是否存盘。
三、程序总体设计和调试
3.1 总体设计:包括系统总体设计框架和系统功能模块图;
按出生日期查询:输入出生日期显示对应朋友资料
按邮编查询:输入邮编显示对应的朋友资料
3.2 详细设计:
1、主函数:main()
显示系统工作菜单,罗列该系统所有功能。先声明所有将会调用到的函数名。再运用选择函数switch即可根据使用者所输入的功能代号进入对应的功能程序。亮点:定义一个全局指针变量
*p和全局变量a。其中a表示当前系统中职工人数,p指向a的地址,追踪人数变化,这样在添加或者删除导致人数变化后,浏览函数display()能够正确显示出当前人数的职工信息。宏定义define N指定首次输入的职工人数,可根据不同需要随时更改。
2、输入函数:void input()
定义一个结构struct employee和数组em[N]用来储存N个朋友的所有信息(ID号em[i].number,姓名em[i].name,性别em[i].sex,生日em[i].birthday,电话em[i].phone,手机em[i].mobile,QQem[i].qq,邮编em[i].zip)。通过for循环输入所有职工信息。用orintf语句提示需要输入的内容,接着用scanf 语句输入相应内容。输入完毕后套用保存函数save(N)将所有输入信息写入指定文件。
3、保存函数:void save(int m)
定义文件指针fp,用fopen"只写"打开指定在D盘的“d://bbb.txt”文本文件。首先用if语句判断文件是否打开成功,若fopen返回值不为0,则可继续下面操作。用for循环通过fprintf语句将结构数组em中的内容写入保存在D盘的文本文件里面。形参m指需要写入文件的职工人数。最后关闭文件。
4、导出函数:void load(int b)
首先判断fopen"只读"打开“d://bbb.txt
”是否成功,若其返回值不为零,
继续下面操作。用for循环通过fscanf语句将文件中的朋友资料取出放到em 结构数组里面。形参b指需要导出的朋友。最后关闭文件。
5、浏览函数
void display(int a)
声明整形变量i和b,其中i记录输出的朋友序数,b用来接收调用浏览函数时所传递过来的实参,接着将其值传递给导出函数load(b),使得导出的朋友人数与浏览的朋友人数保持一致。通过调用load函数后(即给em数组附值),用for循环输出每个朋友的各种信息。
6、查询函数void search()
声明整形变量t,先用printf语句显示查询菜单,用scanf输入选择的查询方式代号,用switch(t)进入所选择的具体查询函数,包括按出生日期查询、
按姓名查询、邮编查询三种方式。
7、,删除函数void del(int *b)
声明整形变量i,j,t,m,a和char形数组name[20]。其中给a附初始值a=*b,表示当前朋友人数。首先调用浏览函数display(a),显示所有朋友信息,便于使用者审阅需删除的对象。用printf语句提示“输入要删除的朋友名字”,接着用scanf语句输入删除对象名字。用for循环,循环主体是先判断中是否存在所输入的名字(调用字符串比较函数stecmp)。若存在,printf语句提示是否确认删除,用scanf语句输入确认指令,再用for循环从要删除的这个朋友开始,依次用后一个朋友的信息覆盖前一个的。循环结束后当前朋友人数a自减1,并保存,跳出大循环;若不存在,输出“输入错误,无此人”。再将a的新值附给*b,实参p所指的人数地址中的人数也随即改变删除后的人数。printf提示下一步操作“继续删除请按1\n浏览信息请按2\n返回主菜单请按3”。switch 根据键盘输入的指令代号选择下一步连接的函数。
3.3 调试与测试:
遇到最大的问题是所有程序代码编完放在一起后,虽然能够成功运行,但使用时如果朋友人数发生变化,会导致文件后部出现乱码。若要使每次运行都正常,必须在人数改变后退出程序,修改宏定义N的值。这样很不方便,不能够连续运行。为解决这一大问题,最后我想到了定义一个全局指针变量,用来追踪最新的人数。特别是删除和添加这两个会导致人数变化的函数中,全局指针变量p起了很大作用。经过一边修改一边调试,最终可以成功的用p串联整个函数,在连续运行时,总能根据最新的人数调用各个函数。另外在串联所有函数时,调试提示出错:有几个函数“redefinition; different basic types”解决:在函数名前加void指明类型。
整个程序代码是分块书写的,每个函数都可以独立运行。只有输入函数查询菜单函数写得很顺利,一次性就能够成功运行,其他函数在调试过程中或多或少都出现了问题。
(1)、数save()在调试和链接的时候都没有出现错误提示,但在运行的时候出现