C语言程序的设计报告_个人通讯录
- 格式:doc
- 大小:95.50 KB
- 文档页数:24
航空航天大学金城学院《C语言程序设计》课程设计报告个人通讯录系统学号::学号::日期:目录一、需求分析: (3)二、程序的主要功能: (3)三、程序运行平台: (3)四、系统总框架图: (6)五、程序类的说明: (6)六、模块分析: (8)七、比较有特色的函数: (9)八、存在的不足与编程体会 (10)九、程序源代码: (10)一、需求分析各类存储和通信电子产品都带有通讯录的功能,可以对联系人进行简单的信息管理和存储。
二、程序的主要功能➢用户信息界面美观、简洁,采用菜单式显示功能选择;➢能够从磁盘文件输入和输出数据;➢能够对联系人信息进行增、删和改的操作;➢能够根据联系人的的拼音顺序从高到低排序;三、程序运行平台VC6.0运行程序“perosnalcontact.exe”,进入登录界面如下***************************** ** ** 通讯录文件不存在! ** 通讯录文件已建立! ** ** *****************************按任意键进入主菜单请输入您的数字选择:一、按下任意键进入主菜单您好! 欢迎使用通讯录!1: 添加个人信息2: 查询个人信息3: 删除个人信息4: 修改个人信息5: 信息排序6: 输出全部信息7: 写入文件8: 读取文件9: 删除所有0: 退出请输入您的数字选择:选择1进入添加信息模块:请输入您要添加的联系人的信息:请输入:选择2进入查询个人信息模块:欢迎使用查询菜单1-按查询2-按QQ查询3-返回主菜单请输入您的选择选择3进入删除个人信息模块删除菜单1-删除单个2-返回主菜单请输入您的数字选择:选择4.进入修改个人信息模块1-按修改请输入您的数字选择:选择5.进入联系人排序模块排序菜单1-按排序2-返回主菜单请输入您的数字选择:选择6.进入输出信息模块*************** 以下为通讯录所有信息************________________________________名字: 13213性别: 2144444444444手机: 44444444444电子:44444444444QQ:444444444________________________________************************************************请按任意数字键返回主菜单选择7.进入写入文件模块通讯录文件已保存请按任意数字键返回主菜单选择8.进入读取信息模块***************************** ** ** 文件导入成功! ** ** *****************************按1显示所有信息,按2回主菜单!请输入您的数字选择:选择9.删除所有信息四、系统总框架图五、程序类的说明struct person{char name[15];char sex[2];char celephone[22];char email[40];long int QQ;}per[500];//定义一个per数据,有500个元素。
六、模块分析1. 添加模块系统将提示用户输入新添加的联系人信息,添加在数据中。
2. 查询模块根据用户输入的或者QQ号,然后运用strcmp函数对数组中的元素进行对比,然后输入匹配的信息。
3. 删除模块首先由用户输入,运用strcmp函数查找,显示匹配的信息,由用户输入1或2进行判断是否删除。
删除之后将num的值-1。
定义int型的findmark,和mark用来判断是否有同名信息,由用户判断时候继续删除同名的联系人。
4. 个人信息修改模块首先由用户输入,查询到匹配的信息,显示出来,由用户判断是否删除,运行xiugaixinxi(a)函数。
5. 排序模块用strcmp函数判断数据中第一个元素和它的后一个元素是否相同,不相同则把数据两个元素进行交换。
6. 写文件模块程序结束时将所有联系人的信息写入到“per.bin”文件中。
7.显示所有信息用for循环将从0到num的所有信息全部打印在屏幕上。
8. 读文件模块程序开始时从“per.bin”读取所有联系人信息。
9. 删除所有信息模块由用户输入航班号和订票数目,系统判断能满足用户需求则输出“订票成功”信息。
先尝试读取文件信息,若读取失败,则输出信息已删除,否则将0赋给num,显示信息已删除。
七、比较有特色的函数void newrecord()//*添加纪录*//{int a;system("cls");system("color 2a");loop: printf("\n\n\n\n\t\t 请输入您要添加的联系人的信息: \n");printf("\n请输入:\n");name: scanf("%s",&per[num].name);if(strlen(per[num].name)>15){printf("\n对不起!您的输入有误!请重新输入");goto name;}八、存在的不足与对策、编程体会添加个人信息的方式过于麻烦,可以使用链表来代替数据,方便临时添加信息。
九、参考文献百度文库十、程序源代码//制作一个个人通讯录,用来保存联系人的,性别,,QQ号,Eamil地址。
//组成部分:1.显示界面2.信息写入磁盘,从磁盘中读取信息3.对联系人信息进行删改4.根据联系人的进行排序#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>struct person{char name[15];char sex[2];char celephone[22];char email[40];long int QQ;}per[500];//定义一个per数据,有500个元素。
int num=0;//*外部变量num为文件中的纪录数*//FILE *fp;void mainmenu();//*主菜单*//void newrecord();//新添纪录*//void xiugaimenu();//*修改菜单*//void xiugaibyname();//*按修改*//void searchmenu();//*查询菜单*//void searchbyname();//*按查询*//void searchbyQQ();//*按QQ号查询*//void deletemenu();//*删除菜单*//void deleteall();//*删除所有信息*//void deleteone();//*删除单个*//void showall();//*输出全部信息*//void readfromfile();//*读取文件*//void writetofile();//*写入文件*// /void deletebyname();//*按删除*/void listbyname();//*按排序*//void listmenu();//*排序菜单*//void deleteall();//*删除所有信息*//void main()//*主函数*//{system("cls");//清空屏幕readfromfile(); //读取文件while (1){mainmenu(); //主菜单}}void mainmenu()//*主菜单函数*//{int a;system("cls");system("color 2a");//更改背景板为绿色printf("\n\t 您好! 欢迎使用通讯录!\n");printf(" 1: 添加个人信息\n");printf(" 2: 查询个人信息\n");printf(" 3: 删除个人信息\n");printf(" 4: 修改个人信息\n");printf(" 5: 信息排序\n");printf(" 6: 输出全部信息\n");printf(" 7: 写入文件\n");printf(" 8: 读取文件\n");printf(" 9: 删除所有\n");printf(" 0: 退出 \n");printf("\n 请输入您的数字选择: \n");loop1: scanf("%d",&a);switch (a){case 1:newrecord();break;case 2:searchmenu();break;case 3:deletemenu();break;case 4:xiugaimenu();break;case 5:listmenu();break;case 6:showall();break;case 7:writetofile();break;case 8:readfromfile();break;case 9:deleteall();break;case 0:exit(0);default:printf("\n对不起!您的输入有误!请重新输入: \n");goto loop1;}}void newrecord()//*添加纪录*//{int a;system("cls");system("color 2a");loop: printf("\n\n\n\n\t\t 请输入您要添加的联系人的信息: \n");printf("\n请输入:\n");name: scanf("%s",&per[num].name);if(strlen(per[num].name)>15){printf("\n对不起!您的输入有误!请重新输入");goto name;}printf("\n请输入性别:\n");sex: scanf("%s",&per[num].sex);if(strlen(per[num].sex)==0){printf("\n对不起!您的输入有误!请重新输入\n");goto sex;}printf("\n请输入手机:\n");celephone: scanf("%s",&per[num].celephone);if(strlen(per[num].celephone)!=11){printf("\n对不起!您的输入有误!请重新输入\n");goto celephone;}printf("\n输入电子:");email: scanf("%s",&per[num].email);if(strlen(per[num].email)>30||strlen(per[num].email)<4){printf("\n对不起!您的输入有误!请重新输入\n");goto email;}printf("\n输入QQ:\n");QQ: scanf("%ld",&per[num].QQ);if(per[num].QQ>1600000000||per[num].QQ<10000000){printf("\n对不起!您的输入有误!请重新输入\n");goto QQ;}num++;printf("\n是否继续添加?\n");printf("\n请按1和2(1代表继续;2代表不继续)\n");printf("\n请输入您的选择 \n ");scanf("%d",&a);if(a==1){goto loop;}else{return;}}void searchmenu()//*查询菜单*//{int a;system("cls");system("color 2a");printf("\n\t\t 欢迎使用查询菜单");printf("\n\t\t 1-按查询");printf("\n\t\t 2-按QQ查询");printf("\n\t\t 3-返回主菜单");printf("\n\t\t");printf("\n请输入您的选择 \n");scanf("%d",&a);switch (a){case 1:searchbyname();break;case 2:searchbyQQ();break;case 3:mainmenu();break;}}void searchbyQQ()//*按QQ查询*//{int mark=0;int i,j;long int QQ;printf("\n\t\t 按QQ查找 \n");printf("\n请输入QQ:");scanf("%ld",&QQ);for(i=0;i<num;i++){if(per[i].QQ==QQ){printf("\n\t\t 以下是您查找的联系人的信息 ");printf("\n\t\t________________________________");printf("\n\t\t名字: %s",per[i].name);printf("\n\t\t性别: %s",per[i].sex);printf("\n\t\t手机: %s",per[i].celephone);printf("\n\t\t电子:%s",per[i].email);printf("\n\t\tQQ:%ld",per[i].QQ);printf("\n\t\t________________________________");printf("\n\t\t请按任意数字键返回主菜单");mark++;scanf("%d",&j);return;}}if (mark==0){printf("\n\t\t对不起!没有该联系人的信息!");printf("\n\t\t请按任意数字键返回主菜单");scanf("%d",&j);return;}}void searchbyname()//*按查询*//{int mark=0;int i,j,findmark=0;int a=0;char name[15];printf("\n 按查找 ");printf("\n请输入:");scanf("%s",name);for(i=a;i<num;i++){if (strcmp(per[i].name,name)==0){findmark++;printf("\n\t\t 以下是您查找的联系人的信息 ");printf("\n\t\t________________________________");printf("\n\t\t名字: %s",per[i].name);printf("\n\t\t性别: %s",per[i].sex);printf("\n\t\t手机: %s",per[i].celephone);printf("\n\t\t电子:%s",per[i].email);printf("\n\t\tQQ:%ld",per[i].QQ);printf("\n\t\t________________________________");if ((i+1)<num){printf("\n是否继续查找相同名字的联系人的信息?(1代表继续;2代表不继续)\n");scanf("%d",&j);if (j==1){a=i;mark++;continue;}elsebreak;}else{printf("\n请按任意数字键返回主菜单");scanf("%d",&j);return;}}}if(mark!=0){printf("\n对不起! 没有相同名字的该联系人的信息!!");printf("\n请按任意数字键返回主菜单");scanf("%d",&j);return;}else if(findmark==0){printf("\n对不起!没有该联系人的信息!");printf("\n请按任意数字键返回主菜单");scanf("%d",&j);return;}}void deletebycelephone()//*按手机删除*//{int i,j,h,m;int deletemark=0;char celephone[11];printf("\n\t\t请输入要删除的联系人的手机:");scanf("%s",celephone);for(i=0;i<num;i++){if(strcmp(per[i].celephone,celephone)==0){deletemark++;printf("\n\t\t以下是您要删除的联系人的纪录:");printf("\n\t\t________________________________");printf("\n\t\t名字: %s",per[i].name);printf("\n\t\t性别: %s",per[i].sex);printf("\n\t\t手机: %s",per[i].celephone);printf("\n\t\t电子:%s",per[i].email);printf("\n\t\tQQ:%ld",per[i].QQ);printf("\n\t\t________________________________");printf("\n\t\t是否删除?(1代表删除;2代表不删除)\n");printf("\n 请输入您的数字选择: \n");scanf("%d",&h);if(h==1){for (j=i;j<num-1;j++) /*纪录移动,从per数组中删除之*/per[j]=per[j+1];num--;printf("\n\t\t删除成功");printf("\n是否继续删除?(1代表继续;2代表不继续)\n");printf("\n 请输入您的数字选择: \n");scanf("%d",&h);if(h==1)deletebycelephone();}}}if(deletemark==0){printf("\n\t\t对不起!没有该联系人的纪录!");printf("\n\t\t是否继续删除?(1代表继续;2代表不继续)\n");printf("\n 请输入您的数字选择: \n");scanf("%d",&m);if(m==1)deletebycelephone();}}void deletemenu()//*删除菜单*//{int i,j;system("cls");system("color 3b");if(num==0){printf("\n\t\t对不起!文件中无任何纪录!");printf("\n\t\t请先添加个人信息!");printf("\n\t\t请按任意数字键返回主菜单");scanf("%d",&j);return;}else{printf("\n\t\t 删除菜单 ");printf("\n\t\t 1-删除单个 ");printf("\n\t\t 2-返回主菜单 ");printf("\n\t\t ");printf("\n\t\t请输入您的数字选择: ");loop4: scanf("%d",&i);switch (i){case 1:deleteone();break;case 2:mainmenu();break;default:printf("\n对不起!您的输入有误!请重新输入: \n");goto loop4;}}}void deleteone()//*删除单个*//{int i;printf("\n\t\t1-按手机删除 2-按删除");printf("\n\t\t请输入您的选择:");loop5:scanf("%d",&i);;switch (i){case 1:deletebycelephone();break;case 2:deletebyname();break;default:printf("\n对不起!您的输入有误!请重新输入: \n");goto loop5;}}void deletebyname()//删除*//{int a=0;int findmark=0;int i,j,k;int deletemark=0;char name[15];printf("\n\t\t请输入您要删除的联系人的:");scanf("%s",name);for (i=a;i<num;i++){if (strcmp(per[i].name,name)==0){printf("\n\t\t以下是您要删除的联系人的纪录:");findmark++;printf("\n\t\t________________________________");printf("\n\t\t名字: %s",per[i].name);printf("\n\t\t性别: %s",per[i].sex);printf("\n\t\t手机: %s",per[i].celephone);printf("\n\t\t电子:%s",per[i].email);printf("\n\t\tQQ:%ld",per[i].QQ);printf("\n\t\t________________________________");printf("\n\t\t是否删除?(1代表删除;2代表不删除)\n");printf("\n\t\t请输入您的数字选择: ");scanf("%d",&k);if(k==1){for (j=i;j<num-1;j++) //*纪录移动,从per数组中删除之*//per[j]=per[j+1];num--;deletemark++;printf("\n\t\t删除成功");if((i+1)<num){printf("\n\t\t是否继续删除相同的联系人的信息?(1代表删除;2代表不删除)");printf("\n\t\t请输入您的数字选择: ");scanf("%d",&k);if(k=1){a=i;findmark++;continue;}}printf("\n\t\t是否继续删除?(1代表继续;2代表不继续)"); printf("\n\t\t请输入您的数字选择: ");scanf("%d",&k);if(k==1)deleteone();elsebreak;}}elsecontinue;}if((deletemark==0)&&(findmark==0)){printf("\n\t\t对不起!没有该联系人的纪录!");printf("\n\t\t是否继续删除?(1代表继续;2代表不继续)");printf("\n 请输入您的数字选择: \n");scanf("%d",&k);if(k==1)deleteone();}else if(findmark!=0){printf("\n\t\t对不起!没有重名信息!");printf("\n\t\t是否继续删除?(1代表继续;2代表不继续)");printf(" \n 请输入您的数字选择: \n");scanf("%d",&k);if(k==1)deleteone();}}void xiugaimenu()//*修改菜单*//{int i,j;system("cls");system("color 3f");if(num==0){printf("\n\t\t对不起!文件中无任何纪录!");printf("\n\t\t请按任意数字键返回主菜单");scanf("%d",&j);return;}else{printf("\n\t\t 1-按修改 \n");printf(" \n 请输入您的数字选择: \n");loop6:scanf("%d",&i);switch (i){case 1:xiugaibyname();break;default:printf("\n对不起!您的输入有误!请重新输入: \n");goto loop6;}}}void xiugaixiangmu(int a)//*修改项目*//{int i;system("cls");system("color c0");printf("\n\t\t 请输入您要修改的项目 ");printf("\n\t\t\n");printf("\n\t\t1-手机\n");printf("\n\t\t2-\n");printf("\n\t\t3-QQ\n");printf("\n\t\t4-电子\n");printf("\n\t\t5-回主菜单\n");printf("\n\t\t\n");printf("\n 请输入您的数字选择: ");scanf("%d",&i);loop9: switch (i){case 1:printf("请输入手机:");scanf("%s",&per[a].celephone);break;case 2:printf("请输入:");scanf("%s",&per[a].name);break;case 3:printf("请输入QQ:");scanf("%s",&per[a].QQ);break;case 4:printf("请输入email:");scanf("%s",&per[a].email);break;case 5:mainmenu();break;default: printf("\n对不起!您的输入有误!请重新输入: \n ");goto loop9;}}void xiugaibyname()//*按修改*//{int a=0;int findmark=0;int xiugaimark=0;int i,j;char name[15];printf("\n\t\t请输入要修改联系人的:");scanf("%s",name);for (i=a;i<num;i++){if (strcmp(per[i].name,name)==0){printf("\n\t\t以下是您要修改的联系人的纪录:");findmark++;printf("\n\t\t________________________________");printf("\n\t\t名字: %s",per[i].name);printf("\n\t\t性别: %s",per[i].sex);printf("\n\t\t手机: %s",per[i].celephone);printf("\n\t\t电子:%s",per[i].email);printf("\n\t\tQQ:%ld",per[i].QQ);printf("\n\t\t________________________________");printf("\n\t\t是否修改?(1代表修改;2代表不修改)");printf(" \n 请输入您的数字选择: \n ");scanf("%d",&j);if (j==1){xiugaixiangmu(i);xiugaimark++;printf("\n\t\t修改成功");if((i+1)<num){printf("\n\t\t是否继续修改相同的联系人的信息?(1代表继续;2代表不继续)");printf(" \n 请输入您的数字选择: \n");scanf("%d",&j);if (j==1){a=i;findmark++;continue;}}printf("\n\t\t是否继续修改?(1代表继续;2代表不继续)");printf(" 请输入您的数字选择: ");scanf("%d",&j);if (j==1)xiugaibyname();return;}}}if ((xiugaimark==0)&&(findmark==0)){printf("\n\t\t没有该联系人的纪录");printf("\n\t\t是否继续修改?(1代表继续;2代表不继续)");printf(" \n 请输入您的数字选择: \n");scanf("%d",&j);if (j==1)xiugaibyname();return;}else if (findmark!=0){printf("\n\t\t没有重名信息");printf("\n\t\t是否继续修改?(1代表继续;2代表不继续)");printf(" \n 请输入您的数字选择: \n ");scanf("%d",&j);if (j==1)xiugaibyname();return;}}void listmenu()//*排序菜单*//{int i,j;system("cls");system("color b0");if(num==0){printf("\n\t\t对不起,文件中无任何纪录");printf("\n\t\t请按任意数字键返回主菜单");scanf("%d",&j);return;}else{system("cls");system("color 12");printf("\n\t\t 排序菜单 ");printf("\n\t\t 1-按排序 ");printf("\n\t\t 2-返回主菜单 ");printf(" \n 请输入您的数字选择: \n");loop10: scanf("%d",&i);switch(i){case 1:listbyname();break;case 2:mainmenu();break;default:printf("\n对不起!您的输入有误!请重新输入: \n ");goto loop10;}}}void listbyname()//*按排序*//{int i,j,k;struct person tmp;for (i=1;i<num;i++){if(strcmp(per[i].name,per[i-1].name)<0){tmp=per[i];j=i-1;do{per[j+1]=per[j];j--;}while ((strcmp(,per[j].name)<0&&j>=0));per[j+1]=tmp;}}printf("\n\t\t排序成功,是否显示?(1代表继续;2代表不继续)");printf(" \n请输入您的数字选择: \n ");scanf("%d",&k);if (k==1)showall();return;}void showall()//*输出全部信息*//{int i,j;system("cls");system("color 3b");if(num!=0){printf("\n\t\t*************** 以下为通讯录所有信息************");for (i=0;i<num;i++){printf("\n\t\t________________________________");printf("\n\t\t名字: %s",per[i].name);printf("\n\t\t性别: %s",per[i].sex);printf("\n\t\t手机: %s",per[i].celephone);printf("\n\t\t电子:%s",per[i].email);printf("\n\t\tQQ:%ld",per[i].QQ);printf("\n\t\t________________________________");printf("\t\t");if (i+1<num){printf("\n\t\t__________________________");system("pause");}}printf("\n\t\t************************************************");}elseprintf("\n\t\t对不起!通讯录中无任何纪录!");printf("\n\t\t请按任意数字键返回主菜单");scanf("%d",&j);return;}void writetofile()//*写入文件*//{int i,k;system("cls");system("color 84");if ((fp=fopen("per.bin","wb"))==NULL){printf("\n\t\t文件打开失败");}for (i=0;i<num;i++){if (fwrite(&per[i],sizeof(struct person),1,fp)!=1){printf("\n\t\t写入文件错误!\n");}}fclose(fp);printf("\n\t\t通讯录文件已保存");printf("\n\t\t请按任意数字键返回主菜单");scanf("%d",&k);return;}void readfromfile()//*读取文件*//{int i,j,k;system("cls");system("color 2b");if((fp=fopen("per.bin","rb"))==NULL){printf("\n\t\t****************************");printf("\n\t\t* *");printf("\n\t\t* *");printf("\n\t\t* 通讯录文件不存在! *");if ((fp=fopen("per.bin","wb"))==NULL){printf("\n* 建立失败! *");printf("\n* *");printf("\n* *");printf("\n****************************");exit(0);}else{printf("\n\t\t* 通讯录文件已建立! *");printf("\n\t\t* *");printf("\n\t\t* *");printf("\n\t\t****************************");printf("\n\t\t 按任意键进入主菜单 ");printf("\n\t\t 请输入您的数字选择: ");scanf("%d",&k);return;}exit(0);}fseek(fp,0,2); //*文件位置指针移动到文件末尾*//if (ftell(fp)>0) //*文件不为空*//{rewind(fp); //*文件位置指针移动到文件开始位置*//for (num=0;!feof(fp) && fread(&per[num],sizeof(struct person),1,fp);num++);printf("\n\t\t****************************");printf("\n\t\t* *");printf("\n\t\t* *");printf("\n\t\t* 文件导入成功! *");printf("\n\t\t* *");printf("\n\t\t* *");printf("\n\t\t****************************");printf("\n\t\t 按1显示所有信息,按2回主菜单! ");printf("\t\t\n 请输入您的数字选择: \n");scanf("%d",&j);if(j==1)showall();}else{printf("\n\t\t****************************");printf("\n\t\t* *");printf("\n\t\t* *");printf("\n\t\t* 文件导入成功! *");printf("\n\t\t* 通讯录文件中无任何纪录! *");printf("\n\t\t* *");printf("\n\t\t* *");printf("\n\t\t****************************");printf("\n\t\t请按任意数字键返回主菜单");scanf("%d",&i);return;}}void deleteall()//*删除所有信息*//{int i,j;system("cls");system("color 50");printf("\n\t\t确认删除?\n");printf("请按1和2(1代表确认;2代表不删除)\n ");scanf("%d",&i);if (i==1){fclose(fp);if ((fp=fopen("per.bin","wb"))==NULL){printf("\n\t\t不能打开文件,删除失败");readfromfile();}num=0;printf("\n\t\t纪录已删除!");printf("\n\t\t请按任意数字键返回主菜单");scanf("%d",&j);return;}}。