C语言课程设计学生成绩管理系统_第1页
C语言课程设计学生成绩管理系统_第2页
C语言课程设计学生成绩管理系统_第3页
C语言课程设计学生成绩管理系统_第4页
C语言课程设计学生成绩管理系统_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE1学生成绩管理系统前言《C语言程序设计》课程设计是对学生的一种全面综合训练,它包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,课程设计的课题比平时的习题复杂得多,也更接近实际。课程设计着眼于理论与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养程序设计工作所需要的知识综合能力和动手能力;另一方面,能使书上的知识变“活”,使学生更好地深化理解和灵活掌握教学内容。为了达到上述目的,本课程设计安排了四个设计课题,训练重点在于基本的程序设计方法和分析问题的能力,而不强调面面俱到。学生选其中一题进行设计,设计完毕写出课程设计报告,用A4纸打印成册;并将课程设计报告与源程序存盘。学习委员将课程设计报告与磁盘(缺一不可)收齐后交指导老师。一、目的全面熟悉、掌握C语言基本知识,掌握C程序设计中的顺序、分支、循环三种结构及数组、函数和C语言基本图形编程等方法,把编程和实际结合起来,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为以后在专业课程中应用计算机系统解决计算、分析、实验和设计等学习环节打下较扎实的基础。二、设计要求掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的问题,为将来编写软件积累一些典型的案例处理经验。(1)按学号顺序选课题号,并在规定的时间内独自完成相关课题的C源程序编写、调整和运行。源程序及编译生成各文件均保存在软盘中;(2)按本任务书的要求,按附录的要求编写《课程设计报告》(Word文档格式)。并用A4的复印纸打印并装订。 需求分析一、编写目的随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生成绩信息进行管理,具有手工管理所无法比拟的优点。例如,检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生档案管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。因此,开发学生成绩管理系统很有必要。本程序可以在短时间内得到总成绩并且得到相应的排名,节省时间,功能强大。在多人多课考试时很有用,只要考试成绩出来,输入电脑就可以在短时间内得到总成绩,并知道了某学生在班级的排名,班级的最高分与最底分的情况以及某门课程的平均分,提高了工作效率。二、程序的功能

(1)增加学生记录(2)查询学生记录(3)修改学生记录(4)学生记录排序(5)统计信息(6)打开文件(7)保存记录(8)显示记录(9)退出系统

三、输入输出要求程序的输入模块、增加模块、查询模块等有学生信息录入的地方必须严格按照相应格式进行输入。比如姓名字段不能出现空格等,否则就会出现死循环。输入性别时要输入数字1/0,不能够输入文字信息;输入各科成绩时,需要用空格间断,不能连续输入各科成绩的分数,如:正确输入:88888888,错误输入:88888888;其它输入按照提示进行。性别显示为男/女,而不是数字1/0;在修改学生记录,输入保存文件名后,会输出修改的数据以及其它未修改的数据。概要设计一、程序功能分析程序主要功能:(1)增加学生记录增加学生的姓名,学号,性别,各科目的成绩,可在保存文件中的学生记录后追加新记录;如果没有记录存在,则给出提示信息,先增加学生记录,保存至保存文件;其中,数据类型的定义如下:姓名char,学号char,性别char,成绩float;(2)查询学生记录打开保存文件后,可以按“学号”、“姓名”或“名次”方式查询记录;给出查询学生记录的信息;如果查询的记录不存在,输出提示信息;(3)修改学生记录打开保存文件,由用户输入密码后,密码不正确则无权修改,正确则可以按“学号”、“姓名”或“名次”查询记录,按照提示信息进行修改;给出将被修改的记录信息,确认后进行修改,然后,输入保存文件名;如果没找到需要修改的记录,给出提示信息;如果是空表,应给出提示信息并返回主菜单;

(4)学生记录排序打开保存文件,可以按“学号”、“姓名”或“名次”查询记录,进行“升序”,“降序”的排序;如果查询的记录不存在,输出提示信息;(5)统计信息打开保存文件,可以进行相应科目的成绩统计,得到该科目成绩最高分,最低分同学的信息及平均分;如果查询的记录不存在,输出提示信息;(6)打开文件打开已有的保存文件,进行其他操作;如果文件不存在,输出提示信息;(7)保存文件保存已完成或修改的文件;除了退出系统的程序,其它程序的运行都需要从保存文件中调用;(8)显示文件显示保存文件;如果查询的记录不存在,输出提示信息;(9)退出系统完成相关程序后,按照提示;退出系统。二、层次结构图根据程序设计要求,可将学生成绩管理系统设计成的层次结构,如图所示:学生成绩学生成绩管理系统增加学生记录增加学生记录查询学生记录修改学生记录学生记录排序学号查询名次查询姓名查询统计信息统计信息打开文件显示文件保存文件退出系统语文成绩统计数学成绩统计英语成绩统计政治成绩统计学生成绩管理系统层次结构图(图3.1)从层次结构图可以看出,本系统的各个功能模块,具有很好的通用性和移植性。详细设计一、程序流程图及相关程序解析程序流程图是根据解题分析所绘制的程序执行流程图。根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。程序流程图更加使设计人员或用户能够明白程序运行的过程,方便查找,修改程序中错误的功能模块。以下程序流程图包含学生成绩管理系统总流程图(图4.1),增加学生记录流程图(图4.2),查询学生记录流程图(图4.3),修改学生纪录流程图(图4.4),学生记录排序流程图(图4.5),保存文件流程图(图4.6),显示文件流程图(图4.7)。各功能模块程序流程图:(1)学生成绩管理系统总流程图(图4.1)NY进行查询,修改,统计等操作进入程序进行查询,修改,统计等操作进入程序打开保存文件增加学生纪录保存学生纪录系统启动退出系统退出系统(2)增加学生记录流程图(图4.2)(数字表示输入的选项)NYYYNNYes1入口有空间?能打开?结束输入待追加学生信息读取文件申请空间写入文件操作能写入?写入文件(3)查询学生记录流程图(图4.3)YNN22入口输入信息指针为空是目标记录输入记录信息到表尾?结束(4)修改学生记录流程图(图4.4)YYNYN入口不是目标且P!=NULL输入要修改的学号姓名链表中有此结点?结束输出未找到的信息输出找到的学生信息修改该学生信息跳到下一结点3(5)学生记录排序流程图(图4.5)44入口打开文件原表不为空总分比较排序点值小排序点值大表指针后移排在首位插入中间位置到表尾?记录名次结束NYNYNY(6)保存文件流程图(图4.6)NNYNY6入口能打开?P不为空?结束输入文件名指向文件P写入记录关闭文件(7)显示文件流程图(图4.7)YN88入口结束找到文件显示学生信息P为空?二、程序解析1.数据结构链表是线形表的一种,线形表分为顺序存储结构和链式存储结构。线形表的顺序存储结构的特点是逻辑关系上相邻的两个元素物理位置上也相邻,因此可以随机存取表中任一元素。链式存储结构的特点是用一组任意的存储单元存储线形表的数据元素。链表的最大的优点是对表的添加、删除、查找、排序等操作比较方便,因此采用链表来存储学生相关信息。且对结点的定义如下:typedefstructmessage_student/*结构体定义*/{charnumber[6];charname[20];charsex[4];floatsubject[numsubs];floatscore;floataverage;intindex;}studen2查询学生记录类C码算法:函数说明:#include"stdio.h"intfindrecord(studentstud[])/*查找信息*/定义相关变量:charstr[2];inti,num;如果没有保存文件:if(numstus==0)输出没有可被查找的记录:printf("没有可被查找的记录\n");返回函数:return-1;否则,输出“按何种方式查询”:printf("以何种方式查找?\n1.学号\t2.姓名\t3.名次\n");选择1,按学号查找:if(str[0]=='1')/*按学号查找*/输出“请输入学号”:printf("请输入学号:");进行for和if语句的循环,进行选择:for(i=0;i<=numstus;i++)if(strcmp(str,stud[i].number)==0)若找到符合要求的信息,则输出:display(stud,i,i);否则退出,执行其它程序:break;按姓名,名次查询的程序与其相同,不再累赘;如果输入的条件都不符合;if(i>numstus)输出“没有查找所要的信息”printf("没有查找所要的信息。\n");返回函数:return-1;返回主函数:returni;调试分析及设计体会一、实验结果经过老师指导和同学的帮助,我们终于得到了正确的实验结果,以下为学生成绩管理系统运行的相关结果。(1)开始界面(图5.1)(2)增加学生纪录界面(图5.2)(3)查询学生纪录界面(图5.3)(4)修改学生纪录界面(图5.4)(5)查询学生纪录界面(图5.5)(6)统计信息界面(图5.6)(7)显示纪录界面(图5.7)(8)保存文件界面(图5.8)(9)退出系统界面(图5.9)二、错误结果分析在实验过程中,我们遇到许多的问题,但是在老师的指导下和同组成员的交流中得到了解决。其中,主要的错误有主函数mian()重复,缺少分号等。主函数main()重复(图5.10)缺少分号(图5.11)分号是C语句中不可缺少的一部分,语句末尾必须有分号。缺少或多加分号都会引起错误,下面是对这两种情况的简单分析:(a)忘记加分号:

a=1

b=2

编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下,上一行是否漏掉了分号。

{z=x+y;

t=z/100;

printf("%f",t);

}

对于复合语句来说,最后一个语句中最后的分号不能忽略不写。

(b)多加分号:

对于一个复合语句,如:

{z=x+y;

t=z/100;

printf("%f",t);

};

复合语句的花括号后不应再加分号,否则将会画蛇添足。

以上这些错误是由于对于课本知识的不熟悉,本来不应该出现的错误,却多次出现,说明对于课本知识不能够灵活的运用。三、心得体会C语言是一门计算机基础语言,通过这一学期的学习,对于它的一些特点和算法有了一定程度的了解,并能够做一些中等的题目,但并没有完全掌握。这周的课程设计正是让我们巩固以前的知识并在此基础上能够有所突破的好时机。C语言程序设计是过程性程序设计语言,它的发展贯穿了计算机发展的整个历程,它蕴含了程序设计的基本思想,囊括了程序设计的基本概念,所以它是理工科高等院校的一门基础课程。

在C语言程序设计过程中,了解了TurboC与VisualC++在使用过程中的不同之处。学习C语言,必需注意每一个细节,书上的例子代码一定要自己亲自敲一遍,编译执行输出都跟书上说的一致才能算是学完了一个例子,如果不一致,就要仔细找原因,这样才能掌握其中的知识。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,C语言编程已经成为当今计算机应用中空前活跃的领域,在生活中可以说是无处不在。因此作为二十一世纪的大学生来说掌握C语言的编译与开发技术是十分重要的。在同组人员的共同努力下,经过几天的奋斗,我们总算将此程序设计出来。尽管不是自己独立完成,但仍然很高兴,因为在设计的过程中,让我了解到要设计一个大型程序,查找资料,相互合作是至关重要的,在他人的基础上,再根据自己所学进行修改与调试,最后设计出自己想要的程序。回顾起此次C语言程序课程设计,至今我仍感慨颇多,从理论到实践,在编程的那些日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。使用手册使用手册简介:本程序用VisualC++6.0编写,在TurboC运行中会出现相关的错误提示,这是由于系统的兼容性问题。main()函数是主函数,程序从它开始执行,也由它结束,通过主函数,可以调用其他各个函数对数据进行处理。本程序使用switic语句实现功能的选择。主函数main包含了各个模块也是程序的入口,程序从它开始执行。主函数通过一个switch语句来选择调用各个模块来实现每个模块函数的功能从而实现对学生成绩的有关处,其中:先用宏定义定义了学生的人数,课程数目以及一个二维数组来存放学生的个人信息。addrecord()为增加学生信息函数,可按提示输入新学生的基本信息及需要增加学生信息的数目。findrecord()为查询学生信息函数,让用户选择按姓名还是学号,名次来找到要查询信息的学生。amendrecord()为修改学生信息函数,用户先输入密码,再进行学生基本信息的修改。sort()为学生信息排序函数,按各门成绩来排序的函数并输出排序结果。本函数实现按总分排序的功能。课程设计要求按照平均分排序,容易看到,对与本程序来说,每个学生的总成绩=平均成绩×4,按总成绩排序和按平均分排序结果一致,由于计算平均成绩会多出一步运算,所以程序用总分代替平均分排序。在算法上,选择直接插入算法,即:每步将一个待排序的按其排序码值的大小插到前面已经排好序的表中,直到全部插入为止。先将链表的头结点看作是已经排好序的结点,然后取下一个结点作为待排序的结点,插入到已排好序的表中。其具体做法为:(1).先将原表头结点作为新排好序表的头结点h,原表下一个结点作为原表头结点h1。(2).原表头结点为待排序结点,将其总分与新表结点的总分进行比较,如果待排序结点总分大,则插在表头,否则插入在其后,原表头结点后移一位。(3).重复第二步,即将原表头结点的总分和新表结点的总分进行比较,如果待排序结点总分小,则移动新表指针,直到找到合适的位置将其插入。当原表为空时,所有结点排序完毕。排好序后,系统自动将名次数据写入结点数据域中。statistic()为统计信息函数,用来输出单科成绩的最高分,最低分的学生的基本信息及平均分。openfile()为打开文件函数,用来打开已有的保存文件。writetotext()为保存文件函数,用来将所有学生基本信息纪录保存至文件,在修改函数执行后,再进行文件保存。display()为输出函数,用来显示用户的输入信息。采用顺序访问的方法显示和查找记录,定义一个指向结点的临时变量p,初值为单链表的头指针,输出指针所记录的数据后,将指针后移一个记录,直到p指针值为空,则所有记录输出完毕。每个小模块函数和主函数中都有退出选项。用户可根据有关提示,输入相关信息。源程序清单源程序清单(带注释)如下:#include"stdio.h"/*头文件名*/#include"string.h"#include"malloc.h"#defineLENsizeof(structmessage_student)/*一个结构体数组元素的长度*/#definenumsubs4/*学科数目*/typedefstructmessage_student/*结构体定义*/{charnumber[6];charname[20];charsex[4];floatsubject[numsubs];floatscore;floataverage;intindex;}student;externintnumstus;/*学生数目*/externstudent*pointer;/*指向结构体数组*/externintlens;intmenu_select();/*函数声明*/intopenfile(studentstu[]);intfindrecord(studentstud[]);intwritetotext(studentstud[]);voidwelcome();voiddisplay1();voidshowtable();voidsort(studentstu[]);voiddeleterecord(studentstu[],inti);voidaddrecord(studentstud[]);voiddisplay(studentstud[],intn1,intn2);voidamendrecord(studentstud[]);voidcount(studentstud[]);voidsortnum(studentstud[]);voidsortnum2(studentstud[]);voidsortname(studentstud[]);voidsortname2(studentstud[]);voidsortcount(studentstud[]);voidsortcount2(studentstud[]);voidstatistic(studentstud[]);voiddisplay1();#include"stdio.h"intmenu_select()/*界面显示*/{charc;printf("\n\n");printf("|1.增加学生记录5.统计信息|\n");printf("|2.查询学生记录6.打开文件|\n");printf("|3.修改学生记录7.保存文件|\n");printf("|4.学生纪录排序8.显示记录|\n");printf("|0.退出系统|\n");printf("\n\n");printf("请选择(0-8):");c=getchar();getchar();return(c-'0');}#include"stdio.h"intfindrecord(studentstud[])/*查找信息*/{charstr[2];inti,num;if(numstus==0){printf("没有可被查找的记录\n");return-1;}else{printf("以何种方式查找?\n1.学号\t2.姓名\t3.名次\n");gets(str);if(str[0]=='1')/*按学号查找*/{printf("请输入学号:");gets(str);for(i=0;i<=numstus;i++)if(strcmp(str,stud[i].number)==0){display(stud,i,i);break;}elsecontinue;}elseif(str[0]=='2')/*按姓名查找*/{printf("请输入姓名:");gets(str);for(i=0;i<=numstus;i++)if(strcmp(str,stud[i].name)==0){display(stud,i,i);break;}elsecontinue;}elseif(str[0]=='3')/*按名次查找*/{printf("请输入名次:");scanf("%d",&num);getchar();for(i=0;i<=numstus;i++)if(num==stud[i].index){display(stud,i,i);break;}elsecontinue;}if(i>numstus){printf("没有查找所要的信息。\n");return-1;}returni;}}#include"stdio.h"intopenfile(studentstu[])/*保存文件*/{inti=0,j;FILE*fp;charfilename[20],str[2];if(numstus!=0){printf("已经有记录存在,是否保存?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y')writetotext(stu);}printf("请输入文件名:");gets(filename);numstus=0;if((fp=fopen(filename,"rb+"))==NULL){printf("无法打开该文件\n");return(-1);}fscanf(fp,"%d",&numstus);fgetc(fp);while(i<numstus){fscanf(fp,"%s",stu[i].number);fscanf(fp,"%s",stu[i].name);fscanf(fp,"%s",stu[i].sex);for(j=0;j<numsubs;j++)fscanf(fp,"%f",&stu[i].subject[j]);fscanf(fp,"%f",&stu[i].score);fscanf(fp,"%f",&stu[i].average);fscanf(fp,"%d",&stu[i].index);i++;}fclose(fp);printf("文件读取成功\n");printf("是否显示纪录?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y')display(stu,0,numstus-1);return(0);}#include"stdio.h"voidsort(studentstud[])/*排序文件*/{inti,j=0;charstr[5];student*p;p=stud;if(numstus==0){printf("没有可供查询的记录!");}while(1){for(i=0;;i++){printf("请输入查询方式:");printf("(直接输入回车则结束查询操作)\n");printf("1.按照学号\t");printf("2.按照姓名\t");printf("3.按照名次\n");gets(str);if(strlen(str)==0)break;if(str[0]=='1'){printf("请输入排序次序:\n");printf("1.升序排列\t");printf("2.降序排列\n");gets(str);if(str[0]=='1')sortnum2(p);elsesortnum(p);display(stud,0,numstus-1);}elseif(str[0]=='2'){printf("请输入排序次序:\n");printf("1.升序排列\t");printf("2.降序排列\n");gets(str);if(str[0]=='1')sortname2(p);elsesortname(p);display(stud,0,numstus-1);}elseif(str[0]=='3'){printf("请输入排序次序:\n");printf("1.升序排列\t");printf("2.降序排列\n");gets(str);if(str[0]=='1')sortcount2(p);elsesortcount(p);display(stud,0,numstus-1);}elseprintf("请输入1~3");printf("是否退出排序?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y')break;}return;}}voidsortnum(studentstud[]){inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(strcmp(stud[j+1].number,stud[j].number)>0){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}voidsortnum2(studentstud[]){inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(strcmp(stud[j].number,stud[j+1].number)>0){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}voidsortname(studentstud[]){inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(strcmp(stud[j+1].name,stud[j].name)>0){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}voidsortname2(studentstud[]){inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(strcmp(stud[j].name,stud[j+1].name)>0){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}voidsortcount(studentstud[]){inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(stud[j+1].index>stud[j].index){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}voidsortcount2(studentstud[]){inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(stud[j].index>stud[j+1].index){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}#include"stdio.h"voidstatistic(studentstud[])/*输出统计信息*/{inti,j=0,k=0;charc1,str[2];floataverage[numsubs],sum=0;if(numstus==0)printf("没有可被查找的记录\n");else{while(1){printf("下面将统计考试成绩\n");printf("请选择你要统计哪科的成绩1.语文\t2.数学\t3.英语\t4.政治\n");c1=getchar();printf("\t一共有个%d记录\n",numstus);/*总共记录数*/switch(c1){case'1':for(i=0;i<numstus;i++)/*循环输入判断*/{sum+=stud[i].subject[0];if(stud[k].subject[0]>stud[i].subject[0])k=i;if(stud[j].subject[0]<stud[i].subject[0])j=i;}average[0]=sum/numstus;printf("\t科目语文的最高分:\n");/*最高分*/printf("\t\t学号:%s姓名:%s分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[0]);printf("\t科目语文的最低分是:\n");/*最低分*/printf("\t\t学号:%s姓名:%s分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[0]);printf("\t科目语文的平均分是%5.2f\n",average[0]);/*平均分*/break;case'2':for(i=0;i<numstus;i++)/*循环输入判断*/{sum+=stud[i].subject[1];if(stud[k].subject[1]>stud[i].subject[1])k=i;if(stud[j].subject[1]<stud[i].subject[1])j=i;}average[1]=sum/numstus;printf("\t科目数学的最高分:\n");/*最高分*/printf("\t\t学号:%s姓名:%s分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[1]);printf("\t科目数学的最低分是:\n");/*最低分*/printf("\t\t学号:%s姓名:%s分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[1]);printf("\t科目数学的平均分是%5.2f\n",average[1]);/*平均分*/break;case'3':for(i=0;i<numstus;i++)/*循环输入判断*/{sum+=stud[i].subject[2];if(stud[k].subject[2]>stud[i].subject[2])k=i;if(stud[j].subject[2]<stud[i].subject[2])j=i;}average[2]=sum/numstus;printf("\t科目英语的最高分:\n");/*最高分*/printf("\t\t学号:%s姓名:%s分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[2]);printf("\t科目英语的最低分是:\n");/*最低分*/printf("\t\t学号:%s姓名:%s分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[2]);printf("\t科目英语的平均分是%5.2f\n",average[2]);/*平均分*/break;case'4':for(i=0;i<numstus;i++)/*循环输入判断*/{sum+=stud[i].subject[3];if(stud[k].subject[3]>stud[i].subject[3])k=i;if(stud[j].subject[3]<stud[i].subject[3])j=i;}average[3]=sum/numstus;printf("\t科目政治的最高分:\n");/*最高分*/printf("\t\t学号:%s姓名:%s分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[3]);printf("\t科目政治的最低分是:\n");/*最低分*/printf("\t\t学号:%s姓名:%s分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[3]);printf("\t科目政治的平均分是%5.2f\n",average[3]);/*平均分*/break;default:printf("输入错误!请输入1~4之间的数\n");}sum=0;getchar();printf("是否继续进行统计?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y');elsebreak;}}}#include"stdio.h"intwritetotext(studentstud[])/*将所有记录写入文件*/{inti=0,j;FILE*fp;charfilename[20];printf("输入文件名称:");gets(filename);fp=fopen(filename,"w");fprintf(fp,"%d\n",numstus);while(i<numstus){fprintf(fp,"%s%s%s",stud[i].number,stud[i].name,stud[i].sex);for(j=0;j<numsubs;j++)fprintf(fp,"%f",stud[i].subject[j]);fprintf(fp,"%f%f%d",stud[i].score,stud[i].average,stud[i].index);i++;}fclose(fp);printf("已成功存储!\n");display(stud,0,numstus-1);numstus=0;return0;}#include"stdio.h"voidwelcome(){printf("\t*************************************************************\n");printf("\t\t\t\t湖南工程学院学生成绩管理系统\n\t\t\t\t锲而不舍敢为人先!\n");printf("\t*************************************************************\n");}voidshowtable(){printf("\n");printf("学号\t\t姓名\t性别\t语文\t数学\t英语\t政治\t总分\t\n");printf("\n");}voiddisplay(studentstud[],intn1,intn2){inti;showtable();/*显示表头*/for(i=n1;i<=n2;i++)printf("%s\t\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t\n",stud[i].number,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].subject[1],stud[i].subject[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[i].index);/*通过循环输出数据*/}voiddisplay1(){printf("\t\t本系统由湖南工程学院应用技术学院\n\n");printf("\t\t土木工程0784制作\n\n");printf("\t\t制作人员:\n");printf("\t\t第一程序设计小组\n");printf("\n\n");getchar();}#include"stdio.h"#include<string.h>voidamendrecord(studentstud[]){charpassword[10];again:printf("请输入密码:");scanf("%s",password);if(strcmp(password,"123")==0){printf("密码确认!!!\n");printf("请修改!\n");}else{printf("密码不正确,请重新输入!!!\n");gotoagain;}charstr[5];/*供用户输入*/inti=-1,j;if(numstus==0)/*没有记录返回*/printf("没有可供修改的记录!");while(i<0){i=findrecord(stud);if(i>=0){printf("要删除这个学生的信息吗?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y'){deleterecord(stud,i);count(stud);}else{printf("确定要修改这个学生的信息吗?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y'){printf("下面请重新输入学生的信息:\n");printf("请输入学号:\n");gets(stud[i].number);printf("请输入姓名:\n");gets(stud[i].name);printf("请输入性别(男/女1/0):\n");gets(str);if(str[0]=='0')strcpy(stud[i].sex,"女");elsestrcpy(stud[i].sex,"男");stud[i].score=0;printf("请按顺序输入成绩:");for(j=0;j<numsubs;j++){scanf("%f",&stud[i].subject[j]);stud[i].score+=stud[i].subject[j];}getchar();stud[i].average=stud[i].score/numsubs;}count(stud);}display(stud,0,numstus-1);}printf("是否继续进行其他修改?(y/n)\n");gets(str);if(str[0]=='y'||str[0]=='Y')i=-1;elsei=1;}}voiddeleterecord(studentstu[],inti)/*删除信息*/{intj;while(i>=0){for(j=i;j<numstus;j++)stu[j]=stu[j+1];numstus--;printf("删除成功!\n");}}voidcount(studentstud[]){inti,j;for(i=0;i<numstus;i++){stud[i].index=1;for(j=0;j<numstus;j++)if(stud[j].

温馨提示

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

评论

0/150

提交评论