#include
#include
#include
#include
#define A 40
int e=0;
int y=0;
int r=0;/*全局变量r代表学生数*/
void jiemian2();
void jiemian();
struct student
{
char name[50];
char sex;
int num;
int age;
int math;
int C;
double ave;
int n;
}stu[A];
void finput()/*输入数据*/
{
FILE *fp;/*建立一个二进制文件*/
int i,k,j;
fp=fopen("y.dat","wb");/*打开只写文件*/
k=r;
jiemian2();
e++;
scanf("%d",&r);/*输入数据组数*/
system("cls");
for(i=0;i
loop:
e=1;
system("cls");
jiemian2();
scanf("%d",&stu[i].num);
system("cls");
if(stu[i].num<1000||stu[i].num>9999)/*判断学号输入是否正确*/
{
e=2;
system("cls");
jiemian2();
system("pause");
goto loop;
}
for(j=0;j
if(j!=i)
{
if(stu[j].num==stu[i].num)
{
e=3;
system("cls");
jiemian2();
system("pause");
goto loop;
}
}
}
e=4;
jiemian2();
scanf("%s %c%d%d%d",stu[i].name,&stu[i].sex,&stu[i].age,&stu[i].C,&stu[i].math);
system("cls");
stu[i].ave=(stu[i].C+stu[i].math)/2.0;
stu[i].n=i;
fwrite(&stu[i],sizeof(struct student),1,fp);/*边输入边保存*/
}
e=0;
fclose(fp);
system("pause");/*按任意键继续*/
system("cls");/*清屏*/
}
int loading()/*初始化全局变量r*/
{
int i = 0;
char y;
FILE *fp;
fp=fopen("y.dat","rb");
if ( fp == NULL)
{
printf("cannot open this file\n");
printf("你要创建一个文件吗?(y/n)\n");
scanf("%c",&y);
if(y=='y')
fopen("fstu","wb");
}
else
{
r = 0;
while (fread(&stu[i],sizeof(struct student),1,fp))/*读取出学生数*/
{
i++;
r++;
}
}
fclose(fp);
return i;
}
void foutput()/*输出数据*/
{
y=1;
FILE *fp;
int i;
fp=fopen("y.dat","rb");/*读取文件*/
jiemian();
y=0;
fclose(fp);
system("pause");
system("cls");
}
void jiemian()/*主界面*/
{
int i,j,k;
for(j=0;j<20;j++)
{
if(j==0)
{
for(i=0;i<40;i++)
{
if(i==0)
{
printf("┏");
}
else if(i==39)
{
printf("┓");
}
else
{
printf("━");
}
}
}
else if(j==1)
{
printf("┃");
for(k=0;k<26;k++)
{
printf(" ");
}
printf("欢迎进入学生信息管理系统");
for(i=0;i<26;i++)
{
printf(" ");
}
printf("┃");
}
else if(j==2)
{
printf("┣");
for(k=0;k<38;k++)
{
printf("━");
}
printf("┫");
}
else if(j>=6&&j<14&&y==0)
{
printf("┃");
for(i=0;i<76;i++)
{
if(i==32)
{
switch(j)
{
case 6: printf("1.输入数据");i+=9;break;
case 7: printf("2.输出数据");i+=9;break;
case 8: printf("3.修改数据");i+=9;break;
case 9: printf("4.按学号查询");i+=11;break;
case 10: printf("5.按学号排序");i+=11;break;
case 11: printf("6.删除数据");i+=9;break;
case 12: printf("7.插入数据");i+=9;break;
case 13: printf("8.退出系统");i+=9;break;
}
}
else
{
printf(" ");
}
}
printf("┃");
}
else if(j==3&&y!=0)
{
printf("┃");
printf(" 学号 姓名 性别 年龄 C成绩 C++成绩 平均分 ┃\n");
for(i=0;i
printf("┃ %6d%6s%6c%6d%6d%6d%12.2f ┃\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].C,stu[i].math,stu[i].ave);
}
printf("┃");
for(i=0;i<76;i++)
{
printf(" ");
}
printf("┃");
}
else if(j==18)
{
for(i=0;i<40;i++)
{
if(i==0)
{
printf("┣");
}
else if(i==39)
{
printf("┫");
}
else
{
printf("━");
}
}
}
else if(j==19)
{
printf("┃");
for(k=0;k<26;k++)
{
printf(" ");
}
if(y==1)
{
printf(" 显示所有学生信息");
}
else if(y==0)
{
printf("选择1-8数字进行操作");
}
else
{
printf("学生信息按学号排序 ");
}
for(i=0;i<31;i++)
{
printf(" ");
}
printf("┃");
}
else
{
printf("┃");
for(i=0;i<76;i++)
{
printf(" ");
}
printf("┃");
}
printf("\n");
}
for(i=0;i<40;i++)
{
if(i==0)
{
printf("┗");
}
else if(i==39)
{
printf("┛");
printf("\n");
printf("请输入:");
}
else
{
printf("━");
}
}
}
void fchange()/*修改数据*/
{
FILE *fp;
int i,num,n;
int flag=0;
e=8;
system("cls");
jiemian2();
e=0;
scanf("%d",&num);
system("cls");
for(i=0;i<=r;i++)
{
if(stu[i].num==num)/*查找该学生*/
{
printf("\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------\n");
printf("学号 姓名 性别 年龄 C成绩 C++成绩 平均分\n");
printf("-----------------------------------------------------------\n");
printf("%8d%8s%8c%8d%8d%8d%8.2f\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].C,stu[i].math,stu[i].ave);
printf("-----------------------------------------------------------\n\n");
printf("\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\n");
n=i;
flag=1;
break;
}
}
if(flag==0)/*没有该学生信息*/
{
printf("\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\n");
printf(" 输入错误!\n");
printf(" 请返回!\n");
printf("\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\n");
return;
}
printf("\n\n\n");
fp=fopen("y.dat","rb+");
fseek(fp,n*sizeof(struct student),0);/*把文件指针移到开头*/
printf("学号 姓名 性别 年龄 C成绩 C++成绩\n");
scanf("%d%s %c%d%d%d",&stu[i].num,stu[i].name,&stu[i].sex,&stu[i].age,&stu[i].C,&stu[i].math);/*修改数据*/
stu[i].ave=(stu[i].C+stu[i].math)/2.0;
for(i=0;i
fclose(fp);
fp=fopen("y.dat","rb");
printf("\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------\n");
printf("学号 姓名 性别 年龄 C成绩 C++成绩 平均分\n");
printf("-----------------------------------------------------------\n");
for(i=0;i
printf("%8d%8s %8c%8d%8d%8d%8.2f\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].C,stu[i].math,stu[i].ave);
}
printf("-----------------------------------------------------------\n\n");
printf("\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\n");
fclose(fp);
system("pause");
system("cls");
}
void fsearch()/*数据查询*/
{
FILE *fp;
int i,num;
fp=fopen("y.dat","rb");/*读取文件*/
rewind(fp);
e=7;
system("cls");
jiemian2();
e=0;
scanf("%d",&num);
system("cls");
printf("\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\n");
printf(" 查询结果\n");
printf("-----------------------------------------------------------\n");
printf(" 学号 姓名 性别 年龄 C成绩 C++成绩 平均分\n");
printf("-----------------------------------------------------------\n");
for(i=0;i
if(stu[i].num==num)
{
printf("%6d%6s%6c%6d%6d%6d%12.2f\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].C,stu[i].math,stu[i].ave);
printf("-----------------------------------------------------------\n\n");
printf("\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\n\n\n");
fclose(fp);
}
}
system("pause");
system("cls");
}
void fsort()/*数据按学号排序*/
{
int i,j,n;
FILE *fp;
struct student t;
for(i=0;i
for(j=i+1;j
if(stu[i].num>stu[j].num)
{
t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
}
}
fp=fopen("y.dat","wb");
for(i=0;i
fwrite(&stu[i],sizeof(struct student),1,fp);
}
y=2;
jiemian();
y=0;
fclose(fp);
system("pause");
system("cls");
}
void fdelete()/*删除数据*/
{
int i,number, j, flag = 0, k = 0;
FILE *fp;
e=6;
system("cls");
jiemian2();
e=0;
scanf("%d",&number);
fp=fopen("y.dat","wb");
if(fp==NULL)/*判断文件中是否有数据可供删除*/
{
printf("文件打开失败\n");
exit(0);/*正常退出所有文件*/
}
for(i=0;i
if(stu[i].num==number)
{
j = i;
flag = 1;
break;
}
}
if(flag == 1)
{
for(j=i;j
stu[j] = stu[j+1];
}
}
r--;/*成功删除,学生总数减一*/
system("pause");
system("cls");
for(i=0;i
fclose(fp);
}
void finsert()/*插入数据*/
{
int i,j;
FILE *fp;
fp=fopen("y.dat","wb");
e=5;
system("cls");
jiemian2();
e=0;
if (r == 0)
{
printf("抱歉!没有数据时,您不能使用插入功能!\n");
system("pause");
system("cls");
return;
}
scanf("%d",&j);/*按位置插入*/
if(j>r)
{
printf("抱歉!没有足够数据!\n");
system("pause");
system("cls");
return;
}
for(i=r-1;i>=j;i--)/*在要插入的位置留空*/
{
stu[i+1]=stu[i];
}
printf("请输入数据:");
scanf("%d%s %c%d%d%d",&stu[j].num,stu[j].name,&stu[j].sex,&stu[j].age,&stu[j].C,&stu[j].math);
stu[j].ave=(stu[j].C+stu[j].math)/2.0;
r++;
for(i=0;i
fwrite(&stu[i],sizeof(struct student),1,fp);
}
system("cls");
fclose(fp);
}
void jiemian2()/*输入界面*/
{
int i,j,k;
for(j=0;j<20;j++)
{
if(j==0)
{
for(i=0;i<40;i++)
{
if(i==0)
{
printf("┏");
}
else if(i==39)
{
printf("┓");
}
else
{
printf("━");
}
}
}
else if(j==1)
{
printf("┃");
for(k=0;k<26;k++)
{
printf(" ");
}
printf("欢迎进入学生信息管理系统");
for(i=0;i<26;i++)
{
printf(" ");
}
printf("┃");
}
else if(j==2)
{
printf("┣");
for(k=0;k<38;k++)
{
printf("━");
}
printf("┫");
}
else if(j==10)
{
printf("┃");
for(i=0;i<76;i++)
{
if(i==20)
{
switch(e)
{
case 0: printf("请输入要输入的学生数");i+=19;break;
case 1: printf("请输入四位数学号");i+=15;break;
case 2: printf("输入错误,请重新输入");i+=19;break;
case 3: printf("学号已存在,请重新输入");i+=21;break;
case 4: printf("请输入姓名,性别,年龄,C成绩,C++成绩");i+=37;break;
case 5: printf("目前有%d个数据,你想插入那个位置后面?", r);i+=35;break;
case 6: printf("请输入要删除的学生号数");i+=21;break;
case 7: printf("请输入要查找的学号:");i+=19;break;
case 8: printf("请输入要修改学生的学号:");i+=22;break;
}
}
else
{
printf(" ");
}
}
printf("┃");
}
else if(j==18)
{
for(i=0;i<40;i++)
{
if(i==0)
{
printf("┣");
}
else if(i==39)
{
printf("┫");
}
else
{
printf("━");
}
}
}
else if(j==19)
{
printf("┃");
for(k=0;k<26;k++)
{
printf(" ");
}
if(e==5)
{
printf(" 插入学生信息数据");
}
else if(e==6)
{
printf(" 删除学生信息数据");
}
else if(e==7)
{
printf(" 查找学生信息数据");
}
else
{
printf("选择1-7数字进行操作");
}
for(i=0;i<31;i++)
{
printf(" ");
}
printf("┃");
}
else
{
printf("┃");
for(i=0;i<76;i++)
{
printf(" ");
}
printf("┃");
}
printf("\n");
}
for(i=0;i<40;i++)
{
if(i==0)
{
printf("┗");
}
else if(i==39)
{
printf("┛");
printf("\n");
printf("请输入:");
}
else
{
printf("━");
}
}
}
int main()
{
int n;
r=loading();
system("color F3");
system("mode con cols=90 lines=28");
for(;;)
{
jiemian();
scanf("%d",&n);
if(n>8||n<1)
printf("输入错误,请重新输入!!!");
printf("\n\n\n\n");
system("cls");
if(n>0&&n<9)
{
switch(n)
{
case 1:finput();break;
case 2:foutput();break;
case 3:fchange();break;
case 4:fsearch();break;
case 5:fsort();break;
case 6:fdelete();break;
case 7:finsert();break;
case 8:printf("\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\n");
printf(" 谢谢使用! \n");
printf(" 再见! \n");
printf("\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\n");
exit(0); //正常退出所有文件
}
}
else
{
printf("\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\n");
printf("\4\4\4\n");
printf("\4 输入错误! \4\n");
printf("\4 请退出! \4\n");
printf("\4\4\4\n");
printf("\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\n");
break;
}
}
}