#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
char id[10];
char name[10];
char sex[2];
char tel[12];
} stu[50];
int length=0;
FILE *fp;
void save()//將結構體資料匯出到檔案
{
//把結構體中的所有資訊都保存到檔案中
fp=fopen("C:\\Users\\12154\\Desktop\\1.txt","w");
int i;
for(i=0;i<=length;i++)
{
fwrite(&stu[length],sizeof(struct student),1,fp);
}
fclose(fp);
}
void add()
{
printf("請輸入你要添加人的學號\n",length);
scanf("%s",stu[length].id);
printf("請輸入你要添加人的姓名\n",length);
scanf("%s",stu[length].name);
printf("請輸入你要添加人的性別,輸入1代表女,輸入2代表男\n",length);
scanf("%s",stu[length].sex);
printf("請輸入你要添加人的電話\n",length);
scanf("%s",stu[length].tel);
printf("保存該資訊請按1,不保存請按2\n");
int i=0;
for(;i<length;i++)
{
if(strcmp(stu[length].id,stu[i].id)==0)
{
printf("你要添加的已存在\n");
system("pause");
break;
}
}
int c;
scanf("%d",&c);
if(c==1)
{
save();
length++;
}
}
void del() //輸入一個學號,洗掉這條資訊
{
char s[10];
printf("請輸入你要洗掉的學號\n");
scanf("%s",s);
int i;
for(i=0;i<length;i++)
{
if(strcmp(s,stu[i].id)==0)
{
printf("你要洗掉的記錄資訊:學號%s,姓名%s,性別%s,手機%s",i+1,stu[i].id,stu[i].name,stu[i].sex,stu[i].tel);
break;
}
}
if(i==length)printf("你要洗掉的學號不存在\n");
int j;
for(j=i;j<=length;) ;
}
void update()//s輸入一個學號,更新他的資訊
{
int i,j;
char s[10];
printf("請輸入查詢學號:\n");
scanf("%s",s);
for(j=0;j<length;j++)
if(strcmp(s,stu[j].id)==0)
{
printf("學號:%s 姓名:%s 性別:%s 電話:%s\n,stu[j].id,stu[j].name,stu[j].sex,stu[j].tel");
printf("請輸入此學號的修改姓名\n"); scanf("%s",stu[j].name);
printf("請輸入此學號的修改性別\n"); scanf("%s",stu[j].sex);
printf("請輸入此學號的修改電話\n"); scanf("%s",stu[j].tel);
printf("保存修改請按1,不保存請按2\n");
int c;
scanf("%d",&c);
if(c==1)
{
save();
printf("修改成功");
}
break;
}
if(j==length)printf("查無此人");
system("pause");
}
void search()//輸入一個學號,顯示他的資訊
{
char s[10];
printf("1.按學號精確查找;2.按姓名模糊查找");
int i,j,c;
printf("請輸入你的選擇\n");
scanf("%d",&c);
if(c==1)
{
printf("請輸入查詢學號:\n");
scanf("%s",&s);
for(j=0;j<length;j++)
if(strcmp(s,stu[j].id)==0)printf ("學號:%s 姓名:%s 性別:%s 電話:%s\n",stu[j].id,stu[j].name,stu[j].sex,stu[j].tel);
}
if(c==2)
{
printf("請輸入姓名;\n");
scanf("%s",&s);
for(j=0;j<length;j++)
{
if(strstr(stu[j].name,s))printf ("學號:%s 姓名:%s 性別:%s 電話:%s\n",stu[j].id,stu[j].name,stu[j].sex,stu[j].tel);
}
}
void show()//顯示目前所有資訊
{
int i;
for(i=0;i<=length;i++)
{
printf("第%d個同學:學號%s,姓名%s,性別%s,手機%s",i+1,stu[i].id,stu[i].name,stu[i].sex,stu[i].tel);
}
system("pause");//系統暫停
}
void init()//將資訊從檔案匯入到結構體陣列
{
length=0;
fp=fopen("C:\\Users\\12154\\Desktop\\1.txt","r");//讀取桌面1.txt
//回圈讀取
int i=0;
while(fread(&stu[i],sizeof(struct student),1,fp)==1)
{
i++;
}
fclose(fp);
length=i;
printf("目前有%d條記錄,",length);
}
void cover()//選單界面
{
printf("\n");
printf("***************");
printf("歡迎使用通訊錄系統");
printf("***************");
printf("\n");
printf("* 1:添加資訊 *\n");
printf("** 2:洗掉資訊 **\n");
printf("*** 3:修改資訊 ***\n");
printf("**** 4:查詢資訊 ****\n");
printf("***** 5:顯示所有資訊 *****\n");
printf("****** 6:保存資訊 ******\n");
printf("******* 0:退出 *******\n");
}
void excel()
{
int i;
fp=fopen("C:\\Users\\86150\\Desktop","w");
for (i=0;i<length;i++)
{
fprintf(fp,"%s,%s,%s,%s\n",stu[i].id,stu[i].name,stu[i].sex,stu[i].tel);
}
fclose(fp);
system("pause");
}
int main()
{
int i;//i是功能編號
cover();//顯示界面
init(); //目前的資訊數,檔案資訊轉到結構體陣列
printf("請輸入你的選擇編號\n");
scanf("%d",&i);
switch(i)
{
case 1:add();break;
case 2:del();break;
case 3:update();break;
case 4:search();break;
case 5:show();break;
case 6:save();break;
case 0:exit(0);break;
default:printf("你的輸入有誤,請重新輸入\n");
}
}

uj5u.com熱心網友回復:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
char id[10];
char name[10];
char sex[2];
char tel[12];
} stu[50];
//int length=0;
int length; //不用初始化,全域變數默認是初始化0
FILE *fp;
void save()//將結構體資料匯出到檔案
{
//把結構體中的所有資訊都保存到檔案中
fp=fopen("C:\\Users\\12154\\Desktop\\1.txt","w");
int i;
for(i=0;i<=length;i++)
{
fwrite(&stu[length],sizeof(struct student),1,fp);
}
fclose(fp);
}
void add()
{
//printf("請輸入你要添加人的學號\n",length); //length對應的標識呢?%d前面缺少吧
printf("請輸入你要添加人的學號No.%d\n",length);
scanf("%s",stu[length].id);
//printf("請輸入你要添加人的姓名\n",length);
printf("請輸入你要添加人的姓名\n");
scanf("%s",stu[length].name);
//printf("請輸入你要添加人的性別,輸入1代表女,輸入2代表男\n",length);
printf("請輸入你要添加人的性別,輸入1代表女,輸入2代表男\n");
scanf("%s",stu[length].sex);
//printf("請輸入你要添加人的電話\n",length);
printf("請輸入你要添加人的電話\n");
scanf("%s",stu[length].tel);
printf("保存該資訊請按1,不保存請按2\n");
int i=0;
for(;i<length;i++)
{
if(strcmp(stu[length].id,stu[i].id)==0)
{
printf("你要添加的已存在\n");
system("pause");
break;
}
}
int c;
scanf("%d",&c);
if(c==1)
{
save();
length++;
}
}
void del() //輸入一個學號,洗掉這條資訊
{
char s[10];
printf("請輸入你要洗掉的學號\n");
scanf("%s",s);
int i;
for(i=0;i<length;i++)
{
if(strcmp(s,stu[i].id)==0)
{
//printf("你要洗掉的記錄資訊:學號%s,姓名%s,性別%s,手機%s",i+1,stu[i].id,stu[i].name,stu[i].sex,stu[i].tel);
printf("你要洗掉的記錄資訊:學號%s,姓名%s,性別%s,手機%s", stu[i].id,stu[i].name,stu[i].sex,stu[i].tel);
break;
}
}
if(i==length)printf("你要洗掉的學號不存在\n");
int j;
for(j=i;j<=length;) ;
}
void update()//s輸入一個學號,更新他的資訊
{
int i,j;
char s[10];
printf("請輸入查詢學號:\n");
scanf("%s",s);
for(j=0;j<length;j++)
if(strcmp(s,stu[j].id)==0)
{
//printf("學號:%s 姓名:%s 性別:%s 電話:%s\n,stu[j].id,stu[j].name,stu[j].sex,stu[j].tel");
printf("學號:%s 姓名:%s 性別:%s 電話:%s\n",stu[j].id,stu[j].name,stu[j].sex,stu[j].tel);
printf("請輸入此學號的修改姓名\n"); scanf("%s",stu[j].name);
printf("請輸入此學號的修改性別\n"); scanf("%s",stu[j].sex);
printf("請輸入此學號的修改電話\n"); scanf("%s",stu[j].tel);
printf("保存修改請按1,不保存請按2\n");
int c;
scanf("%d",&c);
if(c==1)
{
save();
printf("修改成功");
}
break;
}
if(j==length)printf("查無此人");
system("pause");
}
void search()//輸入一個學號,顯示他的資訊
{
char s[10];
printf("1.按學號精確查找;2.按姓名模糊查找");
int i,j,c;
printf("請輸入你的選擇\n");
scanf("%d",&c);
if(c==1)
{
printf("請輸入查詢學號:\n");
//scanf("%s",&s);
scanf("%s",s);
for(j=0;j<length;j++)
if(strcmp(s,stu[j].id)==0)printf ("學號:%s 姓名:%s 性別:%s 電話:%s\n",stu[j].id,stu[j].name,stu[j].sex,stu[j].tel);
}
if(c==2)
{
printf("請輸入姓名;\n");
//scanf("%s",&s);
scanf("%s", s);
for(j=0;j<length;j++)
{
if(strstr(stu[j].name,s))printf ("學號:%s 姓名:%s 性別:%s 電話:%s\n",stu[j].id,stu[j].name,stu[j].sex,stu[j].tel);
}
}
}
void show()//顯示目前所有資訊
{
int i;
for(i=0;i<=length;i++)
{
printf("第%d個同學:學號%s,姓名%s,性別%s,手機%s",i+1,stu[i].id,stu[i].name,stu[i].sex,stu[i].tel);
}
system("pause");//系統暫停
}
void init()//將資訊從檔案匯入到結構體陣列
{
length=0;
fp=fopen("C:\\Users\\12154\\Desktop\\1.txt","r");//讀取桌面1.txt
//回圈讀取
int i=0;
while(fread(&stu[i],sizeof(struct student),1,fp)==1)
{
i++;
}
fclose(fp);
length=i;
printf("目前有%d條記錄,",length);
}
void cover()//選單界面
{
printf("\n");
printf("***************");
printf("歡迎使用通訊錄系統");
printf("***************");
printf("\n");
printf("* 1:添加資訊 *\n");
printf("** 2:洗掉資訊 **\n");
printf("*** 3:修改資訊 ***\n");
printf("**** 4:查詢資訊 ****\n");
printf("***** 5:顯示所有資訊 *****\n");
printf("****** 6:保存資訊 ******\n");
printf("******* 0:退出 *******\n");
}
void excel()
{
int i;
fp=fopen("C:\\Users\\86150\\Desktop","w");
for (i=0;i<length;i++)
{
fprintf(fp,"%s,%s,%s,%s\n",stu[i].id,stu[i].name,stu[i].sex,stu[i].tel);
}
fclose(fp);
system("pause");
}
int main()
{
int i;//i是功能編號
cover();//顯示界面
init(); //目前的資訊數,檔案資訊轉到結構體陣列
printf("請輸入你的選擇編號\n");
scanf("%d",&i);
switch(i)
{
case 1:add();break;
case 2:del();break;
case 3:update();break;
case 4:search();break;
case 5:show();break;
case 6:save();break;
case 0:exit(0);break;
default:printf("你的輸入有誤,請重新輸入\n");
}
}
供參考~
代碼問題不止一個(都是語法問題),建議對比代碼找出自己的問題~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/100361.html
標籤:C語言
