⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 计算机实习(赵小川-041235).cpp

📁 电子通讯录
💻 CPP
字号:
// 计算机实习一.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#define max 20


struct book                    //定义通讯录
{
	char name[max];
	char tel[max];
	char adj[max];
	char special[max];
	int age;
}q[100];




char zz[max];
int flag=0;
int i;
char o,cr;



void save(int n)                 //保存文件
{
	FILE *fp;
	if((fp=fopen("telebook.txt","wb"))==NULL)
	{
		printf("can not open the file!\n");
		return;
	}

    q[0].age=n;         //q[0].age为写入已存入记录的个数
	for(i=0;i<=n;i++)
	    if(fwrite(&q[i],sizeof(struct book),1,fp)!=1)      //写入文件
			printf("file write error!\n");

	

	fclose(fp);       //关闭文件


	printf("\n\t\t保存成功,请按 y 继续\n"); 
	o='\0';
    while(o!='y')     scanf("%c",&o);
	cr=getchar();

}





void add(int n)      //添加
{
	int al;
	printf("\n\n请(最好用中文)输入姓名\n");                                  //添加新成员
    scanf("%s",zz);
    strcpy(q[n].name,zz);
	printf("请输入联系方式\n");
    scanf("%s",zz);
	strcpy(q[n].tel,zz);  
	printf("请(最好用中文)输入地址\n");
    scanf("%s",zz);
	strcpy(q[n].adj,zz); 
	printf("请(最好用中文)输入注释\n");
    scanf("%s",zz);
	strcpy(q[n].special,zz); 
	printf("请用数字输入年龄\n");
    scanf("%d",&al);
	q[n].age=al;
						 
	cr=getchar(); 
    printf("\n\t通讯录新成员已经加入\n");
	printf("\t请按 y 刷新纪录  \n"); 
    o='\0';
  	while(o!='y')     scanf("%c",&o);
	cr=getchar();
}




void find(int n)
{
	 printf("\n请输入要查找的成员\n");                            //查找某个成员的详细信息
	 scanf("%s",zz);
	 cr=getchar();  
	 for(i=1;i<=n;i++)
	 {
	    if(!strcmp(q[i].name,zz))   
		{
		   flag=1;
		   printf("\n\n该成员已经找到:\n\n%s\t\t%s\t   %s\t     %s\t\t\t%d\n",q[i].name,q[i].tel,q[i].adj,q[i].special,q[i].age);
		   printf("\n请按 y 继续  \n"); 
		   o='\0';
  		   while(o!='y')     scanf("%c",&o);
		   cr=getchar();  
           break;
		}
                            
	}
                        
   if(flag==0)    
	{
    	printf("\n很抱歉,没找到您要查找的成员,请重新输入\n");
	    printf("请按 y 继续  \n"); 
		o='\0';
  		while(o!='y')     scanf("%c",&o);
		cr=getchar(); 
	}
	flag=0;
}





void main(int argc, char* argv[])
{   
	int i,count=0;
	FILE *fp;
    char ch='\0',o='\0',j='\0',cr;        //zz[max]用来输入新数据,j用来确认是否删除,o用来确认是否继续 
	printf("\t\t\t欢迎来到电子通讯录!\n\t\t如果您第一次使用本软件请先添加联系人信息\n\n\t\t如果您已有记录请按f打开以前的记录\n");
    printf("\n\n\n通讯录姓名\t联系方式\t 地址\t     特别注释\t\t     年龄\n");
	

    printf("\n\n\n\n添加请按a   删除请按b   查找请按c   退出请按d   保存请按e      打开以前记录按f\n\n");


    while(ch!='d')
	{   
	  scanf("%c",&ch);
	  cr=getchar();             //cr用来吃回车府     
	  if(ch!='d')
	  {
        switch(ch)
		{        
			case 'a' :   count=count+1;        //通讯录成员数据是从q[1]开始放置的,count的初值为0,先让其加1
				         add(count);				 
						 if(count>100)  printf("\n\n通讯录以满,请和赵小川联系,我们将为你升级!\n");
				         break;





			case 'b' :    printf("\n\n您真的要删除该通讯录成员吗?......取消请按 n! ......确定请按其它任意键\n");        //删除原有成员			                         
				          scanf("%c",&j);
						  cr=getchar();         //cr用来吃回车府
						  if(j=='n')  
						  {
							   printf("\n\n用户已取消操作\n");
							   printf("\n请按 y 继续  \n"); 
						       o='\0';
  				    	       while(o!='y')     scanf("%c",&o);
							   cr=getchar();  
						  }

						  else
						  {
							  printf("\n\n请输入要删除的成员姓名\n");
							  scanf("%s",zz);
							  cr=getchar();  
							  for(i=1;i<=count;i++)
							  {
								  if(!strcmp(q[i].name,zz))           //strcmp函数,如果比较两函数值相等返回值为0!!!!
								  {
									  flag=1;
									  if(i==count)       //如果要删除最后一个数据块,把count的值直接减1即可
									  {   
										  count=count-1;
										  printf("\n\n已删除成功!\n");
									      printf("\n请按 y 清除记录  \n"); 
						                  o='\0';
  				    	                  while(o!='y')     scanf("%c",&o);
				                          cr=getchar(); 
										  break;
									  }

									  else if(i>=count)   
									  {
										  printf("\n通讯录已为空!\n");
										  strcpy(q[0].name,"你好,请重新添加成员,通讯录已空");     //通讯录以空的情况
									      strcpy(q[0].tel,"你好,请重新添加成员,通讯录已空");
                                          strcpy(q[0].adj,"你好,请重新添加成员,通讯录已空");
                                          strcpy(q[0].special,"你好,请重新添加成员,通讯录已空");
										  q[i].age=0;
									      count=0;
									   }

									  else
									  {
									      strcpy(q[i].name,q[count].name);     //如果要删除的成员不是最后一个,则用最后一个成员覆盖掉要删除的成员
									      strcpy(q[i].tel,q[count].tel);
                                          strcpy(q[i].adj,q[count].adj);
                                          strcpy(q[i].special,q[count].special);
										  q[i].age=q[count].age;
	  							          count=count-1;						 
									  }
									 printf("\n已删除成功!\n");
									 printf("\n请按 y 清除记录  \n"); 
						             o='\0';
  				    	             while(o!='y')     scanf("%c",&o);
				                     cr=getchar(); 
								  }
								  
							  }	  
							  if(flag==0)     
							  {
								 printf("\n\n很抱歉,没找到您要删除的成员,请重新输入\n");       //flag是判断是否找到该成员的标志
							     printf("\n请按 y 继续  \n"); 
						         o='\0';
  				    	         while(o!='y')     scanf("%c",&o);
							     cr=getchar();  
							  }
						  }
						  flag=0;			 
						  
				break;



			case 'c' :   find(count);       //查找某个成员的详细信息
                break;

			case 'd' :
			   break;


	      case 'e' :  save(count);                //保存文件
		      break;


		  case 'f' :                                                   //打开文件
                        if((fp=fopen("telebook.txt","rb"))==NULL)
						{
	                    	printf("can not open the file!\n");
		                    return;
						}

				
	                  for(i=0;i<=100;i++)
		                   fread(&q[i],sizeof(struct book),1,fp);    
		                   
			
					   count=q[0].age;         //打开文件时读出count的值,以后作为循环终止的条件
	                   fclose(fp);            //关闭文件

	                   printf("\n\t\t文件打开成功,请按 y 继续\n"); 
                       o='\0';
                       while(o!='y')     scanf("%c",&o);
	                   cr=getchar();


			  break;
                 
                    
           

		  default :   printf("\n\n请确定输入的字符是  a.b.c.d.e.f 中的一个!!!!!!!!!!!!!!!!\n\n");
	      break;

		}				
	

       
		printf("\n\n\n\n欢迎来到电子通讯录!\n");            //打印数据和菜单
      	printf("\n通讯录姓名\t联系方式\t  地址\t     特别注释\t\t      \t年龄\n");
	    for(i=1;i<=count;i++)
	        printf("%s\t\t%s\t  %s\t     %s\t\t\t%d\n",q[i].name,q[i].tel,q[i].adj,q[i].special,q[i].age);

        printf("\n添加请按a   删除请按b   查找请按c   退出请按d   保存请按e      打开以前记录按f\n\n");

	 }
   }




	printf("\n\n\t您即将退出赵小川制作的电子通讯录,新输入的数据保存了吗?\n\n\n\t如果没有保存请按y,软件将为你保存!如果已经保存好请按任意键退出!\n");
	o='\0';
    scanf("%c",&o);
	cr=getchar();
	if(o=='y')  		save(count);       //如果用户在退出前没有保存,软件自动保存数据
       


   printf("\n\n\n\n\t\t\t谢谢使用电子通讯录\n\n\t\t\t   设计者:赵小川\n\n\n\n*^*\t*^*\t*^*\t*^*\t*^*\t*^*\t*^*\t*^*\t*^*\t*^*\n");
   cr=getchar();    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -