资源描述
HUNAN UNIVERSITY
程序设计训练
报 告
学生姓名 张杨阳
学生学号 201307020213
专业班级 电子1302
指导老师 贺再红
2014 年 9月 13日
北京 湖南大学程序设计训练报告 第 Ⅰ 页
目 录
一 目的
二 内容和要求
三 设计分析
四 程序调试与结论
五 程序设计心得与体会
六 附录:
参考文献
程序清单
湖南大学程序设计训练报告
题 目
一 目的
1.问题分析及解决方案框架确定
l 充分地分析和理解问题本身,弄清要求做什么(What to do?)。
l 在确定解决方案框架过程中(How to do?),考虑怎样使程序结构清晰、合理、简单和易于调试,并确定每个函数的简单功能,以及函数之间的调用关系。
2.详细设计和编码
确定算法的主要流程,再此基础上进行代码设计(Coding),每个明确的功能模块程序一般不超过60行,否则要进一步划分。
3.上机前编写程序与检查
上机前程序检查可有效提高调试效率,减少上机调试程序时的无谓错误。
程序检查主要有两种途径:用一组测试数据手工执行程序;通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑,把程序中的明显错误事先排除。
4.上机调试程序
5.完成程序设计训练报告
① 问题描述:题目要解决的问题是什么。
② 设计
l 设计算法:主要算法思想,用流程图表示。
l 实现注释:各项功能的实现程度。
l 调试报告:调试过程中遇到的主要问题,是如何解决的;对设计和编码的回顾讨论和分析;改进设想;经验和体会等。
③附录:源程序清单和结果。如果题目规定了测试数据,则结果要包含这些测试数据和运行输出,当然还可以含其他测试数据和运行输出。
二 内容和要求(本人所完成的任务)
学生信息包括:学号、姓名、年龄、性别、出生年月。主要功能:
(1)能按学期、按班级完成对学生成绩的录入、修改。
(2能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序。
(3)能查询学生成绩。
(4)能按班级输出学生的成绩单。
三
输入要求
录入
修改
统计
查询
打印
退出
输入相关信息
输入相关信息
核对
输入修改信息
计算总成绩,平均成绩
排序
输入相关信息
核对
输出成绩
输出一个班的所有学生的成绩,总分,平均分
四 程序调试与结论
1、在整个程序设计中,由于以前的C和C++学的并不好,所以在初期的设计中出了很多的错误:
Ø 关于文件包含的操作,开始把所有的类的定义都放在头文件中,把所有函数都定义在一个源文件中,然后将主程序写在main源文件中,但是在编译的时候出错,提示所有的函数都未定义。找出问题后,原来我只是将这几个文件都新建在同一个工程中,但是在编译的时候并没有将函数源文件增加到工程中去,所以编译的时候没法找到相应的函数定义。
Ø 用switch结构时,每次进入主菜单都只能选择一次功能,然后就会直接退出程序,不能进行下一次功能选择。
解决办法:在switch结构之前定义一个整型变量flag=0;用一个while循环语句实现每一次功能选择完毕后退回主菜单。之后的选择分支中退回主菜单的方法也是一样的。
Ø 关于查找的时候实现输入的name_find字符数组于定义的name字符数组的匹配的时候出错。我开始直接定义的一个字符串类型变量string name_find,然后使用strcnp(name name_find),但是编译时报错,我以为是因为头文件中没有包含string.h,在头文件中增加#include<string>后还是有错。
2、此程序篇幅较长,且要求较多,但通过功能函数可以将程序分为几个模块,彼此没有关联,使复杂的程序简单化,以后遇到相似问题也可以如此解决。
3、 程序的运行结果的截图显示
五 程序设计心得与体会
此程序篇幅较长,且要求较多,但通过功能函数可以将程序分为几个模块,彼此没有关联,使复杂的程序简单化,以后遇到相似问题也可以如此解决。
六 附录:
参考文献
程序清单
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define N 100 //一个班的人数
struct student
{ long xq; //学期
char bj[20]; //班级
char xh[20]; //学号
char xm[20]; //姓名
char xb[8]; //性别
long csny; //出生年月
float cj[6]; //6门成绩
float total; //总分
float aver; //平均分
};
struct student x[N];
long xueqi; //学期
char banji[20]; //班级
int n; //一个班的实际人数
void a1(); //录入
void a2(); //修改
void a3(); //统计
void a4(); //查询
void a5(); //打印成绩单
main()
{ int op;char ch;
do
{
system("cls");
printf("\n欢迎使用学生成绩管理系统系统\n");
printf("1. 录入 \n");
printf("2. 修改 \n");
printf("3. 统计 \n");
printf("4. 查询 \n");
printf("5. 打印 \n");
printf("6. 退出 \n");
scanf("%d",&op);
switch(op)
{ case 1:a1();ch='Y';break;
case 2:a2();ch='Y';break;
case 3:a3();ch='Y';break;
case 4:a4();ch='Y';break;
case 5:a5();ch='Y';break;
default:ch='N';break;
}
}while(ch=='Y');
}
void a1()//录入
{ char xuehao[20]; //一个学生的学号后两位
int i,j;
printf("输入学期 班级 人数\n");
scanf("%ld%s%d",&xueqi,banji,&n);
for(i=0;i<n;i++)
{ x[i].xq=xueqi;
strcpy(x[i].bj,banji);strcpy(x[i].xh,"2013080102");
system("cls");//清屏
printf("输入第%d个学生的学号(后两位)、姓名、性别、出生年月\n",i+1);
scanf("%s%s%s%ld",xuehao,x[i].xm,x[i].xb,&x[i].csny);
strcat(x[i].xh,xuehao);
printf("输入第%d个学生的6门成绩\n",i+1);
for(j=0;j<6;j++)
scanf("%f",&x[i].cj[j]);
}
getch();}
void a5()//打印
{ int i,j;
system("cls");
for(i=0;i<n;i++)
{
printf("学 期 班级 学号 姓名 性别 出生年月 六门成绩 总成绩 平均分\n");
printf("%6ld %8s %12s%-8s %s %8ld ",x[i].xq,x[i].bj,x[i].xh,x[i].xm,x[i].xb,x[i].csny);
for(j=0;j<6;j++)
printf("%.0f ",x[i].cj[j]);//输出六门成绩
printf("%5.1f %5.1f\n\n",x[i].total,x[i].aver);//输出总成绩,平均成绩
}
getch();}
void a2()// 修改
{ long xq;
char bj[20],xh[20],xm[20],yn;
int i,j;
do{
system("cls");
printf("输入要修改的学生的学期号和班级、学号、姓名\n");
scanf("%ld%s%s%s",&xq,bj,xh,xm);
for(i=0;i<n;i++)
{ if(x[i].xq==xq)//核对学期
if(strcmp(x[i].bj,bj)==0)//核对班级
if(strcmp(x[i].xh,xh)==0)//核对学号
if(strcmp(x[i].xm,xm)==0)//核对姓名
{ for(j=0;j<6;j++)
scanf("%f",&x[i].cj[j]);
break;
}
}
printf("继续修改学生成绩吗(Y/N)\n");
scanf("%s",&yn);}
while(yn=='y');
getch();}
void a3()//统计
{ int i,j;
float s=0;
struct student t;
system("cls");
for(i=0;i<n;i++)
{ s=0;
for(j=0;j<6;j++)
s=s+x[i].cj[j];
x[i].total=s;
x[i].aver=s/6.0;
}
for(i=0;i<n-1;i++)//排序
for(j=n-1;j>=i+1;j--)
if(x[j].aver<x[j-1].aver)
{ t=x[j];x[j]=x[j-1];x[j-1]=t;}
getch();}
void a4()//查询
{ char xh[20],xm[20],yn;int i,j;
do{
system("cls");//清屏
printf("输入要查询学生的学号和姓名\n");
scanf("%s%s",xh,xm);
for(i=0;i<n;i++)
{ if((strcmp(x[i].xh,xh)==0)&&(strcmp(x[i].xm,xm)==0))//核对学号,姓名
{printf("学 期 班级 学号 姓名 性别 出生年月 六门成绩 总成绩 平均分\n");
printf("%6ld %8s %12s%-8s %s %8ld ",x[i].xq,x[i].bj,x[i].xh,x[i].xm,x[i].xb,x[i].csny);
for(j=0;j<6;j++)
printf("%.0f ",x[i].cj[j]);
printf("%5.1f %5.1f\n\n",x[i].total,x[i].aver);
break;}}
if(i>=n) printf("查无此人\n");
printf("继续查找吗(y/n)?\n");
scanf("%s",&yn);}while(yn=='y');
getch();}
展开阅读全文