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上传截图与链接)