Y
i++
if(!
strcmp(stu[i].name,str))N
Y
输出stu[i]的学号姓名性别成绩1成绩2成绩3平均值
as=getch()
while(!
as)Y
system(“cls”)
结束
save函数
i=0
输入要保存的文件路径
是否能打开文件?
否
是
输入成绩1,成绩2,成绩3
总成绩=成绩1+成绩2+成绩3
平均成绩=总成绩/3
输出得到学生的基本信息:
姓名,性别,学号,成绩1,成绩2,成绩3,平均成绩。
i=i+1
i>n?
否
是
保存成功,关闭文件
保存失败!
退出该功能,返回主菜单,继续选择
删除文件函数流程图
修改文件函数流程图
五.调试与测试
调试
1.在编程当中,由于要输入大量的程序,所以经常出现很多不让人注意的小错误。
例如大小写int写成Int(因为是在word中写的,会自动将字母大写)
2.关系运算符和赋值运算符总是用错,而这种错误也总是被忽略。
3.有时候会忘记加分号或是在不该加的地方加上了分号。
不过这种情况还是比较容易被发现的。
4.有时候大括号也会忘加,尤其是在if语句和for语句中。
5.最重要的是函数的应用,函数应该应用得当,否则程序会出现很大的错误,尤其是在如此庞大的程序中。
测试
开始界面
菜单
六.课程设计的总结
通过这个课程设计,我们更加牢固的掌握了书本上的知识。
并对于以前不熟悉的知识有了更加深刻的了解。
在完成此次课程设计的过程中,虽然有些疲劳和困倦,但带给我很多的收获。
C语言已经学了一个学期了,有许多知识都存在似懂非懂的现象,这种现象通过实际的上机操作,已经减少了许多。
很多程序理论上说得过去,但真正上机了却会发现行不通。
所以说无论做什么事空有理论而不去实践都收获不到真正的果实。
说实话,我这个程序在所有程序当中算是简单的,所包含的知识也就是调用函数和结构体,当中穿插了一些排序算法,总体来说结构还是很清晰的,由各个模块小模块组成了一个管理系统。
但过程中也是遇到了不少的麻烦,很多地方都想不到或是想不全的。
所以说对待任何事情我们都不容小觑,一件自己没做过的事谁都不能说你就一定能做好了。
输入和调试程序的过程是相当枯燥的,但构思和完善程序的过程还是比较有趣的,无论怎样,当你完成了一个程序时,还是相当有成就感的。
此次任务的完成,也体现出同学之间的团结精神。
实践是检验真理的唯一标准。
没有实践,就不会发现和深刻体会它的真实所在。
只有通过检验的真理,在自己的心里,才会认可它的真实性。
面向对象程序设计的完成,使我们懂得了真理的重要性,理论和实际的相结合,才能真正把握所学和所掌握的知识。
同时培养了我们的团队精神,使我我们懂得了团队的重要性。
在今后的学习工作中我们将会更好的发挥团队精神。
总的来说,C语言还是十分有趣的,可以通过人为的设计而让电脑来辅助性的做一些机械的东西。
在今后的学习过程中,我也加更加认真地学习C语言,希望能在今后设计出一个属于自己的程序。
参考书目:
(五号,宋体加粗)
[1]谭浩强,《C语言程序设计》(第四版)[M],清华大学出版社,2008年
(要求:
五号字,宋体,单倍行距。
按作者、书名、出版社、出版时间格式逐一列出,中间用逗号格开)
附录:
程序清单
#include
#include/*清屏*/
#include/*显示目录*/
#include
#defineMAX1000
voidinput();/*输入数据函数*/
voidsort();/*排序数据函数*/
voiddisplay();/*显示数据函数*/
voidinsert();/*插入数据函数*/
voiddel();/*删除数据函数*/
voidaverage();/*平均值函数*/
voidfind();/*查找数据函数*/
voidsave();/*保存数据函数*/
voidread();/*读出数据函数*/
voiddel_file();/*删除文件函数*/
voidmodify();/*修改文件函数*/
intnow_no=0;
structstudent
{
intno;
charname[20];
charsex[4];
floatscore1;
floatscore2;
floatscore3;
floatsort;
floatave;
floatsum;
};
structstudentstu[MAX],*p;
voidmain()/*主函数*/
{
intas;
charch;
do{
printf("\n\n\n\n\t\t___︵︵︿︿︿︿︿﹀︿﹀O(∩_∩)O﹀︿﹀︿︿︿︿︿︵︵___");
start:
printf("\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("\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);
/*可用可不用,用于清除缓存防止下次用scanf输入是出现错误*/
scanf("%d",&as);
switch(as)
{
case1:
system("cls");
input();
break;
case2:
system("cls");
display();
break;
case3:
system("cls");
sort();
break;
case4:
system("cls");
insert();
break;
case5:
system("cls");
del();
break;
case6:
system("cls");
modify();
break;
case7:
system("cls");
find();
break;
case8:
system("cls");
read();
break;
case9:
system("cls");
del_file();
break;
case10:
system("cls");
save();
break;
case11:
system("exit");
exit(0);
default:
system("cls");
gotostart;
}
}while
(1);/*while
(1),1表示真,所以while
(1)表示永远循环下去,*/
/*至此功能选择结束*/
}
voidinput()/*原始数据录入模块*/
{
inti=0;
charch;
do
{
printf("\t\t\t\t1.录入学员信息\n输入第%d个学生的信息\n",i+1);
printf("\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:
");
scanf("%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;
printf("是否继续输入?
(Y/N)");
fflush(stdin);
ch=getch();
system("cls");
}
while(ch!
='n'&&ch!
='N');
system("cls");
}
voidsort()/*排序数据函数*/
{
structstudenttemp;
inti,j;
average();
for(i=1;i{
for(j=1;j<=now_no-i;j++)
{
if(stu[j-1].ave{
temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}
}
}
printf("排序以完成进入功能2可进行显示\n");
system("pause");
system("cls");
}
voidsort1()/*排序数据函数*/
{
structstudenttemp;
inti,j;
for(i=1;i{
for(j=1;j<=now_no-i;j++)
{
if(stu[j-1].score1{
temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}
}
}
}
voidsort2()/*排序数据函数*/
{
structstudenttemp;
inti,j;
for(i=1;i{
for(j=1;j<=now_no-i;j++)
{
if(stu[j-1].score2{
temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}
}
}
}
voidsort3()/*排序数据函数*/
{
structstudenttemp;
inti,j;
for(i=1;i{
for(j=1;j<=now_no-i;j++)
{
if(stu[j-1].score3{
temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}
}
}
}
voiddisplay()/*显示数据函数*/
{
inti;
charas;
average();
do
{
printf("\t\t\t班级学生信息列表\n");
printf("\t学号\t\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n");
for(i=0;iprintf("\t%u\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[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");
}
voidinsert()/*插入数据函数*/
{
charch;
do
{
printf("\n\t\t输入新插入学生信息\n");
printf("\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:
");
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=now_no+1;
sort();
printf("是否继续输入?
(Y/N)");
fflush(stdin);
ch=getch();
system("cls");
}
while(ch!
='n'&&ch!
='N');
}
voiddel()/*删除数据函数*/
{unsignedlonginum;
inti;
printf("输入要删除学生的学号:
");
fflush(stdin);
scanf("%u",&inum);
for(i=0;i{
if(stu[i].no==inum)
{
if(i==now_no)now_no-=1;
else
{
stu[i]=stu[now_no-1];
now_no-=1;
}
sort();
break;
}
}
system("cls");
}
voidsave()/*保存数据函数*/
{
FILE*fp;
inti;
charfilepath[20];
printf("输入要保存的文件路径:
");
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失败!
");
exit(0);
}
for(i=0;i{
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
fprintf(fp,"\t%u\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[