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

📄 成绩查询系统2.txt

📁 大一时的c语言的课程设计
💻 TXT
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define LEN sizeof(struct student)
#include <string.h>
#include <conio.h>
struct student
{float number;
char name[20];
float english;
float math;
float computer;
float sum;
float average;
long rank;
struct student *next;
};
typedef struct student files;
int n,k;/*n,k为全局变量,本程序中的函数均可以使用它*/

files *create() /*函数create功能:创建链表*/
{files *head,*p1,*p2,*p3;
int i;
n=0;
p1=p2=p3=(files *)malloc(LEN);
head=p3;
printf("请输入学生资料,输0退出!\n");
printf("请输入学生学号(学号应大于0):");/*输入学号,学号应大于0*/
scanf("%f",&p1->number);
if(p1->number==0) goto end; /*当输入的学号为0时,转到末尾,结束创建链表*/
printf("请输入学生姓名:");
           scanf("%s",&p1->name);
           printf("请输入英语成绩(0~100):");
           scanf("%f",&p1->english);
           while(p1->english<0||p1->english>100)
           {printf("输入错误,请重新输入英语成绩");
            scanf("%f",&p1->english);
           }
           printf("请输入数学成绩(0~100):");
           scanf("%f",&p1->math);
           while(p1->math<0||p1->math>100)
           {printf("输入错误,请重新输入数学成绩");
            scanf("%f",&p1->math);
           }
           printf("请输入计算机成绩(0~100):");
           scanf("%f",&p1->computer);
           while(p1->computer<0||p1->computer>100)
           {printf("输入错误,请重新输入计算机成绩");
            scanf("%f",&p1->computer);
           }
           p1->sum=p1->english+p1->math+p1->computer;
           p1->average=p1->sum/3;
           head=NULL;
           while(p1->number!=0)
           {n=n+1;
            if(n==1)  head=p1;
            else p2->next=p1;
            p2=p1;
            p1=(files *)malloc(LEN);
            printf("请输入学生资料,输0退出!\n");
    repeat2:printf("请输入学生学号(学号应大于0):");
            scanf("%f",&p1->number);
            if(p1->number==0)  goto end;  /*当输入的学号为0时,转到末尾,结束创建链表*/
            else
            {p3=head;
             if(n>0)
             {for(i=0;i<n;i++)
                {if(p1->number!=p3->number) p3=p3->next;
              else 
                    {printf("学号重复,请重输!\n");
                     goto repeat2;
                    }
                }     
             }          
            }
            printf("请输入学生姓名:");
            scanf("%s",&p1->name);/*输入学生姓名*/
            printf("请输入英语成绩(0~100):");
            scanf("%f",&p1->english);
            while(p1->english<0||p1->english>100)
            {printf("输入错误,请重新输入英语成绩");
             scanf("%f",&p1->english);
            }
            printf("请输入数学成绩(0~100):");
            scanf("%f",&p1->math);
            while(p1->math<0||p1->math>100)
            {printf("输入错误,请重新输入数学成绩");
             scanf("%f",&p1->math);
            }
            printf("请输入计算机成绩(0~100):");
            scanf("%f",&p1->computer);
            while(p1->computer<0||p1->computer>100)
            {printf("输入错误,请重新输入计算机成绩");
             scanf("%f",&p1->computer);
            }
            p1->sum=p1->english+p1->math+p1->computer;
            p1->average=p1->sum/3;
           }
      end:  
           p2->next=NULL;/*链表结尾*/
           printf("输入的学生数为:%d个!\n",n);
           return(head);
}

files *load(files *head)  /*函数load功能:从文件读入学生记录*/
{files *p1,*p2;
int m=n=0;
FILE *fp;
if((fp=fopen("stu.txt","r"))==NULL)
{printf("不能打开文件!\n");
  return 0;
}
m=m+1;  
if(m==1)
  {p1=(files *)malloc(LEN);  /*开辟一个新单元*/
   fscanf(fp,"%f%s%f%f%f%f%f%ld",&p1->number,p1->name,&p1->english,&p1->math,&p1->computer,&p1->sum,&p1->average,&p1->rank);
   head=NULL;printf("32654\n");
   do
  {n=n+1;
   if(n==1) head=p1;
   else p2->next=p1;
   p2=p1;
   p1=(files *)malloc(LEN);  /*开辟一个新单元*/    
   fscanf(fp,"%f%s%f%f%f%f%f%ld",&p1->number,p1->name,&p1->english,&p1->math,&p1->computer,&p1->sum,&p1->average,&p1->rank);
  }while(!feof(fp));
  p2->next=p1;
  p1->next=NULL;
  n=n+1; 
}
  fclose(fp);  /*结束读入,关闭文件*/
return (head);
}       

files *add(files *head,files *stu) /*函数add,功能:追加学生资料*/
{files *p0,*p1,*p2,*p3;
int i;
p1=stu=(files *)malloc(LEN);/*开辟一个新单元*/
printf("\n输入要增加的学生的资料!");
repeat4: printf("请输入学生学号(学号应大于0):");
          scanf("%ld",&stu->number); 
          if(stu->number==0)  goto end2;   /*当输入的学号为0时,转到末尾,结束追加*/
          else 
          {p3=head;
           if(n>0)
           {for(i=0;i<n;i++)
            {if(stu->number!=p3->number) p3=p3->next;
             else 
             {printf("学号重复,请重输!\n");
              goto repeat4;   /*当输入的学号已经存在,程序报错,返回前面重新输入*/
             }
            }     
           }          
          }
          printf("输入学生姓名:");
          scanf("%s",stu->name);           
          printf("请输入英语成绩(0~100):");
          scanf("%f",&p1->english);
          while(p1->english<0||p1->english>100)
          {printf("输入错误,请重新输入英语成绩");
           scanf("%f",&p1->english);
          }
          printf("请输入数学成绩(0~100):");
          scanf("%f",&p1->math);
          while(p1->math<0||p1->math>100)
          {printf("输入错误,请重新输入数学成绩");
           scanf("%f",&p1->math);
          }
          printf("请输入计算机成绩(0~100):");
          scanf("%f",&p1->computer);
          while(p1->computer<0||p1->computer>100)
          {printf("输入错误,请重新输入计算机成绩");
           scanf("%f",&p1->computer);
          }
          p1->sum=p1->english+p1->math+p1->computer;
          p1->average=p1->sum/3;
          p1=head;
          p0=stu;
          if(head==NULL)
            {head=p0;
             p0->next=NULL;
          }   /*当原来链表为空时,从首结点开始存放资料*/
          else     /*原来链表不为空*/
            {if(p1->next==NULL)  /*找到原来链表的末尾*/
                {p1->next=p0;
                 p0->next=NULL;  /*将它与新开单元相连接*/
                }
             else
                {while(p1->next!=NULL)  /*还没找到末尾,继续找*/
                    {p2=p1;
                     p1=p1->next;
                    }
                 p1->next=p0;
                 p0->next=NULL;
                }
            }
          n=n+1;
          p1=head;
          p0=stu; 
          end2:
          printf("现在的学生数为:%d个!\n",n);
          return(head);
}


files *del(files *head) /*函数del功能:删除学生资料*/
{files *p1,*p2;
float num;
printf("输入要删除的学生的学号(输入0时退出):");
scanf("%f",&num);
while(num!=0) /*输入学号为0时退出*/
{if(head==NULL)
  {printf("\n没有任何学生资料!\n");
   return(head);
  }
  p1=head;
  while(num!=p1->number&&p1->next!=NULL) /*p1指向的不是所要找的首结点,并且后面还有结点*/
  {p2=p1;
   p1=p1->next;
  }   /*p1后移一个结点*/
  if(num==p1->number)  /*找到了*/  
  {if(p1==head)  head=p1->next;/*若p1指向的是首结点,把地二个结点地址赋予head*/
   else p2->next=p1->next;  /*否则将下一个结点地址 赋给前一结点地址*/
   printf("删除:%.0f\n",num);
   n=n-1;
  }
  else  printf("%.0f不存在此学生!\n",num);  /*找不到该结点*/
  printf("输入要删除的学生的学号:");
  scanf("%f",&num);
} 
printf("已经退出了!\n");
printf("现在的学生数为:%d个!\n",n);
return(head);
} 

void print(files *head)  /*函数print功能:显示学生成绩*/
{
files *p;
if(head==NULL) printf("\n没有任何学生资料!\n");
else
    {printf("%d\n",n);
     printf("=================================================================\n");
     printf("|学号\t|姓名\t|英语\t|数学\t|计算机\t|总分\t|平均分\t|名次\n");
     printf("=================================================================\n"); /*打印表格域*/
     p=head;
     do
     {printf("|%.0f\t|%s\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%ld\t|\n",p->number,p->name,p->english,p->math,p->computer,p->sum,p->average,p->rank);
      printf("=================================================================\n"); /*打印表格域*/
      p=p->next;
     }while (p!=NULL); /*打印完成了*/
    }
getchar();
}


void search(files *head)  /*函数search功能:查询学生成绩*/
{float num;
char na[20];
int i;
files *p1,*p2;
printf("输入要查询的学生的1.学号\t2.姓名\t0.推出:");
printf("\n请选择:");
scanf("%f",&i);
if(i==1) {printf("输入学号:");
           scanf("%d",&num);
           while(num!=0)
           {if(head==NULL) printf("\n没有任何学生资料!\n");
             printf("=================================================================\n");
             printf("|学号\t|姓名\t|英语\t|数学\t|计算机\t|总分\t|平均分\t|名次\n");
             printf("=================================================================\n"); /*打印表格域*/
             p1=head;
             while(num!=p1->number&&p1->next!=NULL)
                {p2=p1;
                 p1=p1->next;
                } 
             if(num==p1->number)  
               printf("|%.0f\t|%s\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%ld\t|\n",p1->number,p1->name,p1->english,p1->math,p1->computer,p1->sum,p1->average,p1->rank);
             else printf("%.0f不存在此学生!\n",num);
             printf("输入要查询的学生的学号,");
             scanf("%f",&num);
            }
           printf("已经退出了!\n");
            } 
else if(i==2) {printf("输入姓名,输#推出:");
                scanf("%s",na);
                while(strcmp(na,"#")!=0)
                {if(head==NULL) printf("\n没有任何学生资料!\n");
                 printf("=================================================================\n");
                 printf("|学号\t|姓名\t|英语\t|数学\t|计算机\t|总分\t|平均分\t|名次\n");
                 printf("=================================================================\n"); /*打印表格域*/
                 p1=head;
                 while((strcmp(na,p1->name)!=0)&&p1->next!=NULL)
                 {p2=p1;
                  p1=p1->next;
                 } 
                 if(strcmp(na,p1->name)==0)  
                  printf("|%.0f\t|%s\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%ld\t|\n",p1->number,p1->name,p1->english,p1->math,p1->computer,p1->sum,p1->average,p1->rank);
                 else printf("%s不存在此学生!\n",na);
                 printf("输入要查询的学生的学号,");
                 scanf("%s",na);
                }
                printf("已经退出了!\n");
                }
else if(i==0) printf("推出!\n");
}
files *correct(files *head)  /*函数search功能:查询学生成绩*/
{float num,fen;
char na[20];
int i,j,x;
files *p1,*p2;
printf("输入要修改的学生的1.学号\t2.姓名\t0.推出:");
printf("\n请选择:");
scanf("%f",&i);
if(i==1) {printf("输入学号:");
           scanf("%f",&num);
           while(num!=0)
            {if(head==NULL) printf("\n没有任何学生资料!\n");
             p1=head;
             while(num!=p1->number&&p1->next!=NULL)
                {p2=p1;
                 p1=p1->next;
                } 
             if(num==p1->number)  
             {printf("你要修改\t1.学号\t2.姓名\t3.成绩:");
              printf("\n请选择:");
              scanf("%d",&j);
              switch(j)
              {case 1:printf("输入正确的学号:");
                      scanf("%f",&num);
                      p1->number=num;
                      break;
              case 2:printf("输入正确的姓名:");
                     scanf("%s",na);
                     strcpy(p1->name,na);
                     break;      
              case 3:printf("你要修改1.英语成绩\t2.数学成绩\t3.计算机成绩");
                     printf("请选择:");
                     scanf("%d",&x);
                     if(x==1) {printf("输入正确的英语成绩:");
                               scanf("%f",&fen);
                               p1->english=fen;
                                }
                     else if(x==2) {printf("输入正确的数学成绩:");
                                    scanf("%f",&fen);
                                    p1->math=fen;
                                    }
                     else if(x==3) {printf("输入正确的计算机成绩:");
                                    scanf("%f",&fen);
                                    p1->computer=fen;
                                    }
                     break;
              }
              p1->sum=p1->english+p1->math+p1->computer;
              p1->average=p1->sum/3;
             }
             else printf("%.0f不存在此学生!\n",num);
             printf("输入要查询的学生的学号,");
             scanf("%f",&num);
            }
           printf("已经退出了!\n");
            } 
else if(i==2) {printf("输入姓名,输#推出:");
                scanf("%s",na);
                while(strcmp(na,"#")!=0)
                {if(head==NULL) printf("\n没有任何学生资料!\n");
                 p1=head;
                 while((strcmp(na,p1->name)!=0)&&p1->next!=NULL)
                 {p2=p1;
                  p1=p1->next;
                 } 
                 if(strcmp(na,p1->name)==0)  
                  
                 while(num!=p1->number&&p1->next!=NULL)
                {p2=p1;
                 p1=p1->next;
                } 
             if(strcmp(na,p1->name)==0)  
             {printf("你要修改\t1.学号\t2.姓名\t3.成绩:");
              printf("\n请选择:");
              scanf("%d",&j);
              switch(j)
              {case 1:printf("输入正确的学号:");
                      scanf("%f",&num);
                      p1->number=num;
                      break;
              case 2:printf("输入正确的姓名:");
                     scanf("%s",na);
                     strcpy(p1->name,na);
                     break;      

⌨️ 快捷键说明

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