版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中南大学二0—一〜二0—二学年第二学期信息科学与工程学院课程设计报告书课程名称:简单个人电话号码查询系统班级:电子信息1001学号:zzz姓名: 指导教师:李登曾志文设计时间:2012年6月18日〜6月30日目录TOC\o"1-5"\h\z一、 绪论 3\o"CurrentDocument"1.1课程设计目的 3\o"CurrentDocument"1.2问题描述 3\o"CurrentDocument"1.3基本要求 3\o"CurrentDocument"二、 数据结构的设计 4\o"CurrentDocument"2.1需求分析 4\o"CurrentDocument"2.2概要设计 4\o"CurrentDocument"2.3软件模块结构图 5\o"CurrentDocument"2.4程序设计思想 5\o"CurrentDocument"四、 程序流程图 6\o"CurrentDocument"4.1主函数流程图 64.2mainmenu()函数流程图 7\o"CurrentDocument"五、 详细设计 95.1头文件,双链表,结构体的建立 95.2主函数算法 105.2.1.main()函数的算法 10\o"CurrentDocument"5.22.mainmenu()函数算法 10\o"CurrentDocument"searchmenu()函数算法 11\o"CurrentDocument"创建新的通讯录enter()函数算法 12\o"CurrentDocument"显示通讯录信息display()函数算法 12\o"CurrentDocument"保存通讯录save()函数算法 13\o"CurrentDocument"增加一个节点listinsert()函数算法 13\o"CurrentDocument"5.2.8.建立头结点 14\o"CurrentDocument"查找search()函数算法 14\o"CurrentDocument"删除delete()函数算法 15\o"CurrentDocument"打开文件load()函数算法 17\o"CurrentDocument"六、 调试分析及测试数据 18\o"CurrentDocument"6.1显示菜单 18\o"CurrentDocument"6.2新添记录 186.3查找联系人 196.3.1查找菜单的显示 19\o"CurrentDocument"6.3.2显示所有 19\o"CurrentDocument"6.3.3按姓名查找 20\o"CurrentDocument"6.4删除联系人 21\o"CurrentDocument"6.5保存退出 21\o"CurrentDocument"6.6打开通讯录 21\o"CurrentDocument"七、 用户使用手册 22\o"CurrentDocument"八、 心得体会 23\o"CurrentDocument"附录(源代码) 23—、绪论1.1课程设计目的训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养严谨的科学态度和良好的工作作风。1.2问题描述人们在日常生活中经常要查找某个人或某个单位的电话号码,本实验将实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询。编程完成通讯录的一般性管理工作,如通讯录中记录的增加、修改、查找、删除、输出等功能。每个记录包含姓名、电话号码、住址等个人基本信息。用《数据结构》中的链表做数据结构,结合c语言基本知识,编写一个通讯录管理系统,以把所学知识应用到实际软件开发中去。了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力,初步掌握软件开发过程的问题分析,系统设计,程序编码,测试等基本方法和技能:提高综合运用所学的理论知识和方法独立分析和解决问题的能力,训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。1.3基本要求(1)在外存上,用文件保存电话号码信息;(2)在内存中,设计数据结构存储电话号码信息;提供查询功能:根据姓名实现快速查询;提供其他维护功能,例如插入、删除、修改等;至少要有1000个电话号码,每个号码至少包括手机、固定电话、电子邮件、姓名等。二、数据结构的设计2.1需求分析要求用到数据结构课上学到的线性表的知识,所以就要充分而清晰的理解关于线性表的知识。要求实现的基本功能很简单,只有删除和插入,增加功能也不过是加上修改。这些在数据结构课上已经讲过,只要能够理解关于线性表的几个相关的基本算法就可以了。问题是将输入的信息保存入文件和从文件输出。这里基本是自学的内容,而且要考虑到是否要自行选择保存的磁盘。综上,做这个课题,要具备的知识就是线性表的基本算法,文件的保存和读取算法,必要的C或者C++知识(本次我将使用C实现),以及丰富的程序调适经验。2.2概要设计首先由于程序中要有对学生信息的增加和减少,定义一个全局变量n,在此程序的任意的模块中均可以使用。宏定义,用LEN来代替开辟地址空间,定义一个结构体变量,record,来存储联系人信息设计实现主要功能的函数有:主菜单函数:voidmainmenu();查找菜单函数:voidsearchmenu();新添记录:voidenter();查找记录:voidsearch();显示所有记录:voiddisplay();打开文件:voidload();保存文件:voidsave();删除记录:voiddelet();增加—节点:voidlistinsert();建立头结点:voidinitlist();程序运行中,为了保持屏幕的清楚和美观,时刻进行清屏也是必要的。2.3软件模块结构图主程序劫入文件 初蛤化,插入新结点主莱单主程序劫入文件 初蛤化,插入新结点主莱单2.4程序设计思想整个程序的设计是通过对每一个功能的设计,然后,再对每一个功能的程序进行模块化,再把每一模块化的程序装入设计好的菜单中,从而形成一个完整的通讯录管理系统。1、 自顶向下、逐步细化、逐步求精所谓“自顶向下,逐步细化、逐步求精”就是在对于给定问题进行透彻的了解和详细的分析的基础上,把问题分解成若干个按顺序执行的逻辑部分,称为“模块”。每个子任务如果仍很复杂,还可以再分解为若干个子任务。如此逐层分解,对于每个模块的设计都采用这种“自顶向下、逐步细化”的方法,将它们分解成为基本结构为止,就如同写文章先拟出题目和中心内容,再确定分为几大部分,每一大部分又分哪几节,每一节分为几段,每一段包括哪几个意思,这就是“自顶向下,逐步细化”的方法。2、 菜单技术当一个程序的规模比较庞大,层次和模块比较多时,不要每次都将所有模块按顺序执行一遍,最好在每一层,至少在最高几层都设一个“菜单”。为方便用户操作,“菜单”技术已广泛使用在计算机的系统软件中,具体做法是:程序首先把各功能说明及相应代号以菜单形式显示在屏幕上,然后由用户在键盘上输入所选的功能代号,程序自动转去调用相应的功能模块进行处理。I、程序流程图4.1主函数流程图LoadO1mainmienutp4.2mainmenu()函数流程图4.2.3enter()函数流程图Enter()函数流程图4.2.4显示所有函数display()流程图显示所有函数流程图五、详细设计5.1头文件,双链表,结构体的建立#include<stdio.h>文案大全#include<stdlib.h>#include<string.h>#include<conio.h>structrecord//建立结构体{charname[20];chartel[20];charemail[20];charqq[20];charrela[20];}student[1000];structslnode //建立双向链表{recorddate;structslnode*next;structslnode*prior;};typedefslnode*linklist;linklistl;staticintnum=0;FILE*fp;intn1=0;5.2主函数算法5.2.1.main()函数的算法intmain(){initlist();load();listinsert();while(1)mainmenu();return0;}5.22.mainmenu()函数算法voidmainmenu()//主菜单{charchoic;system("cls");//清屏printf("\n\t\t****************欢迎进入通讯录系统*****************");printf("\n\t\t******************1-新添纪录******************");printf("\n\t\t******************2-查找联系人****************");printf("\n\t\t******************3-删除联系人***************");printf("\n\t\t******************4-保存退出*****************");printf("\n\t\t******************5-不保存退出***************");printf(\n\t\t************************************************),printf("\n\t\t请选择:");choic二getch(),switch(choic){case'1':enter(),break,case'2':searchmenu(),break,case'3':delet(),break,case'4':save(),break,case'5':exit(0),default:mainmenu(),}//switch语句选择};searchmenu()函数算法voidsearchmenu()//查询菜单{charchoic;system("cls"),//清屏printf("\n\t\t*******************查询菜单*******************");printf("\n\t\t****************1-显示所有********************");printf("\n\t\t****************2-按姓名查询******************");printf("\n\t\t****************3-返回主菜单******************");printf("\n\t\t************************************************");printf("\n\t\t请选择:");choic二getch();switch(choic){case'1':display();printf("ok");;break;case'2':search();break;case'3':mainmenu();break;}};创建新的通讯录enter()函数算法voidenter()//添加纪录{printf("\n\t\t****************请输入学生信息****************\n");printf("\n\t\t姓名:");scanf("%s",&student[num].name);printf("\n\t\t电话:");scanf("%s",&student[num].tel);printf("\n\t\temail:");scanf("%s",&student[num].email);printf("\n\t\t输入qq号码:");scanf("%s",&student[num].qq);printf("\n\t\t分组:");scanf("%s",&student[num].rela);//将联系人信息添加到数组studentnum++;printf(-\n\t\t是否继续添加?(Y/N):");//判断是否继续添加if(getch()='y')enter();return;〃返回函数}显示通讯录信息display()函数算法voiddisplay()//显示所有{inti;system("cls");//清屏if(num!=0){printf("\n\t\t***************以下为通讯录所有信息************");for(i=0;i<num;i++){printf("\n\t\t姓名:%s",student[i].name);printf("\n\t\t电话:%s",student[i].tel);printf("\n\t\temail:%s",student[i].email);printf("\n\t\tqq:%s",student[i].qq);printf("\n\t\t分组:%s",student[i].rela);printf("\t\t");if(i+1<num){printf("\n\t\t");实用标准system("pause");//调用pause函数显示按任意键继续}}printf(\n\t\t************************************************),}elseprlntf("\n\t\t通讯录中无任何纪录"),prlntf("\n\t\t按任意键返回主菜单:");getch(),return,}保存通讯录save()函数算法voidsave()//写入文件{lntl;if((fp二fopen("student.dat","wb"))==NULL)〃以写二进制方式打开文件student,并使fp指向该文件。{prlntf("\n\t\t文件打开失败");exlt(1),}for(i=0,i<num,i++){fwrite(&student[i],sizeof(structrecord),1,fp),〃在fp所指向文件写入—数据存储到数组student中直到文件结束}fclose(fp),//关闭文件printf("\n\t\t通讯录文件已保存");printf("\n\t\t按任意键退出程序\n\t\t"),exit(0);}增加一个节点listinsert()函数算法voidlistinsert()//增加—结点{linklists,p=l,for(inti=0,i<num,i++){s=newslnode,strcpy(s->,student[i].name),strcpy(s->date.tel,student[i].tel);strcpy(s->date.email,student[i].email);strcpy(s->date.qq,student[i].qq);strcpy(s->date.rela,student[i].rela);〃复制数组s->prior=p->prior;s->next=p;p->prior->next=s;p->prior=s;p=p->next;}}建立头结点voidinitlist()//建立头结点{l=newslnode;l->next=l;l->prior=l;}查找search()函数算法voidsearch(){intj—0,a—0;linklistp—l;printf("\n\t\t*****************按姓名查找*******************");charname[20];printf("\n\t\t请输入姓名:");scanf("%s",name);printf("\t");printf("\n\t\t查询到的信息:");for(inti—a;i<num;i++){if(strcmp(name,student[i].name)——0)//两字符串相等{printf("\n\t\t");printf("\n\t\t");printf("姓名:”);printf("%s",student[i].name);printf("\n\t\t");printf("电话:");printf("%s",student[i].tel);printf("\n\t\t");printf("email:");printf("%s",student[i].email);printf("\n\t\t");printf("qq:");printf("%s",student[i].qq);printf("\n\t\t");printf("分组:");printf("%s",student[i].rela);j++;}elsecontinue;}printf("\n\t\t查找到的人数%d",j);if(j=0){printf("\n\t\t通讯录中没有该人!");}getch();}删除delete()函数算法voiddelet(){inta=0;intfindmark=0;intj;intdeletemark=0;inti;charname[20];printf(-\n\t\t请输入要删除学生姓名:");scanf("%s",name);for(i=a;i<num;i++){if(strcmp(student[i].name,name)=0){printf("\n\t\t以下是您要删除的学生纪录:");findmark++;printf("\n\t\t");printf("\n\t\t姓名:%s",student[i].name);printf("\n\t\t电话:%s",student[i].tel);printf("\n\t\temail:%s",student[i].email);printf("\n\t\tqq:%s",student[i].qq);printf("\n\t\t分组:%s",student[i].rela);printf("\n\t\t");printf("\n\t\t是否删除?(y/n)");if(getch()='y'){for(j=i;j<num-1;j++)student[j]=student[j+1];num--;deletemark++;printf("\n\t\t删除成功");if((i+1)<num){printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)");if(getch()='y'){a=i;continue;}}printf("\n\t\t是否继续删除?(y/n)”);if(getch()='y')delet();return;}if((i+1)<num){printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)");if(getch()='y'){a=i;continue;}}}elsecontinue;}if((deletemark=0)&&(findmark=0)){printf("\n\t\t没有该同学的纪录");getch();return;}elseif(findmark!=0){printf("\n\t\t没有重名信息");printf("\n\t\t没有该同学的纪录");getch();return;}5.2.11.打开文件load()函数算法voidload(){if((fp二fopen("student.dat","rb"))=NULL)//以读文本的方式打开文件student.dat,并使fp指向该文件。{printf("\n\t\t通讯录文件不存在");//通讯录不存在if((fp二fopen("student","wb"))=NULL)〃以写文本方式打开文件student,并使fp指向该文件。{printf("\n\t\t建立失败");〃建立失败exit(0);}else{printf("\n\t\t通讯录文件已建立");printf("\n\t\t按任意键进入主菜单");getch();return;}exit(0);}fseek(fp,0,2);//将位置指针从文件尾移动0个字符if(ftell(fp)>0)〃流式文件中的指针的当前位置大于零{rewind(fp);for(num=0;!feof(fp)&&fread(&student[num],sizeof(structrecord),1,fp);num++);〃在fp所指向文件读入一个数据存储到数组student中直到文件结束printf("\n\t\t文件导入成功");printf("\n\t\t按任意键返回主菜单");getch();return;}printf("\n\t\t文件导入成功");printf("\n\t\t通讯录文件中无任何纪录");printf("\n\t\t按任意键返回主菜单");getch();return;}
六、调试分析及测试数据从上面的算法和调用关系可以看出,这个程序的基本样子已经非常的清楚,但是真正的程序中还要考虑各种限制条件。例如在查找的过程中,可能不存在要查找的信息,就要给出不存在此信息的提示等。还有就是涉及到返回值得问题和程序中所要用到的变量的问题。在调试的过程中所遇到的问题很多,其中最难的两个问题是给出的六个警告错误,在5.0的版本下就是两个使得程序无法运行的错误。其中五个是因为在变量的声明中因为使用了浮点型和双精度型两种而造成在某些模块中两个变量相互赋值时类型不匹配。另一个是在查找的子函数中忘记了需要的返回语句。6.1显示菜单没有出错,可以正常显示。•欢迎进..•"隼讯」录系统————心:KNXNNXNXXNXXNXXNXXl一圭ff3忝W己录^XXXNXJtXXNNXNNXMZXXM::KHKJCHXKKXKKXKKXHX:k2—才玄耳主系/\NHXNH>OCX>OCX>OCXXHXN3—请选择:6.2新添记录没有出错,可正常添加JCJCJCJCXKXKXXXXXXXXXxm-jcJCJCJCXKXKXXXXXXXXXJ<4—HKHKMXMXmX欢迎进入鸣讯录系统JCJCJCJCXKXKXXXXXXXXXXJCJCJCJCXKXKXXXXXXXXXxm-jcJCJCJCXKXKXXXXXXXXXJ<4—请选择! 、JCMZJCJOtXJtXXXXXXXXX1青丰前人生-信息XMZJCMZJCiOtXJtXXXXXXX姓名
6.3查找联系人6.3.1查找菜单的显示没有发现问题,可正常运行xxxxxxxxxxxK/KitK1,—异.所^'■■■■■■■■■■■泰胃泰Kx—r—xXWWWWWKNKNK2T序姓韦询"WWW>CM:M:M:M:M:XXXXXXXXXXXXXXXXXXXXX}_诋回王申XXXXXXXHXHXHXXHXHXXXXXXXXXXXXXXXXXXXIMJCIMJCIMJCHXHXHXHXHXHXHMIMIMIMIMIMIXKXKX请选择:■6.3.2显示所有正常显示:KNMXJCXXJCKXNNX-M::KNMXJCXXJCKXNNX-M:£Ffhjfud以下为通讯录所有信息************emailemail:gjggqq:qq:dfdd分成:gjg.请按任意键继续■■-6.3.3按姓名查找M:XM:XM:M:XM:XM:M:M:M:M:KXKXXKXKXK-沓~j:旬Z^L单JtNXNXNXNJCMZJCMZKXKXXXX555555551曰干M右mm555E5H5)in)in)in)cjtTt^nnm^TTt^T —"~qn〉B>|R|-*r.,-tj )(k)(k)(k)(jc)tjcjc黄皆黄皆黄舞正舞正舞舞舞舞置置置3—j底回主XJCXJCXJCXJCJOCJOtXJtXXXX厦胃厦胃厦舞始舞始舞舞舞舞置舞置舞置舞■舞KKKKKJtICJtICXJCXJCXJCXJCMZJCM:舞舞舞舞曾置曾XWXWXMZMZMZMZXXXXXHXH才宕1^XWXWXMZMZMZMZXXXXXHXH才宕1^名^^找 蕈盛厦盛厦盛厦盛任盛盛盛庵盛盛盛盛—肥请输入姓名,查找结果始终是通讯录中没有该人,查找之后的显示界面存在问题,经过检查发现代码中存在逻辑性问题,有些语句没有执行或者重复执行。加入验证语句,和一些语句的注释,发现是break语句和continue语句的混用造成错误。通过修改,程序正常运行。JCMZJCMZJCMZJCMZJCMZJCXXXXXXXX询单JCMZJCMZJCMZJCMZJCMZJCXXXXXj_—早,Tp;所^-*舞*舞*舞*<舞*<舞*<*<*<*<*<*<*<『1<1<JCMZJCMZJCMZJCMZJCMZJCXXXXX?T序姓名 询*舞*舞*<舞*<舞*<舞*<*<*<*<*<*<><丁JCMZJCMZJCMZJCMZJCMZJCXXXXXJ—j瓦回主^菜^单.舞)CJCMZJCMZJCMZJCMZJCXXXXXXXXXXXJOtJOtJOtJOtJOtJOtJOtJOtJOtJOtJOtXW请选择:JCMZJCMZJCMZJCMZJCMZJCXXXXXX请选择:JCMZJCMZJCMZJCMZJCMZJCXXXXXX)守咨找XJO<JO<JO<JO<JO<JO<JO<XW请输入姓名,1*查询到的信息,姓省N23电话"航enail:g-dfs(I«I:£ff«ls分组姓省=123电话二!□□email:kkk四:kkk分■组:nmk,善找到的人数&MZMZMZMZMZXKXKXXXXXXXXXX-沓■〔旬Z^L申MZMZMZMZMZXKXKXXXXXXXXXX-沓■〔旬Z^L申NNXNXNXNXNMZMZMZMZMZHKHKMZMZMZMZMZXKXKXXXXXXXj_—..^,Tp;PrT-^JtNNXNXNXNXNMZMZMZMZMZHK—K,:,SiMZMZMZMZMZXKXKXXXXXXX:KXNXNXNXNMZMZMZMZMZHKHK请输入姓名f请输入姓名fA-E该3没CTJ录讯首香一画JCMZJCMZJCXJtXJtXXXXXXXXXXXICNICJdMJCJtJCJtXXXXXXXXXiOCiOCiOtXJtXJCMZJCMZJCXXXXXKXKXKXK才宕君找JCMZJCMZJCXXXXXKXKXKXK才宕君找6.4删除联系人XXXXXXXXXXXXXXX欢巷人jXXXXXXXXXXXXXXX欢巷人j画讯」"^系亨充'■♦■XXXTMTXXXXXXXXXXXXXXXXICJtICJtICJtICJtICJtICJtICJtICXJCXJCXJCXJCXJCXJCXJCMZJCMZJCMZJCJOt请魏择:请输入要删除学生姓名:.在含有同名信息的通讯录中,无法达到删除功能,或者是不能删除想要删除的人。并且界面无法正常显示,在代码中加入getch();后达到要求。再对代码进行修改,达到重名时的要求*—殴迎进入面讯录系统M:*—殴迎进入面讯录系统M:XXXXXXXXXXXXXNXNxl—#后辛主己录"MZMZMZMZMZKHKHXHXHXHXHN-fiOgA卅I|捋耳击希广、 MZMZKHKHXHXHXHXHN「保j子[艮出 MZMZMZMZKHKHXHXHXHXHNS-不糠译戒出M:J<XJ<XXXXXXXXXXNXNX2—m:XXXXXXXXXXXxxnxnxB-mzXXXXXXXXXXXXXNXNx4—MZKXKXXXXXXXXXXNXNX!MZKHKHXHXHXHXHNICMZMZMZKHKHXHXHXHXHNMZMZKHKHXHXHXHXHN请选择:请输入要删除学生姓名:123以.下是您要删除的学生纪录:姓省:123电话:F砒email:gjdfs4(I:gjFds分组:9FdsXEy/n>XE6.5保存退出保存后程序产生一个dat文件供打开通讯录是调用。6.6打开通讯录通讯录中没有保存的信息时的界面:
在二菜金主不已人#8在二菜金主不已人#8文备录童岳讯讯任-&3K・■!—-:■■J-_.-.■输融主菜单.在调试时的通讯录无法打开上次保存的文件。一直显示通讯录不存在。经检查是代码中打开语句时,.dat文件被误以为.bin文件,所以程序无法找到文件七、用户使用手册1本程序可以在vc++5.0和vc++6.0的环境下运行。2在vc中创建一个工程,将源程序复制到.cpp中,编译链接就可以。3选择编译、运行以后会出现运行界面,选择相应的选项,根据提示即可进行演示。界面如下:a|叶・|】、_:卜・”:七且且且且且且且且且且且且, ,;甚甚甚甚甚注注注注、XXHXHXXXXXXXXXXMXMXXXXXXXXXXXXXXXXXXXHNHNNXNXNX请选择;■八、心得体会以前做实验题目的时候总是感觉很难,因为根本就不知道从哪里开始。这次课程设计让我对编程有了新的认识。拿到题目的时候也是很困惑,后来看了很多有关的例子,仔细看了书上的线性表部分的知识,觉得就是上课讲到的一些内容,不怎么难,是自己先把自己吓住了。后来,参照书上的和网上的诸多例子,一个模块一个模块的编写,调试,一个功能一个功能去完善。发现越做越顺利,由于以前的实验中对于改错的经验积累和几个学得不错的同学的帮助,我的程序中的错误也一个一个的顺利解决。其实,这次实验中我认识到,编程有很多的乐趣也有很多的技巧性和知识性。我将在以后的日子里继续认真的学习知识,积累经验,让自己的编程能力提高。附录(源代码)#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>structrecord//建立结构体(charname[20];chartel[20];charemail[20];charqq[20];charrela[20];}student[1000];structslnode//建立双向链表(recorddate;structslnode*next;structslnode*prior;};typedefslnode*linklist;linklistl;staticintnum=0;FILE*fp;intn1=0;voidmainmenu();voidsearchmenu();voidenter();voidsearch();voiddisplay();voidload();voidsave();voiddelet();voidlistinsert();voidinitlist();intmain()(initlist();load();listinsert();while(1)mainmenu();return0;}voidload()(if((fp二fopen("student.dat","rb"))二二NULL)//以读文本的方式打开文件student.dat,并使fp指向该文件。(printf("\n\t\t通讯录文件不存在");//通讯录不存在if((fp二fopen("student.dat","wb"))二二NULL)//以写文本方式打开文件student,并使fp指向该文件。(printf("\n\t\t建立失败");〃建立失败exit(0);}else(printf("\n\t\t通讯录文件已建立");printf("\n\t\t按任意键进入主菜单");getch();return;}exit(0);}fseek(fp,0,2);//将位置指针从文件尾移动0个字符if(ftell(fp)>0)//流式文件中的指针的当前位置大于零(rewind(fp);for(num=0;!feof(fp)&&fread(&student[num],sizeof(structrecord),1,fp);num++);//在fp所指向文件读入一个数据存储到数组student中直到文件结束printf("\n\t\t文件导入成功");printf("\n\t\t按任意键返回主菜单");getch();return;}printf("\n\t\t文件导入成功");printf("\n\t\t通讯录文件中无任何纪录");printf("\n\t\t按任意键返回主菜单");getch();return;}voidmainmenu()//主菜单(charchoic;system("cls");//清屏printf("\n\t\t***************欢迎进入通讯录系统***************");printf("\n\t\t******************1^添纪录******************");printf("\n\t\t******************2-查找联系人****************");printf("\n\t\t******************3-fl]除联系人***************");printf("\n\t\t******************4-^保存退出*****************");printf("\n\t\t******************5-不保存退出***************");printf("\n\t\t************************************************");printf("\n\t\t请选择:");choic=getch();switch(choic)(case'1':enter();break;case'2':searchmenu();break;case'3':delet();break;case'4':save();break;case'5':exit(0);default:mainmenu();}//switch语句选择}voidsearchmenu()//查询菜单(charchoic;system("cls");//清屏printf("\n\t\t*******************查询菜单*******************");printf("\n\t\t****************1-显示所有********************");printf("\n\t\t****************2-按姓名查询******************");printf("\n\t\t****************3-返回主菜单******************");printf("\n\t\t************************************************");printf("\n\t\t请选择:");choic=getch();switch(choic)(case'1':display();printf("ok");;break;case'2':search();break;case'3':mainmenu();break;}}voidenter()//添加纪录(printf("\n\t\t****************请输入学生信息****************\n");printf("\n\t\t姓名:");scanf("%s",&student[num].name);printf("\n\t\t电话:");scanf("%s",&student[num].tel);printf("\n\t\temail:");scanf("%s",&student[num].email);printf("\n\t\t输入qq号码:");scanf("%s",&student[num].qq);printf("\n\t\t分组:");scanf("%s",&student[num].rela);//将联系人信息添加到数组studentnum++;printf("\n\t\t是否继续添加?(Y/N):");//判断是否继续添加if(getch()=='y')enter();return;//返回函数}voiddisplay()//显示所有(inti;system("cls");//清屏if(num!=0)(printf("\n\t\t***************以下为通讯录所有信息************");for(i=0;i<num;i++)(printf("\n\t\t姓名:%s",student[i].name);printf("\n\t\t电话:%s",student[i].tel);printf("\n\t\temail:%s",student[i].email);printf("\n\t\tqq:%s",student[i].qq);printf("\n\t\t分组:%s",student[i].rela);printf("\t\t");if(i+1<num)(printf("\n\t\t");system("pause");//调用pause函数显示按任意键继续}}printf("\n\t\t************************************************");}elseprintf("\n\t\t通讯录中无任何纪录");printf("\n\t\t按任意键返回主菜单:");getch();return;}voidsave()//写入文件(inti;if((fp二fopen("student.dat","wb"))==NULL)//以写二进制方式打开文件student,并使fp指向该文件。(printf("\n\t\t文件打开失败");exit(1);}for(i=0;i<num;i++)(fwrite(&student[i],sizeof(structrecord),1,fp);//在fp所指向文件写入一个数据存储到数组student中直到文件结束}fclose(fp);//关闭文件printf("\n\t\t通讯录文件已保存");printf("\n\t\t按任意键退出程序\n\t\t");system("pause");exit(0);voidlistinsert()//增加一个结点(linklists,p=l;for(inti=0;i<num;i++)(s=newslnode;strcpy(s->,student[i].name);strcpy(s->date.tel,student[i].tel);strcpy(s->date.email,student[i].
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高考物理总复习专题十三热学第3讲热力学定律练习含答案
- 春运期间全程出行安全手册
- 《变压器的简单介绍》课件
- 九年级历史上册 第6课 古代世界的战争与征服教案1 新人教版
- 2024-2025学年高中历史 第二单元 古代历史的变革(下)第4课 商鞅变法与秦的强盛(1)教学教案 岳麓版选修1
- 2024年秋八年级物理上册 第一章 第4节 测量平均速度教案 (新版)新人教版
- 高中政治 第三专题 联邦制、两党制、三权分立:以美国为例 第四框题 美国的利益集团教案 新人教版选修3
- 2024年五年级语文上册 第二单元 语文园地二配套教案 新人教版
- 2023六年级数学上册 七 负数的初步认识第1课时 认识负数教案 西师大版
- 租赁工业吊扇合同范本(2篇)
- 珍爱生命,拒绝“死亡游戏”主题班会教案(3篇)
- 2024世界糖尿病日糖尿病与幸福感糖尿病健康教育课件
- 民用无人机操控员执照(CAAC)考试复习重点题库500题(含答案)
- 2024年医疗机构医疗废物管理规范考试试题及答案
- 中国法律史-第一次平时作业-国开-参考资料
- 教育家精神专题讲座课件
- 第三单元 雪域天音 -热巴舞曲 课件 2023-2024学年人音版初中音乐八年级上册
- EPC项目投标人承包人工程经济的合理性分析、评价
- 社区电动车棚新(扩)建及修建充电车棚施工方案(纯方案-)
- 房屋市政工程生产安全重大事故隐患判定标准(隐患排查表)
- 世界问候日-你的问候温暖世界主题PPT
评论
0/150
提交评论