C语言ll作业01

2.2.1 作业头:

这个作业属于哪个课程 计科一班
这个作业要求在哪里 C语言作业01 结构:通讯录
这个作业的目标 制作通讯录
作业正文 如下
其他参考文献 详解宏定义清屏函数

2.2.2 需求分析

答:此次任务是编写通讯录,首先要知道通讯录有添加、删除、查找、修改、排序等功能,把这些功能逐一分块,分为一个个函数,再来进行编写。

2.2.3 程序代码

2.2.3.1 源代码

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

void menu();
void rank();
void add();
void del();
void amend();
void seek();
int find(int x);

int del_count=0;
int people_rem=50,people_num=0;
int j = 1;
int rank_num_flag=0,rank_name_flag=0;

struct phone
{
	int location;
	char name[20];
	char phonenum[11];
}people,man[51],*p=NULL,man_rank[51],temp;

int main(void)
{ 
	int num;
	
	A:
	{	
		system("cls");
		menu();	
		printf("\n\n");
		printf("操作列表:\n");
		printf("1)排序\t\t2)添加\t\t3)删除\n\n");
		printf("4)修改\t\t5)查找\t\t6)退出\n");
		printf("请输入操作:"); 
		scanf("%d",&num);
		switch(num)
		{
			case 1:rank();system("pause");goto A;
			case 2:add();system("pause");goto A;
			case 3:del();system("pause");goto A;
			case 4:amend();system("pause");goto A;
			case 5:seek();system("pause");goto A;
			case 6:break;
			default:printf("\n错误操作指令, 请重新输入\n");system("pause");goto A;
		}
	}
	int number;
	printf("\n=========感谢您的使用!=========\n\n");
	printf("非常满意请扣1---满意请扣2---不满意请扣眼珠子\n\n");
	printf("请输入您对此通讯录的满意程度:"); 
	scanf("%d",&number); 
	if(number==1)
		printf("感谢亲的认同!\n");
	else if(number==2)
		printf("我会继续努力改进!\n");
	else
		printf("您在放屁呢 亲!\n");
	
	return 0;
}
void menu()//首界面 
{
	printf("========== 通讯录 ==========\n\n");
	printf("========== 界面 ==========\n");
	printf("\n人数:%d人\t| 剩余空间:%d人\n",people_num-del_count,people_rem+del_count);
	if(rank_num_flag==0&&rank_name_flag==0)
	{ 
		for(j = 1;j <= people_num;j ++)
		{
			if(man[j].location!=0)
				printf("\n编号:%2d |姓名:%s\t|电话:%s",man[j].location,man[j].name,man[j].phonenum);
		}
	}
	else if(rank_num_flag==1)
	{
		for(int i=1;i<=50;i++)
		{
			if(man_rank[i].location!=0)
				printf("\n编号:%2d |姓名:%s\t|电话:%s",man_rank[i].location,man_rank[i].name,man_rank[i].phonenum);
		}
		rank_num_flag=0;
	}
	else if(rank_name_flag==1)
	{
		int m,n;
		for(m=1;m<50;m++)
		{
			for(n=0;n<49;n++)
				if(man[n].location!=0&&man[n+1].location!=0)
					if(strcmp(man[n].name,man[n+1].name)>0)
					{
						temp=man[n];
						man[n]=man[n+1];
						man[n+1]=temp;
					}
		}
		for(int i=1;i<=50;i++)
		{
			if(man_rank[i].location!=0)
				printf("\n编号:%2d |姓名:%s\t|电话:%s",man_rank[i].location,man_rank[i].name,man_rank[i].phonenum);
		}
		rank_name_flag=0;
	}
	
}
void rank()//排序操作
{
	int num,i;
	printf("\n排序操作:\n");
	printf("1)编号排序\t2)姓名排序\n"); 
	printf("请选择排序方式:");
	scanf("%d",&num);
	if(num==1)
		rank_num_flag=1;
	else if(num==2)
		rank_name_flag=1;
	else
		printf("错误操作指令,请重新输入\n");
}
void add()//添加操作
{
	printf("\n添加操作:\n");
	printf("请输入添加位置:");
	scanf("%d",&people.location);
	if(j==50)
		printf("通讯录已满\n");
	else if(people.location>50)
		printf("处理编号超过阈值\n");
	else if(find(people.location)==1)
		printf("此处已有数据\n");
	else
	{	
		printf("请输入联系人姓名:");
		scanf("%s",&people.name);
		printf("请输入联系人电话:");
		scanf("%s",&people.phonenum);
		man[j]=people;
		man_rank[people.location]=people;
		people_num++;
		people_rem--;
	}	
}
void del()//删除操作
{
	printf("\n删除操作:\n");
	printf("请输入删除位置:");
	scanf("%d",&people.location);
	if(people.location>50)
		printf("处理编号超过阈值\n");
	else if(find(people.location)==0)
		printf("此处无数据\n");
	else
	{
		for(j = 1;j <= 50;j ++)
		{
			if(man[j].location==people.location)
			{
				man_rank[people.location]=man[0];
				man[j]=man[0];
				del_count++;
				break;
			}
		}
	}
}
void amend()//修改操作
{
	printf("\n修改操作:\n");
	printf("请输入修改位置:");
	scanf("%d",&people.location);
	if(people.location>50)
		printf("处理编号超过阈值\n");
	else if(find(people.location)==0)
		printf("此处无数据\n");
	else
	{
		for(j = 1;j <= 50;j ++)
		{
			if(man[j].location==people.location)
			{
				p=&man[j];
				printf("已擦除原有信息,请重新键入\n\n");
				printf("请输入联系人姓名:");
				scanf("%s",&p->name);
				printf("请输入联系人电话:");
				scanf("%s",&p->phonenum);
				printf("修改完毕!\n");
				break;
			}
		}
	}
}
void seek()//查找操作
{
	int num,i;
	printf("\n查找操作:\n");
	printf("1)姓名查找\t2)电话号码查找\n");
	printf("请选择查找方式:");
	scanf("%d",&num); 
	if(num==1)
	{
		printf("请输入姓名:"); 
		scanf("%s",&people.name);
		for(i = 1;i <= 50;i ++)
		{
			if(strcmp(people.name,man[i].name)==0)
			{
				printf("已为您找到:\n");
				printf("编号:%2d |姓名:%s\t|电话:%s\n",man[i].location,man[i].name,man[i].phonenum);
				break;
			}
			if(i==50)
				printf("查无此人\n"); 
		}		
	}
	else if(num==2)
	{
		printf("请输入电话号码:"); 
		scanf("%s",&people.phonenum);
		for(int i = 1;i <= 50;i ++)
		{
			if(strcmp(people.phonenum,man[i].phonenum)==0)
			{
				printf("已为您找到:\n");
				printf("编号:%2d |姓名:%s\t|电话:%s\n",man[i].location,man[i].name,man[i].phonenum);
				break;
			}
			if(i==50)
				printf("查无此人\n");
		}
	}
}
int find(int x)//查找是否有此联系人 
{
	for(int i = 1;i <= people_num;i ++)
	{
		if(x==man[i].location)
			return 1;
	}
	return 0;
}

2.2.3.2 函数调用图与流程图

函数调用图:

流程图:

2.2.4 功能测试

排序操作:

正常操作:


错误操作:

添加操作:

正常操作:


错误操作:


删除操作:

正常操作:


错误操作:


修改操作:

正常操作:


错误操作:


查找操作:

正常操作:

错误操作:

非菜单编号操作:

2.2.5 应用集成(Gitee上传截图与链接)


我的主页

posted @ 2020-04-29 19:38  zhoushikang  阅读(186)  评论(0编辑  收藏  举报