我想在我原来的程序上加多一个功能

hdukhw 2011-12-30 10:51:34
这是一个手机通讯录,我先添加一个标记删除功能,就是我可以先选择某几个人,然后一起删除.
#include<stdio.h>
#include<string.h>
struct friends_list{
char name[10];
int age;
char telephone[13];
};
int Count=0;
void new_friend(struct friends_list friends[]);
void search_friend(struct friends_list friends[],char*name);
void Modify_friend(struct friends_list friends[],char*name);
void Delete_friend(struct friends_list friends[],char*name,int n);
int main(void)
{
int choice,n;
char name[10];
struct friends_list friends[50];
do{
printf("手机通讯录功能选项: 1:新建 2:查询 3:修改 4:删除 0:退出\n");
printf("请选择功能:");
scanf("%d",&choice);
switch(choice){
case 1:
new_friend(friends);
break;
case 2:
printf("请输入要查找的联系人姓名:");
scanf("%s",name);
search_friend(friends,name);
break;
case 3:
printf("请输入您要修改的联系人的姓名:");
scanf("%s",name);
printf("\n");
Modify_friend(friends,name);
break;
case 4:
printf("1:单个删除 2:全部删除\n\n");
printf("请选择您需要的操作:\n");
scanf("%d",&n);
if(n==1){
printf("输入名字\n");
scanf("%s",name);
Delete_friend(friends,name,n);
break;
}
if(n==2){
Delete_friend(friends,name,n);
break;
}
case 0: break;
}
}while(choice!=0);
printf("谢谢使用通讯录功能!\n");
return 0;
}
void new_friend(struct friends_list friends[ ])
{
struct friends_list f;
if(Count==50){
printf("通讯录已满!\n");
return;
}
printf("请输入新的联系人的姓名:");
scanf("%s",f.name);
printf("请输入新联系人的年龄:");
scanf("%d",&f.age);
printf("请输入新联系人的联系电话:");
scanf("%s",f.telephone);
friends[Count] = f;
Count++;
}
/*查询联系人*/
void search_friend(struct friends_list friends[],char*name)
{
int i,flag=0;
if(Count==0){
printf("通讯录是空的!\n");
return;
}
/*在书本源代码的基础上,我修改了一下,让程序可以查询多个相同名字的联系人*/
for(i=0;i<Count;i++)
if(strcmp(name,friends[i].name)==0){
printf("姓名:%s\t",friends[i].name);
printf("年龄:%d\t",friends[i].age);
printf("电话:%s\n",friends[i].telephone);
flag++;
}
if(flag==0)
printf("无此联系人!\n");
}
/*修改联系人*/
void Modify_friend(struct friends_list friends[],char*name)
{
int k,y=0;
int t,j=1,g=0;
struct friends_list x;
if(Count==0){
printf("通讯录是空的!\n");
return;
}
/*首先,判断要修改的联系人中有没有相同的名字*/
for(k=0;k<Count;k++){
if(strcmp(name,friends[k].name)==0)
y++;
}
/*如果,y等于1,说明只有一个需要修改的联系人*/
if(y==1){
for(k=0;k<Count;k++){
if(strcmp(name,friends[k].name)==0){
printf("请重新输入姓名\n");
scanf("%s",x.name);
printf("请重新输入年龄\n");
scanf("%d",&x.age);
printf("请重新输入电话号码\n");
scanf("%s",x.telephone);
friends[k]=x;
}
}
}
/*如果,y大于1,说明你选择修改的人中,有多个相同名字的联系人*/
if(y>1){
/*用序号来显示所有需要修改的联系人*/
printf("此通讯录有%d个名字相同的联系人.\n",y);
for(k=0;k<Count;k++){
if(strcmp(name,friends[k].name)==0){
printf("%d:姓名:%-10s",j,friends[k].name);
printf("年龄:%-5d",friends[k].age);
printf("电话:%13s\n",friends[k].telephone);
j++;
}
}
/*选择需要修改的联系人的序号*/
printf("请选择所要修改的联系人序号:\n");
scanf("%d",&t);
for(k=0;k<Count;k++){
if(strcmp(name,friends[k].name)==0){
g++;
if(g==t){/*如果g等于t,说明在序号中找到了需要修改的人*/
printf("请重新输入姓名\n");
scanf("%s",x.name);
printf("请重新输入年龄\n");
scanf("%d",&x.age);
printf("请重新输入电话号码\n");
scanf("%s",x.telephone);
friends[k]=x;
}
}
}
}
if(y==0)
printf("无此联系人\n");
}
void Delete_friend(struct friends_list friends[],char*name,int n)
{
int l,h=0,y=0,i,k;
int j=1;
int a[50],t,g=0;
if(Count==0){
printf("通讯录是空的!\n");
return;
}
/*如果,n等于1,说明用户选择单个删除*/
if(n==1){
/*首先,判断在修改的人当中有没有相同名字的*/
for(i=0;i<Count;i++){
if(strcmp(name,friends[i].name)==0)
y++;
}
/*如果,y等于1,说明你需要修改的人当中只有一个*/
if(y==1){
for(l=0;l<Count;l++){
if(strcmp(name,friends[l].name)==0){
do{
friends[l]=friends[l+1];
l++;
}while(l<Count);
h++;
Count--;
printf("删除成功!\n");
}
}
}
/*如果,y>1 说明你要修改的人当中有多个相同的名字*/
if(y>1){
/*用序号来显示所有需要修改的联系人*/
printf("有%d个相同的联系人:\n",y);
for(l=0;l<Count;l++){
if(strcmp(name,friends[l].name)==0){
a[l]=l;
printf("%d:姓名:%-10s",j,friends[l].name);
printf("年龄:%-5d",friends[l].age);
printf("电话:%13s\n",friends[l].telephone);
j++;
h++;
}
}
/*选择需要修改的联系人序号*/
printf("请选择所要删除的联系人序号:\n");
scanf("%d",&t);
for(k=0;k<Count;k++)
if(strcmp(name,friends[k].name)==0){
g++;
if(g==t){/*如果 g等于选择的序号t,就开始删除*/
do{
friends[k]=friends[k+1];
k++;
}while(k<Count);}
if(g==t){/*这里又使用一个g等于t,表面上看是多余的.其实当在选择的序号
超出现有的序号时,起到限制作用*/
printf("删除成功!\n");
Count--;
}
}
}
if(h==0)
printf("没有此联系人\n");
}
/*如果n等于2,说明用户选择了全部删除*/
if(n==2){
Count=0;/*把Count赋0,也就是清空所有联系人*/
printf("已全部删除!\n");
}
}
...全文
87 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
面包大师 2011-12-31
  • 打赏
  • 举报
回复
//接上提示是否选择
printf("0:取消 1:选择\n");
scanf("%d",&choice);
switch(choice)
{
case 0:
friends[i]->bSelected = false;
break;
case 1:
friends[i]->bSelected = true;
break;
default:
break;
}
面包大师 2011-12-31
  • 打赏
  • 举报
回复
2.在查询的函数中search_friend(friends,name)添加显示是否被选择选项:
if (friends[i]->bSelected)
{
printf("是否被选择:是\n");
}
else
{
printf("是否被选择:否\n");
}
面包大师 2011-12-31
  • 打赏
  • 举报
回复
1.首先在结构体里边添加一个标示,标示是否被选择
struct friends_list{
char name[10];
int age;
char telephone[13];
bool bSelected;
};
zhusizhi007 2011-12-31
  • 打赏
  • 举报
回复
不是图形界面,这还有得混啊?

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧