问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用C语言编写学生信息管理系统

发布网友 发布时间:2022-05-01 16:18

我来回答

1个回答

热心网友 时间:2022-06-19 10:13

参考如下学生信息管理系统的C源代码吧。

#include <stdio.h>
#include <string.h>
/*定义学生结构体*/
struct Student
{
     char ID[20];
     char Name[20];
     float Mark1;
     float Mark2;
     float Mark3;
     float Average;
};
/*声明学生数组及学生数量*/
struct Student students[1000];
int num=0;
/*求平均值*/
float Avg(struct Student stu)
{
     return (stu.Mark1+stu.Mark2+stu.Mark3)/3;
}
/*通过学号返回数组下标*/
int Student_SearchByIndex(char id[])
{
     int i;
     for (i=0;i<num;i++)
     {
         if (strcmp(students[i].ID,id)==0)
         {
              return i;
         }
     }
     return -1;
}
/*通过姓名返回数组下标*/
int Student_SearchByName(char name[])
{
     int i;
     for (i=0;i<num;i++)
     {
         if (strcmp(students[i].Name,name)==0)
         {
              return i;
         }
     }
     return -1;
}
/*显示单条学生记录*/
void Student_DisplaySingle(int index)
{
     printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");
     printf("-------------------------------------------------------------\n");
     printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[index].Name,
              students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);
}
/*插入学生信息*/
void Student_Insert()
{
     while(1)
     {
         printf("请输入学号:");
         scanf("%s",&students[num].ID);
         getchar();
         printf("请输入姓名:");
         scanf("%s",&students[num].Name);
         getchar();
         printf("请输入成绩:");
         scanf("%f",&students[num].Mark1);
         getchar();
         printf("请输入成绩:");
         scanf("%f",&students[num].Mark2);
         getchar();
         printf("请输入成绩:");
         scanf("%f",&students[num].Mark3);
         getchar();
         students[num].Average=Avg(students[num]);
         num++;
         printf("是否继续?(y/n)");
         if (getchar()=='n')
         {
              break;
         }
     }
}
/*修改学生信息*/
void Student_Modify()
{
     //float mark1,mark2,mark3;
     while(1)
     {
         char id[20];
         int index;
         printf("请输入要修改的学生的学号:");
         scanf("%s",&id);
         getchar();
         index=Student_SearchByIndex(id);
         if (index==-1)
         {
              printf("学生不存在!\n");
         }
         else
         {
              printf("你要修改的学生信息为:\n");
              Student_DisplaySingle(index);
              printf("-- 请输入新值--\n");
              printf("请输入学号:");
              scanf("%s",&students[index].ID);
              getchar();
              printf("请输入姓名:");
              scanf("%s",&students[index].Name);
              getchar();
              printf("请输入成绩:");
              scanf("%f",&students[index].Mark1);
              getchar();
              printf("请输入成绩:");
              scanf("%f",&students[index].Mark2);
              getchar();
              printf("请输入成绩:");
              scanf("%f",&students[index].Mark3);
              getchar();
              students[index].Average=Avg(students[index]);
         }
         printf("是否继续?(y/n)");
         if (getchar()=='n')
         {
              break;
         }
     }
}
/*删除学生信息*/
void Student_Delete()
{
     int i;
     while(1)
     {
         char id[20];
         int index;
         printf("请输入要删除的学生的学号:");
         scanf("%s",&id);
         getchar();
         index=Student_SearchByIndex(id);
         if (index==-1)
         {
              printf("学生不存在!\n");
         }
         else
         {
              printf("你要删除的学生信息为:\n");
              Student_DisplaySingle(index);
              printf("是否真的要删除?(y/n)");
              if (getchar()=='y')
              {
                   for (i=index;i<num-1;i++)
                   {
                       students[i]=students[i+1];//把后边的对象都向前移动
                   }
                   num--;
              }
              getchar();
         }
         printf("是否继续?(y/n)");
         if (getchar()=='n')
         {
              break;
         }
     }
}
/*按姓名查询*/
void Student_Select()
{
     while(1)
     {
         char name[20];
         int index;
         printf("请输入要查询的学生的姓名:");
         scanf("%s",&name);
         getchar();
         index=Student_SearchByName(name);
         if (index==-1)
         {
              printf("学生不存在!\n");
         }
         else
         {
              printf("你要查询的学生信息为:\n");
              Student_DisplaySingle(index);
         }
         printf("是否继续?(y/n)");
         if (getchar()=='n')
         {
              break;
         }
     }
}
/*按平均值排序*/
void Student_SortByAverage()
{
     int i,j;
     struct Student tmp;
     for (i=0;i<num;i++)
     {
         for (j=1;j<num-i;j++)
         {
              if (students[j-1].Average<students[j].Average)
              {
                   tmp=students[j-1];
                   students[j-1]=students[j];
                   students[j]=tmp;
              }
         }
     }
}
/*显示学生信息*/
void Student_Display()
{
     int i;
     printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");
     printf("-------------------------------------------------------------\n");
     for (i=0;i<num;i++)
     {
         printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].Name,
              students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average);
     }
}
/*将学生信息从文件读出*/
void IO_ReadInfo()
{
     FILE *fp;
     int i;
     if ((fp=fopen("Database.txt","rb"))==NULL)
     {
         printf("不能打开文件!\n");
         return;
     }
     if (fread(&num,sizeof(int),1,fp)!=1)
     {
         num=-1;
     }
     else
     {
         for(i=0;i<num;i++)
         {
              fread(&students[i],sizeof(struct Student),1,fp);
         }
     }
     fclose(fp);
}
/*将学生信息写入文件*/
void IO_WriteInfo()
{
     FILE *fp;
     int i;
     if ((fp=fopen("Database.txt","wb"))==NULL)
     {
         printf("不能打开文件!\n");
         return;
     }
     if (fwrite(&num,sizeof(int),1,fp)!=1)
     {
         printf("写入文件错误!\n");
     }
     for (i=0;i<num;i++)
     {
         if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)
         {
              printf("写入文件错误!\n");
         }
     }    
     fclose(fp);
}
/*主程序*/
void main()
{
     int choice;
     IO_ReadInfo();
     while(1)
     {
         /*主菜单*/
         printf("\n------ 学生成绩管理系统------\n");
         printf("1. 增加学生记录\n");
         printf("2. 修改学生记录\n");
         printf("3. 删除学生记录\n");
         printf("4. 按姓名查询学生记录\n");
         printf("5. 按平均成绩排序\n");
         printf("6. 退出\n");
         printf("请选择(1-6):");
         scanf("%d",&choice);
         getchar();
         switch(choice)
         {
         case 1:
              Student_Insert();
              break;
         case 2:
              Student_Modify();
              break;
         case 3:
              Student_Delete();
              break;
         case 4:
              Student_Select();
              break;
         case 5:
              Student_SortByAverage();
              Student_Display();
              break;
         case 6:
              exit(0);
              break;
         }
         IO_WriteInfo();
     }
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
索尼NEX-6单头套机(E 16-50mm)主要参数 索尼NEX-6单头套机(E 18-200mm LE)主要参数 索尼NEX-6单头套机(E 18-200mm LE)基本参数 索尼NEX-6单头套机(16-80mm)基本参数 追加诉前财产保全的条件是什么 电脑开机硬盘灯循环亮灭电脑开机后硬盘灯一下亮一下灭是怎么回事_百度... ...不能开机了?显示器亮橘色的灯,风扇能转,就是主机上的灯不亮... ...重起时电源灯是常亮, 风扇是转的,但硬盘灯不亮, 屏幕无显示_百度知 ... 硬盘灯常亮电脑无法正常运行电脑开机后硬盘指示灯常亮不闪是什么原因... 电脑硬盘不亮电脑硬盘指示灯不亮 现在报驾驶证太难了,我过不了。怎么办? 大气压是怎样随高度的变化而变化 大气压与高度的变化特点 1.( ) 2.( ) 3.() 如图是大气压随高度变化的情况,从图中你能找出大气压随高度变化的哪些规律?(要求至少说出两条规律 感觉考驾照太难了了,听人说可以买的科二是怎么回事?不想放弃学车,但我就是学不会怎办呢 初二物理 急~~~ 分析出大气压随高度变化的规律是: 随着海拔的变化,大气压的变化规律? 现在考驾照越来越难了,考不过不考了? 随着海拔升高,气温、空气密度、气压这三个分别会怎么变化? 驾照太难了我都不考了 科二科三真的太难了,不想考驾照了怎么办? 高度越高,气压怎么变?为什么 欢乐麻将无番场 是怎么玩 大气压随高度增加而减小的规律 大气压力随海拔高度变化的规律? 癌症吃海参有无副作用 月子里吃海参不会有什么副作用吧?坐月子能吃海参吗? 海参吃多了有坏处吗? 给祖国写封信 GTA5基甫隆是诈骗吗 哈弗h6标配多少钱!上路大概多少钱?(购置税、上牌) 随着高度增加大气压逐渐怎么的 驾照到底难考么?总觉得很难,看都那么多要背的东西,心里恐惧的很,我很怕考试。。 气压变化规律有什么特点 哈弗h6全款包括保险购置税所有全款提车共多少钱 考驾照太难了学一天不想去了 _百度问一问 从图中可以得出大气压随海拔高度的变化规律是:__ 现在考驾照太难? 是谁演的,电影《破坏之王》中空手道大师兄的扮演者 断水流大师兄是不是黎明演的? 哈弗H6车辆购置税1.6排量有什么优惠 现在的驾照太难考了,都考十几次了,各位有招没 欢乐麻将新手怎麽玩 现在考驾照怎么这么难 断水流大师兄是谁演的 哈弗h6,1.5丅汽车购置税怎么算 C语言学生成绩管理系统代码 大气压随高度变化的特点有哪些 淄博公司注册有哪些流程