程序设计运行报告.docx
《程序设计运行报告.docx》由会员分享,可在线阅读,更多相关《程序设计运行报告.docx(30页珍藏版)》请在冰豆网上搜索。
程序设计运行报告
《高级语言程序设计》
课程设计报告
专业:
计算机科学与技术
班级学号:
14570222
姓名:
李天一
指导教师:
郑全英
2015年6月4日
一、课程设计目的和要求
本课程设计的目的是进一步培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解,完成基本、综合(挑战)程序设计任务,培养好的程序设计规范。
通过课程设计的综合训练,能培养学生实际分析问题、编程和动手能力,帮助学生系统地掌握该门课程的主要内容,更好地完成教学任务。
本课程设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构化程序设计的方法,按照课程设计的题目要求,分析、设计、编写和调试C语言程序及编写实践报告。
要求:
①对系统进行功能分析、确定功能模块、接口和数据结构;
②系统设计符合要求,通用性强;
③程序功能全面,具有较好的健壮性;
④设计说明、流程图完备、清楚、规范。
二、课程设计题目描述
学生成绩管理
学生成绩管理程序具有输入模块;更新模块;查询模块;统计模块功能;输出模块。
要求:
1)输入模块可以从文件读入,可以从键盘输入;
2)更新具有删除、修改功能;
3)具有缺省查询方式,即查询时只输入姓名的首字母,所有符合这一条件的信息均在屏幕上显示出来
4)统计模块实现各科最高分和不及格人数统计;
5)输出模块实现学生成绩信息存盘操作。
三、程序分析与设计
1、程序功能模块说明
输入学生数据函数:
输入的学生信息。
输出学生信息函数:
将保存在缓存中的学生数据按照一定的方式显示在运行框图中。
修改学生信息函数:
输入学生学号,并重新输入该学生数据。
并将新数据代替旧数据。
缺省查询函数:
输入要查询的学生的首字母,然后进行查询和显示。
各科最高分和不及格统计函数:
统计各学科最高分以及各学科不及格人数,然后将排序结果显示。
学生信息保存函数:
实现将输入到程序中的学生数据保存在“student.txt”格式的文件中,该文件保存在运行的文件夹中。
读取学生信息函数:
将“student.txt”文件中的学生数据输出到运行框图上。
删除学生信息函数:
输入学生学号,并能将其学号的学生所有数据删除的功能。
2、重要的数据结构说明
结构体:
structStudent//声明结构体,成员表列包括下列成员:
{
intnum;//学号
charname[20];//姓名
floatFrancais;//法语
floatc;//c语
floatphy;//大学物理
floataver;//平均成绩
}sdu[100];//定义结构体数组,数组长度为100,数组的每一个元素都包含结构体的所有成员数据
库函数:
stdio.h
数据文件:
student.txt
3、主要函数描述:
函数名
input(structStudentsdu[])
描述
输入学生信息
参数
sdu[]学生信息
返回值
成功返回0.
备注
无
函数名
print(structStudentsdu[])
描述
输出学生信息
参数
sdu[]学生信息
返回值
成功返回0.
备注
无
函数名
search(structStudentsdu[])
描述
缺省查询
参数
sdu[]学生信息
返回值
成功返回0.
备注
无
函数名
orderFrancais(structStudentsdu[])
描述
法语最高成绩
参数
sdu[]学生信息
返回值
成功返回0.
备注
无
函数名
orderc(structStudentsdu[])
描述
C语言成绩最高分
参数
sdu[]学生信息
返回值
成功返回0.
备注
无
函数名
orderphy(structStudentsdu[])
描述
物理成绩最高分
参数
sdu[]学生信息
返回值
成功返回0.
备注
无
函数名
Francaislow(structStudentsdu[])
描述
法语不及格的人数
参数
sdu[]不及格的人数
返回值
成功返回不及格的人数
备注
无
函数名
clow(structStudentsdu[])
描述
C语言不及格的人数
参数
sdu[]不及格的人数
返回值
成功返回不及格的人数
备注
无
函数名
phylow(structStudentsdu[])
描述
物理不及格的人数
参数
sdu[]不及格的人数
返回值
成功返回不及格的人数
备注
无
函数名
save()
描述
保存学生信息
参数
学生信息文件
返回值
无返回值
备注
无
函数名
read()
描述
读取学生信息
参数
文件学生信息
返回值
无返回值、
备注
无
函数名
del(structStudentsdu[])
描述
删除学生信息
参数
sdu[]学生信息
返回值
无返回值
备注
无
函数名
rew(structStudentsdu[])
描述
修改学生信息
参数
sdu[]学生信息
返回值
无返回值
备注
无
4、主要功能模块实现的流程图
输入学生数据模块:
输出学生信息模块:
缺省查询模块:
修改学生信息模块:
各科最高分和不及格统计模块:
保存学生信息模块:
读取学生信息模块:
删除学生信息模块:
5、程序运行报告
运行菜单:
输入3个人的学生信息
输出学生信息
查找学生1的成绩
修改学生1的信息
输出最高分与不及格人数
保存学生信息到文件中
从文件中读取数据
删除学生1的信息并输出剩余信息:
6、源程序清单,并在清单中按系统功能模块或程序功能模块给出注释(附在课设报告的最后附录中)
四、课程设计总结
1.程序设计难点及解决办法;
在设计最高分的排序问题中出现了排序混乱的情况,所以我们后来加设了一个函数,利用冒泡法从新排序解决了问题。
在菜单排序问题上我们也出现了一些不合逻辑的问题,经过我们的多次调试与实验最后设计出最合适的菜单界面。
2.程序调试中出现的问题
在程序运行初期的一些编译错误就非常多了,单经过我们的细心调试,最后都找到了问题所在,并将其改正。
在菜单选择中开始出现了选择最后一项就无法继续选项的问题,经过在循环上的调整我们使其可以正常的运转。
3.程序的不足
程序不足就是在保存学生信息到文件夹后就无法再从新修改。
4.课程设计的收获和体会及建议
通过几个星期的努力,总算把课程设计给完成了,这是一个坚苦而又漫长的过程。
是啊,做过那么多的题,课程设计可是第一次,第一次尝试写一个多功能的程序。
看着劳动成果,很欣慰!
虽然这不是我一个人做的,是两个人共同努力得来的。
“也许完成不了!
”一个月前我们这样说,“完成他没问题!
”半个月前我们这样说,现在我们可以说:
“哈哈,完成啦”!
刚开始,可以说是没有头绪,于是就去图书馆找资料,找到了一些关于设计程序方面的,可是这点小进展远远不够,这只是一个小小的开始。
下一步是上网查,找到了些与我们题目相似的,那时我们很高兴,可是那还不是我们要的,于是又上网查到了些有关的函数等等,终于在我们的不懈努力下,完成了这个程序。
在设计的过程中,我了解到要设计一个大型程序,查找资料是至关重要的,在他人的基础上,再根据自己所学进行修改与调试,最后设计出自己想要的程序,这过程艰辛,但只要你持之以恒,成功指日可待。
另外平时扎实的基础也很关键,因为如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。
为了解决此类问题,最好就是多向同学,老师请教,不要怕难为情。
尤其是老师,凭他们多年的编写程序的经验,要解决我们的问题,对他们来说只是smallcase。
虽然对着电脑做程序,有点累有点热,可是当看到劳动成果时,真是别有一番滋味在心头啊!
世上无难事,只怕有心人,的确如此。
做完这个程序最大的收获就是感受到了合作的力量,当然个人的智慧也是很重要的哦!
C语言课程设计和现代计算机技术的实际应用相结合,是我们在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验,做完这个课程设计,我们的自信一下子提高了,我们也会写程序了;尽管对于有些人这种程序会很简单,可对我们C语言初学者来说,已经很不容易了。
这次体验为以后的学习计算机的我们增强了信心。
享受劳动成果的滋味实在很美妙啊!
总之,这次设计程序让我受益良多,我会好好珍惜像这种难得的机会
五、参考书目
“苏小红等,C语言大学实用教程(第三版),2013年十月”
六、附录
源程序清单
#include
#include
#defineX100
structStudent
{
intnum;
charname[X];
floatFrancais;
floatc;
floatphy;
floataverage;
}sdu[X];
intn;//定义一个全局变量n,用来控制需输入的学生的个数.
intmain()
{
system("colorb0");
//函数声明
voidinput(structStudentsdu[]);
voidoutput(structStudentsdu[]);
voidsearch(structStudentsdu[]);
voidc(structStudentsdu[]);
voidFrancais(structStudentsdu[]);
voidphy(structStudentsdu[]);
intFrancaislow(structStudentsdu[]);
intclow(structStudentsdu[]);
intphylow(structStudentsdu[]);
voidrest(structStudentsdu[]);
voidsave();
voidread();
voiddel(structStudentsdu[]);
voidrew(structStudentsdu[]);
intmenu;
//菜单功能
printf("*************************************************************************\n");
printf("*输入学生成绩(请输入1)输出学生信息(请输入2)*\n");
printf("**\n");
printf("*缺省查询(请输入3)修改学生信息(请输入4)*\n");
printf("**\n");
printf("*各科最高分和不及格统计(请输入5)将学生信息保存到文件中(请输入6)*\n");
printf("**\n");
printf("*从文件中读取学生信息(请输入7)删除学生信息(请输入8)*\n");
printf("**\n");
printf("*************************************************************************\n");
printf("请输入学生个数:
\a\a");
scanf("%d",&n);
menu=1;//菜单选项变量初始化为1,目的是进入while下面的switch语句选择
while(menu>=1&&menu<=8)//该系统要实现八个功能,每一个选项代表一个函数
{
printf("请输入选项:
");
scanf("%d",&menu);
switch(menu)
{
case1:
input(sdu);
break;
case2:
output(sdu);
break;
case3:
search(sdu);
break;
case4:
rew(sdu);
break;
case5:
Francais(sdu);
printf("%f\n",sdu[0].Francais);
c(sdu);
printf("%f\n",sdu[0].c);
phy(sdu);
printf("%f\n",sdu[0].phy);
printf("法语不及格人数为:
%d\n",Francaislow(sdu));
printf("c语不及格人数为:
%d\n",clow(sdu));
printf("物理不及格人数为:
%d\n",phylow(sdu));
rest(sdu);
break;
case6:
save();
break;
case7:
read();
output(sdu);
break;
case8:
del(sdu);
break;
default:
printf("error!
\n");//当选择不在1--8范围内时,执行该语句,终止switch语句,然后跳出循环,函数结束
break;
}
}
return0;
}
/*输入学生信息*/
voidinput(structStudentsdu[])
{
inti;
printf("*************************************************************************\n");
printf("请录入学生信息:
学号姓名法语c语言大学物理(数据之间用空格隔开):
\n");
for(i=0;i{
scanf("%d%s%f%f%f",&sdu[i].num,sdu[i].name,&sdu[i].Francais,&sdu[i].c,&sdu[i].phy);
sdu[i].average=(sdu[i].Francais+sdu[i].c+sdu[i].phy)/3;
}
printf("输入完成\n");
}
/*输出学生信息*/
voidoutput(structStudentsdu[])
{
inti;
printf("输出结果为\n");
printf("学号姓名法语c语言大学物理平均成绩\n");
for(i=0;i{
printf("%3d%8s%8.1f%8.1f%8.1f%10.1f\n",sdu[i].num,sdu[i].name,sdu[i].Francais,sdu[i].c,sdu[i].phy,sdu[i].average);
}
}
/*缺省查询学生*/
voidsearch(structStudentsdu[])
{
inti,x=0;
charnum_get;
printf("请输入要查询学生的姓名首字母:
");
scanf("%s",&num_get);;
for(i=0;i{
if(num_get==sdu[i].name[0])
{
printf("所查学生信息为\n");
printf("学号姓名法语c语言大学物理平均成绩\n");
printf("%3d%8s%8.1f%8.1f%8.1f%10.1f\n",sdu[i].num,sdu[i].name,sdu[i].Francais,sdu[i].c,sdu[i].phy,sdu[i].average);
x=x+1;
}
}
if(x==0)
printf("无该学生信息!
\n");
}
/*修改学生信息*/
voidrew(structStudentsdu[])
{
inti,j;
printf("请输入修改学生的学号:
");
scanf("%d",&j);
printf("请输入修改后该学生信息;");
scanf("%d%s%f%f%f",&sdu[j-1].num,sdu[j-1].name,&sdu[j-1].Francais,&sdu[j-1].c,&sdu[j-1].phy);
sdu[j-1].average=(sdu[j-1].Francais+sdu[j-1].c+sdu[j-1].phy)/3;//平均分的运算
printf("修改后的结果\n");
printf("学号姓名法语c语言大学物理平均成绩\n");
for(i=0;i{
printf("%3d%8s%8.1f%8.1f%8.1f%10.1f\n",sdu[i].num,sdu[i].name,sdu[i].Francais,sdu[i].c,sdu[i].phy,sdu[i].average);
}
}
/*学生成绩最高分及不及格统计*/
voidFrancais(structStudentsdu[])
{
inti,j;
structStudenttemp;
for(i=0;i{
for(j=0;j{
if(sdu[j].Francais{
temp=sdu[j];
sdu[j]=sdu[j+1];
sdu[j+1]=temp;
}
}
}
printf("法语最高分为:
\n");
}
voidc(structStudentsdu[])
{
inti,j;
structStudenttemp;
for(i=0;i{
for(j=0;j{
if(sdu[j].c{
temp=sdu[j];
sdu[j]=sdu[j+1];
sdu[j+1]=temp;
}
}
}
printf("c语最高分为:
\n");
}
voidphy(structStudentsdu[])
{
inti,j;
structStudenttemp;
for(i=0;i{
for(j=0;j{
if(sdu[j].phy{
temp=sdu[j];
sdu[j]=sdu[j+1];
sdu[j+1]=temp;
}
}
}
printf("物理最高分为:
\n");
}
intFrancaislow(structStudentsdu[])
{
inti,j=0;
for(i=0;i{
if(sdu[i].Francais<60)
j++;
}
returnj;
}
intclow(structStudentsdu[])
{
inti,j=0;
for(i=0;i{
if(sdu[i].c<60)
j++;
}
returnj;
}
intphylow(structStudentsdu[])
{
inti,j=0;
for(i=0;i{
if(sdu[i].phy<60)
j++;
}
returnj;
}
voidrest(structStudentsdu[])
{
inti=0;
intj;
structStudenttemp;
for(i=0;i{
for(j=0;j{
if(sdu[j].num>sdu[j+1].num)
{
temp=sdu[j];
sdu[j]=sdu[j+1];
sdu[j+1]=temp;
}
}
}
}
/*保存学生信息*/
voidsave()
{
FILE*fp1;
inti;
if((fp1=fopen("Student.txt","w"))==NULL)//"w"只写不论该文件是否存在,都新建一个文件
{
printf("Cannotopenfile\n");
return;
}
for(i=0;ifprintf(fp1,"%3d%8s%8.1f%8.1f%8.1f%10.1f\n",sdu[i].num,sdu[i].name,sdu[i].Francais,sdu[i].c,sdu[i].phy,sdu[i].average);
//将变量中的学生信息按预定的格式存入到打开的文件中
fclose(fp1);//保存成功后关闭文件
printf("已将学生的信息保存到文件中\n");
}
/*读取保存在文件中的学生信息*/
voidread()
{
FILE*fp2;
inti;
if((fp2=fopen("student.txt","r"))==NULL)//"r"只读必须是已存在的文件
{
printf("cannotopenthisfile!
\n");
}
for(i=0;!
feof(fp2);i++)
{
fscanf(fp2,"%d%s%f%f%f%f",&sdu[i].num,&sdu[i].name,&sdu[i].Francais,&sdu[i].c,&sdu[i].phy,&sdu[i].average);
}
fc