1专业技能训练报告完成时间:2016年月日2第1部分:实训题目与要求.........................................................................................................................31.问题提出..............................................................................................................................................32.功能要求............................................................................................................................................33.任务分工............................................................................................................................................4第2部分设计实训题目功能.......................................................................................................................41.总计设计............................................................................................................................................42.算法设计............................................................................................................................................53.数据结构............................................................................................................................................64.程序代码设计....................................................................................................................................65.测试与调试........................................................................................................................................7第三部分实训总结附录A程序清单............................................................................................................................................9附录B用户使用说明书..............................................................................................................................183第1部分:实训题目与要求1.问题提出设计出模拟安卓手机一样的通信录管理系统,实现对手机通信录的各种管理。2.功能要求(1)新增功能能录入新数据记录,每个记录包括:姓名、电话分类(可选项有:A手机电话,B住宅电话,C单位电话等分类)、电话号码等信息。当通信录中的记录超过一定数量时,能显示存储空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号。(2)查找功能选择此功能时,能选择按姓名或按电话号码进行查找,查找成功时,显示出记录的各项数据信息。(3)拔号功能能显示出通信录中所有人的姓名,当选中某个姓名时,屏幕上模拟打字机的效果依次显示出此人的电话号码中的各个数字,并伴随相应的拔号声音。(4)修改功能选中某个人的姓名时,可对此人的相应数据进行修改。(5)删除功能选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。(6)其它要求①只能使用C语言进行系统设计,源程序要有适当的注释,使程序容易阅读;4②至少采用文本菜单界面(如果能采用图形菜单界面更好);③手机通信录能以文件方式保存,建议使用结构和链表等数据结构;④可模拟当前流行的安卓手机系统,自动增加新功能模块,对通讯录进行各方面管理(视情况可另外加分)。3.任务分工独立完成。第2部分设计实训题目功能1.总计设计程序模块图启动系统查看联系人新建联系人查找联系人按键拨号修改联系人删除联系人退出系统保存数据输入数据5各函数的主要功能。1.voidfileR:访问文件中的数据,读入数据函数,化简代码。2.voidfileW:覆盖文件中的数据,写入数据函数,化简代码。3.voidconnectnew:新建联系人。4.voidPrintf:查看全部联系人。5.voidSearch:查找联系人并可拨号。6.voidDailing:直接按键拨号。7.voidChange:修改联系人。8.voidDelete:删除联系人。9.intmain:主体框架函数。10.voidDing:铃声函数,化简代码。2.算法设计a.启动程序第一:进入main函数之前先将指定文件内储存的数据读入系统内。第二:采取的方法即:在VoidfileR函数内,每次读入进新建链表中的一个节点。将所有的数据先如此读入系统中。第三:然后再进行功能选择。b.新建联系人即直接创建新的节点,输入再与phead或pend进行连接。之后用fileW函数覆盖原本的文件数据,达到文件与程序数据同步的效果。c.查看联系人创建一个t结构指针赋值于phead的值,后利用链表结构逐个打印出每个联系人。d.查找联系人创建一个t结构指针赋值于phead的值,逐一查找相同项的联系人。e.按键拨打输入一字符串,调用铃声函数。f.修改联系人创建一个t结构指针赋值于phead的值,逐一查找相同项的联系人,然后进行修改,6用fileW数据同步。g.删除联系人创建一个q与t结构指针赋值于phead的值,逐一查找相同项的联系人,q用于储存t的上一个节点,查找到后,将t的*next值赋值给q的*next,达到删除此节点的效果,再用fileW函数进行数据同步。3.数据结构结构体structm意义主要变量意义Num联系人编号Inttnum联系人编号用Name[40]联系人姓名Structm*phead链表头指针Phonea[20]联系人电话一Structm*pend链表尾指针Phoneb[20]联系人电话二FILE*fp文件指针Phonec[20]联系人电话三Structm*pnew,*t,*q临时链表节点指针*next指向下一节点Inti功能选项选择用4.程序代码设计①Main函数下为功能界面。使用switch用于功能选择,连接到每一个函数内。②fileR函数如下:voidfileR(){structm*pnew;fp=fopen(x.txt,r);pnew=(structm*)malloc(sizeof(structm));while((fscanf(fp,%d%s%s%s%s,&pnew-num,&pnew-name,&pnew-phonea,&pnew-phoneb,&pnew-phonec))!=EOF){tnum++;7pnew-num=tnum;pnew-next=NULL;if(tnum==1){pend=phead=pnew;}else{pend-next=pnew;pend=pnew;}pnew=(structm*)malloc(sizeof(structm));}free(pnew);fclose(fp);}③voidfileW()打开文件再逐个节点用fprintf写入即可。④voidconnectnew创建新节点pnew进行信息储存。下为连接节点操作。if(phead==NULL){phead=pend=pnew;pend-next=NULL;}else{pnew-next=NULL;pend-next=pnew;pend=pnew;}⑤voidPrintf较为简单,直接打印节点数据即可。⑥voidSearch定义一字符串s[40],建立*t赋予头节点地址,再进行逐一搜索。⑦voidDailing较为简单,输入空字符串,进行铃声函数DING,拨号。⑧voidChange修改联系人voidSearch相近。⑨voidDelete先用Search相近代码查找,但是用*p保留前一节点,再将其相接,如下:if(t==phead){phead=phead-next;}elseq-next=t-next;完整程序请参见附录A5.测试与调试这个最好带截图的!!!测试数据之类的,其实打印最好2面!!8表1测试用例测试数据类型测试数据预期结果实测结果合法数据asdf姓名asdf符合1234579电话1234579符合非法数据A(菜单选择)相当于选择1非法无无无9第三部分实训总结这次实训,我觉得到我的c语言有了很大的提升,有信心去做整一个系统,说实话,能自己做出这样一个系统,我觉得这样很帅,也很有趣的。虽然在这个过程中遇到一点点小困难,也多亏了舍友的指导下,学会了如何将文件录入链表,这是挺重要的知识点。除此之外,我还熟练了链表的很多操作,这是真的意想不到的收获。当然,这里有几个错误或想法需要认真记下,以免再犯:1.已确定是全局变量,需要用的话就不要将函数的局部变量设置成一样的标识符,否则结果会接收不到。2.简化代码,多造几个函数,就不用打太多代码,节省时间。3.做一个系统,界面的美观挺重要的,有点音乐,有点颜色,有点整洁,舒适加分。4.因为时间有点赶,代码风格也原本有点不好,代码打的有点乱。5.有时候,感觉非常难的操作,结果一百度,原来是如此简单的,只需打多两行代码即可,比如说程序背景,调用声音等等。6.也是因为时间紧迫(有考试准备),没有再增进许多想法,许多功能,这是挺大的遗憾的。结束最后,感谢舍友指点一些迷津,虽然开始做的时候感觉很失败的,但是慢慢做出来之后,成就感满满,终于可以说我会编程了,会编一个程序已经是一个小成功了。帅气。以上。10附录A程序清单#includestdio.h#includestring.h#includestdlib.h#includewindows.hvoidDing(){Beep(659,500);Beep(659,500);Beep(698,500);Beep(784,500);Beep(784,500);Beep(698,500);Beep(659,500);Beep(587,500);Beep(522,500);Beep(522,500);Beep(587,500);Beep(659,500);Beep(587,700);Beep(522,250);Beep(522,250);}structm{intnu