用C语言实现以上问题
时间: 2024-02-18 21:02:23 浏览: 21
以下是用C语言实现以上问题的代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_PACKAGE_NUM 1000 //最大包裹数
#define MAX_NAME_LEN 20 //最大姓名长度
#define MAX_PHONE_LEN 15 //最大电话长度
#define MAX_ADDR_LEN 50 //最大地址长度
#define MAX_ORDER_LEN 20 //最大单号长度
//包裹信息结构体
typedef struct package
{
char id[MAX_ORDER_LEN]; //单号
char name[MAX_NAME_LEN]; //姓名
char phone[MAX_PHONE_LEN]; //电话
char address[MAX_ADDR_LEN]; //地址
} Package;
//包裹信息表格
Package package_table[MAX_PACKAGE_NUM];
int package_num = 0; //包裹数量
//添加包裹
void add_package()
{
if (package_num >= MAX_PACKAGE_NUM)
{
printf("已达到最大包裹数,无法添加新的包裹\n");
return;
}
Package new_package;
printf("请输入包裹信息:\n");
printf("单号:");
scanf("%s", new_package.id);
printf("姓名:");
scanf("%s", new_package.name);
printf("电话:");
scanf("%s", new_package.phone);
printf("地址:");
scanf("%s", new_package.address);
package_table[package_num++] = new_package;
printf("成功添加一条包裹信息\n");
}
//比较两个包裹的地址大小
int compare_address(Package p1, Package p2)
{
return strcmp(p1.address, p2.address);
}
//比较两个包裹的单号大小
int compare_id(Package p1, Package p2)
{
return strcmp(p1.id, p2.id);
}
//包裹排序
void sort_packages()
{
//按地址排序
for (int i = 0; i < package_num; i++)
{
for (int j = i + 1; j < package_num; j++)
{
if (compare_address(package_table[i], package_table[j]) > 0)
{
Package temp = package_table[i];
package_table[i] = package_table[j];
package_table[j] = temp;
}
}
}
//按单号排序
for (int i = 0; i < package_num; i++)
{
for (int j = i + 1; j < package_num; j++)
{
if (compare_address(package_table[i], package_table[j]) == 0 && compare_id(package_table[i], package_table[j]) > 0)
{
Package temp = package_table[i];
package_table[i] = package_table[j];
package_table[j] = temp;
}
}
}
printf("成功排序所有包裹\n");
}
//查找包裹编号
void find_package()
{
char name[MAX_NAME_LEN];
char phone[MAX_PHONE_LEN];
char id[MAX_ORDER_LEN];
printf("请输入要查找的包裹信息:\n");
printf("姓名:");
scanf("%s", name);
printf("电话:");
scanf("%s", phone);
printf("单号:");
scanf("%s", id);
int found = 0;
for (int i = 0; i < package_num; i++)
{
if (strcmp(package_table[i].name, name) == 0 && strcmp(package_table[i].phone, phone) == 0 && strcmp(package_table[i].id, id) == 0)
{
printf("包裹编号为:%d\n", i);
found = 1;
break;
}
}
if (!found)
{
printf("没有找到对应的包裹信息\n");
}
}
//主函数
int main()
{
int choice;
while (1)
{
printf("请输入操作编号:\n");
printf("1. 添加包裹\n");
printf("2. 排序包裹\n");
printf("3. 查找包裹编号\n");
printf("4. 退出程序\n");
scanf("%d", &choice);
switch (choice)
{
case 1:
add_package();
break;
case 2:
sort_packages();
break;
case 3:
find_package();
break;
case 4:
return 0;
default:
printf("无效的操作编号,请重新输入\n");
}
}
return 0;
}
```
在上面的代码中,我们使用了一个结构体来表示包裹信息,包括单号、姓名、电话和地址。我们使用一个静态数组来表示包裹信息表格,使用一个变量记录当前包裹数量。实现了添加包裹、排序包裹和查找包裹编号等功能。