学生成绩管理程序c语言.docx
- 文档编号:12690713
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:19
- 大小:230.11KB
学生成绩管理程序c语言.docx
《学生成绩管理程序c语言.docx》由会员分享,可在线阅读,更多相关《学生成绩管理程序c语言.docx(19页珍藏版)》请在冰豆网上搜索。
学生成绩管理程序c语言
二○一○~二○一一学年第二学期
信息科学与工程学院
课程设计报告书
课程名称:
班级:
学号:
姓名:
指导教师:
二○一○年九月一日
学生成绩管理程序
需求分析:
◆能录入学生信息存储在文件中,每位学生录入的信息有:
姓名、学号、性别、班级、和三门功课(数学,英语,计算机)的成绩。
如:
学号姓名性别班级数学英语计算机总成绩
0701王鹏男1班705898
0702李燕女2班688895
0703赵亚芳男3班584896
0704刘飞男4班677858
◆能够统计每个学生三门功课成绩并显示;
◆能按学生号查询其三门学功课成绩并显示;
◆能浏览全部学生成绩;
◆能按总成绩由高到低显示学生成绩。
系统需求分析:
1.加入学生成绩信息
2.计算学生总成绩
3.按学号查询成绩
4.查询全部学生成绩
5.按总成绩排序
6.保存系统信息
概要设计:
录入:
在定义结构体末尾插入学生信息:
学号、姓名、性别、班级、数学、英语、计算机、总成绩。
求和:
计算三门成绩的和保存在总成绩
查询:
根据输入学号查找到相应的学生信息并在屏幕上输出
显示:
从第一个学生信息处开始以此输出学生成绩,形成表格的形式
排序:
一学生总成绩为准,比较学生总成绩高低,并按此为学生排名,并输出,以表格形式显示
保存:
将系统内存录入的所有学生成绩在文件中保存
详细设计:
Ø录入学生信息(voidsave()):
1.利用循环判断结构体内学生学号是否存在来找到违背赋值的结构体
2.输入学生成绩并保存在未被赋值的结构体
Ø求总成绩(voidqiuhe()):
1.从结构体开头利用循环实现
2.总成绩=数学+英语+计算机
Ø查询总成绩(voidchaxun())
1.从键盘输入需要查询的学号
2.比较找到相应学号
3.输入相应的成绩
Ø显示全部学生成绩(voidxianshiquanbu())
1.鲜利用求和函数求出各学生总成绩
2.利用循环逐个输出各位学生的成绩
3.以表格形式输出
Ø排序(voidpaixu())
1.以学生总成绩为比较的基准
2.利用循环实现选择法比较排出名次
Ø保存(voidsaver())
1.建立文件,并利用循环以此保存结构体中数据。
2.以txt形式保存。
三.详细设计
工作流程图:
✧录入学生信息(voidsave()):
✧查询总成绩(voidchaxun()):
显示全部学生成绩(voidxianshiquanbu())
排序(voidpaixu())
保存(voidsaver())
四.程序源代码:
#include
#include
#include
#definecjxueshengchengji/*宏定义*/
#definessstructstudent
#definet1"---------------------------学生成绩------------------------------------\n"
#definet2"|姓名|学号|性别|班级|数学|英语|计算机|总成绩|\n"
#definet3"|%-6d|%-8s|%-4s|%-5d|%-6d|%-6d|%-8d|%-8d|\n"
#definet4stu[j].num,stu[j].name,stu[j].sex,stu[j].banji,stu[j].math,stu[j].en,stu[j].computer,stu[j].sum
#definet41stu[j].num,stu[j].name,stu[j].sex,stu[j].banji,stu[j].math,stu[j].en,stu[j].computer
#definet5"------------------------------------------------------------------------\n"
structstudent/*定义结构体数组*/
{
intnum;
charname[20];
charsex[20];
intbanji;
intmath;
inten;
intcomputer;
intsum;
}stu[100];
voidmain()
{
inti=0,s=0;
voidsave();/*声明已定义的函数*/
voidchaxun();
voidxianshiquanbu();
voidpaixu();
voidsaver();
voidqiuhe();
FILE*fp;
fp=fopen("cj.txt","a+");/*在作用前,若文件不存在,新建文件*/
fclose(fp);
printf("\n");
printf("-----------------------------主菜单----------------------------------------\n");
printf("请选择功1.成绩录入2.成绩查询0.退出程序\n");
printf("能并输入3.浏览全部学生成绩4.总成绩排序\n");
printf("相应序号5.求总成绩6.保存数据\n");
printf("---------------------------------------------------------------------------\n");
scanf("%d",&s);
while(s)
{
switch(s)/*选择所需功能*/
{
case1:
system("cls");save();break;
case2:
system("cls");chaxun();break;
case3:
system("cls");xianshiquanbu();break;
case4:
system("cls");paixu();break;
case5:
system("cls");qiuhe();break;
case6:
system("cls");saver();break;
case0:
system("exit");exit(0);
}
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("-----------------------------主菜单----------------------------------------\n");
printf("请选择功1.成绩录入2.成绩查询0.退出程序\n");
printf("能并输入3.浏览全部学生成绩4.总成绩排序\n");
printf("相应序号5.求总成绩6.保存数据\n");
printf("---------------------------------------------------------------------------\n");
scanf("%d",&s);
}
}
voidsave()
{
inti=0;
while(stu[i].num!
=0)/*在录入数据前先将结构体数组指向相应位置*/
i++;
printf("请依次输入:
学号姓名性别班级数学英语计算机\n");
scanf("%d%s%s%d%d%d%d",&stu[i].num,stu[i].name,stu[i].sex,&stu[i].banji,
&stu[i].math,&stu[i].en,&stu[i].computer);
system("cls");
if(stu[i].num!
=0)
printf("保存成功!
");
elseprintf("保存失败!
");
}
voidchaxun()
{
intm,j=0;
printf("请输入需要查询的学号:
");
scanf("%d",&m);
FILE*fp;
fp=fopen("cj","ab+");
while(stu[j].num!
=0)
{/*判断输入学号是否存在*/
if(m==stu[j].num)
{
printf("-----------------------\n");
printf("|数学|英语|计算机|\n");
printf("|%-6d|%-6d|%-8d|\n",stu[j].math,stu[j].en,stu[j].computer);
printf("-----------------------");
break;
}
j++;
}
fclose(fp);
}
voidxianshiquanbu()
{
intj=0;
printf(t1);
printf(t2);
while(stu[j].num!
=0)
{
stu[j].sum=stu[j].math+stu[j].en+stu[j].computer;
printf(t3,t4);
j++;
}
printf(t5);
}
voidpaixu()
{
intj,k,i=0;
structstudenttemp;
while(stu[i].num!
=0)
i++;
for(j=0;j { for(k=j+1;k { if(stu[j].sum { temp=stu[j]; stu[j]=stu[k]; stu[k]=temp; } } } printf(t1); printf(t2); for(j=0;j printf(t3,stu[j].num,stu[j].name,stu[j].sex,stu[j].banji, stu[j].math,stu[j].en,stu[j].computer,stu[j].sum); } printf(t5); } voidqiuhe() { intj=0; printf(t1); printf(t2); while(stu[j].num! =0)/*利用循环对每个结构体中的三项成绩求和*/ { stu[j].sum=stu[j].math+stu[j].en+stu[j].computer; printf(t3,stu[j].num,stu[j].name,stu[j].sex,stu[j].banji, stu[j].math,stu[j].en,stu[j].computer,stu[j].sum); j++; } printf(t5); } voidsaver() { intj=0; FILE*fp; fp=fopen("cj.txt","a+");/*将其以txt形式保存*/ while(stu[j].num! =0) { fprintf(fp,"|%-6d|%-8s|%-4s|%-5d|%-6d|%-6d|%-8d|%-8d|", stu[j].num,stu[j].name,stu[j].sex,stu[j].banji,stu[j].math,stu[j].en,stu[j].computer,stu[j].sum); fprintf(fp,"\n"); j++; } if(stu[j].num! =NULL) printf("保存失败! "); elseprintf("保存成功! "); fclose(fp); } 五、调试分析过程描述 1.程序主界面 2.录入学生信息 3.求总成绩 4.查询总成绩 5.浏览全部学生成绩 6.按总成绩排序 7.保存数据 问题: 1.当关闭程序以后如何能再次调用已经保存在txt文档内的数据, 经过调试还是没有完善这项功能。 2.关于文件指针的使用总是出现错误,不能按照预想的去移动指针位置从而输出数据。 程序设计小结: 这次程序设计课程收获不少,首先自己通过自学掌握了不少课堂内或者教材里面没有的知识,对C语言有了更多认识。 C语言的学习应该是循序渐进不断积累的过程,如果想要是C语言成为自己手里的一门工具,那么应该去自学相关的内容来丰富自己。 C语言的学习也是注重实践的,需要通过实际操作来发现错误,改正错误,从而在编程过程中应用自如。 从这一方面来看,在学习的过程中发现错误时非常重要的,再次,学会分析错误也是逐步排除才能提高能力。 这门课程很好的不信丰富了C语言的相关知识还培养了自学能力,自己处理问题的能力,是一门注重实际的课程。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩 管理程序 语言