C语言||作业01

通讯录代码的学习 https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/10677
作业链接 https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/10677
这个作业的目标 完成通讯录的学习
参考文献 https://www.bilibili.com/video/BV15W411H7wz?from=search&seid=10080358442205281003

1.需求分析
首先要定义一个全局变量sum记录总人数,定义结构体变量里面有名字,编号,电话号码,使用string文件头用来交换修改人的电话号码和名字的排序。
只要越界就报错。定义的count记为添加的人数,利用count来判断是非添加人数,或者用来判断查找,修改,添加报错(已经有记录或者无记录)的依据。
具体使用宏以及指针,文件,链表还没有看懂,之后经行修改。

2.程序代码

#include <stdlib.h>
#include <stdio.h> 
#include <string.h>

int sum=50,count=0;

void input();//输入信息 
void search();//查询 
void update();//修改 
void del();//删除 
void menu(); //主菜单 
void Error();//错误信息 
void sort();//排序
void namesort();//名字排序
void numbersort();//编号排序 

struct Preson{
	int number;
	char name[10];
	char phone[20];
	struct Preson *next;
}; 

Preson stu[50];
Preson t; 
Preson *s;
Preson t1; 

void menu()
{
    printf("\n");
	printf("操作列表:\n");
    printf("1)排序          2)添加          3)删除\n");
    printf("4)修改          5)查找          6)退出程序\n");
    printf("请输入操作: ");
}

int main()
{
    int flag=1,i,j,n;
    while( 1 )
    {
    system("cls");
	printf("========== 通讯录 ==========\n\n\n");
	printf("");
	printf("========== 界面 ==========\n");
	printf("人数: %d 人           | 剩余空间: %d 人\n",count,sum);
	//排序 
	for( i=0; i<count; i++ )
	{
		printf("编号:%10d | 名字:%10s | 电话号码:%10s\n",stu[i].number,stu[i].name,stu[i].phone);
	}
	menu();
	scanf("%d",&n);
    switch(n)
		{
			case 1: sort();break;
			case 2: input(); break;
			case 3: del();break;
			case 4: update();break;
			case 5: search();break;
			case 6: return 0;
			default: Error();break;
	    }
   }
}

void input()
{
	int i,flag=1;
	if(sum==0)
	{
		printf("人数已经满了\n");
	}
	else if(sum!=0&&flag!=0)
	{
		
		printf("请输入编号:");
		scanf("%d",&stu[count].number);
		if(stu[count].number>50||stu[count].number<=0)
		{
			printf("超过编号");
			system("pause"); 
		}
		else 
		{
			   for( i=0; i<count; i++)
			   { 
				if( stu[i].number==stu[count].number ) {flag=0;printf("已经有该数据");system("pause");}
			   }
			if( flag!=0 )
		    {
		        printf("请输入名字:");
	            scanf("%s",stu[count].name);
		        printf("请输入电话号码:");
	            scanf("%s",stu[count].phone);
		        count++;
		        sum--; 
		    }
		    if(flag==0)
		    {
		    	void Error();
				printf("已经有个该编号\n");
			}
		}
	}

}

void search()
{
	char name[20];
	int b=0,j=0;
	Preson *p;
	p=stu;
	printf("请输入需要查询人的名字:");
	scanf("%s",name);
	while(j!=count)
	{
		if(strcmp(name,p->name)==0)
		{
			b=1;
			break;
		}
		p++;
		j++;
	}
	if(b==0)
	{
		printf("\n没有这个人\n");
		system("pause");
	}
	else
	{
		printf("编号:%10d | 名字:%10s | 电话号码:%10s\n",p->number,p->name,p->phone);
        system("pause");
	}
}

void update()
{
	 int i,j=0,flag=1,number;
	 char name[15]; 
	 char phone[20];
	 if(count==0)
	 {
	 	printf("你还还没有存储信息");
	 	system("pause");
	 }
	 else 
	 {  
	    printf("请输入需要修改人的编号:");
		scanf("%d",&number); 
	 	while(j!=count)
	 	{
	 		if(number==stu[j].number) 
	 		{
	 	     printf("请输入需要修改人的名字:");
			 scanf("%s",&name);
			 strcpy(stu[j].name,name);
			 printf("请输入需要修改人的电话:");
			 scanf("%s",&phone);
			 strcpy(stu[j].phone,phone);
	 		 break;
			 }
			 else
			j++; 
		}
		if(j==count)
		{
			printf("没有这个人!\n");
			system("pause");
		}
	 }
}

void del()
{
	Preson *s;
	s=stu;
	int i,j,flag=count;
	int number; 
	if(count==0)
	{
		printf("还没有存储联系人\n");
		system("pause");
	 } 
	 else
	 {
	    printf("请数入该联系人编号:");
		scanf("%d",&number);
		if(number<=50||number>=0)
	   {
		for( i=0; i<count; i++ )
	     {
			if(number==(s->number))
			{
				for( j=i; j<count; j++ )
				{
					stu[j]=stu[j+1];
				}
			    count--;
			    printf("已经删除!\n");
			}
			s++;
		 } 
	    }
	    else
	    {
	    	printf("已经越界,请输入正确数值");
		 } 
	} 
	 if(count==flag)
	 {
	 	printf("没有这个人\n");
	 	system("pause");
	 }
}

void Error()
{
	printf("没有该选项,nmsl请看清楚点   ");
	system("pause"); 
}

void sort()
{
	int N;
	printf("请选择排序方式: 1)编号排序 2)名字排序");
	scanf("%d",&N);
	if(count==0)
	{
		printf("你还没有输入信息");
		system("pause");
	 }
	else
	{
		switch(N)
	  {
		case 1:numbersort();break; 
		case 2:namesort();break;
	  }
	}
}

void numbersort()
{
	 int i,flag,j;
	 for( i=0; i<count; i++ )
		{
			flag=0;
			for( j=0; j<count-1-i; j++ )
			{
				if(stu[j].number>stu[j+1].number)
				{
					t=stu[j];
					stu[j]=stu[j+1];
					stu[j+1]=t;
				}
			}
		}
}

void namesort()
{
	int i,j;
	for(i=0;i<count-1;i++)
	{
		for(j=i+1;j<count;j++)
		{
			if(strcmp(stu[i].name,stu[j].name)>0)
			{
				
				    t1=stu[i];
					stu[i]=stu[j];
					stu[j]=t1;
			}
		}
	}
}

3.函数调用图与流程图

4.功能测试
1.添加

(越界和错误操作)

2.删除

(越界或者无该信息)

3.修改

(越界或者无该信息)

4.查找

(没有这个人或者越界)

5.退出程序

(错误操作)

6.排序
6.1编号排序

6.2名字排序

5.应用集成
Gitee上传截图与链接


链接:https://gitee.com/zhou_wango/E-zuoye

posted @ 2020-04-30 11:16  kame呦呦  阅读(224)  评论(0编辑  收藏  举报