您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > c语言通讯录管理系统课程设计报告书
.............课程名称:数据结构课程设计一、基本要求1、设计合适的数据结构存储朋友、分组信息,将friend.txt与group.txt中的内容导入其中。记录包括:编号,姓名,性别,生日,电话号码1,电话号码2,电话号码3,住址与分组。2、能实现插入、删除、修改和查询操作。其中查询可按姓名,拼音或电话查询。3、能实现多条件查询。4、最后把系统中的数据保存回相应的文件中。二、解题思路根据题目要求,1、键盘式选择菜单实现功能选择。2、通讯录数据以文本文件存储,故应提供文件的输入输出等操作。将保存在txt文件中的数据读取出来并设计合适的链表(有头结点的单链表)用来存储数据。3、利用链表进行通讯录记录的插入,查找,修改,删除等操作。4、查找可通过姓名,拼音电话号码进行查找。5、修改和删除均建立在查找的基础之上。6、实现多条件查找。7、通讯录分组信息同理。利用单链表存储,从而进行显示、查找、删除等操作。8、退出:即将通讯录及分组信息保存到文件之后,再退出到管理系统。三、算法描述1、建表:通讯录成员信息表及分组信息表.............尾插法建带头结点的通讯录链表createF();根据文本文件中数据的存储结构用fscanf()一条一条的读取数据;并将读取出来的数据赋给链表的结点;使Flag=1,即表示通讯录已经建立;通讯录成员分组信息表createG()同理;2、显示通讯录已有成员信息从链表中读取并按照一定结构输出outputF();3、添加通讯录成员信息向通讯录中添加某人通讯信息的子函数insertF();链表结点的插入,按编号次序有序插入使用两个指针变量p1和p2分别指向当前访问过的结点和下一结点。循环顺序查找插入结点的位置,其中p1指向待插入位置的前一个结点。4、查找通讯录成员信息查找模块search():在通讯录中查找某人通讯信息的子函数输入要查找的通讯者的编号或姓名,从表头顺序访问表中结点。如果查找成功,则输出查找到的通讯者信息,返回p。若查找失败,则输出查找失败,返回p。5、修改通讯录成员信息利用查找函数查找到需要修改的结点,进行修改。6、删除通讯录成员信息利用查找函数查找到需要修改的结点,进行删除。7、多条件查询通讯录成员信息关键词类型分为:姓名,性别,地址,分组四种;选择第一个关键词类型之后,进行相关查询;之后第二个关键词,不需要输入相应类型,而是根据输入数据之间的差别进行匹配,从而进行相关的查询操作;8、显示已有通讯录成员分组信息.............原理同outputF();9、添加通讯录成员分组信息原理同insertF();10、删除通讯录成员分组信息原理同DeleteF();11、退出通讯录管理系统四、程序设计1、本程序中所有用到的数据结构定义//Group的单链表存储结构structGroupInfo{intGnum;charGname[20];};structGroup{structGroupInfoGInfo;Group*next;};typedefGroup*GInfoList;//Friend的单链表存储结构structFriendInfo{charFnum[5];.............charFname[8];charsex[3];charbirthday[11];chartelephone1[12];chartelephone2[12];chartelephone3[9];charaddr[20];structGroupInfoFGInfo;};structFriend{structFriendInfoFInfo;Friend*next;};typedefFriend*FInfoList;2、基本操作①建表:通讯录成员信息表及分组信息表/*尾插法建带头结点的通讯录链表createF()*/FInfoListcreateF(){FILE*pRead,*pWrite;intnCount=0;FInfoListhead=(Friend*)malloc(sizeof(Friend));/*申请头结点*/Friend*p,*rear;rear=head;pRead=fopen(Ffilename,r);if(NULL==pRead)exit(0);pWrite=fopen(friend_bin.txt,wb);if(NULL==pWrite){fclose(pRead);exit(0);}while(!feof(pRead)){p=(Friend*)malloc(sizeof(Friend));.............fscanf(pRead,%s%s%s%s%s%s%s%s%d\n,p-FInfo.Fnum,p-FInfo.Fname,p-FInfo.sex,p-FInfo.birthday,p-FInfo.telephone1,p-FInfo.telephone2,p-FInfo.telephone3,p-FInfo.addr,&p-FInfo.FGInfo.Gnum);fwrite(p,sizeof(structFriend),1,pWrite);//printf(%s\t%s\t%s\t%s\t%s\t%s\n\n%s\t%s\t%d\n\n,p-FInfo.Fnum,p-FInfo.Fname,p-FInfo.sex,p-FInfo.birthday,p-FInfo.telephone1,p-FInfo.telephone2,p-FInfo.telephone3,p-FInfo.addr,p-FInfo.groupnum);rear-next=p;rear=p;}fclose(pRead);fclose(pWrite);Fflag=1;rear-next=NULL;returnhead;}/*尾插法建带头结点的通讯录成员分组信息表链表createG()*/GInfoListcreateG(){FILE*gRead,*gWrite;intgCount=0;GInfoListhead=(Group*)malloc(sizeof(Group));/*申请头结点*/Group*p,*rear;rear=head;gRead=fopen(Gfilename,r);if(NULL==gRead)exit(0);gWrite=fopen(group_bin.txt,wb);if(NULL==gWrite){fclose(gRead);exit(0);}while(!feof(gRead)).............{p=(Group*)malloc(sizeof(Group));fscanf(gRead,%d%s\n,&p-GInfo.Gnum,p-GInfo.Gname);fwrite(p,sizeof(structGroup),1,gWrite);rear-next=p;rear=p;}fclose(gRead);fclose(gWrite);Gflag=1;rear-next=NULL;returnhead;}②显示通讯录已有成员信息/*输出模块outputF():输出通讯录中联系人通讯信息的子函数*/voidoutputF(FInfoListFhead){Friend*p;p=Fhead-next;printf(\n\n%20s\n,通讯录);printf(\n编号\t姓名\t性别\t生日\t电话号码1\t电话号码2\n\n电话号码3\t住址\t分组\n\n);while(p!=NULL){printf(%s\t%s\t%s\t%s\t%s\t%s\n\n%s\t%s\t%d\n\n,p-FInfo.Fnum,p-FInfo.Fname,p-FInfo.sex,p-FInfo.birthday,p-FInfo.telephone1,p-FInfo.telephone2,p-FInfo.telephone3,p-FInfo.addr,p-FInfo.FGInfo.Gnum);p=p-next;}}③添加通讯录成员信息/*添加模块insertF():向通讯录中添加某人通讯信息的子函数*///链表结点的插入,按编号次序有序插入//使用两个指针变量p1和p2分别指向当前访问过的结点和下一结点。//循环顺序查找插入结点的位置,其中p1指向待插入位置的前一个结点。.............voidinsertF(FInfoListFhead,Friend*Fp){Friend*p1,*p2;p1=Fhead;p2=p1-next;while(p2!=NULL&&strcmp(p2-FInfo.Fnum,Fp-FInfo.Fnum)0){p1=p2;//p1指向刚访问过的结点p2=p2-next;//p2指向下一个结点}p1-next=Fp;//插入p所指向的结点Fp-next=p2;}④查找通讯录成员信息/*查找模块search():在通讯录中查找某人通讯信息的子函数*///输入要查找的通讯者的编号或姓名,从表头顺序访问表中结点。//如果查找成功,则输出查找到的通讯者信息,返回p。//若查找失败,则输出查找失败,返回p。//把汉字转化为拼音缩写的函数,如李勇-lyboolIn(wchar_tstart,wchar_tend,wchar_tcode){if(code=start&&code=end){returntrue;}returnfalse;}charconvert(wchar_tn){if(In(0xB0A1,0xB0C4,n))return'a';if(In(0XB0C5,0XB2C0,n))return'b';if(In(0xB2C1,0xB4ED,n))return'c';if(In(0xB4EE,0xB6E9,n))return'd';if(In(0xB6EA,0xB7A1,n))return'e';if(In(0xB7A2,0xB8c0,n))return'f';if(In(0xB8C1,0xB9FD,n))return'g';if(In(0xB9FE,0xBBF6,n))return'h';if(In(0xBBF7,0xBFA5,n))return'j';if(In(0xBFA6,0xC0AB,n))return'k';if(In(0xC0AC,0xC2E7,n))return'l';if(In(0xC2E8,0xC4C2,n))return'm';.............if(In(0xC4C3,0xC5B5,n))return'n';if(In(0xC5B6,0xC5BD,n))return'o';if(In(0xC5BE,0xC6D9,n))return'p';if(In(0xC6DA,0xC8BA,n))return'q';if(In(0xC8BB,0xC8F5,n))return'r';if(In(0xC8F6,0xCBF0,n))return's';if(In(0xCBFA,0xCDD9,n))return't';if(In(0xCDDA,0xCEF3,n))return'w';if(In(0xCEF4,0xD188,n))return'x';if(In(0xD1B9,0xD4D0,n))return'y';if(In(0xD4D1,0xD7F9,n))return'z';return'\0';}char*TransformToSpell(charname[]){charchr[3];wchar_twchr=0;char*Spell=newchar[strlen(name)/2];memset(Spell,0x00,sizeof(char)*strlen(name)/2+1);for(unsignedinti=0,j=0;i(strlen(name)/2);++i){memset(chr,0x00,sizeof(chr));chr[0]=name[j
本文标题:c语言通讯录管理系统课程设计报告书
链接地址:https://www.777doc.com/doc-7314381 .html