这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 岭南EE码农港 » C语言课程设计作业--学生成绩管理系统

共4条 1/1 1 跳转至

C语言课程设计作业--学生成绩管理系统

菜鸟
2014-11-19 23:21:54     打赏
#include "stdio.h"<SPAN style="FONT-SIZE: 16px">
#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(" ID:2013914115\n");
  
         printf("\n------ 学生成绩管理系统------\n");  
  
         printf("1. 增加学生记录\n");  
  
         printf("2. 修改学生记录\n");  
  
         printf("3. 删除学生记录\n");  
  
         printf("4. 按姓名查询学生记录
");  
  
         printf("5. 按平均成绩排序
");  
  
         printf("6. 退出
");  
  
         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();  
  
     }  
  
}  

 

总结:1、编写程序需要耐心和细心,不然很容易出错;
         2、这个程序可以输入保存学生成绩,删除或修改已存入学生成绩,也可求输入或已保存的学生成绩的平均值,并可根据平均值把学生成绩排序。

 




关键词: 作业    

院士
2014-11-20 11:13:38     打赏
2楼
大量的资源啊

高工
2014-11-20 13:15:27     打赏
3楼
赞一个

菜鸟
2014-11-20 14:37:01     打赏
4楼

这个做得不错!


case 6里面的exit语句忘记缩进去了!


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]