|
|
#include<stdio.h>
|
|
|
#include<stdlib.h>
|
|
|
#include<conio.h>
|
|
|
#include<string.h>
|
|
|
#include<io.h>
|
|
|
struct birth
|
|
|
{
|
|
|
int year,month,day;
|
|
|
};
|
|
|
struct student
|
|
|
{
|
|
|
int number,age,tel[20];
|
|
|
char name[10],sex,address[20];
|
|
|
char E_mail[20];
|
|
|
struct birth birthday;
|
|
|
struct student *link;
|
|
|
};
|
|
|
void show()
|
|
|
{
|
|
|
printf("请输入数字加回车键进行选择:\n");
|
|
|
printf("1.学生信息录入功能(学生信息用文件保存)-输入\n");
|
|
|
printf("2.学生信息浏览功能-输出\n");
|
|
|
printf("3.学生信息查询功能-按学号查询,按姓名查询\n");
|
|
|
printf("4.学生信息的删除与修改\n");
|
|
|
printf("按其他任意键加回车退出程序\n");
|
|
|
}
|
|
|
void credit(int n)
|
|
|
{
|
|
|
FILE *fp;
|
|
|
char fpname[20];
|
|
|
struct student *head,*next,*end;
|
|
|
int i;
|
|
|
printf("请输入用于存放文件的路径及路径名:");
|
|
|
scanf("%s",fpname);
|
|
|
getchar();
|
|
|
fp=fopen(fpname,"w+");
|
|
|
head=(struct student *)malloc(sizeof(struct student));
|
|
|
printf("请输入学生学号 姓名 性别 出生年 月 日 地址 电话 e_mail:");
|
|
|
scanf("%d %s %c %d %d %d %s %s %s",&head->number,head->name,&head->sex,&(*head).birthday.year,&(*head).birthday.month,&(*head).birthday.day,head->address,head->tel,head->E_mail);
|
|
|
getchar();
|
|
|
fprintf(fp,"%d %s %c %d %d %d %s %s %s",head->number,head->name,head->sex,(*head).birthday.year,(*head).birthday.month,(*head).birthday.day,head->address,head->tel,head->E_mail);
|
|
|
end=head;
|
|
|
for(i=1;i<n;i++)
|
|
|
{
|
|
|
next=(struct student *)malloc(sizeof(struct student));
|
|
|
printf("请输入学生学号 姓名 性别 出生年 月 日 地址 电话 e-mail:");
|
|
|
scanf("%d %s %c %d %d %d %s %s %s",&head->number,head->name,&head->sex,&(*head).birthday.year,&(*head).birthday.month,&(*head).birthday.day,head->address,head->tel,head->E_mail);
|
|
|
getchar();
|
|
|
fprintf(fp,"%d %s %c %d %d %d %s %s %s",head->number,head->name,head->sex,(*head).birthday.year,(*head).birthday.month,(*head).birthday.day,head->address,head->tel,head->E_mail);
|
|
|
end->link=next;
|
|
|
end=next;
|
|
|
end->link=NULL;
|
|
|
}
|
|
|
fclose(fp);
|
|
|
}
|
|
|
int show2(int n)
|
|
|
{
|
|
|
|
|
|
FILE *fp;
|
|
|
int i;
|
|
|
char fpname[20];
|
|
|
struct student *head;
|
|
|
head=(struct student *)malloc(sizeof(struct student));
|
|
|
printf("请输入用于存放信息的文件路径及文件名:");
|
|
|
gets(fpname);
|
|
|
fp=fopen(fpname,"r+");
|
|
|
for(i=0;i<n;i++)
|
|
|
{
|
|
|
fscanf(fp,"%d %s %c %d %d %d %s %s %s",&head->number,head->name,&head->sex,&(*head).birthday.year,&(*head).birthday.month,&(*head).birthday.day,head->address,head->tel,head->E_mail);
|
|
|
printf("%d %s %c %d %d %d %s %s %s",head->number,head->name,head->sex,(*head).birthday.year,(*head).birthday.month,(*head).birthday.day,head->address,head->tel,head->E_mail);
|
|
|
fclose(fp);
|
|
|
}
|
|
|
}
|
|
|
int search1(int n)
|
|
|
{
|
|
|
int i,checkname;
|
|
|
FILE *fp;
|
|
|
char fpname[20];
|
|
|
struct student *head;
|
|
|
head=(struct student *)malloc(sizeof(struct student));
|
|
|
printf("请输入存放信息的文件路径及文件名:");
|
|
|
gets(fpname);
|
|
|
fp=fopen(fpname,"r+");
|
|
|
printf("请输入要查询信息的学生学号:");
|
|
|
scanf("%d",&checkname);
|
|
|
getchar();
|
|
|
for(i=0;i<n;i++)
|
|
|
{
|
|
|
fscanf(fp,"%d %s %c %d %d %d %s %s %s",&head->number,head->name,&head->sex,&(*head).birthday.year,&(*head).birthday.month,&(*head).birthday.day,head->address,head->tel,head->E_mail);
|
|
|
if(checkname==head->number)
|
|
|
{
|
|
|
printf("%d %s %c %d %d %d %s %s %s\n",head->number,head->name,head->sex,(*head).birthday.year,(*head).birthday.month,(*head).birthday.day,head->address,head->tel,head->E_mail);
|
|
|
fclose(fp);
|
|
|
return(1);
|
|
|
}
|
|
|
}
|
|
|
printf("未找到");
|
|
|
}
|
|
|
int search2(int n)
|
|
|
{
|
|
|
int i;
|
|
|
FILE *fp;
|
|
|
char fpname[20],checkname[20];
|
|
|
struct student *head;
|
|
|
head=(struct student *)malloc(sizeof(struct student));
|
|
|
printf("请输入存放信息的文件路径及文件名:");
|
|
|
gets(fpname);
|
|
|
fp=fopen(fpname,"r+");
|
|
|
printf("请输入要查询信息的学生姓名:");
|
|
|
scanf("%s",&checkname);
|
|
|
getchar();
|
|
|
for(i=0;i<n;i++)
|
|
|
{
|
|
|
fscanf(fp,"%d %s %c %d %d %d %s %s %s",&head->number,head->name,&head->sex,&(*head).birthday.year,&(*head).birthday.month,&(*head).birthday.day,head->address,head->tel,head->E_mail);
|
|
|
if(strcmp(checkname,head->name)==0)
|
|
|
{
|
|
|
for(i=0;i<n;i++)
|
|
|
fprintf(fp,"%d %s %c %d %d %d %s %s %s",head->number,head->name,head->sex,(*head).birthday.year,(*head).birthday.month,(*head).birthday.day,head->address,head->tel,head->E_mail);
|
|
|
fclose(fp);
|
|
|
return(1);
|
|
|
}
|
|
|
}
|
|
|
printf("未找到\n");
|
|
|
}
|
|
|
int most(n)
|
|
|
{
|
|
|
FILE *fp;
|
|
|
char get;
|
|
|
char fpname[20];
|
|
|
struct student *ans[500];
|
|
|
int i;
|
|
|
char checkname[10];
|
|
|
printf("请输入存放信息的文件路径及文件名:");
|
|
|
gets(fpname);
|
|
|
fp=fopen(fpname,"r+");
|
|
|
ans[0]=(struct student *)malloc(sizeof(struct student));
|
|
|
fscanf(fp,"%d %s %c %d %d %d %s %s %s",&ans[0]->number,ans[0]->name,&ans[0]->sex,&(*ans[0]).birthday.year,&(*ans[0]).birthday.month,&(*ans[0]).birthday.day,ans[0]->address,ans[0]->tel,ans[0]->E_mail);
|
|
|
for(i=0;i<n;i++)
|
|
|
{
|
|
|
ans[i]=(struct student *)malloc(sizeof(struct student));
|
|
|
fscanf(fp,"%d %s %c %d %d %d %s %s %s",&ans[i]->number,ans[i]->name,&ans[i]->sex,&(*ans[i]).birthday.year,&(*ans[i]).birthday.month,&(*ans[i]).birthday.day,ans[i]->address,ans[i]->tel,ans[i]->E_mail);
|
|
|
ans[i-1]->link=ans[i];
|
|
|
}
|
|
|
ans[i]->link=NULL;
|
|
|
printf("如果想修改信息请输入1加回车键,想删除信息输入2加回车键:");
|
|
|
get=getchar();
|
|
|
getchar();
|
|
|
if(get=='1')
|
|
|
{
|
|
|
printf("请输入要修改信息的学生姓名:");
|
|
|
scanf("%s",checkname);
|
|
|
getchar();
|
|
|
for(i=0;i<n;i++)
|
|
|
{
|
|
|
if(strcmp(checkname,ans[i]->name)==0)
|
|
|
{
|
|
|
printf("请输入学生新信息 学号 姓名 性别 出生年 月 日 地址 电话 e-mail:");
|
|
|
scanf("%d %s %c %d %d %d %s %s %s",&ans[i]->number,ans[i]->name,&ans[i]->sex,&(*ans[i]).birthday.year,&(*ans[i]).birthday.month,&(*ans[i]).birthday.day,ans[i]->address,ans[i]->tel,ans[i]->E_mail);
|
|
|
getchar();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if(get=='2')
|
|
|
{
|
|
|
printf("请输入要删除的学生姓名:");
|
|
|
scanf("%s",checkname);
|
|
|
getchar();
|
|
|
for(i=0;i<n;i++)
|
|
|
{
|
|
|
if(strcmp(checkname,ans[i]->name)==0)
|
|
|
{
|
|
|
ans[i-1]->link=ans[i]->link;
|
|
|
n--;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
fp=fopen(fpname,"w+");
|
|
|
for(i=0;i<n;i++)
|
|
|
{
|
|
|
fprintf(fp,"%d %s %c %d %d %d %s %s %s",ans[i]->number,ans[i]->name,ans[i]->sex,(*ans[i]).birthday.year,(*ans[i]).birthday.month,(*ans[i]).birthday.day,ans[i]->address,ans[i]->tel,ans[i]->E_mail);
|
|
|
}
|
|
|
fclose(fp);
|
|
|
return(n);
|
|
|
}
|
|
|
void main ()
|
|
|
{
|
|
|
char get,get2;
|
|
|
int n;
|
|
|
while(1)
|
|
|
{
|
|
|
show();
|
|
|
get=getchar();
|
|
|
getchar();
|
|
|
switch(get)
|
|
|
{
|
|
|
case '1':
|
|
|
printf("请输入学生人数:");
|
|
|
scanf("%d",&n);
|
|
|
getchar();
|
|
|
credit(n);
|
|
|
break;
|
|
|
case '2':
|
|
|
show2(n);
|
|
|
break;
|
|
|
case '3':
|
|
|
printf("按学号查找输入1加回车键,按姓名查找输入2加回车键:");
|
|
|
get2=getchar();
|
|
|
getchar();
|
|
|
if(get2=='1')
|
|
|
search1(n);
|
|
|
if(get2=='2')
|
|
|
search2(n);
|
|
|
break;
|
|
|
case '4':
|
|
|
n=most(n);
|
|
|
break;
|
|
|
}
|
|
|
if(get!='1'&&get!='2'&&get!='3'&&get!='4')
|
|
|
break;
|
|
|
}
|
|
|
}
|