1. 本周作业头
这个作业属于哪个课程 班级链接
这个作业要求在哪里 作业要求链接
这个作业的目标 能更加熟悉二维数组的使用
其他参考文献 参考资料
作业正文 本篇博客

二.作业正文
2.需求分析
命令分为6个命令,包括推出命令。
按需求选出人员或者删除人员。

3源代码:









3.程序调用图与流程图

4.功能测试:







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

传了多次传不上去

链接

6.程序代码

#include<stdlib.h>
#include<string.h>
struct man
{
	char name[50];
	char tel[50];
	int number;
};
struct man a[50];
static int p=0,sum=50;
void cd();
void lb();
void ph();
void tj();
void sc();
void xg();
void* xz();
int xz(int mid);

void lb()
{
	printf("========== 通讯录 ==========\n\n\n");
	printf("========== 界面 ==========\n");
	printf("人数:%d	|剩余空间:%d\n", p,sum);
	for(int i=0;i<p;i++)
	{
		printf("编号:%2d| 姓名:%s|电话:%s\n", a[i].number,a[i].name,a[i].tel);
	}
}
void cd()
{
	int q;
	while(1)
	{
		lb();
		printf("\n\n\n操作列表:\n");
	    printf("1)排序          2)添加          3)删除\n4)修改          5)查找          6)退出程序\n\n\n\n");
	    printf("请输入操作:");
	    scanf("%d",&q);
	    putchar('\n');
	    putchar('\n');
	    switch(q)
	    {
	    	case 1:
			ph();
			system("cls");
			break;
		case 2:
			tj();
			system("cls");
			break;
		case 3:
			sc();
			system("cls");
			break;
		case 4:
			xg();
			system("cls");
			break;
		case 5:
			xz();
			system("cls");
			break;
		case 6:
			exit(0);
			break;
		default:
			printf("Error!!!\n错误操作指令, 请重新输入");
			break;
		}
	}
}
void ph()
{
	int r = 0;
	printf("请选择排序的方式");
	printf("1)编号排序  2)姓名排序\n");
	scanf("%d", &r);
	struct man temp;
	switch (r)
	{
	case 1:
		for (int i = 0; i < p - 1; i++)
		{
			for (int j = 0; j < p - 1 - i; j++)
			{
				if (a[j].number>a[j+1].number)
				{
					temp = a[j];
					a[j]=a[j+1];
					a[j+1] = temp;
				}
			}
		}
		break;
	case 2:
		for (int i = 0; i < p - 1; i++)
		{
			for (int j = 0; j < p - 1 - i; j++)
			{
				if (strcmp(a[j].name,a[j+1].name)>0)
				{
					temp = a[j];
					a[j] = a[j+1];
					a[j+1] = temp;
				}
			}
		}
		break;
	default:
		printf("错误操作请重新输入");
		getchar();
		system("k");
		break;
	}
}
void tj()
{
	if(sum==0)
	{
		printf("\n");
		printf("通讯录已满\n");
		system("pause");
	}
	printf("添加操作:\n");
	printf("请输入添加位置:");
	scanf("%d",&a[p].number);
	if(a[p].number>50||a[p].number<1)
	{
		printf("处理编号超过阈值");
		system("pause");
	}
	for(int i=0;i<p;i++)
	{
		if(a[i].number==a[p].number)
		{
			printf("此处已有数据");
		    system("pause");
		}
	}
	printf("请输入联系人姓名:");
	scanf("%s", a[p].name);
	printf("请输入联系人电话:");
	scanf("%s", a[p].tel);
	p++;
	sum--;
}
void sc()
{
	int mid;
	int index;
	printf("删除操作:\n");
	printf("请输入操作位置:");
	scanf("%d", &mid);
    if (mid> 50 || mid < 1)
	{
		printf("处理编号超过阈值");
		system("pause");
	}
	index=xz(mid);
	if(index==-1)
	{
		printf("此处无数据\n");
		system("pause");	 
	}
	else
	{
		for(int i=index;i<p;i++)
		{
			a[i-1]=a[i];
		}
		p--;
		sum++;
	}
}
void xg()
{
	int mid;
	int index;
	char* z1=NULL;
	char* z2=NULL;
	printf("修改操作:\n");
	printf("请输入操作位置:");
	scanf("%d", &mid);
	if (mid> 50 || mid < 1)
	{
		printf("处理编号超过阈值");
		system("pause");
	}
	index=xz(mid);
	if(index==-1)
	{
		printf("此处无数据\n");
		system("pause");
	}
	else
	{
		z1=a[index-1].name;
		z2=a[index-1].tel;
		printf("已删除,请重新输入:\n");
		printf("请输入联系人姓名:\n");
		scanf("%s",z1);
		printf("请输入联系人电话:\n");
		scanf("%s",z2);
	}
}
void* xz()
{
	int min=0,max=p-1,mid;
	char n[40];
	printf("请输入要查询的联系人的姓名或电话:");
	scanf("%s", &n);
	if(n[0]>='1'&&n[0]<='9')
	{
		for(int i=0;i<p;i++)
		{
			if(strcmp(n,a[i].tel)==0)
			{
				printf("编号:%2d | 姓名:%s |电话:%s\n", a[i].number,a[i].name,a[i].tel);
			    system("pause");
			    return 0;
			}
		}
		printf("\n查无此人\n");
		system("pause");
	}
	else
	{
		for(int i=0;i<=50;i++)
		{
			if(strcmp(a[i].name,n)==0)
			{
				getchar();
				printf("编号:%2d | 姓名:%s |电话:%s\n", a[i].number,a[i].name,a[i].tel);
				system("pause");
				return 0;
			}
		}
		printf("查无此人\n");
		system("pause");
	}
}
int xz(int mid)
{
	for(int i=0;i<p;i++)
	{
		if(a[i].number==mid)
		{
			return i+1;
		}
	}
	return -1;
}
int main(int arg,char const*argc[])
{
	cd();
}
posted on 2020-04-27 17:04  Kyyk  阅读(287)  评论(0编辑  收藏  举报