用C语言知识学习实现一个简单的学生成绩管理组织系统_第1页
用C语言知识学习实现一个简单的学生成绩管理组织系统_第2页
用C语言知识学习实现一个简单的学生成绩管理组织系统_第3页
用C语言知识学习实现一个简单的学生成绩管理组织系统_第4页
用C语言知识学习实现一个简单的学生成绩管理组织系统_第5页
已阅读5页,还剩21页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1引言2系统需求分析2.1项目背景分析2.2系统开发的目标与意义2.3项目需求分析3系统总体设计3.1功能模块分析3.2系统功能模块初始化准备3.2.1编译预处理3.2.2数据结构定义3.3具体模块处理函数的实现3.3.1菜单函数界面的设计3.3.2功能函数设计4系统测试与分析4.1运行工具介绍4.2系统操作结束语参考文献616181916用C语言实现一个简单的学生成绩管理系统摘要:伴随着现代社会的发展,网络技术的不断进步,越来越多的管理工作都从传统的现实社会中发展到了 网络上。高校是使用计算机技术最早的单位,学校的各项管理工作也从现实生活走上了网络空间。本文对学校的需求进行分析

2、,通过使用C语言设计并实现学生成绩的管理,力求尽量简洁实用地解决学校对学生成绩的管理和学生对成绩的查询问题。关键字:C语言成绩管理系统程序设计1引言在信息时代,计算机以其极高的运算速度、巨大的数据存储容量,以及能准确地进行各种算术运算和逻辑 运算的能力而成为现代化计算工具,并被广泛应用于社会各个领域。计算机技术的高速发展已被认为是人类 进入信息时代的标志。成绩管理系统是计算机技术和信息时代的产物,是信息处理或数据处理的核心。该系 统开发的总体任务是实现学生成绩管理的系统化、规范化、自动化,以达到提高学生成绩管理效率的目的。通过运用程序设计软件实现学生成绩管理中的多种功能,如学生成绩信息的添加、

3、删除、查询、修改、显示、排序等。该系统的设计充分利用计算机作为辅助工具,来实现学生考试成绩从传统的手工管理到计算机管理,并对提高管理效率和节约大量的人力、物力有一定的推动作用。因此,开发这种管理软件很必要,本文将在分析系统的应用价值以及开发工具的基础上,用C语言来开发成绩管理系统。2系统需求分析 2.1项目背景分析在我国,各大中小学校的各类信息管理系统并非一个新的课题,但也有的学校根本就没有任何信息管理 系统,特别是在西部贫困地区,学校的各类管理依然由手工操作来完成,这十分落后,效率极低,成本很大, 而且极异出错。随着社会的发展,信息化是社会进程的必然趋势,学校管理只有快,准,精才能发挥其价值

4、。22系统开发的目标与意义(1) 系统开发目标:本系统是将现代化的计算机技术和传统的教学、教务工作相结合,按照学院的工作流程设计完成的。为了使系统在学院的管理中发挥充分发挥其作用,实现工作过程的计算机化,提高工作效率 和工作质量,现提出如下的系统开发目标: 系统应具有实用性、可靠性和适用性。 对系统中数据库的信息进行有效处理,防止数据错乱。能够按照用户选择的不同的条件进行简单查询。 方便用户的操作,尽量减少用户的操作。(2) 系统开发的意义:在各大中小学校,用计算机管理学校的信息已经越来越普遍了。用计算机不但可以提高工作效率,而且还节省了许多人力物力财力。提高了学校的管理能力,为此,用计算机来

5、管理学校的 信息,是非常必要的。2.3项目需求分析学校工作流程分析:学校工作总体规划由教务人员在学生成绩管理系统中输入学生的基本信息并对其进行 维护管理,包括对信息的增加、修改及对信息的各项处理操作等。新的学年,教务人员首先编排班级,再对在校学生进行基本的信息录入,新生入学后由教务人员在管理 系统中完成新学生信息的维护。在每个学期开始,教务处根据班级的情况,以班为单位,为每个班级安排一 个班主任,并对各科老师进行安排。每举行一次考试后由任课老师对成绩进行录入。班主任对本班的成绩汇 总。并进行排名,并对本年级各科成绩及总成绩进行排名。教务处、班主任及任课老师跟据实际情况对录入 的成绩进行维护管理

6、,各位同学对以上录入的信息可以跟据自己的需要进行适当的查询。3系统总体设计3.1功能模块分析学生成绩管理系统是对学生基本信息及成绩的管理。开发工具主要采用 TurboC2.0,主要用于对学生的学号、姓名等自然信息以及各项学科成绩进行增加、删除、修改、查询及保存到文件等操作。系统给用户提供了一个简单的人机界面,使用户可以根据提示输入操作项,调用系统提供的管理功能。学生成绩管理系统处 理流程如图1。图1系统处理流程图主要功能设计描述如下:(1) 系统主控平台允许用户选择想要的操作,包括输入学生信息、显示学生信息、查询学生信息、修改学生信息、删除学生信息、计算成绩以及成绩的排序等。通过输入相应的序号

7、选择相应的操作。(2 )学生成绩信息用户根据提示输入学生的学号、姓名、以及三门课的成绩,如语文成绩、英语成绩、数学成绩等。输入完成一条学生记录,可根据提示信息继续输入下一条学生记录或者继续其他的操作。允许 输入多条学生的成绩信息记录。输入完的学生记录暂时保持在单链表中,等待下一步的操作。(3) 查询学生信息可以根据学号,姓名,总分从单链表中对学生所有的信息进行查询,如果没有查询到任何信息,系统会给出提示信息。(4 )修改学生信息首先提示用户输入要进行修改的操作的学号,如果单链表中有该学生的信息存在,则 提示用户输入要修改的学生的基本信息、各科成绩等,并将修改结果重新存储在单链表中。如果用户没有

8、找 到要修改的学生信息,系统将给出提示。(5)插入学生信息对已经建立好的信息若还需增加,则对信息进行插入。首先提示用户输入要进行插入的学号,然后在根据提示对用户信息进行完整输入。输入完成后系统将对其进行保存。(6 )删除学生信息首先提示用户输入要删除学生的学号,系统根据用户输入的信息在单链表中查找,如 果找到,直接删除该学生全部信息,如果没有找到,系统给出提示信息。(7) 计算各科成绩平均分该模块主要进行学生成绩的平均分计算,进入计算界面,系统自动对各科进行平均分计算。(8) 显示学生信息在选择了显示学生信息后,将刚输入的学生信息从单链表中调出来显示,如果没有数据,则提示无学生记录。(9) 学

9、生成绩排序成绩信息输入完整后,根据学生的总分对学生从小到大进行排序,在显示学生信息的时候可以看到学生在班级或校的排列名次。(10 )操作完成后对操作结果进行保存。运行完毕,退出系统。3.2系统功能模块初始化准备 3.2.1编译预处理“编译预处理”是 C编译系统的一个组成部分。在 C编译系统对程序进行通常的编译(包括词法和语法,然后将预处理的结果和源程序分析、代码生成、优化等)之前,先对程序中这些特殊命令进行“预处理”起再进行通常的编译处理,以得到目标代码。C语言提供的预处理功能主要有:(1 )宏定义;(2)文件包含;struct list *n ext; /*指向下一个学生的指针*/(3 )条

10、件编译。而本程序使用文件包含的预处理方式进行编译预处理:#i nclude<stdlib.h>/*标准库函数*/#in clude<stdio.h>/*标准输入、输出函数库*/#in clude<c oni o.h>/*屏幕操作函数*/#in clude<stri ng.h>/*字符串函数*/3.2.2数据结构定义学生成绩管理系统中的变量有学号,姓名,成绩等,这些数据类型各不相同,无法用简单数据类型来描 述,显然要定义结构体类型。由于学生人数很多,还需要定义数组或者链表。数组的特点是数据在内存中顺 序存放,长度必须事先指定,而学生的人数很难估计。

11、如果数组长度定的过大,会找出存储空间浪费,如果 过小,又无法满足需求。特别是进行插入,删除等操作时,代价较大而又容易出错。用链表来管理学生成绩 就显得比较妥当,它无需估计学生人数,进行插入删除等操作时代价较小。C语言中,说明和使用“结构体”之前必须先定义,在编写程序之前应该对学生基本信息进行定义,在这个程序中,使用 struct来定义结构体的类型为struct list,然后用它来定义变量,在定义结构体类型的时候定义一个next成员,该成员可以把学生结点进行链接。并且通过类型定义typedef将已有的各种类型名定 义成为新的类型标识符link,经类型定义后,link即可当做原类型名使用。具体定

12、义如下:struct listint ID; /* 学号 */charname256; /* 姓名 */int china; /*语文成绩*/int en glish; /*英语成绩*/int math; /*数学成绩*/float sum; /*总分*/int order; /* 排序 */自定义一个数据结构的结点*/;typ edef struct list no de; /*typedef node *link; /*定义结点为 link 结构 */ 3.3具体模块处理函数的实现3.3.1菜单函数界面的设计系统与用户交换的界面是通过菜单实现的,菜单按预定义格式显示主菜单界面,等待用户输入

13、0-8中的任一数据,系统会根据用户的输入调用相应的功能模块,实现用户所要求的操作。菜单界面设置为绿底蓝gotoxy ( x,y)固定光标的位(1)本程序的菜单界面主要使用屏幕操作函数编写,欢迎界面设置为白底红字,字,在欢迎界面中单击任意键进入菜单操作界面。整个系统都以光标定位函数 置,在对其进行输出,从而可以使显示的文字都出现在设定的窗口内,窗口的界面设置使用画图工具制作周围的边框,边框的设置具体如下:gotoxy(8,2); p utch(0xc9);/*输入左上角边框*/for(i=1;i<46;i+) pu tch(0xcd); /*输出上边框水平线*/putch(0xbb); /

14、*输出右上角边框*/for(i=3;i<23;i+) gotoxy(8,i); putch(0xba);/*输出左垂直线*/gotoxy(56,i); p utch(0xba); /*输出右垂直线*/gotoxy(8,23); p utch(0xc8); /*输出左下角边框*/for(i=1;i<46;i+) putch(0xcd); /*输出下边框水平线*/putch(0xbc); /*输出右下角边框*/win dow(9,3,55,22);/*制作显示菜单的窗口*/(2 )菜单是由menu函数实现,主要通过printf函数显示一些文本选项如:prin tf("<

15、0>exittheprograms");构建一个简单的字符界面,系统设置11个模块,用户通过输入关键字 key从0-10之间选择相应的操作,函数通过 switch调用各功能模块:switch(key) caseO:exit(O);case1:head=in it();break;case2:head=creat_list()break;case3:search_che ngji(head);break;case4:head=modify_che ngji(head,key);break;case5:head=delete_che ngji(head,key);break;cas

16、e6:head=in sert_che ngji(head,key);break;case7:average(head);break;case8:sort(head);break; case9:prin tf_list(head);break;case10:save(head);break;3.3.2功能函数设计(1)初始化链表init()就是将函数置空。学生成绩管理系统使用前要先将系统进行初始化操作,初始化函数(2) 创建学生信息函数创建学习信息函数由 creat_list函数实现,首先在创建链表之前先定义函数的基本信息并创建结构体指针 head, pointer和new,设学号,排名为整形

17、,名字设为字符型,语文,数学,英语成绩设为单精度类型,并对order和sum进行初始化,为head建立一个空结点,当 head不为空,输入用户信息,然后将新输入/*建立一个新/空结点*/的数据存于head指针。程序如下:head=(l in k)malloc(sizeof( no de);if(head=NULL) prin tf("memory allocate failure!' n"); exit(O);elseprintf("pl ease inp utID:");scan f("%d",&ID); head-

18、>ID=clDpnntf("pl ease input n ame:"); sca nf("%s",&cn ame);for(i=0;i<256;i+)head->n amei=c namei;printfC'pl ease input chin a:"); sca nf("%d", &cch in a);head->ch in a=cch ina;head->n ext=NULL; poin ter=head;如果输入正确既while为真的时候为news新建立一个结点,

19、提示用户如果要继续输入按1,输入0为退出。新输入的数据存储到news指针里,然后把head和news里面的数据一起放到 pointer,供下面操作时调用Pointer的数据。while(1)n ews=(l in k)malloc(sizeof( no de);prin tf("Are you continu e?");prin tf("If continue en ter'1', or return en ter'0'.");/*输入1为继续,0为退出*/scan f("%d",&clD);i

20、f(clD=0)break;n ews->n ext=NULL;p oi nter- >n ext =n ews;pointer=n ews;创建函数时只能创建一次,因为创建的链表暂时存于head指针里,如果再次创建,要先保存否则系统会自动将head指针进行初始化数据将被清空,存放新创建的记录。(3) 查询学生成绩函数查询函数search_chengji用来对学生的基本信息进行查询。首先使用光标定位函数gotoxy(x,y)和printf函数制作查询的子菜单,菜单包括:0.exit、1.search by ID 、2.search by name 、3.search by sum

21、。查询系统在调用函数时,调用自定义的辅助函数,按预定义格式显示查询成绩的子菜单界面。用户输入的格式 正确时使用while函数调用相应的功能函数。 按学号查询,输入 choose=1 , key1为要查询的学号,查找系统中学号为key1的学生是否存在,如果key1=ID 说明找到该学生,并标记 flag=1,中断查询显示查询的结果,否则继续查找直到找到为止。例如:if(choose=1)while (p oi nter!=NULL) if(p oi nter->ID-key1=O) flag=1;break;else pointer=pointer->n ext;按名字查询,输入 c

22、hoose=2 , sname否存在,如果 strcmp(pointer->name,sname)=0为要查询学生的名字,查找系统中名字为sname的学生是说明找到该学生,并标记 flag=1 ,中断查询显示查询的结果,否则继续向下查找直到找到名字为sname的学生。按学生的总成绩查询,输入choose=3 , score为要查找学生的总分,查找系统中总分为score的学生是否存在,女0果 if(pointer->sum-score=0)说明找到该学生,并标记flag=1 ,中断查询显示查询的结果;否则继续向下查找直到找到总分为score的学生;(4)修改学生成绩函数修改函数mod

23、ify_che ngji是对之前所输入的信息如果出现错误,或需要更改时使用。在编写之前先对函数进行定义,并把head的值赋给pointer ,然后用简单的printf函数编写修改菜单的基本界面以及修改的内容。用户根据提示输入要编辑的学号printfC'pl easeinputnu mberformodify:");sca nf("%d",&key num),系统根据学号查找该学生的基本信息,如果寻找到该生,系统提示要修改的具体内容,根据用户需要选择相应内容进行修改,此功能应用switch(choose)case1:执行语句;break ; 语句执行

24、。prin tf("e nter0 exit modefiyn");prin tf("e nterl modefiy n amen");prin tf("e nter2 modefiy china'n");prin tf("e nter3 modefiy en glishn");prin tf("e nter4 modefiy mathn");printfC'P lease En ter you choice:");sca nf("%d", &

25、;choose);信息输入完成后,按任意键系统自动保存到Pointer中,新信息将覆盖原有信息pointer->n amei=x namei,运行结束输出修改后的信息,返回到菜单。如果没有找到,系统将中止执行。while(1) if(p oi nter->ID=key3) if(choose=1) for(i=0;i<256;i+)pointer->n amei=x namei; break; else if(choose=2) poin ter->ch in a=xch in a;break; else if(choose=3) poin ter->e n

26、glish=xe nglish;break; else if(choose=4) poin ter->math=xmath;break;if(head!=NULL) printfC'Pree any key to save!");getch();prin tf_list(head);retur nhead;(6)删除学生信息函数删除函数delete_chengji在编写之前先定义2个结构体pointer和q , key2为要删除学生的学号,定poin ter!=key2poin ter= =key2 j=0义完成后对Pointer赋初值,用j记录pointer的位置,将

27、其设为整形并初始化。从链表中删去一个节点只要改变链接的关系即可,既修改结点指针成员的值。从链表中删除一个结点有 三种情况:删除链表的头结点,删除链表的中间结点,删除链表的尾节点。具体情况如图q=poin ter;j+;pointer=pointer->n ext;head=head->n ext; free( poin ter);poin ter= =key2j!=0图2删除算法当pointer的后面指针不为空:如果key2!=pointer->ID,则把 Pointer的值赋给q , pointer指向下一个记录继续寻找学号key2 。为头结点,则直接将结点删poin te

28、r首先应该让while( poi nter-> next!=NULL)if( poi nter->ID!=key2)q=poin ter; j+; pointer=pointer->n ext;else break;如果key2=pointer->ID时,判断j是否为0,如果j为0说明pointer除,head指向他的下一指针。if(p oi nter->ID=key2)if( j=0) 如果判断j!=0,则说明删除的结点不是头指针,结点位于中间,要删除结点q->next指向pointer->next,然后释放pointer。执行完后系统将自动停留几秒

29、然后返回主菜单。(7)插入学生成绩插入功能主要用于插入新的学生记录。在insert_chengji函数先定义2个结构体指针pointer和news,poin ter 为原指针,n ews为新插入指针。定义完成后对poi nter初始化,然后为n ews建立新结点n ews=(li nk)malloc(sizeof( no de),定义完成后为news输入新数据。插入的情况有两种既:如果Pointer为空则直接将 news的值赋给head输入系统并做为头指针;如果pointer 不为空则把news的值赋给pointer,运行如果正确且 head不为空时显示输入的数据信息。具体操作如图 point

30、er= =NULL pointer ! =NULLPn ews图3插入算法程序:if(head!=NULL) n ews=(li nk)malloc(sizeof( no de); /*如果head不为空,为news指针建立一个结点*/gotoxy(3,5); prin tf(" pl ease input stude nt ID:");scan f("%d", &n ews->ID);n ews*/while(1) if(p oi nter=NULL) n ews->n ext=head; head=n ews; break;/*如

31、果pointer 为空,news直接为头指针*/ n ews->n ext=pointer->n ext; pointer->n ext=n ews; break;/*如果key3等于ID直接插入if(poin ter->ID=key3)pointer=pointer->n ext;(8)计算各科成绩的平均分函数poi nter不为空,说明里面计算函数average求各科的平均分。首先为各科成绩进行初始化操作,如果有数据,在对其求各科的总成绩,最后在进行平均分求值。计算完成显示最后计算结果。具体程序如下:/*求总分*/while(1) ach in a=ach i

32、na+poin ter->ch ina;aen glish=ae nglish+poin ter->e nglish;amath=amath+poin ter->math;cn t=+c nt;if(pointer->n ext=NULL) break;pointer=pointer->n ext;/*求平均分*/avech in a=ach in a/c nt;avee nglish=ae nglish/c nt;avemath=amath/c nt;(9)学生成绩排序学生成绩排序函数sort用来对学生成绩进行按从大到小的顺序排序。处理过程:定义2个临时指针po

33、inter、max,max用来存放pointer的数据,而 pointer指向它的下一位。再定义一个单精度变量fen、整形变量k和字符型变量s256,分别存放成绩、学号、名字。定义完成后把先对 Pointer初始化,用 count来记录pointer的个数,然后从1开始对max和pointer进行比较。比较一次count力口 1,在把count 的值赋给pointer->order。排序完成后到显示界面查看。函数排序过程如下:for(i=1;i<co un t;i+)for(j=i+1;j<=co un t;j+) max=poin ter=head; max=pointer

34、->n ext;if(max->sum >poin ter->sum) /*用总分对成绩进行排名*/ fen=max->sum; max->sum=poin ter->sum; poin ter->sum=fen; /*总分的交换*/k=max->ID; max->ID=poin ter->ID; poin ter->ID=k; /*学号的交换*/fen=max->ch ina; max->ch ina=poin ter->ch ina; poin ter->ch in a=fe n; /*语文成绩

35、的交换*/fen=max->math; max->math=poin ter->math; poin ter->math=fe n; /*数学成绩的交换*/fen=max->e nglish;max->e nglish=poin ter->e nglish;poin ter->e nglish=fe n;/*英语成绩的交换*/strc py (s,max- >n ame);strc py( max- >n ame ,pointer->n ame);strc py(pointer->n ame,s);/*姓名的交换*/poi

36、nter=pointer->n ext;poin ter=head; coun t=0;while( poi nter!=NULL)/*赋排序的值*/ coun t+; poin ter->order=co unt;pointer=pointer->n ext;(10 )显示学生成绩函数显示函数prin tf_list主要显示学生的基本信息,每当操作完成的时候一般都会调用此函数进行预览。逐条显示学生的信息,直到运行结束,返回到prin tf_list函数运行时先输出表头,在单链表中反复调用函数,主菜单界面。具体显示函数如下:prin tf_list(l in khead) i

37、nt i=0;link poin ter;clrscr(); poin ter=head;gotoxy(2,4);printf("+-+-+n");/*显示表头*/gotoxy(2,5); prin tf("|ID |n ame|ch in a|e nglish|math|sum|order|n");gotoxy(2,6);printf("+n");while( poi nter!=NULL) i+;gotoxy(2,7); /* 如果pointer不为空,逐条显示内容 */prin tf("|%d|%s|%4.2f|%4.

38、2f|%4.2f|%4.2f|%d|n", poin ter->ID, poi nter- >n ame, poi nter->chi na,poin ter->e nglish, poin ter->math ,poin ter->su m,poin ter->order);pointer=pointer->n ext; gotoxy(2 8)卩int("*end*n");gotoxy(2,10);getch();retur nhead;clrscr();(11 )保存学生成绩函数保存函数save主要用来对学生成绩

39、运行后的结果进行保存。该函数在运行之前先要定义一个指向文件的指针fp,在定义一个移动指针 P和保存输出的文件名 outfile。用户根据系统的提示, 输入要保存的文件名和保存路径。系统以只写(” w ”)方式打开文件,如果移动指针P不为空则写入一条记录。运行结束返回主菜单。运行过程函数:prin tf("E nteroutfile name,forexa mp Iec:f1te.txt:n");scan f("%s",outfile);fp=fopen(o utfile,"w");while( p!=NULL) fwrite( p,

40、sizeof( no de),1,fp); p=p->n ext; printf(”savesuccess!n");fclose(fp);4系统测试与分析4.1运行工具介绍C语言运用的是TurboC程序应用软件中运行。TurboC是美国Borland公司的产品,Borland公司是家专门从事软件开发、研制的大公司。该公司相继推出了一套Turbo 系列软件,如TurboBASIC,Turbo Pascal,Turbo Prolog,这些软件很受用户欢迎。该公司在1987年首次推出TurboC1.0产品,其中使用了全然一新的集成开发环境,即使用了一系列下拉式菜单,将文本编辑、程序编译、连接以及程序运行一体化,大大方便了程序的开发。1988年,Borland 公司又推出TurboC1.5 版本,增加了图形库和文本窗口函数库等,而 TurboC2.0则是该公司1989年出版的。TurboC2.0在原来集成开发环境的基础上增加了查错功能并可以在Tiny模式下直接生成.COM(数据、代码、堆栈处在同一 64K内存中)文件。还可对数学协处理器 (支持8087/80287/80387等)进行仿真。4.2系统操作将编写好的程序在 TurboC的代码编辑器里进行编辑,语法检查正确后进行运行。系统进入运行后,首先

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论