




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目报告书项目名称:通讯录管理系统设计 学生姓名: 学 号: 班 级: 指导教师: 日期 2012.6.21一、 课程设计目的本课程设计让学生通过查询资料自学,将本学期课本上的理论知识和实践结合起来,为学生提供了一个既动手又动脑,亲身实践的机会。锻炼学生分析编程问题和解决问题的能力,提高学生查询错误,修改错误及实践编程的能力,使学生对C+系统编程有一个更深刻的了解。二、需求分析本系统设计者力求根据通讯管理的需要,而建立一个“通讯管理系统”,以方便对每个人通讯信息的各项管理操作。开发目的如下:能对通讯录进行录入和修改;能对通讯录进行添加和删除;能按姓名对通讯录进行查询;能按姓名删除通讯录条目。三、课程设计的内容及步骤1设计说明(1)定义一个结构体,其中的成员如下:序号成员名(字段名)数据类型字段含义1szName20char姓名2szMobil15char移动电话号码3szTel15char固定电话号码4*szpMenuchar主菜单选项5NUMvoid人数定义(2)定义多个函数以实现各个功能:1)主函数main():定义通讯处理函数,调用输入、统计等函数对通讯录进行处理;2)用户选择函数:SelMenuItem():根据用户选择,返回用户选择序号;3)创建通讯录函数CreatAddreBook():输入多条通讯录条目,以姓名项回车作为结束;4)显示通讯录函数ShowIternofBook ():显示链表中通讯录的一个结点;5)查询函数QuerByName ():按姓名在链表中查询并显示;6)通讯录修改函数ModifyItern():在链表中按姓名修改其中的电话号码,不修改则直接按回车键; 7)通讯录添加函数AppendItern ():在链表尾部添加新的通讯录条目; 8)删除通讯录条目函数DeleteItern ():按姓名删除条目; 9)读文件函数ReadData():从文件中读入数据,并建立链表,写入数据。(3)预先录入的数据如下表:szName20szMobil15szTel15*szpMenu兰欣182541683452程序流程图3部分程序说明:fwrite():文件输出函数4源程序/* 班级: 姓名: 学号: /*避免头文件多重包含*/#include#include#include/*定义通信录数据结构*/struct AddressBookchar szName20;char szMobil15;char szTel15;struct AddressBook *next;typedef struct AddressBook ADDRESBOOK;typedef struct AddressBook *PADDRESBOOK;/*主菜单选项*/char *szpMenu=1.通讯录创建,2.通讯录显示,3.通讯录查询,4.通讯录修改,5.通讯录添加,6.通讯录删除,7.退出系统;/*主菜单定义选择码定义*/#define CREATADDREBOOK 0#define SHOWWADDREBOOK 1#define QUERNADDREBOOK 2#define MDOIFADDREBOOK 3#define APPENADDREBOOK 4#define DELETADDERBOOK 5#define EXITWADDERBOOK 6/*函数原型声明*/int SelMenuItem(void);int CreatAddreBook(PADDRESBOOK);PADDRESBOOK ShowItemofBook(PADDRESBOOK);PADDRESBOOK QuerByName(PADDRESBOOK,char *);PADDRESBOOK ModifyItem(PADDRESBOOK,char *);PADDRESBOOK AppendItem(PADDRESBOOK);PADDRESBOOK DeleteItem(PADDRESBOOK,char *);int ReadData(PADDRESBOOK,FILE *);#include my.hvoid main(void)PADDRESBOOK pHead=NULL;PADDRESBOOK pTail=NULL; /*链表的头尾指针*/PADDRESBOOK pCurr=NULL; /*当前指针*/int iMenuId; /*菜单选项标志*/int iExitFlag;/*系统退出标志*/int iNewFileFlag;/*文件存在标志*/int iNumOfItem; /*记录结点数,存放于文件的第一项*/int i;char szTempBuf20=0;FILE *fp;iNewFileFlag=0;iExitFlag=0;iNumOfItem=0;/*尝试打开已存在的通讯录文件*/fp=fopen(addbook.dat,rb);if(fp=NULL)iNewFileFlag=1;/*End of if*/elsepHead=(PADDRESBOOK)malloc(sizeof(ADDRESBOOK);pHead-next=NULL;iNumOfItem=ReadData(pHead,fp);fclose(fp);do/*主界面循环*/system(cls);printf(*n);printf(* 欢迎使用通讯录管理系统! *n);printf(* 系统选项: *n);printf(*n);for(i=0;inext=NULL;iNumOfItem=CreatAddreBook(pHead);iNewFileFlag=0;/*End of else*/break;case SHOWWADDREBOOK:if(iNewFileFlag=1)system(cls);printf(*通讯录不存在,按任意键返回,选择建立选项!*n);getchar();break;/*End of if*/elsepCurr=pHead-next;system(cls);printf(*通讯录*n);printf( 姓 名 移动电话号码 固定电话号码n);for(i=0;inext;/*End of for*/printf(按任意键返回);getchar();/*End of else*/break;case QUERNADDREBOOK:if(iNewFileFlag=1)system(cls);printf(*通讯录不存在,按任意键返回,选择建立选项!*n);getchar();break;/*End of if*/elsepCurr=pHead-next;system(cls);printf(*姓名查询*);printf(输入姓名:);gets(szTempBuf);pCurr=QuerByName( pCurr,szTempBuf);if(pCurr=NULL)printf(查无此人!按任意键返回n);/*End of if*/elseprintf(姓名:%-s 移动电话号码:%-s 固定电话号码: %-sn,pCurr-szName,pCurr-szMobil,pCurr-szTel);printf(按任意键返回!);/*End of else*/*End of else*/getchar();break;case MDOIFADDREBOOK:if(iNewFileFlag=1)system(cls);printf(*通讯录不存在,按任意键返回,选择建立选项!*n);getchar();break;/*End of if*/elsepCurr=pHead-next;system(cls);printf(*修改密码*);printf(输入需要修改的姓名:);gets(szTempBuf);pCurr=ModifyItem(pCurr,szTempBuf);if(pCurr=NULL)printf(通讯录中无此人!n);/*End of if*/*End of else*/printf(按任意键返回!);getchar();break;case APPENADDREBOOK:if(iNewFileFlag=1)system(cls);printf(*通讯录不存在,按任意键返回,选择建立选项!*n);getchar();break;/*End of if*/elsepCurr=pHead-next;system(cls);printf(*添加新联系人*);pTail=AppendItem(pCurr);if(pTail!=NULL)iNumOfItem+;/*End of if*/*End of else*/printf(按任意键返回!);getchar();break;case DELETADDERBOOK:if(iNewFileFlag=1)system(cls);printf(*通讯录不存在,按任意键返回,选择建立选项!*n);getchar();break;/*End of if*/elsepCurr=pHead;system(cls);printf(*删除联系人*);printf(输入需要删除联系人的姓名:);gets(szTempBuf);pCurr=DeleteItem(pCurr,szTempBuf);if(pCurr=NULL)printf(无此联系人,按任意键返回!n);/*End of if*/elseiNumOfItem-;printf(成功删除按任意键返回!);/*End of else*/*End of else*/getchar();break;case EXITWADDERBOOK:iExitFlag=1;if(iNewFileFlag=1)break;fp=fopen(addbook.dat,wb);if(fp=NULL)printf(通讯录存盘错误,按任意键退出!);getchar();break;/*End of if*/elsepCurr=pHead-next;/*写入结点数*/fwrite(&iNumOfItem,sizeof(int),1,fp);while(pCurr!=NULL)fwrite(pCurr,sizeof(ADDRESBOOK),1,fp);pTail=pCurr-next;free(pCurr);pCurr=pTail;/*End of while*/fclose(fp);/*End of else*/break;default:system(cls);printf(*选项错误!*n);printf( 按任意键重新选择! n);getchar();break;/*End of switch*/while(iExitFlag!=1);/*End of do-while*/system(cls);printf(*按任意键退出,谢谢使用!*);getchar();/*功能:主菜单处理函数,返回选择项序号。*函数名:SelMenuItem*参数:void*返回值:主菜单选择序号 int 类型*/int SelMenuItem(void)char szBuff10;gets(szBuff);return atoi(szBuff)-1;/*功能:显示一项通讯录内容*函数名:ShowItemofBook*参数:显示节点指针 PADDRESBOOK类型*返回值:下一结点地址 PADDRESBOOK类型*/PADDRESBOOK ShowItemofBook(PADDRESBOOK p)printf(%10s%15s%15sn,p-szName,p-szMobil,p-szTel);return p-next;/*功能: 按姓名域查找*函数名:QuerByName*参数:链表头指针 PADDRESBOOK类型* 待查姓名 字符指针*返回值:查找地址 PADDRESBOOK类型*/PADDRESBOOK QuerByName( PADDRESBOOK p,char *szpName)PADDRESBOOK pQuer;PADDRESBOOK pTemp;pQuer=NULL;pTemp=p;while(pTemp!=NULL)if(strcmp(szpName,p-szName)=0)pQuer=p;break;/*End of if*/p=p-next;pTemp=p;/*End of while*/return pQuer;/*功能:修改指定姓名的数据项*函数名:ModifyItem*参数:链表首地址 PADDRESBOOK类型*返回值:修改项地址 PADDRESBOOK类型*/PADDRESBOOK ModifyItem(PADDRESBOOK p,char *szpName)PADDRESBOOK pModi;PADDRESBOOK pTemp;char szBuff20;pModi=NULL;pTemp=p;while(pTemp!=NULL)if(strcmp(szpName,p-szName)=0)pModi=p;printf(修改%s的通讯录n,p-szName);printf(重新输入姓名:);gets(szBuff);if(szBuff0!=0)strcpy(p-szName,szBuff);/*End of if*/printf(重新输入移动电话号码:);gets(szBuff);if(szBuff0!=0)strcpy(p-szMobil,szBuff);/*End of if*/printf(重新输入固定电话号码:);gets(szBuff);if(szBuff0!=0);strcpy(p-szTel,szBuff);/*End of if*/break;/*End of if*/p=p-next;pTemp=p;/*End of while*/return pModi;/*功能:在尾部添加数据项*函数名:AppendItem*参数:头指针 PADDRESBOOK类型*返回值:尾指针 PADDRESBOOK类型*/PADDRESBOOK AppendItem(PADDRESBOOK p)PADDRESBOOK pTail;pTail=NULL;/*搜索尾结点*/while(p-next!=NULL)p=p-next;/*End of while*/pTail=(PADDRESBOOK)malloc(sizeof(ADDRESBOOK);p-next=pTail;printf(输入姓名:);gets(pTail-szName);printf(输入移动电话号码:);gets(pTail-szMobil);printf(输入固定电话号码:);gets(pTail-szTel);pTail-next=NULL;return pTail;/*功能: 删除指定姓名的数据项*函数名:DeleteItem*参数:数据结点的头指针 PADDRESBOOK类型*返回值:删除前驱结点指针 PADDRESBOOK类型*/PADDRESBOOK DeleteItem(PADDRESBOOK p,char *szpName)PADDRESBOOK pCurr;PADDRESBOOK pTemp;PADDRESBOOK pNext;pCurr=NULL;pTemp=NULL;pNext=p;while(pNext!=NULL)if(strcmp(p-next-szName,szpName)=0)pCurr=p;pTemp=p-next;p-next=p-next-next;free(pTemp);break;/*End of if*/p=p-next;pNext=p;/*End of while*/return pCurr;/*功能:从文件读数据到链表*函数名:ReadData*参数:链表头指针 PADDRESBOOK类型* 文件指针 FILE* 类型*返回值: 结点个数 int 类型*/int ReadData(PADDRESBOOK p,FILE *fp)PADDRESBOOK pTail;PADDRESBOOK pCurr;int iNum;int i;/*从文件读结点数*/fread(&iNum,sizeof(int),1,fp);for(i=0;inext=pTail;p=pTail;/*End of for*/pTail-next=NULL;return iNum;int CreatAddreBook(PADDRESBOOK p)PADDRESBOOK pTail;PADDRESBOOK pCurr;int iNumOfItem;char szTempBuf20;pTail=p;pCurr=p;iNumOfItem=0;while(1)printf(输入姓名:);gets(szTempBuf);if(szTempBuf0=0)break;pTail=(PADDRESBOOK)malloc(sizeof(ADDR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新解读《CB-T 3895-1999船用柴油机清洁度测量方法》新解读
- 新解读《CB-T 3850 - 1999船用分流式离心润滑油滤器》新解读
- 第18课 科技文化成就 课件 人教版部编八年级下册历史
- 汽车传感器与检测技术电子教案:组合式加速度传感器
- Brand KPIs for neobanking N26 in the United States-英文培训课件2025.4
- 汽车传感器与检测技术电子教案:开关式节气门位置传感器
- 单位管理量化管理制度
- 地面危险作业管理制度
- 介绍校园活动方案
- 仓库包装比赛活动方案
- 会计领军考试题库及答案
- 会计领军人才试题及答案
- 前期物业服务合同解除权法律问题研究
- (广东省卷)2025年中考考前最后一卷生物试卷(含答案)
- 多校下学期期中考试八年级语文试卷(PDF版含答案)-1
- 五下语文第五单元测试卷及答案
- 四川省石室中学2024-2025学年高二数学第二学期期末调研试题含解析
- 牡丹江市西安区乡镇卫生院招聘医学毕业生笔试真题2024
- DB32/T 3940-2020公路桥梁健康监测系统数据库架构设计规范
- 第六单元综合性学习《以和为贵》课件-2024-2025学年统编版语文八年级下册
- 2025年计算机Photoshop图像编辑试题及答案
评论
0/150
提交评论