第1个回答 2010-06-20
写了一个,不行可以改一下,,,
#include <stdio.h>
#include <string.h>
struct stu
{
char sname[20];
int snum;
char ssex[10];
int age;
}student[100];
char name[20];
int num;
char sex[10];
int age;
int size=sizeof(struct stu);
static int n=0;;
int choice;
void enter(struct stu student[],FILE *p);
void looking(struct stu student[],FILE *p);
void search(struct stu student[]);
void xiugai(struct stu student[],FILE *p);
void delete_(struct stu student[],FILE *p);
main()
{
FILE *p;
do
{
printf("[1]:输入学生信息\n[2]:浏览学生信息\n[3]:查询学生信息\n[4]:修改学生信息\n[5]:删除学生信息\n[0]:退出\n");
printf("选择-->");
scanf("%d",&choice);
getchar();
switch(choice)
{
case 1:
if((p=fopen("student.txt","w"))==NULL)
printf("NO FILE!!!");
enter(student,p);
fclose(p);
break;
case 2:
looking(student,p);break;
case 3:
search(student);break;
case 4:
xiugai(student,p);break;
case 5:
delete_(student,p);break;
case 0:break;
default:printf("error error error...");break;
}
printf("\n继续吗--->[1]:YES [2]:NO");
printf("\n选择-->");
scanf("%d",&choice);
switch(choice)
{
case 1:continue;
case 2:goto next;
default:printf("error error error...");break;
}
}while(1);
next:
printf("\n谢谢使用!!!");
getch();
}
void enter(struct stu student[],FILE *p)
{
printf("姓名:");
gets(student[n].sname); /*可以加一个学号报错系统,即输入的相同的学号就报错*/
strcpy(name,student[n].sname);
fputs(name,p);
printf("\n学号:");
scanf("%d",&student[n].snum);
num=student[n].snum;
fprintf(p," %d ",num);
getchar();
printf("\n性别:");
gets(student[n].ssex);
strcpy(sex,student[n].ssex);
fputs(sex,p);
printf("\n年龄:");
scanf("%d",&student[n].age);
age=student[n].age;
fprintf(p," %d\n",age);
n++;
}
void looking(struct stu student[],FILE *p)
{
int i;
printf("[1]:直接从文件中读入 [2]选择读入\n");
printf("选择:");
scanf("%d",&choice);
switch(choice)
{
case 1:
if((p=fopen("student.txt","r"))==NULL)
printf("NO FILE!!!");
while(!feof(p))
{
fscanf(p,"%s%d%s%d",name,&num,sex,&age);
printf("学号:%d 姓名:%s 性别:%s 年龄:%d\n",num,name,sex,age);
}
fclose(p);
break;
case 2:
if(n==0)
printf("无学生信息!!!");
else
{
printf("[1]:从系统调用 [2]:从文件调用\n");
printf("选择-->");
scanf("%d",&choice);
switch(choice)
{
case 1:
for(i=0;i<n;i++)
printf("学号:%d 姓名:%s 性别:%s 年龄:%d\n",student[i].snum,student[i].sname,student[i].ssex,student[i].age);
break;
case 2:
if((p=fopen("student.txt","r"))==NULL)
{
printf("NO FILE!!");
break;
}
while(!feof(p))
{
fscanf(p,"%s%d%s%d",name,&num,sex,&age);
printf("学号:%d 姓名:%s 性别:%s 年龄:%d\n",num,name,sex,age);
}
fclose(p);
break;
default:printf("error error error...");break;
}
}
break;
default:printf("error error...");break;
}
}
void search(struct stu student[])
{
int i;
if(n==0)
printf("无学生信息!!!");
else
{
printf("[1]:按学号 [2]:按姓名\n");
printf("选择-->");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("输入学号:");
scanf("%d",&num);
for(i=0;i<n;i++)
if(student[i].snum==num)
break;
printf("学号:%d 姓名:%s 性别:%s 年龄:%d",student[i].snum,student[i].sname,student[i].ssex,student[i].age);
break;
case 2:
getchar();
printf("输入姓名:");
gets(name);
for(i=0;i<n;i++)
if(strcmp(name,student[i].sname)==0)
break;
printf("学号:%d 姓名:%s 性别:%s 年龄:%d",student[i].snum,student[i].sname,student[i].ssex,student[i].age);
break;
default:printf("error error error...");break;
}
}
}
void xiugai(struct stu student[],FILE *p)
{
int i,m,num1,agee;
char m1[10];
if(n==0)
printf("无学生信息!!!");
else
{
printf("[1]:按学号 [2]:按姓名\n");
printf("选择-->");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("输入学号:");
scanf("%d",&num1);
for(i=0;i<n;i++)
if(student[i].snum==num1)
break;
break;
case 2:
getchar();
printf("输入姓名:");
gets(name);
for(i=0;i<n;i++)
if(strcmp(name,student[i].sname)==0)
break;
default:printf("error error error...");break;
}
printf("[1]:修改学号 [2]:修改性别 [3]:修改年龄\n");
printf("选择:");
scanf("%d",&choice);
switch(choice)
{
case 1:
getchar();
printf("输入新学号:");
scanf("%d",&num);
student[i].snum=num;
if((p=fopen("student.txt","w+"))==NULL)
printf("NO FILE!!!");
while(!feof(p))
{
fscanf(p,"%d",&m);
if(m==num1)
fprintf(p,"%d",num);
}
fclose(p);
break;
case 2:
getchar();
printf("输入性别:");
scanf("%s",sex);
strcpy(student[i].ssex,sex);
if((p=fopen("student.txt","w+"))==NULL)
printf("NO FILE!!!");
while(!feof(p))
{
fscanf(p,"%s",m1);
if(strcmp(student[i].ssex,sex)==0)
fprintf(p,"%s",m1);
}
fclose(p);
break;
case 3:
printf("输入年龄:");
scanf("%d",&agee);
student[i].age=agee;
if((p=fopen("student.txt","w+"))==NULL)
printf("NO FILE!!!");
while(!feof(p))
{
fscanf(p,"%d",&m);
if(m==agee)
fprintf(p,"%d",agee);
}
fclose(p);
break;
default:printf("error error error...");break;
}
printf("\n修改成功!!!");
}
}
void delete_(struct stu student[],FILE *p)
{
struct stu *s;
int i,j,m;
char name1[10];
if(n==0)
printf("无学生信息!!!");
else
{
printf("[1]:按学号 [2]:按姓名");
printf("\n选择:");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("\n学号:");
scanf("%d",&num);
for(i=0;i<n;i++)
if(num==student[i].snum)
break;
for(j=i;j<n;j++)
student[i]=student[i+1];
n--;
if((p=fopen("student.txt","w+"))==NULL)
printf("NO FILE!!!");
while(!feof(p))
{
fscanf(p,"%d",&m);
if(num==m)
{
fread(&s,size,1,p);
free(s);
}
}
break;
case 2:
getchar();
printf("\n输入姓名:");
gets(name);
for(i=0;i<n;i++)
if(strcmp(name,student[i].sname)==0)
break;
for(j=i;j<n;j++)
student[i]=student[i+1];
n--;
if((p=fopen("student.txt","w+"))==NULL)
printf("NO FILE!!!");
while(!feof(p))
{
fscanf(p,"%s",name1);
if(strcmp(name1,name)==0)
{
fread(&s,size,1,p);
free(s);
}
}
break;
default:printf("error error error...");break;
}
printf("\n删除成功!!!");
}
}