大一学年末的程序设计
过程化学生成绩管理系统
#include <stdio.h>
#include <conio.h>#include <string.h>
#include <stdlib.h>
#include <math.h>
int menu(); //主菜单函数
void input(); //录入功能
void save(); //保存文件
void look(); //浏览系统
void chaxt(); //查询功能
void chaxh(); //按学号查询
void chacj(); //按成绩查询
int chaxuncd(); //查询菜单
int open(); //打开文件
void change(); //修改函数
void zsum(); //求和
struct teach //定义结构体
{
int xh; //输入学号
int sk; //上课出勤
int jc; //教材持有
int zy; //作业
int bj; //课堂笔记
int nl; //过程能力
}tea[200];
int n=200; //全局变量
int main()
{
int xh,flag=0; //定义局部变量
while(1) //while循环
{
system("color 3f"); //操作菜单背景颜色
xh=menu(); //调用子函数显示主菜单
switch(xh)
{
case 1:system("cls");input();break; //序号为1时调用录入子函数
case 2:system("cls");look();break; //序号为2时调用浏览子函数
case 3:system("cls");chaxt();break; //序号为3时调用查询子函数菜单
case 4:system("cls");change();break; //序号为4时调用修改子函数
case 5:system("cls");zsum();break; //序号为5时调用计算求和子函数
case 6:system("cls");exit(0); //序号为6时结束程序
default:system("cls");putchar('\a');
printf("\n\t\t输入有误,请重新输入:\n");break; //输入不是对应的序号时,输出有错误
}
}
return 0;
}
int menu() //主菜单子函数
{
int xh;
printf("\n");
printf("\t \n");
printf(" ~~~~~~~~~~~~ 欢迎使用过程化教学管理系统 ~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~ ~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~ 欢迎使用过程化教学管理系统 ~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~ ~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~ 1.考核成绩信息录入 ~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~ 2.分数浏览功能 ~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~ 3.分数查询功能 ~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~ 4.分数修改功能 ~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~ 5.计算功能 ~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~ 6.退出系统 ~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~ ~~~~~~~~~~~~\n");
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" \n");
printf("\t\t请输入序号进行选择:");
scanf("%d", &xh);
return xh;
}
void input() //录入子函数
{
int i;
printf("\n\t (*^__^*) 请输入要录入成绩的总人数:");
scanf("%d",&n);
printf("\n ~~~~~~~~~~~~ 请按提示输入分数信息:\n");
for(i=0;i<n;i++) //进入for循环
{
printf("\n\t (*^__^*) 请输入第%d个人的信息\n",i+1);
printf("\n\t (*^__^*) 请输入学生学号:");
scanf("%d",&tea[i].xh);
printf("\n\t (*^__^*) 请输入上课出勤分数:");
scanf("%d",&tea[i].sk);
printf("\n\t (*^__^*) 请输入教材持有分数:");
scanf("%d",&tea[i].jc);
printf("\n\t (*^__^*) 请输入作业分数:");
scanf("%d",&tea[i].zy);
printf("\n\t (*^__^*) 请输入课堂笔记分数:");
scanf("%d",&tea[i].bj);
printf("\n\t (*^__^*) 请输入过程能力分数:");
scanf("%d",&tea[i].nl);
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
}
printf("\n ~~~~~~~~~~~~ 按回车键保存\n");
getch(); //再按任意键才执行下一步
save(); //执行保存文件子函数
system("cls"); //清屏
}
void save() //保存文件子函数
{
FILE*fp; //定义指针变量
int j;
if((fp=fopen("teach.txt","a"))==NULL) //如果在当前目录下进行“追加”操作 打开 文件teach失败
{
printf("\n ~~~~~~~~~~~~ 文件打开失败!!!");
return; //表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值!
}
for(j=0;j<n;j++)
if(fwrite(&tea[j],sizeof(struct teach),1,fp)!=1) //在teach文件上进行写操作后返回值不等于1为真
{printf("\n ~~~~~~~~~~~~ 文件保存错误!!!");}
printf("\n ~~~~~~~~~~~~ 保存成功,按任意键返回");
getch(); //再按任意键才执行下一步
fclose(fp); //关闭文件
}
int open()
{
int i;
FILE *fp;
if((fp=fopen("teach.txt","r"))==NULL) //如果在当前目录下进行“读”操作 打开 文件teach失败
{
printf("\n\t\t文件打开失败!!!");
printf("\n\t\t按任意键返回:\n\n");
getch();
return (-1); //执行该函数失败!
}
for(i=0;!feof(fp);i++) //进行循环,并判断文件指针是否已经到达文件尾部的
fread(&tea[i],sizeof(struct teach),1,fp); //在teach文件上进行写操作后返回值不等于1为真
fclose(fp); //关闭文件
return (i-1);
}
void look() //浏览子函数
{
int i;
FILE *fp;
if((fp=fopen("teach.txt","r"))==NULL) //如果在当前目录下进行“读”操作 打开 文件teach失败
{
printf("\n\t\t文件打开失败!!!");
printf("\n\t\t按任意键返回:\n\n");
getch(); //再按任意键才执行下一步
return ;
}
printf(" 成绩信息: \n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf(" 上课出勤 教材持有 作业 课堂笔记 过程化能力\n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
for(i=0;!feof(fp);i++) //进行循环,并判断文件指针是否已经到达文件尾部的
{
fprintf(fp,"%d%d%d%d%d%",tea[i].sk,tea[i].jc,tea[i].zy,tea[i].bj,tea[i].nl); //格式化读该文件
// fread(&tea[i],sizeof(struct teach),1,fp);
if(tea[i].sk==0 && tea[i].jc==0 && tea[i].zy==0 && tea[i].bj==0 && tea[i].nl==0)
break;
printf(" %-10d%-12d%-12d%-11d%-10d%\n",tea[i].sk,tea[i].jc,tea[i].zy,tea[i].bj,tea[i].nl);
};
fclose(fp); //关闭文件
printf("\n\n\n\t\t\t 按任意键返回菜单:");
getch(); //再按任意键才执行下一步
printf("\n\n");
system("cls"); //清除所有显示的信息
}
void chaxt()
{
int xh;
while(1) //进入while循环
{
xh=chaxuncd(); //查询子函数菜单显示
switch(xh)
{
case 1:system("cls");chaxh();break; //序号为1时进入学号查询子函数
case 2:system("cls");chacj();break; //序号为2时进入成绩查询子函数
default:putchar('\a');
printf("\n\t\t输入有误,请重新输入:\n");break;
}
printf("\n\t\t查询完毕,按任意键返回主菜单");
getch(); //再按任意键才执行下一步
break;
}
system("cls"); //清除所有显示的信息
}
int chaxuncd() //查询菜单子函数
{
int xh;
printf("\n\n\n\n");
printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t\t┣ 成绩信息查询: ┫\n");
printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
printf("\t\t┣ 1.按学号查询 ┫\n");
printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
printf("\t\t┣ 2.按成绩查询 ┫\n");
printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n\n\n\t\t请输入你的选择:");
scanf("%d",&xh);
return xh;
}
void chaxh() //查询学号子函数
{
int i,m=0;
int xh;
n=open(); //调用打开文件子函数
printf("\n\n\n\n\t\t请输入要查询的学号:");
scanf("%d",&xh);
printf("\n\n");
printf(" 成绩信息: \n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf(" 上课出勤 教材持有 作业 课堂笔记 过程化能力\n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
for(i=0;i<n;i++)
if(tea[i].xh==xh) //判断是否有输入的学号
{
m++;
printf(" %-10d%-12d%-12d%-11d%-10d%\n",tea[i].sk,tea[i].jc,tea[i].zy,tea[i].bj,tea[i].nl);
}
if(m==0) //若没有输入的学号则m=0
printf("\t\t没有该学号成绩!!!");
}
void chacj() //查询成绩子函数
{
int i,m=0;
int type;
n=open(); //调用打开文件子函数
printf("\t\t请输入要查询的成绩:");
scanf("%d",&type);
printf("\n\n");
printf(" 成绩信息: \n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf(" 上课出勤 教材持有 作业 课堂笔记 过程化能力\n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
for(i=0;i<n;i++)
if(tea[i].sk==type)//
{
m++;
printf(" %-10d%-12d%-12d%-11d%-10d%\n",tea[i].sk,tea[i].jc,tea[i].zy,tea[i].bj,tea[i].nl);
}
if(m==0)
printf("\t\t没有该成绩信息!!!");
getch();
system("cls");
}
void change()
{
int i,m=0,j,a;
int name;
FILE *fp; //定义文件指针
n=open(); //调用打开文件子函数
if(n==-1)
return; //打开失败则返回菜单
else
{
printf("\n\t\t\t 输入要修改成绩的学号:");
scanf("%d",&name);
printf(" 成绩信息: \n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf(" 上课出勤 教材持有 作业 课堂笔记 过程化能力\n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
for(i=0;i<n;i++)
if(tea[i].xh==name) //判断输入学号
{
j=i; //如果找到这个学号就记住这个学号的位置
m++;
printf(" %-10d%-12d%-12d%-11d%-10d%\n",tea[i].sk,tea[i].jc,tea[i].zy,tea[i].bj,tea[i].nl);
}
if(m==0)
{
printf("\n\n\t\t没有该成绩\n\n\t\t按任意键返回菜单");
getch();
system("cls");
printf("\n\n");
return;
}
else
{
printf("\n\t\t\t 选择要修改的成绩信息:");
printf("\n\n\t\t\t----------------------------\n");
printf("\n\t\t\t\t1. ----上课出勤分数");
printf("\n\t\t\t\t2. ----教材持有分数");
printf("\n\t\t\t\t3. ----作业分数");
printf("\n\t\t\t\t4. ----课堂笔记分数");
printf("\n\t\t\t\t5. ----过程能力分数");
printf("\n\n\t\t\t----------------------------\n\n\t\t\t\t");
scanf("%d",&a);
switch(a)
{
case 1 : printf("\n\t\t\t\t新上课出勤分数:");scanf("%d",&tea[j].sk);break;
case 2 : printf("\n\t\t\t\t新教材持有分数:");scanf("%d",&tea[j].jc);break;
case 3 : printf("\n\t\t\t\t新作业分数:");scanf("%d",&tea[j].zy);break;
case 4 : printf("\n\t\t\t\t新课堂笔记分数:");scanf("%d",&tea[j].bj);break;
case 5 : printf("\n\t\t\t\t新过程能力分数:");scanf("%d",&tea[j].nl);break;
default:system("cls");putchar('\a');
printf("\n\t\t输入有误,请重新输入:\n");break;
}
printf("\n\n\t\t\t\t是否确定修改?\n\n\n\t\t\t\t确认请按Y\n\n\n\t\t\t\t\t");
a=getch();
if(a=='y'||a=='Y')
{
fp=fopen("teach.txt","w"); //一定要先打开文件。
for(i=0;i<n;i++)
if(fwrite(&tea[i],sizeof(struct teach),1,fp)!=1)
printf("\n\n\t\t文件写入错误!\n");
fclose(fp);
printf("\n\n\t\t\t\t修改成功!\n");
printf("\n\n\t\t\t\t操作成功!");
printf("\n\n\t\t\t\t按任意键返回菜单:");
getch();
system("cls");
}
else
{
printf("\n\n\t\t\t\t操作取消!\n");
printf("\n\n\t\t\t按任意键返回菜单:");
getch();
system("cls");
}
}
}
}
void zsum()
{
int i,sum,m=0;
int type;
n=open();
printf("\n\n\n\n\t\t请输入要求和计算的学号:");
scanf("%d",&type);
printf("\n\n");
printf(" 成绩信息: \n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf(" 上课出勤 教材持有 作业 课堂笔记 过程化能力\n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
for(i=0;i<n;i++)
if(tea[i].xh==type)
{
m++;
printf(" %-10d%-12d%-12d%-11d%-10d%\n",tea[i].sk,tea[i].jc,tea[i].zy,tea[i].bj,tea[i].nl);
printf(" 成绩总和: ");
sum=tea[i].sk+tea[i].jc+tea[i].zy+tea[i].bj+tea[i].nl;
printf("%d",sum);
}
if(m==0)
printf("\t\t没有该成绩信息!!!");
getch();
system("cls");
}