⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 99.cpp

📁 能够实现学生成绩的信息管理
💻 CPP
字号:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<malloc.h>
#define SWN 3
#define NAMELEN 20
#define CODELEN 10
#define FNAMELEN 80
#define BUFLEN 80
char schoolwork[SWN][NAMELEN+1]={"Chinese","Mathematic","English"};
struct record
{
 char name[NAMELEN+1];
 char code[CODELEN+1];
 int marks[SWN];
 int total;
}stu;

struct node
{
  char name[NAMELEN+1];
  char code[CODELEN+1];
  int marks[SWN];
  int total;
  struct node *next;
}*head;
int total[SWN];
FILE *stuf[FNAMELEN];
int readrecord(FILE *fpt,struct record *rpt)
{
  char buf[BUFLEN];
  int i;
  if(fscanf(fpt,"%s",buf)!=1)
     return 0;
  strncpy(rpt->name,buf,NAMELEN);
  fscanf(fpt,"%s",buf);
  for(i=0;i<SWN;i++)
     fscanf(fpt,"%d",&rpt->marks[i]);
  for(rpt->total=0,i=0;i<SWN;i++)
     rpt->total+=rpt->marks[i];
  return 1;
}
writerecord(FILE*fpt,struct record*rpt)
{
 int i;
 fprintf(fpt,"%s\n",rpt->name);
 fprintf(fpt,"%s\n",rpt->code);
 for(i=0;i<SWN;i++)
    fprintf(fpt,"%d\n",rpt->marks[i]);
 return ;
}
displaystu(struct record*rpt)
{
 int i;
 printf("\nName : %s\n",rpt->name);
 printf("Code : %s\n",rpt->code);
 printf("Marks :\n");
 for(i=0;i<SWN;i++)
    printf("%-15s : %4d\n",schoolwork[i],rpt->marks[i]);
 printf("Total : %4d\n",rpt->total);
}
int totalmark(char*fname)
{
 FILE *fp;
 struct record s;
 int count,i;
 if((fp=fopen(fname,"r"))==NULL)
 {
  printf("Can't open file %s.\n",fname);
  return 0;
 }
 for(i=0;i<SWN;i++)
    total[i]=0;
 count=0;
 while(readrecord(fp,&s)!=0)
 {
  for(i=0;i<SWN;i++)
     total[i]+=s.marks[i];
  count++;
 }
 fclose(fp);
 return count;
}
void liststu(char *fname)
{
 FILE *fp;
 struct record s;
 if((fp=fopen(fname,"r"))==NULL)
 {
  printf("Can't open file %s.\n",fname);
  return ;
 }
 while(readrecord(fp,&s)!=0)
 {
  displaystu(&s);
  printf("\n  Press ENTER to continue...\n");
  while(getchar()!='\n');
 }
 fclose(fp);
 return;
}
struct node*makelist(char*fname)
{
 FILE *fp;
 struct record s;
 struct node *p,*u,*v,*h;
 int i;
 if((fp=fopen(fname,"r"))==NULL)
 {
  printf("Can't open file %s.\n",fname);
  return NULL;
 }
 h=NULL;
 p=(struct node *)malloc(sizeof(struct node));
 while(readrecord(fp,(struct record*)p)!=0)
 {
  v=h;
  while(v&&p->total<=v->total)
  {
   u=v;
   v=v->next;
  }
  if(v==h)
     h=p;
  else
     u->next=p;
     p->next=v;
     p=(struct node*)malloc(sizeof(struct node));
 }
 free(p);
 fclose(fp);
 return h;
}
void displaylist(struct node *h)
{
 while(h!=NULL)
 {
  displaystu((struct record*)h);
  printf("\n  Press ENTER to continue...\n");
  while(getchar()!='\n');
  h=h->next;
 }
 return;
}
int retrievebyn(char *fname,char *key)
{
 FILE *fp;
 int c;
 struct record s;
 if((fp=fopen(fname,"r"))==NULL)
 {
  printf("Can't open file %s.\n",fname);
  return 0;
 }
 c=0;
 while(readrecord(fp,&s)!=0)
 {
  if(strcmp(s.name,key)==0)
  {
   displaystu(&s);
   c++;
  }
 }
 fclose(fp);
 if(c==0)
    printf("The student %s is not in the file %s.\n",key,fname);
 return 1;
}
int retrievebyc(char *fname,char *key)
{
  FTLE *fp;
  int c;
  struct record s;
  if((fp=fopen(fname,"r"))==NULL)
  {
   printf("Can't open file %s.\n",fname);
   return 0;
  }
  c=0;
  while (readrecord(fp,&s)!=0)
  {
   if(strcmp(s.code,key)==0)
   {
    displaystu(&s);
    c++;
    break;
   }
  }
  fclose(fp);
  if(c==0)
    printf("The student %s is not in the file %s.\n",key,fname);
    return 1;
}
main()
{
 int i,j,n;
 char c;
 char buf[BUFLEN];
 FILE *fp;
 struct record s;
 printf("please input the students marks record file's name:");
 scanf("%s",stuf);
 if((fp=fopen(stuf,"r"))==NULL)
 {
  printf("The file %s doesn't exit,do you want to creat it?(Y/N)",stuf);
  getchar();
  if(c=='Y'||c=='y')
  {
   printf("Please input the record number you want to write to the file :");
   scanf("%d",&n);
   for(i=0;i<n;i++)
   {
    printf("Input the student's name :");
    scanf("%s",&s.name);
    printf("Input the student's code :");
    scanf("%s",&s.code);
    for(j=0;j<SWN;j++)
    {
     printf("Input the %s marks :",schoolwork[j]);
     scanf("%d",&s.marks[j]);
    }
    writerecord(fp,&s);
   }
   fclose(fp);
  }
}
fclose(fp);
getchar();
/*clrscr();*/
puts("Now you can input a command to manage the records.");
puts("m: mean of the marks.");
puts("t: total of the marks.");
puts("n: search record by student's name.");
puts("l: list all the records.");
puts("s: sort and list the records by the total.");
while(1)
{
 puts("please input command:");
 scanf("%c",&c);
 if(c=='q'||c=='Q')
 {
  puts("\n  Thank you for your using.");
  break;
 }
 switch(c)
 {
  case'm':
  case'M':
      if((n=totalmark(stuf))==0)
      {
       puts("Error!");
       break;
      }
      printf("\n");
      for(i=0;i<SWN;i++)
printf("%-15s's average is :%.2f/n",schoolwork[i],(float) total[i]/n);
      break;
  case't':
  case'T':
      if((n=totalmark(stuf))==0)
      {puts("Error !");
       break;
      }
      printf("\n");
      for(i=0;i<SWN;i++)
	 printf("%-15s's total mark is :%d.\n",schoolwork[i],total[i]);
      break;
  case'n':
  case'N':
      printf("Please input the student's name you want to search :");
      scanf("%s",buf);
      retrievebyn(stuf,buf);
      break;
  case'c':
  case'C':
      printf("please input the student's code you want to search :");
      scanf("%s",buf);
      retievebyc(stuf,buf);
      break;
  case'l':
  case'L':
      liststu(stuf);
      break;
  case's':
  case'S':
      if((head=makelist(stuf))!=NULL)
	displaylist(head);
      break;
  default: break;
  }
 }
}








⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -