C语言ll作业01
一.作业头
这个作业属于哪个课程|班级链接
-|-|-
这个作业要求在哪里|作业要求链接
这个作业的目标|能够更加熟悉数组,二维数组及结构的知识
作业正文|本篇博客
其他参考文献|NULL , 清屏函数
二.作业正文
1.需求分析
1)分为5个不同功能的函数,除了退出程序;
2)排序操作通过对字符串的比较进行;添加操作运用了结构;修改操作运用指针;
2)运用switch进行功能的选择。
2.程序代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct people
{
char name[20];
char tel[20];
int number;
};
struct people a[50];
static int c=0,sum=50;
void menu();
void display();
void rank();
void add();
void del();
void modify();
void* search();
int search(int mid);
void display()
{
printf("========== 通讯录 ==========\n\n\n");
printf("========== 界面 ==========\n");
printf("人数:%d |剩余空间:%d\n", c,sum);
for(int i=0;i<c;i++)
{
printf("编号:%2d| 姓名:%s|电话:%s\n", a[i].number,a[i].name,a[i].tel);
}
}
void menu()
{
int m;
while(1)
{
display();
printf("\n\n\n操作列表:\n");
printf("1)排序 2)添加 3)删除\n4)修改 5)查找 6)退出程序\n\n\n\n");
printf("请输入操作:");
scanf("%d",&m);
putchar('\n');
putchar('\n');
switch(m)
{
case 1:
rank();
system("cls");
break;
case 2:
add();
system("cls");
break;
case 3:
del();
system("cls");
break;
case 4:
modify();
system("cls");
break;
case 5:
search();
system("cls");
break;
case 6:
exit(0);
break;
default:
printf("Error!!!\n错误操作指令, 请重新输入");
break;
}
}
}
void rank()
{
int y = 0;
printf("请选择排序的方式");
printf("1)编号排序 2)姓名排序\n");
scanf("%d", &y);
struct people temp;
switch (y)
{
case 1:
for (int i = 0; i < c - 1; i++)
{
for (int j = 0; j < c - 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 < c - 1; i++)
{
for (int j = 0; j < c - 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("cls");
break;
}
}
void add()
{
if(sum==0)
{
printf("\n");
printf("通讯录已满\n");
system("pause");
}
printf("添加操作:\n");
printf("请输入添加位置:");
scanf("%d",&a[c].number);
if(a[c].number>50||a[c].number<1)
{
printf("处理编号超过阈值");
system("pause");
}
for(int i=0;i<c;i++)
{
if(a[i].number==a[c].number)
{
printf("此处已有数据");
system("pause");
}
}
printf("请输入联系人姓名:");
scanf("%s", a[c].name);
printf("请输入联系人电话:");
scanf("%s", a[c].tel);
c++;
sum--;
}
void del()
{
int mid;
int index;
printf("删除操作:\n");
printf("请输入操作位置:");
scanf("%d", &mid);
if (mid> 50 || mid < 1)
{
printf("处理编号超过阈值");
system("pause");
}
index=search(mid);
if(index==-1)
{
printf("此处无数据\n");
system("pause");
}
else
{
for(int i=index;i<c;i++)
{
a[i-1]=a[i];
}
c--;
sum++;
}
}
void modify()
{
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=search(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* search()
{
int min=0,max=c-1,mid;
char n[40];
printf("请输入要查询的联系人的姓名或电话:");
scanf("%s", &n);
if(n[0]>='1'&&n[0]<='9')
{
for(int i=0;i<c;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 search(int mid)
{
for(int i=0;i<c;i++)
{
if(a[i].number==mid)
{
return i+1;
}
}
return -1;
}
int main(int arg,char const*argc[])
{
menu();
}
3.源代码
4.程序调用图与流程图
5.功能测试
添加操作
删除操作
排序操作
修改操作
查找操作
6.应用集成
Gitee上传截图与链接
链接