通讯录最终完美版.docx
- 文档编号:30372972
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:32
- 大小:180.91KB
通讯录最终完美版.docx
《通讯录最终完美版.docx》由会员分享,可在线阅读,更多相关《通讯录最终完美版.docx(32页珍藏版)》请在冰豆网上搜索。
通讯录最终完美版
武汉纺织大学
电子电气学院C语言课程设计报告
通讯录管理系统
学号:
16*******
姓名:
赵**
班级:
电气11603
指导教师:
吴**
报告日期:
2017年6月21日
1通讯录信息管理系统
1.1问题提出
随着社会发展,人与人之间的联系沟通越来越频繁。
及时准确地查找联系人很有必要,本人编写一个通讯录信息管理系统,借助计算机方便、快捷的功能,来实现管理通讯录信息,和城市信息。
为查找联系人提供了便利。
1.2本系统涉及的知识点
结构、数组、循环、函数、分支。
1.3功能要求
1、建立通讯录信息,每个通讯录的信息包括:
姓名,号码,性别,地区,现住址;
2、显示全部通讯录;
3、增添、修改、删除通讯录;
4、根据姓名、地区、现住址查询联系人;
5、改变输出字体颜色;
6、输出…….
2功能设计
2.1算法设计
将题目分成若干模块或部分、各模块或部分的算法设计思想,
本系统需要实现的功能要求:
1、利用switch语句设计如图1所示的主菜单:
图1学生信息管理系统主菜单
2、选择1后,会显示五个初始量,提供参考。
3、选择2后,调用查询函数,进入函数后利用switch语句实现一个如图2所示的菜单,该菜单中每个选项调用一个函数
图2查询子菜单
4、选择3后,调用修改函数,可依次修改联系人信息。
5、选择4后,调用添加函数,可添加新的联系人,并且会显示。
6、选择5后,调用删除函数,可删除联系人。
7、选择6后,增添了趣味的功能,可改变输出字体颜色,共六个颜色可选。
8、选择7后,结束退出。
2.1模块图
如:
图3成绩管理系统模块图
2.2部分模块流程图
是否
图4,显示通讯录流程图。
a=1a=3
a=2
否是否是否是
图5,查询通讯录流程图。
否是
图6,修改通讯录流程图。
继续输入
是否
图7,添加通讯录流程图。
否是
图8,删除通讯录流程图。
3程序代码设计
3.1输入模块
1)函数原形:
structmessage
{
charname[20];
chartel[20];
charsex;
charcity[20];
charxzz[20];
};声明结构体。
2)功能:
利用while
(1)循环语句和scanf、getchar函数完成对结构数组的输入,存放20个通讯录的信息(姓名、号码、性别、地区、现住址)。
并预先存放五个联系人信息。
Num=5.
3)变量及类型:
peo[Num].name,peo[Num].tel,peo[Num].sex,peo[Num].city,peo[Num].xzz。
其中num为变量,用于输出每个结构体的五个信息。
3.2返回下标
1)目的:
为了实现后续的修改、查询和删除功能,在这之前做了三个返回下标的调用函数。
intr_name(charName[20])//0000011(通过姓名返回数组下标)
intr_city(charCity[20])//0000022(通过地区返回数组下标)
intr_xzz(charXzz[20])//0000033(通过现住址返回下标)
这三个函数功能是:
输入姓名Name(地区city、现住址xzz)返回该姓名(地区、现住址)所在的数组下标。
2)实现方法:
现声明一个整形变量i,用于循环。
然后用for循环for(i=0;i 直到peo[i].name,和Name相等,输出int类型的i(returni)。 若没有就输出-1。 3.3显示全部联系人voidshow(void) 输入整形变量i,再用for循环(for(i=0;i (peo[i].name,peo[i].tel,peo[i].sex,peo[i].city,peo[i].xzz)。 从i=0开始,直到i=num。 联系人可全部输出。 3.4查询联系人voidsearch(void) 在循环前先定义字符(charch)用于判断字符ch与字符n、N是否相等。 来实现是否继续查询联系人。 (if(ch=='n'||ch=='N'),break;),如果等于n或N,则结束循环。 用switch()选择结构。 3.41用姓名查询voids_name(void) 同样在while (1)循环前定义字符变量(charch)用于判断。 循环内定义字符变量(charName),然后调用返回姓名下标的函数(intr_name(charName[20])),令Num=r_name(Name)。 下面用if判断,(if(Num==-1)),如果等于-1,则无此联系人。 若不为-1.则Num为所输入姓名的数组下标。 输出Num下标的数组后,ch判断是否继续用姓名查询。 若不继续查询则返回上一级。 3.42用地区查询voids_city(void) 与用姓名查询类似。 不多于叙述。 3.43用现住址查询voids_xzz(void) 与用姓名查询类似。 不多于叙述。 3.5修改联系人信息voidrevish(void) 定义字符变量,用于输出修改。 chartel[20];charsex;charcity[20];charxzz[20];。 在while (1)循环下定义charName[20],因为是根据姓名来调出该联系人信息并修改。 getchar();后,调用返回下标函数intr_name(charName[20])。 令Num=r_name(Name);返回改姓名的下标。 若Num=-1,则输出无此联系人。 若不为-1,则先显示该联系人的所有信息后再修改,避免出错。 scanf("%s",&peo[Num].name);声明变量。 getchar();接收变量。 然后依次进行。 3.6添加联系人voidadd(void) 判断字符(charch;)下就是while (1)循环。 直接进行添加,依次声明变量scanf("%s",&peo[num].name);getchar();接收并储存。 在所有信息接收后要num++;因为多了一位联系人,num要加一。 3.7删除联系人voiddelet(void) inti;charch1;charch2;此处定义两个判断字符。 在下面的循环里有两处需要判断。 与修改联系人前面类似: 先输入姓名,判断是否存在,然后显示该联系人信息。 为防止错误删除需要进行一次判断,后面是否继续删除要第二次判断。 循环for(i=Num;i 直到最后一位联系人。 结束删除后num--,少一位联系人,num减一。 printf("成功删除! \n");getchar();显示成功删除后判断是否继续删除。 3.8改变输出字体颜色voidcolor(void) 增加趣味功能,改变字体颜色。 Switch选择下有七个选项分别对应六种字体。 用了系统函数system(”colorxx“)。 其中第一个x改变输出界面背景,第二个x改变输出字体颜色。 因为只改变字体所以为("color0x");(0是背景黑色)。 3.9退出voidlog_down(void) exit(0);退出。 结束。 4C程序设计总结 1、调试程序情况 1、启动程序 图9,启动程序截图。 2、输入1,显示信息。 图10,显示初始信息截图。 3、输入2,查询通讯录。 (有三种查询方式,在此只用姓名查询) 图11,查询信息截图。 4、输入3,修改通讯录。 图12,修改信息截图。 5、输入4,添加通讯录。 图13,添加信息截图。 6、输入5,删除通讯录。 图14,删除信息截图。 7、输入6,改变颜色。 (有六种可选,此处只用红色) 图15,颜色改变截图。 8、再次输入1,显示通讯录。 (显示添加、修改、删除操作后的信息) 图16,再现信息截图。 9、输入7,退出系统。 图17,退出系统截图。 2、本人感想 通过这次课程设计,让我对课本中数组、函数调用、结构体、循环等知识有了更深层次的了解。 除此之外,getchar、strcpy、system、strcmp等课外知识有一点认识。 对模块化程序有更清晰的思维。 其中也有许多错误,当时性别变量charsex是字符类型,不是字符串。 输出格式应为c%,而我不小心全部写成s%输出。 导致程序无法运行。 还有对getchar()的作用不是很清晰。 起初用getchar判断是否继续,(if(getchar()=='n'||getchar()=='N')),当时并无语法错误,但多次调试发现输入n时退出,输入N则继续运行。 不知道原因。 就换其他方法实现判断,既在循环前声明变量charch(scanf("%s",&ch);if(ch=='n'||ch=='N')),当字符变量为n或者N时结束。 程序能正常运行。 我也认识到自己知识不足,对指针知识掌握不好,因此程序中并未涉及指针的运用。 在以后的学习里我会集中精力。 把知识学的更加牢固。 5参考文献 [1]谭浩强C程序设计(第二版)清华大学出版社2001.1 [2]贾小军C语言程序设计人民邮电出版社2003.10 附录: 程序清单 #include #include #include structmessage { charname[20]; chartel[20]; charsex; charcity[20]; charxzz[20]; }; structmessagepeo[20]={ {"张三","123451",'M',"郑州","武汉"}, {"李四","123452",'F',"洛阳","北京"}, {"王五","123453",'M',"上饶","南昌"}, {"赵六","123454",'F',"南京","上海"}, {"老范","123455",'M',"焦作","合肥"}};//建立结构体,有五个初始量。 intnum=5;//五个初始量,定义num为五。 intr_name(charname_[20]);//<通过姓名返回数组下标> intr_city(charcity_[20]);//<通过地区返回数组下标> intr_xzz(charxzz_[20]);//<通过现住址返回下标> voidshow(void);//第一个功能,(显示) voidsearch(void);//第二个功能,(查询) voids_name(void);//[按照姓名查询] voids_city(void);//[按照城市查询] voids_xzz(void);//[按照现住址查询] voidrevish(void);//第三个功能,(修改) voidadd(void);//第四个功能,(添加) voiddelet(void);//第五个功能,(删除) voidcolor(void);//第六个功能,(颜色) voidlog_down(void);//第七个功能,(退出) voidmain()//主函数 { while (1)//while循环 { intn;//声明变量n,用于选择。 printf("通讯录管理系统\n"); printf("-------------------------\n"); printf("输入1,显示通讯录\n"); printf("输入2,查询通讯录\n"); printf("输入3,修改通讯录\n"); printf("输入4,添加通讯录\n"); printf("输入5,删除通讯录\n"); printf("输入6,改变字体颜色\n"); printf("输入7,退出系统\n"); printf("--------------------------\n"); printf("请输入数字1~7\n"); scanf("%d",&n); switch(n)//switch选择。 { case1: show(); break; case2: search(); break; case3: revish(); break; case4: add(); break; case5: delet(); break; case6: color(); break; case7: log_down(); break; default: printf("error! 请重新输入: \n\n"); } } } intr_name(charName[20])//0000011(通过姓名返回数组下标) { inti; for(i=0;i { if(strcmp(peo[i].name,Name)==0) returni; } return-1; } intr_city(charCity[20])//0000022(通过地区返回数组下标) { inti; for(i=0;i { if(strcmp(peo[i].city,City)==0) returni; } return-1; } intr_xzz(charXzz[20])//0000033(通过现住址返回下标) { inti; for(i=0;i { if(strcmp(peo[i].xzz,Xzz)==0) returni; } return-1; } voidshow(void)//11111(显示). { inti; printf("*****************显示全部信息******************\n"); printf("姓名号码性别地区现住址\n"); printf("----------------------------------------------\n"); for(i=0;i printf("%8s%8s%c%8s%8s\n",peo[i].name,peo[i].tel,peo[i].sex,peo[i].city,peo[i].xzz); printf("***********************************************\n\n"); } voidsearch(void)//22222(查询). { charch;//循环前定义字符。 while (1) { inta; printf("按照姓名查询,输入数字1.\n"); printf("按照地区查询,输入数字2.\n"); printf("按照现住址查询,输入数字3.\n"); scanf("%d",&a); switch(a) { case1: s_name(); break; case2: s_city(); break; case3: s_xzz(); break; default: printf("error! 无效输入! \n\n"); } printf("是否继续查询联系人? (Y/N)"); scanf("%s",&ch);//循环内声明变量。 if(ch=='n'||ch=='N')//判断字符ch是否为n或N。 break; } } voidrevish(void)//33333(修改). { chartel[20]; charsex; charcity[20]; charxzz[20]; charch; while (1) { charName[20]; intNum; printf("请输入需要修改联系人的姓名: "); scanf("%s",&Name); getchar(); Num=r_name(Name); if(Num==-1) { printf("无此联系人! \n"); } else { printf("该联系人信息为: \n");//显示将要修改的联系人信息。 printf("-----------------------------------------------\n"); printf("姓名号码性别地区现住址"); printf("\n"); printf("%8s%8s%c%8s%8s\n",peo[Num].name,peo[Num].tel,peo[Num].sex,peo[Num].city,peo[Num].xzz); printf("请输入姓名: \n"); scanf("%s",&peo[Num].name); getchar(); printf("请输入号码: \n"); scanf("%s",&peo[Num].tel); getchar(); printf("请输入性别: (F/M)\n"); scanf("%c",&peo[Num].sex); getchar(); printf("请输入地区: \n"); scanf("%s",&peo[Num].city); getchar(); printf("请输入现住址: \n"); scanf("%s",&peo[Num].xzz); getchar(); } printf("是否继续修改联系人? (Y/N)"); scanf("%s",&ch); if(ch=='n'||ch=='N') break; } } voidadd(void)//44444(添加). { charch; while (1) { printf("请输入姓名: "); scanf("%s",&peo[num].name); getchar(); printf("请输入号码: "); scanf("%s",&peo[num].tel); getchar(); printf("请输入性别: (F/M)"); scanf("%c",&peo[num].sex); getchar(); printf("请输入地区: "); scanf("%s",&peo[num].city); getchar(); printf("请输入现住址: "); scanf("%s",&peo[num].xzz); getchar(); num++; printf("是否继续添加联系人? (Y/N)"); scanf("%s",&ch); if(ch=='n'||ch=='N') break; } } voiddelet(void)//55555(删除). { inti; charch1; charch2;//在此定义两个判断字符,循环内有两处需要判断。 while (1) { charName[20]; intNum; printf("请输入要删除的联系人姓名: "); scanf("%s",&Name); getchar(); Num=r_name(Name); if(Num==-1) { printf("无此联系人! \n"); } else { printf("该联系人信息为: \n");//显示将要删除的联系人信息。 printf("-----------------------------------------------\n"); printf("姓名号码性别地区现住址"); printf("\n"); printf("%8s%8s%c%8s%8s\n",peo[Num].name,peo[Num].tel,peo[Num].sex,peo[Num].city,peo[Num].xzz); printf("是否真的删除: (Y/N)\n"); scanf("%s",&ch1); if(ch1=='y'||ch1=='Y') { for(i=Num;i { strcpy(peo[i].name,peo[i+1].name);//字符串用strcpy(,)覆盖。 strcpy(peo[i].tel,peo[i+1].tel); peo[i].sex=peo[i+1].sex; strcpy(peo[i].city,peo[i+1].city); strcpy(peo[i].xzz,peo[i+1].xzz); } num--;//删除一个联系人,因此num要减一。 } printf("成功删除! \n"); getchar(); } printf("是否继续删除联系人? (Y/N)"); scanf("%s",&ch2); if(ch2=='n'||ch2=='N') break; } } voidcolor(void)//66666(颜色)。 { inta; printf("输入1,字体颜色变为蓝色! \n"); printf("输入2,字体颜色变为绿色! \n"); printf("输入3,字体颜色变为青色! \n"); print
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通讯录 最终 完美