学生作业完成情况管理程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 问题要求及任务描述
1.1 题目要求
学生作业完成情况管理程序(2人)
1)问题描述
请设计一个学生作业完成情况管理程序。
假设某门课程一学期要留10次作业,每次老师要进行批改,给出分数后还要进行登记。
学期期末要根据每次作业的成绩计算出最终的平时成绩(满分100)。
作业登记信息应该包含:学号、姓名、10次作业的完成情况。
2) 基本要求
该程序应该具有下列功能:
(1) 通过键盘输入某位学生某次作业的分数;
(2) 给定学号,显示某位学生作业完成情况;
(3) 给定某位学生的学号,修改该学生的作业完成信息;
(4) 给定某位学生的学号,删除该学生的信息;
(5) 按学生的最终平时成绩进行排序;
(6) 输出平均分数。
1.2 主要任务
1、学生信息和成绩的输入
2、学生信息的查询
3、学生信息的修改
4、学生信息的删除
2 解决问题的主要思路和方法
2.1 关键问题
学生信息的输入
2.2 拟采用解决问题的方法
我使用了循环语句进行输入,先输入人数,然后输入学生信息,再输入学生成绩2.3 主要算法和处理流程图
3 程序实现
3.1 程序实现时应考虑的问题
main函数里面有switch开关语句
main函数调用H1函数
main函数调用H2函数
main函数调用H3函数
main函数调用H4函数
main函数调用H5函数
main函数调用H6函数
3.2 主要源代码及说明
#include <stdio.h>
#include<stdlib.h> //这个与exit()有关
#include<string.h> //这与字符串处理函数有关#include<conio.h> //这与getch()有关
#define max 10
struct student
{
char name[15];
int number;
int zuoye[10];
int zongfen;
}stu[max];
static int n;
void H1()
{
int i,j;
printf("请问你要输入几位学生:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("\n第%d位学生的名字:",i+1);
scanf("%s",stu[i].name);
printf("学号:");
scanf("%d",&stu[i].number);
for(j=0;j<10;j++)
{
printf("第%d次作业:",j+1);
scanf("%d",&stu[i].zuoye[j]);
stu[i].zongfen+=stu[i].zuoye[j];
}
}
printf("\n\n输入完毕!按任意键返回主菜单!");
getch(); //getch有停顿作用}
void H2()
{
int i,k,j;
for(i=0;i<n;i++)
{
printf("名字:%s 学号:%d\n",stu[i].name,stu[i].number);
}
printf("请输入你要查看学生的学号:");
scanf("%d",&k);
printf("注:0分表示没做作业\n");
for(i=0;i<n;i++)
{
if(k==stu[i].number)
{
printf("名字:%s 学号%d\n",stu[i].name,stu[i].number);
for(j=0;j<10;j++)
{
printf("第%d次作业:%d\n",j+1,stu[i].zuoye[j]);
}
}
}
printf("\n\n查看完毕!按任意键返回主菜单!");
getch(); //getch有停顿作用}
void H3()
{
int i,k,j;
for(i=0;i<n;i++)
{
printf("名字:%s 学号:%d\n",stu[i].name,stu[i].number);
}
printf("请输入你要修改学生的学号:");
scanf("%d",&k);
printf("修改他的第几次作业:");
scanf("%d",&j);
for(i=0;i<n;i++)
{
if(k==stu[i].number)
{
printf("修改为:");
scanf("%d",&stu[i].zuoye[j-1]);
}
}
printf("\n\n修改完毕!按任意键返回主菜单!");
getch(); //getch有停顿作用}
void H4()
{
int i,k,j;
for(i=0;i<n;i++)
{
printf("名字:%s 学号:%d\n",stu[i].name,stu[i].number);
}
printf("请输入你要删除学生的学号:");
scanf("%d",&k);
for(i=0;i<n;i++)
{
if(k==stu[i].number)
{
for(j=i;j<n;j++)
{
stu[j]=stu[j+1];
}
n=n-1;
}
}
printf("\n\n删除完毕!按任意键返回主菜单!");
getch(); //getch有停顿作用}
void H5()
{
int i,j;
struct student temp;
printf("从高到低排序:\n");
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(stu[j].zongfen>stu[i].zongfen)
{
temp=stu[j];
stu[j]=stu[i];
stu[i]=temp;
}
}
}
for(i=0;i<n;i++)
{
printf("%d 姓名:%s 总分:%d\n",i+1,stu[i].name,stu[i].zongfen);
}
printf("\n\n排序完毕!按任意键返回主菜单!");
getch(); //getch有停顿作用
}
void H6()
{
int i;
for(i=0;i<n;i++)
{
printf("姓名:%s 平均分:%d\n",stu[i].name,stu[i].zongfen/10);
}
printf("\n\n显示完毕!按任意键返回主菜单!");
getch(); //getch有停顿作用}
main()
{
int m;
while(1)
{
system("cls");
printf("\n\t\t\t学生作业完成情况管理");
printf("\n\t\t\t1 输入作业分数");
printf("\n\t\t\t2 学生作业情况");
printf("\n\t\t\t3 修改作业分数");
printf("\n\t\t\t4 删除作业信息");
printf("\n\t\t\t5 平时成绩排序");
printf("\n\t\t\t6 输出平均分数");
printf("\n\t\t\t7 退出系统");
printf("\n\t\t\t请选择:");
scanf("%d",&m);
switch(m)
{
case 1:
system("cls");
H1();
break;
case 2:
system("cls");
H2();
break;
case 3:
system("cls");
H3();
break;
case 4:
system("cls");
H4();
break;
case 5:
system("cls");
H5();
break;
case 6:
system("cls");
H6();
case 7: exit(0);
default:;
}
}
}
4 测试4.1 测试结果及分析
程序菜单:
成绩录入:
信息修改:
删除信息:
信息排序:
平均分:
5 小结
5.1本问题解决方法及程序实现小结
1、system函数直接引用#include<stdio.h>
2、exit(0)函数引用#include <conio.h>和#include <stdlib.h>
3、getch()函数引用#include<conio.h>
4、printf和scanf引用#include<stdio.h>
5.2 尚未解决的问题及下一步工作思路
系统很多地方对输入错误的数据没有进一步的判断和申明,导致系统不怎么完善.
6 参考文献
《C语言》苏小红电子工业出版社 2010年5月出版。