一个电话薄的程序,怎么能够达到程序这个效果,删除修改没法实现
task.zip
(45.7 KB)
我的代码是
#include <stdio.h>
#include <stdlib.h>//标准库头文件
#include <string.h> //字符数组函数定义文件
#include <conio.h> //控制台输入输出
struct record
{
char id[10];
char name[20];
char tel[20];
char adress[40];
char postcode[10];
char qq[30];
}
lianxiren[500];
int num=0;//库中总记录数
FILE *fp;
void mainmenu();
void newrecord();
void searchmenu();
void searchbyid();
void showall();
void readfromfile();
void writetofile();
void removelxr();
void main()
{
readfromfile();
while (1)
{
mainmenu();
}
}
void readfromfile()
{
if((fp=fopen("data.txt","rb"))==0)
{
printf("\n通讯录不存在");
if ((fp=fopen("data.txt","wb"))==0)
{
printf("\n建立失败");
exit(0);
}
else
{
printf("\n通讯录已建立");
printf("\n按任意键进入主菜单");
getch();
return;
}
exit(0);
}
fseek(fp,0,2);
if (ftell(fp)>0) /*非空白*/
{
rewind(fp);
for (num=0;!feof(fp) && fread(&lianxiren[num],sizeof(struct record),1,fp);num++);
printf("\n文件导入成功");
printf("\n按任意键返回主菜单");
getch();
return;
}
printf("\n文件导入成功");
printf("\n通讯录文件中无任何纪录");
printf("\n按任意键返回主菜单");
getch();
return;
}
void mainmenu()
{
char choic;
system("cls");
printf("主菜单\n\n");
printf("新添联系人 [1]\n");
printf("查询已有联系人 [2]\n");
printf("删除联系人 [3]\n");
printf("保存并退出 [4]\n");
printf("不保存并退出 [5]\n");
printf("*******************\n");
printf("请选择:");
choic=getch();
switch (choic)
{
case '1':newrecord();break;
case '2':searchmenu();break;
case '3':removelxr();break;
case '4':writetofile();break;
case '5':exit(0);
default:mainmenu();
}
}
void searchmenu()//查询菜单
{
char choic;
system("cls");
printf("查询菜单\n\n");
printf("显示所有 [1]\n");
printf("按编号查询 [2]\n");
printf("回到主菜单 [3]\n");
printf("***************\n");
printf("请选择:");
choic=getch();
switch (choic)
{
case '1':showall();break;
case '2':searchbyid();break;
case '3':mainmenu();break;
}
}
void newrecord()//添加纪录
{
printf("请输入联系人信息\n\n");
printf("指定编号:");
scanf("%s",&lianxiren[num].id);
printf("输入姓名:");
scanf("%s",&lianxiren[num].name);
printf("输入电话号码:");
scanf("%s",&lianxiren[num].tel);
printf("输入地址:");
scanf("%s",&lianxiren[num].adress);
printf("输入邮编:");
scanf("%s",&lianxiren[num].postcode);
printf("输入QQ:");
scanf("%s",&lianxiren[num].qq);
num++;
printf("是否继续添加?(Y/N):");
if (getch()=='y')
newrecord();
return;
}
void showall()//显示所有
{
int i;
system("cls");
if(num!=0)
{
printf("以下为通讯录所有信息\n\n");
for (i=0;i<num;i++)
{
printf("编号: %s",lianxiren[i].id);
printf("\n姓名: %s",lianxiren[i].name);
printf("\n电话: %s",lianxiren[i].tel);
printf("\n地址: %s",lianxiren[i].adress);
printf("\n邮编: %s",lianxiren[i].postcode);
printf("\nQQ:%s",lianxiren[i].qq);
if (i+1<num)
{
printf("****************");
system("pause");
}
}
printf("*******************");
}
else
printf("通讯录中无任何纪录");
printf("按任意键返回主菜单:");
getch();
return;
}
void searchbyid()
{
int i;
char id[10];
printf("按编号查找\n\n");
printf("请输入编号:");
scanf("%s",&id);
for(i=0;i<num;i++)
{
if (strcmp(lianxiren[i].id,id)==0)
{
printf("以下是您查找的联系人信息");
printf("编号: %s",lianxiren[i].id);
printf("\n姓名: %s",lianxiren[i].name);
printf("\n电话: %s",lianxiren[i].tel);
printf("\n地址: %s",lianxiren[i].adress);
printf("\nQQ号码:%s",lianxiren[i].qq);
printf("\n任意键返回主菜单:");
getch();
return;
}
}
}
void removelxr()
{
int i;
char id[10];
printf("输入要删除的联系人编号");
scanf("%s",&id);
for(i=0;i<num;i++)
{
if (remove(lianxiren[i].id,id)==0)
{
printf("删除联系人成功");
}else
printf("删除失败");
printf("按任意键返回主菜单:");
getch();
return;
}
}
void writetofile()
{
int i;
if ((fp=fopen("data.txt","wb"))==0)
{
printf("\n文件未能打开");
}
for (i=0;i<num;i++)
{
if (fwrite(&lianxiren[i],sizeof(struct record),1,fp)!=1)
{
printf("\n写入文件错误!\n");
}
}
fclose(fp);
printf("\n通讯录已保存");
printf("\n任意键退出程序\n");
exit(0);
}