创建好菜单

This commit is contained in:
root 2023-12-21 22:39:25 +08:00
parent 7db410f5bf
commit 9c55c6b636

View File

@ -1,348 +1,89 @@
#include <stdio.h> #include<stdio.h>
#include <stdlib.h>
#include <string.h> struct Contact//每个联系人的结构体
{
int contact_digit=0;//存入了多少位置 int age;//年龄
char sex[10];//性别
struct Contact char name[15];//名字
{ char email[30];//email
char name[50];//名字 };
char sex[20];//性别
char email[20];//电子邮箱 enum Operate//选择的枚举函数
char number[11];//电话号码 {
struct Contact *next;//下一个联系人 view=1,find,add,delete,quit//查看,查看个人,新增,删除,退出
}; }oprate;
struct Contact *con[99];//声明结构体
void view_mode(void)//查看所有联系人函数
void view_contact(void)//查看联系人 {
{ printf("view\n");
int contact_number;//第几个联系人 }
struct Contact *tmp_con=con[1];//声明结构体
for(contact_number=1;contact_number<contact_digit;contact_number++)//查找非空联系人 void find_mode(void)//查找联系人函数
{ {
tmp_con=con[contact_number];//复制结构体指针 printf("find\n");
if(tmp_con!=NULL) }
{
break; void add_mode(void)//新增联系人函数
} {
} printf("add\n");
if(contact_digit==0 ||(contact_digit==contact_number && tmp_con==NULL)) }
{
printf("通讯录没有联系人\n"); void delete_mode(void)//删除联系人函数
while(getchar()!='\n');//删除缓存 {
return; printf("delete\n");
} }
while(1)
{ int main(void)
printf("\n姓名:%s ",tmp_con->name); {
printf("性别:%s ",tmp_con->sex); start://主页面标签
printf("电子号码:%s ",tmp_con->number); printf("\n———————通讯录——————\n");
printf("电子邮箱:%s",tmp_con->email); printf("%d.查看全部联系人\n",view);
if(tmp_con->next==NULL) printf("%d.查找联系人\n",find);
{ printf("%d.新增联系人\n",add);
break; printf("%d.删除联系人\n",delete);
} printf("%d.退出程序\n",quit);
else printf("请输入需要进入的模式:");
{ while( (scanf("%d",&oprate)) != 1 || oprate < 1|| oprate > 5)
tmp_con=tmp_con->next;//指向下一个联系人 {
} while(getchar()!='\n');//清除缓存
} printf("请输入正确的数字:");
printf("\n"); scanf("%d",&oprate);//重新获取数字
while(getchar()!='\n');//清除缓存 }
} switch(oprate)
{
int find_numbering(const char name[])//查找编号 case view:
{ {
int contact_number=1;//第几个联系人 while(getchar()!='\n');//清除缓存
struct Contact *tmp_con=con[1];//声明临时结构体 view_mode();//进入查看函数
if(contact_digit==0)//如果查找到最后一个都没有 goto start;//回到主页
{ break;//防止进入下一个
while(getchar()!='\n');//删除缓存 }
return 100; case find:
} {
while(1) while(getchar()!='\n');//清除缓存
{ find_mode();//进看个人函数
if(strcmp(tmp_con->name,name)==0) goto start;//回到主页
{ break;//防止进入下一个
return contact_number; }
} case add:
if(tmp_con->next==NULL)//如果下一个为NULL就退出 {
{ while(getchar()!='\n');//清除缓存
return 100; add_mode();//进入新增函数
} goto start;//回到主页
else break;//防止进入下一个
{ }
contact_number++;//增加联系人名次 case delete:
tmp_con=tmp_con->next;//指向下一个联系人 {
} while(getchar()!='\n');//清除缓存
} delete_mode;//进入删除函数
} goto start;//回到主页
break;//防止进入下一个
void remove_contact(int contact_number)//删除联系人 }
{ case quit:
if(contact_number==100) {
{ printf("欢迎下次使用\n");
printf("\n查无此人\n"); break;
return; }
} }
struct Contact *temp=con[contact_number];//声明临时储储存需要删除联系人的物理地址 return 0;
for(int i=contact_number;i<contact_digit;i++)//将所有联系人向前移一位 }
{
con[i]=con[i+1];
con[i-1]->next=con[i];
}
printf("删除的联系人姓名是:%s\n", temp->name);
free(temp);//释放这个联系人内容
contact_digit--;//总数减一
if(contact_digit==contact_number)//如果是最后一位
{
con[contact_number]->next=NULL;
}
printf("删除成功\n");
}
void revise_contact(const int contact_number)//修改信息
{
if(contact_number==100)
{
printf("\n查无此人\n");
return;
}
int pick=0;
start:
printf("\n1.修改名字\n");
printf("2.修改性别\n");
printf("3.修改电话号码\n");
printf("4.修改电子邮箱\n");
printf("5.返回主页\n");
printf("请输入:");
while((scanf("%d",&pick))!=1)
{
while(getchar()!='\n');//清除缓存
printf("请输入合法的数字:");
scanf("%d",&pick);
}
switch(pick)
{
case 1:
{
printf("请输入姓名:");
scanf("%50s",con[contact_number]->name);
printf("修改成功!\n当前姓名为:%s",con[contact_number]->name);
while(getchar()!='\n');//清除缓存
goto start;//回到主菜单
break;
}
case 2:
{
printf("请输入性别:");
scanf("%20s",con[contact_number]->sex);
printf("修改成功!\n当前性别为:%s",con[contact_number]->sex);
while(getchar()!='\n');//清除缓存
goto start;//回到主菜单
break;
}
case 3:
{
printf("请输入电话号码:");
number_tab:
scanf("%11s",con[contact_number]->number);
for(int i=0;i<11;i++)
{
if(strlen(con[contact_number]->number)!=11||con[contact_number]->number[i]<'0'||con[contact_number]->number[i]>'9')
{
printf("请输入11位数字:");
while(getchar()!='\n');//清除缓存
goto number_tab;
}
}
printf("修改成功!\n当前电话号码为:%s",con[contact_number]->number);
while(getchar()!='\n');//清除缓存
goto start;//回到主菜单
break;
}
case 4:
{
printf("请输入电子邮箱:");
email_tab:
scanf("%20s",con[contact_number]->email);
for(int i=0;i<=strlen(con[contact_number]->email);i++)
{
if(con[contact_number]->email[i]=='@')
{
break;
}
else if(i==strlen(con[contact_number]->email))
{
while(getchar()!='\n');
printf("请输入正确格式的邮箱:");
goto email_tab;
}
}
printf("修改成功!\n当前电子邮箱为:%s",con[contact_number]->email);
while(getchar()!='\n');//清除缓存
goto start;//回到主菜单
break;
}
case 5:
{
while(getchar()!='\n');//清除缓存
return;//结束程序
}
default :
{
while(getchar()!='\n');//清除缓存
printf("请输入对应的模式\n");
goto start;//回到主菜单
}
}
}
void see_contact(const int contact_number)//查看单个联系人
{
if(contact_number==100)
{
printf("\n查无此人\n");
return;
}
printf("\n姓名:%s ",con[contact_number]->name);
printf("性别:%s ",con[contact_number]->sex);
printf("电子号码:%s ",con[contact_number]->number);
printf("电子邮箱:%s\n",con[contact_number]->email);
}
void add_contact(void)//新增联系人
{
contact_digit++;
//分配内存
con[contact_digit]=(struct Contact *)malloc(sizeof(struct Contact));//给新联系人分配内存
//姓名
printf("请输入姓名:");
scanf("%50s",con[contact_digit]->name);
//性别
printf("请输入性别:");
scanf("%20s",con[contact_digit]->sex);
//电话号码
printf("请输入电话号码:");
number_tab:
scanf("%11s",con[contact_digit]->number);
for(int i=0;i<11;i++)
{
if(strlen(con[contact_digit]->number)!=11||con[contact_digit]->number[i]<'0'||con[contact_digit]->number[i]>'9')
{
printf("请输入11位数字:");
while(getchar()!='\n');//清除缓存
goto number_tab;
}
}
//电子邮箱
printf("请输入电子邮箱:");
email_tab:
scanf("%20s",con[contact_digit]->email);
for(int i=0;i<=strlen(con[contact_digit]->email);i++)
{
if(con[contact_digit]->email[i]=='@')
{
break;
}
else if(i==strlen(con[contact_digit]->email))
{
while(getchar()!='\n');
printf("请输入正确格式的邮箱:");
goto email_tab;
}
}
//下一个地址
if(contact_digit>1)
{
con[contact_digit-1]->next=con[contact_digit];//与上一个连接
}
con[contact_digit]->next=NULL;//将下一个设置为空
while(getchar()!='\n');//清除缓存
printf("\n新建成功");
see_contact(contact_digit);//输出单个信息
}
int homepage(void)//主页
{
printf("————通讯录————\n");
printf("1.查看联系人\n");
printf("2.查找联系人\n");
printf("3.修改联系人\n");
printf("4.删除联系人\n");
printf("5.新建联系人\n");
printf("6.退出通讯录\n");
int accept = 0;//接受用户输入的模式
printf("请输入:");
accept_tab://接受输入标签
while( ( scanf("%d",&accept) ) != 1)
{
while(getchar() != '\n');//清楚缓存
printf("请输入合法数字:");
scanf("%d",&accept);
}
if(accept>0&&accept<6)
{
return accept;
}
else if(accept==6)
{
printf("欢迎下次使用\n");
exit(0);
}
else
{
while(getchar() != '\n');//清楚缓存
printf("请输入正确的模式:");
goto accept_tab;
}
}
int main(void)
{
char name[10];//要接受用户输入的名字
int contact_number;//查找名字所在的结构体返回值
int homepage_pick=0;//主页选择变量
while(1)
{
homepage_pick=homepage();//接收主页选择
switch(homepage_pick)
{
case 1:
{
view_contact();//输出所有联系人
break;
}
case 2:
{
printf("\n请输入需要查找联系人的姓名:");
scanf("%s",name);
contact_number= find_numbering(name);//查找名字所在的结构体
see_contact(contact_number);//输出单个信息
break;
}
case 3:
{
printf("\n请输入需要修改联系人的姓名:");
scanf("%s",name);
contact_number= find_numbering(name);//查找名字所在的结构体
revise_contact(contact_number);//修改联系人
break;
}
case 4:
{
printf("\n请输入需要删除联系人的姓名:");
scanf("%s",name);
contact_number= find_numbering(name);//查找名字所在的结构体
remove_contact(contact_number);//删除联系人
break;
}
case 5:
{
add_contact();//进行增加
break;
}
}
}
return 0;
}