学生成绩管理系统C程序设计报告.doc

上传人:wj 文档编号:1023107 上传时间:2023-04-30 格式:DOC 页数:25 大小:96KB
下载 相关 举报
学生成绩管理系统C程序设计报告.doc_第1页
第1页 / 共25页
学生成绩管理系统C程序设计报告.doc_第2页
第2页 / 共25页
学生成绩管理系统C程序设计报告.doc_第3页
第3页 / 共25页
学生成绩管理系统C程序设计报告.doc_第4页
第4页 / 共25页
学生成绩管理系统C程序设计报告.doc_第5页
第5页 / 共25页
学生成绩管理系统C程序设计报告.doc_第6页
第6页 / 共25页
学生成绩管理系统C程序设计报告.doc_第7页
第7页 / 共25页
学生成绩管理系统C程序设计报告.doc_第8页
第8页 / 共25页
学生成绩管理系统C程序设计报告.doc_第9页
第9页 / 共25页
学生成绩管理系统C程序设计报告.doc_第10页
第10页 / 共25页
学生成绩管理系统C程序设计报告.doc_第11页
第11页 / 共25页
学生成绩管理系统C程序设计报告.doc_第12页
第12页 / 共25页
学生成绩管理系统C程序设计报告.doc_第13页
第13页 / 共25页
学生成绩管理系统C程序设计报告.doc_第14页
第14页 / 共25页
学生成绩管理系统C程序设计报告.doc_第15页
第15页 / 共25页
学生成绩管理系统C程序设计报告.doc_第16页
第16页 / 共25页
学生成绩管理系统C程序设计报告.doc_第17页
第17页 / 共25页
学生成绩管理系统C程序设计报告.doc_第18页
第18页 / 共25页
学生成绩管理系统C程序设计报告.doc_第19页
第19页 / 共25页
学生成绩管理系统C程序设计报告.doc_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

学生成绩管理系统C程序设计报告.doc

《学生成绩管理系统C程序设计报告.doc》由会员分享,可在线阅读,更多相关《学生成绩管理系统C程序设计报告.doc(25页珍藏版)》请在冰点文库上搜索。

学生成绩管理系统C程序设计报告.doc

学生成绩管理系统C程序设计报告

一、设计要求:

1.要求利用C语言面向过程的编程思想来完成系统的设计;

2.突出C语言的函数特征,以多个函数实现每一个子功能;

3.画出功能模块图;

4.进行简单界面设计,能够实现友好的交互;

5.具有清晰的程序流程图和数据结构的详细定义;

6.熟练掌握C语言对文件的各种操作。

二、设计的作用、目的

通过程序设计,提高编程兴趣与编程水平。

设计一个学生成绩管理系统,上学期的本班的学习成绩进行管理,可以用数组设计这个程序,具有查询和检索功能,并且能够对指定文件操作,也可将多个文件组成一个文件。

通过对此程序的设计熟练掌握c语言。

三、课题分析

输入N个学生的学号和每个学生考试三门功课(数学、英语、计算机基础)的成绩。

编程计算出每个学生的总分和平均分,并按学生成绩优劣排序。

要求:

含有:

登记学生资料、删除学生资料、查询学生资料、修改学生资料、保存学生资料、退出系统等各项功能。

四、设计的具体实现

1、系统的组成模块结构及功能

(1)、当前学生信息:

通过结构体structstudent来保存学生的姓名,学号,性别,语文,数学,英语和计算机等等相关信息,并且通过cin函数来进行给当前学生输入初始信息.

具体使用的程序结构如下:

 printstart();

printc();

printe(s);

printstart();

printf("\n");

return;

}

s=s->next;

}

p=(Node*)malloc(sizeof(Node));

strcpy(p->data.num,num);

printf("请你输入姓名:

");

scanf("%s",p->data.name);

getchar();

printf("请你输入性别:

");

scanf("%s",p->data.sex);

getchar();

printf("请你输入c语言成绩:

");

scanf("%d",&p->data.cgrade);

getchar();

printf("请你输入数学成绩:

");

scanf("%d",&p->data.mgrade);

getchar();

printf("请你输入英语成绩:

");

scanf("%d",&p->data.egrade);

getchar();

p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;

p->data.ave=p->data.totle/3;

/*信息输入已经完成*/

(2)、学生成绩查询:

输入一个学号,在文件中查找此学生,若找到则输出此学生的全部信息和成绩;若找不到则输出查找失败的信息.同时也可以全部把各科的平均成绩,最高和最低分输出。

使用的函数结构:

voidQur(Linkl)/*查询学生*/

{

intsel;

charfindmess[20];

Node*p;

if(!

l->next)

{

printf("\n=====>提示:

没有资料可以查询!

\n");

return;

}

printf("\n=====>1按学号查找\n=====>2按姓名查找\n");

scanf("%d",&sel);

if(sel==1)/*学号*/

{

printf("请你输入要查找的学号:

");

scanf("%s",findmess);

p=Locate(l,findmess,"num");

if(p)

{

printf("\t\t\t\t查找结果\n");

(3)、学生资料删除:

输入要删除的学生学学号,若找到则根据提示进行删除;若找不到则提示没有资料删除。

使用的函数结构:

voidDel(Linkl)/*删除*/

{

intsel;

Node*p,*r;

charfindmess[20];

if(!

l->next)

{

printf("\n=====>提示:

没有资料可以删除!

\n");

return;

}

printf("\n=====>1按学号删除\n=====>2按姓名删除\n");

scanf("%d",&sel);

if(sel==1)

{

printf("请你输入要删除的学号:

");

scanf("%s",findmess);

p=Locate(l,findmess,"num");

if(p)

{

r=l;

while(r->next!

=p)

r=r->next;

r->next=p->next;

free(p);

printf("\n=====>提示:

该学生已经成功删除!

\n");

shoudsave=1;

}

(4)、学生资料修改:

输入要修改的学生号,若找到则输入新的学生信息,并提示资料修改成功;若找不到则输出查找失败的信息。

使用的程序结构:

voidModify(Linkl)

{

Node*p;

charfindmess[20];

if(!

l->next)

{

printf("\n=====>提示:

没有资料可以修改!

\n");

return;

}

printf("请你输入要修改的学生学号:

");

scanf("%s",findmess);

p=Locate(l,findmess,"num");

if(p)

{

printf("请你输入新学号(原来是%s):

",p->data.num);

scanf("%s",p->data.num);

printf("请你输入新姓名(原来是%s):

",p->data.name);

scanf("%s",p->data.name);

getchar();

printf("请你输入新性别(原来是%s):

",p->data.sex);

scanf("%s",p->data.sex);

printf("请你输入新的c语言成绩(原来是%d分):

",p->data.cgrade);

scanf("%d",&p->data.cgrade);

getchar();

printf("请你输入新的数学成绩(原来是%d分):

",p->data.mgrade);

scanf("%d",&p->data.mgrade);

getchar();

printf("请你输入新的英语成绩(原来是%d分):

",p->data.egrade);

scanf("%d",&p->data.egrade);

p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;

p->data.ave=p->data.totle/3;

printf("\n=====>提示:

资料修改成功!

\n");

(5)、学生成绩的排序,并统计单科的最高分。

(6)、退出系统。

2、系统程序流程图

退出系统

登记学生资料

修改学生资料

保存学生资料

删除学生资料

查询学生资料

开始

图1.1总流程图

开始

输入学生学号

是否存在

转为修改

新建

结束

图1.2登记学生资料

输入是否合法

按学号查询?

退出

输入学号

按姓名查询

显示结果

输入姓名

显示结果

开始

结束

图1.3查询学生资料

删除的是否合法

选择1?

输入删除学生学号

输入删除学生姓名

删除成功

退出

开始

结束

图1.4删除学生资料

输入是否存在

输入学生新信息

修改成功

退出

输入要修改的学生学号

开始

结束

图1.5修改学生资料

图1.6保存文件与退出系统

3、重要函数介绍

数据输入函数“cin()” 

   查看数据函数“lookdata()” 

 插入数据的函数“insert()”

  查看数据的函数“find()”

 更新数据的函数“update()” 

 保留数据函数“save()”

主函数main()

利用无限次循环for(;;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。

初始化函数STUDENT*init()

这是一个无参函数,里面只有一个语句,它的作用是使链表初始化,使head的值为NULL。

比如:

没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!

菜单选择函数intmenu_select();

这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。

等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!

输入记录函数STUDENT*create()

这是一个无参函数,用来执行第学生成绩记录的输入,当学生为0时停止输入,函数结束后,带回一个指向链表头的指针head。

算法:

先声明一个首节点head,并将head->next设为NULL。

每输入一个数据就声明一个新节点p,把p->next设为NULL,并且链接到之前列表的尾端。

在定义数据类型时,由于学生成绩管理信息需要由不同类型的数据反映出来。

如:

姓名、性别都需要用char型数据,而学号和成绩则需要用int型数据,并且每位同学的以上信息都需要一次性输入,所以采用结构体类型定义。

如:

typedefstructstudent/*定义结构体*/

{                  

charname[20] ; --------------------定义char型姓名

intnum[10];      --------------------定义int型学号

charsex     --------------------定义char型性别

            

int cgrade;--------------------定义int型英语成绩

intmgrade;--------------------定义int型数学成绩

integrade;--------------------定义int型计算机成绩

totle;

  structstudent*next;--------------------结构体指针

}stu;

五、程序运行背景:

VC++

VC++简介

现在说的VC就是指的VC++。

是指编程工具.vc++就和tc差不多,是一个调试,运行的环境,是微软开发的visual组件.

VC++是微软公司开发的一个IDE(集成开发环境),换句话说,就是使用c++的一个开发平台.有些软件就是这个编出来的...另外还有VB,VF.只是使用不同语言...但是,

vc++是Windows平台上的C++编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度比较大。

Windows下编程需要了解Windows的消息机制以及回调(callback)函数的原理;MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等;COM是代码共享的二进制标准,需要掌握其基本原理等等。

VC作为一个主流的开发平台一直深受编程爱好者的喜爱,但是很多人却对它的入门感到难于上青天,究其原因主要是大家对他错误的认识造成的,严格的来说VC++不是门语言,虽然它和C++之间有密切的关系,如果形象点比喻的话,可以C++看作为一种”工业标准”,而VC++则是某种操作系统平台下的”厂商标准”,而”厂商标准”是在遵循”工业标准”的前提下扩展而来的。

  VC++应用程序的开发主要有两种模式,一种是WINAPI方式,另一种则是MFC方式,传统的WINAPI开发方式比较繁琐,而MFC则是对WINAPI再次封装,所以MFC相对于WINAPI开发更具备效率优势。

六、调试问题及解决方法:

问题一、学生初始信息模块:

其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算计相关信息;可用函数cin(stu*p1)来实现此操作。

当正确输入存在的学生学号,系统进行判断时,提示不存在此学生。

解决办法及步骤:

1、一个个输出所有的学生的学号,检查文件中是否有此学生,发现有。

2、既然有此学生,那么检查循环判断是否有此学生的语句发现没有错

3、输出用于循环检查语句中的学生信息,发现乱码

4、仔细分析乱码的原因,最后发现是变量的类型错误,错将学生类型的结构体指针变量定义为了其他类型的指针变量。

问题二、查询模块:

可用stu*lookdata(stu*p1) 来实现。

找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。

当正确输入查找信息时,系统却不能够得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。

解决办法及步骤:

1、检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入查找信息看能否得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。

  2、检查当我们在输入查找信息时,看是否我们输入的信息有误,若是这样的话,我们应当仔细输入查找信息。

七、心得

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。

因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。

回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整半个月的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,链表……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。

   我做的是学生成绩管理系统,虽然是很简单的一个小的程序,但对我一个初学者来说却是一个很大的困难。

更加是第一次做课程设计,所以连续做了几天却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。

可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。

特别是结构体,指针的部分,几乎是一片空白。

不过经过几天的努力,大体上把课本上的知识点看了一遍,知识点也都基本是撑握了,所以一下一步就是开始正式的编程序了。

不过毕竟是个新手,还是不知如何下手,于是就在网上下了一篇类似的程序,经过仔细的研究,终于读懂了C语言编程的基本过程和方法。

经过一波三折,终于开始正式编程。

  编程是一件很枯燥很无聊的事情,但是出于完成作业,得到学分的压力,还必须强破自己坚持下去,按照老师所说的模块化思想,分部分的进行编写。

而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。

所以认真仔细就是非常重要的了。

开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。

又经过几天的努力,终于把程序完成了,尽管程序还是有很多错误和漏洞,不过还是很高兴的。

无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一次实践作业,自己进步的证明。

  通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。

   在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。

因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!

八、参考资料:

1.秦友淑、曹化工。

C语言程序设计教程。

华中科技大学出版社。

2.郭翠英。

C语言课程设计案例精编。

中国水利水电出版社。

3.汪晓平。

C语言高级实例解析。

清华大学出版社。

4.张翔。

C语言函数大全。

电子工业大学出版社。

5田淑清。

全国计算机等级考试二级教程.高等教育出版社。

附:

源程序及调试结果

源程序:

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

intshoudsave=0;/**/

structstudent

{

charnum[10];/*学号*/

charname[20];

charsex[4];

intcgrade;

intmgrade;

integrade;

inttotle;

intave;

charneartime[10];/*最近更新时间*/

};

typedefstructnode

{

structstudentdata;

structnode*next;

}Node,*Link;

voidmenu()

{

printf("********************************************************************************");

printf("\t1登记学生资料\t\t\t\t\t2删除学生资料\n");

printf("\t3查询学生资料\t\t\t\t\t4修改学生资料\n");

printf("\t5保存学生资料\t\t\t\t\t0退出系统\n");

printf("********************************************************************************\n");

}

voidprintstart()

{

printf("-----------------------------------------------------------------------\n");

}

voidWrong()

{

printf("\n=====>提示:

输入错误!

\n");

}

voidNofind()

{

printf("\n=====>提示:

没有找到该学生!

\n");

}

voidprintc()/*本函数用于输出中文*/

{

printf("学号\t姓名性别英语成绩数学成绩C语言成绩总分平均分\n");

}

voidprinte(Node*p)/*本函数用于输出英文*/

{

printf("%-12s%s\t%s\t%d\t%d\t%d\t%d\t%d\n",p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);

}

Node*Locate(Linkl,charfindmess[],charnameornum[])/*该函数用于定位连表中符合要求的接点,并返回该指针*/

{

Node*r;

if(strcmp(nameornum,"num")==0)/*按学号查询*/

{

r=l->next;

while(r!

=NULL)

{

if(strcmp(r->data.num,findmess)==0)

returnr;

r=r->next;

}

}

elseif(strcmp(nameornum,"name")==0)/*按姓名查询*/

{

r=l->next;

while(r!

=NULL)

{

if(strcmp(r->data.name,findmess)==0)

returnr;

r=r->next;

}

}

return0;

}

voidAdd(Linkl)/*增加学生*/

{

Node*p,*r,*s;

charnum[10];

r=l;

s=l->next;

while(r->next!

=NULL)

r=r->next;/*将指针置于最末尾*/

while

(1)

{

printf("请你输入学号(以'0'返回上一级菜单:

)");

scanf("%s",num);

if(strcmp(num,"0")==0)

break;

while(s)

{

if(strcmp(s->data.num,num)==0)

{

printf("=====>提示:

学号为'%s'的学生已经存在,若要修改请你选择'4修改'!

\n",num);

printstart();

printc();

printe(s);

printstart();

printf("\n");

return;

}

s=s->next;

}

p=(Node*)malloc(sizeof(Node));

strcpy(p->data.num,num);

printf("请你输入姓名:

");

scanf("%s",p->data.name);

getchar();

printf("请你输入性别:

");

scanf("%s",p->data.sex);

getchar();

printf("请你输入c语言成绩:

");

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2