C-学籍和成绩管理系统(无指针版)
系统设计说明
(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-学籍和成绩管理系统(无指针版)相关推荐
- 学生成绩管理系统(简单版)
学生成绩管理系统(简单版) 学生成绩管理系统(简单版) 数组版 结构体版 函数版 学生成绩管理系统(简单版) 要求:存储50个学生下信息(学号,姓名,性别,成绩1,成绩2)计算平均成绩,与等级(等级要 ...
- 学生成绩排名及管理系统c语言,学生成绩管理系统__C语言版.doc
学生成绩管理系统__C语言版 学生成绩管理系统__C语言版 #include #include #include #include #include #include using namespace ...
- c语言按给定成绩查询,C语言学生成绩管理系统(简易版)
#include #include #include int readstudents(struct students stu[]); //读取学生信息 int readsexcode(struct ...
- Java+MySQL学生选课与成绩管理系统(数据库版)
一.项目要求 学生选课与成绩管理系统(数据库版) 1.配置MySQL数据库 2.利用java+MySQL实现系统各个功能 3.功能包括: (1)系统交互界面,如下图所示 (2)学生信息的增删改查.学生 ...
- 生成绩管理系统c语言,学生成绩管理系统——C语言版
<学生成绩管理系统--C语言版>由会员分享,可在线阅读,更多相关<学生成绩管理系统--C语言版(12页珍藏版)>请在人人文库网上搜索. 1.*常用的标准输入输出函数*/*acc ...
- 学生成绩管理系统(简易版)
写一个简单的学生成绩管理系统 为了方便,并且这个程序也不是很长,所以把所有代码写在一起了,下面是头文件和声明部分: 4.14修改版 : #include<stdio.h> #include ...
- 西南交通大学高级语言程序设计(SCAI000812)第2次实验报告-学生成绩管理系统(链表版)
背景描述: 因为苦于网上到处都找不到答案,仅有的链表版还要收费,我就自己写了一个低配版链表,将就着用,想的是帮助明年以及后年的学弟学妹们. 题目描述: 实验目的: 掌握程序设计的基本算法和简单数据结构 ...
- Java项目:学生管理系统(无库版)(java+打印控制台)
源码获取:博客首页 "资源" 里下载! 功能介绍: 学生成绩管理系统成绩表 用户管理操作: /*** 用户管理操作*/ @Controller @RequestMapping(&q ...
- 学生成绩管理系统(java简略版)
学生成绩管理系统 任务目标: 1.用java编写学生成绩系统,能够实现增删查改的操作: 2.有相应的数据结构来存储学生信息: 3.对相应的对象进行封装. 实现思路: 1.学生应为一个类,通过构建实例来 ...
最新文章
- 操作系统学习:Linux0.12文件异步IO
- R语言ggplot2可视化:使用pracma包的interp1函数对缺失值进行线性插值后进行可视化分析、用虚线标记进行数据填充的区域
- socket.io.js的disconnect事件
- 自己实现strstr函数与strchr函数
- mysql 5.7.12 修改密码
- 单件模式与业务逻辑服务层封装
- 这么多年都白学了,原来是方法没有用对
- Camtasia怎么添加文字效果
- 网络技术与技术革命周末随想
- python:It seems that scikit-learn has not been built correctly
- github加速神器
- win7重装系统后计算机打不开,win7系统重装后进不了系统怎么办
- 使用域名查询网站ip地址
- 在网易有数上做数据加工和数据分析的实践
- 【数模整理3】数据分析那些事儿——回归分析
- 无线服务器网速加快,无线路由器网速慢怎么办?
- 公网异地远程访问家中/公司的群晖NAS
- slmgr.vbs是什么?
- 京东数科java一面【过】
- 什么是Native方法