C课程设计报告个人通信录管理系统.docx

上传人:b****4 文档编号:24278850 上传时间:2023-05-26 格式:DOCX 页数:34 大小:444.18KB
下载 相关 举报
C课程设计报告个人通信录管理系统.docx_第1页
第1页 / 共34页
C课程设计报告个人通信录管理系统.docx_第2页
第2页 / 共34页
C课程设计报告个人通信录管理系统.docx_第3页
第3页 / 共34页
C课程设计报告个人通信录管理系统.docx_第4页
第4页 / 共34页
C课程设计报告个人通信录管理系统.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

C课程设计报告个人通信录管理系统.docx

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

C课程设计报告个人通信录管理系统.docx

C课程设计报告个人通信录管理系统

安徽工业大学

程序实习综合实习报告

 

课题名称:

个人通讯录管理系统

实习成员:

姓名

学号

贡献率(%)

e-mail

组长

成员

 

专业班级:

指导教师:

 

2011年12月10日

课题名称:

个人通讯录管理系统

设计要点:

建立一通讯录,输入姓名、电话号码、住址等信息,然后对通信簿进行显示、查找、添加、修改及删除。

功能要求

(1)通讯录的每一条信息包括姓名、单位、固定电话、移动手机、分类(如同事、朋友、同学、家人等)、EMAIL、QQ等。

(2)输入功能:

可以一次完成若干条信息的输入。

(3)显示功能:

完成全部通讯录信息的显示(一屏最多显示10条,超过十条应能够自动分屏显示)

(4)查找功能:

可以按姓名等多种方式查找通讯信息

(5)增加、删除、修改功能:

完成通讯录信息的多种更新

系统整体设计:

一.主函数设计:

其功能实现从屏幕输出6个选择:

1、添加信息;2、删除信息;3、修改信息;4、查询信息;5、显示信息;6、保存;0、退出程序。

这样,便可以从中选择出一项对通讯录进行操作。

二.信息添加功能设计:

该模块通过Tianjia();函数实现,可以从键盘输入通讯录的各项信息。

三.信息查询功能设计:

该模块通过Chaxun();函数实现,从键盘输入需要查询的姓名或手机号,便可以显示出其他全部信息。

四.信息删除功能设计:

该模块通过Shanchu();函数实现,输入所需要删除人的姓名,便可以从通讯录中删除其全部信息。

五.信息修改功能:

该模块通过Xiugai();函数实现,输入所需要修改人的姓名,屏幕便显示其全部信息,根据提示,输入所需要修改的信息,便完成信息的修改。

六.信息显示功能设计:

该模块通过Xianshi();函数实现,选择信息显示菜单,便可以显示全部通讯录信息。

菜单设计:

系统流程图:

1、添加联系人函数(voidtianjia())

●定义指向结构体的指针;

●移动指针,使其指向最后一个节点,准备插入下一个联系人信息;

●依次输入编号、姓名、固定电话、移动手机、单位、QQ、email、分类;

 

2、删除联系人函数(voidshanchu(structperson*)

●定义指向结构体的指针;

●检验链表中是否有记录。

若无记录,则返回;

●根据者姓名查找要删除的联系人;

●输入联系人姓名,删除对应结点。

3、修改联系人函数(voidxiugai())

●定义指向结构体的指针;

●检验链表中是否有记录。

若无记录,则返回;

●根据姓名查找要修改的联系人;

●修改信息(可选择是否修改部分信息);

4、查询联系人信息函数(voidfind(structperson*))

●检验链表中是否有记录。

若无记录,则返回;

●根据编号、姓名或固定电话三种方式查找要联系人;

●调用函数在链表中查找相应结点;

●调用显示联系人函数,输出结点信息。

5、显示联系人函数(voidprint())

●定义指向结构体的指针;

●检验是否有记录。

若无记录,则返回;若有记录,移动指针,依次输出记录;

6、保存联系人信息函数(voidsave(structperson*))

●定义指向结构体的指针;

●以读写方式打开一个文本文件;

●若打开错误,则返回;若成功,则逐条输出联系人信息:

●关闭文件;

程序运行结果:

主菜单显示,选择其中一项可对通信录进行操作。

选择添加联系人,依次输入编号、姓名、固定电话、移动手机、单位、email、QQ、分类各个信息。

添加联系人结束后,输入0可返回主菜单。

返回主菜单后,选择5显示所有联系人,便可以查看到已输入的所有的联系人信息。

在主菜单选择4查询联系人,便可以通过1编号查询、2姓名查询、3固定电话查询三种方式查询所要找的联系人的信息。

查询联系人时,当输入有误时,会有提示出现,提示输入有误,请重新输入。

当查询的人的信息在通讯录中不存在时,界面上会显示通讯录中无此人。

当选择主菜单中的3修改联系人时,系统会提示首先通过姓名查找到联系人,输入姓名后,查找到联系人,并显示出来,依次可选择修改除编号以为的其他联系人的信息,选择1是,便可以修改该项信息,2否,则是不修改。

当输入不是1或2而是其他数字时,系统就会提示输入有误,请重新输入。

当在主菜单中选择2删除联系人时,系统会提示1通过姓名删除,输入1时,可通过姓名查找到联系人,便可以进行删除操作,当输入的是0时,则可以返回主菜单。

删除联系人之前,系统会提示是否确定删除联系人,选择1是或2否,当输入其他数字时,系统会提示输入有误,请重新输入。

删除成功后按任意键便可返回主菜单。

完成一切操作后,选择6保存,便可以保存所建立的通讯录。

选择0退出系统,便可以退出本系统。

总结:

在编写代码时,本程序运用的是结构体指针,建立单链表,此部分的内容较难,本程序参考书上的内容和一些资料。

通过本次课程设计,我们认识到自己还存在很多不足,还需要在编程的道路上多经历一些风雨,多编写程序,多多磨练自己。

当我们遇到问题是,需要戒骄戒躁,仔细耐心的检查错误,学会对程序进行调试。

当自己的一个人的能力有限时,应该多问问他人,并且要学会与别人合作,这样便可以为以后自己真正编写大的软件打下一个好的基础。

源代码:

main

#include

#include

#include

#include"printhead.c"

#include"formatprint.c"

#include"chaxun.c"

#include"xianshi.c"

#include"shanchu.c"

#include"tianjia.c"

#include"xiugai.c"

#include"save.c"

/************************************自定义函数说明*********************************/

voidmain();/*主函数*/

structperson*creat();/*创建链表*/

voidtianjia();/*插入一结点,输入联系人信息*/

voidformatprint();/*格式化输出*/

voidprinthead();/*输出表头*/

voidxianshi();/*输出所有单链表中的数据*/

voidxiugai();/*修改通讯记录*/

voidshanchu(structperson*);/*根据编号或者名字分别调用以下两个函数*/

voidshanchuchubyname(structperson*);/*通过姓名删除联系人*/

voidchaxun(structperson*);/*查找功能。

调用后根据查找方式编号或姓名分别调用以下两个函数*/

structperson*chaxunbynum();/*通过编号查找并输出联系人*/

structperson*chaxunbyname();/*通过名字查找并输出联系人*/

structperson*chaxunbyphone();/*通过固定电话查找并输出联系人*/

voidmenu();/*主菜单界面*/

voidbaocun(structperson*);/*数据保存。

若用户没有保存数据但对数据进行了修改,在退出系统时,会提示用户是否保存*/

voidstringinput();/*字符串输入*/

voidmenu()/*主菜单界面*/

{

printf("\3通讯录\3\n\n");

printf("\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3目录\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");

printf("\31添加联系人2删除联系人\3\n");

printf("\33修改联系人4查询联系人\3\n");

printf("\35显示所有联系人6保存\3\n");

printf("\30退出系统\3\n");

printf("\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");

}

structperson*creat()/*创建链表*/

{

structperson*head;

head=(structperson*)malloc(sizeof(structperson));

if(!

head)

{

printf("\n不能申请到内存空间,返回主菜单\n");

returnNULL;/*返回主菜单*/

}

head->next=NULL;

printf("空间创建成功,您可以使用本系统\n");

return(head);

}

voidmain(void)

{

intselect;/*选择功能变量*/

intselect_saver;/*是否保存变量*/

structperson*head;

head=creat();

system("color52");

while(head)

{

menu();

printf("\n请选择<0~6>:

");

scanf("%d",&select);

if(!

select)

{

if(saver==1)/*若对链表的数据有修改且未进行保存,则此标志为1*/

{

printf("\n是否保存文件?

(1(是)/2(否)):

");

scanf("%d",&select_saver);

while(select_saver!

=1&&select_saver!

=2)

{printf("输入错误,请重新输入!

\n");

printf("\n是否保存文件?

(1(是)/2(否)):

");

scanf("%d",&select_saver);

}

if(select_saver==1)

baocun(head);

}

break;

}

switch(select)

{

case1:

tianjia(head);break;/*添加联系人*/

case2:

shanchu(head);break;/*删除联系人*/

case3:

xiugai(head);break;/*修改联系人*/

case4:

chaxun(head);break;/*查询联系人*/

case5:

xianshi(head);break;/*显示联系人*/

case6:

baocun(head);break;/*保存联系人*/

default:

printf("\n*输入错误!

请重新输入*\n");break;

}

}

system("pause");

}

formatprint

#defineLENGTH_NUM4

#defineLENGTH_NAME10

#defineLENGTH_PHONE10

#defineLENGTH_MOBILEPHONE15

#defineLENGTH_ADDRESS10

#defineLENGTH_EMAIL20

#defineLENGTH_QQ15

#defineLENGTH_KIND10

structperson/*定义结构体类型person*/

{

charnum[LENGTH_NUM];/*联系人编号*/

charname[LENGTH_NAME];/*联系人姓名*/

charphone[LENGTH_PHONE];/*联系人固定电话号码*/

charmobilephone[LENGTH_MOBILEPHONE];/*联系人移动电话*/

charaddress[LENGTH_ADDRESS];/*联系人地址*/

charemail[LENGTH_EMAIL];/*联系人电子邮箱*/

charqq[LENGTH_QQ];/*联系人QQ*/

charkind[LENGTH_KIND];/*联系人分类*/

structperson*next;/*下一个节点*/

};

voidformatprint(structperson*node)/*格式化输出*/

{

structperson*pt=node;

printf(FORMAT,DATA);

}

printhead

#defineHEAD1"-----------------------------所有通讯记录--------------------------------------\n"

#defineHEAD2"|编号|姓名|固定电话|移动手机|单位|邮箱|QQ|分类|\n"

#defineHEAD3"|----|--------|---------|-----------|----|-----------------|-----------|-------|\n"

#defineFORMAT"|%-4s|%-8s|%-9s|%-11s|%-4s|%-17s|%-11s|%-7s\n"

#defineDATApt->num,pt->name,pt->phone,pt->mobilephone,pt->address,pt->email,pt->qq,pt->kind

#defineEND"--------------------------------------------------------------------------------\n"

voidprinthead()/*输出表头*/

{

printf(HEAD1);

printf(HEAD2);

printf(HEAD3);

}

tianjia

voidtianjia(structperson*node)

{

structperson*p,*pt=node,*ptr=node->next;

intflag=0;

charnummber[LENGTH_NUM];

xianshi(node);/*显示已有的联系人信息*/

while(pt->next!

=NULL)/*将指针移指向链表末尾,准备添加联系人*/

pt=pt->next;

while(node)/*可输入多个联系人,直至输入的编号为0时,结束添加联系人*/

{

while(node)

{

stringinput(nummber,LENGTH_NUM,"<按'0'返回主菜单>请输入编号:

");

flag=0;

if(!

strcmp(nummber,"0"))/*若输入为0,则退出添加联系人操作,返回主菜单*/

return;

ptr=node->next;

while(ptr)/*查询该编号是否已经存在,若存在则要求重新输入*/

{

if(!

strcmp(ptr->num,nummber))

{

flag=1;

break;

}

ptr=ptr->next;

}

if(flag==1)/*提示用户是否重新输入*/

printf("编号%s已经存在\n",nummber);

else

break;

}

p=(structperson*)malloc(sizeof(structperson));

if(!

p)

{

printf("\n不能申请到内存空间,返回主菜单\n");

return;

}

strcpy(p->num,nummber);

stringinput(p->name,LENGTH_NAME,"姓名:

");

stringinput(p->phone,LENGTH_PHONE,"固定电话:

");

stringinput(p->mobilephone,LENGTH_MOBILEPHONE,"移动手机:

");

stringinput(p->address,LENGTH_ADDRESS,"单位:

");

stringinput(p->email,LENGTH_EMAIL,"email:

");

stringinput(p->qq,LENGTH_QQ,"QQ:

");

stringinput(p->kind,LENGTH_KIND,"分类:

");

p->next=NULL;/*添加结束*/

pt->next=p;/*将新建的结点接入原链表尾部*/

pt=p;

saver=1;/*数据保存变量被开启,说明对数据进行了修改*/

}

}

shanchu

intsaver;/*是否需要保存的标志全局变量*/

voidshanchu(structperson*node)/*根据名字分别调用以下两个函数*/

{

intm;

voidshanchubyname(structperson*);/*函数声明*/

if(!

node->next)

{

printf("\n无通讯记录!

\n");

return;

}

printf("1:

通过姓名删除,请按1\n");

printf("<返回主菜单,请按'0'>:

");

scanf("%d",&m);/*输入1调用以下函数*/

if(m==1)

shanchubyname(node);/*通过姓名删除联系人*/

elseif(m==0)

return;

else

{printf("输入有误,返回主菜单!

");

return;}

}

voidshanchubyname(structperson*node)/*通过姓名删除联系人*/

{

structperson*p=node,*pt;

intflag;

printf("删除联系人:

\n");

p=chaxunbyname(p);

if(p)

{

printf("确定删除该联系人吗?

(1(是)/2(否))");

scanf("%d",&flag);

while(flag!

=1&&flag!

=2)

{

printf("输入错误,请重新输入!

\n");

printf("确定删除该联系人吗?

(1(是)/2(否))");

scanf("%d",&flag);

}

if(flag==1)

{

pt=node;

while(pt->next!

=p)

pt=pt->next;

pt->next=p->next;

free(p);/*释放p节省空间*/

printf("\n删除联系人成功!

\n");

saver=1;/*数据保存变量被开启,说明对数据进行了修改*/

system("pause");

}

}

}

Chaxun

voidstringinput(char*str,unsignedintlength,char*caution)/*字符串输入*/

{

charstring[255];

do

{

printf(caution);/*提示信息*/

scanf("%s",string);

if(strlen(string)>length)

printf("\n超过指定长度!

请重新输入\n");

}while(strlen(string)>length);

strcpy(str,string);

}

voidchaxun(structperson*node)/*查找功能。

调用后根据查找方式编号或姓名分别调用以下两个函数*/

{

structperson*chaxunbynum(structperson*);/*函数声名*/

structperson*chaxunbyname(structperson*);/*函数声名*/

structperson*chaxunbyphone(structperson*);/*函数声名*/

intm;

if(!

node->next)/*链表为空*/

{

printf("\n无通讯记录!

\n");

return;

}

printf("1:

通过编号查找,请按1\n");

printf("2:

通过姓名查找,请按2\n");

printf("3:

通过固定电话查找,请按3\n");

printf("<返回主菜单,请按'0'>:

");

scanf("%d",&m);/*输入1,2,3分别调用以下两个函数*/

switch(m)

{

case1:

chaxunbynum(node);break;/*通过编号查找并输出联系人*/

case2:

chaxunbyname(node);break;/*通过姓名查找并输出联系人*/

case3:

chaxunbyphone(node);break;/*通过固定电话查找并输出联系人*/

case0:

break;

default:

{

printf("输入错误,请重新输入:

\n");

chaxun(node);

}

}

}

structperson*chaxunbynum(structperson*node)/*通过编号查找并输出联系人*/

{

charnummber[LENGTH_NUM];

structperson*p=node->next;

stringinput(nummber,LENGTH_NUM,"请输入编号:

");

while(p)

{

if(strcmp(p->num,nummber)==0)/*找到nummber对应的编号*/

break;/*跳出*/

p=p->next;

}

printf(HEAD2);

printf(HEAD3);

if(p)

{

formatprint(p);

printf(END);

}

else

printf("\n通讯录中无此人!

\n");

returnp;

}

structperson*chaxunbyname(structperson*node)/*通过名字查找并输出联系人*/

{

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

当前位置:首页 > 工程科技 > 电力水利

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

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