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

📄 004.cpp

📁 用C语言编写的学生成绩管理系统,可实现学生成绩的录入,查找,删除,修改等操作.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>
#include<dos.h>
#include<stdlib.h>   /*其它说明*/
#include<string.h>   /*字符串函数*/
#include<ctype.h>    /*字符操作函数*/
#include<malloc.h>    /*动态地址分配函数*/

#define LEN sizeof(STUDENT)
typedef struct stu   
{ char num[6];
  char name[5];
  int score[3];
  int sum;
  float average;
  int order;
  struct stu *next;
}STUDENT;

char *string[]={"*       L=List all records                         *",
                "*       D=Delete a record selected by number       *",
                "*       A=Append records                           *",
                "*       I=Insert records                           *",
                "*       R=Alter records                            *",
                "*       E=Search records                           *",
                "*       S=Sort records                             *",
                "*       H=Show this help message                   *",
                "*       V=Save records to a file                   *",
                "*       O=Load records from a file                 *",
                "*       C=Clear screen                             *",
                "*       Q=Quit System                              *"};

/*函数原型*/
STUDENT  *init();    /*初始化函数*/
char menu();   /*菜单函数*/
void list(STUDENT *head);   /* 显示全部记录*/
void search(STUDENT *head);    /*查找记录*/
STUDENT *DelRecord(STUDENT *head);   /*删除记录*/
STUDENT *sort(STUDENT *head);    /*排序*/
STUDENT *insert();   /*插入记录*/
STUDENT  *append(STUDENT *head);
void AltRecord(STUDENT *head);
void save(STUDENT *head);     /*保存文件*/
STUDENT *load();        /*读文件*/
void show();
/***********退出程序******************/
void quit()
{
    char ch;
     STUDENT *head;
    printf("!!!save?y/n");
    ch=getchar();
    if(ch=='y'||ch=='Y')
        save(head);
    exit(0);
}

char menu()
{
  int i;

  char n;
 printf("********************************************************************************\n");

  printf("*                         Student System Command Help                          *\n");
  printf("\n\n");
  printf("********************************************************************************\n");
  for(i=0;i<12;i++){
    printf("\t%s",string[i]);
    printf("\n");
    }
  printf("********************************************************************************\n");
  printf("\n\t\t\tEnter your choice:");
  while(n<'A'||n>'z')
    scanf("%c",&n);      

   return(n);           
}
/*主函数界面*/
void main()
{
    STUDENT *head;
    head=init();       
/*	head=insert(); */
   for(;;)            
    {switch(menu())
      {   
		case 'l':
		case 'L':list(head);               break;
		case 'd':
		case 'D':head=DelRecord(head);         break;
		case 'a':
        case 'A':append(head);          break;  
		case 'i':
		case 'I':head=insert();         break;
		case 'r':
		case 'R':AltRecord(head);       break;
		case 'e':
		case 'E':search(head);         break;
		case 's': 
		case 'S':sort(head);           break;
        case 'h':
        case 'H':show();               break;   
		case 'v':
		case 'V':save(head);           break;
		case 'o':
		case 'O':head=load();           break;
		case 'c':
		case 'C':system("cls");getchar();          break;    
		case 'q':
		case 'Q':quit();              break;
      }
   }
}

/*初始化函数*/
STUDENT *init()
{
 return NULL;  
}





/*输入函数*/
STUDENT *insert()
{printf("Please input the student's dadas first:\n");
	int i,s;

 STUDENT *head=NULL,*p;  

 for(;;)
   {p=(STUDENT *)malloc(LEN); 
    if(!p)   
      {printf("\nOut of memory.");   
       return (head);  /*返回头指针,下同*/
      }
    printf("Enter the num(#:list end):"); 
    scanf("%s",p->num);
    if(p->num[0]=='#') break;    /*如果学号首字符为#则结束输入*/
    printf("Enter the name:");
    scanf("%s",p->name);
    printf("Please enter the %d scores\n",3);  /*提示开始输入成绩*/
    s=0;                /*计算每个学生的总分,初值为0*/
    for(i=0;i<3;i++)    /*3门课程循环3次*/
      {
       do{
      printf("score%d:\n",i+1);
      scanf("%d",&p->score[i]);
      if(p->score[i]<0 || p->score[i]>100)   /*确保成绩在0~100之间*/
      printf("Data error,please enter again.\n");
     }while(p->score[i]<0 || p->score[i]>100);
     s=s+p->score[i];   /*累加各门成绩*/
      }
      p->sum=s;     /*将总分保存*/
      p->average=(float)s/3;  /*先用强制类型转换将s转换成float型,再求平均值*/
      p->order=0;             /*未排序前此值为0*/
      p->next=head;           /*将头结点做为新输入结点的后继结点*/
      head=p;                 /*新输入结点为新的头结点*/
   }
   return(head);  
}

/* 显示全部记录函数*/
void list(STUDENT *head)
{int i=0;     /* 统计记录条数*/
 STUDENT *p;  /*移动指针*/
 
 p=head;      /*初值为头指针*/
 printf("\n************************************STUDENT************************************\n");
 printf("-------------------------------------------------------------------------------\n");
 printf(" Rec    Num      Name     Sc1    Sc2    Sc3    Sum     Ave    Order \n");
 printf("-------------------------------------------------------------------------------\n");
 while(p!=NULL)
   {
    i++;
    printf(" %3d   %4s      %-4s     %3d    %3d    %3d    %3d    %4.2f    %-5d\n", 
    i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
    p=p->next;
   }
 printf("-------------------------------------------------------------------------------\n");
 printf("**************************************END**************************************\n");
}

/*查找记录函数*/
void search(STUDENT *head)
{STUDENT *p;    /*  移动指针*/
 char s[6]; 
 printf("Please enter the Student's Number for searching.\n");
 scanf("%s",s);
 p=head;    /*将头指针赋给p*/
 while((strcmp(p->num,s)==0)&& p != NULL)  /*当记录的姓名不是要找的,或指针不为空时*/
   p=p->next;     /*移动指针,指向下一结点*/
   if(p!=NULL)         /*如果指针不为空*/
   {printf("\n*************************************FOUND************************************\n");
    printf("-------------------------------------------------------------------------------\n");
    printf("     Num        Name      sc1    sc2    sc3    Sum     Ave    Order \n");
    printf("-------------------------------------------------------------------------------\n");
    printf("     %4s       %4s      %3d    %3d    %3d    %3d    %4.2f    %-5d\n",
    p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
    printf("-------------------------------------------------------------------------------\n");
    printf("***************************************END**************************************\n");
    }
   else
     printf("\nThere is no num %s student on the list.\n",s);   /*显示没有该学生*/
}
/*修改记录函数*/
void AltRecord(STUDENT *head)
{STUDENT *p;    /*  移动指针*/
 char c[6]; 
 int i,s;

 printf("Please enter the Student's Number for alter.\n");
 scanf("%s",c);
 p=head;    /*将头指针赋给p*/
 while((strcmp(p->num,c)==0)&&p != NULL)  /*当记录的姓名不是要找的,或指针不为空时*/
   p=p->next;     /*移动指针,指向下一结点*/
   if(p!=NULL)         /*如果指针不为空*/
   {printf("The old datas:\n");
    printf("\n************************************STUDENT************************************\n");
    printf("-------------------------------------------------------------------------------\n");
    printf("Num      Name     Sc1    Sc2    Sc3    Sum     Ave    Order \n");
    printf("-------------------------------------------------------------------------------\n");
	printf("%4s      %-4s     %3d    %3d    %3d    %3d    %4.2f    %-5d\n", 
    p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);

	printf("Please input the new datas:\n");
	scanf("%s",p->num);
    printf("Enter the name:");
    scanf("%s",p->name);
    printf("Please enter the %d scores\n",3);  /*提示开始输入成绩*/
    s=0;                /*计算每个学生的总分,初值为0*/
    for(i=0;i<3;i++)    /*3门课程循环3次*/
      {
       do{
      printf("score%d:\n",i+1);
      scanf("%d",&p->score[i]);

⌨️ 快捷键说明

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