#include<stdio.h>//标准输入输出函数库
#include<stdlib.h>//标准函数库
#include<string.h>//字符串函数库
#include<conio.h>//屏幕操作函数库
typedef struct node//定义学生信息的结构体
{
char num[41];//学号
char name[41];//姓名
char sex[4];//性别
int score[3] ;//数学 英语 计算机
float aver; //平均成绩
float sum; //总成绩
}student;
student stu[101];
int stuSize;//定义一个全局变量
void Menu();//操作主界面
void Input();//声明输入函数
void Save();//声明保存函数
void order();//声明排序函数
void Analysis();//声明统计函数
void selet();//声明查询函数
void delet();//声明删除函数
void insert();//声明添加函数
void print();//声明输出函数
void Update();//声明更新函数
void amend();//声明修改函数
void see();//声明查看文件
int openl();//声明打开文件
void welcome();//声明个人信息
int main()
{
system("color 3E"); //设计文本颜色
printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t========== 欢迎进入学生成绩管理系统!!!==========\n\n");
printf("\n\n\t\t\t\t ============= 按任意键继续!!!============\n\n\n");
getch();
Menu();
return 0;
}
void Menu()//主菜单
{
system("cls");
printf("\n\t\t\t\t\t=========== 学生成绩管理系统 ===========\n\n");
printf("\t\t\t\t\t----------------------------------------\n\n");
printf("\t\t\t\t\t========== 1 输入记录 ===========\n\n");
printf("\t\t\t\t\t========== 2 查询记录 ===========\n\n");
printf("\t\t\t\t\t========== 3 更新记录 ===========\n\n");
printf("\t\t\t\t\t========== 4 统计记录 ===========\n\n");
printf("\t\t\t\t\t========== 5 输出记录 ===========\n\n");
printf("\t\t\t\t\t========== 6 个人信息 ===========\n\n");
printf("\t\t\t\t\t========== 7 打开文件 ===========\n\n");
printf("\t\t\t\t\t========== 0 退出系统 ===========\n\n");
printf("\t\t\t\t\t----------------------------------------\n\n");
printf("\t\t\t\t\t请输入你的选择-->>");
int a;
scanf("%d",&a);
switch (a)
{
case 0:return;//退出系统
case 1:Input();break;//输入
case 2:selet();break;//查询
case 3:Update();break;//更新
case 4:Analysis();break;//统计
case 5:print();break;//输出
case 6:welcome();break;//个人信息
case 7:see();break; //打开文件
default:printf("信息输入有误!请检查后重新输入\n");
getch();
}
}
void Update()//更新
{
system("cls");
printf("\n\t\t\t\t\t======== 更新记录 =========\n\n");
printf("\t\t\t\t\t---------------------------\n\n");
printf("\t\t\t\t\t=======1 添加学生 ========\n\n");
printf("\t\t\t\t\t=======2 删除学生 ========\n\n");
printf("\t\t\t\t\t=======3 修改学生 ========\n\n");
printf("\t\t\t\t\t=======4 成绩排序 ========\n\n");
printf("\t\t\t\t\t=======0 退出 ========\n\n");
printf("\t\t\t\t\t---------------------------\n\n");
printf("\t\t\t\t\t请输入你的选择-->\n");
int a;
scanf("%d",&a);
switch (a)
{
case 0:Menu();//返回主菜单
case 1:insert();break;//添加
case 2:delet();break;//删除
case 3:amend();break;//修改
case 4:order();break;//排序
default:printf("信息输入有误!请检查后重新输入\n");
getch();
Menu();
}
}
void amend()//修改
{
int i;
char a;
char name[20];
system("CLS");
printf("\t\t\t输入学生名字:\n");
scanf("%s",&name);
system("CLS");
printf("\t学号\t姓名\t性别\t数学\t英语\t计算机\t平均成绩\t总成绩\n");
for(i=0;i<stuSize;i++)
if(strcmp(stu[i].name,name)==0)
{
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver,stu[i].sum);
getch();
printf("是否修改?(y or n)");
getchar();
scanf("%c",&a);
if(a=='y') //是否修改该信息
{
printf("输入学生信息:");
printf("\n\t\t\t----------------\n");
printf("\t\t\t学号:");
scanf("%s",&stu[i].num); //输入学号
printf("\t\t\t姓名:");
scanf("%s",&stu[i].name); //输入姓名
printf("\t\t\t性别:");
scanf("%S",&stu[i].sex); //输入性别
printf("\t\t\t数学:");
scanf("%d",&stu[i].score[0]); //输入英语成绩
printf("\t\t\t英语:");
scanf("%d",&stu[i].score[1]); //输入数学成绩
printf("\t\t\t计算机:");
scanf("%d",&stu[i].score[2]); //输入语文成绩
stu[i].aver=((float)stu[i].score[0]+(float)stu[i].score[1]+(float)stu[i].score[2])/3;//计算平均成绩
stu[i].sum=(float)stu[i].score[0]+(float)stu[i].score[1]+(float)stu[i].score[2];//计算总成绩
printf("\t\t\t平均成绩=%4.1f\n",stu[i].aver); //输出平均成绩
printf("\t\t\t总成绩=%4.1f\n",stu[i].sum); //输出总成绩
}
else
printf("退出");
Save();
getch();
}
Menu();
Save();
getch();
}
void insert()//添加
{
system("cls");//清屏
int i,n;
printf("要添加的学生的数量:\n");
scanf("%d",&n);
for(i=stuSize;i<stuSize+n;i++)
{
printf("\n\t\t\t----------------\n");
printf("\t\t\t学号:");
scanf("%s",&stu[i].num); /*输入学号*/
printf("\t\t\t姓名:");
scanf("%s",stu[i].name); /*输入姓名*/
printf("\t\t\t性别:");
scanf("%S",&stu[i].sex); /*输入性别*/
printf("\t\t\t数学:");
scanf("%d",&stu[i].score[0]); /*输入英语成绩*/
printf("\t\t\t英语:");
scanf("%d",&stu[i].score[1]); /*输入数学成绩*/
printf("\t\t\t计算机:");
scanf("%d",&stu[i].score[2]); /*输入计算机成绩*/
stu[i].aver=((float)stu[i].score[0]+(float)stu[i].score[1]+(float)stu[i].score[2])/3;/*计算平均成绩*/
stu[i].sum=(float)stu[i].score[0]+(float)stu[i].score[1]+(float)stu[i].score[2];/*计算总成绩*/
printf("\t\t\t平均成绩=%4.1f\n",stu[i].aver); /*输出平均成绩*/
printf("\t\t\t总成绩=%4.1f\n",stu[i].sum); /*输出总成绩*/
}
stuSize+=n;
printf("\n\n\t\t\t按任意键返回菜单!!");
getch();
Save();
}
void delet()//删除
{
int i;
char a;
char name[20];
system("CLS");
printf("\t\t\t输入学生名字:\n");
scanf("%s",name);
system("CLS");
printf("\t学号\t姓名\t性别\t英语\t数学\t语文\t平均成绩\t总成绩\n");
for(i=0;i<stuSize;i++)
if(strcmp(stu[i].name,name)==0)
{printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver,stu[i].sum);
getch();
printf("是否删除?(y or n)");
getchar();
scanf("%c",&a);
if(a=='y') /*是否删除该信息*/
{for(;i<stuSize;i++)
stu[i]=stu[i+1];
stuSize--;
printf("已经删除信息");
}
else
printf("退出");
getch();
}
Save();
}
void Input()//输入
{ system("cls");
int i;
printf("要输入的学生的数量\n");
scanf("%d",&stuSize);
for(i=0;i<stuSize;i++)
{
printf("\n\t\t\t----------------\n");
printf("\t\t\t学号:");
scanf("%s",&stu[i].num); /*输入学号*/
printf("\t\t\t姓名:");
scanf("%s",&stu[i].name); /*输入姓名*/
printf("\t\t\t性别:");
scanf("%S",&stu[i].sex); /*输入性别*/
printf("\t\t\t数学:");
scanf("%d",&stu[i].score[0]); /*输入英语成绩*/
printf("\t\t\t英语:");
scanf("%d",&stu[i].score[1]); /*输入数学成绩*/
printf("\t\t\t计算机:");
scanf("%d",&stu[i].score[2]); /*输入语文成绩*/
stu[i].aver=((float)stu[i].score[0]+(float)stu[i].score[1]+(float)stu[i].score[2])/3;/*计算平均成绩*/
stu[i].sum=(float)stu[i].score[0]+(float)stu[i].score[1]+(float)stu[i].score[2];/*计算总成绩*/
printf("\t\t\t平均成绩=%4.1f\n",stu[i].aver); /*输出平均成绩*/
printf("\t\t\t总成绩=%4.1f\n",stu[i].sum); /*输出总成绩*/
}
printf("\n\n\t\t\t按任意键返回菜单!!");
getch();
Save();
Menu();
}
void Analysis()//统计
{
system("cls");
double sum[3];
int i,k;
int ma[3],mi[3];
int cnt[3][5];
memset(cnt,0,sizeof(cnt));
ma[0]=stu[0].score[0];
ma[1]=stu[0].score[1];
ma[2]=stu[0].score[2];
mi[0]=stu[0].score[0];
mi[1]=stu[0].score[1];
mi[2]=stu[0].score[2];
for(i=0;i<stuSize;++i){
for(k=0;k<3;++k){
if(ma[k]<stu[i].score[k]) ma[k]=stu[i].score[k];
if(mi[k]>stu[i].score[k]) mi[k]=stu[i].score[k];
sum[k]+=stu[i].score[k];
if(stu[i].score[k]<60)
cnt[k][0]++;
else if(stu[i].score[k]<69)
cnt[k][1]++;
else if(stu[i].score[k]<79)
cnt[k][2]++;
else if(stu[i].score[k]<89)
cnt[k][3]++;
else if(stu[i].score[k]<=100)
cnt[k][4]++;
}
}
printf("\t数学\t最高分 :%d\t最低分 :%d\t不及格人数:%d\t60-69分人数: %d\n\n\t\t70-79分人数: %d\t80-89分人数: %d\t90分以上人数: %d\n\n\n",ma[0],mi[0],cnt[0][0],cnt[0][1],cnt[0][2],cnt[0][3],cnt[0][4]);
printf("\t英语\t最高分 ;%d\t最低分 :%d\t不及格人数:%d\t60-69分人数: %d\n\n\t\t70-79分人数: %d\t80-89分人数: %d\t90分以上人数: %d\n\n\n",ma[1],mi[1],cnt[1][0],cnt[1][1],cnt[1][2],cnt[1][3],cnt[1][4]);
printf("\t计算机\t最高分 :%d\t最低分 :%d\t不及格人数:%d\t60-69分人数: %d\n\n\t\t70-79分人数: %d\t80-89分人数: %d\t90分以上人数: %d\n\n\n\n",ma[2],mi[2],cnt[2][0],cnt[2][1],cnt[2][2],cnt[2][3],cnt[2][4]);
printf("\t按任意键返回菜单!!!");
getch();
Menu();;
}
void selet()//查询
{
system("cls");
printf("\t\t\t\t\t1 姓名查询 \n\t\t\t\t\t2 学号查询 \n\t\t\t\t\t ");
printf("请选择要查询的方式-->\n");
int ch,i;
scanf("%d",&ch);
if(ch==1){
int i=0;
printf("请输出姓名:\n");
char name[41];
scanf("%s",name);
for(i=0;i<stuSize;i++){
if(!strcmp(stu[i].name,name)){
printf("\t学号\t姓名\t性别\t数学\t英语\t计算机\t平均成绩\t总成绩\n");
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver,stu[i].sum);
}
}
}
else if(ch==2){
int i=0;
printf("请输出学号:\n");
char name[41];
scanf("%s",name);
for(i=0;i<stuSize;i++){
if(!strcmp(stu[i].num,name)){
printf("\t学号\t姓名\t性别\t数学\t英语\t计算机\t平均成绩\t总成绩\n");
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver,stu[i].sum);
}
}
}
printf("是否继续查询?(Y/N)(不区分大小写)\n");
char s;
while (1)
{
getchar();
gets(&s);
if (s=='Y'||s=='N'||s=='y'||s=='n')
break;
else puts("信息有误!请检查后重新输入\n");
Menu();
system("cls");
}
if(s=='Y'||s=='y')
selet();
else if(s=='N'||s=='n')
system("cls");
Menu();
}
void print()//输出函数
{
system("CLS");
stuSize=openl();
int i;
printf("\t学号\t姓名\t性别\t英语\t数学\t语文\t平均成绩\t总成绩\n");
for(i=0;i<stuSize;i++) //输出所有的学生信息
{
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver,stu[i].sum);
}
printf("\n\n\n\t\t\t按任意键返回菜单");
getch();
Menu();
}
void welcome() //我的个人信息函数
{
system("CLS");
printf("\n\n\t\t\t\t-------------制作者-------------\n\n"); /*在屏幕上输出一下信息*/
printf("\t\t\t\t--------姓名 高凡 ------------\n\n");
printf("\t\t\t\t--------性别 女 ------------\n\n");
printf("\t\t\t\t--------学号 18060212127 -----\n");
printf("\n\n\t\t按任意键返回主菜单!!!");
getch(); /*按任意键返回主函数*/
Menu();
}
void Save() //建立保存文件函数
{
system("CLS");
FILE *fp; //定义文件型指针
int i;
if((fp=fopen("student.txt","wb"))==NULL) //打开输出文件
{
printf("不能打开文件!\n");
return; //终止程序
}
for(i=0;i<stuSize;i++) //向student文件中写入信息
if(fwrite(&stu[i],sizeof(student),1,fp)!=1)
printf("文件写入错误\n");
fclose(fp); //关闭文件
printf("\n\n\n\n\t\t\t学生信息保存成功!\n");
printf("\n\n\n\n\t\t\t按任意键返回菜单!!");
getch();
Menu();
}
int openl() /*定义打开文件函数*/
{
system("CLS");
int i;
FILE *fp;
if((fp=fopen("student.txt","rb"))==NULL)
{
printf("Cannot open file.\n");
exit(0);
}
for(i=0;!feof(fp);i++)
fread(&stu[i],sizeof(student),1,fp);
fclose(fp);
return(i-1);
}
void see() //打开并查看文件
{
system("CLS");
int i;
stuSize=openl();
printf("文件打开成功!\n");
printf("按任意键查看!\n");
getch();
printf("\t学号\t姓名\t性别\t英语\t数学\t语文\t平均成绩\t总成绩\n");
for(i=0;i<stuSize;i++) //输出所有的学生信息
{
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver,stu[i].sum);
}
printf("\n\n\n\t\t\t按任意键返回菜单!!!");
getch();
Menu();
}
void order()//成绩排序(冒泡)
{
system("cls");
int i,j;
struct node temp;
for(i=0;i<stuSize;i++)
{
for(j=0;j<stuSize-i-1;j++)
{
if(stu[i].sum>stu[i+1].sum)
{
temp=stu[i+1];stu[i+1]=stu[i];stu[i]=temp;//引用变量temp交换数值 使总分按小到大排出
}
}
}
printf("\t学号\t姓名\t性别\t英语\t数学\t语文\t平均成绩\t总成绩\n");
for(i=0;i<stuSize;i++)
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver,stu[i].sum);
getch();
Save();
printf("\n\n\n\t\t\t按任意键返回菜单!!!");
Menu();
}
2019-06-25 学生成绩管理系统(期末课设)
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 这8种学生永远拿不到高分!早看早受益! 下面是一位资深班主任总结了8种成绩提不上去的原因,分别对应8类孩子,如果你...
- 这8种学生永远拿不到高分!早看早受益! 下面是一位资深班主任总结了8种成绩提不上去的原因,分别对应8类孩子,如果你...
- 【蝴蝶效应】 蝴蝶效应:上个世纪70年代,美国一个名叫洛伦兹的气象学家在解释空气系统理论时说,亚马逊雨林一只蝴蝶...
- 目录:一、 前提与摘要二、 课程设计的目的和要求三、 系统分析与设计四、 实现与测试...
- C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程...