通讯录管理系统 学生姓名: 朱文飞 2008082355 张国建 2008082351 张健 2008082379 班 级:信管08 2010年12月23日 目 录 一、设计需求
··············3 二、总体设计
··············3 三、部分模块设计分析············4 四、程序源代码···············10 五、运行结果及截图·············18 六、心得体会················23 七、参考文献················23 1、 设计需求说明 1、设计题目及要求: ◆ 建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等; ◆ 能够提供添加、删除和修改通讯录信息的功能; ◆ 能够提供安不同方式查询的功能;如按姓名或年龄、电话等查询; ◆ 将通讯录保存在文件中; ◆ 能够按
格方式输出通讯录信息。 2、系统功能需求分析: 主要包含一下多种功能: 添加:添加通讯录记录 显示:显示通讯录记录 删除:删除通讯录记录 查询:查询通讯录记录 修改:修改通讯录记录 保存:将信息保存到文件 2、 总体设计分析 系统功能模块图: 添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。 显示:可以以表格形式输出所有通讯录里的记录 删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容 查询:可以选择用姓名、电话、地址三种方式查询 修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改 保存:,输入文件名(带后缀名)后,即可将通讯录信息保存到文件 3、 部分模块设计分析 (1).通讯录: typedef struct { char score; /*编号*/ char name[10]; /*姓名*/ char num[15]; /*号码*/ char email[20]; /*邮箱*/ char age[8]; /*年龄*/ char adds[20]; /*住址*/ }Person; void main() /*主函数*/ { int n=0; for(;;) { switch(menu_select()) { case 1: printf("\n\t添加记录到通讯录\n"); /*添加记录*/ n=Input(pe,n); break; case 2: printf("\n\t\t\t 通讯录记录表\n"); /*显示记录*/ Display(pe,n); break; case 3: printf("\n\t从通讯录中删除记录\n"); n=Delete_a_record(pe,n); /*删除记录*/ printf("\t"); system("pause"); break; case 4: printf("\n\t在通讯录中查找记录\n"); Query_a_record(pe,n); /*查找记录*/ printf("\t"); system("pause"); break; case 5: printf("\n\t修改通讯录中的记录\n"); Change(pe,n); /*修改数据*/ printf("\t"); system("pause"); break; case 6: printf("\n\t保存功能\n"); WritetoText(pe,n); /*保存数据*/ printf("\t"); system("pause"); break; case 0: printf("\n\t\t谢谢使用,再见!\n"); /*结束程序*/ printf("\n\t\t"); system("pause"); exit(0); } } } (2).工作
图: ①添加:添加通讯录记录 ②显示:显示通讯录记录 ③删除:删除通讯录记录 ④查询:查询通讯录记录 先选择查询方式,以姓名查询方式为例 ⑤修改:修改通讯录记录 4、 源程序代码 #include
#include #include typedef struct { char score; /*编号*/ char name[10]; /*姓名*/ char num[15]; /*号码*/ char email[20]; /*邮箱*/ char age[8]; /*年龄*/ char adds[20]; /*住址*/ }Person; Person pe[80]; int menu_select() { char c; do{ system("cls"); printf("\t\t *****通讯录***** \n"); printf("\t\t┌───────┐\n"); printf("\t\t│ 1. 添加记录 │\n"); printf("\t\t│ 2. 显示记录 │\n"); printf("\t\t│ 3. 删除记录 │\n"); printf("\t\t│ 4. 查询记录 │\n"); printf("\t\t│ 5. 修改记录 │\n"); printf("\t\t│ 6. 保存记录 │\n"); printf("\t\t│ 0. 退出程序 │\n"); printf("\t\t└───────┘\n"); printf("\t\t请您选择(0-6):"); c=getchar(); }while(c<'0'||c>'6'); return(c-'0'); } int Input(Person per[],int n) { int i=0; char sign,x[10]; while(sign!='n'&&sign!='N') { printf("\t编号:"); scanf("\t%d",&per[n+i].score); printf("\t姓名:"); scanf("\t%s",per[n+i].name); printf("\t年龄:"); scanf("\t%s",per[n+i].age); printf("\t电话号码:"); scanf("\t%s",per[n+i].num); printf("\t通讯住址:"); scanf("\t%s",per[n+i].adds); printf("\t电子邮箱:"); scanf("\t%s",per[n+i].email); gets(x); printf("\n\t是否继续添加?(Y/N)"); scanf("\t%c",&sign); i++; } return(n+i); } void Display(Person per[],int n) { int i; printf("----------------------------------------------------------------------\n"); /*格式*/ printf("编号 姓名 年龄 电话号码 通讯地址 电子邮箱\n"); printf("----------------------------------------------------------------------\n"); for(i=1;i1&&i%10==0) { printf("\t-----------------------------------\n"); printf("\t"); system("pause"); printf("\t-----------------------------------\n"); } } printf("----------------------------------------------------------------------\n"); system("pause"); } int Delete_a_record(Person per[],int n) { char s[20]; int i=0,j; printf("\t请输入想删除记录中的名字:"); scanf("%s",s); while(strcmp(per[i].name,s)!=0&&i书写风格及其注释的格式。 当我选择通讯录这个题目时,一开始想运用大量链表及指针来完成,但是在慢慢琢磨之后,觉得这个不一定要用链表,于是改变了编程思路。当然还有不少文件的读写问题,不过还是通过不断测试之后顺利解决了。另外一点要说的就是这个程序用了很多的循环,因此对于循环的控制要十分小心,有时while和do-while的区别也是十分重要的。 7、 参考文献 中国铁道出版社出版的《C程序设计实验教程》《C程序设计教程》等