C课程设计报告学生成绩管理系统.docx
《C课程设计报告学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《C课程设计报告学生成绩管理系统.docx(18页珍藏版)》请在冰点文库上搜索。
![C课程设计报告学生成绩管理系统.docx](https://file1.bingdoc.com/fileroot1/2023-4/30/ce9e7ccc-70df-43a5-b4cb-878960ab2fea/ce9e7ccc-70df-43a5-b4cb-878960ab2fea1.gif)
C课程设计报告学生成绩管理系统
学生成绩管理系统课程设计
一,需求分析:
晴天霹雳,在毫无准备的情况下,老师突然给我们布置了一个课程设计,而且时间只有一个星期,非常紧急.虽然题目可以自己决定,范围很乏,很多题目在脑里飞来飞去,但都是一闪而过,总是捕捉不到一个明确的课题,一开始自己的头脑里犹如一片空白,该选什么课题来做呢?
为了想这个问题,我绞尽了脑汁,最后,根据实用性,我决定设计一个学生成绩管理系统.由于自己也是一个学生,经常跟成绩打交道,以前的成绩自己搞得很乱,每次想找以前的成绩看一下,做个总结,以便制定新一个近期计划.可是以前的成绩都没有系统的管理,所以搞起来很麻烦,于是决定做一个学生成绩管理系统.这个系统实用性非常强,操作起来也非常简单,可以很容易的查找到你所要的信息.例如:
如果你要查看某个学生的成绩,只需要输入那个学生的姓名就可以了,系统会自动打印出该学生的有关信息,如学号,姓名,每一学科的成绩等,非常简洁,一目了然.
由于时间的紧迫,也由于这是自己第一次设计系统,没什么经验,基础知识也还不是很扎实,所以这个学生成绩管理系统还存在着一定的局限性,希望老师和同学们多多指正,也希望它能为大家带来方便!
二,概要设计:
1.数据结构设计
设计这个系统,我选择了用结构体来存放不同类型的数据.在这个过程当中,我有打算过用指针,但由于指针这章节非常复杂,而且刚讲不久,自己了解的还不够透切,而且用指针要非常的小心,不然很容易出错,对刚学不久的同学来说,要查出其中的错误,也不那么简单,所以为了尽量减少发生错误,我就没有将指针利用到其中.
2.系统的结构设计
3,算法设计说明
4,资料库里包含有的学生成绩信息:
{1,"li",85,86,87,81},
{2,"zhang",75,76,78,72},
{3,"wu",65,66,67,69},
{4,"chen",85,76,71,63},
{5,"dai",65,68,94,83},
{6,"hua",64,84,82,86},
{7,"zhuang",71,78,68,74},
{8,"ye",82,83.76,65},
{9,"zeng",91,83,86,78},
{10,"wang",68,88,76,95},
三,详细设计
1.建立主函数与界面
#include
#include
#include
voidinterface();
voidsearch();
voidinsert();
voiddayin();
voiddele();
voidpaixu();
voidxuehao();
voidzimu();
voidexit();
structstudent
{
intnum;
charname[20];
intcomputer;
intmath;
intenglish;
intphysics;
}stu[10]={{1,"li",85,86,87,81},
{2,"zhang",75,76,78,72},
{3,"wu",65,66,67,69},
{4,"chen",85,76,71,63},
{5,"dai",65,68,94,83},
{6,"hua",64,84,82,86},
{7,"zhuang",71,78,68,74},
{8,"ye",82,83.76,65},
{9,"zeng",91,83,86,78},
{10,"wang",68,88,76,95},
};
voidmain()
{
intj,i;
interface();
for(i=0;i<5;i++)
{
printf("请输入你要进行操作的编号,以回车键结束\n");
scanf("%d",&j);
switch(j)
{
case1:
search();
break;
case2:
insert();
break;
case3:
dele();
break;
case4:
paixu();
break;
case5:
exit(0);
default:
printf("error\n");
}
}
}
voidinterface()
{
printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf("\n");
printf("学生成绩管理系统\n");
printf("\n");
printf("设计者:
陈宗华\n");
printf("\n");
printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf("\n");
printf("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf("&&\n");
printf("&1,查询学生成绩;&\n");
printf("&&\n");
printf("&2,插入学生成绩;&\n");
printf("&&\n");
printf("&3,删除学生成绩;&\n");
printf("&&\n");
printf("&4,排序学生成绩;&\n");
printf("&&\n");
printf("&5,退出.&\n");
printf("&&\n");
printf("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
}
2,查找学生成绩资料
voidsearch()
{
inti;
charstu_name[20];
printf("请输入所要查询的学生的姓名\n");
scanf("%s",stu_name);
for(i=0;i<10;i++)
if(strcmp(stu_name,stu[i].name)==0)
printf("学号:
%d,姓名:
%s,计算机:
%d,数学:
%d,英语:
%d,物理:
%d\n",stu[i].num,stu[i].name,stu[i].computer,stu[i].math,stu[i].english,stu[i].physics);
}
3,插入新学生成绩
voidinsert()
{
intk;
printf("要进行插入操作请按1,要查看插入结果请按2\n");
scanf("%d",&k);
switch(k)
{case1:
tianjia();break;
case2:
dayin();break;
}
}
tianjia()
{
intn,z;
for(n=0;n<30;n++)
if(stu[n].num=='\0')
{printf("请输入新学生的学号:
\n");
scanf("%d",&stu[n].num);
printf("请输入新学生的姓名:
\n");
{scanf("%s",stu[n].name);}
printf("请输入新学生计算机的成绩:
\n");
scanf("%d",&stu[n].computer);
printf("请输入新学生数学的成绩:
\n");
scanf("%d",&stu[n].math);
printf("请输入新学生英语的成绩:
\n");
scanf("%d",&stu[n].english);
printf("请输入新学生物理的成绩:
\n");
scanf("%d",&stu[n].physics);
printf("恭喜插入成绩成功\n");
break;
}
insert();
}
voiddayin()
{
intz,i;
for(z=0;z<30;z++)
if(stu[z].num=='\0')
{
for(i=0;i{printf("学号:
%d,姓名:
%s,计算机:
%d,数学:
%d,英语:
%d,物理:
%d\n",stu[i].num,stu[i].name,stu[i].computer,stu[i].math,stu[i].english,stu[i].physics);
printf("\n");
}
break;
}
}
4,删除学生成绩
voiddele()
{
inti,j,k,n;
for(n=0;n<10;n++)
{
if(stu[n].num=='\0')
{n--;
break;
}
}
printf("请输入要删除的学号\n");
scanf("%d",&k);
if(k>n)
printf("输入错误\n");
else
{
for(j=0;j<9;j++)
{
if(stu[j].num==k)
{
for(i=j;i{if(i>k)
{stu[i].num=stu[i+1].num-1;}
strcpy(stu[i].name,stu[i+1].name);
stu[i].computer=stu[i+1].computer;
stu[i].math=stu[i+1].math;
stu[i].english=stu[i+1].english;
stu[i].physics=stu[i+1].physics;
}
}
}
printf("删除成功,请看删除结果\n");
for(i=0;iprintf("%d,%s,%d,%d,%d,%d\n",stu[i].num,stu[i].name,stu[i].computer,stu[i].math,stu[i].english,stu[i].physics);
}
}
5,排序学生成绩
voidpaixu()
{
{
inti,m;
for(i=0;i<2;i++)
{
printf("按学号排序请按1,按字母排序请按2\n");
scanf("%d",&m);
switch(m)
{
case1:
xuehao();break;
case2:
zimu();break;
}
}
}
}
voidxuehao()
{
inti,j,t;
charm[20];
for(j=0;j<=10;j++)
for(i=0;i<9;i++)
if(stu[i].num>stu[i+1].num)
{
t=stu[i].num;
stu[i].num=stu[i+1].num;
stu[i+1].num=t;
strcpy(m,stu[i].name);
strcpy(stu[i].name,stu[i+1].name);
strcpy(stu[i+1].name,m);
t=stu[i].computer;
stu[i].computer=stu[i+1].computer;
stu[i+1].computer=t;
t=stu[i].math;
stu[i].math=stu[i+1].math;
stu[i+1].math=t;
t=stu[i].english;
stu[i].english=stu[i+1].english;
stu[i+1].english=t;
t=stu[i].physics;
stu[i].physics=stu[i+1].physics;
stu[i+1].physics=t;
}
for(i=0;i<10;i++)
printf("%d,%s,%d,%d,%d,%d\n",stu[i].num,stu[i].name,stu[i].computer,stu[i].math,stu[i].english,stu[i].physics);
}
voidzimu()
{
inti,j,t;
charm[20];
for(j=0;j<=10;j++)
for(i=0;i<9;i++)
{
if(strcmp(stu[i].name,stu[i+1].name)>0)
{
t=stu[i].num;
stu[i].num=stu[i+1].num;
stu[i+1].num=t;
strcpy(m,stu[i].name);
strcpy(stu[i].name,stu[i+1].name);
strcpy(stu[i+1].name,m);
t=stu[i].computer;
stu[i].computer=stu[i+1].computer;
stu[i+1].computer=t;
t=stu[i].math;
stu[i].math=stu[i+1].math;
stu[i+1].math=t;
t=stu[i].english;
stu[i].english=stu[i+1].english;
stu[i+1].english=t;
t=stu[i].physics;
stu[i].physics=stu[i+1].physics;
stu[i+1].physics=t;
}
}
for(i=0;i<10;i++)
printf("%s,%d,%d,%d,%d,%d\n",stu[i].name,stu[i].num,stu[i].computer,stu[i].math,stu[i].english,stu[i].physics);
}
四,调试分析
1,当系统无误,顺利进入学生成绩管理系统时,会看到一个菜单界
菜单界面的最下方有提示操作(请输入你要进行操作的编号,以回车键结束),告诉你如何使用该系统!
该系统操作非常简单,你所要进行的每一步操作它都会提示你该如何做,就算你是第一次接触该系统,你也可以很顺利地利用它完成你所要做的事!
例如你按1,过程及结果如下:
根据提示按你所要进行操作的编号(按1),然后它会继续提示你(输入所要查询的学生的姓名),当你输入(wang)完毕后,系统会自动把你要查询的那个学生(wang)的资料打印出来,你可以很清楚的看到该学生(wang)的相关资料.
2,当你觉得当前学生资料不够完善时,可以按2为它添加新的资料;过程如下:
当你插入新生成绩成功时,系统会有提示(恭喜插入成绩成功);这时,如果你想查看插入结果,可以按2;结果如下:
这时,系统会将资料库里面的所有资料跟你刚才插入进去的新资料一起打印出来;但此时会发现系统有一个缺点,就是我刚才插入进去的新学生成绩信息没有继续保存下来,此时要是我按1执行查看的时候,输入刚才所输入的新学生名字luo,系统不输出luo的信息,这是它的一个不足之处,以后有时间我会将其完善的.
该系统不但可以添加新资料,也可以删除你觉得没用的资料,其操作是按功能选择键3,然后按提示一步一步操作,过程如下:
删除之前
可以看到,删除之后原来学号5之后的学生成绩资料已经向前移动一个位置,自动把原来学号5的位置填补上.
当你想为了工作方便一点,要把学生的资料按一定的要求排序的话,可以按4,过程及结果如下:
上面左边的是按学号排序的,右边是按字母排序的,用户可以按照自己的要求选择不同的功能来实现自己的目的.
五,课程设计总结
紧张而又充实的一个星期即将过去,在这一个星期里,通过做课程设计,自己的感触甚多,收获也很多.发现自己对课本知识的认知提升到了一个新的层次,就好像站在一个山峰上俯瞰,可以比较系统地,全面的理解课本上的内容.过去觉得理解得模模糊糊的知识点,现在基本上都可以掌握了.这又一次验证了实践能够反作用于认识,只有自己真真正正地动手去做了,将自己学到的,或者是只学到一半半的课本知识应用到实际中去,当遇到问题时,再细心地,耐心地慢慢去推敲,去查找错误,看看是哪一步错了,错在哪里.找出问题后再翻翻课本,看课本还解决不了问题就问同学问老师,直到解决问题为止.这时,当你回头看时,你会突然发现自己已经学到了很多东西,有课本上之前不明白的知识点,也有在程序设计过程中遇到问题时该如何去面对,如何去解决的方法.其实,我发现导致程序出现问题错误或运行不了,很大部分原因归结于对课本知识点的不熟悉或理解错误.这些要是不亲自动手去做,光看课本是没有多大作用的.当我通过自己的努力或老师跟同学的帮助下,解决了一个问题,才发现原来这个知识点应该这样用.
通过这次课程设计,我体会最深的就是,不能只看课本,要经常动手去练习一下,看课本加上做练习,效果非常好,可以做到事半功倍.这样知识点记得会比较牢固一些.通过练习还可以培养自己的设计思维,让自己以后设计程序时思维会活跃一些,转得快一些.
在这课程设计接近尾声时,我总结了一下自己在设计时经常犯的一些错误,诸如for循环语句,括号里面的条件之间应该是用分号分开的,而我经常会忘记,都是用逗号来分开的,这导致程序运行不了,自己检查了一遍又一遍还是发现不了问题的所在,后来叫同学帮忙看了一下,才发现问题出现在哪里.就这么简单的,基本的一个错误,常常会令自己花上半个小时或者更长的时间,都无法找出来.类似的错误还有,就是经常会在语句后面忘了加上分号.但现在这些问题不会再出现了,经过这次的实践,我懂得了很多,很多语句用起来都比较熟悉了,更重要的是积累了一些经验,将来可以少走些弯路,不再像刚开始的时候,像一个迷路羔羊一样到处乱窜.
虽然这次的课程设计即将结束,设计的系统也可以运行了,但我知道它现在还只是个雏形,还不够完善,还存在不足之处,还需要我的进一步改善.今后我会更加努力,学习更多的知识来完善它,把它的功能做大,做强!