C语言学生成绩查询系统2.docx
《C语言学生成绩查询系统2.docx》由会员分享,可在线阅读,更多相关《C语言学生成绩查询系统2.docx(24页珍藏版)》请在冰豆网上搜索。
C语言学生成绩查询系统2
实训目的能力目标
全面熟悉、掌握C语言基本知识,掌握C程序设计中数组、函数、指针的操作,把编程和实际结合起来,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,规范编程思想,为以后在专业课程中应用计算机系统解决计算、分析、实验和设计等学习环节打下较扎实的基础。
实训要求:
(1)掌握C语言中的基本数据输入、输出;
(2)熟练使用C语言中的数组;
(3)熟练使用C语言中的函数;
(4)熟练使用C语言中的指针;
(5)熟练使用C语言中的结构体。
实训内容(过程及步骤)
设计题目:
学生成绩查询系统
1、基本思路:
以数组为基础,加以函数和结构体。
然后程序分由“输入学生成绩”,“输出学生成绩”,“查询学生成绩”,“修改学生成绩”,“查看成绩排序”,“查看成绩统计保存数据”,“读取数据”等等这几大部分组成。
这五部分各自用一个程序列出,然后在用其他函数将他们连接起来。
2、程序:
#include
#include
#include
#include
#include
#defineN10
/*****定义结构体*****/
typedefstructstudents/*标记为students*/
{
charnum[10];/*学生学号*/
charname[10];/*学生姓名*/
intage;/*年龄*/
charsex[10];/*性别*/
floatcyy;/*C语言成绩*/
floatcomputer;/*计算机成绩*/
floatenglish;/*英语成绩*/
floatpj;/*平均成绩*/
}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->sex,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();
}
/*****修改子程序*****/
voidModify(STUstudents[],intn)
{
inti;
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");
}
/*****统计学生分数在各等级的人数子程序*****/
voidTongji(STUstudents[],intn)
{
intcount6085=0,count85=0,count60=0;
inti=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);/*关闭此文件*/
}
/*****主函数*****/
voidmain()
{
STUstudents[N];
intn;
chars1[3],s2[3]={"1"};
inti,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(students,&n);sort(students,n);break;
case'6':
Read(students,&n);Tongji(students,n);break;
case'7':
save(students,n);break;
case'8':
Read(students,&n);break;
case'9':
system("cls");
printf("\n**********谢谢您的使用**********\n");exit(0);break;
default:
printf("\n\n输入错误,输入必须是~9之间的一个数字!
请重新输入\n");getchar();getchar();
}
}
}
}
3、运行结果(截图):
第一步:
输入本软件的使用密码。
第二步:
登陆后的画面
第三步:
输入学生成绩的画面
第四步:
输出学生成绩
这个是随便输入后保存的有关数据
第五步:
查询成绩
第六步:
修改原来的信息
第七步:
成绩排序
按英语排序
第八步:
成绩统计
第九步:
保存数据
第十步:
导出数据
4、遇到困难:
在进行此次实训的过程中我遇到了许多的问题,比如没有定义函数名就进行函数的编译,以至于等到运行时找了很久都没有找到错误,还有就是定义指针数组名的时候不清楚如何在结构体中添加指针数组以及如何在特定的地方添加函数。
不懂如何用在被调用函数中直接改变多个被调函数值,以及如何用函数把变量传送到到指定的地址等等。
实训心得:
历时2星期的《C语言程序实训》已经结束了,在这2星期编程的过程中感触颇多,实训编程的同时暴露出了许多我自身存在的问题,同时也对自身有了很大的提高。
首先,对我以前做题做事非常马虎的毛病有了很大的改进,通过在这2星期编程的过程中的锻炼,我现在做题比以前仔细多了,会小心翼翼地去