题目: 手机通讯录管理系统
专 业 :电子信息工程
班 级 :电子112
学 号 :
姓 名 :
指导教师 :
日 期: 2012 年 7月 9日至 20## 年7 月 14 日
山东工商学院信电学院
注:用户名和密码均为dianzi112
1、程序基本功能要求
手机通信录采用文件存储,因而要提供文件的输入输出操作;查看功能要提供显示操作;增加新数据的过程要检查是否有重复,存储空间是否已满,且录入的新数据能按递增的顺序自动进行条目编号,因而要提供查找、统计和排序操作;要提供修改与删除和自动调整编号功能;另外还要提供键盘式选择菜单以实现功能选择。
(1)数据查看模块
通过菜单选择查看信息,然后选择办公类、个人类或者商务类,则显示所选类信息列表。这是一个查找与显示的过程,在手机通信录文件中查找type类型符合的记录,输出。
(2)数据添加模块
提示输入一条记录,将对通信录执行查找操作,查找姓名和电话号码字段,如不存在相同的记录,则用以追加方式写入文件,并给记录的条目字段赋值(在检查有无重复的过程中启动计数),否则提示“数据已经存在,请重新输入或者取消!”。
(3)数据修改模块
修改通信录信息,则需要读文件,判断信息是否是要修改的信息,如果是,修改,重新写入文件;否则直接重新写入文件。
(4)数据删除模块
通过菜单选择删除操作,由于C语言没有提供直接删除文件记录的函数,因而需要自己实现:读记录,判断是否要删除(与输入的要删除的记录比较),如果要删除,则舍弃;否则重新写入文件。
2、总体设计(功能模块说明,如函数功能、参数说明,函数调用关系描述等,并注明各模块的具体成员分工)
建立结构体来储存和整合各个信息。然后利用模块来分别实现程序的各个功能。各个模块用函数来实现。在通过主函数来判断输入数字,从而调动函数,实现所需功能。最后将输入的文件保存在文件里,以便重复使用。
整个系统可以设计为数据查看模块、数据添加模块、数据修改模块、数据删除模块。
函数体构造和查看模块编写人-------------张睿
数据添加和修改模块编写人--------------闫君
数据删除和switch函数模块-------------杨留洋
3、详细设计(程序设计组成框图、流程图)
1)数据查看模块
通过菜单选择查看信息,然后选择办公类、个人类或者商务类,则显示所选类信息列表。这是一个查找与显示的过程,在手机通信录文件中查找type类型符合的记录,输出。
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].num);
printf("\t此人年龄: %s\n",per[i].age);
printf("\t电话号码: %s\n",per[i].tel);
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].tel,s)!=0&&i<n) i++;
if(i==n)
{
printf("\t通讯录中没有此人!\n");
return;
}
printf("\t此人编号: %d\n",per[i].num);
printf("\t此人姓名: %s\n",per[i].name);
printf("\t此人年龄: %s\n",per[i].age);
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].num);
printf("\t此人姓名: %s\n",per[i].name);
printf("\t此人年龄: %s\n",per[i].age);
printf("\t电话号码: %s\n",per[i].tel);
printf("\t电子邮箱: %s\n",per[i].email);
} ;
}
(2)数据添加模块
提示输入一条记录,将对通信录执行查找操作,查找姓名和电话号码字段,如不存在相同的记录,则用以追加方式写入文件,并给记录的条目字段赋值(在检查有无重复的过程中启动计数),否则提示“数据已经存在,请重新输入或者取消!”。
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].num);
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].tel);
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);
}
(3)数据修改模块
修改通信录信息,则需要读文件,判断信息是否是要修改的信息,如果是,修改,重新写入文件;否则直接重新写入文件。
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].num);
printf("\t姓名:");
scanf("\t%s",per[i].name);
printf("\t年龄:");
scanf("\t%s",per[i].age);
printf("\t电话号码:");
scanf("\t%s",per[i].tel);
printf("\t通讯住址:");
scanf("\t%s",per[i].adds);
printf("\t电子邮箱:");
scanf("\t%s",per[i].email);
printf("\t修改成功!");
}
(4)数据删除模块
通过菜单选择删除操作,由于C语言没有提供直接删除文件记录的函数,因而需要自己实现:读记录,判断是否要删除(与输入的要删除的记录比较),如果要删除,则舍弃;否则重新写入文件。
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].tel,per[j+1].tel);
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].num=per[j+1].num;
}
printf("\t\t\t已经成功删除!\n");
return(n-1);
}
4、程序运行结果(截图)
注:用户名和密码均为dianzi112
5、源程序代码(代码中注明每段代码的完成人)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
char num; /*编号*/
char name[20]; /*姓名*/
char tel[20]; /*号码*/
char email[20]; /*邮箱*/
char age[20]; /*年龄*/
char adds[20]; /*住址*/
}Person;
Person pe[300];
int menu_select()
{
char c;
do{
system("cls");
printf("\t ***********************欢迎使用手机通讯录********************\t \n");
printf("\t\t***************************菜单*************************\t\n");
printf("\t\t1. 添加记录\n");
printf("\t\t2. 显示记录\n");
printf("\t\t3. 删除记录\n");
printf("\t\t4. 查询记录\n");
printf("\t\t5. 修改记录\n");
printf("\t\t6. 保存记录\n");
printf("\t\t0. 退出程序\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].num);
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].tel);
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;i<n+1;i++)
{
printf("%-5d%-8s%-6s%-13s%-15s%-15s\n",per[i-1].num,per[i-1].name,per[i-1].age,per[i-1].tel,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].tel,per[j+1].tel);
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].num=per[j+1].num;
}
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].num);
printf("\t此人年龄: %s\n",per[i].age);
printf("\t电话号码: %s\n",per[i].tel);
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].tel,s)!=0&&i<n) i++;
if(i==n)
{
printf("\t通讯录中没有此人!\n");
return;
}
printf("\t此人编号: %d\n",per[i].num);
printf("\t此人姓名: %s\n",per[i].name);
printf("\t此人年龄: %s\n",per[i].age);
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].num);
printf("\t此人姓名: %s\n",per[i].name);
printf("\t此人年龄: %s\n",per[i].age);
printf("\t电话号码: %s\n",per[i].tel);
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].num);
printf("\t姓名:");
scanf("\t%s",per[i].name);
printf("\t年龄:");
scanf("\t%s",per[i].age);
printf("\t电话号码:");
scanf("\t%s",per[i].tel);
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%-13s\t%-20s\t%-20s\n",per[i].num,per[i].name,per[i].age,per[i].tel,per[i].adds,per[i].email);
i++;
}
fprintf(fp,"------------------------------------------------------------------------------------------\n");
fprintf(fp,"***************************************共有%d条记录****************************************\n",n);
fclose(fp); /*关闭文件*/
printf("保存成功!\n");
}
void main() /*主函数*/
{
char name[10],code[10];
printf("\n");printf("\n");printf("\n");printf("\n");
printf(" 请输入用户名:");
scanf("%s",name);
printf(" 请输入密码:");
scanf("%s",code);
if (!strcmp(name,"dianzi112")&&!strcmp(code,"dianzi112"))
{
printf (" welcome!!!!! \n");}
else
{
printf ("用户名或密码错误,请重新输入!\n");
}
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"); //结束程序
system("pause");
exit(0);
}
}
}
6、个人体会
忙碌了三天,在大家的共同努力下,我们总算将此程序设计出来。尽管不是自己
独立完成,但仍然很高兴,因为在设计的过程中,我了解到要设计一个大程序查
找资料有多困难。
另外平时扎实的基础也很关键,因为如果你平时学的就不怎么样,那你面对一个
大程序就会望而却步,看他人的都是难点更何况是自己设计。通过三天的努力我
看到了大家的团结,团队力量难能可贵。
总之这次设计让我受益良多,我会好好珍惜这种难能可贵的机会。
8、指导教师评语
课程设计成绩:
指导教师签字:
C语言程序设计实习报告手机通讯录管理系统一、设计题目的任务和内容任务:本程序是非数值计算型算法设计,我设计出了通讯录管理系统的基本…
源代码includeltiostreamgtincludeltstringgtincludeltiomanipgtincludel…
山东工商学院信电学院高级语言程序设计课程设计报告高级语言程序设计课程设计报告题目手机通讯录管理系统专业电子信息工程班级电子112学…
设计课题题目一课程设计目的与要求1课程设计目的1综合运用之前所学知识选择控制循环控制数组函数指针结构体和文件等来完成一个简单的信息…
目录摘要2第一章绪论311课程设计目的和内容概述312题目手机通讯录管理系统3第二章程序分析421总体设计422详细设计423总流…
源代码includeltiostreamgtincludeltstringgtincludeltiomanipgtincludel…
目录摘要2第一章绪论311课程设计目的和内容概述312题目手机通讯录管理系统3第二章程序分析421总体设计422详细设计423总流…
C程序课程设计报告手机通讯录管理系统姓名谢骏学院珠宝学院学号20xx1002649班级141082一课程设计目的和内容概述1目的加…
C语言课程设计论文通讯录管理系统设计目的设计通讯录管理系统使其具有数据插入修改删除显示和查询等功能1数据包括人名工作单位电话号码和…
设计说明书通讯录系统起止日期20xx年01月03日至20xx年01月08日学班学成生姓名级号绩XXX指导教师签字计算机与通信学院2…