系统设计说明

(1)系统启动后,弹出一个用户界面,能实现人机交互的功能。而且只能通过界面菜单命令实现各种功能(包括系统退出功能),可以设计欢迎词。
(2)学生基本信息录入:录入信息包括学号、姓名、性别、宿舍号、电话号码等。
(3)学生成绩基本信息录入:学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩。
(4)计算综合成绩:若本课程无实验(如实验成绩为-1),综合成绩=平时成绩*30% +卷面成绩*70%;若本课程有实验(如实验成绩不为-1),综合成绩=平时成绩*15%+实验成绩*15%+卷面成绩*70%。
(5)计算实得学分:采用等级学分制。综合成绩在90~100分之间,实得学分=学分*100%;综合成绩在80~90分之间,实得学分=学分*80%;综合成绩在70~80分之间,实得学分=学分*75%;综合成绩在60~70分之间,实得学分=学分*60%;综合成绩在60分以下,实得学分=学分*0%;
(6)学生基本情况的查询并输出:输入一个学生的学号或姓名,可查询出此学生的基本信息并显示输出;输入一个宿舍号码,可查询出本宿舍所有学生的基本信息并显示输出。
(7)学生成绩信息的查询并输出:输入一个学生的学号或姓名,可查询出此学生的所有课程情况。(如输出:学号,姓名,课程编号,课程姓名,综合成绩,实得学分等,并统计学生共修课程数目以及实得总学分值。)
(8)排序(分别按综合成绩和实得学分),输出按照综合成绩(或实得学分)升序或降序排序后的学生信息以及对应的课程成绩信息(或实得学分信息)。
(9)成绩修改:查找后修改成绩,修改后按照综合成绩重新排序,并输出学生信息和对应课程成绩和综合成绩。
(10)成绩追加:增补遗漏的学生以及对应的信息和对应的课程成绩,并计算出综合成绩和实得学分,增补以后重新排序,并输出新增学生信息和对应课程成绩和综合成绩。
附加功能:
(11)删除学生信息:删除不需要的学生对应的记录(包括姓名、学号、课程、成绩等)。
(12)成绩(学分)分段:将学生成绩(学分)分段。
(13)文件存储:把学生信息和对应的课程成绩信息存入到文件中。
(14)文件输出:输出文件中的内容。
(15)文件导入:从文件中导入数据到学籍管理系统中,然后进行管理。

阅读顺序:从上到下
语言:C语言

信息说明

3
111 张三 女 101 138123456
222 李四 男 101 138234567
333 王五 女 101 138345678111
2
1 语文
91 92 93 94
2 数学
92 93 94 95
222
2
2 数学
84 85 86 99
3 英语
97 94 84 85
333
2
1 语文
84 95 97 89
3 英语
84 59 87 91追加:
2
444 赵六 男 101 456789
2
1 语文
84 95 62 84
3 英语
78 89 46 59
555 胡七 女 101 567891
2
2 数学
98 95 95 95
3 英语
85 92 70 91 

头文件和结构体引入

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<conio.h>struct Course
{char cname[20];    //课程名字 int cnum;    //课程编号 float scores[3]; //平时成绩、实验成绩、卷面成绩 float sum; //单课程综合成绩 float realmark;   //实得学分 float mark;  //学分
}course;
struct Stu
{char num[14];  //学生的学号char name[14];   //学生的姓名char sex[10];    //学生的性别 char cls[10];   //学生所在班级char dor[14];   //学生宿舍号char phone[20];  //学生电话号码 int coursesum; //学生所修课程总数 float realmarksum;   // 总学分值float avemark; //平均学分值 float sum;    //总 综合成绩float ave; //平均综合成绩 char rankm;//学生学分分段char ranks; //学生成绩分段struct Course course[10];
}stu[100];          //存储学生信息的全局结构体数组
int stu_num = 0;       //存储学生人数
int count;

输入学生信息

void InputInformation()//输入学生信息
{int i,j;; printf("提示:信息之间以空格隔开。敲击回车键完成录入。\n\n");printf("请输入您要录入的学生个数:");scanf("%d",&stu_num);putchar(10);for(i=0;i<stu_num;i++){printf("请输入第%d位学生信息:\n",i+1);printf("请输入学生的学号、姓名、性别、宿舍号、电话号码:\n");scanf("%s %s %s %s %s",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].dor,&stu[i].phone);putchar(10);}printf("【=*=---------学生信息录入完毕---------=*=】\n");system("pause");
}
void InputScores()//输入学生成绩
{int i,j;char inputnum[14];int index;int FindIndex_num(char str[]);printf("提示:\n1.信息之间以空格隔开。\n2.若该科目没有实验成绩,请输入-1。\n\n");if(stu_num==0){printf("【=*=---------请先录入学生基本信息---------=*=】\n");system("pause");return ; }else{for(i=0;i<stu_num;i++){printf("请输入需要录入的学生学号:");scanf("%s",&inputnum);index=FindIndex_num(inputnum);if(index!=-1){printf("请输入该生共修课程数目:");scanf("%d",&stu[index].coursesum);for(j=0;j<stu[index].coursesum;j++){printf("请第%d门输入课程编号和课程名字:",j+1);scanf("%d %s",&stu[index].course[j].cnum,&stu[index].course[j].cname);label:printf("请输入学生的平时成绩、实验成绩、卷面成绩、学分:");scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);for(int k=0;k<4;k++){if(stu[index].course[j].scores[k]>100||stu[index].course[j].scores[k]<0){printf("--您输入的学生第%d科成绩有误,请重新输入--\n",k+1);goto label;}if(stu[index].course[j].mark>100||stu[index].course[j].mark<0) {printf("--您输入的学生学分有误,请重新输入--\n");goto label;}}}}else {printf("--学生不存在,请重新输入--\n");system("pause");InputScores();}printf("\n"); } void ScoreLevelCal(int stu_sum) ;void MarkLevelCal(int stu_sum) ;ScoreLevelCal(stu_num);MarkLevelCal(stu_num);printf("【=*=---------学生成绩信息录入完毕---------=*=】\n");system("pause");}
}

计算模块

计算学生综合成绩

void Calsum(int stu_sum) //计算学生综合成绩
{int i,j;//若本课程有实验if(stu_num==0){printf("【=*=---------请先录入学生基本信息---------=*=】\n");system("pause");return ; }else{for(i=0;i<stu_sum;i++){stu[i].sum=0; //学生总分初始化为 0 for(j=0;j<stu[i].coursesum;j++){if(stu[i].course[j].scores[1]==-1)stu[i].course[j].sum = stu[i].course[j].scores[0]*0.3+stu[i].course[j].scores[2]*0.7;elsestu[i].course[j].sum = stu[i].course[j].scores[0]*0.15+stu[i].course[j].scores[1]*0.15+stu[i].course[j].scores[2]*0.7;stu[i].sum+=stu[i].course[j].sum;stu[i].ave=stu[i].sum/(float)stu[i].coursesum; //学生平均成绩 }}void ScoreLevelCal(int stu_sum) ;void MarkLevelCal(int stu_sum) ;ScoreLevelCal(stu_num);MarkLevelCal(stu_num);printf("【=*=---------学生综合成绩计算完毕---------=*=】\n");system("pause");}}

计算学生实得学分

void Calmark(int stu_sum)    //计算学生实得学分
{int i,j;if(stu_num==0){printf("【=*=---------请先录入学生基本信息---------=*=】\n");system("pause");return ; }else{for(i=0;i<stu_sum;i++){stu[i].realmarksum=0;for(j=0;j<stu[i].coursesum;j++){if(stu[i].course[j].sum>=90&&stu[i].course[j].sum<100)stu[i].course[j].realmark=stu[i].course[j].mark;if(stu[i].course[j].sum>=80&&stu[i].course[j].sum<90)stu[i].course[j].realmark=stu[i].course[j].mark*0.8;if(stu[i].course[j].sum>=70&&stu[i].course[j].sum<80)stu[i].course[j].realmark=stu[i].course[j].mark*0.7;if(stu[i].course[j].sum>=60&&stu[i].course[j].sum<70)stu[i].course[j].realmark=stu[i].course[j].mark*0.6;if(stu[i].course[j].sum>=0&&stu[i].course[j].sum<60)stu[i].course[j].realmark=0.0;stu[i].realmarksum+=stu[i].course[j].realmark;//实得总学分值 }stu[i].avemark=stu[i].realmarksum/stu[i].coursesum;//实得平均学分 }printf("【=*=---------学生实得学分计算完毕---------=*=】\n");system("pause");}}

查找学生信息

根据学号查找

int FindIndex_num(char str[])//根据学号寻找学生信息
{int i,j;int index=-1;for(i=0;i<stu_num;i++){if(strcmp(str,stu[i].num)==0) index=i;}return index;
}

根据姓名查找

int FindIndex_name(char str[])//根据姓名寻找学生信息
{int i,j;int index=-1;for(i=0;i<stu_num;i++){if(strcmp(str,stu[i].name)==0) index=i;}return index;
}
void FindIndex_dor(char str[])//根据宿舍号码寻找学生信息
{int i;printf("\n【=*=------------您所查询的宿舍信息如下------------=*=】\n\n");printf("%10s %10s %10s %10s %10s\n","学号","姓名","性别","宿舍号","电话号码");for(i=0;i<stu_num;i++){if(strcmp(str,stu[i].dor)==0){printf("%10s %10s %10s %10s %10s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].dor,stu[i].phone);    }}
}

判断学生是否存在

int FindIndex_dor0(char str[])//根据宿舍号码判断学生是否存在
{int i;int index=-1;for(i=0;i<stu_num;i++){if(strcmp(str,stu[i].dor)==0){index=i; }} return index;
}

学生情况的输出

学生基本情况输出

void OutputInformation(int stu_sum)//学生基本情况的输出 { int i;  printf("学生的基本情况输出如下:\n");  printf("%10s %10s %10s %10s %10s\n","学号","姓名","性别","宿舍号","电话号码");   for(i=0;i<stu_num;i++)        printf("%10s %10s %10s %10s %10s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].dor,stu[i].phone);   printf("【=*=-----------学生基本信息情况输出完毕----------=*=】\n");    system("pause");}

学生成绩情况输出

void OutputScores(int stu_sum)   //学生成绩情况输出
{int i,j;//printf("学生的成绩信息输出如下:\n");for(i=0;i<stu_num;i++){printf("学号为%s   姓名为%s 的同学课程信息如下:\n",stu[i].num,stu[i].name);for(j=0;j<stu[i].coursesum;j++){printf("课程编号:%d\t课程名称:%s\n",stu[i].course[j].cnum,stu[i].course[j].cname);printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[i].course[j].scores[0],stu[i].course[j].scores[1],stu[i].course[j].scores[2],stu[i].course[j].realmark,stu[i].course[j].sum);}printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f\n",stu[i].coursesum,stu[i].realmarksum,stu[i].sum);putchar(10);}printf("\n【=*=-----------学生成绩信息输出完毕-----------=*=】\n");system("pause");}

输出单个学生信息

void OutputScores_One(int index)//输出一个学生的成绩
{int j;printf("学号:%s \t姓名:%s \n",stu[index].num,stu[index].name);for(j=0;j<stu[index].coursesum;j++){printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);}printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f",stu[index].coursesum,stu[index].realmarksum,stu[index].sum);putchar(10);}

学生情况查询

学生基本情况查询

void InformationSearch()//学生基本情况查询
{int i,j;int choice;int index;char str[14];printf("请选择查询方式:\n学号查找请输入1  姓名查找请输入2  查找宿舍信息请输入3:") ;scanf("%d",&choice);if(choice==1){printf("请输入学生的学号:");scanf("%s",&str);index=FindIndex_num(str);if(index!=-1) {printf("\n【=*=----------您所寻找学生信息如下----------=*=】\n\n");printf("%10s %10s %10s %10s %10s\n","学号","姓名","性别","宿舍号","电话号码");printf("%10s %10s %10s %10s %10s\n",stu[index].num,stu[index].name,stu[index].sex,stu[index].dor,stu[index].phone);printf("\n【=*=----------学生基本信息输出完毕----------=*=】\n\n");   system("pause");}else {printf("\n【=*=----------您所查找的学生不存在,请重新输入----------=*=】\n\n");InformationSearch();}}if(choice==2){printf("请输入学生的姓名:");scanf("%s",&str);index=FindIndex_name(str);if(index!=-1) {printf("\n【=*=----------您所寻找学生信息如下----------=*=】\n\n");printf("%10s %10s %10s %10s %10s\n","学号","姓名","性别","宿舍号","电话号码");printf("%10s %10s %10s %10s %10s\n",stu[index].num,stu[index].name,stu[index].sex,stu[index].dor,stu[index].phone);printf("\n【=*=----------学生基本信息输出完毕----------=*=】\n\n");system("pause");}else {printf("【\n=*=----------您所查找的学生不存在,请重新输入----------=*=】\n\n");InformationSearch();}}if(choice==3){printf("请输入宿舍号码:");scanf("%s",&str);index=FindIndex_dor0(str);if(index==-1)  {printf("【\n=*=----------您所查找的宿舍不存在,请重新输入----------=*=】\n\n");InformationSearch();}else {FindIndex_dor(str);printf("\n【=*=----------学生基本信息输出完毕----------=*=】\n\n");system("pause");}} if(choice!=1&&choice!=2&&choice!=3){printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");system("pause");InformationSearch();}}

学生成绩情况查询

void ScoresSearch()//学生成绩情况查询
{int i,j;int choice;int index;char str[14];printf("请选择查询方式:\n学号查找请输入1  姓名查找请输入2 :") ;scanf("%d",&choice);if(choice==1){printf("请输入学生的学号:");scanf("%s",&str);index=FindIndex_num(str);if(index!=-1) {printf("\n【=*=----------您所寻找学生信息如下----------=*=】\n\n");printf("学号为%s    姓名为 %s 的同学课程信息如下:\n",stu[index].num,stu[index].name);for(j=0;j<stu[i].coursesum;j++){printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);} printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f",stu[index].coursesum,stu[index].realmarksum,stu[index].sum);printf("\n\n【=*=----------学生成绩信息输出完毕----------=*=】\n");system("pause");}else {printf("\n\n【=*=----------您所查找的学生不存在,请重新输入----------=*=】\n\n");ScoresSearch();}   }if(choice==2){printf("请输入学生的姓名:");scanf("%s",&str);index=FindIndex_name(str);if(index!=-1){printf("\n【=*=----------您所寻找学生信息如下----------=*=】\n\n");printf("学号为%s    姓名为 %s 的同学课程信息如下:\n",stu[index].num,stu[index].name);for(j=0;j<stu[i].coursesum;j++){printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);} printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f",stu[index].coursesum,stu[index].realmarksum,stu[index].sum);printf("\n\n【=*=----------学生成绩信息输出完毕----------=*=】\n");system("pause");}else {printf("\n\n【=*=----------您所查找的学生不存在,请重新输入----------=*=】\n\n");ScoresSearch();}}if(choice!=1&&choice!=2){printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");system("pause");ScoresSearch();}}

成绩排序

void SortSum_up(int stu_sum) //综合成绩升序排序 {    int i,j,k;  struct Stu temp;    struct Course t;        for (i=0;i<stu_num;i++)           for (j=i+1;j<stu_num;j++)                if (stu[i].sum > stu[j].sum)             {                   temp=stu[i];                   stu[i]=stu[j];                 stu[j]=temp;//排序总综合成绩              }       for (i=0;i<stu_num;i++)           for (j=0;j<stu[i].coursesum;j++)              for (k=j+1;k<stu[i].coursesum;k++)               if (stu[i].course[j].sum > stu[i].course[k].sum)             {                   t=stu[i].course[j];                    stu[i].course[j]=stu[i].course[k];                 stu[i].course[k]=t;//排序课程综合成绩              }}void SortSum_down(int stu_sum) //综合成绩降序排序 {   int i,j,k;  struct Stu temp;    struct Course t;        for (i=0;i<stu_num;i++)           for (j=i+1;j<stu_num;j++)                if (stu[i].sum < stu[j].sum)             {                   temp=stu[i];                   stu[i]=stu[j];                 stu[j]=temp;//排序总综合成绩              }       for (i=0;i<stu_num;i++)           for (j=0;j<stu[i].coursesum;j++)              for (k=j+1;k<stu[i].coursesum;k++)               if (stu[i].course[j].sum < stu[i].course[k].sum)             {                   t=stu[i].course[j];                    stu[i].course[j]=stu[i].course[k];                 stu[i].course[k]=t;                }}void SortRealMark_up() //实得总学分升序排序{   int i,j,k;  struct Stu temp;    struct Course t;        for (i=0;i<stu_num;i++)           for (j=i+1;j<stu_num;j++)                if (stu[i].realmarksum < stu[j].realmarksum)             {                   temp=stu[i];                   stu[i]=stu[j];                 stu[j]=temp;//排序总综合成绩              }       for (i=0;i<stu_num;i++)           for (j=0;j<stu[i].coursesum;j++)              for (k=j+1;k<stu[i].coursesum;k++)               if (stu[i].course[j].realmark < stu[i].course[k].realmark)               {                   t=stu[i].course[j];                    stu[i].course[j]=stu[i].course[k];                 stu[i].course[k]=t;//排序课程综合成绩              }}void SortRealMark_down() //实得总学分降序排序{ int i,j,k;  struct Stu temp;    struct Course t;        for (i=0;i<stu_num;i++)           for (j=i+1;j<stu_num;j++)                if (stu[i].realmarksum > stu[j].realmarksum)             {                   temp=stu[i];                   stu[i]=stu[j];                 stu[j]=temp;//排序总综合成绩              }       for (i=0;i<stu_num;i++)           for (j=0;j<stu[i].coursesum;j++)              for (k=j+1;k<stu[i].coursesum;k++)               if (stu[i].course[j].realmark > stu[i].course[k].realmark)               {                   t=stu[i].course[j];                    stu[i].course[j]=stu[i].course[k];                 stu[i].course[k]=t;//排序课程综合成绩              }}void Sort()//成绩排序 {   int i,j,k;  int choice;     if(stu_num==0)    {       printf("【=*=---------请先录入学生基本信息---------=*=】\n");     system("pause");      return ;    }   else    {       printf("请选择排序方式:\n按综合成绩升序请输入1  按综合成绩升序请输入2 按实得总学分值升序请输入3  按实得总学分值降序请输入4:") ;       scanf("%d",&choice);              if(choice==1||choice==2||choice==3||choice==4)      {           if(choice==1)         SortSum_up(stu_num);                    if(choice==2)             SortSum_down(stu_num);                  if(choice==3)             SortRealMark_up();                          if(choice==4)             SortRealMark_down();                            printf("\n【=*=----------学生成绩排序完毕  学生成绩表如下----------=*=】\n\n");            OutputScores(stu_num);      }       else        {           printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");           Sort();     }   } }

成绩修改

void Edit()//成绩修改
{int i,j;int choice;int index;char str[14];char strc[14];if(stu_num==0){printf("【=*=---------请先录入学生基本信息---------=*=】\n");system("pause");return ; }else{printf("请选择修改方式:\n学号修改请输入1  姓名修改请输入2 :") ;scanf("%d",&choice);if(choice==1||choice==2){    if(choice==1) //学号修改 {printf("请输入学生的学号:");scanf("%s",&str);index=FindIndex_num(str);if(index!=-1){printf("\n您希望修改的学生信息如下:\n");OutputScores_One(index);printf("\n请选择修改方式: 修改全部成绩请输入3  修改一科成绩请输入4:  ");scanf("%d",&choice);if(choice==3||choice==4){if(choice==3) //学号修改-修改全部成绩 {printf("\n请输入该生共修课程数目:");scanf("%d",&stu[index].coursesum);for(j=0;j<stu[index].coursesum;j++){printf("\n请输入课程编号和课程名字:");scanf("%d %s",&stu[index].course[j].cnum,&stu[index].course[j].cname);printf("\n请输入学生的平时成绩、实验成绩、卷面成绩、学分:");scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);Calsum(stu_num);Calmark(stu_num);}}if(choice==4) //学号修改 修改单科成绩 {int num; printf("请输入课程名称: ");scanf("%s",&strc);for(j=0;j<stu[index].coursesum;j++){  if(strcmp(str,stu[index].course[j].cname)==0){printf("您所寻找的学生课程情况如下:\n");printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);printf("\n请输入学生的平时成绩、实验成绩、卷面成绩、学分:");scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);Calsum(stu_num);Calmark(stu_num);} //break;}   } }else {printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");system("pause");Edit();}}printf("【=*=----------学生信息修改完毕----------=*=】\n");system("pause");}if(choice==2) //姓名修改 {printf("请输入学生的姓名:");scanf("%s",&str);index=FindIndex_name(str);if(index!=-1){  printf("\n您希望修改的学生信息如下:\n");OutputScores_One(index);printf("\n请选择修改方式:修改全部成绩请输入5  修改一科成绩请输入6: ");scanf("%d",&choice);if(choice==5||choice==6){if(choice==5) //姓名修改-修改全部成绩 {printf("请输入该生共修课程数目:");scanf("%d",&stu[index].coursesum);for(j=0;j<stu[index].coursesum;j++){printf("\n请输入课程编号和课程名字:");scanf("%d %s",&stu[index].course[j].cnum,&stu[index].course[j].cname);printf("\n请输入学生的平时成绩、实验成绩、卷面成绩、学分:");scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);Calsum(stu_num);Calmark(stu_num);} }if(choice==6) //姓名修改-修改单科成绩 {int num; printf("请输入课程名称: ");scanf("%s",&strc);for(j=0;j<stu[index].coursesum;j++){if(strcmp(strc,stu[index].course[j].cname)==0){printf("您所寻找的学生课程情况如下:\n");printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);printf("\n请输入学生的平时成绩、实验成绩、卷面成绩、学分:");scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);Calsum(stu_num);Calmark(stu_num); } //break;}}} else {printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");system("pause");Edit();}}}printf("\n\n【=*=----------学生信息修改完毕----------=*=】\n");printf("\n\n【=*=----------修改后该生成绩如下----------=*=】\n\n");OutputScores_One(index);//else printf("您输入选项有误,请重新输入。\n"); //返回菜单printf("\n\n【=*=----------修改后所有学生综合成绩降序排列如下----------=*=】\n");  SortSum_down(stu_num);//成绩修改后按照综合成绩降序排序 OutputScores(stu_num);}else{printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");Edit();}}}

成绩追加

void Add() // 成绩追加{  int ad; int i,j;        if(stu_num==0)    {       printf("【=*=---------请先录入学生基本信息---------=*=】\n");     system("pause");      return ;    }   else    {       printf("请输入您要追加的学生人数: ");      scanf("%d",&ad);      for(i=stu_num;i<stu_num+ad;i++)      {           printf("\n请输入第%d位学生信息:\n",i+1);           printf("请输入学生的学号、姓名、性别、宿舍号、电话号码:");            scanf("%s %s %s %s %s",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].dor,&stu[i].phone);           printf("第%d位学生信息录入完毕,请录入学生成绩信息:\n",i+1);                       printf("请输入该生共修课程数目:");            scanf("%d",&stu[i].coursesum);            for(j=0;j<stu[i].coursesum;j++)           {           printf("请输入课程编号和课程名字:");           scanf("%d %s",&stu[i].course[j].cnum,&stu[i].course[j].cname);            printf("请输入学生的平时成绩、实验成绩、卷面成绩、学分:");            scanf("%f %f %f %f",&stu[i].course[j].scores[0],&stu[i].course[j].scores[1],&stu[i].course[j].scores[2],&stu[i].course[j].mark);                      if(stu[i].course[j].scores[1]==-1)                    stu[i].course[j].sum = stu[i].course[j].scores[0]*0.3+stu[i].course[j].scores[2]*0.7;         else                    stu[i].course[j].sum = stu[i].course[j].scores[0]*0.15+stu[i].course[j].scores[1]*0.15+stu[i].course[j].scores[2]*0.7;               stu[i].sum+=stu[i].course[j].sum;             stu[i].ave=stu[i].sum/(float)stu[i].coursesum; //学生平均成绩            }           void CalmarkOne(int i);         CalmarkOne(i);      }       printf("\n【=*=---------补录学生信息录入完毕---------=*=】\n\n");             //stu_num=stu_num+ad;     void MarkLevelCal(int stu_sum);     void ScoreLevelCal(int stu_sum);        ScoreLevelCal(stu_num+ad);     MarkLevelCal(stu_num+ad);              printf("【=*=-----------新增学生信息情况如下-----------=*=】\n\n");       for(i=stu_num;i<stu_num+ad;i++)      {           printf("学号:%s   姓名:%s\n",stu[i].num,stu[i].name);           for(j=0;j<stu[i].coursesum;j++)           {               printf("课程编号:%d\t课程名称:%s\n",stu[i].course[j].cnum,stu[i].course[j].cname);              printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[i].course[j].scores[0],stu[i].course[j].scores[1],stu[i].course[j].scores[2],stu[i].course[j].realmark,stu[i].course[j].sum);         }           printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f\n",stu[i].coursesum,stu[i].realmarksum,stu[i].sum);          putchar(10);        }       stu_num+=ad;              SortSum_down(stu_num);//成绩修改后按照综合成绩降序排序         printf("\n\n【=*=----------增添信息后,所有学生综合成绩降序排序如下----------=*=】\n\n");        OutputScores(stu_num);  }    }

信息删除

void Delete() //删除学生信息{  int choice; char str[20];   int index;  int i;  char ch;        if(stu_num==0)    {       printf("【=*=---------请先录入学生基本信息---------=*=】\n");     system("pause");      return ;    }   else    {       printf("请选择删除方式: 通过学号删除请输入1,通过姓名删除请选择2:");       scanf("%d",&choice);      if(choice==1||choice==2)        {           if(choice==1)         {               printf("请输入学生学号:");                scanf("%s",&str);             index=FindIndex_num(str);              if(index!=-1)              {                   printf("学生信息如下:\n");                   printf("%8s %8s %8s %8s %8s\n","学号","姓名","性别","宿舍号","电话号码");                    printf("%8s %8s %8s %8s %8s\n",stu[index].num,stu[index].name,stu[index].sex,stu[index].dor,stu[index].phone);                    getchar();                  printf("输入Y或y删除学生信息,如果信息输入有误请输入N或n: ");                    ch=getchar();                  if(ch=='Y'||ch=='y')                    {                       for(i=index;i<stu_num;i++)                        {                           stu[i]=stu[i+1];                      }                       printf("\n学生信息删除成功!\n");                       stu_num-=1;                        SortSum_down(stu_num);//删除成绩后成绩重新排序                         printf("\n【=*=--------删除后所有学生按综合成绩降序排列如下----------=*=】\n\n");                     OutputScores(stu_num);//查看删除后的所有学生成绩                        putchar(10);                    }                   else if(ch=='N'||ch=='n')                       Delete();                   else                    {                       printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");                       Delete();                   }               }               else                {                   printf("\n【=*=------学生不存在,请重新输入-------=*=】\n\n");                  Delete();               }           }           if(choice==2)         {               printf("请输入学生姓名:");                scanf("%s",&str);             index=FindIndex_name(str);             if(index!=-1)              {                   printf("学生信息如下:\n");                   printf("%8s %8s %8s %8s %8s\n","学号","姓名","性别","宿舍号","电话号码");                    printf("%8s %8s %8s %8s %8s\n",stu[index].num,stu[index].name,stu[index].sex,stu[index].dor,stu[index].phone);                    getchar();                  printf("输入Y或y删除学生信息,如果信息输入有误请输入N或n: ");                    ch=getchar();                  if(ch=='Y'||ch=='y')                    {                       for(i=index;i<stu_num;i++)                        {                           stu[i]=stu[i+1];                      }                       printf("\n学生信息删除成功!\n");                       stu_num-=1;                        SortSum_down(stu_num);//删除成绩后成绩重新排序                         printf("\n【=*=--------删除后所有学生按综合成绩降序排列如下----------=*=】\n\n");                     OutputScores(stu_num);//查看删除后的所有学生成绩                        putchar(10);                    }                   else if(ch=='N'||ch=='n')                       Delete();                   else                    {                       printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");                       Delete();                   }                }              else                {                   printf("\n【=*=------学生不存在,请重新输入------=*=】\n\n");                   Delete();               }           }                   }       else        {           printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");           system("pause");          Delete();       }       }    }

学生分段

void ScoreLevelCal(int stu_sum) //计算成绩分段
{int i,j;for(i=0;i<stu_sum;i++){if(stu[i].ave>=90.0&&stu[i].ave<=100.0)       stu[i].ranks='A';else if(stu[i].ave>=80.0&&stu[i].ave<90.0)       stu[i].ranks='B';else if(stu[i].ave>=70.0&&stu[i].ave<80.0)       stu[i].ranks='C';else if(stu[i].ave>=60.0&&stu[i].ave<70.0)       stu[i].ranks='D';else stu[i].ranks='E';}}
void MarkLevelCal(int stu_sum) //计算学分分段
{int i,j;for(i=0;i<stu_sum;i++){if(stu[i].avemark>=90.0&&stu[i].avemark<=100.0)       stu[i].rankm='A';else if(stu[i].avemark>=80.0&&stu[i].avemark<90.0)       stu[i].rankm='B';else if(stu[i].avemark>=70.0&&stu[i].avemark<80.0)       stu[i].rankm='C';else if(stu[i].avemark>=60.0&&stu[i].avemark<70.0)       stu[i].rankm='D';else stu[i].rankm='E';}}
void MarkLevel(int stu_sum)//学分分段
{MarkLevelCal(stu_num);int i,j;int flag=0;printf("%10s%15s%15s\n\n","学号","姓名","平均学分");printf("--------------*****A*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].rankm=='A'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n--------------*****B*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].rankm=='B'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n--------------*****C*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].rankm=='C'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n--------------*****D*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].rankm=='D'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n--------------*****E*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].rankm=='E'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n【=*=----------学生成绩信息分段完毕----------=*=】\n");system("pause");}
void ScoreLevel(int stu_sum)//分数分段
{ ScoreLevelCal(stu_num);int i,j;int flag;char ch;printf("%10s%15s%15s\n\n","学号","姓名","平均综合分数");printf("--------------*****A*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].ranks=='A'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n--------------*****B*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].ranks=='B'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n--------------*****C*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].ranks=='C'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n--------------*****D*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].ranks=='D'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n--------------*****E*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].ranks=='E'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");printf("\n【=*=----------学生成绩信息分段完毕----------=*=】\n");system("pause");}
void Level() //成绩分段
{int choice;ScoreLevelCal(stu_num);MarkLevelCal(stu_num);if(stu_num==0){printf("【=*=---------请先录入学生基本信息---------=*=】\n");system("pause");return ; }else{printf("请选择分段方式:输入1按学分分段,输入2按综合成绩分段:");scanf("%d",&choice);if(choice==1)   {MarkLevel(stu_num);} else if(choice==2)  {ScoreLevel(stu_num);} else{printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");Level();}}}

成绩分段

信息分段

计算综合成绩

void CalsumOne(int i)    //计算一个学生综合成绩
{int j;//若本课程有实验for(j=0;j<stu[i].coursesum;j++){if(stu[i].course[j].scores[1]==-1)stu[i].course[j].sum = stu[i].course[j].scores[0]*0.3+stu[i].course[j].scores[2]*0.7;elsestu[i].course[j].sum = stu[i].course[j].scores[0]*0.15+stu[i].course[j].scores[1]*0.15+stu[i].course[j].scores[2]*0.7;stu[i].sum+=stu[i].course[j].sum;stu[i].ave=stu[i].sum/(float)stu[i].coursesum; //学生平均成绩 }system("pause");
}
void CalmarkOne(int i)
{int j;for(j=0;j<stu[i].coursesum;j++){if(stu[i].course[j].sum>=90&&stu[i].course[j].sum<100)stu[i].course[j].realmark=stu[i].course[j].mark;if(stu[i].course[j].sum>=80&&stu[i].course[j].sum<90)stu[i].course[j].realmark=stu[i].course[j].mark*0.8;if(stu[i].course[j].sum>=70&&stu[i].course[j].sum<80)stu[i].course[j].realmark=stu[i].course[j].mark*0.7;if(stu[i].course[j].sum>=60&&stu[i].course[j].sum<70)stu[i].course[j].realmark=stu[i].course[j].mark*0.6;if(stu[i].course[j].sum>=0&&stu[i].course[j].sum<60)stu[i].course[j].realmark=0.0;stu[i].realmarksum+=stu[i].course[j].realmark;//实得总学分值 }stu[i].avemark=stu[i].realmarksum/stu[i].coursesum;//实得平均学分
}

文件输出

void Read() //文件输出
{FILE *fp;int i,j;char filename[30];printf("请输入文件名称:");scanf("%s",&filename); if((fp=fopen(filename,"rb"))==NULL){ //fopen 指定读写方式为二进制写方式 //未指定文件路径,从源文件所在目录创建 printf("文件打开失败\n");exit(0);}fp=fopen(filename,"rb");for(i=0; fread(&stu[i], sizeof(struct Stu), 1, fp)!=0; i++){stu_num++;}printf("\n【=*=-----------文件中信息如下----------=*=】\n\n");for(i=0;i<stu_num;i++){fread( &stu[i] , sizeof(Stu) ,1, fp );printf("学号:%s 姓名:%s 性别:%s 宿舍号:%s 电话号码:%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].dor,stu[i].phone); for(j=0;j<stu[i].coursesum;j++) {printf("课程编号:%d\t课程名称:%s\n",stu[i].course[j].cnum,stu[i].course[j].cname);printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[i].course[j].scores[0],stu[i].course[j].scores[1],stu[i].course[j].scores[2],stu[i].course[j].realmark,stu[i].course[j].sum);}printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f\n\n",stu[i].coursesum,stu[i].realmarksum,stu[i].sum);}fclose(fp);system("pause");
}

文件储存

void Storage()//文件储存
{char filename[30];printf("请输入文件名称:");scanf("%s",&filename); FILE *fp;int  i;if((fp=fopen(filename,"w"))==NULL){printf("文件打开错误!\n");return;}for(i=0; i<stu_num; i++){fwrite(&stu[i], sizeof(struct Stu), 1, fp);}fclose(fp);printf("\n【=*=----------文件储存成功----------=*=】\n") ;system("pause");
}

文件导入

void Into()//文件导入
{char filename[30];printf("请输入文件名称:");scanf("%s",&filename); int i;FILE *fp;if((fp=fopen(filename,"r"))==NULL){printf("文件不能打开!\n");return;}for(i=0; fread(&stu[i], sizeof(struct Stu), 1, fp)!=0; i++){stu_num++;}fclose(fp);printf("\n【=*=----------文件导入成功----------=*=】\n") ;system("pause");
}

主界面

void Page()
{int choice;time_t rawtime;struct tm * timeinfo;time ( &rawtime );timeinfo = localtime ( &rawtime );system("cls");           /*运行前清屏*/           printf("\n");printf("\t===============学生*=*=*=*=*=*=*信息*=*=*=*=*=*=*管理=*=*=*=*=*=*=*系统===============\n\n");printf ( "\t\t\t      当前系统时间:%4d年%02d月%02d日 %02d:%02d:%02d\n",1900+timeinfo->tm_year, 1+timeinfo->tm_mon,timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);printf("\t*==*==*==*==*==*------------------------------------------------------*==*==*==*==*==*\n");printf("\n\t |***| (1)学生信息录入\t\t|***| (2)学生成绩录入\t\t|***| (3)综合成绩计算\n\n");printf("\t |===| (4)实得学分计算\t\t|===| (5)基本信息查询\t\t|===| (6)成绩信息查询\n\n");printf("\t |=*=| (7)学生成绩排序\t\t|=*=| (8)学生成绩修改\t\t|=*=| (9)学生成绩追加\n\n");printf("\t |===| (10)删除学生信息\t\t|===| (11)学生成绩分段   \t|===| (12)相关文件储存\n\n");printf("\t |=*=| (13)相关文件输出\t\t|=*=| (14)相关文件导入   \t|=*=| (0)退出系统\n\n");putchar(10);printf("\t*==*==*==*==*==*------------------------------------------------------*==*==*==*==*==*\n");printf("\t请选择操作序号(0-14):"); scanf("%d",&choice);switch(choice){case 1:system("cls");InputInformation();Page(); case 2:system("cls");InputScores();Page();case 3:system("cls");Calsum(stu_num);Page();case 4:system("cls");Calmark(stu_num);Page();case 5:system("cls");InformationSearch();Page();case 6:system("cls");ScoresSearch();Page();case 7:system("cls");Sort();Page();case 8:system("cls");Edit();Page();case 9:system("cls");Add(); Page();case 10:system("cls");Delete(); Page();case 11:system("cls");Level(); Page();case 12:system("cls");Storage();Page;case 13:system("cls");Read();Page();case 14:system("cls");Into();Page();case 0: printf("\n\t【=*=----------您已成功退出系统----------=*=】\n");exit(0);default: printf("\t--您所输入的操作有误,请重新输入--\n\n");system("pause"); Page();}
}

主函数

int main()
{Page();return 0;
}

完整代码实现

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<conio.h>struct Course
{char cname[20];    //课程名字 int cnum;    //课程编号 float scores[3]; //平时成绩、实验成绩、卷面成绩 float sum; //单课程综合成绩 float realmark;   //实得学分 float mark;  //学分
}course;
struct Stu
{char num[14];  //学生的学号char name[14];   //学生的姓名char sex[10];    //学生的性别 char cls[10];   //学生所在班级char dor[14];   //学生宿舍号char phone[20];  //学生电话号码 int coursesum; //学生所修课程总数 float realmarksum;   // 总学分值float avemark; //平均学分值 float sum;    //总 综合成绩float ave; //平均综合成绩 char rankm;//学生学分分段char ranks; //学生成绩分段struct Course course[10];
}stu[100];          //存储学生信息的全局结构体数组
int stu_num = 0;       //存储学生人数
int count;void InputInformation()//输入学生信息
{int i,j;; printf("提示:信息之间以空格隔开。敲击回车键完成录入。\n\n");printf("请输入您要录入的学生个数:");scanf("%d",&stu_num);putchar(10);for(i=0;i<stu_num;i++){printf("请输入第%d位学生信息:\n",i+1);printf("请输入学生的学号、姓名、性别、宿舍号、电话号码:\n");scanf("%s %s %s %s %s",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].dor,&stu[i].phone);putchar(10);}printf("【=*=---------学生信息录入完毕---------=*=】\n");system("pause");
}
void InputScores()//输入学生成绩
{int i,j;char inputnum[14];int index;int FindIndex_num(char str[]);printf("提示:\n1.信息之间以空格隔开。\n2.若该科目没有实验成绩,请输入-1。\n\n");if(stu_num==0){printf("【=*=---------请先录入学生基本信息---------=*=】\n");system("pause");return ; }else{for(i=0;i<stu_num;i++){printf("请输入需要录入的学生学号:");scanf("%s",&inputnum);index=FindIndex_num(inputnum);if(index!=-1){printf("请输入该生共修课程数目:");scanf("%d",&stu[index].coursesum);for(j=0;j<stu[index].coursesum;j++){printf("请第%d门输入课程编号和课程名字:",j+1);scanf("%d %s",&stu[index].course[j].cnum,&stu[index].course[j].cname);label:printf("请输入学生的平时成绩、实验成绩、卷面成绩、学分:");scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);for(int k=0;k<4;k++){if(stu[index].course[j].scores[k]>100||stu[index].course[j].scores[k]<0){printf("--您输入的学生第%d科成绩有误,请重新输入--\n",k+1);goto label;}if(stu[index].course[j].mark>100||stu[index].course[j].mark<0) {printf("--您输入的学生学分有误,请重新输入--\n");goto label;}}}}else {printf("--学生不存在,请重新输入--\n");system("pause");InputScores();}printf("\n"); } void ScoreLevelCal(int stu_sum) ;void MarkLevelCal(int stu_sum) ;ScoreLevelCal(stu_num);MarkLevelCal(stu_num);printf("【=*=---------学生成绩信息录入完毕---------=*=】\n");system("pause");} }
void Calsum(int stu_sum)    //计算学生综合成绩
{int i,j;//若本课程有实验if(stu_num==0){printf("【=*=---------请先录入学生基本信息---------=*=】\n");system("pause");return ; }else{for(i=0;i<stu_sum;i++){stu[i].sum=0; //学生总分初始化为 0 for(j=0;j<stu[i].coursesum;j++){if(stu[i].course[j].scores[1]==-1)stu[i].course[j].sum = stu[i].course[j].scores[0]*0.3+stu[i].course[j].scores[2]*0.7;elsestu[i].course[j].sum = stu[i].course[j].scores[0]*0.15+stu[i].course[j].scores[1]*0.15+stu[i].course[j].scores[2]*0.7;stu[i].sum+=stu[i].course[j].sum;stu[i].ave=stu[i].sum/(float)stu[i].coursesum; //学生平均成绩 }}void ScoreLevelCal(int stu_sum) ;void MarkLevelCal(int stu_sum) ;ScoreLevelCal(stu_num);MarkLevelCal(stu_num);printf("【=*=---------学生综合成绩计算完毕---------=*=】\n");system("pause");}}
void Calmark(int stu_sum)   //计算学生实得学分
{int i,j;if(stu_num==0){printf("【=*=---------请先录入学生基本信息---------=*=】\n");system("pause");return ; }else{for(i=0;i<stu_sum;i++){stu[i].realmarksum=0;for(j=0;j<stu[i].coursesum;j++){if(stu[i].course[j].sum>=90&&stu[i].course[j].sum<100)stu[i].course[j].realmark=stu[i].course[j].mark;if(stu[i].course[j].sum>=80&&stu[i].course[j].sum<90)stu[i].course[j].realmark=stu[i].course[j].mark*0.8;if(stu[i].course[j].sum>=70&&stu[i].course[j].sum<80)stu[i].course[j].realmark=stu[i].course[j].mark*0.7;if(stu[i].course[j].sum>=60&&stu[i].course[j].sum<70)stu[i].course[j].realmark=stu[i].course[j].mark*0.6;if(stu[i].course[j].sum>=0&&stu[i].course[j].sum<60)stu[i].course[j].realmark=0.0;stu[i].realmarksum+=stu[i].course[j].realmark;//实得总学分值 }stu[i].avemark=stu[i].realmarksum/stu[i].coursesum;//实得平均学分 }printf("【=*=---------学生实得学分计算完毕---------=*=】\n");system("pause");}}
int FindIndex_num(char str[])//根据学号寻找学生信息
{int i,j;int index=-1;for(i=0;i<stu_num;i++){if(strcmp(str,stu[i].num)==0) index=i;}return index;
}
int FindIndex_name(char str[])//根据姓名寻找学生信息
{int i,j;int index=-1;for(i=0;i<stu_num;i++){if(strcmp(str,stu[i].name)==0) index=i;}return index;
}
void FindIndex_dor(char str[])//根据宿舍号码寻找学生信息
{int i;printf("\n【=*=------------您所查询的宿舍信息如下------------=*=】\n\n");printf("%10s %10s %10s %10s %10s\n","学号","姓名","性别","宿舍号","电话号码");for(i=0;i<stu_num;i++){if(strcmp(str,stu[i].dor)==0){printf("%10s %10s %10s %10s %10s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].dor,stu[i].phone);    }}
}
int FindIndex_dor0(char str[])//根据宿舍号码判断学生是否存在
{int i;int index=-1;for(i=0;i<stu_num;i++){if(strcmp(str,stu[i].dor)==0){index=i; }} return index;
}
void OutputInformation(int stu_sum)//学生基本情况的输出
{int i;printf("学生的基本情况输出如下:\n");printf("%10s %10s %10s %10s %10s\n","学号","姓名","性别","宿舍号","电话号码");for(i=0;i<stu_num;i++)printf("%10s %10s %10s %10s %10s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].dor,stu[i].phone); printf("【=*=-----------学生基本信息情况输出完毕----------=*=】\n");system("pause");
}
void OutputScores(int stu_sum)  //学生成绩情况输出
{int i,j;//printf("学生的成绩信息输出如下:\n");for(i=0;i<stu_num;i++){printf("学号为%s   姓名为%s 的同学课程信息如下:\n",stu[i].num,stu[i].name);for(j=0;j<stu[i].coursesum;j++){printf("课程编号:%d\t课程名称:%s\n",stu[i].course[j].cnum,stu[i].course[j].cname);printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[i].course[j].scores[0],stu[i].course[j].scores[1],stu[i].course[j].scores[2],stu[i].course[j].realmark,stu[i].course[j].sum);}printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f\n",stu[i].coursesum,stu[i].realmarksum,stu[i].sum);putchar(10);}printf("\n【=*=-----------学生成绩信息输出完毕-----------=*=】\n");system("pause");}
void OutputScores_One(int index)//输出一个学生的成绩
{int j;printf("学号:%s \t姓名:%s \n",stu[index].num,stu[index].name);for(j=0;j<stu[index].coursesum;j++){printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);}printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f",stu[index].coursesum,stu[index].realmarksum,stu[index].sum);putchar(10);}
void InformationSearch()//学生基本情况查询
{int i,j;int choice;int index;char str[14];printf("请选择查询方式:\n学号查找请输入1  姓名查找请输入2  查找宿舍信息请输入3:") ;scanf("%d",&choice);if(choice==1){printf("请输入学生的学号:");scanf("%s",&str);index=FindIndex_num(str);if(index!=-1) {printf("\n【=*=----------您所寻找学生信息如下----------=*=】\n\n");printf("%10s %10s %10s %10s %10s\n","学号","姓名","性别","宿舍号","电话号码");printf("%10s %10s %10s %10s %10s\n",stu[index].num,stu[index].name,stu[index].sex,stu[index].dor,stu[index].phone);printf("\n【=*=----------学生基本信息输出完毕----------=*=】\n\n");   system("pause");}else {printf("\n【=*=----------您所查找的学生不存在,请重新输入----------=*=】\n\n");InformationSearch();}}if(choice==2){printf("请输入学生的姓名:");scanf("%s",&str);index=FindIndex_name(str);if(index!=-1) {printf("\n【=*=----------您所寻找学生信息如下----------=*=】\n\n");printf("%10s %10s %10s %10s %10s\n","学号","姓名","性别","宿舍号","电话号码");printf("%10s %10s %10s %10s %10s\n",stu[index].num,stu[index].name,stu[index].sex,stu[index].dor,stu[index].phone);printf("\n【=*=----------学生基本信息输出完毕----------=*=】\n\n");system("pause");}else {printf("【\n=*=----------您所查找的学生不存在,请重新输入----------=*=】\n\n");InformationSearch();}}if(choice==3){printf("请输入宿舍号码:");scanf("%s",&str);index=FindIndex_dor0(str);if(index==-1)  {printf("【\n=*=----------您所查找的宿舍不存在,请重新输入----------=*=】\n\n");InformationSearch();}else {FindIndex_dor(str);printf("\n【=*=----------学生基本信息输出完毕----------=*=】\n\n");system("pause");}} if(choice!=1&&choice!=2&&choice!=3){printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");system("pause");InformationSearch();}}
void ScoresSearch()//学生成绩情况查询
{int i,j;int choice;int index;char str[14];printf("请选择查询方式:\n学号查找请输入1  姓名查找请输入2 :") ;scanf("%d",&choice);if(choice==1){printf("请输入学生的学号:");scanf("%s",&str);index=FindIndex_num(str);if(index!=-1) {printf("\n【=*=----------您所寻找学生信息如下----------=*=】\n\n");printf("学号为%s    姓名为 %s 的同学课程信息如下:\n",stu[index].num,stu[index].name);for(j=0;j<stu[i].coursesum;j++){printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);} printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f",stu[index].coursesum,stu[index].realmarksum,stu[index].sum);printf("\n\n【=*=----------学生成绩信息输出完毕----------=*=】\n");system("pause");}else {printf("\n\n【=*=----------您所查找的学生不存在,请重新输入----------=*=】\n\n");ScoresSearch();}   }if(choice==2){printf("请输入学生的姓名:");scanf("%s",&str);index=FindIndex_name(str);if(index!=-1){printf("\n【=*=----------您所寻找学生信息如下----------=*=】\n\n");printf("学号为%s    姓名为 %s 的同学课程信息如下:\n",stu[index].num,stu[index].name);for(j=0;j<stu[i].coursesum;j++){printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);} printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f",stu[index].coursesum,stu[index].realmarksum,stu[index].sum);printf("\n\n【=*=----------学生成绩信息输出完毕----------=*=】\n");system("pause");}else {printf("\n\n【=*=----------您所查找的学生不存在,请重新输入----------=*=】\n\n");ScoresSearch();}}if(choice!=1&&choice!=2){printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");system("pause");ScoresSearch();}}
void SortSum_up(int stu_sum) //综合成绩升序排序
{int i,j,k;struct Stu temp;struct Course t;for (i=0;i<stu_num;i++)for (j=i+1;j<stu_num;j++)if (stu[i].sum > stu[j].sum){temp=stu[i];stu[i]=stu[j];stu[j]=temp;//排序总综合成绩}for (i=0;i<stu_num;i++)for (j=0;j<stu[i].coursesum;j++)for (k=j+1;k<stu[i].coursesum;k++)if (stu[i].course[j].sum > stu[i].course[k].sum){t=stu[i].course[j];stu[i].course[j]=stu[i].course[k];stu[i].course[k]=t;//排序课程综合成绩}
}
void SortSum_down(int stu_sum) //综合成绩降序排序
{int i,j,k;struct Stu temp;struct Course t;for (i=0;i<stu_num;i++)for (j=i+1;j<stu_num;j++)if (stu[i].sum < stu[j].sum){temp=stu[i];stu[i]=stu[j];stu[j]=temp;//排序总综合成绩}for (i=0;i<stu_num;i++)for (j=0;j<stu[i].coursesum;j++)for (k=j+1;k<stu[i].coursesum;k++)if (stu[i].course[j].sum < stu[i].course[k].sum){t=stu[i].course[j];stu[i].course[j]=stu[i].course[k];stu[i].course[k]=t;}
}
void SortRealMark_up() //实得总学分升序排序
{int i,j,k;struct Stu temp;struct Course t;for (i=0;i<stu_num;i++)for (j=i+1;j<stu_num;j++)if (stu[i].realmarksum < stu[j].realmarksum){temp=stu[i];stu[i]=stu[j];stu[j]=temp;//排序总综合成绩}for (i=0;i<stu_num;i++)for (j=0;j<stu[i].coursesum;j++)for (k=j+1;k<stu[i].coursesum;k++)if (stu[i].course[j].realmark < stu[i].course[k].realmark){t=stu[i].course[j];stu[i].course[j]=stu[i].course[k];stu[i].course[k]=t;//排序课程综合成绩}
}
void SortRealMark_down() //实得总学分降序排序
{int i,j,k;struct Stu temp;struct Course t;for (i=0;i<stu_num;i++)for (j=i+1;j<stu_num;j++)if (stu[i].realmarksum > stu[j].realmarksum){temp=stu[i];stu[i]=stu[j];stu[j]=temp;//排序总综合成绩}for (i=0;i<stu_num;i++)for (j=0;j<stu[i].coursesum;j++)for (k=j+1;k<stu[i].coursesum;k++)if (stu[i].course[j].realmark > stu[i].course[k].realmark){t=stu[i].course[j];stu[i].course[j]=stu[i].course[k];stu[i].course[k]=t;//排序课程综合成绩}
}
void Sort()//成绩排序
{int i,j,k;int choice;if(stu_num==0){printf("【=*=---------请先录入学生基本信息---------=*=】\n");system("pause");return ; }else {printf("请选择排序方式:\n按综合成绩升序请输入1  按综合成绩升序请输入2 按实得总学分值升序请输入3  按实得总学分值降序请输入4:") ;scanf("%d",&choice);if(choice==1||choice==2||choice==3||choice==4){if(choice==1)SortSum_up(stu_num); if(choice==2)SortSum_down(stu_num); if(choice==3)SortRealMark_up();if(choice==4)SortRealMark_down();printf("\n【=*=----------学生成绩排序完毕  学生成绩表如下----------=*=】\n\n");OutputScores(stu_num);}else {printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");Sort();}}}
void Edit()//成绩修改
{int i,j;int choice;int index;char str[14];char strc[14];if(stu_num==0){printf("【=*=---------请先录入学生基本信息---------=*=】\n");system("pause");return ; }else{printf("请选择修改方式:\n学号修改请输入1  姓名修改请输入2 :") ;scanf("%d",&choice);if(choice==1||choice==2){    if(choice==1) //学号修改 {printf("请输入学生的学号:");scanf("%s",&str);index=FindIndex_num(str);if(index!=-1){printf("\n您希望修改的学生信息如下:\n");OutputScores_One(index);printf("\n请选择修改方式: 修改全部成绩请输入3  修改一科成绩请输入4:  ");scanf("%d",&choice);if(choice==3||choice==4){if(choice==3) //学号修改-修改全部成绩 {printf("\n请输入该生共修课程数目:");scanf("%d",&stu[index].coursesum);for(j=0;j<stu[index].coursesum;j++){printf("\n请输入课程编号和课程名字:");scanf("%d %s",&stu[index].course[j].cnum,&stu[index].course[j].cname);printf("\n请输入学生的平时成绩、实验成绩、卷面成绩、学分:");scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);Calsum(stu_num);Calmark(stu_num);}}if(choice==4) //学号修改 修改单科成绩 {int num; printf("请输入课程名称: ");scanf("%s",&strc);for(j=0;j<stu[index].coursesum;j++){  if(strcmp(str,stu[index].course[j].cname)==0){printf("您所寻找的学生课程情况如下:\n");printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);printf("\n请输入学生的平时成绩、实验成绩、卷面成绩、学分:");scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);Calsum(stu_num);Calmark(stu_num);} //break;}   } }else {printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");system("pause");Edit();}}printf("【=*=----------学生信息修改完毕----------=*=】\n");system("pause");}if(choice==2) //姓名修改 {printf("请输入学生的姓名:");scanf("%s",&str);index=FindIndex_name(str);if(index!=-1){  printf("\n您希望修改的学生信息如下:\n");OutputScores_One(index);printf("\n请选择修改方式:修改全部成绩请输入5  修改一科成绩请输入6: ");scanf("%d",&choice);if(choice==5||choice==6){if(choice==5) //姓名修改-修改全部成绩 {printf("请输入该生共修课程数目:");scanf("%d",&stu[index].coursesum);for(j=0;j<stu[index].coursesum;j++){printf("\n请输入课程编号和课程名字:");scanf("%d %s",&stu[index].course[j].cnum,&stu[index].course[j].cname);printf("\n请输入学生的平时成绩、实验成绩、卷面成绩、学分:");scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);Calsum(stu_num);Calmark(stu_num);} }if(choice==6) //姓名修改-修改单科成绩 {int num; printf("请输入课程名称: ");scanf("%s",&strc);for(j=0;j<stu[index].coursesum;j++){if(strcmp(strc,stu[index].course[j].cname)==0){printf("您所寻找的学生课程情况如下:\n");printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);printf("\n请输入学生的平时成绩、实验成绩、卷面成绩、学分:");scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);Calsum(stu_num);Calmark(stu_num); } //break;}}} else {printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");system("pause");Edit();}}}printf("\n\n【=*=----------学生信息修改完毕----------=*=】\n");printf("\n\n【=*=----------修改后该生成绩如下----------=*=】\n\n");OutputScores_One(index);//else printf("您输入选项有误,请重新输入。\n"); //返回菜单printf("\n\n【=*=----------修改后所有学生综合成绩降序排列如下----------=*=】\n");  SortSum_down(stu_num);//成绩修改后按照综合成绩降序排序 OutputScores(stu_num);}else{printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");Edit();}}}
void Add() // 成绩追加
{int ad;int i,j;if(stu_num==0){printf("【=*=---------请先录入学生基本信息---------=*=】\n");system("pause");return ; }else{printf("请输入您要追加的学生人数: ");scanf("%d",&ad);for(i=stu_num;i<stu_num+ad;i++){printf("\n请输入第%d位学生信息:\n",i+1);printf("请输入学生的学号、姓名、性别、宿舍号、电话号码:");scanf("%s %s %s %s %s",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].dor,&stu[i].phone);printf("第%d位学生信息录入完毕,请录入学生成绩信息:\n",i+1);printf("请输入该生共修课程数目:");scanf("%d",&stu[i].coursesum);for(j=0;j<stu[i].coursesum;j++){printf("请输入课程编号和课程名字:");scanf("%d %s",&stu[i].course[j].cnum,&stu[i].course[j].cname);printf("请输入学生的平时成绩、实验成绩、卷面成绩、学分:");scanf("%f %f %f %f",&stu[i].course[j].scores[0],&stu[i].course[j].scores[1],&stu[i].course[j].scores[2],&stu[i].course[j].mark);if(stu[i].course[j].scores[1]==-1)stu[i].course[j].sum = stu[i].course[j].scores[0]*0.3+stu[i].course[j].scores[2]*0.7;elsestu[i].course[j].sum = stu[i].course[j].scores[0]*0.15+stu[i].course[j].scores[1]*0.15+stu[i].course[j].scores[2]*0.7;stu[i].sum+=stu[i].course[j].sum;stu[i].ave=stu[i].sum/(float)stu[i].coursesum; //学生平均成绩 }void CalmarkOne(int i);CalmarkOne(i); }printf("\n【=*=---------补录学生信息录入完毕---------=*=】\n\n");//stu_num=stu_num+ad;void MarkLevelCal(int stu_sum);void ScoreLevelCal(int stu_sum);ScoreLevelCal(stu_num+ad);MarkLevelCal(stu_num+ad);printf("【=*=-----------新增学生信息情况如下-----------=*=】\n\n");for(i=stu_num;i<stu_num+ad;i++){printf("学号:%s   姓名:%s\n",stu[i].num,stu[i].name);for(j=0;j<stu[i].coursesum;j++){printf("课程编号:%d\t课程名称:%s\n",stu[i].course[j].cnum,stu[i].course[j].cname);printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[i].course[j].scores[0],stu[i].course[j].scores[1],stu[i].course[j].scores[2],stu[i].course[j].realmark,stu[i].course[j].sum);}printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f\n",stu[i].coursesum,stu[i].realmarksum,stu[i].sum);putchar(10);}stu_num+=ad;SortSum_down(stu_num);//成绩修改后按照综合成绩降序排序 printf("\n\n【=*=----------增添信息后,所有学生综合成绩降序排序如下----------=*=】\n\n");OutputScores(stu_num);}}
void Delete() //删除学生信息
{int choice;char str[20];int index;int i;char ch;if(stu_num==0){printf("【=*=---------请先录入学生基本信息---------=*=】\n");system("pause");return ; }else{printf("请选择删除方式: 通过学号删除请输入1,通过姓名删除请选择2:");scanf("%d",&choice);if(choice==1||choice==2){if(choice==1){printf("请输入学生学号:");scanf("%s",&str);index=FindIndex_num(str);if(index!=-1){printf("学生信息如下:\n");printf("%8s %8s %8s %8s %8s\n","学号","姓名","性别","宿舍号","电话号码");printf("%8s %8s %8s %8s %8s\n",stu[index].num,stu[index].name,stu[index].sex,stu[index].dor,stu[index].phone); getchar();printf("输入Y或y删除学生信息,如果信息输入有误请输入N或n: ");ch=getchar();if(ch=='Y'||ch=='y'){for(i=index;i<stu_num;i++){stu[i]=stu[i+1];}printf("\n学生信息删除成功!\n"); stu_num-=1;SortSum_down(stu_num);//删除成绩后成绩重新排序 printf("\n【=*=--------删除后所有学生按综合成绩降序排列如下----------=*=】\n\n");OutputScores(stu_num);//查看删除后的所有学生成绩 putchar(10); }else if(ch=='N'||ch=='n')Delete(); else {printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");Delete();}}else{printf("\n【=*=------学生不存在,请重新输入-------=*=】\n\n");Delete();}}if(choice==2){printf("请输入学生姓名:");scanf("%s",&str);index=FindIndex_name(str);if(index!=-1){printf("学生信息如下:\n");printf("%8s %8s %8s %8s %8s\n","学号","姓名","性别","宿舍号","电话号码");printf("%8s %8s %8s %8s %8s\n",stu[index].num,stu[index].name,stu[index].sex,stu[index].dor,stu[index].phone); getchar();printf("输入Y或y删除学生信息,如果信息输入有误请输入N或n: ");ch=getchar();if(ch=='Y'||ch=='y'){for(i=index;i<stu_num;i++){stu[i]=stu[i+1];}printf("\n学生信息删除成功!\n"); stu_num-=1;SortSum_down(stu_num);//删除成绩后成绩重新排序 printf("\n【=*=--------删除后所有学生按综合成绩降序排列如下----------=*=】\n\n");OutputScores(stu_num);//查看删除后的所有学生成绩 putchar(10);}else if(ch=='N'||ch=='n')Delete(); else {printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");Delete();}} else{printf("\n【=*=------学生不存在,请重新输入------=*=】\n\n");Delete();}}}else {printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");system("pause");Delete();}}}
void ScoreLevelCal(int stu_sum) //计算成绩分段
{int i,j;for(i=0;i<stu_sum;i++){if(stu[i].ave>=90.0&&stu[i].ave<=100.0)       stu[i].ranks='A';else if(stu[i].ave>=80.0&&stu[i].ave<90.0)       stu[i].ranks='B';else if(stu[i].ave>=70.0&&stu[i].ave<80.0)       stu[i].ranks='C';else if(stu[i].ave>=60.0&&stu[i].ave<70.0)       stu[i].ranks='D';else stu[i].ranks='E';}}
void MarkLevelCal(int stu_sum) //计算学分分段
{int i,j;for(i=0;i<stu_sum;i++){if(stu[i].avemark>=90.0&&stu[i].avemark<=100.0)       stu[i].rankm='A';else if(stu[i].avemark>=80.0&&stu[i].avemark<90.0)       stu[i].rankm='B';else if(stu[i].avemark>=70.0&&stu[i].avemark<80.0)       stu[i].rankm='C';else if(stu[i].avemark>=60.0&&stu[i].avemark<70.0)       stu[i].rankm='D';else stu[i].rankm='E';}}
void MarkLevel(int stu_sum)//学分分段
{MarkLevelCal(stu_num);int i,j;int flag=0;printf("%10s%15s%15s\n\n","学号","姓名","平均学分");printf("--------------*****A*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].rankm=='A'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n--------------*****B*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].rankm=='B'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n--------------*****C*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].rankm=='C'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n--------------*****D*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].rankm=='D'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n--------------*****E*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].rankm=='E'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n【=*=----------学生成绩信息分段完毕----------=*=】\n");system("pause");}
void ScoreLevel(int stu_sum)//分数分段
{ ScoreLevelCal(stu_num);int i,j;int flag;char ch;printf("%10s%15s%15s\n\n","学号","姓名","平均综合分数");printf("--------------*****A*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].ranks=='A'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n--------------*****B*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].ranks=='B'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n--------------*****C*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].ranks=='C'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n--------------*****D*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].ranks=='D'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");flag=0;printf("\n--------------*****E*****--------------\n") ;for(i=0;i<stu_num;i++){if(stu[i].ranks=='E'){printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);flag=1;}}if(flag==0)printf("\t---该分段无学生---\n");printf("\n【=*=----------学生成绩信息分段完毕----------=*=】\n");system("pause");}
void Level() //成绩分段
{int choice;ScoreLevelCal(stu_num);MarkLevelCal(stu_num);if(stu_num==0){printf("【=*=---------请先录入学生基本信息---------=*=】\n");system("pause");return ; }else{printf("请选择分段方式:输入1按学分分段,输入2按综合成绩分段:");scanf("%d",&choice);if(choice==1)   {MarkLevel(stu_num);} else if(choice==2)  {ScoreLevel(stu_num);} else{printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");Level();}}}
void CalsumOne(int i)   //计算一个学生综合成绩
{int j;//若本课程有实验for(j=0;j<stu[i].coursesum;j++){if(stu[i].course[j].scores[1]==-1)stu[i].course[j].sum = stu[i].course[j].scores[0]*0.3+stu[i].course[j].scores[2]*0.7;elsestu[i].course[j].sum = stu[i].course[j].scores[0]*0.15+stu[i].course[j].scores[1]*0.15+stu[i].course[j].scores[2]*0.7;stu[i].sum+=stu[i].course[j].sum;stu[i].ave=stu[i].sum/(float)stu[i].coursesum; //学生平均成绩 }system("pause");
}
void CalmarkOne(int i)
{int j;for(j=0;j<stu[i].coursesum;j++){if(stu[i].course[j].sum>=90&&stu[i].course[j].sum<100)stu[i].course[j].realmark=stu[i].course[j].mark;if(stu[i].course[j].sum>=80&&stu[i].course[j].sum<90)stu[i].course[j].realmark=stu[i].course[j].mark*0.8;if(stu[i].course[j].sum>=70&&stu[i].course[j].sum<80)stu[i].course[j].realmark=stu[i].course[j].mark*0.7;if(stu[i].course[j].sum>=60&&stu[i].course[j].sum<70)stu[i].course[j].realmark=stu[i].course[j].mark*0.6;if(stu[i].course[j].sum>=0&&stu[i].course[j].sum<60)stu[i].course[j].realmark=0.0;stu[i].realmarksum+=stu[i].course[j].realmark;//实得总学分值 }stu[i].avemark=stu[i].realmarksum/stu[i].coursesum;//实得平均学分
}void Read() //文件输出
{FILE *fp;int i,j;char filename[30];printf("请输入文件名称:");scanf("%s",&filename); if((fp=fopen(filename,"rb"))==NULL){ //fopen 指定读写方式为二进制写方式 //未指定文件路径,从源文件所在目录创建 printf("文件打开失败\n");exit(0);}fp=fopen(filename,"rb");for(i=0; fread(&stu[i], sizeof(struct Stu), 1, fp)!=0; i++){stu_num++;}printf("\n【=*=-----------文件中信息如下----------=*=】\n\n");for(i=0;i<stu_num;i++){fread( &stu[i] , sizeof(Stu) ,1, fp );printf("学号:%s 姓名:%s 性别:%s 宿舍号:%s 电话号码:%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].dor,stu[i].phone); for(j=0;j<stu[i].coursesum;j++) {printf("课程编号:%d\t课程名称:%s\n",stu[i].course[j].cnum,stu[i].course[j].cname);printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[i].course[j].scores[0],stu[i].course[j].scores[1],stu[i].course[j].scores[2],stu[i].course[j].realmark,stu[i].course[j].sum);}printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f\n\n",stu[i].coursesum,stu[i].realmarksum,stu[i].sum);}fclose(fp);system("pause");
}
void Storage()//文件储存
{char filename[30];printf("请输入文件名称:");scanf("%s",&filename); FILE *fp;int  i;if((fp=fopen(filename,"w"))==NULL){printf("文件打开错误!\n");return;}for(i=0; i<stu_num; i++){fwrite(&stu[i], sizeof(struct Stu), 1, fp);}fclose(fp);printf("\n【=*=----------文件储存成功----------=*=】\n") ;system("pause");
}
void Into()//文件导入
{char filename[30];printf("请输入文件名称:");scanf("%s",&filename); int i;FILE *fp;if((fp=fopen(filename,"r"))==NULL){printf("文件不能打开!\n");return;}for(i=0; fread(&stu[i], sizeof(struct Stu), 1, fp)!=0; i++){stu_num++;}fclose(fp);printf("\n【=*=----------文件导入成功----------=*=】\n") ;system("pause");
}
void Page()
{int choice;time_t rawtime;struct tm * timeinfo;time ( &rawtime );timeinfo = localtime ( &rawtime );system("cls");           /*运行前清屏*/           printf("\n");printf("\t===============学生*=*=*=*=*=*=*信息*=*=*=*=*=*=*管理=*=*=*=*=*=*=*系统===============\n\n");printf ( "\t\t\t      当前系统时间:%4d年%02d月%02d日 %02d:%02d:%02d\n",1900+timeinfo->tm_year, 1+timeinfo->tm_mon,timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);printf("\t*==*==*==*==*==*------------------------------------------------------*==*==*==*==*==*\n");printf("\n\t |***| (1)学生信息录入\t\t|***| (2)学生成绩录入\t\t|***| (3)综合成绩计算\n\n");printf("\t |===| (4)实得学分计算\t\t|===| (5)基本信息查询\t\t|===| (6)成绩信息查询\n\n");printf("\t |=*=| (7)学生成绩排序\t\t|=*=| (8)学生成绩修改\t\t|=*=| (9)学生成绩追加\n\n");printf("\t |===| (10)删除学生信息\t\t|===| (11)学生成绩分段   \t|===| (12)相关文件储存\n\n");printf("\t |=*=| (13)相关文件输出\t\t|=*=| (14)相关文件导入   \t|=*=| (0)退出系统\n\n");putchar(10);printf("\t*==*==*==*==*==*------------------------------------------------------*==*==*==*==*==*\n");printf("\t请选择操作序号(0-14):"); scanf("%d",&choice);switch(choice){case 1:system("cls");InputInformation();Page(); case 2:system("cls");InputScores();Page();case 3:system("cls");Calsum(stu_num);Page();case 4:system("cls");Calmark(stu_num);Page();case 5:system("cls");InformationSearch();Page();case 6:system("cls");ScoresSearch();Page();case 7:system("cls");Sort();Page();case 8:system("cls");Edit();Page();case 9:system("cls");Add(); Page();case 10:system("cls");Delete(); Page();case 11:system("cls");Level(); Page();case 12:system("cls");Storage();Page;case 13:system("cls");Read();Page();case 14:system("cls");Into();Page();case 0: printf("\n\t【=*=----------您已成功退出系统----------=*=】\n");exit(0);default: printf("\t--您所输入的操作有误,请重新输入--\n\n");system("pause"); Page();}
}
int main()
{Page();return 0;} 

C-学籍和成绩管理系统(无指针版)相关推荐

  1. 学生成绩管理系统(简单版)

    学生成绩管理系统(简单版) 学生成绩管理系统(简单版) 数组版 结构体版 函数版 学生成绩管理系统(简单版) 要求:存储50个学生下信息(学号,姓名,性别,成绩1,成绩2)计算平均成绩,与等级(等级要 ...

  2. 学生成绩排名及管理系统c语言,学生成绩管理系统__C语言版.doc

    学生成绩管理系统__C语言版 学生成绩管理系统__C语言版 #include #include #include #include #include #include using namespace ...

  3. c语言按给定成绩查询,C语言学生成绩管理系统(简易版)

    #include #include #include int readstudents(struct students stu[]); //读取学生信息 int readsexcode(struct ...

  4. Java+MySQL学生选课与成绩管理系统(数据库版)

    一.项目要求 学生选课与成绩管理系统(数据库版) 1.配置MySQL数据库 2.利用java+MySQL实现系统各个功能 3.功能包括: (1)系统交互界面,如下图所示 (2)学生信息的增删改查.学生 ...

  5. 生成绩管理系统c语言,学生成绩管理系统——C语言版

    <学生成绩管理系统--C语言版>由会员分享,可在线阅读,更多相关<学生成绩管理系统--C语言版(12页珍藏版)>请在人人文库网上搜索. 1.*常用的标准输入输出函数*/*acc ...

  6. 学生成绩管理系统(简易版)

    写一个简单的学生成绩管理系统 为了方便,并且这个程序也不是很长,所以把所有代码写在一起了,下面是头文件和声明部分: 4.14修改版 : #include<stdio.h> #include ...

  7. 西南交通大学高级语言程序设计(SCAI000812)第2次实验报告-学生成绩管理系统(链表版)

    背景描述: 因为苦于网上到处都找不到答案,仅有的链表版还要收费,我就自己写了一个低配版链表,将就着用,想的是帮助明年以及后年的学弟学妹们. 题目描述: 实验目的: 掌握程序设计的基本算法和简单数据结构 ...

  8. Java项目:学生管理系统(无库版)(java+打印控制台)

    源码获取:博客首页 "资源" 里下载! 功能介绍: 学生成绩管理系统成绩表 用户管理操作: /*** 用户管理操作*/ @Controller @RequestMapping(&q ...

  9. 学生成绩管理系统(java简略版)

    学生成绩管理系统 任务目标: 1.用java编写学生成绩系统,能够实现增删查改的操作: 2.有相应的数据结构来存储学生信息: 3.对相应的对象进行封装. 实现思路: 1.学生应为一个类,通过构建实例来 ...

最新文章

  1. 操作系统学习:Linux0.12文件异步IO
  2. R语言ggplot2可视化:使用pracma包的interp1函数对缺失值进行线性插值后进行可视化分析、用虚线标记进行数据填充的区域
  3. socket.io.js的disconnect事件
  4. 自己实现strstr函数与strchr函数
  5. mysql 5.7.12 修改密码
  6. 单件模式与业务逻辑服务层封装
  7. 这么多年都白学了,原来是方法没有用对
  8. Camtasia怎么添加文字效果
  9. 网络技术与技术革命周末随想
  10. python:It seems that scikit-learn has not been built correctly
  11. github加速神器
  12. win7重装系统后计算机打不开,win7系统重装后进不了系统怎么办
  13. 使用域名查询网站ip地址
  14. 在网易有数上做数据加工和数据分析的实践
  15. 【数模整理3】数据分析那些事儿——回归分析
  16. 无线服务器网速加快,无线路由器网速慢怎么办?
  17. 公网异地远程访问家中/公司的群晖NAS
  18. slmgr.vbs是什么?
  19. 京东数科java一面【过】
  20. 什么是Native方法

热门文章

  1. 速抢!独家微信红包封面来了!!
  2. TIOBE 11月排行榜:Python奋起直追,或将超越C语言
  3. 联想小新14 2019锐龙版 更换16G内存后 可用内存显示6.71G问题
  4. margin和padding的用法
  5. Python 的guppy模块检测内存
  6. iphone无法开机
  7. 35岁程序员找不到工作
  8. 404错误页面源码模板大全,提供下载
  9. 如何克隆一个虚拟机/如何把虚拟机克隆一份给别人用/虚拟机互相通信
  10. 学习方法十二利用自由时间