系统设计说明
(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 138345678
111
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;
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 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;
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; //学生平均成绩
}
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;
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 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;
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; //学生平均成绩
}
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;
}