学生信息管理系统

本文详细阐述了一个学生信息管理系统的开发过程,包括系统架构、功能设计、算法应用及实现细节。系统支持学生信息录入、浏览、查询、排序、删除与修改等功能,采用链表结构存储学生数据,并通过菜单方式进行交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跪求!!!!!!!!!!!!!!!!!!!!!!!!!
     ????????答案!!!

学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:
(1) 系统以菜单方式工作
(2) 学生信息录入功能(学生信息用文件保存)---输入
(3) 学生信息浏览功能---输出
(4) 查询、排序功能---算法
(5) 按学号查询
(6) 按姓名查询
(7) 学生信息的删除与修改(可选项)

 

我写的是:(但有错,能帮忙改一下的拿出你们的手哈!!!!)

   
#include <stdio.h>
#include <stdlib.h>
#include <stdafx.h>
typedef struct node
{
  char num[10];
  char name[10];
  int score[5];/*score[0]存数学成绩score[1]语文成绩score[2]英语成绩score[3]总分score[4]平均分*/
  struct node *next;
}student;/*学生成绩结构体*/
/*初始化结构体*/
student *init(student *t)
{
 t=(student *)malloc(sizeof(student));
 t->next=NULL;
 t->score[4]=t->score[3]=t->score[0]=t->score[1]=t->score[2]=0;
 return t;
}
/*保存数据*/
void save(student *stu)
{
  FILE *fp;
  if((fp=fopen( "score1","w"))==NULL)/*为输出打开文件score1*/
    {
      printf("cannot open file/n");exit(0);
    }
  stu=stu->next;
  while(stu!=NULL)
    {
      if(fwrite(stu,sizeof(student),1,fp)!=1)
         printf("file write error/n");
      stu=stu->next;
    }
    fclose(fp);
}
/*读取数据*/
student * load(student *stu)
{
    FILE *fp;student *p,*r;r=stu;
    if((fp=fopen("score1","r"))==NULL)/*为输入打开文件score1*/
      return stu;
    do
    { p=(student *)malloc(sizeof(student));
      p->next=NULL;
      if((fread(p,sizeof(student),1,fp)!=1)){fclose(fp);return stu;};
      r->next=p;
      r=r->next;
    }while(1);

}
/*输出一个特定的学生的成绩*/
void output1(student *t)
{ int k;
         printf("%s/t%s/t",t->num,t->name);
         for(k=0;k<5;k++)
 printf("%d/t",t->score[k]);
         printf("/n");
}
/*输出全体学生的成绩*/
void output(student *stu)
{
         stu=stu->next;
         printf("学号/t姓名/t数学/t语文/t英语/t总分/t平均分/n");
         while(stu!=NULL)
         {
           output1(stu);
           stu=stu->next;
  }

}
/*将stu后插在t中*/
student * charu(student *stu,student *t)
{student *p;int k;
  p=(student *)malloc(sizeof(student));
  strcpy(p->num,stu->num);
  strcpy(p->name,stu->name);
  for(k=0;k<5;k++)
    p->score[k]=stu->score[k];
  p->next=t->next;
  t->next=p;
  return p;
}
/*按成绩排序*/
void paixu(student *stu,int i)
{
  student *t,*p,*r;
  int j,k;p=stu;
  printf("输入0按数学成绩/n");
  printf("输入1按语文成绩/n");
  printf("输入2按英语成绩/n");
  printf("输入3按总分/n");
  printf("输入4按平均分/n");
  do
  {
    scanf("%d",&j);
    if(j<0&&j>4) printf("输入错误请重新输入/n");
    else break;
   }while(1);
  t=init(t);
  r=t;
  stu=stu->next;
  if(t->next==NULL)
    r=charu(stu,t);/*在排序好的链表t中插入第一个节点*/
  if(i==0)/*按升序排序*/
   while(stu->next!=NULL)
    {
      stu=stu->next;
       if(r->score[j]>stu->score[j]) r=t;/*如果待插入的score[j]<当前的score[j],指针r回溯*/
       while(r->next->score[j]<stu->score[j]&&r->next!=NULL)
         r=r->next;/*找到比待插入的score[j]大的指针r->next*/
       r=charu(stu,r);/*在r后面插入stu*/
     }
  else
     while(stu->next!=NULL)
    {
      stu=stu->next;

       if(r->score[j]<stu->score[j]) r=t;
       while(r->next->score[j]>stu->score[j]&&r->next!=NULL)
         r=r->next;
       r=charu(stu,r);
     }
  output(t);
 }
/*排序菜单*/
void output2(student *stu)
{  int i;
   output(stu);
   printf("输入 0 升序/n");
   printf("输入 1 降序/n");
   printf("输入其他任意字符退出/n");
   scanf("%d",&i);
   if(i==0||i==1)
    paixu(stu,i);
   printf("输入任意字符结束/n");
  getch();

}
/*查找学生号为num是否存在*/
student * findnum(char *num,student *t,int *i)
{
 *i=1;
 if(t->next==NULL)
    return t;
  else
    {
      *i=strcmp(t->next->num,num);
      while(*i<0)/*t->next->num<num时查找下一个*/
       {
 t=t->next;
 if(t->next==NULL)
    return t;
 *i=strcmp(t->next->num,num);
}
     }
   return t;/*t->next->num>=num时返回,此时i>=0*/
}
/*插入一个学生信息*/
student * insertstu(char *num,student *stu,char *name)
{ student *p,*t;int *i,j;i=&j;
  t=findnum(num,stu,i);/*查找该学号是否存在*/
  if(j!=0)/*该学号不存在,则插入*/
   {
     p=init(p);
     strcpy(p->num,num);
     strcpy(p->name,name);
     p->next=t->next;
     t->next=p;
     return stu;
   }
  else
   {printf("已有此学号/n学号/t姓名/n%s/t%s/n",t->next->num,t->next->name);return stu;}
}
/*录入新学生信息*/
void base(student *stu)
{
  char num[10],name[20];
  printf("输入e结束输入新学生的信息/n");
  printf("num(不超过10个数)/tname(不超过10个字)/n");
  scanf("%s",num);
  do
  {
    printf("/t/t/t");
    scanf("%s",name);
    stu=insertstu(num,stu,name);/*插入一个学生信息*/
    scanf("%s",num);
    }while(num[0]!='e');
    output(stu);
    printf("输入任意字符退出/n");
    getch();
}
/*增加修改一门课程成绩*/
void zengjia(student *t,int i)
{
     t->score[3]-=t->score[i];/*总分减去第i门课的成绩*/
     scanf("%d",&(t->score[i]));/*输入第i门课的成绩*/
     t->score[3]+=t->score[i];/*总分加上第i门课的成绩*/
}
void deletegrade(student *t,int i)
{
     t->score[3]-=t->score[i];/*总分减去第i门课的成绩*/
     t->score[i]=0;/*第i门课的成绩归零*/
}
/*修改成绩*/
void altergrade(student *stu)
{
 int j,*i;student *t;char a,*num;
 i=&j;
 printf("0 修改数学成绩/n");
 printf("1 修改语文成绩/n");
 printf("2 修改英语成绩/n");
 printf("3 删除数学成绩/n");
 printf("4 修改语文成绩/n");
 printf("5 修改英语成绩/n");
 printf("输入 e 结束操作/n");
 a=getch();
 printf("学号/t成绩/n");
 scanf("%s",num);
 while(num[0]!='e')
 {
 t=findnum(num,stu,i);/*按学生号查找学生信息*/
 if(j==0)/*学生号存在*/
   {
     t=t->next;
     switch(a)
      {
case '0':
    zengjia(t,0);
    break;
case '1':
    zengjia(t,1);
    break;
case '2':
    zengjia(t,2);
    break;
        case '3':
    deletegrade(t,0);
    break;
case '4':
    deletegrade(t,1);
    break;
case '5':
    deletegrade(t,2);
    break;
default:break;
     }
     t->score[4]=t->score[3]/3;
   }
 else
    printf("无此学号/n");
    scanf("%s",num);
 }
 output(stu);
 printf("输入任意字符结束/n");
 getch();
}
/*第i科成绩录入*/
student gradeenter(student *stu,int i)
{
 student *t;t=stu;
 t=t->next;
 printf("学号/t该科成绩/n");
 while(t!=NULL)
 {
     printf("%s/t",t->num);
     if(t->score[i]==0)/*如果学号为t->num的同学该科成绩没有*/
     {
      scanf("%d",&t->score[i]);
      t->score[3]+=t->score[i];/*学号为t->num的总分*/
      t->score[4]=t->score[3]/3;/*学号为t->num的平均分*/
      }
      else
printf("%d/n",t->score[i]);
     t=t->next;/*录入下一个同学的该科成绩*/

 }
 printf("该科全部输入完成/n输入任意字符结束/n");
 getch();
}
/*成绩录入菜单*/
void entergrade(student *stu)
{
  int i;
  printf("0 录入数学成绩/n");
  printf("1 录入语文成绩/n");
  printf("2 录入英语成绩/n");
  scanf("%d",&i);
  switch(i)
  {
   case 0:gradeenter(stu,i);break;
   case 1:gradeenter(stu,i);break;
   case 2:gradeenter(stu,i);break;
   default:printf("输入错误请输入相应操作的题号/n");
  }

}
/*按学生号查找学生*/
void chaxun(student *stu)
{
  char *num;int j,k,*i;student *t;i=&j;
  printf("输入要查询的学生学号/n");
  scanf("%s",num);
  t=findnum(num,stu,i);/*查找学生号为num是否存在*/
  if(j==0)/*该学生号存在*/
     {
         t=t->next;
         printf("查询结果为/n");
         printf("学号/t姓名/t数学/t语文/t英语/t总分/t平均分/n");
         output1(t);/*输出此学生信息*/
     }
  else
     printf("查无此号/n");
     printf("输入任意字符结束/n");
     getch();
}
/*统计全班人数和平均分*/
void tongji(student *stu)
{
  int total=0,score=0;
  stu=stu->next;
  while(stu!=NULL)
  {
    score+=stu->score[3];
    stu=stu->next;
    total++;
  }
  score=score/total;
  printf("班级总人数为:%d平均分为:%d/n输入任意字符退出/n",total,score);
  getch();
}
/*按分数段查询*/
void fenshuduan(student *stu)
{
  int i,min,max,j;
  printf("输入0按数学分数段/n");
  printf("输入1按语文分数段/n");
  printf("输入2按英语分数段/n");
  printf("输入3按总分分数段/n");
  printf("输入4按平均分分数段/n");
  scanf("%d",&i);
  printf("输入分数段上限:");
  scanf("%d",max);
  printf("/n输入分数段下限:");
  scanf("%d",min);
  if(max<min)
    {j=max;max=min;min=j;}
  stu=stu->next;
  printf("学号/t姓名/t数学/t语文/t英语/t总分/t平均分/n");
  while(stu!=NULL)
  {
   if(min<=stu->score[i]&&stu->score[i]<=max)/*将分数段内的同学信息输出*/
        output1(stu);
   stu=stu->next;
  }

}
void main()
{
 char a='8';
 student *stu;
 stu=init(stu);/*初始化stu*/
 stu=load(stu);/*读取score1的数据*/
 while(a!='7')
 {
  clrscr();
  printf("************************************************************/n");
  printf("               学生成绩管理系统/n");
  printf("                                    -------made in china/n");
  printf(" /t0 录入学生基本信息/n");
  printf(" /t1 修改或删除学生成绩/n");
  printf(" /t2 录入学生成绩/n");
  printf(" /t3 显示指定学生的信息/n");
  printf(" /t4 输出指定分数段的学生信息/n");
  printf(" /t5 输出班级总人数和平均分/n");
  printf(" /t6 输出全体学生的信息/n");
  printf(" /t7 退出/n");
  printf("*************************************************************/n");
  a=getch();
  switch(a)
  {
    case'0':base(stu);break;
    case'1':altergrade(stu);break;
    case'2':entergrade(stu);break;
    case'3':chaxun(stu);break;
    case'4':fenshuduan(stu);break;
    case'5':tongji(stu);break;
    case'6':output2(stu);break;
    case'7':break;
    default:printf("i am sorry to hear that  you enter the wrong num/n");
    printf("按任意键重新输入/n");getch();continue;
  }
  }
  save(stu);/*将数据保存在score1中*/
   printf("欢迎再次使用学生成绩管理系统........请按任意键退出.......");
   getch();
}

 

 

 

结果如下::::

 

 

 

警告 1 warning C4627: “#include <stdlib.h>”: 在查找预编译头使用时跳过 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 3 xueshengguanlixt
错误 2 error C3861: “malloc”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 16 xueshengguanlixt
错误 3 error C3861: “exit”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 27 xueshengguanlixt
错误 4 error C3861: “malloc”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 45 xueshengguanlixt
错误 5 error C3861: “malloc”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 76 xueshengguanlixt
错误 6 error C3861: “strcpy”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 77 xueshengguanlixt
错误 7 error C3861: “strcpy”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 78 xueshengguanlixt
错误 8 error C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 138 xueshengguanlixt
错误 9 error C3861: “strcmp”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 149 xueshengguanlixt
错误 10 error C3861: “strcmp”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 155 xueshengguanlixt
错误 11 error C3861: “strcpy”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 167 xueshengguanlixt
错误 12 error C3861: “strcpy”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 168 xueshengguanlixt
错误 13 error C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 192 xueshengguanlixt
错误 14 error C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 218 xueshengguanlixt
错误 15 error C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 257 xueshengguanlixt
错误 16 error C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 280 xueshengguanlixt
错误 17 error C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 316 xueshengguanlixt
错误 18 error C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 331 xueshengguanlixt
错误 19 error C3861: “clrscr”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 367 xueshengguanlixt
错误 20 error C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 380 xueshengguanlixt
错误 21 error C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 392 xueshengguanlixt
错误 22 error C3861: “getch”: 找不到标识符 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 397 xueshengguanlixt
错误 23 fatal error C1070: 文件“c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp”中的 #if/#endif 对不匹配 c:/users/administrator/documents/visual studio 2008/projects/xueshengguanlixt/xueshengguanlixt/xueshengguanlixt.cpp 399 xueshengguanlixt

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值