C语言程序设计 手机通讯录管理系统

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
}
4
[需求分析]
该模块的功能是按用户选择的姓名删除此人的全部信息。做法是保存未被删除的所有信息,即实现功能,并且自动调整后续条目的编号。这样比起删除一般做法较为简单。
流程图
程序
void del(void)
{
int i;
if(n==0)
{
puts("当前没有数据!");
getch();
return ;
"**************************************************\n"
);
switch(key=getch())//获取键盘ascii码值
{
case 'a':
case 'A':
case 'b':
case 'B':
case 'c':
case 'C':
for(i=0,j=0;i<n;i++)
default:
break;
}
}
else if(key==13) //获取回车键,确定输入
{
return cursor;
}
}
}
4.3公共函数
以下是在每个功能中都有可能用到的公共函数。
/**********************************************
确定函数
**********************************************/
3
根据上面的分析,可以将这个系统分为如下五大模块:
1.查看模块
2.增加模块
3.修改模块
4.删除模块
5.显示模块
系统功能模块图
4 详细设计
4.1
主函数一般要求设计得比较简洁,只提供输入、输出、处理和输出部分的函数调用。其中各功能模块用菜单方式选择。把界面选择部分语句单独取出来作为一独立函数,目的在于系统实行完每部分功能后能够方便返回系统界面。主函数设计如下:
int key;
cursor=0; //游标初始化
while(1)
{
system("cls");
puts("请选择联系人并确定:");
for(i=0;i<n;i++)
{
if(cursor==i)
printf(" -->\t%s\n",con[i].name);
else
printf("\t%s\n",con[i].name);
我们应该很容易想到:每个人的信息是不是可以采用结构体的形式呢?这样把个人通信信息的姓名、电话号码等作为结构体成员不就可以把一个人的信息作为一个整体来处理了吗?如果要存放若干个人的信息就用结构体数组。
typedef struct //存储联系人结构体
{
char name[10]; //姓名
char tel[15]; //电话号码
"\n""\n"
"\t\t1.查看通讯录\n"
"\t\t2.新建联系人\n"
"\t\t3.修改联系人\n"
"\t\t4.删除联系人\n"
"\t\t0.离开系统\n"
"\n""\t\t\t\t\t\t\t\t\t\n"
"**************************************************\n"
C语言课程设计
名称:手机通信录管理系统
学院:材化学院
班级:031444
姓名:吴雪
指导老师:张冬梅
2015.12
1 题目要求
1.1要求
模拟手机通讯录管理系统,实现对手机中的通讯录进行管理。功能要求如下:
(1)查看功能:选择此功能时,列出下列三类选择。
①办公类
②个人类
③商务类
当选中某类时,显示出此类所有数据中的姓名和电话号码。
流程图
YN
YN
程序
void add()
{
CONTACT *tmp=(CONTACT *)malloc(LEN);
if(n>MAX-1) //检测存储空间
{
puts("存储空间已满,不能再录入新数据");
free(tmp);
return;
}
input(tmp); //通过临时变量修改数据
con[n]=*tmp;
流程图
程序
void browse()
{
int i,j;
char key;
while(1)
{
//显示主界面
system("cls");
printf(
"**************************************************\n"
"\t\t查看通讯录\n"
"**************************************************\n"
char group; //分类分为A办公类B个人类C商务类
char email[30]; //电子邮件
}CONTACT;
CONTACT con[MAX];
int n;
const char groupstr[3][7]={"办公类","个人类","商务类"};
[注意]
con[MAX]中MAX为所有记录人的个数,程序中采用宏定义的方式,可以随时在源程序宏定义中改,本程序宏定义#define MAX15。
正常字符串不出现-1;
经过比较均比-1小,在排序则将数据删除
**********************************************/
4
[需求分析]
该模块功能是:显示已存储的人的姓名,并提供选择,确定将返回其在结构体数组的位置。
流程图
程序
int select()
{
int i,cursor;
(2)增加功能:能录入新数据。
一个结点包括:姓名、电话号码、分类(办公类、个人类、商务类)、电子邮件。例如:杨春
13589664454 商务类chuny@126.com.
当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通讯录中超过15条
信息时,存储空间已满,不能再录入新数据:录入的数据能按递增的顺序自动进行条目编号。
}
key=getch();
if(key==224) //上下左右功能键识别
{
switch(getch())
{
case 72: //上
cursor==0?cursor=n-1:cursor--;break;
case 80: //下
cursor==n-1?cursor=0:cursor++;;break;
if(n==0) //是否有数据
{
puts("当前没有数据!");
free(tmp);
getch();
return ;
}
i=select();
if(msgbox("确定修改?"))
{
input(tmp);
con[i]=*tmp;
sort();
save(DATA,con);
free(tmp);
return;
n++;
sort(); //排序
save(DATA,con);
free(tmp);
return;
}
void input(CONTACT *p)
{
int err=0,i;
do
{
err=0; //错误标志
system("cls");
puts("\n请输入姓名:\n");
scanf("%s",p->name);
puts("请输入电子邮件:\n");
scanf("%s",p->email);
for(i=0;i<n;i++) //检查重复
{
if(strcmp(p->name,con[i].name)==0||strcmp(p->tel,con[i].tel)==0)
{
err=1;
puts("重复数据,相同姓名或者相同的电话号码!");
getch();
break;
}
}
if(err!=1) //显示数据并确定
{
printf("姓名:%-10s电话:%-15s\n分类:%-10s电子邮件:%-30s",p->name,p->tel,groupstr[p->group-'A'],p->email);
err=1-msgbox("数据是否确定?");
}
}
while(err);
}
4.2.3修改模块
[需求分析]
该模块的功能是:根据选中某个人的姓名查找此人通信记录,并提示用户修改记录的哪部分信息,是姓名、电话、分类或电子邮件,根据用户选择修改相应信息。
流程图
N Y
程序
void modify(void)
{
int i;
CONTACT *tmp=(CONTACT *)malloc(LEN);
puts("请输入电话号码:\n");
scanf("%s",p->tel);
//下面分类选择提供选择,直接键入就是选择.
puts("请选择分类:A办公类B个人类C商务类\n");
do
{
p->group=getch()&~32;
}
while(p->group!='A'&&p->group!='B'&&p->group!='C');
printf("%s联系人暂时没有\n",groupstr[(key&~32)-'A']);
printf("请按任意键返回!");
getch();
break;
case '0':
return;break;
default:break;
}
}
}
4.2.2
[需求分析]
该模块:能录入新数据每个结点包括:姓名,电话号码,分类(办公类、个人类、商务类),电子邮件。当录入重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通讯录中超过15条信息时,存储空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号。
case '3':
modify();break;
case '4':
del();break;
case '0':
exit(0);break;
default:break;
}
}
}Fra Baidu bibliotek
4.2
4.2.1
(1)查看模块
[数据结构]
我们的原始数据只有一类,为个人通信录信息
[分析]
单独看各数据信息,姓名、电话号码、分类、电子邮件都是字符型,可以采用字符型数组。数据信息存放在文件中,一条记录对应一个人,既符合习惯又方便信息管理。现在要考虑的问题是:一个人的记录从文件中读出来后以什么形式存放?
}
i=select();
if(msgbox("确定删除?"))
{
con[i].name[0]=-1;
sort();
n--;
save(DATA,con);
return;
}
}
/**********************************************
删除模块
删除实现原理通过将数据的初始赋值为-1
n=0;
}
getch();
while(1)
{
//显示主界面
system("cls");
printf(
"**************************************************\n"
"\t\t手机通讯录管理系统\n"
"**************************************************\n"
"\t\t请选择(0-4)\n"
"**************************************************\n"
"当前共有%d个数据\n",n
);
switch(getch())//获取键盘ascii码值
{
case '1':
browse();break;
case '2':
add();break;
(3)修改功能:选中某个人的姓名时,可对此人的相应数据进行修改。
(4)删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的
编号。
[提示]
建立结构体,结构体成员包括姓名、电话号码、分类、电子邮件。
2 需求分析
根据题目要求,由于通讯录信息是放在文件中,所以应提供文件的输入输出等操作;在程序中需要浏览通讯录信息,应提供显示、查找、添加、删除、修改等操作;另外应提供键盘式选择菜单实现功能选择。
"\n""\n"
"\t\t请选择分类:\n"
"\t\tA.办公类\n"
"\t\tB.个人类\n"
"\t\tC.商务类\n"
"\t\t0.返回菜单\n"
"\n""\n"
"**************************************************\n"
"\t\t请选择(A-C或者0)\n"
int msgbox(char *msg)
{
char ch;
流程图
程序:
int main(void)
{
if(n=read(DATA,con))//读取通讯录数据
{
printf("\n\n\t\t当前共记录了%d个数据\n",n);
}
else
{
printf(
"\n\n\t\t欢迎您第一次进入\n"
"\t\t手机通讯录管理系统\n"
"\t\t该程序由喻克望制作\n");
{
if(con[i].group==(key&~32))//取大写比较
{
printf("姓名:%-10s电话:%-15s\n",con[i].name,con[i].tel);
j++;
}
}
if(j)
printf("共找到%d个%s联系人\n",j,groupstr[(key&~32)-'A']);
else
相关文档
最新文档