欢迎来到solokillの博客
solokill
佛曰:
一花一世界,一叶一菩提

C语言ll作业01

这个作业属于哪个课程 班级链接
这个作业要求在哪里 作业链接
这个作业的目标 学会用结构体写菜单通讯录等程序
其他参考文献1 清屏函数
其他参考文献2 全局or局部变量讲解
作业正文 本篇博客

1.1 需求分析

  • 1、对应不同功能需要使用多个函数对数据进行处理,所以首先需要制作一个菜单。
  • 2、删除以及查找功能需要判断是否存在数据,所以需要额外做一个判断程序。
  • 3、大致思路为结构体+指针+自定义函数+选择菜单=通讯录。
  • 4、参考资料中给出了清屏函数与各类变量等资料,大概率需要使用,尽量使程序完善。

1.2 程序代码

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int g=0,max=50;

typedef struct person
{
	int N;
	char name[20];
	char t[20];
}people;

typedef struct all
{
	struct person people[50];
	int x;
}all;

struct all MY_addressbook;

void caidan();
void Add(all*p);
void Delete(all*p);
void Search(all*p);
void Change(all*p);
void paixu(all*p); 




int main()
{
	MY_addressbook.x=0;
	caidan();
	return 0;
} 
void menu()
{
	printf("=====================通讯录=====================\n");
	printf("=====                界面                   =====\n");
	printf ("人数:%d人                        |剩余空间:%d人\n",g,max); 
	for(int i=0;i<50;i++)
	{
		if (MY_addressbook.people[i].N!=0)
		printf("编号:%d       |姓名:%s        |电话:%s\n",MY_addressbook.people[i].N,MY_addressbook.people[i].name,MY_addressbook.people[i].t);
	}
	printf("操作列表:\n");
	printf("=====   1)排序      2)添加      3)删除    =====\n");
	printf("=====   4)修改      5)查找      6)退出程序=====\n");

}

void caidan()
{
	int a=0;
	do
	{
	    menu();
	    printf("请输入操作;\n");
    	scanf("%d",&a);
	    switch(a)
	    {
		case 1:
		    paixu(&MY_addressbook);
		 	system("cls");
		    break;
		case 2:
			Add(&MY_addressbook);
			system("cls");
			break;
		case 3:
			Delete(&MY_addressbook);
			system("cls");
			break;
		case 4:
			Change(&MY_addressbook);
			system("cls");
			break;
		case 5:
			Search(&MY_addressbook);
			system("cls");
			break;	
		case 6:
			exit(0);
		    break;
		default :
		    printf("Error!!!\n错误操作指令, 请重新输入\n");
			break;
	    }
    }while(a);
}

void Add(all*p)
{
	int m;
	printf("请输入添加位置:");
	scanf("%d",&m);
    p->people[p->x].N=m;
    if(m>50||m<=0)
	{
		printf("处理编号超过阈值!\n");	
	}
	else
	{
		printf("请输入联系人姓名:");
		scanf("%s",&p->people[p->x].name);
		printf("请输入联系人电话:");
		scanf("%s",&p->people[p->x].t);
		g++;max--;
	}
	p->x++;
}




int FindEntry(all*p,char *name)
{
	for(int i=0;i<(p->x);i++)
	{
		if(strcmp(p->people[i].name,name)==0)
		{
			return i;
		}
		if(i==p->x)
		{
			return 1;
		}
	}
}

void Search(all*p)
{
	int flag;
	char name[10]={0};
	printf("请输入你要查找联系人的姓名:");
	scanf("%s",&name);
	flag=FindEntry(p,name);
	if(flag==1)
	{
		printf("查无此人!\n");
	}
	else
	{
		printf("编号:%d     |姓名:%s     |电话:%d\n",p->people[flag].N,p->people[flag].name,p->people[flag].t);
	}
}


void Delete(all*p)
{
	int flag;
	char name[10]={0};
	printf("请输入删除联系人:\n");
	scanf("%s",&name);
	flag=FindEntry(p,name);
	if(flag==1)
	{
		printf("此处无数据!\n");
	}
	else
	{
		for(int j=flag;j<p->x;j++)
		{
			p->people[j]=p->people[j+1];
		}
		printf("删除成功!\n");
		g--;max++; 
	}
	p->x--;
}


void Change(all*p)
{
	int flag;
	char n[10]={0};
	printf("请输入修改联系人:\n");
	scanf("%s",&n);
	flag=FindEntry(p,n);
	if(flag==1)
	{
		printf("此处无数据!\n"); 
	}
	else
	{
		printf("请重新输入编号:\n");
		scanf("%d",&p->people[flag].N);
		printf("请重新输入姓名:\n");
		scanf("%s",&p->people[flag].name);
		printf("请重新输入电话:\n");
		scanf("%s",&p->people[flag].t);
	}
}


void paixu(all*p)
{
	int i,j,k;
	printf("请选择排序的方式:");
	printf("1)编号排序  2)姓名排序");
	scanf("%d",&k);
	switch(k)
	{
		case 1:
		for(i=0;i<(p->x-1);i++)
		{
			for(j=0;j<(p->x-i-1);j++)
			{
				if(p->people[j].N  >  p->people[j+1].N)
				{
					people q;
					q=p->people[j];
					p->people[j]=p->people[j+1];
					p->people[j+1]=q;
				}
			}
		}
		break;
		case 2:
		for(i=0;i<(p->x-1);i++)
		{
			for(j=0;j<(p->x-i-1);j++)
			{
				if(strcmp(p->people[j].name,p->people[j+1].name)<0)
				{
					people q;
					q=p->people[j];
					p->people[j]=p->people[j+1];
					p->people[j+1]=q;
				}
			}
		}
		break;
		default :
		printf("输入错误,请重试。");
		break;
		
	}
}

1.3 函数调用图与流程图

1.4 功能测试

  • 添加操作

  • 删除操作

  • 修改操作

  • 排序操作



1.5 应用集成

仓库链接

posted @ 2020-04-27 14:43  solokill  阅读(237)  评论(0编辑  收藏  举报