求一C语言编写的程序要求如下: 1.电话簿管理系统(用到结构体和指针) 2.结构体内包括姓名和电话

求一C语言编写的程序要求如下:1.电话簿管理系统(用到结构体和指针)2.结构体内包括姓名和电话号码3.系统包括输入、查询、删除等功能4.通过姓名和电话号码都可以查询可以加... 求一C语言编写的程序要求如下:
1.电话簿管理系统(用到结构体和指针)
2.结构体内包括姓名和电话号码
3.系统包括输入、查询、删除等功能
4.通过姓名和电话号码都可以查询
可以加其他功能
求大神帮忙解决,妹子求!不要和网上面一样的!!!
展开
 我来答
匿名用户
推荐于2016-07-14
展开全部

请根据需要进行适当修改

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <conio.h> 
struct record
{
char id[10];
char name[20];
char phone[20];
}Contacts[500];
int num = 0;//外部变量num为文件中的纪录数 
FILE *fp;
void mainmenu();//主菜单 
void newrecord();//新添纪录 
void searchmenu();//查询菜单 
void searchbyid();//按编号查询 
void searchbyname();//按姓名查询 
void searchbyphone();//按电话查询 
void deletemenu();//删除菜单 
void deleteall();//删除所有 
void deleteone();//删除单个 
void showall();//显示所有 
void readfromfile();//读取文件 
void writetofile();//写入文件 
void deletebyid();//按编号删除 
void deletebyname();//按姓名删除 
void listbyid();//按编号排序 
void listbyname();//按姓名排序 
void listmenu();//排序菜单 
void main()
{
readfromfile();
while (1)
{
mainmenu();
}
}
void readfromfile()//从文件导入 
{
if ((fp = fopen(".\\Contacts.dat", "rb")) == NULL)
{
printf("\n\t\t通讯录文件不存在");
if ((fp = fopen(".\\Contacts.dat", "wb")) == NULL)
{
printf("\n\t\t建立失败");
exit(0);
}
else
{
printf("\n\t\t通讯录文件已建立");
printf("\n\t\t按任意键进入主菜单");
getch();
return;
}
exit(0);
}
fseek(fp, 0, 2); /*文件位置指针移动到文件末尾*/
if (ftell(fp) > 0) /*文件不为空*/
{
rewind(fp); /*文件位置指针移动到文件开始位置*/
for (num = 0; !feof(fp) && fread(&Contacts[num], sizeof(struct record), 1, fp); num++);
printf("\n\t\t文件导入成功");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
printf("\n\t\t文件导入成功");
printf("\n\t\t通讯录文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
void mainmenu()//主菜单 
{
char choic;
system("cls");
printf("\n\t\t******************** 主菜单 ********************");
printf("\n\t\t*********** 1-新添纪录 2-查询菜单 ************");
printf("\n\t\t*********** 3-删除菜单 4-记录排序 ************");
printf("\n\t\t*********** 5-保存退出 6-不保存退出***********");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:");
choic = getch();
switch (choic)
{
case '1':newrecord(); break;
case '2':searchmenu(); break;
case '3':deletemenu(); break;
case '4':listmenu(); break;
case '5':writetofile(); break;
case '6':exit(0);
default:mainmenu();
}
}
void searchmenu()//查询菜单 
{
char choic;
system("cls");
printf("\n\t\t******************* 查询菜单 *******************");
printf("\n\t\t********** 1-显示所有 2-按编号查询 ************");
printf("\n\t\t********** 3-按姓名查询4-按电话查询 ************");
printf("\n\t\t********** 5-返回主菜单 ************");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:");
choic = getch();
switch (choic)
{
case '1':showall(); break;
case '2':searchbyid(); break;
case '3':searchbyname(); break;
case '4':searchbyphone(); break;
case '5':mainmenu(); break;
}
}
void deletemenu()//删除菜单 
{
char choic;
if (num == 0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
system("cls");
printf("\n\t\t******************* 删除菜单 *******************");
printf("\n\t\t*********** 1-删除所有 2-删除单个 ***********");
printf("\n\t\t*********** 3-返回主菜单 ***********");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:");
choic = getch();
switch (choic)
{
case '1':deleteall(); break;
case '2':deleteone(); break;
case '3':mainmenu(); break;
default:mainmenu(); break;
}
}
void deleteall()//删除所有 
{
printf("\n\t\t确认删除?(y/n)");
if (getch() == 'y')
{
fclose(fp);
if ((fp = fopen("Contacts.bin", "wb")) == NULL)
{
printf("\n\t\t不能打开文件,删除失败");
readfromfile();
}
num = 0;
printf("\n\t\t纪录已删除,按任意键返回主菜单");
getch();
return;
}
else
return;
}
void deletebyname()//按姓名删除 
{
int a = 0;
int findmark = 0;
int j;
int deletemark = 0;
int i;
char name[20];
printf("\n\t\t请输入要删除联系人的姓名:");
scanf("%s", name);
for (i = a; i < num; i++)
{
if (strcmp(Contacts[i].name, name) == NULL)
{
printf("\n\t\t以下是您要删除的联系人纪录:");
findmark++;
printf("\n\t\t________________________________");
printf("\n\t\t编号: %s", Contacts[i].id);
printf("\n\t\t姓名: %s", Contacts[i].name);
printf("\n\t\t电话: %s", Contacts[i].phone);
printf("\n\t\t________________________________");
printf("\n\t\t是否删除?(y/n)");
if (getch() == 'y')
{
for (j = i; j < num - 1; j++) /*纪录移动,从Contacts数组中删除之*/
Contacts[j] = Contacts[j + 1];
num--;
deletemark++;
printf("\n\t\t删除成功");
if ((i + 1) < num)
{
printf("\n\t\t是否继续删除相同姓名的联系人信息?(y/n)");
if (getch() == 'y')
{
a = i;
continue;
}
}
printf("\n\t\t是否继续删除?(y/n)");
if (getch() == 'y')
deletebyname();
return;
}
if ((i + 1) < num)
{
printf("\n\t\t是否继续删除相同姓名的联系人信息?(y/n)");
if (getch() == 'y')
{
a = i;
continue;
}
}
}
else
continue;
}
if ((deletemark == 0) && (findmark == 0))
{
printf("\n\t\t没有该联系人的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch() == 'y')
deletebyid();
return;
return;
}
else if (findmark != 0)
{
printf("\n\t\t没有重名信息");
printf("\n\t\t没有该联系人的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch() == 'y')
deletebyid();
return;
return;
}
}
void deletebyid()//按编号删除 
{
int i, j;
int deletemark = 0;
char id[20];
printf("\n\t\t请输入要删除联系人编号:");
scanf("%s", id);
if (num == 0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
for (i = 0; i < num; i++)
{
if (strcmp(Contacts[i].id, id) == NULL)
{
printf("\n\t\t以下是您要删除的联系人纪录:");
printf("\n\t\t编号: %s", Contacts[i].id);
printf("\n\t\t姓名: %s", Contacts[i].name);
printf("\n\t\t电话: %s", Contacts[i].phone);
printf("\n\t\t是否删除?(y/n)");
if (getch() == 'y')
{
for (j = i; j < num - 1; j++) /*纪录移动,从Contacts数组中删除之*/
Contacts[j] = Contacts[j + 1];
num--;
deletemark++;
printf("\n\t\t删除成功");
printf("\n\t\t是否继续删除?(y/n)");
if (getch() == 'y')
deletebyid();
return;
}
else
return;
}
continue;

}
if (deletemark == 0)
{
printf("\n\t\t没有该联系人的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch() == 'y')
deletebyid();
return;
}
}
void newrecord()//添加纪录 
{
printf("\n\t\t**************** 请输入联系人信息 ****************\n");
printf("\n\t\t输入编号:");
scanf("%s", &Contacts[num].id);
printf("\n\t\t输入姓名:");
scanf("%s", &Contacts[num].name);
printf("\n\t\t输入电话号码:");
scanf("%s", &Contacts[num].phone);
num++;
printf("\n\t\t是否继续添加?(Y/N):");
if (getch() == 'y')
newrecord();
return;
}
void showall()//显示所有 
{
int i;
system("cls");
if (num != 0)
{
printf("\n\t\t*************** 以下为通讯录所有信息************");
for (i = 0; i < num; i++)
{
printf("\n\t\t编号: %s", Contacts[i].id);
printf("\n\t\t姓名: %s", Contacts[i].name);
printf("\n\t\t电话: %s", Contacts[i].phone);
printf("\t\t");
if (i + 1 < num)
{
printf("\n\t\t__________________________");
system("pause");
}
}
printf("\n\t\t************************************************");
}
else
printf("\n\t\t通讯录中无任何纪录");
printf("\n\t\t按任意键返回主菜单:");
getch();
return;
}

//按电话查询 
void searchbyphone()
{
int mark = 0;
int i;
int a = 0;
printf("\n\t\t****************** 按电话查找 ******************");
char phone[10];
printf("\n\t\t请输入编号:");
scanf("%s", phone);
for (i = 0; i < num; i++)
{
if (strcmp(Contacts[i].phone, phone) == 0)
{
printf("\n\t\t************** 以下是您查找的联系人信息 **********");
printf("\n\t\t编号: %s", Contacts[i].id);
printf("\n\t\t姓名: %s", Contacts[i].name);
printf("\n\t\t电话: %s", Contacts[i].phone);
printf("\n\t\t************************************************");
printf("\n\t\t按任意键返回主菜单:");
mark++;
getch();
return;
}
}
if (mark == 0)
{
printf("\n\t\t没有改联系人的信息");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
void searchbyname()//按姓名查询 
{
int mark = 0;
int i;
int a = 0;
printf("\n\t\t***************** 按姓名查找 *******************");
char name[20];
printf("\n\t\t请输入姓名:");
scanf("%s", name);
for (i = a; i < num; i++)
{
if (strcmp(Contacts[i].name, name) == 0)
{
printf("\n\t\t************* 以下是您查找的联系人信息 ***********");
printf("\n\t\t编号: %s", Contacts[i].id);
printf("\n\t\t姓名: %s", Contacts[i].name);
printf("\n\t\t电话: %s", Contacts[i].phone);
printf("\n\t\t************************************************");
mark++;
if ((i + 1) < num)
{
printf("\n\t\t是否继续查找相同名字的联系人信息:(y/n)");
if (getch() == 'y')
{
a = i;
continue;
}
else
return;
}
else
{
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
}
if (mark != 0)
{
printf("\n\t\t没有相同姓名的联系人纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
else
{
printf("\n\t\t没有相同姓名的联系人纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
void searchbyid()//按编号查询 
{
int mark = 0;
int i;
int a = 0;
printf("\n\t\t****************** 按编号查找 ******************\n");
char id[10];
printf("\n\t\t请输入编号:");
scanf("%s", id);
for (i = 0; i < num; i++)
{
if (strcmp(Contacts[i].id, id) == 0)
{
printf("\n\t\t************** 以下是您查找的联系人信息 **********");
printf("\n\t\t编号: %s", Contacts[i].id);
printf("\n\t\t姓名: %s", Contacts[i].name);
printf("\n\t\t电话: %s", Contacts[i].phone);
printf("\n\t\t************************************************");
printf("\n\t\t按任意键返回主菜单:");
mark++;
getch();
return;
}

}
if (mark == 0)
{
printf("\n\t\t没有改联系人的信息");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
void writetofile()//写入文件 
{
int i;
if ((fp = fopen(".\\Contacts.dat", "wb")) == NULL)
{
printf("\n\t\t文件打开失败");
}
for (i = 0; i < num; i++)
{
if (fwrite(&Contacts[i], sizeof(struct record), 1, fp) != 1)
{
printf("\n\t\t写入文件错误!\n");
}
}
fclose(fp);
printf("\n\t\t通讯录文件已保存");
printf("\n\t\t按任意键退出程序\n\t\t");
exit(0);

}
void deleteone()//删除单个 
{
char choic;
printf("\n\t\t1-按编号删除 2-按姓名删除");
printf("\n\t\t请选择:");
choic = getch();
switch (choic)
{
case '1':deletebyid(); break;
case '2':deletebyname(); break;
}
}
void listbyname()//按姓名排序 
{
int i, j;
struct record tmp;
for (i = 1; i < num; i++)
{
if (strcmp(Contacts[i].name, Contacts[i - 1].name) < 0)
{
tmp = Contacts[i];
j = i - 1;
do
{
Contacts[j + 1] = Contacts[j];
j--;
} while ((strcmp(tmp.name, Contacts[j].name) < 0 && j >= 0));
Contacts[j + 1] = tmp;
}
}
printf("\n\t\t排序成功,是否显示?(y/n)");
if (getch() == 'y')
showall();
return;
}
void listbyid()//按编号排序 
{
int i, j;
struct record tmp;
for (i = 1; i < num; i++)
{
if (strcmp(Contacts[i].id, Contacts[i - 1].id) < 0)
{
tmp = Contacts[i];
j = i - 1;
do
{
Contacts[j + 1] = Contacts[j];
j--;
} while ((strcmp(tmp.id, Contacts[j].id) < 0) && j >= 0);
Contacts[j + 1] = tmp;
}
}
printf("\n\t\t排序成功,是否显示?(y/n)");
if (getch() == 'y')
showall();
return;
}
void listmenu()//排序菜单 
{
char choic;
if (num == 0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
system("cls");
printf("\n\t\t******************* 排序菜单 *******************");
printf("\n\t\t********** 1-按编号排序 2-按姓名排序 **********");
printf("\n\t\t********** 3-返回主菜单 **********");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:");
choic = getch();
switch (choic)
{
case '1':listbyid(); break;
case '2':listbyname(); break;
case '3':mainmenu(); break;
default:mainmenu(); break;
}
}
小飞na0
2014-07-26 · TA获得超过320个赞
知道答主
回答量:171
采纳率:33%
帮助的人:116万
展开全部
有偿制作,有意联系
满意请采纳。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
劲兜男
2014-07-26
知道答主
回答量:4
采纳率:0%
帮助的人:5236
展开全部
不知道你的c语言基础怎样,我做过成绩管理系统,跟你的要求差不多,不过你需要修改的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式