




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、课题名称简易手机通讯录管理系统(线性表、查找、排序)二、主要内容简易手机通讯录管理系统的设计主要是实现对手机通讯录的管理和相关操作。基本功能如下:(1)联系人信息录入、添加功能:包括手机号(此处用短号,5位,不能重复)、姓名、家庭住址的录入和添加。(2)联系人信息查询功能:能①按手机号进行查询。②按联系人姓名进行查询。(3)排序:①能按手机号升序进行排序;②能按姓名进行升序排序,姓名相同时按手机号从小到大进行排序(4)联系人信息的修改、删除功能:①按手机号进行联系人信息的修改和删除。②按姓名进行联系人信息的修改和删除,多个姓名时,再指定具体的号码。(5)统计功能:统计自己的联系人有多少个。三、课题设计的基本思想,原理和算法描述本次课程设计题目为简易手机通讯录管理系统,主要运用到线性表中顺序表的相关知识,以及顺序查找的思想和冒泡排序算法。界面设计//菜单函数intmenu(){ intc; printf("\n\n\t☆☆☆☆☆☆☆手机通讯录信息管理系统☆☆☆☆☆☆☆☆\n\n"); printf("**********************************************************************\n"); printf(" 1.添加联系人信息\n"); printf(" 2.查询联系人信息\n"); printf(" 3.对联系人信息进行排序\n"); printf(" 4.修改联系人信息\n"); printf(" 5.删除联系人信息\n"); printf(" 6.统计联系人个数\n"); printf(" 0.退出信息管理系统\n"); printf("**********************************************************************\n\n"); printf("★请输入您的选择(0-6):"); while(1) { scanf("%d",&c); if(c<0||c>6) printf("\n▲输入错误!请重新选择:"); else break; } returnc;}//主函数voidmain(){ SqList*L; InitList(L); system("color3f"); while(1) { switch(menu()) { case1:system("cls");printf("\n\t\t\t信息的增加\n");ListAdd(L);break; case2:system("cls");printf("\n\t\t\t信息的查询\n");Search(L);break; case3:system("cls");printf("\n\t\t\t对信息进行排序\n");Paixu(L);break; case4:system("cls");printf("\n\t\t\t信息的修改\n");ListModify(L);break; case5:system("cls");printf("\n\t\t\t信息的删除\n");Delete(L);break; case6:system("cls");printf("\n\t\t\t统计联系人个数\n");ListLength(L);break; case0:printf("再见!\n");return; default:printf("\n▲输入错误!请重新选择:");break; } }}功能模块的实现初始化顺序表voidInitList(SqList*&L){ L=(SqList*)malloc(sizeof(SqList)); L->length=0;}增加信息函数。定义变量a起标记作用,用于判断输入信息是否与已有信息重复voidListAdd(SqList*&L)//增加函数{ inta=0;//标记 printf("1.号码(五位数字!):");scanf("%s",L->data[L->length].num); printf("2.姓名:");scanf("%s",L->data[L->length].name); printf("3.性别:");scanf("%s",L->data[L->length].sex); printf("4.家庭住址:");scanf("%s",L->data[L->length].add); for(inti=0;i<L->length;i++)//判断是否重号 { if(strcmp(L->data[i].num,L->data[L->length].num)==0) { printf("该号码已经存在\n"); a=1;break; } } if(a==0) L->length++;}查找符合条件的信息的下标并返回到需要调用的函数体中intFindNum(SqList*&L){ printf("★输入需要进行操作的号码:"); charnum[10]; scanf("%s",num); inti=0; while(i<L->length&&strcmp(L->data[i].num,num)!=0)i++; if(i>=L->length) { printf("不存在该联系人!\n"); } returni;}=4\*GB3④查询信息函数分两种情况:按号码查找与按姓名查找。由于号码唯一所以可以直接调用之前的查找下标函数。按姓名查找时则需要考虑到重名的情况,所以用一个for循环将所有符合条件的信息全部输出。voidSearch(SqList*&L){ if(L->length==0) { printf("通讯录此时为空,无法进行查找!\n"); } else { intm,i; printf("***************************************************************\n"); printf("\t\t1.按联系人号码进行查询\n"); printf("\t\t2.按联系人姓名进行查询\n"); printf("***************************************************************\n"); inta; printf("★请输入您的选择(1or2):"); scanf("%d",&a); switch(a) { case1: m=FindNum(L); if(m<L->length) { printf("您查询的信息如下\n"); printf("号码 姓名 性别 家庭住址\n"); printf("%s %s %s %s\n",L->data[m].num,L->data[m].name,L->data[m].sex,L->data[m].add); } break; case2: printf("★输入需要进行操作的姓名:"); charname[20]; scanf("%s",name); for(i=0;i<L->length;i++) { if(strcmp(L->data[i].name,name)==0) { printf("号码 姓名 性别 家庭住址\n"); printf("%s %s %s %s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].add); } else { printf("不存在该联系人\n"); } } break; default: printf("输入错误!"); break; } }}=5\*GB3⑤修改函数按号码修改时先调用之前查找下标的函数,找到符合条件的信息后直接输入信息将原有信息覆盖。按姓名修改时当只有一个信息符合条件时与按号码修改算法一样,当出现重名情况时提示用户选择相应的号码再调用按号码修改的算法。每一次修改都进行一次判断,判断修改后的信息是否与表中已有信息重复。voidListModify(SqList*&L){ if(L->length==0) { printf("通讯录此时为空,无法进行信息的修改!\n"); } else { intm,n; intb=0; printf("***************************************************************\n"); printf("\t\t1.按联系人号码进行修改\n"); printf("\t\t2.按联系人姓名进行修改\n"); printf("***************************************************************\n"); inta; printf("★请输入您的选择(1or2):"); scanf("%d",&a); switch(a) { case1: m=FindNum(L); if(m<L->length) { Telphonep; printf("号码 姓名 性别 家庭住址\n"); printf("%s %s %s %s\n",L->data[m].num,L->data[m].name,L->data[m].sex,L->data[m].add); printf("输入修改后的联系人信息:\n"); printf("号码 姓名 性别 家庭住址\n"); scanf("%s %s %s %s",p.num,,p.sex,p.add); for(intj=0;j<L->length;j++)//判断是否重号 { if(strcmp(L->data[j].num,p.num)==0) { printf("修改失败!(该号码已经存在)\n"); printf("重新输入修改后的联系人信息:\n"); printf("号码 姓名 性别 家庭住址\n"); scanf("%s %s %s %s",L->data[m].num,L->data[m].name,L->data[m].sex,L->data[m].add); printf("\n"); break; } else { L->data[m]=p; } } } break; case2: printf("★输入需要进行操作的姓名:"); charname[20]; inti; scanf("%s",name); for(i=0;i<L->length;i++) { if(strcmp(L->data[i].name,name)==0) { b++; } } if(b==0) { printf("不存在该联系人!\n"); } if(b==1) { for(inti=0;i<L->length;i++) { if(strcmp(L->data[i].name,name)==0) { Telphoneq; printf("再次确认需要修改的信息:\n"); printf("号码 姓名 性别 家庭住址\n"); printf("%s %s %s %s\n\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].add); printf("★输入修改后的联系人信息:\n"); printf("号码 姓名 性别 家庭住址\n"); scanf("%s %s %s %s",q.num,,q.sex,q.add); for(intj=0;j<L->length;j++)//判断是否重号 { if(strcmp(L->data[j].num,q.num)==0) { printf("修改失败!(该号码已经存在)\n"); printf("重新输入修改后的联系人信息:\n"); printf("号码 姓名 性别 家庭住址\n"); scanf("%s %s %s %s",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].add); printf("\n"); break; } else { L->data[i]=q; } } } } } if(b>1) { printf("符合条件的联系人有%d个!详细信息如下:\n",b); for(inti=0;i<L->length;i++) { if(strcmp(L->data[i].name,name)==0) { printf("号码 姓名 性别 家庭住址\n"); printf("%s %s %s %s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].add); } } printf("请根据以上显示出的信息选择对应的号码进行修改!\n"); n=FindNum(L); if(n<L->length) { Telphonet; printf("号码 姓名 性别 家庭住址\n"); printf("%s %s %s %s\n",L->data[n].num,L->data[n].name,L->data[n].sex,L->data[n].add); printf("输入修改后的联系人信息:\n"); printf("号码 姓名 性别 家庭住址\n"); scanf("%s %s %s %s",t.num,,t.sex,t.add); for(inti=0;i<L->length;i++)//判断是否重号 { if(strcmp(L->data[i].num,t.num)==0) { printf("修改失败!(该号码已经存在)\n"); printf("重新输入修改后的联系人信息:\n"); printf("号码 姓名 性别 家庭住址\n"); scanf("%s %s %s %s",L->data[n].num,L->data[n].name,L->data[n].sex,L->data[n].add); printf("\n"); break; } else { L->data[n]=t; } } } } break; default: printf("输入错误!"); break; } }}=6\*GB3⑥删除函数按号码删除时先查找到符合条件的信息,再用for循环将该信息后面的信息依次向前覆盖达到删除功能。按姓名删除信息时当出现重名情况时提示用户选择相应的号码再调用按号码删除的算法。voidDelete(SqList*&L)//删除函数{ if(L->length==0) { printf("通讯录此时为空,无法进行信息的删除!\n"); } else { intm,n; printf("***************************************************************\n"); printf("\t\t1.按联系人号码进行删除\n"); printf("\t\t2.按联系人姓名进行删除\n"); printf("***************************************************************\n"); inta;intb=0; printf("★请输入您的选择(1or2):"); scanf("%d",&a); switch(a) { case1: m=FindNum(L); if(m<L->length) { for(intj=m;j<L->length-1;j++) { L->data[j]=L->data[j+1]; } printf("信息已删除\n"); L->length--; } break; case2: printf("★输入需要进行操作的姓名:"); charname[20]; inti; scanf("%s",name); for(i=0;i<L->length;i++) { if(strcmp(L->data[i].name,name)==0) { b++; } } if(b==0) { printf("不存在该联系人!\n"); } if(b==1) { for(i=0;i<L->length;i++) { if(strcmp(L->data[i].name,name)==0) { printf("号码 姓名 性别 家庭住址\n"); printf("%s %s %s %s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].add); if(i<L->length) { for(intj=i;j<L->length-1;j++) { L->data[j]=L->data[j+1]; } printf("信息已删除\n"); L->length--; } } } } if(b>1) { printf("符合条件的联系人有%d个!详细信息如下:\n",b); for(i=0;i<L->length;i++) { if(strcmp(L->data[i].name,name)==0) { printf("号码 姓名 性别 家庭住址\n"); printf("%s %s %s %s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].add); } } printf("请根据以上显示出的信息选择对应的号码进行删除!\n"); n=FindNum(L); if(n<L->length) { for(intj=n;j<L->length-1;j++) { L->data[j]=L->data[j+1]; } printf("信息已删除\n"); L->length--; } } break; default: printf("输入错误!"); break; } }}=7\*GB3⑦排序函数采用冒泡排序的思想对号码进行排序。按姓名排序时若出现重名则按号码排序,算法体现在PaixuName函数中,先进行号码排序再进行姓名排序。voidPaixuNum(SqList*&L){ if(L->length==0) { printf("通讯录为空\n"); } else { inti,j; Telphonet; for(i=0;i<L->length-1;i++) { for(j=L->length-1;j>i;j--) { if(strcmp(L->data[j].num,L->data[j-1].num)<0) { t=L->data[j]; L->data[j]=L->data[j-1]; L->data[j-1]=t; } } } printf("按号码排序为:\n"); printf("号码\t姓名\t性别\t家庭住址\n"); for(i=0;i<L->length;i++) { printf("%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].add); } }}voidPaixuName(SqList*&L){ if(L->length==0) printf("通讯录为空\n"); else { inti,j; Telphonet; for(i=0;i<L->length-1;i++) { for(j=L->length-1;j>i;j--) { if(strcmp(L->data[j].num,L->data[j-1].num)<0) { t=L->data[j]; L->data[j]=L->data[j-1]; L->data[j-1]=t; } } } for(i=0;i<L->length-1;i++) { for(j=L->length-1;j>i;j--) { if(strcmp(L->data[j].name,L->data[j-1].name)<0) { t=L->data[j]; L->data[j]=L->data[j-1]; L->data[j-1]=t; } } } printf("按联系人姓名排序为:\n");printf("姓名\t号码\t性别\t家庭地址\n"); for(i=0;i<L->length;i++) { printf("%s\t%s\t%s\t%s\n",L->data[i].name,L->data[i].num,L->data[i].sex,L->data[i].add); } }}voidPaixu(SqList*&L){ if(L->length==0) { printf("通讯录此时为空,无法进行信息的排序!\n"); } else { inta; printf("***************************************************************\n"); printf("\t\t1.按联系人号码进行排序\n"); printf("\t\t2.按联系人姓名进行排序\n"); printf("***************************************************************\n"); printf("★请输入您的选择(1or2):"); scanf("%d",&a); switch(a) { case1:PaixuNum(L);break; case2:PaixuName(L);break; default:printf("输入错误!");break; } }}=8\*GB3⑧统计函数直接返回顺序表的长度voidListLength(SqList*&L){ printf("联系人总数为:%d\n",L->length);}(4)流程图初始化顺序表初始化顺序表添加信息按姓名查询按姓名删除按姓名修改按号码删除按号码修改按姓名排序按号码排序按号码查询统计信息删除信息修改信息信息排序查询信息按姓名查询按姓名删除按姓名修改按号码删除按号码修改按姓名排序按号码排序按号码查询统计信息删除信息修改信息信息排序查询信息图1设计框架图四、运行示例及结果分析图2主界面图3增加信息界面图4姓名不唯一出现错误提示图5按号码查询界面图6重名查询界面图7按姓名查询界面图8按号码进行排序界面图9按姓名进行排序界面图10按号码进行修改界面图11按姓名进行修改界面图12修改时出现重名情况再选择号码修改图13修改出现错误时的界面图14按号码进行删除界面图15按号码进行删除界面图16出现重名选择号码进行删除界面图17统计联系人个数界面五、调试和运行程序过程中产生的问题及采取的措施问题1:查找不能运行解决:查找函数体没有出错,而是定义变量num时所给的空间过小,以为输入5个数字则定义为num[5],忽略数组本身自带’\0’占据一个位置,将数组大小改为10问题就解决了。问题2:出现重名情况时不能输出所有符合条件的信息解决:开始时和按号码查找一样是先定义一个函数查找符合条件的信息并返回该信息的下标。但这样只能返回一个符合条件的信息,当出现重名情况时不能全部输出,所以我改在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人才招聘居间服务合同范本概览与
- 2025年冷库制冷技术服务采购合同
- 2025年住宅区消防给水系统安装合同
- 智能合约验证中的可组合性问题研究-深度研究
- 机器人安全风险评估-深度研究
- 2025年医疗设备技术转让合同样式
- 社会福利模式创新-深度研究
- 人工智能在检测中的应用-深度研究
- 并购案例深度剖析-深度研究
- 分布式数据库一致性算法-深度研究
- 变电管理所SF6气体泄漏应急处置方案
- 环境污染刑事案件两高司法解释解 读
- 养殖场灭鼠方案
- 室外道路及管网工程拟投入的主要施工机械设备及测量仪器表
- 腹部外伤护理查房记录
- 桥面铺装三维激光摊铺施工工法
- 优质课一等奖小学综合实践《我也能发明》课件
- 部编人教版三年级下册语文:荷花课件
- 螺纹牙强度校核计算
- 关于在生产过程中物料流转的交接和管理规定
- XX学院社团指导老师学期考核表
评论
0/150
提交评论