手机通信录管理系统设计C语言课程设计.docx

上传人:b****7 文档编号:9764250 上传时间:2023-02-06 格式:DOCX 页数:45 大小:192.18KB
下载 相关 举报
手机通信录管理系统设计C语言课程设计.docx_第1页
第1页 / 共45页
手机通信录管理系统设计C语言课程设计.docx_第2页
第2页 / 共45页
手机通信录管理系统设计C语言课程设计.docx_第3页
第3页 / 共45页
手机通信录管理系统设计C语言课程设计.docx_第4页
第4页 / 共45页
手机通信录管理系统设计C语言课程设计.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

手机通信录管理系统设计C语言课程设计.docx

《手机通信录管理系统设计C语言课程设计.docx》由会员分享,可在线阅读,更多相关《手机通信录管理系统设计C语言课程设计.docx(45页珍藏版)》请在冰豆网上搜索。

手机通信录管理系统设计C语言课程设计.docx

手机通信录管理系统设计C语言课程设计

C 语言课程设计报告

 

手机通信录管理系统设计

[要求]模拟手机通信录管理系统,实现对手机中的通信录进行管理。

功能要求如下:

(1)查看功能:

选择此功能时,列出下列三类选择。

a)办公类

b)个人类

c)商务类

当选中某类时,显示出此类所有数据中的姓名、电话号码和电子邮件。

(2)增加功能:

能录入新数据。

一个结点包括:

姓名、电话号码、分类(办公类、个人类、商务类)、电子邮件。

例如:

杨** 135896********商务类 *****@***.com。

当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通信录中超

过 15 条信息时,储存空间已满,不能再录入新数据;;录入的新数据能按递增的顺序自动

进行条目编号。

(3)修改功能:

选中某个人姓名时,可对此人的相应数据进行修改。

(4)删除功能:

选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条

目的编号。

【需求分析】

根据题目要求,由于联系人信息时存放在文件中,所以应提供文件的输入、输出等操

作;在程序中需要查看联系人信息,应提供显示、查看功能;要实现修改和删除联系人功

能,所以应提供对文件的修改和删除操作。

【总体设计】

以下分析整个系统,根据上面的需求分析,可将这个系统的设计分为四大模块(如图

一):

 

图一  系统功能模块图

【详细设计】

1.主函数

主函数设计比较简洁,仅有一个语句。

[程序]

main()/*******************主函数********************/

0

C 语言课程设计报告

{

menu();

}

2.主菜单

主菜单函数提供用户对系统功能的选择,包括浏览联系人、增加联系人、修改联系人、

删除联系人。

该函数的流程图如图二所示。

程序如下,这样编写的目的在于系统执行完每

部分模块后能够方便返回到系统界面。

开始

 

显示一系列功能选项

 

输入 n,判断 n 是

否是 1-4?

Y

根据 n 的值调用

各功能模块函数

 

结束

图二 主菜单流程图

[程序]

void menu()/******************菜单函数*****************/

{

int n=0,w1;

do

{

puts("\t\t***********************MENU***********************\n\n");

puts("\t\t\t\t1.Browse all");

puts("\t\t\t\t2.Add members");

puts("\t\t\t\t3.Modify information");

puts("\t\t\t\t4.Delete information");

puts("\n\n\t\t***************************************************\n");

printf("Choose your number(1-4):

[ ]\b\b");

scanf("%d",&n);

if(n<1||n>4)

{

w1=1;

1

C 语言课程设计报告

getchar();

}

else

w1=0;

}while(w1==1);

switch(n)

{

case 1:

browse();break;/*浏览联系人模块*/

case 2:

add();break;/*增加联系人模块*/

case 3:

modify();break;/*修改联系人模块*/

case 4:

del();break;/*删除联系人模块*/

}

}

3.数据结构设计

各联系人信息包括有姓名、电话号码、联系人类型、电子邮件。

可以使用结构体数组,

则姓名、电话、类型和电子邮件作为结构体成员。

struct member/*联系人结构体*/

{

char name[20];/*联系人姓名*/

char tel[11];/*联系人电话*/

int type;/*联系人类型:

1 为办公类;2 为个人类;3 为商务类

*/

char email[30];/*联系人电子邮件*/

}mem[N];/*N 为全局变量,表示能够储存的联系人数量*/

注意:

mem[N]中的 N 为联系人数目,程序中采用宏定义的方式,可以随时在源程序宏

定义中修改,本程序宏定义#define N 15.

4.浏览联系人模块

[需求分析]

该模块的功能是使用户可以浏览或者分类浏览各联系人信息。

如图三所示,当用户输

入 1、2、3、4 时,分别显示办公类联系人、个人类联系人、商务类联系人和所有联系人。

 

图三 浏览联系人模块流程图

2

C 语言课程设计报告

[程序]

void browse()/*********浏览联系人函数**********/

{

int m,n=0,w1;

m=load();

do

{

puts("\n\n\t\t******************BROWSR********************");

puts("\t\t\t\t1.show clerical members");/*查询办公类联系人*/

puts("\t\t\t\t2.show personal members");/*查询个人类联系人*/

puts("\t\t\t\t3.show commercial members"); /*查询商务类联系人*/

puts("\t\t\t\t4.show all members");/*查询所有联系人*/

puts("\t\t\t\t5.return to menu");/*返回菜单*/

printf("Choose your number(1-5):

[ ]\b\b");

scanf("%d",&n);

if(n<1||n>5)

{

w1=1;

getchar();

}

else

w1=0;

}while(w1==1);

if(n==1)

{

printf_cle(m);/*显示办公类联系人*/

puts("\ninformation has been showed,Press any key to return to menu\n");

system("pause");/*暂停系统工作*/

getchar();

menu();

}

else if(n==2)

{

printf_per(m);/*显示个人类联系人*/

puts("\ninformation has been showed,Press any key to return to menu\n");

system("pause");/*暂停系统工作*/

getchar();

menu();

}

else if(n==3)

{

printf_com(m);/*显示商务类联系人*/

puts("\ninformation has been showed,Press any key to return to menu\n");

system("pause");/*暂停系统工作*/

3

 

C 语言课程设计报告

getchar();

menu();

}

else if(n==4)

{

printf_all(m);/*显示商务类联系人*/

puts("\ninformation has been showed,Press any key to return to menu\n");

system("pause");/*暂停系统工作*/

getchar();

menu();

}

else

{

menu();

}

}

5.增加联系人模块

[需求分析]

该模块的功能是使用户实现增加新联系人的功能,从键盘输入新联系人信息并加

入到原文件中。

该模块流程图如图四所示。

[程序]

void add()

{

int m,w1,n,t,w2,i,j;/*m 为现有联系人数量*/

m=load();/*加载联系人信息,并将联系人数量输入 m*/

if(m==N)

{

开始

运行 m=load()函数,

加载现有联系人信息

 

判断 m 是否小

于 N?

N

输入联系人姓名、

电话、类型、电子

Y

邮箱

是否保存?

N

输出:

储存空

间已满,无法

输入

Y

运行 save(int)函数,

将信息保存至文件中

 

返回至主菜单

图四 增加联系人模块流程图

4

 

}

else

{

 

}

do

{

C 语言课程设计报告

printf("there is no terabytes to save\n");

printf("Press any key to return to menu ...");

getchar();

system("pause");

menu();

结束

 

puts("\tplease input contract's name:

"); /*输入联系人姓名*/

scanf("%s",mem[m].name);         /*将联系人姓名保存至结构体*/

puts("\tplease input contract's telephone number:

");

scanf("%s",mem[m].tel);

do                           /*选择联系人类型语句*/

{

puts("\n\n\n\n\nplease choose contract's type:

\n\n\n");

puts("1,clerical\t");

puts("2,personal\t");

puts("mercial\t");

puts("please choose contract's type:

[ ]\b\b");

scanf("%d",&n);

if((n!

=1)&&(n!

=2)&&(n!

=3))

{

w1=1;

getchar();

}

else

w1=0;

}while(w1==1);

switch(n)                   /*将联系人类型信息存入结构体中*/

{

case 1:

mem[m].type=1;break;

case 2:

mem[m].type=2;break;

case 3:

mem[m].type=3;break;

}

puts("\tplease input contract's email address:

");

scanf("%s",mem[m].email);

 

puts("Are you sure to save?

  1.yes  2.no[ ]\b\b");

scanf("%d",&t);

if(t<1||t>2)

{

w2=1;

5

C 语言课程设计报告

getchar();

}

else

w2=0;

}while(w2==1);

if(t==1)

{

for(i=0;i

{

if(strcmp(mem[i].name,mem[m].name)==0)

{

puts("name has existed!

cannot save, Press any key to meun!

");

for(j=0;j<20;j++)

mem[m].name[j]='\0';

for(j=0;j<11;j++)

mem[m].tel[j]='\0';

mem[m].type=0;

for(i=0;i<30;i++)

mem[m].email[j]='\0';

system("pause");

menu();

}

if(strcmp(mem[i].tel,mem[m].tel)==0)

{

puts("telephone number has existed!

cannot save,Press any key to

menu!

");

for(j=0;j<20;j++)

mem[m].name[j]='\0';

for(j=0;j<11;j++)

mem[m].tel[j]='\0';

mem[m].type=0;

for(i=0;i<30;i++)

mem[m].email[j]='\0';

system("pause");

menu();

}

}

save(m);/*保存联系人信息至文本文档*/

puts("information saved!

\n");

puts("there follows all the informations:

\n");

printf_all(m+1);

getchar();

puts("Press any key to return to menu");

system("pause");

6

C 语言课程设计报告

menu();

}

if(t==2)/*如果用户不保存,则将刚刚存入结构体中的数据删除*/

{

for(i=0;i<20;i++)

mem[m].name[i]='\0';

for(i=0;i<11;i++)

mem[m].tel[i]='\0';

mem[m].type=0;

for(i=0;i<30;i++)

mem[m].email[i]='\0';

puts("information not saved!

\n");

puts("there follows all the informations:

\n");

printf_all(m);

getchar();

puts("Press any key to return to menu");

system("pause");

menu();

}

}

6. 修改联系人模块

[需求分析]

该模块的功能的功能是显示所有联系人信息。

显示完后,用户输入要修改联系人

的序号,系统根据用户输入的序号显示用户选择的联系人,并提示用户需要修改哪部

分信息,是姓名、电话、类型还是电子邮箱。

根据用户的选择修改相应的信息。

[程序]

void modify()

{

int m,n,t,w1,w2;

m=load();

puts("there follows all the informations:

\t");

printf_all(m);/*显示所有信息,以便用户确认所要修改的信息*/

do

{

puts("please input the number that you want to modify,or press '0' to exit:

");

scanf("%d",&n);

if(n<0||n>m)

{

w1=1;

getchar();

}

else

w1=0;

7

 

C 语言课程设计报告

}while(w1==1);

if(n==0)

menu();

printf_one(n);

do

{

puts("\t\t\t\t1,name");

puts("\t\t\t\t2.telephone");

puts("\t\t\t\t3.type");

puts("\t\t\t\t4.email");

puts("\t\t\t\t0.Exit");

puts("choose which information do you want to modify,or press '0' to exit:

");

scanf("%d",&t);

if(t<0||t>4)

{

w2=1;

getchar();

}

else

w2=0;

}while(w2==1);

 

开始

 

运行 m=load()函数,

加载现有联系人信息,

并显示所有用户信息

 

输入 n

 

判断 n 是否在

0~15 中

Y

根据 n 的值调用相

应功能模块

N

 

N

n 是否等于 0

 

输入 t

8

C 语言课程设计报告

 

Y

 

N

 

Y

 

图五 修改联系人模块流程图

if(t==1)

modify_name(n,m);/*修改姓名函数,n 为要修

改的联系人编号;m 为总联系人数*/

if(t==2)

modify_tel(n,m);/*修改电话函数,n 为要修改

的联系人编号;m 为总联系人数*/

if(t==3)

modify_type(n,m);/*修改类型函数,n 为要修

改的联系人编号;m 为总联系人数*/

if(t==4)

modify_email(n,m);/*修改 Email 函数,n 为要修

改的联系人编号;m 为总联系人数*/

if(t==0)

menu();

}

7. 删除联系人模块

[需求分析]

该模块首先显示现有所有联系人,显示完成后,用户输入要删除的联系人序号。

删除

方式是将数据从结构体中删除,然后将后面的记录向前移。

删除之后将记录保存至文件中。

[程序]

9

C 语言课程设计报告

void del()

{

int m,n,w1,w2,t,i;

m=load();

puts("there follows all the informations:

\t");

printf_all(m);

do

{

puts("please input the number that you want to delete:

[ ]\b\b");

scanf("%d",&n);

if(n<0||n>m)

{

w1=1;

getchar();

}

else

w1=0;

}while(w1==1);

do/*用 do while 语句控制用户的输入,使用户只能输入 1 或者 2*/

{

puts("you want to delete this information:

");

printf_one(n);

puts("\nAre you sure to delete?

1,yes2,no");

scanf("%d",&t);

开始

 

运行 m=load();加载现有联系人

信息;并显示所有联系人信息

 

输入要删除的联系人序号 n

 

判断 0﹤n≤m 是

否成立

Y

显示用户要删除的

联系人的所有信息

N

 

用户是否确认

删除

N

10

C 语言课程设计报告

 

Y

删除数据,并运行 move 函数,

将删除位置后面的数据前移

 

运行 save 函数,将

信息保存至文件中

 

返回至主菜单

 

结束

图六 删除联系人模块

if(t<1||t>2)

{

w2=1;

getchar();

}

else

w2=0;

}while(w2==1);

if(t==2)

{

puts("information not deleted!

Press any key to back to menu\n");

getchar();

system("pause");

menu();

}

if(t==1)

{

for(i=0;i<20;i++)

mem[n-1].name[i]='\0';

for(i=0;i<11;i++)

mem[n-1].tel[i]='\0';

mem[n-1].type=0;

for(i=0;i<30;i++)

mem[n-1].email[i]='\0';

move(n,m);

puts("information deleted!

Press any key to back to menu\n");

getchar();

11

C 语言课程设计报告

system("pause");

menu();

}

}

8. 公共函数

一下为各模块中可能用到的一些公共函数。

(1) 加载联系人信息函数:

int load()

[说明]

该函数用于将文件中的数据加载至结构体中,并且可以返回现有联系人的数目。

[程序]

int load()

{

FILE *fp;

int i,j;

if((fp=fopen("E:

\\vcprogrammes\\members.txt","rb"))==NULL)/*以只读方式打开一

个二进制文件*/

{

printf("\ncannot find information");

}

for(i=0;(!

feof(fp))&&(i

fread(&mem[i],sizeof(struct member),1,fp);/*将文件中的数据加载至结构体中*/

fclose(fp);/*关闭文件*/

for(j=0;((strcmp(mem[j].name,"\0"))!

=0)&&(j

来判断联系人数量*/

return(j);/*返回现有联系人数量*/

}

(2) 保存所有联系人函数:

void save(int m)

[说明]

该函数形参 m 表示现有结构体中最后一个元素的下标。

该函数主体如下

[程序]

void save(int m)/*m 表示现有结构体中最后一个元素的下标*/

{

if(m==0)/*当 m=0,即只有一个元素时,进入 save_1 函数,对文

件进行只写操作*/

save_1();

else

{

save_1();/*当 m>0 时,首先进入 save_1 函数,新建一个文件,同

时把 mem[0]的数据保存;然后进入 save_2 函数,将 mem[1]到 mem[m]的数据追加至文件

中*/

save_2(m);

12

C 语言课程设计报告

}

}

该包含两个子函数:

void save_1()和 void save_2(int m),当结构体中只有一个元素,即 m=0

时,只执行第一个函数,新建一个文件并将数据存入文件中;如果结构体中多于一个元素,

即 m>0 时,首先执行第一个函数新建一个文件,然后执行第二个函数,将结构体中下标大

于 0 的数据存入文件中。

[程序]

void save_1()

{

FILE *fp;

if((fp=fopen("E:

\\vc programmes\\members.txt","wb"))==NULL)

{

printf("\ncannot find information");

}

fwrite(&mem[0],sizeof(struct member),1,fp);

fclose(fp);

}

[程序]

void save_2(int m)

{

int i;

FILE *fp;

if((fp=fopen("E:

\\vc programmes\\members.txt","ab"))==NULL)

{

printf("\ncannot find information");

}

for(i=1;i<=m;i++)

fwrite(&mem[i],sizeof(struct member),1,fp);

fclose(fp);

}

(3) 显示所有联系人函数:

void printf_all(int m)

[说明

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1