用c语言编写学生成绩管理系统1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<stdio.h> 指令
#include<string.h>
符串函数
#include<process.h>

#include<como.h>
制台进行数据输入以及输出#define N 2000

★define M 3
typedef struct student { char number[10];
的学号
char name[20];

char sex[10];
float score[M];
成绩
float aver;
平均成绩
float total;
}STU;
STU stu[N];
mt n;
void mputscore(void); void savescore(void); void avergescore(void); void total(void);
void modifyscore(void); void lookscore(void); void searchscore(void); void statistic(void); void add(void);

void modify (void);

void delscore(void);
void menu(void);

〃编译预处理
〃定义处理字
〃宏指令的声
〃定义通过控
〃最多的人数
〃统计成绩
〃定义类型
〃保存所有人
〃保存学生姓
〃保存性别
//保存所有课程
〃保存每个人的
〃总计成绩
//学生成绩新建〃学生成绩保存//学生平均成绩//学生成绩总计//学生成绩修改//学生成绩查看//学生成绩查询//学生成绩统计
〃学生成绩添
〃学生成绩修
〃学生成绩删除
〃学生成绩菜
void mainQ
{ short int flag=0; menuQ;
do { Aag=l;
switch(getch(J)
{ case T : inputscoreO;break;
//在菜单界面输入 1,调用 1 函数 nputscoreQ 实现
输入学生成绩信息功能
case 2 : lookscore();break;
〃在菜单界面输入2,调用函数lookscore()实现学
生成绩按平均分高低排序输出,同时lookscoreQ 函数调用avregescore()函数实现各•个学生的平均 分计算
〃在菜单界山|输入3,调用searchscore()函数头现
〃在菜单界|何输入4,调用statisticQ 函数输出每一
〃在菜单界而输入5,调用modify 。

函数实现通过
〃在菜单界面输入6,调用ndd()函数实现添
〃在菜单界而输入7,调用delscoreQ 函数实现删除
〃在菜单界IA i 输入8,调用savescoreQ 函数将学生
〃在菜单界面输入9,退出成绩管理系统
起到暂停的作用,函数头文件como.h B 经定义过 void
menu(void)
system(n cls M ); pnntffW); pnntf(n ⑴);
case 3r : searchscore();break; 通
过学号査找学生成绩信息功能
case f 4r : statisticQ;break;
门课程的最高分,平均分以及不及格人员
case r 5r : modify();break;
学号修改学生成绩的功能
case &: addQ;break;
加学生成绩
case 7r : delscoreQ;break;
指定学生的成绩
case 8 : savescoreQ;break; 成绩信息保存
case 9 :exit(O); break; default: pnntfC 输入有误\n”);
}
pnntf (”按任意键继续\n”); getchO;
〃按任意键继续,
menuQ; // 菜单 }while (flag==l);
〃清屏
★★★★★★★欢迎进入学生成绩管理系统★★★★★★★
prmtf(n pnntf(n pnntf(n pnntf(n pnntf(n pnntf(n pnntf(n pnntf(n pnntfC pnntf(n pnntf(n pnntf(n
菜单\n H);
纟责 ------------------------- 1
☆査看成绩及成绩排序----------------------- 25”);
☆査询学生成绩--------------- -------- —-3S”);
☆成绩统计----------------------------- 4\n");
☆修改成绩---------------------------- 5S”);
☆添加成绩------------------------------- 6W);
☆删除成绩---------------------------- 7S”);
☆保存成绩------------------------------- 8W);
☆退出系统…-------------------------- 95”);
请输入您的选择(1~9) \n H);
}
冲*未"**沐"***沐未输入各个同学白勺学生信息“ *****"* **未"沐未"***/ void mputscore(void) 〃输入成绩
{ nit ij;
system(n cls M); pnntf(n
〃清屏专用,以下出现位豐作用相同己经转到输入成绩菜单^);
pnntf(”请输入学生总数:W);
scanf「%d”,&n);
printff*提示:输入学号时请输入9位学生编号:图书借阅证上的学号\n”);〃因二维表上下需对正故有此耍求
for(i=0;i<n;i++)
{ printfC'W1);
pnntf("请输入第%d位学生的学号:\n",i+l);
scanf(H%s "、stu [1] .number); 〃输入学生学号
pnntf(” 姓名:\n”);
scanf(n%s n,stu [1] .name); //输入学生名字
pnntf(”请输入该学生性别\n“);
scanf(n%s M,stu [i].sex); // 输入性别
pnntf("请输入学生成绩:\n");
pnntf("高数分\t英语分\tC语言分5");
for(j=0j<MJ++)
scanf(n%f\&stu[i].score[j]); 〃输入高数、英语.C语言的成绩
} printf(n
成功输入(按任意键继续后请输入8进行保存)
}
/♦♦***************4+^T%4<lHl^:i^itt4^*****************************''
void total(void) {
nit ij; 〃定义变量1, j: i用來表示学生个数,J则用來表示学生每门课的分数
for(i=0;i<n;i++)
{ stu[i].total=0;
for(j=Oj<Mj++) //M表示科目在头文件出己经定义
{
stu [1]. total+=stu [ij.sc ore [j ];
}
}
}
void avergescore(void)
{ nit ij; 〃定义变量1, j: 1用来表示学生个数,J则用來表示学生每门课的分数
for(i=0;i<n;i++)
{ stu[i].aver=O;
for(j=0j<Mj++) //M表示科目在头文件出己经定义
{
stu [i]. aver+=stii [i].sc ore [j ];
}
stu [i]・ aver=stu [1]. aver/M; 〃计算平均分
}
}
void lookscore(void)
{ rntij^k; // i, j, k都表示学生成绩比较用来调换顺序
STU t;
totalQ;//此处用來对调用函数的声明
avergescoreQ;
systemf'cls"); // 清屏专用
printfC- 已经转到査看成绩及成绩排序菜单\n”);
for(i=0;i<n-l ;i++)
{ for(k=ij=i+lj<nj++)
if(stu [)]・ aver>stu [k]・ aver)
k=j;
改k!=j)
(t=stu[k];
stu[k]=stu[i];
stu[i]=t;
}
}
prmtf(“名次\t学号\t\t姓名\t性别\t高数分\t英语分\tC语言分\t总分\t平均分\n”);
for(i=0;Kn;i-H-)
printf(n%d\t%s\t%s\t%s\t H a+1、stu [1] .number, stu [1] .name.stu [1]. sex); for(j=OJ<MJ++) printf(n%4.2f\t,\stu[i].score[j]);
pnntf(”%4 ・ 2f\t”, stu [1]・ total);
pnntf(n%4.2f\stu[i].aver); pnntfCW
}
void searchscore(void)
{ char a[10]; mt uj;
〃定义数组a的类型可输入数字,字母或字符
system(n cls M); prmtf(n 〃清屏
己经转到查询学生成绩菜单\n“);
pnntf(^请输入需查询的学生学号W);
scanf(n%s,\a);
for(i=0;i<n;i++)
{ if(strcmp(a,stu[i] .number)=0) 〃如果输入的学号为真则输出相关信息{ printfC名次\t学号\t\t姓名\t性别\t高数分\t英语分\tC语言分\t总分\t平均分5”);
printf(n%d\t%s\t%s\t%s\t,\i+l,stu[i].number
5
stu[i].name,stu[i].sex); fbrO=Oj<Mj++) printf(H%4.2f\t,\stu[i].score[j]);
printf(H%4.2f\t,\stu[i].total);
printf(n%4.2f\stu[i].aver);
printf(n\Q n);
break; //找到该学生成绩信息后跳出for循环}
else
pnntfC未找到该学生信息\『);
}
/*******统计学生成绩信息,计算出每一门课的最高分****************/
void statistic()
{
int ij=0,k=0,cl;
char str[2];
float average[M].sum=O; prmtf(”没有可被査找的记录\n”);//
system(n cls M);
if(M==0) 〃如果没有输入成绩则输出没有可查找的记录
pnntf(”没有可被查找的记录\n");
else
{
xvhile(l)
{
pnntff下面将统计考试成绩\n“);
pnntf(“请选择你要统计哪科的成绩1.高数\t2.英语\t3.C语言S”);scanf「%d”.&cl);
prmtf(n\t 一共有%<1个记录W\M);广总共记录数M
switch(cl)
{
case 1: 〃用來判断髙数的最高分,平均分,输出不及格人员名单
for(i=0;i<M;i-H-)
{
sum+=stu [i]・ score [0];
if(stu[k].score[0]>stu[i].score[0]) k=i;
if(stu[j].score[0]<stii[i].score[0]) j=i;
}
average [0]=sum/M;
printf("\t髙数的最高分:\n”);
prmtf(n\t\t 学号:%s 姓名:%s 分数:%.2f\n,\stu[j].number5stii[j].name,stii[j].score[0]); printf("\t 高数的最低分是:5”);
prmtf(n\t\t 学号:%s 姓名:%s 分数:%.2f\n,\stu[k].numbeEstu[k].name.stu[k].score[0]); printf("\t 高数的平均分是%5.2f\n'\average[0]);
printfC平均分低于60分的学生成员名单S”);
for(i=0;i<M;i++)
if(stu [i]・ score[0]<60) pTintfC%s\d'、stu [1] .name);
break;
case 2: //用來判断英语的最高分,平均分,输出不及格人员名单
{
sum+=stu [i]・ score [1];
if(stu[k] .score[ 1 ]>stu[1].score[ 1 ]) k=i;
if(stu[j].score[l]<stu[i].score[l]) j=i;
}
average [1 ]=sum/M;
printf("\t英语的最高分:\n”);
printf("\t\t 学号:%s 姓名:%s 分数:%.2fn",stu[j].number,stu[j].name,stu[j].score[l]); printf("\t 英语的最低分是:5”);
printf("\t\t 学号:%s 姓名:%s 分数:%.2fn",stu[k].number,stu[k].name,stii[k].score[ 1 ]); printf("\t 英语的半均分是%5.2fn",average[l]);
printfC平均分低于60分的学生成员名单S”);
for(i=0;i<M;i++)
{
if(stu [i]・ score[ 1 ]<60)
pnntff %s\d'、stu [1] .name);
}
break;
case 3: 〃用來判断C语言的最高分,平均分,输出不及格人员名单
for(i=0;i<M;i++) /* 循环输入判断*/
{
sum+=stu [1]・ score [2];
if(stu[k].score[2]>stu[i].score[2]) k=i;
if(stu[j].score[2]<stu[i].score[2]) j=i;
}
average [2 ]=sum/M;
printf("\tC语言的最高分:\n"); /*最髙分*7
prmtf(n\t\t 学号:%s 姓名:%s 分数%・2f\iT'qStu[j]・ni】mbei;stu[j]・iKimeqStu[j]・score[2]);
printf("\tC语言的最低分是严最低分*/
prmtf(n\t\t 学号:%s 姓名:%s 分数%・2f\iT:stu[k]・numbei:,stu[k]・iKimeqStu[k]・scoTe[2]);
printf(H\tC 语言的平均分是%5.2fn,\average[2]);
printfC平均分低于60分的学生成员名单S”);
for(i=0;i<M;i++)
if(stu[i].score[2]<60) pnntfV'%s\d;stu [1] .name);
} break;
default: 〃如果输入的数字不符合要求则显示错误信息
pnntf(”输入错误!请输入1~3之间的数\n”);
}
sum=O;
getcharQ;
printff是否继续进行统计?(y/n)");
gets(str);
if(str[O]==y||str[O]==,Y,) statisticQ;
else break;
}
}
}
void modify(void)
{
char a[10];
mt IJ;
system(,'cls'r);
pnntf(”己经转到修改成绩菜单5”);
pnntf(“请输入需要修改成绩的学生学号\n”);
scanf(H%s,\a);
for(i=0;i<n;i*+)
{ if(strcmp(a,stii[i] .number)=0)
{ printfC名次\t学号\t\t姓名\t性别\t高数分\t英语分\tC语言分\t总分\t平均分\n”);
stu[i].name,stu[i].sex); fbrO=Oj<Mj++) printf(n%d\t%s\t%s\t%s\t,\i+l,stu[i].number
5
pnntf(n%4.2f\f\stu[i].score[j]);
printf(n%4.2f\stu[i].total);
printf(H%4.2f\stu[i].aver);
printf(n\Q n);
printfC请重新输入该学生的姓名:\n”); scanf(n%%s,\stii [1] .number);
printf(n\Q n);
scanf(n%s H,stu[i].name);
printfC请输入该学生性别\n”);
scanf(n%s H,stii[i].sex);
pnntf("请重新输入该学生成绩:\n"); printf("itj数分\t英语分\tC语言分S');
fbrO=Oj<Mj++)
scanf(n%f\&stu[i].score|j]);
循环
}
else
printfC*请确认该学生是否为该校学生! \n-);
}
/♦♦♦*********Hc****^力学生成幺责仆******"***★*"**
void add(void)
//丄定义为学生,j 为学生分数,a 代表加入学生的数量
system(,'cls n ); pnntfC
己经转到添加成绩菜单\n”);
pnntfC 请输入新增加的学生人数:W); scanf(n %d'\&a); n=n+a;
for(i=n-a;i<n;i++) { printf(,r \n H );
pnntf ("请输入第%d 位学生的学号:\n",i+l); scanf(H %s ,\stu[i].number);
pnntfC 姓名:\n”); scanf(,,%s ,\stu[i].name); pnntf ("输入该学生性
别E); scanf(,,%s ,\stu[i].sex); printf("请输入学生成绩:\n"); pnntf ("高数分\t 英语分\tC 语言分5"); for(j=0j<Mj++)
scanf(n %f\&stu[i]・score[j]); pnntf (”添加成功\n”);
}
void delscore(void) {
int i,j ,c;
char m<a[10];
//m 用來存放后面输入删除的字母y 或n
system(n cls M ); pnntfC
己经转到删除成绩菜单
pnntfC 修改成功\n”); break;
〃找到该学生成绩后进行修改,跳出for
}
prmtf (”请输入学生学vW); scanf(H %s ,\a);
for(i=0;i<n;i++)
{ if(strcmp(a,stii[i] .number)=O)
{
printfC 名次\t 学号\t\t 姓名\t 性别\t 高数分\t 英语分\tC 语言分\t 总分\t 平均分5”); printf(H %d\t%s\t%s\t%s\t ,,,i+1, stu [1]. number, stu [1] .name,stu[i] .sex); fbrO=Oj<Mj++) printf(H %4.2f\t ,\stu[i].score[j]);
printf(H
%4.2f\t ,
\stu[i].total); printf(H
%4.2f\stu[i].aver); printf(H
\Q M
); C=l ; break; } else
printfC*未找到该学生信息W);
}
pnntf(”是否删除该学生成绩(y/n)\n n ); scanf(n %s n <&m); if(m==,y ,) {
for(i=c;i<n-l;i++)
stu[i]=stu[i+l];
〃结构体整体赋值将后一位学生成绩信
息拷贝进入前一位学生信息的存储位置
n=n-l;
〃删除该学生信息后学生总数减一
pnntfC 删除成绩成功5”);
} else
pnntfC 删除成绩失败E);
〃定义指针 mt i,flag=l; char m; systemCcls"); pnntfC
己经转到保存成绩菜单S”);
puts(”是否保存学生成绩(y/n)"); scanf(H %s ,\&m);
FILE *fp; }
void savescore(void)
if(m==,y,)
{ if((fp=fbpen(n score.dat,7,wb H))==NULL)
{ printfC文件打开失败E);
return;
} for(i=0;Kn;i++)
if(fwrite(&stu[i],sizeof(stnict student)J,fp)!=l)
{ printff保存失败E);
flag=O;
}
if(flag==l)
printfC保存成功!\n”);
fclose(fp);
}
else
〃从文件score中打开〃学生成绩写入
〃界面关闭
return; }。

相关文档
最新文档