C语言ll作业01
1. 本周作业头
| 这个作业属于哪个课程 | 班级作业链接 |
|---|---|
| 这个作业要求在哪里 | 作业要求的链接 |
| 这个作业的目标 | 做一个通讯录 |
| 作业正文 | |
| 其他参考文献 | 详解宏定义(#define) 清空数组 |
2. 需求分析
- 要有操作列表
- 错误指令
- 排序、添加、删除、修改、查询操作
3.程序代码
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
#define MAX 50
int b = 0, c = MAX;
typedef struct man
{
int num;
char name[20];
char phone[20];
}list;
typedef struct men
{
struct man list[MAX];
}men;
void test();
void menu();
int find(men* p, int num);
void add(men* p);
void dele(men* p);
void search(men* p);
void change(men* p);
void sort_name(men* p);
struct men book;
int main()
{
menu();
system("pause");
return 0;
}
void menu()
{
int select = 0;
do
{
test();
printf("请输入操作:");
scanf("%d", &select);
switch (select)
{
test();
case 1:
sort_name(&book);
system("cls");
break;
case 2:
add(&book);
system("cls");
break;
case 3:
dele(&book);
system("cls");
break;
case 4:
change(&book);
system("cls");
break;
case 5:
search(&book);
system("cls");
break;
case 6:
exit(0);
break;
default:
printf("Error!!!\n错误操作指令, 请重新输入");
break;
}
} while (select != 6);
}
void test()
{
printf("========== 通讯录 ==========\n\n\n");
printf("========== 界面 ==========\n");
printf("人数:%d |剩余空间:%d\n", b, c);
for (int i=0; i < 50; i++)
{
if(book.list[i].num!=0){
printf("编号: %2d| 姓名: %s|", book.list[i].num, book.list[i].name);
printf("电话: %s\n", book.list[i].phone);
}
}
system("pause");
printf("\n\n\n操作列表:\n");
printf("1)排序 2)添加 3)删除\n4)修改 5)查找 6)退出程序\n\n\n\n");
}
int find(men* p, int num)
{
if (num > 50 || num < 1) {
printf("处理编号超过阈值");
system("pause");
}
int i = 0;
for (; i <= MAX; i++)
{
if (p->list[i].num == num)
{
return i;
}
}
return -1;
}
void dele(men* p)
{
int s;
int ret;
printf("请输入操作位置:");
scanf("%d", &s);
ret = find(p, s);
if (ret == -1)
{
printf("此位置没有数据\n");
system("pause");
}
else
{
int j = ret;
for (; j < 50; j++)
{
p->list[j] = p->list[j + 1];
}
printf("已删除!!!\n");
b--;
c++;
}
}
void add(men* p)
{
int j = 0;
printf("请输入添加位置:");
scanf("%d", &j);
if (j > 50 || j < 1) {
printf("处理编号超过阈值");
system("pause");
}
else if (p->list[j].num != 0)
{
printf("此处已有数据");
system("pause");
}
else
{
p->list[j].num = j;
printf("请输入联系人姓名:");
scanf("%s", p->list[j].name);
printf("请输入联系人电话:");
scanf("%s", &p->list[j].phone);
b++;
c--;
}
}
void search(men* p)
{
char name[20];
int q =0;
printf("请输入要查询的联系人:");
scanf("%s", &name);
for ( int i = 0; i <= 50; i++)
{
if (strcmp(p->list[i].name, name) == 0)
{
getchar();
printf("编号: %2d | 姓名: %s |", p->list[i].num, p->list[i].name);
printf("电话: %s\n", p->list[i].phone);
system("pause");
return ;
}
++q;
}
if(q>=50)
{
printf("查无此人!");
system("pause");
return;
}
}
void change(men* p)
{
int s;
int ret;
printf("请输入操作位置:");
scanf("%d", &s);
ret = find(p, s);
if (ret != -1)
{
int j = ret;
for (; j < b; j++)
{
p->list[j] = p->list[j + 1];
}
printf("已删除!!!\n请重新输入\n");
printf("请输入联系人姓名:");
scanf("%s", p->list[j].name);
printf("请输入联系人电话:");
scanf("%s", &p->list[j].phone);
}
}
void sort_name(men* p)
{
struct man temp;
int y = 0;
printf("请选择排序的方式\n1)编号排序 2)姓名排序");
scanf("%d", &y);
switch (y)
{
case 1:
for (int i = 0; i < b - 1; i++)
{
for (int j = 0; j < b - 1 - i; j++)
{
if (p->list[j].num > p->list[j + 1].num)
{
temp = p->list[j];
p->list[j] = p->list[j + 1];
p->list[j + 1] = temp;
}
}
}
break;
case 2:
for (int i = 0; i < b - 1; i++)
{
for (int j = 0; j < b - 1 - i; j++)
{
if (strcmp(p->list[j].name, p->list[j + 1].name) > 0)
{
temp = p->list[j];
p->list[j] = p->list[j + 1];
p->list[j + 1] = temp;
}
}
}
break;
default:
printf("错误操作请重新输入");
getchar();
system("cls");
break;
}
}
4.源代码







5. 函数调用图与流程图

6.功能测试
- 添加:
![]()
- 排序:
![]()
- 删除:
![]()
- 修改:
![]()
- 查找:
![]()
- 退出程序:
![]()
7.应用集成

(试了好多次都传不上去)
git链接:https://gitee.com/li_tinga/C-Gaming






浙公网安备 33010602011771号