#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <assert.h>
#define MAX 100
typedef struct Peoinfo
{
char name[20];
char num[20];
int price;
}Peoinfo;
typedef struct Car
{
Peoinfo* date;
int count;
}Car;
void AddContact(Car* pc, int n)
{
assert(pc);
if (pc->count >= n)
{
printf("通讯录已经满了\n");
return;
}
printf("请输入品牌:");
scanf("%s", pc->date[pc->count].name);
printf("请输入型号:");
scanf("%s", &pc->date[pc->count].num);
printf("请输入价格:");
scanf("%d", &pc->date[pc->count].price);
pc->count++;
printf("增加成功\n");
return;
}
void ShowContact(const Car* pc)
{
assert(pc);
if (pc->count == 0)
{
printf("通讯录是空的\n");
return;
}
printf("%10s\t%10s\t%10s\t\n", "品牌", "型号","价格");
for (int i = 0; i < pc->count; i++)
{
printf("%10s\t%10s\t%10d\n",
pc->date[i].name,
pc->date[i].num,
pc->date[i].price);
}
return;
}
int Find(Car* pc, char num[])
{
assert(pc);
for (int i = 0; i < pc->count; i++)
{
if (strcmp(pc->date[i].num, num) == 0)
{
return i;
}
}
return -1;
}
void SearchContact(Car* pc)
{
assert(pc);
char num[20] = { 0 };
printf("请输入要查找的车的型号\n");
scanf("%s", num);
int i = Find(pc, num);
if (i == -1)
{
printf("要查找的车不存在\n");
return;
}
printf("%-10s\t%10s\t%10s\n", "品牌", "型号","价格");
printf("%-10s\t%10s\t%10d\n",
pc->date[i].name,
pc->date[i].num,
pc->date[i].price);
}
// ... (其他代码不变)
void DeleContact(Car* pc)
{
assert(pc);
char num[20] = { 0 };
if (pc->count == 0)
{
printf("名单是空的\n");
return;
}
printf("请输入要删除的车的型号\n");
scanf("%s", num);
int pos = Find(pc, num);
if (pos == -1)
{
printf("要删除的车的数据不存在\n");
return;
}
for (int i = pos; i < pc->count - 1; i++)
{
pc->date[i] = pc->date[i + 1];
}
pc->count--;
printf("删除成功\n");
}
void print(Car* pc,int n)
{
char arr[MAX];
printf("请输入文件的绝对路径\n");
scanf("%255s", arr);
FILE* p1 = fopen(arr, "w");
if (p1 == NULL)
{
perror("error");
return;
}
for (int i = 0; i < pc->count; i++)
{
fprintf(p1,"%10s\t%10s\t%10d\n",
pc->date[i].name,
pc->date[i].num,
pc->date[i].price);
}
fclose(p1);
Car pf = { 0 };
pf.count = 0;
pf.date = (Peoinfo*)calloc(n, sizeof(Peoinfo));
if (pf.date == NULL)
{
perror("error");
return;
}
FILE* p2 = fopen(arr, "r");
if (p2 == NULL)
{
perror("error");
free(pf.date);
return;
}
for (int i = 0; i < pc->count; i++)
{
fscanf(p2,"%10s %10s %10d", pf.date[i].name, pf.date[i].num, &pf.date[i].price);
pf.count++;
}
fclose(p2);
int low, up;
printf("请输入价格下限和上限\n");
scanf("%d %d", &low, &up);
printf("%10s\t%10s\t%10s\n", "品牌", "型号", "价格");
for (int i = 0; i < pf.count; i++)
{
if (pf.date[i].price > low && pf.date[i].price < up)
{
printf("%10s\t%10s\t%10d\n", pf.date[i].name, pf.date[i].num, pf.date[i].price);
}
}
free(pf.date);
}
void Destroy(Car* pc)
{
assert(pc);
free(pc->date);
pc->date = NULL;
}
void menu()
{
printf("**************************************\n");
printf("***** 1.add 2.dele *******\n");
printf("***** 3.search 4.show *******\n");
printf("***** 0.exit *******\n");
printf("**************************************\n");
}
int main() {
int input = 0;
Car con;
int n = 0;
printf("请输入你要输入的车的数量\n");
scanf("%d", &n);
con.count = 0;
con.date = (Peoinfo*)calloc(n, sizeof(Peoinfo));
if (con.date == NULL)
{
perror("error");
return 1;
}
do
{
menu();
printf("请选择\n");
scanf("%d", &input);
switch (input)
{
case 1:
AddContact(&con, n);
break;
case 2:
DeleContact(&con);
break;
case 3:
SearchContact(&con);
break;
case 4:
ShowContact(&con);
break;
case 0:
print(&con, n);
Destroy(&con);
printf("已退出\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input);
return 0;
}