陈琬琰yoyo

导航

C语言ll作业01

问题|答案
-|-|-
这个作业属于哪个课程|班级链接
这个作业的要求在哪里|作业要求
这个作业的目标|利用本学期所学内容制作小程序。
参考文献|作业要求里提供的一系列文献,百度百科,码云。

二。作业正文

1.需求分析

(1.)利用主函数里面嵌套五个不同功能的函数依次进行程序编写。
(2.)将涉及到数组、结构、函数、指针,for循环,switc语句,while语句等等。

2.程序代码

 '''
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 struct people
  { 
int num;
char name[10];
char phone[12];
   }; 
    struct people s[50];
    int p1=0,p2=50;
    void sort();
    void add();
    void  cancle();
    void amend();
    int Find(int a,int b);
    void search();
   int main()
   {
      while (1)
      {
	printf("======= 通讯录 ======= \n\n");
	printf("====== 界面 ====== \n");
	printf("人数:%d 人     | 剩余空间:%d 人\n\n",p1,p2);
	for(int i=0;i<p1;i++)
	{
		printf("编号:%2d  | 姓名:%s  | 电话:%s\n",s[i].num, s[i].name, s[i].phone);
	}
	int a;
	printf(" 1) 排序      2) 添加      3) 删除 \n");
	printf(" 4) 修改      5) 查找      6) 退出程序 \n\n"); 
	printf("请输入操作:");
	scanf("%d",&a);
	switch(a)
	{
		case 1:
			sort();
			break;
		case 2:
			add();
			break;
		case 3:
			cancle();
			break;
		case 4:
			amend();
			break;
		case 5:
			search();
			break;
		case 6:
			printf("已退出程序");
			return 1;
		default:
			printf("错误操作请重新输入\n");
			break;
           }
      }
      }
      void sort() 
   {
printf("\n请选择排序的方式\n");
printf("1) 编号排序  2) 姓名排序\n");
int x=0;
scanf("%d",&x);
struct people temp;
switch(x)
{
	case 1:
		for(int i=0;i<p1 -1;i++)
		{
			for(int j=0;j<p1 - 1 - i;j++)
			{
				if(s[j].num > s[j + 1].num)
				{
					temp = s[j];
					s[j] = s[j+1];
					s[j+1] = temp;
				}
			}
		}
		break;
	case 2:
		for(int i=0;i<p1 -1;i++)
		{
			for(int j=0;j<p1 - 1 - i;j++)
			{
				if(strcmp(s[j].name , s[j + 1].name) > 0) 
				{
					temp = s[j];
					s[j] = s[j+1]; 
					s[j+1] = temp;
				}
			}
		}
		break;
	default:
		printf("错误操作请重新输入");
		system("cls");
		break; 
 } 
       }
      void add()
   {
 int b=1;
if(p2<=0)
{
	printf("通讯录已满\n");
}
else
{
	printf("\n添加操作:\n");
	printf("请输入操作位置:");
	scanf("%d",&s[p1].num);
	if(Find(s[p1].num,b))
	{
		printf("请输入联系人姓名:");
		scanf("%s",&s[p1].name);
		printf("请输入联系人电话:");
		scanf("%s",&s[p1].phone);
		printf("\n");
		p1++;
		p2--;
         	}
     }
 }
     void cancle()
   {
int a,b = 2,x;
printf("\n删除操作:\n");
printf("请输入操作位置:");
scanf("%d",&a);
x=Find(a,b);
if(x)
{
	for(int i=x;i<p1;i++)
	{
		s[i-1]=s[i];
	}
	p1--;
	p2++;
    	}
 }
     void amend()
 { 	
int a,b,x=2;
char* name, * phone;
printf("\n修改操作:\n");
printf("请输入操作位置:");
scanf("%d",&a);
x=Find(a,b);	
if(x)
{
    name = s[x-1].name;
    phone = s[x-1].phone;
    for(int i=0;i<p1;i++)
    {
        if(s[i].num == a)
        {
            printf("已擦除原有信息,请重新键入\n\n");
            printf("请输入联系人姓名:");
            scanf("%s",name);
            printf("请输入联系人电话:"); 
 	        scanf("%s",phone);
 	    }
 	}
 	printf("此处无数据\n\n");
}
  }
  int Find(int a,int b)
  {
if(a > 50 || a<1)
{
	printf("处理编号超过阈值\n\n");
	return 0; 
}
else
{
	for(int i=0;i<p1;i++)
	{
		if(s[i].num == a)
		{
			if(b == 1)
			{
				printf("此处已有数据\n\n");
			return 0;
			}
		    else if (b == 2)
		    {
		    	return i + 1;
	    	}
	    }
	}
	if(b==2)
	{
    	printf("此处无数据\n\n");
    }
}
return 1;
   } 
  void search()
  {
int n=-1;
char str[12];
printf("\n\n请输入你要查找联系人的姓名或电话号码:");
scanf("%s",str);
	for(int i=0;i<p1;i++)
	{
		if(strcmp(str,s[i].phone)==0||strcmp(str,s[i].name)==0)
		{
			printf("编号:%2d  | 姓名:%s  | 电话:%s\n",s[i].num, s[i].name, s[i].phone);
			return;
		}
	}
	if(n==-1)
	{
		printf("查无此人\n\n");
 	}
	return;
      }

4.程序调用图与流程图

5.功能测试

  • 添加功能
  • 删除功能
  • 查找功能
  • 排序功能

6.应用集成

陈琬琰yoyo

posted on 2020-04-27 19:48  陈琬琰yoyo  阅读(191)  评论(0编辑  收藏  举报