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

📄 ok2.txt

📁 一个不错的不错的学生成绩管理系统
💻 TXT
字号:
#include<stdio.h>
#include<conio.h>
#define PAUSE printf("\n 按任意键继续...");getch();
#define len sizeof(struct student)
#define null 0

struct student
{double num;
 char name[10];
 int class;
 float score[5];
 struct student *next;
};
struct student *head=null;
struct student *p1,*p2;
int n=0; /*n为结点个数*/
char *subject[]={"英语","高等数学","C语言","物理","法律"}; /*定义成绩科目*/

main()  /*主函数*/
{float temp;
char menu;
menu='1';
textbackground(1);
textcolor(10);
while(menu!='0')
{clrscr();
 printf("\n\n\n\n\n\n");
 printf("                       学生成绩管理系统\n");
 printf("              *******^_^******************^_^*******\n");
 printf("                  1.创建新的成绩记录.\n");
 printf("                  2.查询已有的记录.\n");
 printf("                  3.修改成绩记录.\n");
 printf("                  4.导入已存在的记录.\n");
 printf("                  5.统计所有记录.\n");
 printf("                  6.列出所有记录.\n");
 printf("                  0.退出.\n");
 printf("              *******^_^******************^_^*******\n");
 printf("                           请选择按键(0-6)操作:");
 scanf(" %c",&menu);
  switch(menu)
  {case '1':input();break;
   case '2':search();break;
   case '3':modify();break;
   case '4':load();break;
   case '5':gather();break;
   case '6':show_all();break;
   case '0':menu='0';break;
   default:printf("\n 输入超出范围,请键入0-6.\n\n");
           PAUSE;
  }
 }
}
search()
{char menu_4='1';
 while(menu_4!='0')
{clrscr();
 printf("\n\n\n\n\n\n");
printf("                             查询成绩\n");
printf("             ***********************************************\n");
printf("                 1.按学号查询.\n");
printf("                 2.按姓名查询.\n");
printf("                 3.按班级查询.\n");
printf("                 4.按课程查询.\n");
printf("                 0.退回主菜单.\n");
printf("             ***********************************************\n");
printf("                         请选择按键(0-4)操作:");
scanf(" %c",&menu_4);
 switch(menu_4)
  {case '1':search_num();break;
   case '2':search_nam();break;
   case '3':search_class();break;
   case '4':search_subj();break;
   case '0':menu_4='0';break;
   default :printf("\n 输入超出范围,请键入0-4!\n\n");}
if(menu_4!='0') {PAUSE;}
}
}
 search_num()
 {int i,t,class,flag,k;
 double num;
 char name[10];
     printf("请输入学号:"); 
	  scanf("%lf",&num);
	 headline();
	p1=head;flag=0;
            while(p1!=null)
	       {if(p1->num==num)
		   {flag=1;
		    printf(" %-15.0lf%-3d %-10s",p1->num,p1->class,p1->name);
                    for(t=0;t<5;t++)
		      printf("%4.1f ",p1->score[t]);
		    printf("\n");}
		p1=p1->next;}
	    if(flag==0) printf("对不起!不能找到该记录.\n");
           return;}
  search_nam()
  {int i,t,class,flag,k;
    double num;
     char name[10];
            printf("请输入姓名:"); 
            scanf("%s",name);
            headline();
            p1=head;flag=0;
            while(p1!=null)
	      {if(strcmp(p1->name,name)==0)
		  {flag=1;
		   printf(" %-15.0lf%-3d %-10s",p1->num,p1->class,p1->name);
                   for(t=0;t<5;t++)
                      printf("%4.1f    ",p1->score[t]);
                   printf("\n");}
	       p1=p1->next;}
            printf("\n");
	    if(flag==0) printf("   对不起!不能找到该记录.\n");
             return;}
search_class()
{int i,t,class,flag,k;
 double num;
 char name[10];

  printf("请输入班级名称:");
	    scanf("%d",&class);
            headline();
            p1=head;flag=0;k=0;
            while(p1!=null)
	      {if(p1->class==class)
		  {flag=1;k++;
		   printf(" %-15.0lf%-3d %-10s",p1->num,p1->class,p1->name);
                   for(t=0;t<5;t++)
		      printf("%4.1f    ",p1->score[t]);
                   printf("\n");
                                   }
               p1=p1->next;}
            printf("\n");
	    if(flag==0) printf("   对不起!不能找到该记录.\n");
             return;}
search_subj() 
 {int i,t,k;
       for(t=0;t<5;t++)  /*按科目查找*/
	printf("\n  %d : %s",t,subject[t]);
	  printf("\n请输入该课程:");
	    scanf("%d",&i);
	    if(i<=4&&i>=0)
	    {headline();
	     p1=head;k=0;
	     while(p1!=null)
	      {k++;
	       printf(" %-15.0lf%-3d %-10s",p1->num,p1->class,p1->name);
	       for(t=0;t<9*i;t++) printf(" ");
	       printf("%5.1f\n",p1->score[i]);
	      if(k%20==0) {printf(" 按任意键继续...\n"); getch();}/*若记录超过一个屏幕,则暂停显示*/
              p1=p1->next;}
	      printf("\n");}
	    else printf("错误!\n");}
input() /*输入函数*/
{float temp;
int i,flag,x;char t,x1;
struct student *p3;
if(head!=null)
  {printf(" 检查系统中是否有记录\n");/*检查内存中是否有数据*/
  printf("   1 - 创建新记录.\n   2 - 继续编辑该记录.\n   0 - 退出.\n");
  printf("  请选择按键(0-2)操作:");
  scanf("%d",&x); /*询问若内存中有数据如何处理*/
  if(x==1)/*创建新数据库*/
    {printf("\n        警告! 如果存入,原有记录将被代替.\n" );
     printf("\n继续吗?(y/n)");
     scanf("  %c",&x1);
     if(x1=='Y'||x1=='y')
       {head=null;n=0;
	p1=p2=(struct student*)malloc(len);}
      else return; }
  else if(x==2)/*继续往已有的记录中添加数据*/
    {p2=head;
     while((p2->next)!=null)
        p2=p2->next;
     p1=(struct student*)malloc(len);}
  else if(x!=1||x!=2) return;/*如果没有选择1或2则退出函数*/
  }
else  p1=p2=(struct student*)malloc(len);
   printf("\n  (Num=0  Exit)\n");
   printf("学号:");  /*输入学号*/
   scanf("%lf",&p1->num);
   while(p1->num!=null)
   {for(flag=0,p3=head,i=0;i<n;i++)
     { if(p1->num==p3->num)  /*判断输入的学号是否已经存在*/
          {printf("对不起,该记录已存在.\n");
	   free(p1);  /*如已经存在,则释放已建立的无用空间*/
	   flag=1; }  /*若存在则标记为1*/
       p3=p3->next;
     }
    if(flag!=1) /*如果无重复学号则继续*/
     { printf("姓名:");   /*输入姓名*/
       scanf("%s",&p1->name);
       printf("班级:");
       scanf("%d",&p1->class);  /*输入班级*/
       for(i=0;i<=4;i++)
        {printf("%s:",subject[i]);
         scanf("%f",&temp);   /*输入成绩*/
         p1->score[i]=temp;}
         n++;
       if(n==1) head=p1;
         else p2->next=p1;
         p2=p1; }
        p1=(struct student*) malloc(len);
        printf("\n学号:");
        scanf("%lf",&p1->num);
      }
p2->next=null;
save();
return;
}
modify() /*修改输入*/
{char menu_2='1';
 while(menu_2!='0')
{clrscr();
 printf("\n\n\n\n\n\n");
 printf("                           修改记录\n");
 printf("               ************************************\n");
 printf("                  1.删去原有记录.\n");
 printf("                  2.插入记录.\n");
 printf("                  3.修改记录.\n");
 printf("                  0.回到主菜单.\n");
 printf("               ************************************\n");
 printf("                          请选择按键(0-3)操作:");
 scanf(" %c",&menu_2);
 switch(menu_2)
  {case '1':delete();break;
   case '2':insert();break;
   case '3':modify_1();break;
   case '0':menu_2='0';break;
   default :printf("\n 输入超出范围,请键入0-3.\n\n");
   }
 }
}
delete()  /*删除记录*/
{int t=n;
double num;
printf("输入你要删的学号:");
scanf("%lf",&num);
p1=head;
if(num==p1->num)
   {head=head->next;free(p1);n--;}
      else
        while(p1!=null)
            {if((p1->next)->num==num)
               {p2=p1->next;p1->next=(p1->next)->next;
                free(p2);n--;break;}
             p1=p1->next;}
if(t==n) {printf("不能找到该学号!\n\n");
	  PAUSE;return;}/*根据n是否改变判断是否删除成功*/
  else {printf("删除 Ok!!!\n\n");save();}
}

insert() /*插入函数*/
{int i,j,t,flag=0;struct student *p3;
 float temp;
 printf("Input i(1-%d):",n);
 scanf("%d",&i);
 if((i<1)||(i>n))
   {printf("错误!\n 按任意键继续...");getche();}
  else
    {p2=(struct student*)malloc(len);
     printf("Num:");  scanf("%lf",&p2->num);
     if(p2->num==0) {printf(" 对不起,学号不能为0 !\n");getch();free(p2);return;} /*判断插入的学号是否为零*/
     for(flag=0,p3=head,t=0;t<n;t++)
	{if(p2->num==p3->num)  /*判断输入的学号是否已经存在*/
	    {printf("对不起,该记录已存在!\n");
	     free(p2);  /*如已经存在,则释放已建立的无用空间*/
	     flag=1;
	     PAUSE;
	     break;}
	  p3=p3->next;}
     if(flag!=1)  /*如果符合插入条件则插入记录*/
        {printf("姓名:"); scanf("%s",&p2->name);
         printf("班级:");scanf("%d",&p2->class);
         for(t=0;t<=4;t++)
            {printf("%s:",subject[t]);
             scanf("%f",&temp);
             p2->score[t]=temp;}
         if(i==1)
	    {p2->next=head;head=p2;printf("\n插入 Ok!\n");n++;save();}
          else
            {i--;j=1;p1=head;
            while(j<i)
	       {p1=p1->next;j++;}
            p2->next=p1->next;
            p1->next=p2;
	    printf("\n插入 Ok!\n");n++;save();}
     }
 }
}

modify_1() /*修改记录*/
{double num;int t,flag=0;float temp;
 printf("请输入学号:");
 scanf("%lf",&num);
 p1=head;
 while(p1!=null)
   {if(p1->num==num)
     {flag=1; /*设定修改标志*/
      printf("姓名:"); scanf("%s",&p1->name);
      printf("班级:");scanf("%d",&p1->class);
      for(t=0;t<=4;t++)
        {printf("%s:",subject[t]);
         scanf("%f",&temp);
	 p1->score[t]=temp;}
     }
    p1=p1->next;
   }
if(flag==1) {printf("\n修改OK!!\n");save();} /*根据修改标志flag判断是否找到记录*/
 else {printf("\n不能找到该记录!\n");
       PAUSE;} 
}
 gather()
{char menu_3='1';
 while(menu_3!='0')
{clrscr();
 printf("\n\n\n\n\n\n");
 printf("                           成绩总汇\n");
 printf("               ************************************\n");
 printf("                  1.个人总成绩.\n");
 printf("                  2.班级总成绩.\n");
 printf("                  3.年级总成绩.\n");
 printf("                  0.回到主菜单.\n");
 printf("               ************************************\n");
 printf("                            请选择按键(0-3)操作:");
 scanf(" %c",&menu_3);
 switch(menu_3)
  {case '1':gather_per();break;
   case '2':gather_class();break;
   case '3':gather_grade();break;
   case '0':menu_3='0';break;
   default :printf("\n 输入超出范围,请键入0-3!\n\n");}
if(menu_3!='0') {PAUSE;}
}
}


gather_per() /*个人汇总*/
{float aver=0,sum=0;
int t,i;
if(head==null) return;/*若无数据则返回*/
p1=head;
printf("********************************************************************************\n");
printf("学号        班级 姓名        英语  高等数学 C语言  物理   法律     平均   总分  \n");
printf("********************************************************************************\n");
for(i=0;i<n;i++,sum=0)
  {for(t=0;t<5;t++)
     sum=sum+p1->score[t];
   aver=sum/5;
   printf("%-13.0lf%-4d%-12s",p1->num,p1->class,p1->name);
   for(t=0;t<5;t++)
     printf("%-5.1f  ",p1->score[t]);
   printf(" %5.1f  ",aver);
   printf("%5.1f\n",sum);
  if((i+1)%20==0) {printf(" 按任意键进入下一页...\n"); getch();}/*若记录超过一个屏幕,则暂停显示*/
  p1=p1->next;
  }
}

gather_class() /*班汇总*/
{int class,k=0,t,i,flag,x;
float max,min,sum=0,aver;
printf("Class :");
scanf("%d",&class);
printf(" *****************************************************************************\n");
printf(" 

⌨️ 快捷键说明

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