二〇〇八~ 二〇〇九学年第二学期信息科学与工程学院课程设计报告书课程名称: C语言课程设计班级:学号:姓名:指导老师:月九年二〇〇九通讯录管理系统一.需求分析设计题目及要求:◆建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等;◆能够提供添加、删除和修改通讯录信息的功能;◆能够提供安不同方式查询的功能;如按姓名或年龄、电话等查询;◆将通讯录保存在文件中;◆能够按表格方式输出通讯录信息。
系统功能需求分析:主要包含一下多种功能:添加:添加通讯录记录显示:显示通讯录记录删除:删除通讯录记录查询:查询通讯录记录修改:修改通讯录记录保存:将信息保存到文件二.概要设计系统功能模块图:添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。
.显示:可以以表格形式输出所有通讯录里的记录删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容查询:可以选择用姓名、电话、地址三种方式查询修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改保存:,输入文件名(带后缀名)后,即可将通讯录信息保存到文件三.详细设计(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(\ \t\n);n=Input(pe,n);break;case 2:通讯录记录表printf(\\t\t\t \n); */ 显示记录/*Display(pe,n);break;case 3:\n); 从通讯录中删除记录printf(\\tn=Delete_a_record(pe,n); /*删除记录*/printf(\);system(pause);break;case 4:在通讯录中查找记录\n); printf(\\t /*查找记录*/ Query_a_record(pe,n);printf(\);system(pause);break;case 5:\n); printf(\\t 修改通讯录中的记录/*修改数据*/ Change(pe,n); printf(\);system(pause);break;case 6:printf(\\t保存功能\n);/* 保存数据*/ WritetoText(pe,n);printf(\);system(pause);break;case 0:*/ !\n); printf(\\t\t 谢谢使用,再见结束程序/*printf(\\t\t);system(pause);exit(0);}}}(2).工作流程图:①添加:添加通讯录记录.②显示:显示通讯录记录③删除:删除通讯录记录④查询:查询通讯录记录先选择查询方式,以姓名查询方式为例⑤修改:修改通讯录记录四.源程序代码#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct{char score; /*编号*/ char name[10]; /*姓名*/ char num[15]; /*号码*/ char email[20]; /*邮箱*/char age[8]; /*年龄*/char adds[20]; /*住址*/Person pe[80];int menu_select(){char c;do{system(cls);printf(\\t *****通讯录***** \n); printf(\\t┌───────┐\n); printf(\\t│1. 添加记录│\n); printf(\\t│2. 显示记录│\n); printf(\\t│3. 删除记录│\n); printf(\\t│4. 查询记录│\n); printf(\\t│5. 修改记录│\n); printf(\\t│6. 保存记录│\n); printf(\\t│0. 退出程序│\n); printf(\\t└───────┘\n); printf(\\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(\编号:);scanf(\%d,&per[n+i].score); printf(\姓名:);scanf(\%s,per[n+i].name);printf(\年龄:);scanf(\%s,per[n+i].age);printf(\电话号码:);scanf(\%s,per[n+i].num);printf(\通讯住址:);scanf(\%s,per[n+i].adds);printf(\电子邮箱:);scanf(\%s,per[n+i].email);gets(x);\t是否继续添加?(Y/N));scanf(\%c,&sign);i++;}return(n+i);}void Display(Person per[],int n){int i;printf(----------------------------------------------------------------------\n);/*格式*/牰湩晴尨编号姓名年龄电话号码通讯地址电子邮箱\n);printf(----------------------------------------------------------------------\n);for(i=1;i<n+1;i++){printf(%-5d%-8s%-6s%-13s%-15s%-15s\n,per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds,per[i-1].email);if(i>1&&i_x0010_==0){printf(\-----------------------------------\n);printf(\);system(pause);printf(\-----------------------------------\n);}}printf(----------------------------------------------------------------------\n);system(pause);}int Delete_a_record(Person per[],int n){char s[20];int i=0,j;printf(\请输入想删除记录中的名字:);scanf(%s,s);while(strcmp(per[i].name,s)!=0&&i<n) i++;if(i==n){printf(\通讯录中没有此人!\n);return(n);}for(j=i;j<n-1;j++){strcpy(per[j].num,per[j+1].num);strcpy(per[j].name,per[j+1].name);strcpy(per[j].age,per[j+1].age);strcpy(per[j].adds,per[j+1].adds);strcpy(per[j].email,per[j+1].email);per[j].score=per[j+1].score;}printf(\\t\t已经成功删除!\n);return(n-1);}void Query_a_record(Person per[],int n){int m;printf(\\n请选择查询方式:\n);printf(\┌──────┐\n);printf(\│1------姓名│\n);printf(\│2------电话│\n);printf(\│3------地址│\n);printf(\│4------返回│\n);printf(\└──────┘\n);牰湩晴尨请选择:);scanf(%d,&m);while(m!=1&&m!=2&&m!=3&&m!=4){牰湩晴尨输入错误,请重新选择:); scanf(%d,&m);}if(m==1){char s[20];int i=0;printf(\请输入想查询的姓名:);scanf(\%s,s);while(strcmp(per[i].name,s)!=0&&i<n) i++; if(i==n){printf(\通讯录中没有此人!\n);return;}: %d\n,per[i].score); 此人编号printf(\printf(\此人年龄: %s\n,per[i].age);printf(\电话号码: %s\n,per[i].num);printf(\通讯地址: %s\n,per[i].adds);printf(\电子邮箱: %s\n,per[i].email);} ;if(m==2){char s[20];int i=0;printf(\请输入想查询的电话:);scanf(\%s,s);while(strcmp(per[i].num,s)!=0&&i<n) i++;if(i==n){printf(\通讯录中没有此人!\n);return;}printf(\此人编号: %d\n,per[i].score);printf(\此人姓名: %s\n,per[i].name);printf(\此人年龄: %s\n,per[i].age);printf(\通讯地址: %s\n,per[i].adds);printf(\电子邮箱: %s\n,per[i].email);} ;if(m==3){char s[20];int i=0;printf(\请输入想查询的地址:);scanf(\%s,s);while(strcmp(per[i].adds,s)!=0&&i<n) i++;if(i==n){printf(\通讯录中没有此人!\n);return;}printf(\此人编号: %d\n,per[i].score);printf(\此人姓名: %s\n,per[i].name);printf(\此人年龄: %s\n,per[i].age);printf(\电话号码: %s\n,per[i].num);printf(\电子邮箱: %s\n,per[i].email);} ;}void Change(Person per[],int n){char s[20];int i=0;printf(\请输入想修改的记录中的名字:);scanf(%s,s);while(strcmp(per[i].name,s)!=0&&i<n) i++;if(i==n){printf(\通讯录中没有此人!\n);return;}printf(\编号:);scanf(\%d,&per[i].score);printf(\姓名:);scanf(\%s,per[i].name);printf(\年龄:);scanf(\%s,per[i].age);printf(\电话号码:);scanf(\%s,per[i].num);printf(\通讯住址:);scanf(\%s,per[i].adds);printf(\电子邮箱:);scanf(\%s,per[i].email);printf(\修改成功!);}void WritetoText(Person per[],int n){int i=0;定义文件指针*/ /* FILE *fp;/*定义文件名*/ char filename[20];输入文件名/**/ \n); printf(\保存到文件printf(\请输入所保存的文件名:);scanf(\%s,filename);if((fp=fopen(filename,w))==NULL){无法打开文件printf(\\n);system(pause);return;}fprintf(fp,******************************************通讯录******************************************\n);灦楲瑮?灦尬编号姓名年龄电话号码通讯地址电子邮箱\n);fprintf(fp,------------------------------------------------------------------------------------------\n);while(i<n){fprintf(fp,%-3d\t%-6s\t%-3s\t%-13s\t%-20s\t%-20s\n,per[i].score,per[i].name,per[i].age,per[i].num,per [i].adds,per[i].email);i++;}fprintf(fp,------------------------------------------------------------------------------------------\n);fprintf(fp,***************************************共有%d条记录****************************************\n,n);fclose(fp); /*关闭文件*/牰湩晴尨保存成功!\n);}void main() /*主函数*/{int n=0;for(;;){switch(menu_select()){case 1:printf(\\t添加记录到通讯录\n); /*添加记录*/n=Input(pe,n);break;case 2:\t\t\t 通讯录记录表\n); /*显示记录*/ Display(pe,n);break;case 3:printf(\\t从通讯录中删除记录\n);n=Delete_a_record(pe,n); /*删除记录*/printf(\);system(pause);break;case 4:printf(\\t在通讯录中查找记录\n);Query_a_record(pe,n); /*查找记录*/printf(\);system(pause);break;case 5:printf(\\t修改通讯录中的记录\n);/*修改数据*/ Change(pe,n);printf(\);system(pause);break;case 6:\n); printf(\\t保存功能/*保存数据WritetoText(pe,n); */printf(\);system(pause);break;case 0:*/ 结束程序/* 谢谢使用,再见printf(\ \t\t!\n);printf(\\t\t);system(pause);exit(0);}}五.测试数据及其结果分析测试:1.显示的主菜单界面)2).添加界面:3).显示界面:4).删除界面:删除后,通讯录里的显示记录:5).查询界面:以姓名查询方式为例:6).修改界面:修改后,通讯录里的显示记录:7).保存界面:tongxunlu.txt文件截图:问题思考:1.当我在进行删除、查询、修改、保存等功能时,以查询为例,输入名字按回车后,虽然会显示该人的所有记录,但是显示后,它马上自动消失了,还没来得及等我看内容。