C语言学生成绩查询系统.docx
- 文档编号:13050832
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:52
- 大小:239.59KB
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;i for(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;b if(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;e if(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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学生 成绩 查询 系统