#+
C语言程序设计
——通讯录管理系统
实
习
报
告
组长: 姚士平 组员: 胡恒山 芮青荣
南京邮电大学电气信息工程B100509班
※实习前论:
实习的目的、要求与内容
一、实习的目的和要求
经过了一个学期对C语言的学习,大家对C语言有了一定的认识。在此基础上,为了加深对C语言课程所学知识的理解,进一步巩固C语言算法规则,学会编制结构清晰、风格良好、数据结构适当的C程序,从而具备解决综合性问题的能力,特设此课程实习内容,通过完成一项具体的程序来检验对所学知识的掌握情况。要求能够完成一项完整并且具有初步实用性,经编写调试,确保能够正常运行的小型程序。
二、实习所涉及的内容
实习内容所涉及的均为C语言的基础知识,包括:数据类型(整型、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数定义与调用)等,以及进一步掌握各种函数的应用以及文件的读写操作等。
※实习细述:
通讯录管理系统
一、程序功能:
1、完成通讯录信息的管理,包括添加、修改、删除、查询功能。尽量丰富联系人的各项信息。
2、能够根据联系人的信息单独或分类查询。
3、联系人的生日提醒功能。
二、设计思路
所有成员的记录用结构体数组存储,每个结构体包括姓名、性别、生日、电话号码、电子邮箱、家庭住址及分类七个字符型数组;上述的各项功能由定义函数分别实现,由主函数控制各个函数的调用;整个程序产生于文本界面,通过一些字符简单对界面进行装饰。具体的各个函数设计思路如下:
1、导入通讯录函数:通过fopen函数打开指定文件,并用fread函数将文件内的数据读入结构体数组中,这两个标准库函数都定义在stdio.h头文件中。整个函数的返回值为整型i,用来并表示导入的数据成员个数,而后将该值赋给全局变量count用来计数。
2、保存文件函数:通过将文件名字符串作为参数传入,用fwrite函数将当前结构体数组中的全部数据写入文件中并关闭文件。该函数无返回值。
3、分类显示成员信息函数:无参数传入,无返回值,用户根据提示输入指令,用switch语句分析指令并遍历所有结构体数据,将符合的数据输出。该函数也没有返回值。
4、录入新成员信息函数:该函数没有参数,通过提示用户输入数据;当输入的姓名或电话号码重复时,提示用户重复并重新输入;被录入一个完整的新数据后让全局变量n自增,并将其作为函数的返回值返回。
5、查找记录函数:将用户要找的成员姓名作为参数传入,遍历所有结构体并找出符合的输出,若输出成功则可以继续查找,用户所输姓名不存在则输出用户名不存在。
6、删除记录函数:将用户要删除的成员姓名作为参数传入,遍历所有结构体并找出符合的删除,并将后面的所有数据向前移动一个位置,返回值同查找记录函数。
7、修改记录函数:将用户要修改的成员姓名作为参数传入,遍历所有结构体并找出符合的,依次提示修改项目,由用户输新数据并保存,返回值同查找记录函数。
8、拨号功能函数:无参数传入,显示已存入的所有成员的姓名,由用户选择拨打电话的姓名,依次显示电话号码的各个数字,并用Sleep函数设置一定时间的延时以表现号码依次输出的效果,该函数包含在windows.h头文件中。成功拨号则返回整数1,输入了错误的姓名则返回0。
9、主函数:用switch语句来判断用户输入的指令,转向具体的函数来执行,并根据函数的返回值判断执行结果并予以提示。主函数中用exit(0);语句结束程序,并在结束前提示用户保存数据。
整个程序由上述9个函数组成。此外,源程序将结构体数组和计数变量count以及文件指针fp设为全局变量,目的是为了让所有函数都能正常使用这几个变量,保证整个程序的正常运行。
三、程序源代码及注释
#include
#include
#include
#include
#define count 20
typedef struct Birthday
{
int day;
int month;
int year;
}Birthday;
typedef struct Student
{
char name[10];
char sex[5];
Birthday date;
char phone[10];
char email[10];
char address[10];
char others[10];
}stud;
FILE *fp;
FILE *fp2;
FILE *fp3;
int n=0;