#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**********结构体定义**************/
struct Message
{
char name[20];
char homephone[20];
char mobilephone[20];
char address[50];
char group[20];
char email[50];
}person,intialPerson;
void add();
void del();
void search();
void out();
void modify();
void begin();
/***************函数定义*******************/
void add()/************添加单个记录函数*****************/
{
FILE *fp;
char c;
printf("请输入需要保存的姓名:\n");
scanf("%s",person.name);
printf("请输入需要保存的住宅电话:\n");
scanf("%s",person.homephone);
printf("请输入需要保存的手机号码:\n");
scanf("%s",person.mobilephone);
printf("请输入需要保存的家庭地址活工作单位:\n");
scanf("%s",person.address);
printf("请给保存号码分组\\朋友\\家人\\同事\\同学:");
scanf("%s",person.group);
printf("请输入需要保存的E-MAIL:\n");
scanf("%s",person.email);
printf("确定请输入1,取消请按2:");//编译通过,但是运行的时候这里有问题
scanf("%c",&c);
switch(c)
{
case '1': break;
case '2': return;break;
default:
printf("输入错误!!!");
}
fp=fopen("tongxuelu.txt","a");
fwrite(&person,sizeof(Message),1,fp);
printf("添加成功!!!\n");
fclose(fp);
}
void del() //定义删除函数
{
FILE *fp;
char a[20];
int i;
fp=fopen("tongxuelu.txt","a");
char c;
printf("shuru xingming:");
scanf("%s",a);
do
{
fread(&person,sizeof(Message),1,fp);
if(strcmp(person.name,a)==0)
{
printf("确定请输入1,取消请按2:"); //删除的实质是用空的字符去覆盖掉原来的内容
scanf("%c",c);
switch(c) //那么如何直接删除,能直接删除吗?怎么删除?
{
case '1':
{
fseek(fp,0-sizeof(Message),SEEK_CUR);
person=intialPerson;
fwrite(&person,sizeof(Message),1,fp);
}break;
case '2': return;break;
default:
printf("输入错误!!!");
}
i++;
}
fseek(fp,sizeof(Message),SEEK_CUR);
}while(strcmp(person.name,a)!=0);
if(feof(fp))
{
printf("没有此人记录");
printf("press any key to continue....");
getchar();
}
fclose(fp);
}
void modify() /******对编辑函数定义********/
{
FILE *fp;char c; //他的实质是用新的内容覆盖掉原来的内容
char a[20];int i=0; //可以直接在磁盘文件里进行编辑操作吗?可以的话怎么做?
fp=fopen("tongxuelu.txt","a");
printf("请输入要待修改人的姓名: ");
scanf("%s",a);
fread(&person,sizeof(Message),1,fp);
while(strcmp(person.name,a)==0)
{
printf("姓名:%s\n手机号码:%s\n固定电话:%s\n家庭住址:%s\n组名:%s\nE-MAIL:%s\n",person.name,person.mobilephone,person.homephone,person.group,person.email);
fseek(fp,sizeof(Message),SEEK_CUR);
fread(&person,sizeof(Message),1,fp);
}
if(feof(fp))
{
printf("没有此人记录");
printf("press any key to continue....");
getchar();
}
else
{
printf("请重新输入要修改人的信息: \n");
printf("请输入需要保存的姓名:\n");
scanf("%s",person.name);
printf("请输入需要保存的住宅电话:\n");
scanf("%s",person.homephone);
printf("请输入需要保存的手机号码:\n");
scanf("%s",person.mobilephone);
printf("请输入需要保存的家庭地址活工作单位:\n");
scanf("%s",person.address);
printf("朋友?家人?同事?同学?:\n");
printf("请给保存号码分组:\n ");
scanf("%s",person.group);
printf("请输入需要保存的E-MAIL:\n");
scanf("%s",person.email);
printf("确定请输入1,取消请按2:");
scanf("%c",c);
switch(c)
{
case 1:break;
case 2: return;break;
default:
printf("输入错误!!!");
}
fwrite(&person,sizeof(Message),1,fp);
printf("修改成功!!!\n");
printf("继续进行其他操作请输入1,取消请按2:");
scanf("%c",c);
switch(c)
{
case 1: return;break;
case 2: exit(1);break;
default:
printf("输入错误!!!");
}
}
fclose(fp);
}
void print() /****对查看函数定义*****/
{
FILE *fp;char c;
fp=fopen("tongxuelu.txt","a");
printf("the all records are:\n");
if(!feof(fp))
{
fread(&person,sizeof(Message),1,fp);
printf("姓名:%s\n手机号码:%s\n固定电话:%s\n家庭住址:%s\n组名:%s\nE-MAIL:%s\n",person.name,person.mobilephone,person.homephone,person.group,person.email);
fseek(fp,sizeof(Message),SEEK_CUR);
}
begin();
fclose(fp);
}
void search() /*****对查找函数定义*********/
{
int i;char a[20];
FILE *fp;
fp=fopen("tongxuelu.txt","a");
fread(&person,sizeof(Message),1,fp);
printf("please input the number that you are searching:\n");
scanf("%s",a);
while(strcmp(person.name,a)==0);
{
fseek(fp,sizeof(Message),SEEK_CUR);
fread(&person,sizeof(Message),1,fp);
}
if(feof(fp))
{
printf("没有此人记录");
printf("press any key to continue....");
getchar();
}
begin();
fclose(fp);
}
void out() /**********定义退出函数**********/
{
printf("谢谢使用!!!");
exit(1);
}
void begin() //开始的菜单函数
{
int a;
printf("1: 添加\n2: 查看\n3: 编辑 \n4: 删除\n5: 退出\n");
printf("请输入您想进行的操作号:");
scanf("%d",&a);
switch(a)
{
case 1: add();break;
case 2: search();break;
case 3: modify();break;
case 4: del();break;
case 5: out();break;
default:
printf("输入错误!!!\n");break;
}
}
void main() //主函数
{
begin();
printf("谢谢使用!!!\n");
exit(1);
}
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
出什么错误了,也不说!
看你们问问题。。。累!
----------------解决方案--------------------------------------------------------
眼花了
----------------解决方案--------------------------------------------------------
问题出在c这个类型上
把c设成int型就可以了:
int c;
scanf("%d",&c);
switch(c)
{
case 1: break;
case 2: return;
default: printf("输入错误!!!");
}
问题解决
----------------解决方案--------------------------------------------------------
最后在main函数那里加上一句goto或者用while语句会更好一点,方便操作
----------------解决方案--------------------------------------------------------
GOTO还是少用点
----------------解决方案--------------------------------------------------------