当前位置:文档之家› 个人通讯录管理(c语言课程设计)

个人通讯录管理(c语言课程设计)

安徽工业大学《C语言课程设计》实习综合报告课题名称:个人通讯录管理系统实习成员:王刚学号: *********专业班级: 网络工程103班指导教师: 郑啸老师目录一.问题描述 (2)二. 各功能流程图与设计思路 (3)2.1显示模块 (3)2.2查找模块……………………………………………4..2.3添加模块 (6)2.4删除模块 (8)2.5修改模块 (9)三、文件的读取与保存 (11)四、程序源代码 (12)五、调试与运行结果 (18)六、计算机学院课程设计评定意见 (24)一.问题描述设计通讯录包含以下功能:(1)通讯录的每一条信息包括姓名、单位、固定电话、移动手机、分类(如同事、朋友、同学、家人等)、EMAIL、QQ 等。

(2)输入功能:可以一次完成若干条信息的输入。

(3)显示功能:完成全部通讯录信息的显示。

(4)查找功能:可以按姓名等多种方式查找通讯信息。

(5)增加、删除、修改功能:完成通讯录信息的多种更新。

二.各功能流程图与设计思路Menu菜单:运用switch()进行操作:case'1': 显示功能,list()函数说明:利用for循环,逐个输出已保存的内容代码如下://*****************显示通讯录中的内容*************void list(){ printf("编号姓名电话 \t手机 \t工作单位\tEMAIL \t\tQQ\n");for(i=0;i<m;i++){ if(rec[i].name[0]){ printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name, rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);}}printf("\t\t\t----------------END--------------\n");}case'2': 查找功能,search()函数说明:先用switch让操作者选择是按姓名查找还是按编号查找,然后再按操作者的输入,逐个判断是否有操作者要查的联系人信息,若有则输出此人信息,若没有则输出“通讯录中没有您要查找的联系人”代码如下://*****************查找联系人的信息********************void search(){ char xm[10];char ch;int d;printf("→1.按姓名查找\n");printf("→2.按编号查找\n");printf("请选择...\n");ch=getchar();getchar();switch(ch){case'1':printf("输入查找的姓名\n");gets(xm);for(i=0;i<m;i++){ if(strcmp(xm,rec[i].name)==0){ printf("\t\t\t☆☆☆☆☆这是您需要查找的联系人的信息☆☆☆☆☆\n\n");printf("编号姓名电话 \t手机 \t工作单位\tEMAIL \t\tQQ\n");printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name, rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);break;}}if(i==m)printf("\t\t\t☆☆☆☆☆通讯录中没有您要查找的联系人☆☆☆☆☆\n");break;case'2':printf("输入查找的编号\n");scanf("%d",&d);for(i=0;i<m;i++){if(d==rec[i].num){ printf("\t\t☆☆☆☆☆这是您需要查找的联系人的信息☆☆☆☆\n\n");printf("编号姓名电话 \t手机 \t工作单位\tEMAIL \t\tQQ\n");printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name, rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);break;}}if(i==m)printf("\t\t\t☆☆☆☆☆通讯录中没有您要查找的联系人☆☆☆☆☆\n");break;default:printf("输入错误!!");}getchar();}case'3': 增加功能,app()函数说明:按照屏幕的提示,依次输入要添加联系人的各项信息,并保存到结构体当中,输入完成后,提示是否继续添加,若是,则进入循环,若否,则结束。

代码如下://*******************添加联系人*******************void app(){ char an;puts("当前通讯录中的内容\n");list();do{ rec[m].num=m+1;printf("请按照提示输入新添加记录的各项信息\n");printf("姓名:");gets(rec[m].name);printf("\n电话:");gets(rec[m].tel);printf("\n手机:");gets(rec[m].celtel);printf("\n工作单位:");gets(rec[m].dw);printf("\nEMAIL:");gets(rec[m].email);printf("\nQQ:");gets(rec[m].qq);puts("\n这是新添加联系人的信息!\n");printf("编号姓名电话 \t手机 \t工作单位\tEMAIL \t\tQQ\n");printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[m].num,rec[m].name, rec[m].tel,rec[m].celtel,rec[m].dw,rec[m].email,rec[m].qq);m++;puts("\t\t\t☆☆☆☆☆新纪录输入完成!☆☆☆☆☆\n");puts("☆继续添加吗?(y/n)");an=getchar();getchar();}while(an=='y');}case'4': 删除功能,dele()函数;说明:输入要删除的编号,判断是否存在,若不存在就要重新输入,若存在,则利用循环进行删除操作,从要删除的编号开始,逐个由后一项往前一项覆盖。

代码如下://*****************删除联系人的记录********************void dele(){ int a;int n=0;list();do{ n++;if(n>1){printf("没有此记录,请重新输入...\n");}printf("删除几号记录?\n");scanf("%d",&a);}while(a>m&&a>0||a<0);if(a!=m+1){ for(i=a;i<m;i++){ rec[i-1]=rec[i];rec[i-1].num=i;}m--;list();printf("\t\t\t☆☆☆☆☆完成删除!☆☆☆☆☆\n");}getchar();}case'5': 修改功能,correct()函数;说明:输入修改的编号,判断是否存在,若存在则输出此人初始信息,再按提示输入修改后的新信息,若不存在,则结束操作。

代码如下://*******************修改联系人的信息*****************void correct(){char xm[10];bool k=1;list();printf("输入要修改联系人的姓名:");gets(xm);for(i=0;i<m;i++){ if(strcmp(xm,rec[i].name)==0){ k=0;printf("\n这是您要修改联系人的初始信息\n\n");printf("编号姓名电话 \t手机 \t工作单位\tEMAIL \t\tQQ\n");printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name, rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);printf("请输入修改后的电话号码:");gets(rec[i].tel);printf("\n请输入修改后的手机:");gets(rec[i].celtel);printf("\n请输入修改后的工作单位:");gets(rec[i].dw);printf("\n请输入修改后的EMAIL:");gets(rec[i].email);printf("\n请输入修改后的QQ:");gets(rec[i].qq);list();printf("\t\t\t☆☆☆☆☆修改完成!☆☆☆☆☆\n");break; }}if(k)printf("输入有误,通讯录中没有此联系人信息\n");}三.文件的读取与保存读取://***************从文件读记录到通讯录中***************** void load(){ FILE *fp;if((fp=fopen("tongxunlu.txt","rb"))==NULL){printf("Can't open file\n");exit(0);}for(i=0;i<SIZE;i++){ if(fread(&rec[i],sizeof(struct record),1,fp)!=1){if(feof(fp))break;printf("File read error!\n");}rec[i].num =i+1;m++;}list();printf("\t\t\t☆☆☆☆☆读取成功!☆☆☆☆☆\n");fclose(fp);}保存://******************保存通讯录内容到文件中************* void save(){ FILE *fp;if((fp=fopen("tongxunlu.txt","wb"))==NULL){printf("Can't open file");exit(0);}list();for(i=0;i<m;i++)if(fwrite(&rec[i],sizeof(struct record),1,fp)!=1)printf("File wrete error!\n");fclose(fp);printf("\t\t\t☆☆☆☆☆保存成功!☆☆☆☆☆\n"); }四.程序源代码#include<stdio.h>#include<stdlib.h>#include<string.h>#define SIZE 100int i,m=0; //m为当前通讯录中的记录数char menu(); //选单void list(); //显示void search(); //查找void app(); //增加void dele(); //删除void correct(); //修改void save(); //保存void load(); //读入struct record //结构体包含的联系人信息{ int num; //在通讯录中的编号char name[10]; //联系人姓名char tel[12]; //联系人电话号码char celtel[12]; //联系人手机号码char dw[20]; //联系人工作单位char email[20]; //联系人邮箱char qq[12]; //联系人QQ}rec[SIZE];void main(){ char choice;char an;while(1){ choice=menu();switch(choice){case'1':printf("显示通讯录中的内容\n");list();break;case'2':printf("查找联系人\n");search();break;case'3':printf("增加联系人记录\n");app();break;case'4':printf("删除记录\n");dele();break;case'5':printf("修改联系人信息\n");correct();break;case'6':printf("保存通讯录到TXT文件\n");save();break;case'7':printf("从TXT文件中读取记录\n");load();break;case'8':printf("即将退出通讯录管理系统...\n");printf("是否保存刚才进行的操作y/n?\n");an=getchar();if(an=='y'){save();}printf("(按任意键退出)");break;default:printf("输入错误!!");}if(choice=='8')break;printf("\n按任意键返回....\n");getchar();}}//*********************菜单**********************char menu(){ char c;printf("------------☆欢迎使用☆------------\n\n");printf("*************简易通讯录*************\n");printf(" ☆1.显示通讯录\n");printf(" ☆2.查找联系人\n");printf(" ☆3.增加联系人\n");printf(" ☆4.删除联系人\n");printf(" ☆5.修改通讯录\n");printf(" ☆6.保存到文件\n");printf(" ☆7.从文件读取\n");printf(" ☆8.退出此系统\n");printf("************************************\n");printf(" \n请选择………\n\n");c=getchar();getchar();return c;}//*****************显示通讯录中的内容*************void list(){ printf("编号姓名电话 \t手机 \t工作单位\tEMAIL \t\tQQ\n");for(i=0;i<m;i++){ if(rec[i].name[0]){ printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name, rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);}}printf("\t\t\t----------------END--------------\n");}//*******************添加联系人*******************void app(){ char an;puts("当前通讯录中的内容\n");list();do{ rec[m].num=m+1;printf("请按照提示输入新添加记录的各项信息\n");printf("姓名:");gets(rec[m].name);printf("\n电话:");gets(rec[m].tel);printf("\n手机:");gets(rec[m].celtel);printf("\n工作单位:");gets(rec[m].dw);printf("\nEMAIL:");gets(rec[m].email);printf("\nQQ:");gets(rec[m].qq);puts("\n这是新添加联系人的信息!\n");printf("编号姓名电话 \t手机 \t工作单位\tEMAIL \t\tQQ\n");printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[m].num,rec[m].name, rec[m].tel,rec[m].celtel,rec[m].dw,rec[m].email,rec[m].qq);m++;puts("\t\t\t☆☆☆☆☆新纪录输入完成!☆☆☆☆☆\n");puts("☆继续添加吗?(y/n)");an=getchar();getchar();}while(an=='y');}//*****************查找联系人的信息********************void search(){ char xm[10];char ch;int d;printf("→1.按姓名查找\n");printf("→2.按编号查找\n");printf("请选择...\n");ch=getchar();getchar();switch(ch){case'1':printf("输入查找的姓名\n");gets(xm);for(i=0;i<m;i++){ if(strcmp(xm,rec[i].name)==0){ printf("\t\t\t☆☆☆☆☆这是您需要查找的联系人的信息☆☆☆☆☆\n\n");printf("编号姓名电话 \t手机 \t工作单位\tEMAIL \t\tQQ\n");printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name, rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);break;}}if(i==m)printf("\t\t\t☆☆☆☆☆通讯录中没有您要查找的联系人☆☆☆☆☆\n");break;case'2':printf("输入查找的编号\n");scanf("%d",&d);for(i=0;i<m;i++){if(d==rec[i].num){ printf("\t\t☆☆☆☆☆这是您需要查找的联系人的信息☆☆☆☆\n\n");printf("编号姓名电话 \t手机 \t工作单位\tEMAIL \t\tQQ\n");printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name, rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);break;}}if(i==m)printf("\t\t\t☆☆☆☆☆通讯录中没有您要查找的联系人☆☆☆☆☆\n");break;default:printf("输入错误!!");}getchar();}//*****************删除联系人的记录********************void dele(){ int a;int n=0;list();do{ n++;if(n>1){printf("没有此记录,请重新输入...\n");}printf("删除几号记录?\n");scanf("%d",&a);}while(a>m&&a>0||a<0);if(a!=m+1){ for(i=a;i<m;i++){ rec[i-1]=rec[i];rec[i-1].num=i;}m--;list();printf("\t\t\t☆☆☆☆☆完成删除!☆☆☆☆☆\n");}getchar();}//*******************修改联系人的信息*****************void correct(){char xm[10];bool k=1;list();printf("输入要修改联系人的姓名:");gets(xm);for(i=0;i<m;i++){ if(strcmp(xm,rec[i].name)==0){ k=0;printf("\n这是您要修改联系人的初始信息\n\n");printf("编号姓名电话 \t手机 \t工作单位\tEMAIL \t\tQQ\n");printf("%d、%-8s%-10s%-12s%-18s%-18s%-12s\n",rec[i].num,rec[i].name, rec[i].tel,rec[i].celtel,rec[i].dw,rec[i].email,rec[i].qq);printf("请输入修改后的电话号码:");gets(rec[i].tel);printf("\n请输入修改后的手机:");gets(rec[i].celtel);printf("\n请输入修改后的工作单位:");gets(rec[i].dw);printf("\n请输入修改后的EMAIL:");gets(rec[i].email);printf("\n请输入修改后的QQ:");gets(rec[i].qq);list();printf("\t\t\t☆☆☆☆☆修改完成!☆☆☆☆☆\n");break; }}if(k)printf("输入有误,通讯录中没有此联系人信息\n");}//******************保存通讯录内容到文件中*************void save(){ FILE *fp;if((fp=fopen("tongxunlu.txt","wb"))==NULL){printf("Can't open file");exit(0);}list();for(i=0;i<m;i++)if(fwrite(&rec[i],sizeof(struct record),1,fp)!=1)printf("File wrete error!\n");fclose(fp);printf("\t\t\t☆☆☆☆☆保存成功!☆☆☆☆☆\n");}//***************从文件读记录到通讯录中***************** void load(){ FILE *fp;if((fp=fopen("tongxunlu.txt","rb"))==NULL){printf("Can't open file\n");exit(0);}for(i=0;i<SIZE;i++){ if(fread(&rec[i],sizeof(struct record),1,fp)!=1){if(feof(fp))break;printf("File read error!\n");}rec[i].num =i+1;m++;}list();printf("\t\t\t☆☆☆☆☆读取成功!☆☆☆☆☆\n");fclose(fp);}五.调试与运行结果运行环境:vc++6.01.运行程序,进入系统菜单六.计算机学院课程设计评定意见。

相关主题