精华内容
下载资源
问答
  • 基于C电子通讯录管理系统 实验目的与要求: 1.进一步熟悉C语言数据类型、运算符、表达式、程序控制结构。 2.掌握C语言数组和动态链表熟练使用。 3.掌握C语言指针使用。4.掌握C语言结构体使用。 5....

    基于C的电子通讯录管理系统

    实验目的与要求:

    1.进一步熟悉C语言的数据类型、运算符、表达式、程序控制结构。
    2.掌握C语言的数组和动态链表的熟练使用。
    3.掌握C语言的指针的使用。4.掌握C语言的结构体的使用。
    5.掌握C语言文件操作命令的使用。
    6.以上知识的综合练习完成电子通讯录管理系统代码的编写。

    程序

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define N 100struct record
    {
    //保存姓名	
    char name[20];
    //保存电子邮件					
    char email[30];
    //保存家庭住址					
    char homeaddr[60];
    //保存手机号				
    char telephone[13];			
    }records[N];	//结构体数组
    int i; 
    void Read_Data() /*读文件*/
    {//说明fp是指针,用来指向FILE类型的对象 	
    FILE*fp;								
    fp=fopen("D:\\yinzhihui.txt","a+");
    /*fopen函数是打开一个文件,文件指针名=fopen(文件名,使用文件方式)*/	i=0;	
    	while(!feof(fp))//feof:文件结束,返回非0值,文件未结束,返回0值 
    	{	
    	fscanf(fp,"%s%s%s%s",records[i].name,records[i].email,records[i].homead dr,records[i].telephone);		
    	i++;
    	}	
    	fclose(fp);//如果流成功关闭,fclose 返回 0,否则返回EOF(-1)
    }  
    //添加联系人
    void Add_People(char name[20])						
    {	
    	int j,n;	
    	for(j=0;j<=i;j++)	//将添加的联系人以名字排序
    	{ 		
    		if(strcmp(records[j].name,name)>0)
    		break;//strcmp:两个字符串自左向右逐个字符相比(按ASCII值),直到出现不同的字符或遇'\0'为止	
    	}	
    	for(n=i;n>=j;n--)	//将第i个信息变成第i+1个	
    	{			
    		strcpy(records[n+1].name,records[n].name);/*trcpy把后一个字符串复制前面的数组*/		
    		strcpy(records[n+1].email,records[n].email);        				strcpy(records[n+1].homeaddr,records[n].homeaddr);				strcpy(records[n+1].telephone,records[n].telephone);	
    	}		
    	i++;		
    	strcpy(records[j].name,name);  //将联系人姓名存到结构体
    	printf("\n请输入联系人的电子邮件:");	    
    	scanf("%s",records[j].email);		
    	printf("\n请输入联系人的家庭地址:");	   
    	scanf("%s",records[j].homeaddr);		
    	printf("\n请输入联系人的电话:");	    
    	scanf("%s",records[j].telephone);		
    	printf("\n添加成功!\n");
    } 
    int Search_Name(char namestr[20])   //查询
    {	
    	int j;	
    	for(j=0;j<=i;j++)	
    	{
    		if(strcmp(namestr,records[j].name )==0)
    		break;
    	}		//比较不同,相同输出	
    	return j;
    }
    void DeletePeo()			//删除
    {	
    	char nametemp[20];	
    	int tp,n;	
    	if(i<1)	
    	{
    		printf("\n没有删除的记录\n");
    		return;
    	}	
    	printf("请输入您要查找的联系人姓名:");	
    	scanf("%s",nametemp);	
    	n=Search_Name(nametemp);	
    	if(n>i)	
    	{
    		printf("查找失败!\n");
    		return;
    	}	
    	printf("确认要删除吗?确认按1,否则按任意键返回上一级菜单!\n");	
    	scanf("%d",&tp);	
    	if(tp==1)	//确定输入1,删除	
    	{		
    		int j;	
    		for(j=n+1;j<=i;j++)
    		{		
    			strcpy(records[j-1].name,records[j].name);						strcpy(records[j-1].email,records[j].email);					strcpy(records[j-1].homeaddr,records[j].homeaddr);	
    			strcpy(records[j-1].telephone,records[j].telephone);	
    		}	
    		i--;	
    	}	
    	else return;
    }  
    void Data_Show(int n)		//显示
    {
    	printf("%s %s %s %s\n",records[n].name,records[n].email,records[n].homeaddr,records[n].telephone);
    }
     void Change(char name[20])	//修改
     {	
    	int n,m;	
    	char string[60];	
    	n=Search_Name(name);//判断修改的联系人是否存在	
    	if(n>i)	
    	{
    		printf("您查找的联系人不存在!\n");
    		return;
    	}	
    	Data_Show(n);	//显示联系人的信息	
    	printf("请选择你要修改的资料:\n1修改联系人姓名;\n2修改联系人电子邮箱;\n3修改联系人地址;\n4修改联系人电话;\n5退出!;\n\n");	
    	scanf("%d",&m);	
    	while(m!=5)	
    	{	
    		switch(m)		
    		{		
    			case 1:printf("请输入新的姓名:");
    			 	scanf("%s",string);			
    			 	strcpy(records[n].name ,string);
    			 	break;	
    			 case 2:printf("请输入新的电子邮件:");	
    			 		scanf("%s",string);											strcpy(records[n].email ,string);
    			 		break;	
    			case 3:printf("请输入新的地址:");
    			 	scanf("%s",string);	
    			 	 strcpy(records[n].homeaddr  ,string);
    			 	 break;	
    			case 4:printf("请输入新的电话:");
    			 	scanf("%s",string);		
    			 	strcpy(records[n].telephone  ,string);
    			 	break;	
    			case 5:return; 		
    		}		
    		printf("请继续选择你要修改的资料:\n1修改联系人姓名;\n2修改联系人电子邮箱;\n3修改联系人地址;\n4修改联系人电话;\n5退出!;\n\n");	
    		scanf("%d",&m);	
    	}
    }  
    void Data_Save()//保存
    {	
    	FILE*fp;int n;fp=fopen("D:\\yinzhihui.txt","w+");       //将信息保存到文件yinzhihui.txt中
    	for(n=0;n<=i;n++)
    	{	
    		fprintf(fp,"%s %s %s %s",records[n].name,records[n].email,records[n].homeaddr,records[n].telephone);
    		fprintf(fp,"\n");
    	}
    	fclose(fp);
    }   
     void main()
    {
    	int ch,m,n;	
    	char tp,nametemp[20];	
    	Read_Data();   //把文件数据导入文件yinzhihui.txt中	
    	i--;	
    	printf("电子通讯录:\n");	
    	printf("请选择您需要的操作:\n");	
    	printf("1修改;\n2查看所有联系人;\n3删除联系人;\n4查询联系人;\n5添加联系人;\n6保存;\n7退出\n\n");	
    	scanf("%d",&ch);	
    	while(ch!=7)	
    	{		
    		switch(ch)		
    		{		
    			case 1:printf("请输入要修改的联系人姓名:");		
    				scanf("%s",nametemp);			
    				Change(nametemp);
    				break;		
    			case 2:for(m=0;m<=i;m++)Data_Show(m);
    				break;		
    			case 3:DeletePeo();
    				break;		
    			case 4:printf("请输入您要查询的人的姓名:");		
    				scanf("%s",nametemp);			
    				n=Search_Name(nametemp);			
    				if(n>i) printf("没有您要找的联系人姓名:");	
    				else Data_Show(n);
    				break;		
    			case 5:printf("请输入待添加的联系人的姓名:");	
    				scanf("%s",nametemp);			
    				Add_People(nametemp);break;		
    			case 6:printf("保存数据吗?确定按8键,否则按任意键选择其他操作!\n");			
    				scanf("%d",&tp);			
    				if(tp==8) Data_Save();
    				break;		
    			case 7:return;		
    		}		
    		printf("\n1修改;\n 2查看所有联系人;\n 3删除联系人;\n 4查询联系人;\n 5添加联系人;\n6保存;\n 7退出\n\n");		
    		scanf("%d",&ch);	
    	}
    }  

    结果

    在这里插入图片描述

    展开全文
  • 基于vc做一个简单的通讯录管理系统,主要目的是为了学习文档序列化操作,如何把数据存到一个文件当中,若数据多而且重要,为了安全性,最好用数据库,文件只不过方便和简单,望大家注意。
  • 2需求概述 系统目标 运行环境 设备 支持程序 用户特点 2.3功能需求 功能介绍 系统用例图 2.4实体关系图 第三章概要设计 3.1范围 标识 系统概述 3.2系统结构 3.3 通讯录界面设计 第四章 系统详细设计 4.1 范围 (1)...
  • 通讯录管理系统C语言课程设计

    万次阅读 多人点赞 2017-02-27 08:53:49
    这是本人之前做的一个课设,代码比较繁琐(由于当时不想花太多时间以致没有进行压缩)一些但思路比较清晰 一、 课程设计的目的和要求 目的:在已学C语言的基础上,编写一个... 本次课程设计的通讯录管理系统,本小组共

    这是本人之前做的一个课设,代码比较繁琐(由于当时不想花太多时间以致没有进行压缩)一些但思路比较清晰

    注:给出的代码可能由于种种问题复制代码出问题,在此给出源文件:链接:http://pan.baidu.com/s/1pKInR3X 密码:yv6w

    一、 课程设计的目的和要求

    目的:在已学C语言的基础上,编写一个具有实际功能的程序,掌握实际应用程序开发的基本流程——构思,设计框架,所用知识,程序编写,编译测试,程序完成。

    要求:编写一个通讯录,完成显示、添加、查找和修改等操作

    二、设计

         本次课程设计的通讯录管理系统,本小组共提供了九种基本的功能:

    1.  添加联系人

    2.  查询联系人 

    3.  删除联系人

    4.  修改联系人信息

    5.  输出联系人列表

    6.  排序

    7.  写入文件

    8.  读取文件

    9.  通话记录

    现在对每个功能进行分析:

    添加联系人:

          我们设定的联系人信息是由姓名、手机号、QQ、电子邮箱组成,故对其依次输入,而且对于不同的信息对象,我们做出了不同的限定:姓名我们给足了空间(按个人喜好设定联系人姓名),手机号我们限定为11位数字字符串,QQ号码限定为10位数字字符串,电子邮箱只能有一个@号。另外,对于联系人信息的每一项(这里除了姓名),只要输入不符,则重新输入直到你输入的格式正确为止。以下以其中某一项为例进行分析。

          以手机号码为例:其中的cala函数用于计算字符串的长度,这里指手机号的长度。


    查询联系人:

          首先,我们查询的方式可能不同:有些人想查姓名,而有些人查手机号,有些

          人则查QQ号码。对于每一项,我们输入想查的信息项,再通过p=head->next

          遍历整个链表,依次进行比对,比对成功便输出此项的相关信息,若失败,则

          提示“该联系人不存在”。

    删除联系人:

          删除联系人也很简单,也就是删除链表中的一项,其思路如以下图示:

     

    修改联系人信息:

         和查询一样,首先遍历找到所输入的信息项,再进行修改。

    输出联系人列表:

         通过head指针直接将链表输出。

    排序:

         如果想要交换链表中两项的位置,则:

     

     


    写入文件:

          通过fp=fopen(filename,"a+")打开文件,通过fprintf按所输入形式往文件写入信息。

    读取文件:

         通过fp=fopen(filename,"a+")打开文件,通过fgets获取文件中的信息,并用printf

         输出。

    通话记录:

          这里我们设计了一个模拟通话,用一个随机数来表示,假如随机数的值位于链表中项数之内,则在相应的文件中写入联系人信息,如果位于链表项数之外,则在相应文件中写入未知联系人。

    三、编码

    提示:由于程序的提示信息比较多,同时,为了使得该程序功能更加全面,添加了许多判断,程序比较繁琐,代码量也比较多。

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<conio.h>
    #include<time.h>
    typedef struct chsystem
    {
    	char name[15];//姓名
    	char tel[20];//手机
    	char tecent[15];//qq号码
    	char email[20];//邮箱
    }cs;//通讯录结构体
    
    typedef struct pcs
    {
    	cs chat;
    	pcs* next;
    }*ptcs;//通讯录节点
    ptcs head=(ptcs)malloc(sizeof(pcs));
    
    int menu_select()//功能选择框
    {
    	char c;
    	do
    	{
    		system("cls");
    		printf("\n\t\t**********通讯录管理系统**********\n");
    		printf("\t\t┌-------------------------------┐\n");
    		printf("\t\t│        1.添加联系人           │\n");
    		printf("\t\t│        2.查询联系人           │\n");
    		printf("\t\t│        3.删除联系人           │\n");
    		printf("\t\t│        4.修改联系人信息       │\n");
    		printf("\t\t│        5.输出联系人列表       │\n");
    		printf("\t\t│        6.排序                 │\n");
    		printf("\t\t│        7.写入文件             │\n");
    		printf("\t\t│        8.读取文件             │\n");
    		printf("\t\t│        9.通话记录             │\n");
    		printf("\t\t│        0.退出                 │\n");
    		printf("\t\t└-------------------------------┘\n");
    		printf("\t\t请您选择(0-9):");    
    		c=getchar(); 
    	}while(c<'0'||c>'9');//检查输入是否符合规范
    	return(c-'0');
    }
    
    int cala(char *p)//计算字符串长度
    {
    	int i,n=0;
    	for(i=0;p[i]!='\0';i++)n++;
    	return n;
    }
    
    int Addpeo()//添加联系人
    {
    	int t,n,a;
    	char flag='y';
    	ptcs p=head,q;
    	while(p->next)p=p->next;
    	while(flag!='n'&&flag!='N')
    	{
    		q=(ptcs)malloc(sizeof(pcs));
    		p->next=q;
    		p=q;
    		q->next=NULL;
    		printf("\n\t\t请输入:\n");
    		printf("\t\t姓名:");//输入姓名
    		scanf("\t\t%s",q->chat.name);
    		printf("\t\t手机号码:");//输入手机号
    		scanf("\t\t%s",q->chat.tel);
    		do
    		{
    			n=0;
    			if(cala(q->chat.tel)!=11)
    			{					
    				n=1;
    				printf("\t\t您输入的手机号码格式不存在,请重新输入:");
    				scanf("\t\t%s",q->chat.tel);
    			}
    			else 
    			{
    				for(t=0;t<11;t++)
    				{
    					if(q->chat.tel[t]<'0'||q->chat.tel[t]>'9')
    					{
    						n=1;
    						printf("\t\t您输入的手机号码格式不合理,请重新输入:");
    						scanf("\t\t%s",q->chat.tel);
    						break;
    					}
    				}
    			}
    		}while(n);
    		printf("\t\tQQ号:");//输入QQ号
    		scanf("\t\t%s",q->chat.tecent);
    		do
    		{
    			n=0;
    			if(cala(q->chat.tecent)>10)
    			{					
    				n=1;
    				printf("\t\t您输入的QQ号码格式不存在,请重新输入:");
    				scanf("\t\t%s",q->chat.tecent);
    			}
    			else 
    			{
    				for(t=0;t<10;t++)
    				{
    					if(q->chat.tecent[t]<'0'||q->chat.tecent[t]>'9')
    					{
    						n=1;
    						printf("\t\t您输入的QQ号码格式不合理,请重新输入:");
    						scanf("\t\t%s",q->chat.tecent);
    						break;
    					}
    				}
    			}
    		}while(n);
    		printf("\t\t电子邮箱:");//输入邮箱
    		scanf("\t\t%s",q->chat.email);
    		do
    		{
    			a=0;
    			for(t=0;q->chat.email[t]!='\0';t++)
    			{
    				if(q->chat.email[t]=='@')
    					a++;
    			}
    			if(a!=1)
    			{
    				printf("\t\t输入的邮箱不合理,请重新输入:");
    				scanf("\t\t%s",q->chat.email);
    			}
    		}while(a!=1);
    		printf("\n\t\t是否继续添加?(Y/N)");      
    		scanf("\t\t%c",&flag);  
    	}
    	return 0;
    }
    
    int watch_over()//查询联系人
    {
    	int m,n;
    	char flag='y';
    	ptcs p=head->next;
    	while(flag!='n'&&flag!='N')
    	{
    		printf("\n\t\t*************查询方式*************\n");
    		printf("\t\t┌-------------------------------┐\n");
    		printf("\t\t│          1.查找姓名           │\n");
    		printf("\t\t│          2.查找手机号         │\n");
    		printf("\t\t│          3.查找QQ号码         │\n");
    		printf("\t\t│          4.返回               │\n");
    		printf("\t\t└-------------------------------┘\n");
    		printf("\n\t\t请选择查询方式:");
    		scanf("\t\t%d",&m);//选择查询方式
    		do
    		{
    			n=0;
    			if(m!=1&&m!=2&&m!=3&&m!=4)
    			{	
    				n=1;
    				printf("\t\t您输入的查询方式不存在,请重新输入:");
    				scanf("\t\t%d",&m);//选择查询方式
    			}
    		}while(n);
    		if(!p)
    		{
    			printf("\t\t该通讯录为空!\n");
    			return 0;
    		}
    		if(1==m)
    		{
    			char nm[15];
    			p=head->next;
    			printf("\t\t请输入您要查询的联系人:");
    			scanf("\t\t%s",nm);
    			while(p!=NULL&&strcmp(p->chat.name,nm)!=0)p=p->next;
    			if(!p)
    			{
    				printf("\t\t您要查询的联系人不存在!\n");
    				printf("\t\t是否继续查询?(Y/N)");
    				scanf("\t\t%c",&flag);
    				return 0;
    			}
    			printf("\t\t手机号码:%s\n",p->chat.tel);
    			printf("\t\tqq号:%s\n",p->chat.tecent);
    			printf("\t\t电子邮箱:%s\n",p->chat.email);
    		}
    		if(2==m)
    		{
    			char te[20];
    			p=head->next;
    			printf("\t\t请输入您要查询的手机号码:");
    			scanf("\t\t%s",te);
    			while(p!=NULL&&strcmp(p->chat.tel,te)!=0)p=p->next;
    			if(!p)
    			{
    				printf("\t\t您要查询的联系人不存在!\n");
    				printf("\t\t是否继续查询?(Y/N)");
    				scanf("\t\t%c",&flag);
    				return 0;
    			}
    			printf("\t\t姓名:%s\n",p->chat.name);
    			printf("\t\tqq号:%s\n",p->chat.tecent);
    			printf("\t\t电子邮箱:%s\n",p->chat.email);
    		}
    		if(3==m)
    		{
    			char qq[15];
    			p=head->next;
    			printf("\t\t请输入您要查询的qq号:");
    			scanf("\t\t%s",qq);
    			while(p!=NULL&&strcmp(p->chat.tecent,qq)!=0)p=p->next;
    			if(!p)
    			{
    				printf("\t\t您要查询的联系人不存在!\n");
    				printf("\t\t是否继续查询?(Y/N)");
    				scanf("\t\t%c",&flag);
    				return 0;
    			}
    			printf("\t\t姓名:%s\n",p->chat.name);
    			printf("\t\t手机号:%s\n",p->chat.tecent);
    			printf("\t\t电子邮箱:%s\n",p->chat.email);
    		}
    		if(4==m)return 0;
    		printf("\t\t是否继续查询?(Y/N)");
    		scanf("\t\t%c",&flag);
    	}
    	return 0;
    }
    
    int Delete()//删除个人信息
    {
    	char nm[20];
    	char flag='y';
    	ptcs p=head->next,bh,pre;
    	if(!p)
    	{
    		printf("\t\t该通讯录为空!\n");
    		return 0;
    	}
    	while(flag!='n'&&flag!='N')
    	{
    		p=head->next;
    		printf("\t\t请输入您要删除的联系人姓名:");
    		scanf("\t\t%s",nm);
    		while(p!=NULL&&strcmp(p->chat.name,nm)!=0)
    		{
    			pre=p;
    			p=p->next;
    		}
    		if(!p)
    		{
    			printf("\t\t该联系人不存在!\n");
    			printf("\t\t是否继续删除?(Y/N)");
    			scanf("\t\t%c",&flag);
    			return 0;
    		}
    		bh=p->next;
    		if(p==head->next)head->next=bh;
    		else pre->next=bh;
    		printf("\t\t该联系人已删除!\n");
    		printf("\t\t是否继续删除?(Y/N)");
    		scanf("\t\t%c",&flag);
    	}
    	return 0;
    }
    
    int changeall(ptcs p)//修改某一联系人的所有信息
    {
    	int a,n,t;
    	printf("\t\t姓名:");//输入姓名
    	scanf("\t\t%s",p->chat.name);
    	printf("\t\t手机号码:");//输入手机号
    	scanf("\t\t%s",p->chat.tel);
    	do
    	{
    		n=0;
    		if(cala(p->chat.tel)!=11)
    		{					
    			n=1;
    			printf("\t\t您输入的手机号码格式不存在,请重新输入:");
    			scanf("\t\t%s",p->chat.tel);
    		}
    		else 
    		{
    			for(t=0;t<11;t++)
    			{
    				if(p->chat.tel[t]<'0'||p->chat.tel[t]>'9')
    				{
    					n=1;
    					printf("\t\t您输入的手机号码格式不合理,请重新输入:");
    					scanf("\t\t%s",p->chat.tel);
    					break;
    				}
    			}
    		}
    	}while(n);
    	printf("\t\tQQ号:");//输入QQ号
    	scanf("\t\t%s",p->chat.tecent);
    	do
    	{
    		n=0;
    		if(cala(p->chat.tecent)!=10)
    		{					
    			n=1;
    			printf("\t\t您输入的QQ号码格式不存在,请重新输入:");
    			scanf("\t\t%s",p->chat.tecent);
    		}
    		else 
    		{
    			for(t=0;t<10;t++)
    			{
    				if(p->chat.tecent[t]<'0'||p->chat.tecent[t]>'9')
    				{
    					n=1;
    					printf("\t\t您输入的QQ号码格式不合理,请重新输入:");
    					scanf("\t\t%s",p->chat.tecent);
    					break;
    				}
    			}
    		}
    	}while(n);
    	printf("\t\t电子邮箱:");//输入邮箱
    	scanf("\t\t%s",p->chat.email);
    	do
    	{
    		a=0;
    		for(t=0;p->chat.email[t]!='\0';t++)
    		{
    			if(p->chat.email[t]=='@')
    				a++;
    		}
    		if(a!=1)
    		{
    			printf("\t\t输入的邮箱不合理,请重新输入:");
    			scanf("\t\t%s",p->chat.email);
    		}
    	}while(a!=1);
    	return 0;
    }
    
    int changetel(ptcs p)//修改手机号内容
    {
    	int n,t;
    	scanf("\t\t%s",p->chat.tel);
    	do
    	{
    		n=0;
    		if(cala(p->chat.tel)!=11)
    		{					
    			n=1;
    			printf("\t\t您输入的手机号码格式不存在,请重新输入:");
    			scanf("\t\t%s",p->chat.tel);
    		}
    		else 
    		{
    			for(t=0;t<11;t++)
    			{
    				if(p->chat.tel[t]<'0'||p->chat.tel[t]>'9')
    				{
    					n=1;
    					printf("\t\t您输入的手机号码格式不合理,请重新输入:");
    					scanf("\t\t%s",p->chat.tel);
    					break;
    				}
    			}
    		}
    	}while(n);
    	return 0;
    }
    
    int changeQQ(ptcs p)//修改QQ号码
    {
    	int n,t;
    	scanf("%s",p->chat.tecent);
    	do
    	{
    		n=0;
    		if(cala(p->chat.tecent)!=10)
    		{					
    			n=1;
    			printf("\t\t您输入的QQ号码格式不存在,请重新输入:");
    			scanf("\t\t%s",p->chat.tecent);
    		}
    		else 
    		{
    			for(t=0;t<10;t++)
    			{
    				if(p->chat.tecent[t]<'0'||p->chat.tecent[t]>'9')
    				{
    					n=1;
    					printf("\t\t您输入的QQ号码格式不合理,请重新输入:");
    					scanf("\t\t%s",p->chat.tecent);
    					break;
    				}
    			}
    		}
    	}while(n);
    	return 0;
    }
    
    int changeEmail(ptcs p)//修改电子邮箱
    {
    	int t,a;
    	scanf("\t\t%s",p->chat.email);
    	do
    	{
    		a=0;
    		for(t=0;p->chat.email[t]!='\0';t++)
    		{
    			if(p->chat.email[t]=='@')
    				a++;
    		}
    		if(a!=1)
    		{
    			printf("\t\t输入的邮箱不合理,请重新输入:");
    			scanf("\t\t%s",p->chat.email);
    		}
    	}while(a==1);
    	return 0;
    }
    
    int change()//修改联系人信息
    {
    	char nm[20],flag='y';
    	int m,n;
    	ptcs p=head->next;
    	if(!p)
    	{
    		printf("\t\t该通讯录为空!\n");
    		return 0;
    	}
    	while(flag!='n'&&flag!='N')
    	{
    		p=head->next;
    		printf("\n\t\t*******请输入您要修改的内容*******\n");
    		printf("\t\t┌-------------------------------┐\n");
    		printf("\t\t│       1.联系人                │\n");
    		printf("\t\t│       2.手机号码              │\n");
    		printf("\t\t│       3.QQ号                  │\n");
    		printf("\t\t│       4.电子邮箱              │\n");
    		printf("\t\t│       5.返回                  │\n");
    		printf("\t\t└-------------------------------┘\n");
    		printf("\n\t\t请输入您要修改的内容:");
    		scanf("\t\t%d",&m);
    		do
    		{
    			n=0;
    			if(m!=1&&m!=2&&m!=3&&m!=4&&m!=5)
    			{	
    				n=1;
    				printf("\t\t您输入的修改内容不存在,请重新输入:");
    				scanf("\t\t%d",&m);//选择修改内容
    			}
    		}while(n);
    		if(5==m)return 0;
    		printf("\t\t请输入您想修改信息的联系人的姓名:");
    		scanf("\t\t%s",nm);
    		while(p!=NULL&&strcmp(p->chat.name,nm)!=0)p=p->next;
    		if(!p)
    		{
    			printf("\t\t该联系人不存在!\n");
    			return 0;
    		}
    		if(1==m)
    		{
    			printf("\t\t请输入您的修改:\n");
    			changeall(p);
    		}
    		if(2==m)
    		{
    			printf("\t\t请输入%s的手机号码:",p->chat.name);
    			changetel(p);
    		}
    		if(3==m)
    		{
    			printf("\t\t请输入%s的QQ号:",p->chat.name);
    			changeQQ(p);
    		}
    		if(4==m)
    		{
    			printf("\t\t请输入%s的电子邮箱:",p->chat.name);
    			changeEmail(p);
    		}
    		printf("\t\t是否继续修改?(Y/N)");
    		scanf("\t\t%c",&flag);
    	}
    	return 0;
    }
    
    int display()//输出通讯录列表
    {
    	ptcs p=head->next;
    	if(!p)
    	{
    		printf("\t\t该通讯录为空!\n");
    		return 0;
    	}
    	printf("\n\t\t******************************通讯录列表******************************\n");
    	printf("\t\t姓名\t\t手机号码\tQQ号码\t\t电子邮箱\n");
    	printf("\t\t----------------------------------------------------------------------\n");
    	while(p)
    	{
    		printf("\t\t%-16s%-16s%-16s%-20s\n",p->chat.name,p->chat.tel,p->chat.tecent,p->chat.email);
    		p=p->next;
    		printf("\t\t----------------------------------------------------------------------\n");
    	}
    	return 0;
    }
    
    int cacu(ptcs p)//计算链表的长度
    {
    	int n=0;
    	while(p)
    	{
    		p=p->next;
    		n++;
    	}
    	return n;
    }
    
    int arrange()//对通讯录进行排序,这里本人用冒泡法排序,稍微有些繁琐
    {
    	int i,n;
    	ptcs pre=head,p=head->next,k,q;
    	if(!p)
    	{
    		printf("\t\t该通讯录为空!\n");
    		return 0;
    	}
    	n=cacu(p);
    	for(i=0;i<n-1;i++)
    	{
    		for(p=head->next,pre=head;p->next->next!=NULL;pre=p,p=p->next);
    		{
    			k=p->next;
    			q=k->next;
    			if(strcmp(p->chat.name,k->chat.name)>0)
    			{
    				pre->next=k;
    				k->next=p;
    				p->next=q;
    				p=k;
    			}
    		}
    	}
    	display();
    	return 0;
    }
    
    int write()//将数据写入文件
    {
    	ptcs p=head->next;
    	FILE* fp;
    	char filename[30];
    	if(!p)
    	{
    		printf("\t\t该通讯录为空!");
    		return 0;
    	}
    	printf("\t\t写入到文件!\n");
    	printf("\t\t请输入所写入的文件名:");
    	scanf("\t\t%s",filename);
    	if((fp=fopen(filename,"a+"))==NULL)
    	{
    		printf("\t\t无法打开文件!\n");
    		system("pause");
    		return 0;
    	}
    	fprintf(fp,"******************************通讯录列表******************************\n");
    	fprintf(fp,"姓名\t\t手机号码\tQQ号码\t\t电子邮箱\n");
    	fprintf(fp,"----------------------------------------------------------------------\n");
    	while(p)
    	{
    		fprintf(fp,"%-16s%-16s%-16s%-20s\n",p->chat.name,p->chat.tel,p->chat.tecent,p->chat.email);
    		p=p->next;
    		fprintf(fp,"----------------------------------------------------------------------\n");
    	}
    	fprintf(fp,"\n******************************共%d个联系人******************************\n",cacu(head->next));
    	fclose(fp);                                         //关闭文件   
    	printf("\t\t写入成功!\n"); 
    	return 0;
    }
    
    int read()//读取文件
    {
    	char str[100],char filename[30];
    	FILE* fp;
    	printf("\t\t读取文件!\n");
    	printf("\t\t请输入所写入的文件名:");
    	scanf("\t\t%s",filename);
    	if((fp=fopen(filename,"a+"))==NULL)
    	{
    		printf("\t\t无法打开文件!\n");
    		system("pause");
    		return 0;
    	}
    	while((fgets(str,100,fp))!=NULL)  
        {  
    		printf("\t\t%s",str);  
        }
    	return 0;
    }
    
    int call()//呼叫或被呼叫
    {
    	int n;
    	ptcs p=head->next;
    	srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样
    	n=rand()%(cacu(p)+5)+1;
    	return n;
    }
    
    int save(int n,char *filename)//保存通话记
    {
    	FILE* fp;
    	ptcs p=head->next;
    	int i=1;
    	if((fp=fopen(filename,"a+"))==NULL)
    	{
    		printf("\t\t通话记录将失去!\n");
    		system("pause");
    		return 0;
    	}
    	if(n<=cacu(p))
    	{
    		while(i<n)
    		{
    			p=p->next;
    			i++;
    		}
    		fprintf(fp,"%-16s%-16s%-16s%-20s\n",p->chat.name,p->chat.tel,p->chat.tecent,p->chat.email);
    		fprintf(fp,"----------------------------------------------------------------------\n");
    	}
    	else fprintf(fp,"未知号码\n");
    	fclose(fp); //关闭文件   
    	return 0;
    }
    
    int chat_record()//通话记录
    {
    	int m,n,i;
    	char flag='y';
    	char cal[30]="call.txt",caled[30]="called.txt";
    	while(flag!='n'&&flag!='N')
    	{
    	printf("\t\t模拟通话开始!\n");
    	printf("\t\t请选择通话类型(1.呼叫(call) OR 2.被呼叫(called)):");
    	scanf("\t\t%d",&m);
    	do
    	{
    		i=0;
    		if(m!=1&&m!=2)
    		{	
    			i=1;
    			printf("\t\t您输入序号不在标准中,请重新输入:");
    			scanf("\t\t%d",&m);//选择修改内容
    		}
    	}while(i);
    	n=call();
    	if(1==m)
    		save(n,cal);
    	else if(2==m)
    		save(n,caled);
    	printf("\t\t是否继续模拟?(Y/N)");
    	scanf("\t\t%c",&flag);
    	}
    	return 0; 
    }
    
    int main()
    {
    	/*head->next=NULL;
    	system("cls");
    	printf("\n\t\t**********通讯录管理系统**********\n");
    	printf("\t\t┌-------------------------------┐\n");
    	printf("\t\t│        1.添加联系人           │\n");
    	printf("\t\t│        2.查询联系人           │\n");
    	printf("\t\t│        3.删除联系人           │\n");
    	printf("\t\t│        4.修改联系人信息       │\n");
    	printf("\t\t│        5.输出联系人列表       │\n");
    	printf("\t\t│        6.排序                 │\n");
    	printf("\t\t│        7.写入文件             │\n");
    	printf("\t\t│        8.读取文件             │\n");
    	printf("\t\t│        9.通话记录             │\n");
    	printf("\t\t│        0.退出                 │\n");
    	printf("\t\t└-------------------------------┘\n");
    	printf("\t\t请您选择(0-9):"); 
    	printf("\n\t\t******************************通讯录列表******************************\n");
    	printf("\t\t姓名\t\t手机号码\tQQ号码\t\t电子邮箱\n");*/
    	head->next=NULL;
    	for(;;)
    	{
    		switch(menu_select())
    		{
    		case 1:
    			printf("\n\t\t添加记录到通讯录\n"); //添加记 录
    			Addpeo();
    			system("pause");
    			break;
    		case 2:
    			printf("\n\t\t在通讯录中查找联系人\n"); 
    			watch_over();
    			system("pause");
    			break;
    		case 3:
    			printf("\n\t\t从通讯录中删除联系人\n");
    			Delete();
    			system("pause");
    			break;
    		case 4:
    			printf("\n\t\t修改通讯录中的信息\n");
    			change();
    			system("pause");
    			break;
    		case 5:
    			printf("\n\t\t输出通讯录列表\n");
    			display();
    			system("pause");
    			break;
    		case 6:
    			printf("\n\t\t排序\n");
    			arrange();
    			system("pause");
    			break;
    		case 7:
    			printf("\n\t\t写入文件\n");
    			write();
    			system("pause");
    			break;
    		case 8:
    			printf("\n\t\t读取文件\n");
    			read();
    			system("pause");
    			break;
    		case 9:
    			printf("\n\t\t模拟通话\n");
    			chat_record();
    			system("pause");
    			break;
    		case 0:    
    			printf("\n\t\t谢谢使用,再见!\n");  //结束程序    
    			printf("\n\t\t");    
    			system("pause");    
    			exit(0);    
    		}
    	}
    	return 0;
    }


    四、调试和运行

         本次课设调试基本上没有出现什么大问题,都是一些比较细微的问题,其中某个问题是值得注意的,描述如下:

    while(p!=NULL&&strcmp(p->chat.name,nm)!=0)p=p->next;//这是正确的形式

    而之前,我是这样写的       while(strcmp(p->chat.name,nm)!=0&&p!=NULL)p=p->next;

    这就有个问题,当我们的链表到达链尾时,由于其为空,故当我们先判断strcmp(p->chat.name,nm)!=0时会出现错误,因为此时的p不指向任何一个地址。

    五、总结(心得体会)

         此次的通讯录管理系统总体的难度并不是很难,难的是不断地填充必要或是人性化的功能,以及各个部分分工合理不发生冲突。当然,最重要的还是整个过程沉得下心的心性。

    另外,当我们真正的进入社会工作时,绝没有像我们这次课设一样简单,我们如今的工作量或许只是将来我们某个项目中毫不起眼的一项,或许根本就不及,所以,社会工作经验是很重要的。

    展开全文
  • 攀枝花学院 学生课程设计论文 题 目 通讯录管理系统 ...题 目 通讯录管理系统 1课程设计的目的 1) 使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构存储结 构和操作实现算法以及它们在程序中的使用方法
  • 攀枝花学院 学生课程设计论文 通讯录管理系统...通讯录管理系统 1课程设计的目的 1) 使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构存储结构和操作实现算法以及它们在程序中的使用方法 2) 使学生掌握
  • . 目 录 1 1 第一章 绪论 . 2 1.1 课题背景 . 2 1.2 目的和意义 . 2 第二章 需求分析 . 3 2.1 范围 . 3 (1) 标识 . 3 (2) 系统概述 . 3 2 2 需求概述 .
  • 设计一个实用学生通讯录管理系统,能以简便高效方式对通讯录进行管理和检索,具体要示: 录入:学生通讯录信息包括:学号,姓名,地址,电话。以结构数组或数据文件形式存放通讯录信息。 更新:增加、删除...
  • 一、题目:通讯录管理 二、目的与要求 1. 目的: (1)基本掌握面向过程程序设计基本思路和方法; (2)达到熟练掌握C语言基本知识和技能; (3)能够利用所学基本知识和技能,解决简单程序设计问题 2. ...
  • PAGE 攀枝花学院 学生课程设计论文 题 目 通讯录...题 目 通讯录管理系统 1课程设计的目的 使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构存储结构和操作实现算法以及它们在程序中的使用方法 使学
  • 通讯录管理系统C语言课程设计 一、实验目的 1.巩固和加深学生对C语言课程基本知识理解和掌握 2.掌握C语言编程和程序调试基本技能 3.利用C语言进行基本软件设计 4.掌握书写程序设计说明文档能力 5.提高运用...

    通讯录管理系统C语言课程设计

    一、实验目的
    1.巩固和加深学生对C语言课程的基本知识的理解和掌握
    2.掌握C语言编程和程序调试的基本技能
    3.利用C语言进行基本的软件设计
    4.掌握书写程序设计说明文档的能力
    5.提高运用C语言解决实际问题的能力
    二.程序要求
    学生信息包括:学号,姓名,班级,地址,电话,E-mail等。设计一个学生通讯录管理系统,应具有以下功能:
    1、学生通讯信息录入(存储在文件中);
    2、学生通讯信息浏览;
    3、查询功能:包括按学号查询、按姓名查询、按班级查询;
    4、学生通讯信息删除;
    5、学生通讯信息修改;
    三、算法及分析
    1、系统功能模块图
    系统功能模块图
    添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱
    后,会提示是否继续添加。
    显示:可以以表格形式输出所有通讯录里的记录。
    删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容。 查询:可以选择用姓名、电话、地址三种方式查询。
    修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、
    电子邮箱即可完成修改。
    保存:输入文件名(带后缀名)后,即可将通讯录信息保存到文件。

    *模块一:头文件,变量定义,函数的声明
    对系统所使用的变量进行定义,对函数进行声明。
    模块二:录入学生信息
    声明函数void readfile(),说明一个文件指针FILE fp打开文件"student.txt"。
    模块三:学生信息的查找
    声明void seek()为查找函数,通过switch(item)设定用学号查找,用姓名查找两个分支。
    模块四:学生信息的修改
    声明void mod ify()为学生信息修改函数,通过switch(item)设定所要修改的项目。模块五:刷新学生信息
    声明void sort()将录入学生系按升序排列,用的是“冒泡排序法”实现排序。
    模块六:增加学生信息
    声明void insert()插入学生信息,先通过判断学生是否存在,若
    否则继续输入,若是则跳出,重新循环。
    模块七:删除学生信息
    声明void del()实现学生信息删除,通过学号对比确定要删除的信息,然后用后一个替换掉。
    模块八:显示学生信息
    通过disp lay()函数输出学生信息模块九:保存信息
    通过fp=fopen(“student.txt”,“w”);写入信息。
    模块十:汇总学生数目
    通过number()函数将已有男女生及总学生数目汇总出来。
    模块十一:系统帮助
    通过help()函数帮助操作。
    模块十二:界面菜单
    通过switch(num)调用以上各函数,实现功能。

    1、程序采用模块化设计,各模块独立,可分块调试,个模块由主函数控制调用。
    2、其中主要模块(readfile()、seek()、mod ify())都是利用数组,指针来实现数据结构设计。
    3、数据库设计的任务是确定系统所需要的数据库。数据库是表的集合,通常一个系统只需一个数据库。设计人是根据需求分析,确定数据库所包含的表及字段、表间的关系,然后具体确定表的结构,包括字段名、字段类型及宽度,需要的索引等。根据对需求得到的数据结构进行分析,按数据输入输出的要求,确定表和表间的关系,进行验证、调整、修改、完善,使其能够实现用户对数据和功能的要求。通讯信息表包括以下字段:学号,姓名,年龄,性别,出生年月,地址,电话, E-mail。学号为主索引。
    2、主要函数
    int Menu_select() 系统用户登录后的菜单
    int Input(Student stu[]) 添加记录函数
    int sum(Student stu[]) 统计记录函数(男 女 总 人数)
    void Display(Student stu[]) 显示记录函数
    int Delete(Student stu[]) 删除记录函数
    void Chick(Student stu[]) 查找记录函数
    void Change(Student stu[]) 修改记录函数
    void WritetoText(Student stu[]) 写入文件函数
    void Read(Student stu[]) 读取文件函数
    void Menu() 对应int Menu_select()函数的子菜单 他调用除主函数意外的所有函数
    void encfile(char *in_filename,char *pwd,char *out_file) 文件加密函数
    void unencfile(char *in_filename,char *pwd,char *out_file) 文件解密函数
    int unpasswd() 解密函数
    int passwd() 调用文件加密的函数
    int main() 主函数设置密码功能 调用 Menu 函数
    流程图
    源代码

    #include"stdio.h"
    #include<stdlib.h>
    #include<conio.h>
    #include<string.h> 
    static int n=0; 
    void encfile(char *in_filename,char *pwd,char *out_file) ; 
    int passwd();                                             
    int  unpasswd();                                          
    void shut();                                              
    typedef struct
    	{
    		long  score;               /*学号*/
    		char name[10];             /*姓名*/
    		char sex[8];			   /*性别*/
    		char adds[20];			   /*工作单位*/
    		char num[15];              /*电话号码*/
    		char email[20];			   /*邮箱*/
    	}Student;
    Student T[100];
    
    int Menu_Select()
    	{
    		char c;
    		do{
    		system("cls");    
    		system("date /T");
    		system("time /T");
    		system("color 0a");
    		printf("\t\t\t***学生通讯录***** \n");
    		printf("\t\t\t******************\n");
    		printf("\t\t\t* 1. 添加记录  *\n");
    		printf("\t\t\t* 2. 显示记录  *\n");
    		printf("\t\t\t* 3. 删除记录  *\n");
    		printf("\t\t\t* 4. 查询记录  *\n");
    		printf("\t\t\t* 5. 修改记录  *\n");
    		printf("\t\t\t* 6. 保存记录  *\n");
    		printf("\t\t\t* 7. 读取记录  *\n");
    		printf("\t\t\t* 8. 统计记录  *\n");
    		printf("\t\t\t* 9. 文件解密  *\n");
    		printf("\t\t\t* *. 其他功能  *\n");
    		printf("\t\t\t* 0. 退出程序  *\n");
    		printf("\t\t\t*****************\n");
    		printf("\t\t\t请您选择(0-9)选择 其他功能 请输入':':" );
    		c=getchar();
    		}while(c<'0'||c>'10');
    		return(c-'0');
    	}
     
    
    int Input(Student stu[])
    {
        int i=0;
        char sign;
    	while(sign!='n'&&sign!='N')
    	{
    		printf("\t学号:");
    		scanf("\t%d",&stu[n+i].score);
    		printf("\t姓名:");
    		scanf("\t%s",stu[n+i].name);
    		printf("\t性别:");
    		scanf("\t%s",stu[n+i].sex);
    		printf("\t电话号码:");
    		scanf("\t%s",stu[n+i].num);
    		printf("\t工作地址:");
    		scanf("\t%s",stu[n+i].adds);
    		printf("\t电子邮箱:");
    		scanf("\t%s",stu[n+i].email);
    		printf("\n\t是否继续添加?(Y/N)");
    		scanf("\t%c",&sign);
    		i++;
    	}
    	return(n+i);
    }
    
    int sum(Student stu[])
    {
    	int a=0,b=0,i;
    	for(i=0;i<n;i++)
    	{
    		if(strcmp(stu[i].sex,"男")==0) //比较函数
    		a++;
    	}
    	b=i-a;
    	printf("\t\t通讯录总人数为%d个,\n\t\t    其中男孩有%d个。\n",i,a);
    	printf("\t\t    其中女孩有%d个。\n",b);
    		return(n);
    		system("pause");
    }
    
    void Display(Student stu[])
    {
    	int i;
    	printf("------------------------------------------------------------------------------\n");  //显示的格式
    	printf("学号           姓名   性别  电话号码     工作单位        电子邮箱\n");
    	printf("------------------------------------------------------------------------------\n");
    	for(i=1;i<n+1;i++)
    		printf("%-14d%-8s%-6s%-13s%-15s%-15s\n",stu[i-1].score,stu[i-1].name,stu[i-1].sex,stu[i-1].num,stu[i-1].adds,stu[i-1].email);
    	           //-14d%  -表示左对齐 14 表示十四个字节的位置 不足用空格补齐
        printf("----------------------------------------------------------------------\n");
    	system("pause"); //系统函数停止。
    }
     
    int Delete(Student stu[])
    {
    	int i=0,j;
    	long m;
    	printf("\t请输入想删除记录中的学号:");
    	scanf("%d",&m);
    	while(stu[i].score!=m&&i<n)i++;
    	if(i==n)
    	{
    		printf("\t通讯录中没有此人!\n");
     
    	}
    	else
    	{
    	for(j=i;j<n-1;j++)//后一条记录覆盖前一条记录
    	{
    		strcpy(stu[j].num,stu[j+1].num);
    		strcpy(stu[j].name,stu[j+1].name);
    		strcpy(stu[j].sex,stu[j+1].sex);
    		strcpy(stu[j].adds,stu[j+1].adds);
    		strcpy(stu[j].email,stu[j+1].email);
    		stu[j].score=stu[j+1].score;
    	}
    	printf("\t\t\t已经成功删除!\n");
    	n=n-1;
    	}
    	return (n); }
      void Chick(Student stu[])
     {
        
        int m;
        printf("\t\n请选择查询方式:\n");        //printf输出查询格式
        printf("\t**************************************\n");//格式:
        printf("\t**1---姓名查询(不建议用这种方式查询)**\n");
        printf("\t**2--电话查询(建议使用)             **\n");
        printf("\t**3--地址查询                       **\n");
        printf("\t**************************************\n");
        printf("请选择:");
        scanf("%d",&m);
        while(m!=1&&m!=2&&m!=3)
        {
    		printf("输入错误,请重新选择:");
    		scanf("%d",&m);
    	}
     
    	if(m==1)                                 
    	{
    		char s[20];
    		int i=0;
    		printf("\t请输入想查询的姓名:");
    		scanf("\t%s",s);
       
       loop:while(strcmp(stu[i].name,s)!=0&&i<n )
    		{	                                  
    	    	i++;
    		}
    	   	if(i==n)
    		{
    			printf("\t通讯录中没有此人!\n");
    			return;
    		}
    		else
    		{
    			printf("\t学生学号: %d\n",stu[i].score);
    			printf("\t学生性别: %s\n",stu[i].sex);
    			printf("\t电话号码: %s\n",stu[i].num);
    			printf("\t工作地址: %s\n",stu[i].adds);
    			printf("\t电子邮箱: %s\n",stu[i].email);
    		}
    			if(i<n-1)                              
    			{
    				i++;
    				goto loop;
    			}
    	} ;
    	
         if(m==2)
    	 {
    		char s[20];
    		int i=0;
            printf("\t请输入想查询的电话:");
    		scanf("\t%s",s);
            while(strcmp(stu[i].num,s)!=0&&i<n) i++;
            if(i==n)
    		{
    			printf("\t通讯录中没有此人!\n");
    			return;
     
    		}
    		printf("\t学生学号: %d\n",stu[i].score);
    		printf("\t学生姓名: %s\n",stu[i].name);
    		printf("\t学生性别: %s\n",stu[i].sex);
    		printf("\t工作地址: %s\n",stu[i].adds);
    		printf("\t电子邮箱: %s\n",stu[i].email);
    	 } ;
     
    	if(m==3)
    	{
    		char s[20];
    		int i=0;
    		printf("\t请输入想查询的地址:");
    		scanf("\t%s",s);
    		while(strcmp(stu[i].adds,s)!=0&&i<n) i++;
    		if(i==n)
    		{
    			printf("\t通讯录中没有此人!\n");
    			return;
    		}
    		printf("\t学生学号: %d\n",stu[i].score);
    		printf("\t学生姓名: %s\n",stu[i].name);
    		printf("\t学生性别: %s\n",stu[i].sex);
    		printf("\t电话号码: %s\n",stu[i].num);
    		printf("\t电子邮箱: %s\n",stu[i].email);
    	} ;
    }
    void Change(Student stu[])
    {
    	int i=0;
    	long m;
    	printf("\t请输入想修改的记录中人的学号:");
    	scanf("%d",&m);
        while(stu[i].score!=m&&i<n)
    	i++;
    	if(i==n)
    	{
    		printf("\t通讯录中没有此人!\n");
    		return;
    	}
    		printf("\t学号:");
    		scanf("\t%d",&stu[i].score);
    		printf("\t姓名:");
    		scanf("\t%s",stu[i].name);
    		printf("\t性别:");
    		scanf("\t%s",stu[i].sex);
    		printf("\t电话号码:");
    		scanf("\t%s",stu[i].num);
    		printf("\t工作地址:");
    		scanf("\t%s",stu[i].adds);
    		printf("\t电子邮箱:");
    		scanf("\t%s",stu[i].email);
    		printf("\t修改成功!");
    }
    
    void WritetoText(Student stu[])
    {
    	int i=0;
    	FILE *fp;                                           
    	char filename[20];                                  
    	printf("\t保存到文件\n");                           
    	printf("\t请输入所保存的文件名:");
    	scanf("\t%s",filename);
    	if((fp=fopen(filename,"w"))==NULL)
    	{
    		printf("\t无法打开文件\n");
    		system("pause");
    		return;
    	}
    	while(i<n)
    	{
    		fprintf(fp,"%-13d%-6s\t%-3s\t%-13s\t%-20s\t%-20s\n",stu[i].score,stu[i].name,stu[i].sex,stu[i].num,stu[i].adds,stu[i].email);
    		i++;
    	}
    	fclose(fp);                                        
    	printf("保存成功!\n");
    }
    
    void Read(Student stu[])
    {
      FILE *fp;
      int i;
      char filename[20];
      printf("输入要读入的文件名:");
      scanf("\t%s",filename);
      if((fp=fopen(filename,"r"))==NULL)
        {
           printf("找不到%s文件!\n",filename);
           system("pause");
           exit(0);
        }
       n=0;
     // fseek(fp,0L,SEEK_SET);     
       for(i=0;i<100&&!feof(fp);i++)
        {
           fscanf(fp,"%d %s %s %s %s %s\n",&stu[i].score,stu[i].name,stu[i].sex,stu[i].num,stu[i].adds,stu[i].email);
           n++;
        }
     fclose(fp);
     printf("读取成功,文件%s中的所有信息已经读入!\n",filename);
    }
     
    void Menu()
    {
    		for(;; )
    	{
    		switch(Menu_Select())
    		{
    		
    		case 1:
    		printf("\n\t添加记录到通讯录\n");                    
    		n=Input(T);
    		break;
    		
    		case 2:
    		printf("\n\t\t\t    通讯录记录表\n");                   
    		Display(T);
    		break;
     
    		case 3:
    		printf("\n\t从通讯录中删除记录\n");
    		n=Delete(T);								              
    		printf("\t");
    		system("pause");							         
    		break;
     
    		case 4:
         	printf("\n\t在通讯录中查找记录\n");
    		Chick(T);									             
    		printf("\t");
    		system("pause");
    		break;
     
    		case 5:
    		printf("\n\t修改通讯录中的记录\n");
    		Change(T);										       
    		printf("\t");
    		system("pause");
    		break;
     
    		case 6:
    		printf("\n\t保存功能\n");
    		WritetoText(T);	                                         
    	    passwd();
    		printf("\t");
    		system("pause");
    		break;
     
    		case 7:
    		printf("\n\t读取功能\n");
    		Read(T);									                          
    		printf("\t");
    		system("pause");
    		break;
     
    		case 8:
    		printf("\n\t****学生通讯录统计人数****\n\n");                         
    		sum(T);
    		system("pause");
    		break;
     
    		case 9:
    		printf("\n\t****对学生文件进行解密处理****\n\n");                     
    		unpasswd();
    		system("pause");
    		break;
     
    		case 10:  //用C语言实现对计算机的开机 关机 重启  定时关机              
    		shut();
    		system("pause");
    		break;
    
    		case 0:
    		printf("\n\t\t\t欢迎您再次使用本程序!\n");                            
    		printf("\n\t\t本程序只适合个人娱乐沟通使用,谢绝商业用途。\n");
    		printf("\n\t\t\n");
    		system("pause");
    		exit(0);
    		}
    	}
    }
     
     
    
    void encfile(char *in_filename,char *pwd,char *out_filename)           
    {
    	FILE *fp1,*fp2;
        char ch;
    	int j=0;
    	int j0=0;
    	fp1=fopen(in_filename,"rb");
    	if(fp1==NULL)
    	{
    		printf("cannot open in-file.\n");
    		exit(1);                                                              
    	}
    	fp2=fopen(out_filename,"wb");
    	if(fp2==NULL)
    	{
    		printf("cannot open or create out-file.\n");
    		exit(1);                                                               
    	}
    	while(pwd[++j0]);                                     
    	ch=fgetc(fp1);                                      
    	/*加密算法开始*/
    	while(!feof(fp1))
    	{
    		fputc(ch^pwd[j>=j0?j=0:j++],fp2);              
    		ch=fgetc(fp1);                                   
    	}
    	printf("恭喜文件加密成功!\n");
    	printf("请牢记您的密码!\n");
    	fclose(fp1);/*关闭源文件*/
    	fclose(fp2);/*关闭目标文件*/
    }
    
    int  passwd()//加密调用函数
    {
    	char in_filename[30];  /*用户输入的要加密的文件名*/
    	char out_filename[30]; /*用户输入加密后保存的文件名*/
    	char pwd[8];           /*用来保存密码*/
    /*	printf("\t为了安全起见,这里要对文件做加密处理:\n");    //反复调试还是没有通过。。。。。
    	printf("\t请输入要加密文件的名字:");
    	scanf("\t s%",in_filename);
    	fflush(stdin);
    	printf("\t请输入加密后的文件名:");
    	scanf("\t s%",out_filename);
    	fflush(stdin);
    	printf("\t 请输入密码(不超过8位):");
    	scanf("\t s%",pwd);
    	fflush(stdin);
    */
       printf("\t为了安全起见,这里要对文件做加密处理:\n");
       printf("\t\n请输入需要加密文件的名字:\n");
       fflush(stdin);             
       gets(in_filename);      
       printf("\t\n请输入加密的密码:\n");
       gets(pwd);                
       printf("\t\n请输入加密后文件的名字\n");
       gets(out_filename);       
       encfile(in_filename,pwd,out_filename);
       return 0;
    }
     
    void unencfile(char *in_filename,char *pwd,char *out_filename) 
    {
    	FILE *fp1,*fp2;
        char ch;
    	int j=0;
    	int j0=0;
    	fp1=fopen(in_filename,"rb");
    	if(fp1==NULL)
    	{
    		printf("cannot open in-file.\n");
    		exit(1);      
    	}
    	fp2=fopen(out_filename,"wb");
    	if(fp2==NULL)
    	{
    		printf("cannot open or create out-file.\n");
    		exit(1);      
    	}
    	while(pwd[++j0]); 
    	ch=fgetc(fp1);   
    	while(!feof(fp1))
    	{
    		fputc(ch^pwd[j>=j0?j=0:j++],fp2);      
    		ch=fgetc(fp1);                         
    	}
    	printf("恭喜文件解密成功!\n");
    	printf("现在你可以对文件进行修改了!\n");
    	fclose(fp1);
    	fclose(fp2);
    }
     
    int  unpasswd()
    {
    	char in_filename[30];  
    	char out_filename[30]; 
    	char pwd[8];           
    /*	printf("\t为了安全起见,这里要对文件做解密处理:\n");
    	printf("\t请输入要解密文件的名字:");
    	scanf("\t s%",in_filename);
    	fflush(stdin);
    	printf("\t请输入解密后的文件名:");
    	scanf("\t s%",out_filename);
    	fflush(stdin);
    	printf("\t 请输入密码:");
    	scanf("\t s%",pwd);
    	fflush(stdin);
    */
       printf("\t\n请输入需要解密文件的名字:\n");
       fflush(stdin);
       gets(in_filename);         
       printf("\t\n请输入密码:\n");
       gets(pwd);                 
       printf("\t\n请输入解密后文件的名字\n");
       gets(out_filename);         
       unencfile(in_filename,pwd,out_filename);
       return 0;
    }
    /*
      C语言的关机程序,主要调用windows DOS 系统下的system 函数
     */
    int print()
    {
        printf(" ╪╪╪╪╪╪╧╧╧╧╧╧╧╧╪╪╪╪╪╪\n");
        printf("╔═══╧╧C语言关机程序 ╧╧═══╗\n");
        printf("║*************\n");
        printf("║**********计算机学院***********\n");
        printf("║*******************************\n");
        printf("║※1.实现10分钟内的定时关闭计算机║\n");
        printf("║※2.立即关闭计算机              ║\n");
        printf("║※3.注销计算机                 ║\n");
        printf("║※4.重启计算机                 ║\n");
        printf("║※0.退出系统                   ║\n");
        printf("╚════════════════╝\n");
        return 0;
    }
    void shut()
    {
    	char cmd[20]="shutdown -s -t ";
    	int c;
        char t[5]="0";
        system("title C语言关机程序        作者:FantasticTony");
        system("mode con cols=45 lines=25");
        system("color 0B");
        system("date /T");
        system("TIME /T");
        print();
        scanf("%d",&c);
        getchar();
        switch(c)
       {
        case 1:printf("您想在多少秒后自动关闭计算机?(0~600)\n");scanf("%s",t);system(strcat(cmd,t));break;
        case 2:system("shutdown -p");break;
        case 3:system("shutdown -l");break;
        case 4:system("shutdown -r");break;
        case 0:break;
        default:printf("Error!\n");
       }
        system("pause");
        exit(0);
    }
    
    int main()
    {
    	int flag1;
        char name[20]="lhy";
        char person[20];
    	char ch[7];
    	int i,n;
    	system("title   通讯录管理系统   作者:FantasticTony");
    	system("date /T");   
    	system("time /T");	
    	system("color 0b");
    	
        printf ("\t\t **********通讯录管理系统!**********\n\n");
    	printf ("\t\t\t\t用 户 登 录 \n\n");
        printf("\t\t\t\t username:");
        gets(person);
        flag1=strcmp(person,name);
        printf("\t\t\t\t password:");
        
    	for(i=0;i<3;i++)
    	{
    		for(n=0;n<6;n++)
    		{
    			ch[n] = getch();
    			printf("*");
    		}
    		printf("\n");
    		ch[n] = '\0';
    		if(0 == strcmp(ch,"201314"))
    		{
    			printf("\t\t\t\t管理员你好,欢迎你进入本系统!\n");
    			getch();
    			Menu();
    			break;
    		}
            else
            {
                printf("密码错误,请重新输入\n");
            }
    	}
    	if(i==3)
        {
            printf("你输入的错误的密码次数达到上限,系统自动退出!请联系管理员!");
            exit(1);
        } /*     gets(password1);
            flag2=strcmp(password,password1);
            if(flag1==0 && flag2==0)            
    		{
                printf("\t\t\t\t Welcome !\n\t\t\t\t Press any key to enter the menu!\n");
    			getch();
                Menu();
                break;
    		}
            else
    		{
                printf ("\t\t\t      Your username or password is wrong!\n\t\t\t\t Please input again!\n");
    			printf ("\t\t\t      pay attention you will hava %d  chance!         \n\n",4-h);
                h++;
    		}
    	}
       	if (h=5)                              
    	    printf ("对不起,您输入的用户名或密码有误,已被强制退出。\n");
    	    */
    	return 0;}
    

    运行截图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 设计目的:编写一个通讯录管理系统。 设计任务:本系统应完成几方面功能: 1) 输入信息——enter();2) 显示信息———display( );3) 查找以姓名作为关键字 ———search( );4) 删除信息———delete( );5) 存盘...
  • 通讯录管理系统(C语言)

    千次阅读 2019-01-09 13:00:39
    问题描述:设计一个操作简便、功能实用个人通信信息管理系统。 基本要求 存储内容:姓名、手机、家庭电话、办公电话、电子邮箱、地址等信息; 具备创建、添加、删除、查询、修改、排序、显示等功能; 界面美观...

    一、设计目的与内容

    问题描述:设计一个操作简便、功能实用的个人通信信息管理系统。

    1. 基本要求
    1. 存储内容:姓名、手机、家庭电话、办公电话、电子邮箱、地址等信息;
    2. 具备创建、添加、删除、查询、修改、排序、显示等功能;
    3. 界面美观、操作简便。
    1. 重点、难点

    重点:结构体数组的增、删、改、查等操作。

    难点:文件的读写操作。

    二、算法的基本思想

    三、主要功能设计与实现

    1.创建通讯录

    txl Create(){
    	txl head = (txl)malloc(sizeof(Node));
    	head->count = 0;
    	head->next = NULL;
    	return head;
    }
    

    2.插入信息

    void Insert(txl &head){
    	printf("\n\t\t请依次输入姓名、手机、家庭电话、办公电话、电子邮箱、地址\n\t");
    	data d;
    	scanf("%s%s%s%s%s%s",d.name,d.phone,d.hometel,d.worktel,d.email,d.adress);
    	txl p = (txl)malloc(sizeof(Node));
    	txl r = head;
    	p->d = d;
    	while(r->next){
    		r = r->next;
    	}
    	r->next = NULL;
    	p->next = r->next;
    	r->next = p;
    	head->count++;
    	printf("\n\t\t是否继续添加?(Y/N):");
    	if (getch()=='y'||getch()=='Y') 
    		Insert(head); 
    	return;
    }
    

    3.显示全部信息

    void showAll(txl head){
    
             printf("%d\n",head->count);
    
             txl p = head->next;
    
             while(p){
    
                      printf("\n\t\t姓    名:%s",p->d.name);
    
                      printf("\n\t\t手机号码:%s",p->d.phone);
    
                      printf("\n\t\t家庭电话:%s",p->d.hometel);
    
                      printf("\n\t\t工作电话:%s",p->d.worktel);
    
                      printf("\n\t\t电子邮件:%s",p->d.email);
    
                      printf("\n\t\t家庭住址:%s",p->d.adress);
    
                      printf("\n\t\t____________________\n");
    
                      p = p->next;
    
             }
    
    }

    4.按姓名查询(按手机号码查询与此类似)

    void searchByName(txl head){
    
             txl p = head->next;
    
             int mark = 0;
    
             printf("\n\t\t***************** 按姓名查找 *******************");
    
             char name[20];
    
             printf("\n\t\t请输入姓名:");
    
             scanf("%s",name);
    
             printf("\n\t\t************* 您查找的信息将在下面显示 ***********");
    
             while(p!=NULL){
    
                      if(strcmp(p->d.name,name)==0){
    
                              printf("\n\t\t姓    名:%s",p->d.name);
    
                              printf("\n\t\t手机号码:%s",p->d.phone);
    
                              printf("\n\t\t家庭电话:%s",p->d.hometel);
    
                              printf("\n\t\t工作电话:%s",p->d.worktel);
    
                              printf("\n\t\t电子邮件:%s",p->d.email);
    
                              printf("\n\t\t家庭住址:%s",p->d.adress);
    
                              printf("\n\t\t************************************************");
    
                              mark++;
    
                      }
    
                      p = p->next;
    
             }
    
             if(!mark){
    
                      printf("\n\t\t您的通讯录中没有与此姓名匹配的联系人");
    
             }else printf("\n\t\t一共为您找到%d个与之匹配的联系人",mark);
    
             printf("\n\t\t按任意键返回主菜单");
    
             getch();
    
             return;
    
    }

    5.按姓名删除(按手机号码删除与此类似)

    void deleteByName(txl &head){
    
             txl p = head->next,q;
    
             printf("\n\t\t**************** 按姓名删除 **********************");
    
             char name[20];
    
             int mark = 0;
    
             printf("\n\t\t请输入手机号码:");
    
             scanf("%s",name);
    
             if(p->next==NULL){
    
                      if(strcmp(p->d.name,name)==0){
    
                              free(p);
    
                              head->next = NULL;
    
                              head->count--;
    
                              mark++;
                      }
    
             }else{
    
                      while(p->next){
    
                              if(strcmp(p->next->d.name,name))
    
                                       p = p->next;
    
                              else {
                                       q = p->next;
    
                                       p->next = p->next->next;
    
                                       free(q);
    
                                       head->count--;
    
                                       mark++;
    
                                       break;
                              }
                      }
             }
    
             if(!mark)
    
                      printf("\n\t\t未找到此联系人");
    
             else printf("\n\t\t删除成功");
                     
    
             printf("\n\t\t按任意键返回主菜单");
    
             getch();
    
             return;
    
    }

    6.文件读写操作

    bool Readtxl(txl &head){
    
             FILE *fp;
    
             txl p = (txl)malloc(sizeof(Node));
    
             txl r = head;
    
             if((fp = fopen("txl.txt","r"))==NULL){
    
                      printf("文件读入失败!\n");
    
                      return false;
    
             }else{
    
                      while(fread(p,sizeof(Node),1,fp)==1){   //如果读到数据,就显示;否则退出
    
                              head->count++;
    
                              r->next = NULL;
    
                              p->next = r->next;
    
                              r->next = p;
    
                              r = r->next;
    
                              p = (txl)malloc(sizeof(Node));
    
                      }
    
                      r->next = NULL;
    
                      fclose(fp);
    
                      return true;
    
             }
    
            
    
    }
    
    bool Writetxl(txl head){
    
             FILE *fp;txl p = head->next;
    
             if((fp = fopen("txl.txt","w"))==NULL){
    
                      printf("文件写入失败!\n");
    
                      return false;
    
             }else {
    
                      for(int i = 0; i < head->count;i++){
    
                              fwrite(p,sizeof(Node),1,fp);
    
                              p = p->next;
    
                      }
    
                      fclose(fp);
    
                      printf("通讯录保存成功\n");
    
                      return true;
    
             }
    
    }

    上面给出了部分核心代码,下面是完整的程序代码

    https://download.csdn.net/download/qq_26154945/10906061

    展开全文
  • 通讯录信息管理系统设计 计算机学院计算机科学与技术专业 1.课程设计的目的 学习了 C 语言程序设计这门课程之后使我对程序设计有了一定的了解 为了熟练掌握 C 语言的语法特点及其数据结构提高自身编写程序的能力 ...
  • 5.2.2 通讯录管理模块 20 5.2.3 用户管理模块 20 5.2.4 数据库设计 20 第6章 系统与软件测试 28 6.1 系统测试概述 28 6.2 系统发布 28 6.3 软件测试概述 28 6.4 软件测试目标 30 结 论 33 致 谢 34 参 考 文 献 35 ...
  • 通讯录管理系统(C语言版)

    千次阅读 2009-09-06 13:48:00
    通讯录管理系统(C语言版)课程题目:通讯录制作设计目的:用双向链表作数据结构,结合C/C++语言基本知识。编写一个通讯录管理系统。以把所学数据结构知识应用到实际软件开发中去。设计内容:本系统应完成一下几...
  • 高级语言程序设计课程设计报告 专 业 电子科学与技术_ 班 级 1-01 姓 名 钱书元_ 指导教师 何爱香_ 完成日期2011年 6月 23日 山东工商学院 信息与电子工程学院 一课程设计的目的 1.目的加深对C语言课程所学知识的...
  • PAGE PAGE 1 数据结构课程设计报告 目录 TOC \o "1-3" \h \z \u 第一章 设计目的 3 第二章 设计任务及要求 3 一 基本要求 3 二 内容 3 第三章 题目分析与解答 4 一 ... 源程序代码 7 二 通讯录管理系统 13 1. 题目要
  • c语言课程设计 《面向过程程序设计(C语言)》课程设计指导书 一、目的要求 《面向过程程序设计(C语言)》课程设计是计算机科学与技术专业集中...掌握程序局部测试、调试方法,建立程序系统调试基本概念和思想,
  • 制作学生通讯管理系统的主要目的是为了利用其强大的功能在短时间内记录大量的学生信息。这个系统拥有信息录入,显示,查找,增加,删除等功能,也是这个系统的基本功。首先,我们在进行录入时可以同时录入多个人的...
  • 目录 TOC \o "1-3" \h \z \u 一设计题目 1 二设计目的 1 三需求分析 1 四 总体设计 1 1.程序总体设计思想 1 2.程序设计总体框图 2 五 详细设计 3 1.功能模块图 3 2.数据库概念模型 3 3.数据库逻辑结构设计 4 4....
  • Java Swing 图形界面开发通讯录管理系统

    千次阅读 多人点赞 2020-06-20 15:39:44
    1实习目的............................................... 2 2实习内容............................................... 2 3总体设计方案........................................... 2 3.1总统功能结构图......
  • 所以,同学通讯录管理程序为用户提供充足信息和快捷查询手段,实现学生基本信息录入,删除,查询,修改,存到文件等几方面功能,这样能对同学之间信息进行更好管理,使老师能更好地管理学...
  • 1. 课程实训目的和任务 1.1 课程实训目的 C语言是实践性很强一门课程,通过对《C语言程序设计》课程学习,学生虽已初步掌握了C语言基本概念、结构化程序设计基本方法,但实际编程和上机调试程序能力还远远...
  • c语言程序设计简单通讯录系统(实验报告) 语言课程设计报告书 C 通讯录管理系统实验题目 一 实验目的 通过进行计算机实践更加系统地理解和掌握C语言基本概念语言特点和编程技巧利用系统提供标准函数和自定义...
  • 实验报告 系 别xxxxxxxx 专业班级xxxxxxxxx 学 号xxxxxxxxxxx 班内序号xx 姓 名xxxx 指导老师xxxxxxxxx 实验课题学生通讯信息管理系统 实验时间2008.6.10~2008.6.20 2008年6月17日 一实验目的 熟悉C语言编译链接和...
  • C语言课程设计报告书 实验题目 通讯录管理系统 一?实验目的 通过进行计算机实践更加系统地理解和掌握C语言基本概念语言特点和编程技巧利用系统提供标准函数和自定义函数进行程序设计培养利用C语言设计综合程序...
  • 为了实现通讯录管理的操作功能,首先设计一个含有多个菜单项主控菜单程序,然后再为这些菜单项配上相应功能。 主控菜单设计要求: • 菜单内容 程序运行后,给出6个菜单项内容和输入提示: 1.通讯录链表...
  • 通讯录的制作

    2016-01-10 10:47:57
    编写一个通讯录管理系统。以把所学数据结构知识应用到实际软件开发中去。 设计内容:本系统应完成一下几方面功能: 1) 输入信息——enter(); 2) 显示信息———display( ); 3) 查找以姓名作为关键字 ———...
  • 总结介绍:本次个人通讯录数据库系统主要目的是为了做出一个功能齐全、简单易用信息管理系统提高保存联系人效率,由于能力有限,界面做有点不好看,还有在登录编程只做到将登录名和密码设为固定字符值,修改...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 129
精华内容 51
关键字:

通讯录管理系统的目的