#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
#define QWER1 "|学号 |姓名|身份证号|专业|学校|\n"
#define QWER2 "|%d|%8s|%d|%8s|%8s|\n"
#define QWER3 p->num,p->name,p->id,p->major,p->school
typedef struct student
{
int num;
char name[10];
int id;
char major[8];
char school[8];
}XUEJI;
typedef struct xue
{ XUEJI*PHead;
int count;
}lali;
void Menu();
void luru(lali*pi); //录入
void xiansi(lali*pi); //显示
void shanchu(lali*pi);//删除
void chazhao(lali*pi);//查找
void xiugai(lali*pi); //修改
void Load(lali*pi);
void Save(lali*pi);
int main()
{ int m;
XUEJI*pstu;
lali pi;
pstu=(XUEJI*)malloc(N*sizeof(XUEJI));
pi.PHead=pstu;
pi.count=0;
printf("欢迎使用学籍查询系统\n");
printf("请输入密码:");
int i=0;char b[10];
for(i=0;i<3;i++)
{gets(b);
if(strcmp(b,"lali")!=0)
{if(i==2)
{printf("密码错误超过三次,退出系统");
return 0;}
printf("密码错误,请重新输入");}
else if(strcmp(b,"lali")==0)
{printf("密码正确,恭喜进入查询系统");
system("pause");
break;}}
do
{ Menu();
printf("请选择[0~5] ");
scanf("%d",&m);
switch(m)
{case 0:return 0;break;
case 1:luru(&pi);break;
case 2:xiansi(&pi);system("pause");break;
case 3:shanchu(&pi);break;
//case 4:chazhao();break;
//case 5:xiugai();break;
}
}while(1);
pstu=pi.PHead;
free(pstu);
return 0;
}
void Menu()
{system("cls");
printf("*****主菜单*****\n");
printf("* 0.退出系统 *\n");
printf("* 1.输入学籍 *\n");
printf("* 2.显示学籍 *\n");
printf("* 3.删除记录 *\n");
printf("* 4.查找学籍 *\n");
printf("* 5.修改学籍 *\n");
}
void luru(lali*pi)
{int num;
XUEJI *pstu,*p;
int a=0,i;
system("cls");
printf("学生学籍管理系统\n");
do{
Load(pi);
pstu=pi->PHead+pi->count;
p=pi->PHead;
printf("请输入学号(按0返回菜单)");
scanf("%d",&num);
if(num==0)
break;
for(i=1;i<=pi->count;i++)
{if(num==p->num)
{printf("该学号已经存在,请重新输入:");
a=1;
break;
}
p++;
}
if(a)
{a=0;
continue;}
else if(num!=0)
pstu->num=num;
printf("请输入姓名:");
scanf("%s",pstu->name);
printf("请输入身份证号:");
scanf("%d",&pstu->id);
printf("请输入专业:");
scanf("%s",pstu->major);
printf("请输入学校:");
scanf("%s",pstu->school);
pi->count++;
Save(pi);
}while(1);
}
void xiansi(lali*pi)
{int i;
XUEJI*p;
system("cls");
printf("显示学籍\n");
Load(pi);
p=pi->PHead;
if(pi->count==0)//为什么count!=0
{printf("暂无学籍记录");
return;
}
printf("一共有%d条学生记录\n",pi->count);
{for(i=1;i<=pi->count;i++)
{printf(QWER1);
printf(QWER2,QWER3);
p++;}
}}
void Load(lali *pi)
{
FILE*fp;
XUEJI*p;
char fname[15]="s";
if((fp=fopen(fname,"rb"))==NULL)
{
fp=fopen(fname,"wb");
if(fp==NULL)
{ printf("建立文件失败!\n");
return;
}
fclose(fp);
}
fp=fopen(fname,"rb");
pi->count=0;
p=pi->PHead;
while(!feof(fp))
{if(fread(p,sizeof(XUEJI),1,fp));
{pi->count=pi->count+1;
p++;
}
}
fclose(fp);
}
void Save(lali*pi)
{FILE*fp;
int numwriten;
char fname[10]="s";
if((fp=fopen(fname,"wb"))==NULL)
{printf("打开文件失败!\n");
return;
}
if(pi->count)
{numwriten=fwrite(pi->PHead,pi->count*sizeof(XUEJI),1,fp);}
fclose(fp);
}
void shanchu(lali*pi)
{ int num,i;XUEJI*p;
do{xiansi(pi);
printf("请输入要删除的学号(按0退回菜单):\t");
scanf("%d",&num);
p=pi->PHead;
if(num==0)
{break;}
else if(num!=0)
{{for(i=1;i<pi->count;i++)
{ if(p->num==num)
{memcpy(p,p+1,(pi->PHead+pi->count-p)*sizeof(XUEJI));
pi->count--;}
p++;}
if(i==pi->count)
pi->count--;}
}
Save(pi);
}while(1);
}