当前位置:文档之家› C语言程序设计课程设计-通讯录管理系统

C语言程序设计课程设计-通讯录管理系统

通讯录信息管理系统设计计算机学院计算机科学与技术专业1.课程设计的目的学习了C语言程序设计这门课程之后,使我对程序设计有了一定的了解,为了熟练掌握C语言的语法特点、及其数据结构,提高自身编写程序的能力。

通过课程设计实现理论知识与实际情况的结合,使所学知识能够在现实社会中起到一定的作用,防止所编写的程序脱离实际,让程序可以更好的发挥作用,以便减轻实际工作中所遇到的繁琐步骤,提高现实工作中的效率。

此外通过课程设计提高逻辑思考能力和解决实际问题的能力。

程序设计中,语句的语法和常量变量的定义都有严格的要求,有时输了一个中文标点、打错了一个字母,编译就不通过,程序无法正常运行。

因此,程序设计初学阶段,学生经常会犯这样的错误,可能要通过几次乃至十多次的反复修改、调试,才能成功,但这种现象会随着学习的深入而慢慢改观。

这当中就有一个严谨治学、一丝不苟的科学精神的培养,又有一个不怕失败、百折不挠品格的锻炼。

通讯录信息管理系统是生活中不可缺少的部分编写了一个通讯录信息管理系统是十分必要的。

本程序设计具有通讯信息的录入,进行保存、查找、删除等功能,操作界面简洁美观,易于操作。

程序用了条件、循环、指针、结构体等知识点,综合了文件的打开和保存编写的。

软件运用菜单实现交互式管理,用户轻松的按键既可实现对软件的操作,操作简单易懂,功能丰富,可以很好的满足的需要。

通过对通讯录管理系统的设计,进一步理解和掌握C语言这门课程的知识点,能够熟练的调用各种函数,把各种C语句有机的结合起来,提高自己C语言程序设计的能力,为今后解决实际问题打下良好基础。

2.设计方案论证2.1设计思路建立一个函数,用来添加、显示、删除、查询、修改、保存通讯录等信息,完成通讯录的功能。

主函数可以调用六个子函数,分别完成添加记录、显示记录、删除记录、查询记录、修改记录、保存记录、退出系统等功能。

在主函数中可以以1、2、3、4、5、6数字键分别可以执行某个功能模块。

2.2程序设计2.2.1根据图1定义数据类型建立函数typedef struct{char Num; //编号char Name[10]; //姓名char Tel[15]; //电话号码char Email[20]; //邮箱char age[8]; //年龄char adds[20]; //住址}Person;2.2.2主函数及其流程图定义主函数main()和一系列的功能函数,只有通过这些函数才可实现程序的功能。

每次使用都会调用主函数。

主函数主要是利用switch语句对数据进行处理,流程图如下:2.2.3增加函数及其流程图2.2.3.1.添加通讯录记录流程图:2.2.3.2.显示通讯录记录流程图:2.2.3.3.删除通讯录记录流程图: 2.2.3.4.查询通讯录记录流程图:2.2.3.5.修改通讯录记录流程图:2.3源程序#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct{char Num; //编号char Name[10]; //姓名char Tel[15]; //电话号码char Email[20]; //邮箱char age[8]; //年龄char adds[20]; //住址char relation[40]; //关系}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);printf(“\t关系:”);scanf(“\t%s”,per[n+i].relation);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;i<n+1;i++){printf("%-5d%-8s%-6s%-40s%-13s%-15s%-15s\n",per[i-1].score,per[i-1].name,per[i-1].age, per[i-1].relation,per[i-1].num,per[i-1].adds,per[i-1].email);if(i>1&&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<n) i++;if(i==n){printf("\t通讯录中没有此人!\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].relation,per[j+1].relation);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\t已经成功删除!\n");return(n-1);}void Query_a_record(Person per[],int n){int m;printf("\t\n请选择查询方式:\n");printf("\t┌──────┐\n");printf("\t│1------姓名│\n");printf("\t│2------电话│\n");printf("\t│3------地址│\n");printf("\t│4------返回│\n");printf("\t└──────┘\n");printf("请选择:");scanf("%d",&m);while(m!=1&&m!=2&&m!=3&&m!=4){printf("输入错误,请重新选择:");scanf("%d",&m);}if(m==1){char s[20];int i=0;printf("\t请输入想查询的姓名:");scanf("\t%s",s);while(strcmp(per[i].name,s)!=0&&i<n) i++;if(i==n){printf("\t通讯录中没有此人!\n");return;}printf("\t此人编号: %d\n",per[i].score);printf("\t此人年龄: %s\n",per[i].age);printf("\t与我的关系: %s\n",per[i].relation);printf("\t电话号码: %s\n",per[i].num);printf("\t通讯地址: %s\n",per[i].adds);printf("\t电子邮箱: %s\n",per[i].email);} ;if(m==2){char s[20];int i=0;printf("\t请输入想查询的电话:");scanf("\t%s",s);while(strcmp(per[i].num,s)!=0&&i<n) i++;if(i==n){printf("\t通讯录中没有此人!\n");return;}printf("\t此人编号: %d\n",per[i].score);printf("\t此人姓名: %s\n",per[i].name);printf("\t此人年龄: %s\n",per[i].age);printf("\t与我的关系: %s\n",per[i].relation);printf("\t通讯地址: %s\n",per[i].adds);printf("\t电子邮箱: %s\n",per[i].email);} ;if(m==3){char s[20];int i=0;printf("\t请输入想查询的地址:");scanf("\t%s",s);while(strcmp(per[i].adds,s)!=0&&i<n) i++;if(i==n){printf("\t通讯录中没有此人!\n");return;}printf("\t此人编号: %d\n",per[i].score);printf("\t此人姓名: %s\n",per[i].name);printf("\t此人年龄: %s\n",per[i].age);printf("\t与我的关系: %s\n",per[i].relation);printf("\t电话号码: %s\n",per[i].num);printf("\t电子邮箱: %s\n",per[i].email);} ;}void Change(Person per[],int n){char s[20];int i=0;printf("\t请输入想修改的记录中的名字:");scanf("%s",s);while(strcmp(per[i].name,s)!=0&&i<n) i++;if(i==n){printf("\t通讯录中没有此人!\n");return;}printf("\t编号:");scanf("\t%d",&per[i].score);printf("\t姓名:");scanf("\t%s",per[i].name);printf("\t年龄:");scanf("\t%s",per[i].age);scanf("\t%s",per[i].relation);printf("\t关系:");printf("\t电话号码:");scanf("\t%s",per[i].num);printf("\t通讯住址:");scanf("\t%s",per[i].adds);printf("\t电子邮箱:");scanf("\t%s",per[i].email);printf("\t修改成功!");}void WritetoText(Person per[],int n){int i=0;FILE *fp; //定义文件指针char filename[20]; //定义文件名printf("\t保存到文件\n"); //输入文件名printf("\t请输入所保存的文件名:");scanf("\t%s",filename);if((fp=fopen(filename,"w"))==NULL){printf("\t无法打开文件\n");system("pause");return;}fprintf(fp,"******************************************通讯录******************************************\n");fprintf(fp,"编号姓名年龄关系电话号码通讯地址电子邮箱\n");fprintf(fp,"------------------------------------------------------------------------------------------\n");while(i<n){fprintf(fp,"%-3d\t%-6s\t%-3s\t%-40s\t%-13s\t%-20s\t%-20s\n",per[i].score,per[i].name,per[i ].age,per[i].relation,per[i].num,per[i].adds,per[i].email);i++;}fprintf(fp,"------------------------------------------------------------------------------------------\n");fprintf(fp,"***************************************共有%d条记录****************************************\n",n);fclose(fp); //关闭文件printf("保存成功!\n");}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);}}}3.设计结果与分析将源程序编译、链接后生成可执行文件,运行该文件会看到如图8所示界面。

相关主题