64,643
社区成员
发帖
与我相关
我的任务
分享
#define N 30
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct student
{char name[20]; char phone[50]; char stunum[15]; char dorm[20];}stu[N];
void printf_face()
{ printf("\n\t姓名\t电话号码\t学号\t宿舍号\n"); }
void printf_one(int i)
{ printf("\t%s\t%s\t%s\t%s\n",stu[i].name,stu[i].phone,stu[i].stunum,stu[i].dorm); }
void printf_n(int n)
{
int j;
for(j=0;j<n;j++)
{ if((j!=0)&&(j%10==0)) {printf("\n\nPress any key to continue...:"); getchar(); puts("\n\n");}
printf_one(j);
} getchar();
}
int load()
{
FILE *fp;
int i;
if((fp=fopen("file","rb"))==NULL)
{ printf("\nCan not open file\n");
exit(0);
}
for(i=0;!feof(fp);i++)
fread(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
return(i-1);
}
int modify_data(int i,int n)
{
int c,w1; void input(int i); void menu();
do
{ puts("\n修改选项=>\n\n 1).姓名 2).电话号码 3).学号 4).宿舍号 5).所有数据 6).取消并返回");
printf("请选择?: [ ]\b\b");
scanf("%d",&c);
if(c>6||c<1) {puts("\nChoose error! Please again!"); getchar();}
}while(c>6||c<1);
do
{ switch(c)
{ case 1: printf("name:"); scanf("%s",stu[i].name); break;
case 2: printf("phone:"); scanf("%s",stu[i].phone); break;
case 3: printf("stunum:"); scanf("%s",stu[i].stunum); break;
case 4: printf("dorm:"); scanf("%s",stu[i].dorm); break;
case 5: input(i); break;
case 6: menu();
}
puts("\nNow:\n");
printf_face(); printf_one(i);
printf("\n确定?\n\n\t1).是 2).不,重新修改 3).返回不保存 [ ]\b\b");
scanf("%d",&w1);
}while(w1==2);
return(w1);
}
void input(int i)
{
printf_face(); printf("\t");
scanf("%s\t%s\t%s\t%s",stu[i].name,stu[i].phone,stu[i].stunum,stu[i].dorm); }
void save(int n)
{
FILE *fp; int i;
if((fp=fopen("file","wb"))==NULL)
{ printf("\nCan not open file\n");
exit(0);
}
for(i=0;i<n;i++)
if(stu[i].name[0]!='\0')
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
void browse()
{
printf("browse()\n");
}
void printf_back()
{
int w; void browse(); void menu();
printf("\n\n\t^_^.Successful. ^_^\n\n");
printf("What do you want to do?\n\n\t1).浏览所有\t2).返回: [ ]\b\b");
scanf("%d",&w);
if(w==1) browse();
else menu();
}
void main()
{
void menu();
menu();
}
void menu()
{
int n, w1;
void enter();
void add();
void my_delete();
void modify();
void search();
do{
puts("\t*************欢迎进入建电151通讯录菜单*********** ");
puts("\n\t\t*****************1.录入信息*******************");
puts("\t\t*******************2.插入信息*******************");
puts("\t\t*******************3.删除信息*******************");
puts("\t\t*******************4.变更信息*******************");
puts("\t\t*******************5.查询信息*******************");
puts("\t\t*******************6.退 出*******************");
puts("\n\n\t**************建电151通讯录********************* ");
printf("请选择服务种类(1-6) : [ ]\b\b");
scanf("%d",&n);
if(n<1||n>6)
{w1=1;getchar();}
else w1=0;
}while(w1==1);
switch(n)
{
case 1: enter(); break;
case 2: add(); break;
case 3: my_delete(); break;
case 4: modify(); break;
case 5: search(); break;
case 6: exit(0);
}
}
void enter()
{
int i,n;
printf("How many student(0-%d)?:",N-1);
scanf("%d",&n);
printf("请输入数据:\n");
for(i=0;i<n;i++)
{printf("\n输入第 %d个记录.\n",i+1);
input(i);
}
if(i!=0) save(n);
printf_back();
}
void add()
{
int i,n,k,t;
n=load();
printf("How many student do you want to add(0-%d)?:",N-n-1);
scanf("%d",&t); k=n+t;
for(i=n;i<k;i++)
{ printf("\n输入第 %d个记录.\n",i-n+1); input(i);}
save(k); printf_back();
}
void my_delete()
{
struct student s; int i,n,k,w0,w1;
n=load();
do
{ k=-1; printf_face(); printf_n(n);
do
{ printf("\n\nEnter name that you want to delete!\nName:");
scanf("%s",s.name);
for(i=0;i<n;i++)
if(strcmp(s.name,stu[i].name)==0) {k=i; s=stu[i];}
if(k==-1) printf("\n\n没有记录请重新输入!");
}while(k==-1);
printf_face(); printf_one(k);
printf("\n确定?\n\t1).是 2).返回 [ ]\b\b");
scanf("%d",&w0);
if(w0==1) {stu[k].name[0]='\0'; save(n);} else break;
printf("\n\t^_^.Successful^_^.\n");
printf("What do you want to do?\n\t1).继续 2).返回 [ ]\b\b");
scanf("%d",&w1);
}while(w1==1);
menu();
}
void modify()
{
struct student s; int i,n,k,w0=1,w1,w2=0;
n=load();
do
{ k=-1; printf_face(); printf_n(n);
do
{ printf("\n\nEnter name that you want to modify!\nName:");
scanf("%s",s.name);
for(i=0;i<n;i++)
if(strcmp(s.name,stu[i].name)==0) {k=i; s=stu[i];}
if(k==-1) printf("\n\n没有记录请重新输入!");
}while(k==-1);
printf_face(); printf_one(k);
w1=modify_data(k,n);
if(w1==1) {printf("\n\t^_^.Successful ^_^.\n\n是否继续?\n\n\t1).是 2).保存返回\t[ ]\b\b");
scanf("%d",&w0); w2=1;}
else
{w0=0; if(w2==0) stu[k]=s;}
if((w0!=1)&&(w2==1)) save(n);
}while(w0==1); menu();
}
void search()
{
int w0,k,i,n,w1,w2; struct student s; n=load();
do
{printf("请选择查找类别: 1).姓名 2).学号 [ ]\b\b");
scanf("%d",&w1); if(w1<1||w1>2) {printf("输入错误!请重新输入!\n"); w2=1;}
}while(w2==1);
if(w1==1)
{do
{ k=-1;
do
{ printf("\n\nEnter name that tou want to search!\nName:");
scanf("%s",s.name);
for(i=0;i<n;i++)
if(strcmp(s.name,stu[i].name)==0) {k=i; s=stu[i];}
if(k==-1) printf("\n\n没有记录请重新输入!");
}while(k==-1);
printf_face(); printf_one(k);
printf("\nWhat do you want to do?\n\t1).继续 2).返回菜单 [ ]\b\b");
scanf("%d",&w0);
}while(w0==1);
menu();
}
else
{ do
{ k=-1;
do
{printf("\n\nEnter student number that tou want to search!\nphone:");
scanf("%s",s.stunum);
for(i=0;i<n;i++)
if(strcmp(s.stunum,stu[i].stunum)==0) {k=i; s=stu[i];}
if(k==-1) printf("\n\n没有记录请重新输入!");
}while(k==-1);
printf_face(); printf_one(k);
printf("\nWhat do you want to do?\n\t1).继续 2).返回菜单 [ ]\b\b");
scanf("%d",&w0);
}while(w0==1);
menu();
}
}