#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "string.h"
#define MAXRECORD (1024)
enum RecordType{OFFICE,PERSON,BUSINESS};
const char* const TypeName[] = {"办公","个人","商务"};
typedef struct Record
{
char name[128];
char phoneNum[32];
char email[128];
RecordType type;
}Record;
int recordNum = 0;
void ClearRecord(Record* record)
{
memset((void*)record,0,sizeof(*record));
recordNum--;
}
void ShowMainMenu()
{
system("cls");
printf("1.查询\n2.添加\n3.修改\n4.删除\n5.退出\n");
}
void InputRecord(Record* record)
{
if(recordNum == MAXRECORD)
{
printf("人数已满。\n");
getch();
}
system("cls");
printf("分别录入名字、手机号、电子邮箱、类型(0|办公 1|个人 2|商务):\n");
scanf("%s%s%s%d",record->name,record->phoneNum,record->email,&(record->type));
recordNum++;
}
void SelectFromName(const Record* record)
{
system("cls");
printf("输入查询名字:\n");
char name[128]={0};
scanf("%s",name);
printf("查询结果:\n");
for(int i = 0;i<recordNum;i++)
if(!(strcmp(name,(record+i)->name)))
printf("(%d):%s\t%s\t%s\t%s\n",i+1,(record+i)->name,(record+i)->phoneNum,(record+i)->email,TypeName[(record+i)->type]);
printf("\n按任意键继续……");
getch();
}
void SelectFromType(const Record* record)
{
system("cls");
printf("输入查询类型(0|办公 1|个人 2|商务):\n");
int type = 0;
scanf("%d",&type);
printf("查询结果:\n");
for(int i = 0;i<recordNum;i++)
if(type == (record+i)->type)
printf("(%d):%s\t%s\t%s\t%s\n",i+1,(record+i)->name,(record+i)->phoneNum,(record+i)->email,TypeName[(record+i)->type]);
printf("\n按任意键继续……");
getch();
}
void SelectRecord(const Record* record)
{
while(1)
{
system("cls");
printf("选择查询方案(0|按名字 1|按类型 2|返回上级菜单):\n");
char chGet = getch();
switch(chGet)
{
case '0':
SelectFromName(record);
break;
case '1':
SelectFromType(record);
break;
case '2':
return;
default:
break;
}
}
}
void UpdateRecord(Record* record)
{
system("cls");
printf("输入修改名字:\n");
char name[128]={0};
scanf("%s",name);
for(int i = 0;i<recordNum;i++)
if(!(strcmp(name,(record+i)->name)))
{
printf("分别录入名字、手机号、电子邮箱、类型(0|办公 1|个人 2|商务):\n");
scanf("%s%s%s%d",(record+i)->name,(record+i)->phoneNum,(record+i)->email,&((record+i)->type));
printf("\n修改成功,按任意键继续……");
getch();
return;
}
printf("\n查无此人,按任意键继续……");
getch();
}
void DeleteRecord(Record* record)
{
system("cls");
printf("输入删除名字:\n");
char name[128]={0};
scanf("%s",name);
for(int i = 0;i<recordNum;i++)
if(!(strcmp(name,(record+i)->name)))
{
for(int j = i;j<recordNum - 1;j++)
*(record+j) = *(record+j+1);
ClearRecord(record+recordNum-1);
printf("\n删除成功,按任意键继续……");
getch();
return;
}
printf("\n查无此人,按任意键继续……");
getch();
}
void RunRecord(Record* record)
{
while(1)
{
ShowMainMenu();
char chGet = getch();
switch(chGet)
{
case '1':
SelectRecord(record);
break;
case '2':
InputRecord(record+recordNum);
break;
case '3':
UpdateRecord(record);
break;
case '4':
DeleteRecord(record);
break;
case '5':
return;
default:
break;
}
}
}
int main()
{
Record* allRecord = (Record*)malloc(MAXRECORD*sizeof(Record));
memset((void*)allRecord,0,MAXRECORD*sizeof(Record));
RunRecord(allRecord);
return 0;
}
追问你运行了么 不对啊
能不能给改改
追答能运行,你是linux吗?我是用vs2008编译的
如果你是linux,就要改一些地方
追问cfree
追答![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/f703738da97739122b20dbc9fd198618367ae210?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
我这用cfree正常编译和运行