1、 《高级语言程序设计》 课程设计报告 姓 名: 熊丹 学 号: 11058224 专 业: 电子信息科学与技术 实 验 室: 2602 设计时间: 2012 年 07月 09日 —— 2012 年 07 月 11 日 评定成绩: 指导教师: 朱智林 目 录 一、 课程设计的目的 3
2、 二、 设计的内容与要求 3 三、 总体设计 3 四、 详细设计 4 五、 调试与测试 15 六、 课程设计的总结 17 在本次的课程设计中,我主要负责搜集相关资料,和罗丹丹一起修改了程序,调试了程序中的几处错误, 程序在运行过程中还是比较顺利的,并没有出现什么无法解决的的问题。 对于流程图我主要负责的有:输入数据函数、显示数据函数、插入数据函数、删除数据函数、查找数据函数。 此外负责了课程设计报告的撰写。 一、 课程设计的目的 1. 巩固和加深学生对C语言课程的基本知识的理解和掌握 2. 掌握C语言编程和程序调试的基本技能 3. 利用C语言进行基本的软
3、件设计 4. 掌握书写程序设计说明文档的能力 5. 提高运用C语言解决实际问题的能力 二.设计的内容与要求 学生纪录用文件存储,因而要提供文件的输入输出操作;要实现插入一个新的学生纪录,因而要提供文件的插入操作;要实现学生纪录得修改和删除,以及登记成绩和修改成绩,因而要提供文件纪录的修改和删除操作;要浏览全班成绩,故要提供显示操作;计算学生总成绩需要提供简单的统计操作;要按学号排序输出全班成绩表,因而要提供排序操作;另外要提供键盘式选择菜单以实现功能选择。 三. 总体设计 (1)整个成绩管理系统设计分为11个模块: 1.录入学员信息2.显示学员
4、信息3.成绩排序信息4.添加学员信息5.删除学员信息6.修改学员信息7.查询学员信息8.从文件读入学员信息9.删除文件中学员信息10.保存学员信息11.退出 (2)算法描诉(此程序中所包含的函数) 1.主函数main():定义学生结构体数组,调用录入,统计等函数对成绩表进行处理。 2.输入数据函数input():输入学生姓名,性别,学号,成绩1,成绩2,成绩3以及成绩的排序,平均值和总和。 3.排序函数sort():对总成绩进行排序,按有多到少的顺序。 4.显示数据函数display():显示各个学生的总成绩 5.插入数据函数insert():插入新的同学的成绩,需要输入新同学的姓
5、名,学好,性别。 6.删除数据函数del():由于各种原因,删除某些同学的成绩,这也需要这位同学的姓名,学好,性别。 7.平均值函数average():求各个同学总成绩的平均值。 8.查询数据函数find():查找某位同学的成绩,同样需要这位同学的姓名,学号,性别。 9.保存数据函数save():再一次打开界面是,仍有上次所找的讯息。 10.读出数据函数read():可以读到所有的信息。 11.删除文件函数del_file():删除某个文件的函数,这需要知道该文件的路径。 12.修改文件函数modify():修改文件中的信息,这同样需要文件的路径。 四.详细设计 数据
6、的组织描述(比如主要的变量类型,结构体等等),模块之间的参数设计(接口设计,模块的功能说明),系统控制流程图,各个模块的流程图,采用的算法 数据结构采用结构体,设计学生纪录结构体: struct student { int no; //学号 char name[20];//姓名 char sex[4];//性别 float score1;//成绩1 float score2;//成绩2 float score3;//成绩3 float sort;//排序成绩 float ave;//平均分 float sum;//总分 }; (1)主函
7、数输出提示菜单:插入学生纪录 修改学生纪录 删除学生纪录 登记成绩 修改成绩 浏览学生纪录 查看总成绩 查看成绩表 (2)数据插入模块 采用追加的方式把学生成绩信息写入学生成绩信息文件。 (3)数据修改模块 通过菜单选择修改学生纪录,打开该文件,从文件中读一条记录,判断是否要修改,如果是,则修改后重新写入文件;否则直接重新写入文件,读下一条记录。 (4)数据删除模块 通过菜单选择删除学生纪录,打开该文件,从文件中读一条记录,判断是否要删除,如果是,则舍弃;否则重新写入文件,读下一条记录。 (5)成绩登记模块 类似数据修改模块,只是修
8、改字段为各个科目的成绩。 (6)成绩修改模块 参考数据修改模块。 (7)数据浏览模块 读取学生成绩信息文件,显示输出。 (8)成绩统计模块 从学生成绩信息文件中读取一个学生纪录,计算该学生的总成绩(简单的成绩相加),输出,然后读取下一条纪录。 (9)成绩表查看模块 建立结构体数组 Struct { SR record; //学生纪录 Float total; //总成绩 }stu[N]; 从学生成绩信息文件中读取各个纪录,total中存放计算得到的总成绩。然后采用排序算法(冒泡、插入、选择等)对数组按照总成绩
9、进行排序。最后顺序输出。
int i=0
char ch
i=i+1
输入学
生学号
输入学
生姓名
输入学
生性别
输入学生
成绩1
输入学生
成绩2
input函数
输入学生
成绩3
是否继续 Y
输入
N
ch=getchar()
结束
sort函数
i=1
i<=n-1? ?
Min=s[i],j=i+1
j
10、mp
i=i+1
display函数
int I,char as
输出stu[i]学号姓名性别成绩1成绩2成绩3平均值
i=0
i 11、入学生成绩2
输入学生成绩3
insert函数
now_no=now_no+1
是否继续输入Y
N
ch=getch()
while(ch=’n’&&ch!=’N’) Y
结束
.del函数
unsigned long inum
int i=0
输入要删除学生的学号
输入
i 12、结束
i=0
输入成绩1,成绩2,成绩3
总成绩=成绩1+成绩2+成绩3
平均成绩=总成绩/3
i=i+1
i>n? 否
是
输出平均成绩
结束
average函数
find函数
int i
char str[20],as
输入要查询的学生姓名
gets[str]
i=0
i 13、s) Y
system(“cls”)
结束
save函数
i=0
输入要保存的文件路径
是否能打开文件?否
是
输入成绩1,成绩2,成绩3
总成绩=成绩1+成绩2+成绩3
平均成绩=总成绩/3
输出得到学生的基本信息:姓名,性别,学号,成绩1,成绩2,成绩3,平均成绩。
i=i+1
i>n? 否
是
保存成功,关闭文件
保存失败!
退出该功能,返回主菜单,继续选择
read函数
i=0
输入要读入的文件路径
是否能打 14、开文件?否
是
输入成绩1,成绩2,成绩3
总成绩=成绩1+成绩2+成绩3
平均成绩=总成绩/3
读出学生的基本信息:姓名,性别,学号,成绩1,成绩2,成绩3,平均成绩。
i=i+1
i>n? 否
是
保存的在文件中的所有信息已经读入,,关闭文件
找不到文件!
退出该功能,返回主菜单,继续选择
结束
删除文件函数流程图
打开文件
显示出来文件中的所用信息
保存的在文件中的所有信息已经删除
退出该功能,返回主菜单,继续选择。
按要求输入要删除的文件路径
15、
修改文件函数流程图
输入要修改的学生姓名
得到该生的学号,性别,成绩1,成绩2,成绩3.
按要求修改
得到新的学生信息
退出该功能,返回主菜单,继续选择。
五.调试与测试
调试
1.在编程当中,由于要输入大量的程序,所以经常出现很多不让人注意的小错误。
例如大小写 int写成Int(因为是在word中写的,会自动将字母大写)
2.关系运算符和赋值运算符总是用错,而这种错误也总是被忽略。
3.有时候会忘记加分号或是在不该加的地方加上了分号。不过这种情况还是比较容易被发现的。
4.有时候大括号也会忘加,尤其是在if语句 16、和for语句中。
5.最重要的是函数的应用,函数应该应用得当,否则程序会出现很大的错误,尤其是在如此庞大的程序中。
测试
开始界面
菜单
六.课程设计的总结
通过这个课程设计,我们更加牢固的掌握了书本上的知识。并对于以前不熟悉的知识有了更加深刻的了解。在完成此次课程设计的过程中,虽然有些疲劳和困倦,但带给我很多的收获。C语言已经学 17、了一个学期了,有许多知识都存在似懂非懂的现象,这种现象通过实际的上机操作,已经减少了许多。
很多程序理论上说得过去,但真正上机了却会发现行不通。所以说无论做什么事空有理论而不去实践都收获不到真正的果实。
说实话,我这个程序在所有程序当中算是简单的,所包含的知识也就是调用函数和结构体,当中穿插了一些排序算法,总体来说结构还是很清晰的,由各个模块小模块组成了一个管理系统。但过程中也是遇到了不少的麻烦,很多地方都想不到或是想不全的。所以说对待任何事情我们都不容小觑,一件自己没做过的事谁都不能说你就一定能做好了。
输入和调试程序的过程是相当枯燥的,但构思和完善程序的过程还是比较有趣的,无论怎样, 18、当你完成了一个程序时,还是相当有成就感的。
此次任务的完成,也体现出同学之间的团结精神。实践是检验真理的唯一标准。没有实践,就不会发现和深刻体会它的真实所在。只有通过检验的真理,在自己的心里,才会认可它的真实性。面向对象程序设计的完成,使我们懂得了真理的重要性,理论和实际的相结合,才能真正把握所学和所掌握的知识。同时培养了我们的团队精神,使我我们懂得了团队的重要性。在今后的学习工作中我们将会更好的发挥团队精神。
总的来说,C语言还是十分有趣的,可以通过人为的设计而让电脑来辅助性的做一些机械的东西。在今后的学习过程中,我也加更加认真地学习C语言,希望能在今后设计出一个属于自己的程序。
19、
参考书目:(五号,宋体加粗)
[1] 谭浩强,《C语言程序设计》(第四版)[M],清华大学出版社,2008年
(要求:五号字,宋体,单倍行距。按作者、书名、出版社、出版时间格式逐一列出,中间用逗号格开)
附录:
程序清单
#include 20、isplay();/*显示数据函数*/
void insert(); /*插入数据函数*/
void del(); /*删除数据函数*/
void average(); /*平均值函数*/
void find();/*查找数据函数*/
void save(); /*保存数据函数*/
void read(); /*读出数据函数*/
void del_file(); /*删除文件函数*/
void modify(); /*修改文件函数*/
int now_no=0;
struct student
{
int no;
char name 21、[20];
char sex[4];
float score1;
float score2;
float score3;
float sort;
float ave;
float sum;
};
struct student stu[MAX],*p;
void main()/*主函数*/
{
int as;
char ch;
do{
printf("\n\n\n\n\t\t___︵︵︿︿︿︿︿﹀︿﹀O(∩_∩)O﹀︿﹀︿︿︿︿︿︵︵___");
start: printf("\ 22、n\n\n\n\n\t\t ---★你好 欢迎使用学生成绩管理系统!★---\n");
printf(“\n\n\n\t\t\t\t编程者: 熊丹 罗丹丹\t\t\t\t\t\n\n”);
printf("\n\n\n\n\t\t ******************按任意键继续*******************");
ch=getch();
}
while(!ch);
system("cls");
/*一下为功能选择模块*/
do
{
printf(" 23、\n\t\t\t\t1.录入学员信息\n\t\t\t\t2.显示学员信息\n\t\t\t\t3.成绩排序信息\n\t\t\t\t4.添加学员信息\n\t\t\t\t5.删除学员信息\n\t\t\t\t6.修改学员信息\n\t\t\t\t7.查询学员信息\n\t\t\t\t8.从文件读入学员信息\n\t\t\t\t9.删除文件中学员信息\n\t\t\t\t10.保存学员信息\n\t\t\t\t11.退出\n");
printf("\t\t\t\t选择功能选项(输入所选功能前的数字):");
fflush(stdin);
/*可用可不用,用于清除缓存防止下次用s 24、canf输入是出现错误*/
scanf("%d",&as);
switch(as)
{
case 1:system("cls");
input();
break;
case 2:system("cls");
display();
break;
case 3:system("cls");
sort();
break; 25、
case 4:system("cls");
insert();
break;
case 5:system("cls");
del();
break;
case 6:system("cls");
modify();
break;
case 7:system("cls");
find();
26、 break;
case 8:system("cls");
read();
break;
case 9:system("cls");
del_file();
break;
case 10:system("cls");
save();
break;
case 11:system("exit");
27、 exit(0);
default:system("cls");
goto start;
}
}while(1);/*while(1),1表示真,所以while(1)表示永远循环下去, */
/*至此功能选择结束*/
}
void input()/*原始数据录入模块*/
{
int i=0;
char ch;
do
{
printf("\t\t\t\t1.录入学员信息\n输入第%d个学生的信息\n",i+1);
pri 28、ntf("\n输入学生学号:");
scanf("%u",&stu[i].no);
fflush(stdin);
printf("\n输入学生姓名:");
fflush(stdin);
gets(stu[i].name);
printf("\n输入学生性别:");
fflush(stdin);
gets(stu[i].sex);
printf("\n输入学生成绩1:");
sc 29、anf("%f",&stu[i].score1);
printf("\n输入学生成绩2:");
fflush(stdin);
scanf("%f",&stu[i].score2);
printf("\n输入学生成绩3:");
fflush(stdin);
scanf("%f",&stu[i].score3);
printf("\n\n");
i++;
now_no=i;
pri 30、ntf("是否继续输入?(Y/N)");
fflush(stdin);
ch=getch();
system("cls");
}
while(ch!='n'&&ch!='N');
system("cls");
}
void sort()/*排序数据函数*/
{
struct student temp;
int i,j;
average();
for(i=1;i 31、ow_no-i;j++)
{
if(stu[j-1].ave 32、tem("cls");
}
void sort1()/*排序数据函数*/
{
struct student temp;
int i,j;
for(i=1;i 33、[j-1];
stu[j-1]=temp;
}
}
}
}
void sort2()/*排序数据函数*/
{
struct student temp;
int i,j;
for(i=1;i 34、
{
temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}
}
}
}
void sort3()/*排序数据函数*/
{
struct student temp;
int i,j;
for(i=1;i 35、 for(j=1;j<=now_no-i;j++)
{
if(stu[j-1].score3 36、play()/*显示数据函数*/
{
int i;
char as;
average();
do
{
printf("\t\t\t班级学生信息列表\n");
printf("\t学号\t\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n");
for(i=0;i 37、i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave);
printf("\t\t按任意键返回主菜单.");
fflush(stdin);
as=getch();
}
while(!as);
system("cls");
}
void insert()/*插入数据函数*/
{
char ch;
do
{
printf("\n\t\t输入新插入学生信息\n");
printf 38、"\n输入学生学号:");
scanf("%u",&stu[now_no].no);
fflush(stdin);
printf("\n输入学生姓名:");
fflush(stdin);
gets(stu[now_no].name);
printf("\n输入学生性别:");
fflush(stdin);
gets(stu[now_no].sex);
printf("\n输入学生成绩1:");
39、fflush(stdin);
scanf("%f",&stu[now_no].score1);
printf("\n输入学生成绩2:");
fflush(stdin);
scanf("%f",&stu[now_no].score2);
printf("\n输入学生成绩3:");
fflush(stdin);
scanf("%f",&stu[now_no].score3);
printf("\n\n");
now_no 40、now_no+1;
sort();
printf("是否继续输入?(Y/N)");
fflush(stdin);
ch=getch();
system("cls");
}
while(ch!='n'&&ch!='N');
}
void del()/*删除数据函数*/
{unsigned long inum;
int i;
printf("输入要删除学生的学号:");
fflush(stdin);
scanf 41、"%u",&inum);
for(i=0;i 42、 break;
}
}
system("cls");
}
void save()/*保存数据函数*/
{
FILE *fp;
int i;
char filepath[20];
printf("输入要保存的文件路径:");
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失败!"); 43、
exit(0);
}
for(i=0;i 44、u[i].score2,stu[i].score3,stu[i].ave);
}
fclose(fp);
printf("学生信息已保存在%s中!\n",filepath);
system("pause");
system("cls");
}
void find()/*查询函数*/
{
int i;
char str[20],as;
do
{
printf("输入要查询的学生姓名:");
fflush(stdin);
45、 gets(str);
for(i=0;i 46、score3,stu[i].ave);
}
printf("\t\t按任意键返回主菜单.");
fflush(stdin);
as=getch();
}
while(!as);
system("cls");
}
void average()/*求平均数*/
{
int i;
for(i=0;i 47、].score3;
stu[i].ave=stu[i].sum/3;
}
}
void modify()/*修改数据函数*/
{
int i;
char str[20];
printf("输入要修改的学生姓名:");
fflush(stdin);
gets(str);
for(i=0;i 48、\n\t\t输入新插入学生信息\n");
printf("\n输入学生学号:");
fflush(stdin);
scanf("%u",&stu[i].no);
printf("\n输入学生性别:");
fflush(stdin);
gets(stu[i].sex);
printf("\n输入学生成绩1:");
fflush(stdin);
scanf("%f",&stu[i].score1);
49、printf("\n输入学生成绩2:");
fflush(stdin);
scanf("%f",&stu[i].score2);
printf("\n输入学生成绩3:");
fflush(stdin);
scanf("%f",&stu[i].score3);
printf("\n\n");
sort();
break;
}
}
system("cls");
}
void read()
{
50、 FILE *fp;
int i;
char filepath[20];
printf("输入要读入的文件路径:");
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
system("pause");
exit(0);
}
now_no=0;
for(i=0;i






