信息管理系统

时间:2022-10-30 21:45:47

学C语言有一段时间了,自己写了个学生成绩管理系统,不完善。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
struct Student
{
  char ID[20];
  char name[20];
  float chinese;
  float math;
  float english;
  float total;
  int rank;
};
void input()      //学生信息录入
{
   FILE *fp;
   struct Student stu[N];
   int m=0;
   int i;
   int j=1;
   char n; 
   if((fp=fopen("E:\\file_1.txt","rb+"))==NULL)
   {
     printf("cannot open file\n");
exit(1);


   }
   while(!feof(fp))
   {
     fread(&stu[m],sizeof(struct Student),1,fp);
m++;
   }
   for(;m<N;m++)
   {
     system("cls");
if(m>=2)
{
while(1)
{
  for(i=0;i<m-1;i++)
       if(!strcmp(stu[m-1].ID,stu[i].ID))
{
      printf("信息录入有误,请重新输入:\n");
               printf("学号:");
               scanf("%s",&stu[m-1].ID);
          printf("姓名:");
          scanf("%s",&stu[m-1].name);
          printf("语文成绩:");
          scanf("%f",&stu[m-1].chinese);
          printf("数学成绩:");
          scanf("%f",&stu[m-1].math);
          printf("英语成绩:");
          scanf("%f",&stu[m-1].english);
}
for(i=0;i<m-1;i++)
if(!strcmp(stu[m-1].ID,stu[i].ID))
j=0;
if(j==1&&i==(m-1))
                   break;
}
}
printf("输入学生信息\n");
     printf("学号:");
     scanf("%s",&stu[m].ID);
printf("姓名:");
scanf("%s",&stu[m].name);
printf("语文成绩:");
scanf("%f",&stu[m].chinese);
printf("数学成绩:");
scanf("%f",&stu[m].math);
printf("英语成绩:");
scanf("%f",&stu[m].english);
if(fwrite(&stu[m],sizeof(struct Student),1,fp)!=1)
printf("file write error\n");
printf("继续输入?(y/n):");
scanf("%s",&n);
if(n=='n'||n=='N')
     break;
else
continue;
   }
   fclose(fp);
}
void show()   //学生信息展示
{
  FILE *p;
  struct Student stu[N];
  int i=0;
  int m=0;
  if((p=fopen("E:\\file_1.txt","rb"))==NULL)
  {
     printf("cannot open file\n");
     exit(1);
  }
  while(!feof(p))
   {
     fread(&stu[m],sizeof(struct Student),1,p);
m++;
   }
  for(i=0;i<m-1;i++)
  {
     printf("%s %s %.1f %.1f %.1f\n",stu[i].ID,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english);
  }
  fclose(p);
}
void serach()   //查询或修改学生的信息
{
   FILE *p;
  struct Student stu[N];
  int i,j=2000;
  int m=0;
  char id[20];
  char flag;
  printf("请输入你要查询的学生的学号:");
  scanf("%s",&id);
  if((p=fopen("E:\\file_1.txt","rb+"))==NULL)
  {
     printf("cannot open file\n");
     exit(1);
  }
  while(!feof(p))
   {
     fread(&stu[m],sizeof(struct Student),1,p);
m++;
   }
  for(i=0;i<m-1;i++)
  {
 if(!strcmp(id,stu[i].ID))
 {
   printf("学号:%s\n",stu[i].ID);
        printf("姓名:%s\n",stu[i].name);
   printf("语文成绩:%.1f\n",stu[i].chinese);
        printf("数学成绩:%.1f\n",stu[i].math);
   printf("英语成绩:%.1f\n",stu[i].english);
   j=i;
 }
  }
  if(j==2000)
 printf("查无此人\n");
  if(j!=2000)
  while(1)
  { printf("是否修改?(y/n):");
    scanf("%s",&flag);
    if(flag=='Y'||flag=='y')
   {
     printf("输入学生信息\n");
     printf("学号:");
     scanf("%s",&stu[j].ID);
printf("姓名:");
scanf("%s",&stu[j].name);
printf("语文成绩:");
scanf("%f",&stu[j].chinese);
printf("数学成绩:");
scanf("%f",&stu[j].math);
printf("英语成绩:");
scanf("%f",&stu[j].english);
    }
if(flag=='N'||flag=='n')
break;
  }
  rewind(p);
  for(i=0;i<m-1;i++)
if(fwrite(&stu[i],sizeof(struct Student),1,p)!=1)
printf("file write error\n");
  fclose(p);
}
void count()
{
  FILE *p;
  struct Student stu[N];
  int m=0;
  if((p=fopen("E:\\file_1.txt","rb+"))==NULL)
  {
     printf("cannot open file\n");
     exit(1);
  }
  while(!feof(p))
   {
     fread(&stu[m],sizeof(struct Student),1,p);
m++;
   }
   m--;
   printf("记录学生人数:%d\n",m);
}
void del()
{
  FILE *p,*ftp;
  struct Student stu[N];
  char ch[20];
  int m=0;
  int i;
  int flag;
  count();
  show();
  printf("输入要删除学生的学号:");
  scanf("%s",&ch);
  if((p=fopen("E:\\file_1.txt","rb+"))==NULL)
  {
     printf("cannot open file\n");
     exit(1);
  }
  while(!feof(p))
   {
     fread(&stu[m],sizeof(struct Student),1,p);
m++;
   }
  for(i=0;i<m-1;i++)
 if(!strcmp(ch,stu[i].ID))
 flag=i;
  for(i=flag;i<m-2;i++)
  {
    strcpy(stu[i].ID,stu[i+1].ID);
    strcpy(stu[i].name,stu[i+1].name);
    stu[i].chinese=stu[i+1].chinese;
stu[i].math=stu[i+1].math;
stu[i].english=stu[i+1].english;
  }
  fclose(p);
  if((ftp=fopen("E:\\file_1.txt","wb+"))==NULL)
  {
    printf("cannot open file\n");
exit(1);
  }
  for(i=0;i<m-2;i++)
if(fwrite(&stu[i],sizeof(struct Student),1,ftp)!=1)
printf("file write error\n");
  fclose(ftp);
}
void insert()
{
  FILE *p,*ftp;
  struct Student stu[N];
  int m=0;
  int i,j;
  int flag;
  char ch[20];
  if((p=fopen("E:\\file_1.txt","rb+"))==NULL)
  {
     printf("cannot open file\n");
     exit(1);
  }
  while(!feof(p))
   {
     fread(&stu[m],sizeof(struct Student),1,p);
m++;
   }
  show();
  printf("你要插入那个学生后?输入学号:");
  scanf("%s",&ch);
  for(i=0;i<m-1;i++)
 if(!strcmp(ch,stu[i].ID))
 flag=i;
  for(i=m-2;i>flag;i--)
  {
     strcpy(stu[i+1].ID,stu[i].ID);
    strcpy(stu[i+1].name,stu[i].name);
    stu[i+1].chinese=stu[i].chinese;
stu[i+1].math=stu[i].math;
stu[i+1].english=stu[i].english;
  }
     j=flag+1;
     printf("输入学生信息\n");
     printf("学号:");
     scanf("%s",&stu[j].ID);
printf("姓名:");
scanf("%s",&stu[j].name);
printf("语文成绩:");
scanf("%f",&stu[j].chinese);
printf("数学成绩:");
scanf("%f",&stu[j].math);
printf("英语成绩:");
scanf("%f",&stu[j].english);
       fclose(p);
  if((ftp=fopen("E:\\file_1.txt","wb+"))==NULL)
  {
    printf("cannot open file\n");
exit(1);
  }
  for(i=0;i<m;i++)
if(fwrite(&stu[i],sizeof(struct Student),1,ftp)!=1)
printf("file write error\n");
  fclose(ftp);
}
void menu()
{
  int i;
  while(1)
  {
 system("cls");
 count();
      printf("----------------学生成绩管理-----------------\n");
 printf("\n");
      printf("                 1.录入学生信息\n");
      printf("                 2.查询学生信息\n");
      printf("                 3.删除学生信息\n");
      printf("                 4.插入学生信息\n");
      printf("                 5.退出系统\n");
 printf("\n");
      printf("---------------------------------------------\n");
      printf("                 请选择(1-5):");
      scanf("%d",&i);
 if(i==5)
 break;
      switch(i)
 {
    case 1:
{
   input();
break;
}
case 2:
{
  serach();
  break;
}
case 3:
{
  del();
  printf("删除后:\n");
  show();
  system("PAUSE");
}
case 4:
{
  insert();
  printf("插入后:\n");
               show();
  system("PAUSE");
}
default:
{
printf("输入有误\n");
    system("PAUSE");
}
 }
  }
}
int main()
{
  menu();
  return 0;
}