C语言学生成绩查询系统.docx
《C语言学生成绩查询系统.docx》由会员分享,可在线阅读,更多相关《C语言学生成绩查询系统.docx(52页珍藏版)》请在冰点文库上搜索。
C语言学生成绩查询系统
.
实训目的能力目标
全面熟悉、掌握C语言基本知识,掌握C程序设计中数组、函数、指针
的操作,把编程和实际结合起来,增强对不同的问题运用和灵活选择合
适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握
分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机
解决实际问题的能力,规范编程思想,为以后在专业课程中应用计算机
系统解决计算、分析、实验和设计等学习环节打下较扎实的基础。
实训要求:
(1)掌握C语言中的基本数据输入、输出;
(2)熟练使用C语言中的数组;
(3)熟练使用C语言中的函数;
(4)熟练使用C语言中的指针;
(5)熟练使用C语言中的结构体。
实训内容(过程及步骤)
设计题目:
学生成绩查询系统
1、基本思路:
以数组为基础,加以函数和结构体。
然后程序分由“输入学生成绩”,“输出学生成绩”,
“查询学生成绩”,“修改学生成绩”,“查看成绩排序”,“查看成绩统计保存数据”,
“读取数据”等等这几大部分组成。
这五部分各自用一个程序列出,然后在用其他函数将他们连接起来。
2、程序:
#include
.
.
#include
#include
#include
#include
#defineN10
/*****
定义结构体*****/
typedef
struct
students
/*标记为students*/
{
char
num[10];
/*
学生学号*/
char
name[10];
/*
学生姓名*/
int
age;
/*年龄*/
char
sex[10];
/*
性别*/
float
cyy;
/*C语言成绩*/
float
computer;
/*
计算机成绩*/
float
english;
/*
英语成绩*/
float
pj;
/*
平均成绩*/
}STU;
STUtemp;
voidsort(STUstudents[],intn);//排序
voidsave(STUstudents[],intn);//导出
intLocate(STUstudents[],intn);//查询
/*--------------显示菜单--------------------*/
chardisplaymenu()
{
chark;
system("cls");
printf("学生成绩管理
\n");
printf("-----------------------------------应用菜单
-------------------------------------\n");
printf("1输入学生成绩\n\n");
printf("2输出学生成绩\n\n");
printf("3查询学生成绩\n\n");
printf("4修改学生成绩\n\n");
printf("5查看成绩排序\n\n");
printf("6查看成绩统计\n\n");
printf("7保存数据\n\n");
printf("8读取数据\n\n");
printf("9退出系统\n\n");
printf("请选择你想进行的操作:
");
k=getchar();
.
.
returnk;
}
/*****定义输出函数*****/
voidprintheader()/*格式化输出表头*/
{
printf("\n\n************************学生成绩管理系统****************************\n\n\n");
printf("|学号|姓名|年龄|性别|C语言成绩|计算机成绩|英语成绩|平均成绩|\n");
}
voidprintdata(STUpp)/*格式化输出表中数据*/
{
STU*p;
p=&pp;
printf("|%-5s|%-5s
|%-4d|%-4s|%-6.0f|%-6.0f|%-5.0f|%-6.0f|\n",p->num,p->name,p->age,p->se
x,p->cyy,p->computer,p->english,p->pj);
}
/*****添加学生信息*****/
intadd(STUstudents[],int*n)
{
inti=0;
system("cls");
printf("\n");
printf("请输入学生信息\n");
printf("退出请在学生号处输入:
0\n");
printf("请输入学生学号:
\n");
scanf("%s",students[i].num);
while(strcmp(students[i].num,"0"))//当输入的学号为时结束输入
{
printf("请输入学生姓名:
\n");
scanf("%s",students[i].name);
printf("****************\n\n\n");
printf("请输入学生年龄:
\n");
scanf("%d",&students[i].age);
printf("****************\n\n\n");
printf("请输入学生性别:
\n");
scanf("%s",students[i].sex);
printf("****************\n\n\n");
printf("请输入C语言成绩:
\n");
scanf("%f",&students[i].cyy);
printf("****************\n\n\n");
printf("请输入计算机成绩:
\n");
scanf("%f",&students[i].computer);
.
.
printf(
"****************\n\n\n"
);
printf(
"请输入英语成绩:
\n");
scanf(
"%f",&students[i].english);
printf(
"****************\n\n\n"
);
students[i].pj=(students[i].cyy+students[i].computer+students[i].english)/3;
printf("学生平均成绩:
%-8.0f\n",students[i].pj);
i++;
printf("****************\n\n\n");
printf("请输入学生学号:
\n");
scanf("%s",students[i].num);
}
*n=i;
save(students,i);
returni;
}
/*****查询学生信息函数*****/
intLocate(STUstudents[],intn)
{
intk,m=-1;
charnum[10],name[20];
inti=0;
system("cls");
printf("退出请输入:
0\n");
printf("请选择以什么方式查询:
1).按学生学号查询2).按学生姓名查询\n");
scanf("%d",&k);
if(k==1)
{
printf("请输入你要查询的学生学号:
\n");
scanf("%s",num);
while(i{
if(strcmp(students[i].num,num)==0)/*若找到学号*/
{
printf(">>学生学号:
%s\n*学生姓名:
%s\n*学生年龄:
%d\n*学生性别:
%s\n>C语言成绩:
%-8.0f\n>计
算机成绩:
%-8.0f\n>>英语成绩:
%-8.0f\n>>平均成
绩:
%-8.0f\n",students[i].num,students[i].name,students[i].age,students[i].sex,students[i].cyy,students[i].computer,students[i].english,students[i].pj);
m=i;
getchar();break;
}
i++;
}
if(i>=n)
.
.
printf("没有所找学生信息\n");
getchar();
}
elseif(k==2)
{
printf("请输入你要查询的学生姓名:
\n");
scanf("%s",name);
while(i{
if(strcmp(students[i].name,name)==0)/*若找到姓名*/
{printf("学生学号:
%s\n学生姓名:
%s\n学生年龄:
%d\n学生性别:
%s\n学生C语言成绩:
%-8.0f\n计算
机成绩:
%-8.0f\n英语成绩:
%-8.0f\n平均成
绩:
%-8.0f\n",students[i].num,students[i].name,students[i].age,students[i].sex,students[i].cyy,students[i].computer,students[i].english,students[i].pj);
m=i;
getchar();break;
}
i++;
}
if(i>=n)
printf("没有所找学生信息\n");
}
returnm;/*返回一个根m便于修改学生信息*/
getchar();
}
/*****显示函数*****/
voidinput(STUstudents[],intn)
{
inti;
system("cls");//清屏
if(n==0)/*表示没有学生信息记录*/
{
printf("\n没有学生记录!
\n");
}
printf("\n\n");
printheader();/*输出表格头部*/
i=0;
while(i{
printdata(students[i]);
i++;
}
getchar();
.
.
}
/*****
修改子程序*****/
void
Modify(STUstudents[],
intn)
{
int
i;
if(n<=0)
{
system(
"cls"
);
printf(
"\n退出请输入:
0\n"
);
printf(
"\n----------notfound!
----------\n"
);
getchar();
return;
}
system(
"cls"
);
printf(
"修改学生信息");
input(students,n);
i=Locate(students,n);
/*查询到该数组元素,并返回下标值*/
if(i!
=-1)
/*若i!
=-,表明已经找到该数组元素
*/
{
printf(
"请输入新的学生信息:
\n"
);
printf(
"
学号:
"
);
scanf(
"%s",students[i].num);
printf(
"
姓名:
"
);
scanf(
"%s",students[i].name);
printf(
"
年龄:
"
);
scanf(
"%d",&students[i].age);
printf(
"
性别:
"
);
scanf(
"%s",students[i].sex);
printf(
"C语言:
"
);
scanf(
"%f",&students[i].cyy);
printf(
"
英语:
"
);
scanf(
"%f",&students[i].english);
printf(
"
计算机:
"
);
scanf("%f",&students[i].computer);students[i].pj=(students[i].cyy+students[i].english+students[i].computer)/3;
printf("平均成绩:
%-9.0f\n",students[i].pj);
save(students,n);
printf("\n-------------修改成功!
-------------\n");
}
else
printf("notfound!
\n");
.
.
getchar();
}
/*****学生成绩排序子程序*****/
voidsort(STUstudents[],intn)
{
inti,j,a,b,c,d,e,f,k;
floatp;
printf("\n退出请输入:
0\n");
printf("成绩排序方式选择:
1.按C语言2.按英语3.按平均\n");
scanf("%d",&k);
if(k==1)/*用选择法对C语言排序*/
{
for(i=0;ifor(j=0;j{
if(students[i].english{
temp=students[i];
students[i]=students[j+1];
students[j+1]=temp;
}
}
}
elseif(k==2)/*英语用冒泡法*/
{
for(a=0;a{
c=a;
for(b=a+1;bif(students[b].cyy>students[c].cyy)
c=b;
if(c!
=a)
{
temp=students[a];
students[a]=students[c];
students[c]=temp;
}
}
}
.
.
if(k==3)/*平均成绩用插入法*/
{
for(d=1;d{
p=students[d].pj;
for(e=0;eif(students[e].pj
break;
if(e==d)
continue;
for(f=d;f>e;f--)
students[f]=students[f-1];
students[e]=temp;
}
}
input(students,n);/*显示排序后的所有记录*/
save(students,n);
printf("\n排序完成!
\n");
}
/*****
统计学生分数在各等级的人数子程序
*****/
void
Tongji(STUstudents[],
intn)
{
int
count6085=0,count85=0,count60=0;
int
i=0;
system("cls"
);
printf(
"\n
退出请输入:
0\n");
input(students,n);
i=0;
while(i{
if
(students[i].pj>85)
{count85++;i=i+1;
continue;}
/*平均成绩=>85*/
if
(students[i].pj>=60&&students[i].pj<=85){count6085++;i=i+1;
continue;}
/*60<平均成绩
<85*/
if
(students[i].pj<60)
{count60++;i=i+1;
continue;}
/*平均成绩
<60*/
}
printf(
"\n************统计结果************\n\n");
printf(
"平均成绩高于分的人数
:
%d\n"
count85);
printf(
"
\n"
);
printf(
"平均成绩在分和分之间的人数:
%d\n",count6085);
printf(
"
\n"
);
printf(
"平均成绩低于分的人数
:
%d\n"
count60);
printf(
"
\n"
);
.
.
printf("\n\n**********统计结束**********");
getchar();
}
/*****导出或保存数据*****/
voidsave(STUstudents[],intn)
{
FILE*fp;
inti=0;
fp=fopen("students","wb+");/*以读写方式打开创建一个二进制文件*/
if(fp==NULL)/*打开文件失败*/
{
printf("\n*******打开文件错误!
*******\n");
return;
}
for(i=0;i{
if(fwrite(&students[i],sizeof(STU),1,fp)==1)/*每次写一条记录或一个结构数组元素至文件*/
{
continue;
}
else
{
break;
}
}
if(i>0)
{
getchar();
printf("\n\n*共导出%d个学生信息*\n",i);
getchar();
}
else
{
system("cls");
printf("**没有信息导出*\n");
getchar();
}
fclose(fp);/*关闭此文件*/
}
/*****导入数据*****/
voidRead(STUstudents[],int*n)
{
FILE*fp;
inti=0;
.
.
fp=fopen("students","rb");/*以只读方式打开一个已有的二进制文件*/
if(fp==NULL)/*打开文件失败*/
{
printf("\n********打开文件错误!
********\n");
exit(0);
}
for(i=0;i{
if(fread(&students[i],sizeof(STU),1,fp)==1)/*每次读一条记录或一个结构数组元素至文件*/continue;
else
break;
}
*n=i;
if(i>0)
{
printf("\n\n************共导入:
%d个学生信息************\n",i);getchar();
}
else
{system("cls");
printf("************没有信息导入!
************\n");
getchar();
}
getchar();
fclose(fp);/*关闭此文件*/
}
/*****
主函数*****/
void
main()
{
STU
students[N];
int
n;
char
s1[3],s2[3]={
"1"};
int
i,k;
printf(
"\n\n");
printf(
"******************************************************\n"
);
printf(
"^
<
欢迎使用本软件>
^\n\n"
);
printf(
"^
<
版本:
修改版>
^\n\n\n"
);
printf(
"^<姓名>:
邢曾智
<
班级>:
09511002<
学号>:
0951100201^\n"
);
.
.
printf("^^\n");
printf("******************************************************\n");
printf("\n\n");
for(i=0;i<3;i++)
{
printf("\n请输入密码:
");
gets(s1);
if(strcmp(s1,s2)==0)
break;
else
printf("\n>密码错误,请重新输入");
}
if(i>2)
{
printf("\n您已连续次输错,系统将退出!
\n");
exit(0);
}
else
{
while
(1)
{
k=displaymenu();
switch(k)
{
case
'1'
:
add(students,&n);
break;
case
'2'
:
Read(students,&n);input(students,n);
break;
case
'3'
:
Read(students,&n);Locate(students,n);
break;
case
'4'
:
Read(students,&n);Modify(students,n);;
break;
case
'5'
:
Read(st