手机通信录管理系统设计C语言课程设计.docx
- 文档编号:9764250
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:45
- 大小:192.18KB
手机通信录管理系统设计C语言课程设计.docx
《手机通信录管理系统设计C语言课程设计.docx》由会员分享,可在线阅读,更多相关《手机通信录管理系统设计C语言课程设计.docx(45页珍藏版)》请在冰豆网上搜索。
手机通信录管理系统设计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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 手机 通信 管理 系统 设计 语言 课程设计