- 本周作业头
这个作业属于哪个课程 | 班级链接 |
---|---|
这个作业要求在哪里 | 作业要求链接 |
这个作业的目标 | 能更加熟悉二维数组的使用 |
其他参考文献 | 参考资料 |
作业正文 | 本篇博客 |
二.作业正文
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();
}