第18周 课程设计 --电子模拟通讯录

烟台大学
计算机与控制工程学院
作者:林颖
时间:2016年12月27日
题目:电子模拟通讯录
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h> 
struct person  //每个元素都是结构体类型
{    
	char name[15];  //结构体数组,用于存储姓名  
	char celephone[22];  
	char address[22];   
	char sex[5];
	int len;
  }per[500];  
  //定义一个per数组,它有500个元素     
   int num=0;//*外部变量num为文件中的纪录数*//
   FILE *fp;    
   #define MAX_LINE 100
   void mainmenu();//*主菜单*// 
   void newrecord();//新添纪录(括写入到文件)*//   
   void readfromfile();//*读取文件*//           
   void searchmenu();//*查询菜单*//         
   void searchbyname();//*按姓名查询*//     
   void searchbycelephone();//*按手机号码查询*//         
   void xiugaimenu();//*修改菜单*//        
   void xiugaibyname();//*按姓名查找修改*//        
   void xiugaibycelephone();//*按手机号码查找修改*//    
   void xiugaixiangmu(int a);//*查找后要修改的项目(分名字和号码)*//  
   void deletemenu();//*删除菜单*//    
   void deleteall();//*删除所有信 息*//     
   void deleteone();//*删除单个*//    
   void deletebycelephone();  //*按手机号码删除*//   
   void deletebyname();//*按姓名删除*//  
   void showall();//*输 出 全 部 信 息*//    
   void paixu();//*姓名排序*//
   void main()//*主函数*// 
   {  
	   while (1)  
	   {   
		   mainmenu(); 
	   }   
   } //*主函数结束*// 
void mainmenu()//*主菜单函数*//  
  {  
	  int  a; //以下模块是主界面
	  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(" |         选择8:姓名排序           |\n");
	  printf(" |         选择0:退出系统           |\n\n"); 
	  printf("--------------------------------------------\n"); 
	  printf("\t ******************************************\n"); 
	  printf("【请选择数字0-7,其他键暂时不起作用】\n");
       loop1: 
	  scanf("%d",&a);  
	  switch (a)  
	  {  
	  case 1:readfromfile();
		  break;  
	  case 2:newrecord();
		  break;    
	  case 3:searchmenu();
		  break;   
	  case 4:xiugaimenu();
		  break; 
      case 5:deletemenu();
		  break;  
	  case 6:deleteall();
		  break;  
	  case 7:showall();
		  break;  
	  case 8:paixu();
		  break;
	  case 0:exit(0);  
	  default:printf("对不起!您的输入有误!请重新输入:");
		  getchar();
		  goto loop1;
	  }
  }
****************************************************
功能描述:将输入的联系人的姓名按长度的进行排序
输入:无
输出:有顺序的输出联系人信息
返回值:0
****************************************************

void paixu()//姓名排序
{
     int i;
	 int j;
     char na[15];  //结构体数组,用于存储姓名  
	char ce[22];  
	char add[22];   
	char se[5];
	 if(num!=0)
	 {
		 printf("该通讯录里共有%d个联系人");
		 for(i=0;i<num;i++)
		 {
            per[i].len=strlen(per[i].name);
		 }
		 for(i=0;i<num-1;i++)
		 {
        for(j=i+1;j<num;j++)
		{
           if(per[i].len>per[i+1].len)
		   {
               strcpy(na,per[i+1].name);
			   strcpy(per[i+1].name,per[i].name);
			   strcpy(per[i].name,na);
               
			   strcpy(ce,per[i+1].celephone);
			   strcpy(per[i+1].celephone,per[i].celephone);
			   strcpy(per[i].celephone,ce);

			   strcpy(se,per[i+1].sex);
			   strcpy(per[i+1].sex,per[i].sex);
			   strcpy(per[i].sex,se);

			   strcpy(add,per[i+1].address);
			   strcpy(per[i+1].address,per[i].address);
			   strcpy(per[i].address,add);

			   
		   }
		}
	  }
      for(i=0;i<num;i++)
	  {
		 printf("顺序\t姓名\t\t性别\t\t电话\t\t家庭地址\n");
	     printf("--------------------------------\n");
	 	 printf("[%d]\t%s\t\t%s\t\t%s\t\t%s\n",i+1,per[i].name,per[i].sex,per[i].celephone,per[i].address);
	  }
	 }
}
*****************************************************************
功能描述:将文件里保存的信息按行读出
输入:无
输出:文件中保存的数据
返回值:0
*****************************************************************
void readfromfile()//读取文件
{
	char buf[MAX_LINE];  /*缓冲区*/
	 FILE *fp;            /*文件指针*/
	 int len;             /*行字符个数*/
	 if((fp = fopen("d://string.txt","r")) == NULL)
	 {
		 printf("该文件为空,没有联系人\n");
		 exit (1) ;
	 }
	 while(fgets(buf,MAX_LINE,fp) != NULL)
	 {
		 printf(" 姓名\t\t性别\t\t电话\t\t家庭地址\n"); 
		 len = strlen(buf);
		 buf[len-1] = '\0';  /*去掉换行符*/
		 printf("%s\n",buf);
	 }

}
*****************************************************************
功能描述:向线性表中输入新的联系人
输入:联系人的姓名,性别,手机号,地址
输出:无
返回值:0
*****************************************************************
void newrecord()//*添加纪录模块*// { int a; int i; loop: printf("\n 请输入您要添加的联系人的信息:\n"); printf("请输入姓名:"); name: scanf("%s",&per[num].name); if(strlen(per[num].name)==0) { printf("对不起!您的输入有误!请重新输入:"); goto name; } if((fp=fopen("d:\\string.txt","a"))==NULL) //打开文件 { printf("无法打开文件\n"); exit(1); } fprintf(fp,"%-15s",per[num].name); //将字符串写进文件 fclose(fp); //关闭文件 printf("请输入性别:"); sex: scanf("%s",&per[num].sex); if(strlen(per[num].sex)==0) { printf("对不起!您的输入有误!请重新输入:"); goto sex; } if((fp=fopen("d:\\string.txt","a"))==NULL) //打开文件 { printf("无法打开文件\n"); exit(1); } fprintf(fp,"%-15s",per[num].sex); //将字符串写进文件 fclose(fp); //关闭文件 printf("请输入手机号码:"); celephone: scanf("%s",&per[num].celephone); if(strlen(per[num].celephone)==0) { printf("对不起!您的输入有误!请重新输入:\n"); goto celephone; } if((fp=fopen("d:\\string.txt","a"))==NULL) //打开文件 { printf("无法打开文件\n");exit(1); } fprintf(fp,"%-20s",per[num].celephone); //将字符串写进文件 fclose(fp); //关闭文件 printf("请输入家庭地址:"); address: scanf("%s",&per[num].address); if(strlen(per[num].address)==0) { printf("对不起!您的输入有误!请重新输入"); goto address; } if((fp=fopen("d:\\string.txt","a"))==NULL) //打开文件 { printf("无法打开文件\n"); exit(1); } fprintf(fp,"%-15s\n",per[num].address); //将字符串写进文件 fclose(fp); //关闭文件 num++; printf("\n是否继续添加?\n"); printf("\n[1]继续 [2]不继续\n"); printf("请输入您的选择 "); scanf("%d",&a); if(a==1) { goto loop; } else { printf("\n请按任意数字键返回主菜单"); scanf("%d",&i); return; } }  

*****************************************************************
功能描述:查询联系人的全部信息
输入:联系人的姓名或手机号
输出:联系人的全部信息
返回值:0
*****************************************************************
void searchmenu()//*查询菜单*// **模块3** { int a; printf("\n_______****欢 迎 使 用 查 询 菜 单****_______"); printf("\n [1]按姓名查询"); printf("\n [2]按手机号码查询"); printf("\n 其他键-返回主菜单"); printf("请输入您的选择\n"); scanf("%d",&a); switch (a) { case 1:searchbyname(); break; case 2:searchbycelephone(); break; default:mainmenu(); break; } } 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以下是您查找的联系人的信息");printf("\n********————————————********"); printf("\n名字: %s",per[i].name); printf("\n性别: %s",per[i].sex); printf("\n手机号码: %s",per[i].celephone);printf("\n家庭地址: %s",per[i].address); printf("\n********————————————********");if ((i+1)<num) { printf("\n是否继续查找相同名字的联系人的信息?"); printf("\n[1]继续 [2]不继续"); scanf("%d",&j); if (j==1) { a=i; mark++; continue;} else break; } 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 searchbycelephone()//*1:按手机号码查询*// { int mark=0; int i,j; int a=0; char celephone[11]; printf("\n———————****按手机号码查找****————————\n"); printf("\n请输入手机号码:\n"); scanf("%s",celephone); for(i=0;i<num;i++) { if (strcmp(per[i].celephone,celephone)==0) { printf("\n ———****以下是您查找的联系人的信息***———— "); printf("\n********————————————********"); printf("\n名字: %s",per[i].name); printf("\n性别: %s",per[i].sex); printf("\n手机号码: %s",per[i].celephone);printf("\n家庭地址: %s",per[i].address); printf("\n********————————————********"); printf("\n请按任意数字键返回主菜单"); mark++; scanf("%d",&j); return; } } if (mark==0) { printf("\n对不起!没有该联系人的信息!");printf("\n请按任意数字键返回主菜单"); scanf("%d",&j); return; } }
*****************************************************************
功能描述:修改联系人的相关信息
输入:联系人的姓名或手机号
输出:联系人的信息
返回值:0
*****************************************************************
void xiugaimenu()//*修改菜单*// { int i,j; if(num==0) { printf("\n对不起!文件中无任何纪录!"); printf("\n请按任意数字键返回主菜单"); scanf("%d",&j); return; }else { printf("\n[1]按姓名修改 [2]按手机号码修改\n"); printf("请输入您的数字选择:"); loop6:scanf("%d",&i); switch (i) { case 1:xiugaibyname();break; case 2:xiugaibycelephone();break; default:printf("对不起!您的输入有误!请重新输入:");goto loop6; }}}void xiugaibyname()//*1:按姓名修改*// { int a=0; int findmark=0; int xiugaimark=0; int i,j; char name[15]; printf("\n请输入要修改联系人的姓名:"); scanf("%s",name); for (i=a;i<num;i++) { if (strcmp(per[i].name,name)==0) { printf("\n\t\t以下是您要修改的联系人的纪录:"); findmark++; printf("\n********————————————********"); printf("\n名字: %s",per[i].name); printf("\n性别: %s",per[i].sex); printf("\n手机号码: %s",per[i].celephone);printf("\n家庭地址: %s",per[i].address); printf("\n********————————————********");printf("\n是否修改?"); printf("\n[1]修改 [2]不修改"); printf("请输入您的数字选择:"); scanf("%d",&j); if (j==1) { xiugaixiangmu(i); xiugaimark++; printf("\n\t\t修改成功"); if((i+1)<num) { printf("\n是否继续修改相同姓名的联系人的信息?"); printf("\n[1]继续 [2]不继续"); printf("请输入您的数字选择: "); scanf("%d",&j); if (j==1) { a=i; findmark++; continue; } } printf("\n是否继续修改?(1代表继续;2代表不继续)"); printf("\n[1]继续 [2]不继续"); printf("请输入您的数字选择: "); scanf("%d",&j); if (j==1) xiugaibyname(); return; }}} if ((xiugaimark==0)&&(findmark==0)){ printf("\n没有该联系人的纪录"); printf("\n是否继续修改?)"); printf("\n[1]继续 [2]不继续)"); printf("请输入您的数字选择:");scanf("%d",&j); if (j==1) xiugaibyname(); return; } else if (findmark!=0) { printf("\n没有重名信息"); printf("\n是否继续修改?"); printf("\n[1]继续 [2]不继续)"); printf(" 请输入您的数字选择: ");scanf("%d",&j); if (j==1) xiugaibyname(); return; } }void xiugaibycelephone()//按手机号码修改*// { int findmark=0; int i,j; char celephone[11]; printf("\n请输入要修改联系人的手机号码:"); scanf("%s",celephone);for (i=0;i<num;i++) { if (strcmp(per[i].celephone,celephone)==0) { printf("\n以下是您要修改的联系人的纪录:"); findmark++; printf("\n********————————————********"); printf("\n名字: %s",per[i].name); printf("\n性别: %s",per[i].sex); printf("\n手机号码: %s",per[i].celephone);printf("\n家庭地址: %s",per[i].address); printf("\n********————————————********");printf("\n是否修改?"); printf("\n[1]修改 [2]不修改"); printf(" 请输入您的数字选择: "); scanf("%d",&j); if (j==1) { xiugaixiangmu(i); printf("\n修改成功"); printf("\n是否继续修改?"); printf("\n[1]继续 [2]不继续)"); printf("请输入您的数字选择: "); scanf("%d",&j); if (j==1) xiugaixiangmu(i); break;}}}if (findmark==0){ printf("\n对不起!没有该联系人的纪录!"); printf("\n是否继续修改?"); printf("\n[1]继续 [2]不继续)");printf("请输入您的数字选择: "); scanf("%d",&j); if (j==1) xiugaibycelephone(); return; } }void xiugaixiangmu(int a)//*修改项目*// { int i; printf("\n___***请输入您要修改的项目***____"); printf("\n\n"); printf("\n1-手机号码\n");printf("\n2-姓名\n"); printf("\n3-QQ号码\n");printf("\n4-回主菜单\n"); printf("\n\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 4:mainmenu(); break; default: printf("对不起!您的输入有误!请重新输入:"); goto loop9; }}

*****************************************************************
功能描述:删除联系人的全部信息
输入:联系人的姓名或手机号
输出:反馈信息
返回值:0
*****************************************************************
void deletemenu()//*删除菜单*// { int i,j; if(num==0) { printf("\n对不起!文件中无任何纪录!"); printf("\n请先添加个人信息!"); printf("\n请按任意数字键返回主菜单"); scanf("%d",&j); return; } else { printf("\n______***删 除 菜 单***________"); printf("\n[1]删除单个"); printf("\n[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("对不起!您的输入有误!请重新输入:"); goto loop4; }}}void deleteall()//*删除所有信息*// **模块5.1** { int i,j; printf("\n确认删除?\n"); printf("[1]确认 [2]不删除)\n "); scanf("%d",&i); if (i==1) { fclose(fp); if ((fp=fopen("per.bin","wb"))==NULL) { printf("\n不能打开文件,删除失败"); readfromfile(); } num=0; printf("\n记录已删除!"); printf("\n请按任意数字键返回主菜单"); scanf("%d",&j); return; }}void deleteone()//*删除单个*/ **模块5.2** { int i; printf("\n[1]按手机号码删除 [2]按姓名删除");printf("\n请输入您的选择:"); loop5:scanf("%d",&i);; switch (i) { case 1:deletebycelephone();break; case 2:deletebyname();break; default:printf("对不起!您的输入有误!请重新输入:");goto loop5;}}void deletebyname()//1:按姓名删除*// **模块5.2.1** { int a=0; int findmark=0; int i,j,k; int deletemark=0; char name[15]; printf("\n请输入您要删除的联系人的姓名:"); scanf("%s",name); for (i=a;i<num;i++) { if (strcmp(per[i].name,name)==0) { printf("\n以下是您要删除的联系人的纪录:"); findmark++; printf("\n********————————————********"); printf("\n名字: %s",per[i].name); printf("\n性别: %s",per[i].sex); printf("\n手机号码: %s",per[i].celephone);printf("\n家庭地址: %s",per[i].address); printf("\n********————————————********");printf("\n是否删除?\n");printf("\n[1]删除 [2]不删除\n");printf("\n请输入您的数字选择: "); 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是否继续删除相同姓名的联系人的信息?"); printf("\n[1]删除 [2]不删除)"); printf("\n请输入您的数字选择: "); scanf("%d",&k); if(k=1) { a=i; findmark++; continue; }} printf("\n是否继续删除?"); printf("\n[1]继续 [2]不继续"); printf("\n请输入您的数字选择:"); scanf("%d",&k); if(k==1) deleteone(); else break; } } else continue; } if((deletemark==0)&&(findmark==0)) { printf("\n对不起!没有该联系人的纪录!"); printf("\n是否继续删除?");printf("\n[1]继续 [2]不继续"); printf("请输入您的数字选择: "); scanf("%d",&k); if(k==1) deleteone(); } else if(findmark!=0) { printf("\n对不起!没有重名信息!"); printf("\n是否继续删除?"); printf("\n[1]继续 [2]不继续"); printf("请输入您的数字选择: "); scanf("%d",&k); if(k==1) deleteone(); }}void deletebycelephone()//*2:按手机号码删除*// **模块5.2.2** { int i,j,h,m; int deletemark=0;char celephone[11]; printf("\n请输入要删除的联系人的手机号码:");scanf("%s",celephone); for(i=0;i<num;i++) { if(strcmp(per[i].celephone,celephone)==0) { deletemark++; printf("\n\t\t以下是您要删除的联系人的纪录:"); printf("\n********————————————********"); printf("\n名字: %s",per[i].name); printf("\n性别: %s",per[i].sex); printf("\n手机号码: %s",per[i].celephone);printf("\n家庭地址: %s",per[i].address); printf("\n********————————————********");printf("\n是否删除?\n"); printf("\n[1]删除 [2]不删除)\n");printf(" 请输入您的数字选择:"); scanf("%d",&h); if(h==1) { for (j=i;j<num-1;j++) /*纪录移动,从per数组中删除之*/ per[j]=per[j+1]; num--; printf("\n删除成功"); printf("\n是否继续删除?(1代表继续;2代表不继续)\n"); printf("\n[1]继续 [2]不继续\n");printf(" 请输入您的数字选择: "); scanf("%d",&h); if(h==1) deletebycelephone(); } } } if(deletemark==0) { printf("\n对不起!没有该联系人的纪录!"); printf("\n是否继续删除?\n");printf("\n[1] 继续 [2]不继续");printf("请输入您的数字选择: "); scanf("%d",&m); if(m==1) deletebycelephone(); }}

*****************************************************************
功能描述:输出所有联系人
输入:无
输出:所有联系人
返回值:0
*****************************************************************
void showall()//*输 出 全 部 信 息*// { int i,j; if(num!=0) { printf("\n*************** 以下为通讯录所有信息************");for (i=0;i<num;i++) { printf("\n********————————————********"); printf("\n名字: %s",per[i].name); printf("\n性别: %s",per[i].sex); printf("\n手机号码: %s",per[i].celephone);printf("\n家庭地址: %s",per[i].address); printf("\n********————————————********");printf("\t\t"); if (i+1<num) { printf("\n__________________________"); system("pause"); } } printf("\n************************************************"); } else printf("\n对不起!通讯录中无任何纪录!"); printf("\n请按任意数字键返回主菜单"); scanf("%d",&j);return ;}

实验结果
输入联系人
查询联系人信息
修改联系人信息
删除单个联系人
输出全部联系人
姓名排序
从文件中导入

在文件中保存的关键数据


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值