C语言课程设计报告书张杉.docx
《C语言课程设计报告书张杉.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告书张杉.docx(18页珍藏版)》请在冰豆网上搜索。
![C语言课程设计报告书张杉.docx](https://file1.bdocx.com/fileroot1/2022-10/29/04f996d1-ceee-4d89-99ac-6fde73616bc7/04f996d1-ceee-4d89-99ac-6fde73616bc71.gif)
C语言课程设计报告书张杉
(此文档为word格式,下载后您可任意编辑修改!
)
西安郵電學院
高级语言课程设计报告书
系部名称
电信系
学生姓名
张杉
专业名称
电子信息工程
班级
电子0701
学号
指导教师
衡霞
时间
2008年06月09日至
2008年06月20日
实验题目学生成绩管理系统
一、实验目的:
(1)本课程设计为学生提供了一个既动手又动脑,自学,查资料,独立实践的机会。
将本学期课本上的理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对C语言系统编程有一个大致的了解。
(2)C语言的实践。
掌握C语言函数的定义方法,函数的声明及函数的调用过程。
掌握结构体类型变量的定义和使用,综合应用C语言的知识,实现一个完整的系统,提高编程能力,体会软件程序的开发过程。
二、实验内容:
(1)运用结构体数组编辑一个简单的学生成绩管理系统,使之能够完成学生成绩的创建、添加,查询、修改,删除、统计、排序等操作,并对文件进行保存和读取。
(2)执行编译操作,并根据提示调试此程序,排除所有的错误和警告。
直到编译成功为止。
(3)执行运行操作,逐一对每个模块进行调试。
直到全部程序运行成功为止。
(4)请老师检查,向老师演练此程序,并能回答老师提出的相关问题。
三、需求分析:
(1)根据学生成绩管理的需要,建立一个“学生信息管理系统”,系统具有输入、查询、修改、删除、统计、排序等基本功能;以方便对成绩的各项管理操作。
每一条记录包括一个学生的学号、姓名、性别,年龄,生日,成绩。
系统的各个功能模块都用函数的形式来实现;可以将学生成绩信息保存在文件中,并从文件中读取出来。
有一个清晰美观界面来调用各个功能。
本程序是由C语言的基本单位—函数来设计实现与其功能的多次使用函数调用以及函数的嵌套调用。
本程序分为7个模块,分别为创建学生资料;添加学生的资料;查询学生的成绩;修改学生的资料;删除学生的资料;统计学生的成绩;对学生的资料进行排序。
本程序可以处理多个学生的成绩的输入、添加、修改、排序等问题。
本程序的使用特别方便,每做完一个模块,下面都有提示信息。
使用环境为Win-Tc。
(2)创建该学生成绩管理系统目的就是能够对学生基本信息进行创建、追加、查询、修改、删除、统计、排序等功能,这样可以简化许多人工做起来很复杂的问题。
譬如:
“排序”,有了此程序只需将信息输入,计算机就可自动执行,省时、省力。
另外,它还可以重复使用,方便、快捷。
(3)该学生基本信息管理系统是在WIN-TC中文简体环境下运行。
该系统要测试的数据如下:
1.输入模块:
(输入5个学生的信息)
Numbernamesexagebirthdayscore
1am2060
2bm2070
3cf2080
2.追加模块:
(再加1个信息)
4df2090
3.查询模块:
(查询GULI的基本信息)
1(按学号即可查询)或a(按姓名也可查询)
4.修改模块:
(修改b的成绩)
(输入)1(修改number)(输入)2(修改name)(输入)3(修改sex)(输入)4(修改age)(输入)5(修改birthday)(输入)6(修改score)
5.删除模块:
(删除c的基本信息):
06(输入学号即可删除)
6.统计模块:
可统计各分数的人数。
7.排序模块:
按成绩进行排序。
四、概要设计
(1)主函数结构图:
(2)数据类型:
结构体类型
structdate/*结构体类型*/
{intyear;/*结构体变量,用来定义生日中的年*/
……};
structstudent_type/*结构体类型*/
{intnum;/*结构体变量,用来定义学号*/
charname[10];/*结构体数组,用来定义姓名*/
……
structdatebirth;/*结构体中的结构体*/
};
(3)模块功能详细说明:
1.录入模块:
此模块可以连续输入20个学生的资料,若学生数少于20,则可以在输入学号处输入0便可退出此模块,并把输入的信息保存到e:
\\score.txt文件中。
2.输出模块:
此模块分两页输出二十名同学的信息。
3.添加模块:
输入要添加的学生信息。
4.删除模块:
输入要删除的同学学号,然后删除。
5.查询模块:
此模块中使用者可以用三种方式查询学生成绩。
分别为
(1)按学号查询
(2)按姓名查询。
6.修改模块:
此模块中可以修改一门科的成绩也可以同时修改四门科的成绩。
修改完毕后输入y可以继续修改,输入n则退出此模块。
7.删除模块:
此模块中用到的删除原理为覆盖要删除的学生的资料。
过程简述,先输入要删除的学生的学号,系统找到此学生的信息后给它复制下一个学生的信息,给下一个学生的纪录复制下下一个学生的信息,一直到最后一个学生的信息复制给倒数第二个学生的信息为止。
然后文件中的学生总数减一。
8.统计模块:
统计一个分数的人数。
9.排序模块:
此模块用的方法为冒泡法。
五、详细设计及运行结果
(1)各个模块的程序流程图加模块:
添加模块:
删除模块:
排序模块:
(2)函数之间相互调用的图示:
(3)主要函数之间相互调用如下:
六、调试情况,设计技巧及体会
1.测试数据:
输入合法数据
输入非法数据
Numnamesexagebirthdayscore
1Am2050
2Bf2160
3Cm2070
程序显示出现错误,不能正常输入
2.调试情况:
(1).刚开始时,输入的成绩不能保存在文件中,所有数据都是一次性的。
后来知道是没在主程序中加保存模块,添加后就可以了。
但调试中又发现在添加模块中加入数据还是不能保存,在老师的帮助下发现问题出现在sum值上,我的添加后sum值不变,导致天价的数据不能保存。
我在程序中加了sum++;使每次添加数据后,sum也随之添加。
问题就解决了。
(2).删除模块是最头疼的,调试了n多次才成功,问题也出现在sum值上。
(3).其他问题也就在粗心或者简单的错误,印象不是很深刻。
3.自我评价:
在没有输入任何信息的情况下,不能执行查询、修改、删除、统计、排序功能。
本程序是由C语言的基本单位—函数来设计实现与其功能的多次使用函数调用以及函数的嵌套调用。
本程序分为8个模块,分别为
(1)录入学生资料。
((3)添加学生的资料(4)查询学生的成绩(5)修改学生的资料(6)删除学生的资料(7)统计学生的成绩(8)对学生的资料进行排序。
本程序可以处理多个学生的成绩的输入、添加、修改、排序等问题。
本程序的使用特别方便,每做完一个模块,下面都有提示信息。
使用环境为Win-Tc。
此程序的不足之处在学生基本信息方面还不够完善,另一方面就是在运行此程序时,需要执行操作的提示语不够具体和完善.
改进方法:
可以在学生基本信息的结构体中添加更多的学生信息,使得学生信息更加完善,此外,还可以在编程时加一些必要的提示语,用printf(“”);语句直接可输入.
4.感受:
经过两周的编程实习,并在后一段的报告总结,我对C语言这门科有新的认识。
要成功编一套程序,不仅需要有一个整体的思路,更重要的是对基础知识把握一定要扎实。
通过编程,对我发现了很多知识上的漏洞和不足,也得到了用诸多C语言解决实际问题的宝贵经验。
相信在以后的学习生活包括考试中一定会有很大帮助。
当然我的成绩也离不开老师的热心帮助,不管是粗心造成的错误还是正需本身的错误,老师都耐心给我讲解调试,知道成功运行。
我想没有老师的帮助我很难在短期内把程序设计做的这样好,在此特地感谢老师的帮助。
七、源程序清单:
#include"stdio.h"
#include"string.h"
#defineMAX20
#definePAGE10
#definePRINT1printf("\n")
#definePRINT2printf("numnamesexagebirthdayscore\n")
#definePRINT3printf("%d%s%c%d%d-%d-%d%d\n",student[i].num,student[i].name,student[i].sex,student[i].age,student[i].birth.year,student[i].birth.month,student[i].birth.date,student[i].score)
#definePRINT4printf("*******************************************************************\n")
intsum;
/*date*/
structdate
{intyear;
intmonth;
intdate;
};
/*studentstructtype*/
structstudent_type
{intnum;
charname[10];
intsex;
intage;
intscore;
structdatebirth;
}student[MAX];
/*stonemessage*/
save_message(intsum)
{
FILE*fp;
inti;
if((fp=fopen("e:
\\score.txt","wb"))==NULL)
{
printf("thefileyoureadiswrong1\n");
return;
}
for(i=0;iif(fwrite(&student[i],sizeof(structstudent_type),1,fp)!
=1)
printf("thefileyouwriteiswrong!
\n");
fclose(fp);
}
/*inputmessage*/
input_message()
{inti=0;
system("cls");
printf("\n\ninputstudentmessage\n");
PRINT1;
do
{printf("NO.%dstudent\n",i+1);
printf("\nstudentnumber(****):
");
scanf("%d",&student[i].num);
if(student[i].num==0)break;
printf("\nstudentname:
");
scanf("%s",&student[i].name);
printf("\nstudentsex(m/f):
");
getchar();
scanf("%c",&student[i].sex);
printf("\nstudentage:
");
scanf("%d",&student[i].age);
printf("\nstudentbirthday(yyyy-mm-dd):
");
scanf("%d-%d-%d",&student[i].birth.year,&student[i].birth.month,&student[i].birth.date);
printf("\nstudentsorce:
");
scanf("%d",&student[i].s