C编写通讯录中存在的种种问题,困扰我很久了,求各位同仁帮忙!!!!!(对不起大家我没分了,帮帮新人吧,感激)
#include<stdio.h>#include<cstdlib> /*主要存在的问题:存储,读取结束的问题,删除,排序无法实现*/
#include<string.h>
#define SIZE 10
#define L sizeof(struct student)
void save();
void read();
void seek();
void del();
void order();
struct student
{
char sex[4];
int num;
char name[10];
char phone[11];
}stu[SIZE];
int i,temp;
FILE*fp;
void main()
{
int n,j=1,l=2;
while(1)
{
menu:
printf("菜单:(请输入编号)\n1.存入数据\n2.读取数据\n3.查找数据\n4.插入数据\n5.删除数据\n您的选项:");
scanf("%d",&n);
switch (n)
{
case 1:save();break;
case 2:read();break;
case 3:seek();break;
case 4:save();break;
case 5:del();break;
default:printf("错误!请重新输入\n");goto menu;
}
}
}
void save() /*存储函数*/
{
system("CLS");
printf("请输入数据:\n");
printf("性别 学号 姓名 电话\n");
for(i=0;i<SIZE;i++)
{
scanf("%s %d %s %s",stu[i].sex,&stu[i].num,stu[i].name,stu[i].phone);
if(strcmp(stu[i].sex,"end")==0)break; /*希望以此结束输入,但是无法实现 */
}
if((fp=fopen("file1.txt","a"))==NULL)
fp=fopen("file1.txt","w");
for(i=0; i<SIZE;i++)
fwrite(&stu[i],L,1,fp);
fclose(fp);
system ("pause");
}
void read() /*读取函数*/
{
system("CLS");
fp=fopen("file1.txt","r");
printf("性别 学号 姓名 电话\n");
for(i=0;i<SIZE;i++)
{
fread(&stu[i],L,1,fp);
if(strcmp(stu[i].sex,"end")==0)break; /*但是同样的结束方式在此函数中却可以实现*/
}
order();
for(i=0;i<SIZE;i++)
printf("%s %d %s %s\n",stu[i].sex,stu[i].num,
stu[i].name,stu[i].phone);
fclose(fp);
system ("pause");
}
void seek() /*查询函数,无问题*/
{
system("CLS");
int a;
if((fp=fopen("file1.txt","r"))==NULL)
{
printf("can't open file\n");
return;
}
printf("请输入所查找学生的4位学号:\n");
scanf("%d",&a);
for(i=0;i<SIZE;i++)
{
fread(&stu[i],L,1,fp);
if (stu[i].num==a)
{
printf("%s %d %s %s\n",stu[i].sex,stu[i].num,
stu[i].name,stu[i].phone);
break;
}
else {printf("无此数据\n");break;}
}
fclose(fp);
system ("pause");
}
void del() /*删除函数*/
{
system("CLS");
int a;
if((fp=fopen("file1.txt","a+"))==NULL)
{
printf("can't open file\n");
return;
}
printf("请输入所删除学生的4位学号:\n");
scanf("%d",&a);
for(i=0;i<SIZE;i++)
{
fread(&stu[i],L,1,fp);
if(stu[i].num==a) /*无法实现*/
{
for(;i<SIZE;i++)
stu[i]=stu[i+1];
break;
}
}
for(i=0;i<SIZE;i++)
fwrite(&stu,L,1,fp);
system ("pause");
}
void order() /*排序同样无法实现*/
{
int j;
struct student a[SIZE],temp2;
for(i=0;i<SIZE;i++)
a[i]=stu[i]; /*结构体是否能整体赋值?*/
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE-1;j++)
{
if(stu[i].num>stu[i+1].num)
{temp2=stu[i];stu[i]=stu[i+1],stu[i+1]=temp2;}
}
for(i=0;i<SIZE;i++)
stu[i]=a[i];
}