长安大学C++设计 学生成绩管理系统实验报告

时间:2019-05-14 01:40:52下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《长安大学C++设计 学生成绩管理系统实验报告》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《长安大学C++设计 学生成绩管理系统实验报告》。

第一篇:长安大学C++设计 学生成绩管理系统实验报告

C++程序设计实验报告

院系:电子与控制工程学院 交通信息与控制工程系 学号:2011320101 姓名:XXX

2012年11月20

学生信息管理系统一、问题描述和需求分析;

编写一个学生信息管理系统,要求如下:

①对某个班级的学生的5门课程的学习成绩进行管理,用菜单选择操作方式完成下列基本功能: ★登记学生成绩; ★查询学生成绩; ★插入学生成绩; ★删除学生成绩。

②用菜单选择方式完成下列扩充功能: ★每门课程的平均成绩;

★输出每门课程成绩优秀的学生名单及成绩;

★输出只要有一门课程不及格的学生名单及其每门成绩; ★对5门课程中可以指定某一门课程进行排序。

二、概要设计;

1)主要变量:

1)intnum;

/*学号*/; char name[20];/*姓名*/; 2)char sex[2];

/ *性别*/; 3)int score[3];

/*成绩*/; 4)int sum;

/*总成绩*/;

5)int n;

/*声明一个全局变量*/;

6)struct student *next

/*声明一个结构体指针*/;(2)自定义函数:

1)Student *cin(void);

/*学生信息成绩录入函数*/ 2)Student *sort_1(Student *head,int);/*声明按学号排序函数*/ 3)void sort_2(Student *head);/*声明按总分排序函数*/ 4)void print(Student *head);/*声明显示函数*/ 5)Student *sort_all(Student *head);/*声明排序函数*/ 6)void find(Student *head);/*声明查询函数*/

2)

a)模块的功能及程序说明;

整个系统除了主函数外,另外还有10个函数,实现八大功能:输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。各个函数的详细设计说明分别如下:

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

2、初始化函数STUDENT *init()这是一个无参函数,里面只有一个语句,它的作用是使链表初始化,使head的值为NULL。比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!

3、菜单选择函数intmenu_select();这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!

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

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

5、显示记录函数 void print(STUDENT *head)这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。

算法:先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。重复执行此步聚直到p指针指向NULL为止。

6、查找记录函数 void search(STUDENT *head)这是一个不返回值的有参函数,形参为“链表头的指针”,实现按学号对某个学生进行查找,并显示所查找到的记录。

算法:采用线性查找法往下一个节点查找。输入所要查找的学生的学号s,设一个指针变量p,先指向第一个结点,当strcmp(p->name,s)&& p!= NULL时,使p后移一个结点,如果p!=NULL,输出p所指的结点。

7、删除记录函数 STUDENT *delete(STUDENT *head)这是一个有参函数,形参为“链表头的指针”,先输入要删除的学生记录的学号,找到后显示该学生信息,等确认后便可按“Y”进行删除。算法:从p指向的第一个结点开始,检查该结点中的num值是否等于输入的要求删除的那个学号。如果相等就将该结点删除,如不相等,就将p后移一个结点,再如此进行下去,直到遇到表尾为止。

8、排序函数 STUDENT *sort(STUDENT *head)这是一个有参函数,形参为“链表头的指针”,按学生成绩的平均分高低进行排序,还可以显示名次。

9、插入函数 STUDENT *insert(STUDENT *head,STUDENT *new)这是一个有参函数,形参有两个,一个是“链表头的指针”,一个是“待插入指针”,按照原来成绩平均分的高低进行插入,插入后会重新进行排序,并返

回。

算法:先将学生的成绩按平均分由高分到低分进行排序,再插入一个新生的结点,要求按平均分的高低顺序插入。先用指针变量p0指向待插入的结点,p1指向第一个结点。如果p0->average

average,则待插入的结点不应插在p1所指的结点之前。此时将p1后移,并使p2指向刚才p1所指的结点。重复以上的步骤,直到p0->average>=p1->average为止。这时将p0指向的结点插到p1所指结点之前。但是如果p1所指的已是表尾结点,则p1就不应后移了。如果p0->average比所有结点的average都小,则应将p0所指的结点插到链表末尾。如果插入的位置既不在第一个结点之前,又不在表尾结点之后,则将p0的值赋给p2->,使p2->next指向待插入的结点,然后将p1的值赋给p0->next,使得p0->next指向p1指向的变量。如果插入位置为第一个结点之前,则将p0赋给head,将p1赋给p0->next。如果要插到表尾之后,应将p0赋给p1->next,NULL赋给p0->next。最后再调用排序的函数,将学生成绩重新排序.10、保存数据到文件函数 void save(STUDENT *head)这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录保存在电脑上由自己任意命名的二进制文件。a)核心算法流程图;

b)核心源程序模块;

核心源程序为驱动整个程序运行的最重要的模块,通过核心源程序将2)中的主要模块进行组织与构成,依次执行上述的十个模块中的程序,使程序能够正常运行。总体功能要求:

(1)链表的建立,每个节点包括:学号、姓名、性别、语文、数学、英语、总分。

(2)节点的插入,按学号的顺序插入。

(3)删除链表中的节点,按学号或者姓名。

(4)链表的输出。按学号排序、按总分排序功能模块图、流程图(要求有总体的功能模块图、各部分流程图):

核心源程序位于main函数中,先对系统进行初始化,之后进入模式选择界面,选择模式并进行相应的操作,返回值 模式选择界面,直到录入完成,进行查询计算,查询结束 可以选择删改,最后退出程序。

四.调试分析

(1)作为一个学生成绩管理系统,用户可以首先使用管理员模式初始化该系统,并产生一个开始的学生成绩系统,初始化时可输入学生姓名、学生学号、学生各科成绩等信息。初始化完成之后,用户可选择使用管理员模式进入系统修改学生信息,也可以选择使用用户模式进入系统,对学生成绩进行各项查询,其中有成绩最高分查询,还可以按照不

同的要求进行排序,有按照学号,按照分数高低等;同时可以生成学生成绩表,更加直观的对比查询学生各项成绩,最后还可以删除或者添加学生成绩及各项信息,避免开始的录入错误。

(2)通过对该课题的程序设计,我认识到了C语言作为一种程序机械语言的灵活性。C语言不仅仅是C++以及其他程序语言的基础,也可以做出许多复杂的程序,学好C语言是很有好处的。

五.测试结果;

1.初次进入系统,进行学生成绩系统的初始化:

可以根据学生人数的多少输入若干学生的各项信息和成绩信息,当要结束时,可以输入0结束学生信息的录入。

2.可以选择按照学生的总分进行排序,并清楚的显示其排序结果。

3.接下来可以进行学生成绩统计排序。

4.在学生成绩管理系统中,可以根据初始化的数据,对学生计算学生均分以及求出单科最高分的同学。

六.设计体会;

此次C语言程序设计实践,本人实在是获益不浅!C语言是上个学期开的课程,所以这个学期并没怎么看过,当要开始设计的时候,还真不知从哪下手!结果,第一次的上机,我只坐了一个下午,什么也没干!回去以后,我想,这样不行,这样下去还得了!我就重新学了一遍我们上个学期的教材,发觉自已有许多都遗忘了!特别是有文件的操作,几乎是一遍空白!几乎花了我百分之九十的时间,而且还是在一些在其他同学的帮助下和在上网查看了大量的资料之后才做出来!最后,想说两句,这次设计,让我重新掌握了C语言,而且还得到了用C语言解决实际问题的宝贵经验!

通过对该课题的程序设计,我认识到了C语言作为一种程序机械语言的灵活性。C语言不仅仅是C++以及其他程序语言的基础,也可以做出许多复杂的程序。在试验当中,通过对许多不甚了解的语言规则的上网查阅,丰富了我自己对C语言的知识与认识。也了解了许多C语言程序设计的基本思路,开阔了自己的视野,也巩固了上学期对于C语言的学习。

七、附录

源程序代码:

#include #include #include #include #define LEN sizeof(Student)typedefstruct student { intnum;/*学号*/ char name[20];/*姓名*/ char sex[2];/*性别*/ int score[3];/*成绩*/ int sum;/*总成绩*/ struct student *next;}Student;int n;/*声明一个全局变量*/ Student *cin(void);Student *sort_1(Student *head,int);/*声明按学号排序函数*/ void sort_2(Student *head);/*声明按总分排序函数*/ void print(Student *head);/*声明显示函数*/ Student *sort_all(Student *head);/*声明排序函数*/ void find(Student *head);/*声明查询函数*/ Student *add_new(Student *head);Student *cin(){ int flag;Student *head,*p1,*p2;n=0;10

head=(Student *)malloc(LEN);p2=head;printf(“n请输入第%d名学生的学号,学号为0表示结束输入:”,n+1);scanf(“%d”,&flag);while(getchar()!='n');for(;flag;)/*输入每个学生的信息*/ { n++;p1=(Student *)malloc(LEN);p1->num=flag;printf(“请输入第%d名学生的姓名:”,n);/*输入姓名*/ scanf(“%s”,p1->name);printf(“请输入第%d学生的性别:”,n);/*输入性别*/ scanf(“%s”,p1->sex);printf(“请输入第%d名学生的语文成绩:”,n);/*输入语文成绩*/ scanf(“%d”,&p1->score[0]);printf(“请输入第%d名学生的数学成绩:”,n);/*输入数学成绩*/ scanf(“%d”,&p1->score[1]);printf(“请输入第%d名学生的英语成绩:”,n);/*输入英语成绩*/ scanf(“%d”,&p1->score[2]);p1->sum=p1->score[0]+p1->score[1]+p1->score[2];p2->next=p1;p2=p1;printf(“n请输入第%d名学生的学号,没有此学生则输入0表示结束:”,n+1);scanf(“%d”,&flag);} p2->next=NULL;printf(“nn”);return head;} Student *sort_all(Student *head)/*定义排序函数*/ { int choose;for(;;){ printf(“ntt# # # # # 学生成绩统计排序 # # # #n”);printf(“tt#t1.按学生学号排序t #n”);printf(“tt#t2.按学生总分排序t #n”);printf(“tt#t7.单科高分及均分t #n”);printf(“tt#t8.显示当前学生成绩t #n”);printf(“tt#t0.返回上一级菜单t #n”);printf(“请输入你要执行的操作:”);scanf(“%d”,&choose);while(getchar()!='n');11

switch(choose){ case 1: case 2: case 3: case 4: case 5: case 6:head=sort_1(head,choose);break;case 7:print(head);sort_2(head);break;case 8:print(head);break;case 0:return head;default: printf(“nn您的输入有误!请重新输入:nn”);break;} } } Student *sort_1(Student *head,int choose)/*定义按学号排序函数*/ { Student *p1,*p2=head->next,*pm,*px;Student mid;if(!p2)return head;for(p1=p2;p1->next!=NULL;p1=p1->next){ pm=p1;for(p2=p1->next;p2!=NULL;p2=p2->next)switch(choose){ case 1:if(pm->num>p2->num)pm=p2;break;case 2:if(pm->sum

sum)pm=p2;break;case 3:if(pm->score[0]

score[0])pm=p2;break;case 4:if(pm->score[1]

score[1])pm=p2;break;case 5:if(pm->score[2]

score[2])pm=p2;break;} if(pm!=p1){ mid=*pm;*pm=*p1;*p1=mid;px=pm->next;pm->next=p1->next;p1->next=px;} } printf(“n排序后的成绩表为:n”);print(head);12

return head;} void sort_2(Student *head)/*定义按总分排序函数*/ { Student *p=head->next;int max_1,max_2,max_3,min_1,min_2,min_3;intmax_sum,min_sum;int sum_1=0,sum_2=0,sum_3=0;float aver_1,aver_2,aver_3,aver_sum;if(!p)return;max_1=min_1=p->score[0];max_2=min_2=p->score[1];max_3=min_3=p->score[2];max_sum=min_sum=p->sum;for(;p;p=p->next){ if(max_1

score[0])max_1=p->score[0];else if(min_1>p->score[0])min_1=p->score[0];if(max_2

score[1])max_2=p->score[1];else if(min_2>p->score[1])min_2=p->score[1];if(max_3

score[2])max_3=p->score[2];else if(min_3>p->score[2])min_3=p->score[2];if(max_sum

sum)max_sum=p->sum;else if(min_sum>p->sum)min_sum=p->sum;sum_1+=p->score[0];sum_2+=p->score[1];sum_3+=p->score[2];} aver_1=1.0*sum_1/n;aver_2=1.0*sum_2/n;aver_3=1.0*sum_3/n;aver_sum=aver_1+aver_2+aver_3;printf(“总共%d名学生,具体数据为:n”,n);printf(“总分最高分为%d,最低分位%d,平均分为%.2fn”, max_sum,min_sum,aver_sum);} void find(Student *head)/*定义查询函数*/ { Student *p;intchoose,fnum;char tem[20];if(n==0){printf(“n当前系统没有任何学生数据!n ”);return;} for(;;){ printf(“n请输入您要查询学生的方式:nn”);printf(“

1、按学号查询;

2、按姓名查询;0、我不查询了。nn”);printf(“请选择:”);scanf(“%d”,&choose);while(getchar()!='n');13

if(choose==1){ printf(“n请输入你要查询的学生的学号,输入0退出学号查询:”);scanf(“%d”,&fnum);for(;fnum;){ for(p=head->next;p!=NULL&&p->num!=fnum;p=p->next);if(!p){ printf(“nn找不到你要查询的学号,请重新输入,输入0表示结束:”);scanf(“%d”,&fnum);} else if(p->num==fnum){ printf(“n学号为%d学生的数据为:n”,p->num);printf(“学号t姓名t性别t 语文成绩 数学成绩 英语成绩 总分n”);/*输出所有的学生信息*/ printf(“%dt%st%st %d %d %d %dn”,p->num, p->name,p->sex ,p->score[0],p->score[1],p->score[2],p->sum);printf(“nn请输入你还要查询的学生的学号,输入0表示不按学号查询了:”);scanf(“%d”,&fnum);} } } else if(choose==2){ printf(“n请输入你要查询的学生的姓名,输入0退出姓名查询:”);scanf(“%s”,tem);for(;strcmp(tem,“0”);){ for(p=head->next;p!=NULL&&strcmp(p->name,tem);p=p->next);if(!p){ printf(“nn找不到你要查询的姓名,请重新输入,输入0表示结束:”);scanf(“%s”,tem);} else if(!strcmp(p->name,tem)){ printf(“n姓名为%s学生的数据为:n”,p->name);printf(“学号t姓名t性别t 语文成绩 数学成绩 英语成绩 总分n”);printf(“%dt%st%st %d %d %d %dn”,p->num,p->name,p->sex ,p->score[0],p->score[1],p->score[2],p->sum);printf(“nn请输入你还要查询的学生的姓名,输入0表示不按姓名查询了:”);14

scanf(“%s”,tem);} } } else if(choose==0){printf(“n你选择了不查询!n”);break;} else {printf(“n你以其他方式选择了不查询!n”);break;} } } Student *add_new(Student *head)/*定义插入函数*/ { Student *p;int flag;printf(“nn请输入你要新加入学生的学号,学号为0表示结束输入:”);scanf(“%d”,&flag);while(getchar()!='n');for(;flag;){ p=(Student *)malloc(LEN);p->num=flag;printf(“请输入新加入学生的姓名:”,n);/*输入姓名*/ scanf(“%s”,p->name);printf(“请输入新加入学生的性别:”);/*输入性别*/ scanf(“%s”,p->sex);printf(“请输入新加入学生的语文成绩:”,n);/*输入语文成绩*/ scanf(“%d”,&p->score[0]);printf(“请输入新加入学生的数学成绩:”,n);/*输入数学成绩*/ scanf(“%d”,&p->score[1]);printf(“请输入新加入学生的英语成绩:”,n);/*输入英语成绩*/ scanf(“%d”,&p->score[2]);p->sum=p->score[0]+p->score[1]+p->score[2];p->next=head->next;head->next=p;n++;printf(“n请输入还要加入学生的学号,没有此学生则输入0表示结束:”);scanf(“%d”,&flag);} head=sort_1(head,1);printf(“加入后的成绩表为:n”);print(head);return head;} void print(Student *head){ Student *p=head->next;15

if(!p){printf(“nn此系统目前没有任何学生数据!nnn”);return;} printf(“此系统目前共计学生%d名:n”,n);printf(“**************************学生成绩统计一览************************ *****n”);printf(“学号t姓名t性别t 语文成绩 数学成绩 英语成绩 总分n”);for(;p;p=p->next)printf(“%dt%st%st

%d

%d

%d

%dn”, p->num,p->name,p->sex ,p->score[0],p->score[1],p->score[2],p->sum=p->score[0]+p->score[1]+p->score[2]);} struct student *del(struct student *head,longnum)/*定义删除学生信息函数*/ {struct student *p1,*p2;if(head==NULL){printf(“nlist null!n”);return head;} p1=head;while(num!=p1->num&& p1->next!=NULL){p2=p1;p1=p1->next;} if(num==p1->num){if(p1==head)head=p1->next;else p2->next=p1->next;printf(“delete:%ldn”,num);n=n-1;} elseprintf(“%ld not deen found!n”,num);return(head);} int main()/*主函数即用户的操作界面*/ { Student *head;intchoose,i,num;/*声明局部变量*/ head=(Student *)malloc(LEN);head->next=NULL;for(;;){ printf(“ntt* * * * * 学生成绩管理系统 * * * *n”);/*学生成绩管理系统*/ printf(“tt*t1.学生数据键盘录入t *n”);/*.学生数据键盘录入*/ printf(“tt*t2.学生数据统计排序t *n”);/*学生数据统计排序*/ printf(“tt*t3.查询学生数据tt *n”);/*.查询学生数据*/ printf(“tt*t4.插入学生数据tt *n”);/*插入学生数据*/ printf(“tt*t5.显示当前成绩表t *n”);/*显示当前成绩表*/ printf(“tt*t6.删除学生数据tt *n”);/*删除学生数据*/ printf(“tt*t0.退出成绩管理系统t *n”);/*退出成绩管理系统*/ printf(“n请输入你要执行的操作:”);/*请输入你要执行的操作*/ scanf(“%d”,&choose);while(getchar()!='n');16

switch(choose){ case 1:printf(“ntttt**************注意**************”);printf(“nn 此选项将会建立新的学生数据系统 ,原来的数据将不再存在,你确信要删除原来的数据并建立新的数据系统么?nn”);printf(“

1、建立新的数据系统;0、放弃建立新的数据系统。nn”);printf(“请选择:”);scanf(“%d”,&i);if(i==1){head=cin();print(head);break;} else if(i==0){ printf(“n你选择了放弃建立新的数据系统!n”);break;} else { printf(“n你做出别的选择,当作放弃建立!n”);break;} case 2:head=sort_all(head);break;/*调用排序函数*/ case 3:find(head);break;/*调用查询函数*/ case 4:head=add_new(head);/*调用插入函数*/ case 5:print(head);break;/*调用显示函数*/ case 6:printf(“请输入要删除的学生学号:”);scanf(“%d”,&num);del(head,num);/*调用删除函数*/ case 0:system(“pause”);return 0;/*退出系统*/ default: printf(“nn您的输入有误!请重新输入:nn”);break;} } }

第二篇:c++大作业 学生成绩管理系统 学生实验报告 样本[最终版]

学生实验报告

实验课名称: C++程序设计

实验项目名称:综合大作业——学生成绩管理系统 专业名称:

学级:号:

学生姓名:

同组成员:

教师姓名:

题目:学生成绩管理系统一、实验目的:

(1)对C++语法、基础知识和编程技巧进行综合运用,编写具有一定综合应用价值的稍大一些的程序。培养学生分析和解决实际问题的能力。

(2)熟悉掌握C++的语法和面向对象程序设计方法。进一步理解和运用结构化和面向对象程设计想结合的思想和方法

(3)培养学生的逻辑思维能力,编程能力和程序调试能力以及工程项目分析和管理能力。

(4)学会利用流程图或N-S图表示算法;

(5)掌握书写程设计开发文档的能力(书写课程设计报告);

二、设计任务与要求:

(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计。

(2)在系统的设计中,能够运用面向对象的机制(继承、派生)来实现系统功能,并且要建立清晰的类层次关系。

(3)主函数中提供菜单选项,并给出足够的选择信息以及提示信息。界面友好(良好的人机交互),加必要的注释;

(4)程序具有一定的健壮性,不会因为用户的输入错误引起程序运行错误而中断执行。

三、系统需求分析:

(1)需求分析

建立成绩管理系统,包含了学生的全部信息,包括学号,姓名,出生日期,年龄(通过计算得出),各科成绩等。然后对其相关操作。

(2)系统功能分析

信息录入、信息显示、信息查询、信息删除、信息修改、信息保存。

(3)系统功能模块

a、主程序模块

本程序各个模块功能均用函数实现,主程序主要用来实现数据的初始化,定义变量,调用函数等,实现对程序的整体控制。

b、登录密码模块

本模块用于管理登录,只保存了两个管理员,并且输入错误,会提示错误原因,管理员不存在或者密码错误,同时有输入上限,三次输入错误即退出系统。

c、信息录入模块

录入学生成绩信息(包括学生学号、姓名、出生日期、年龄、各门课程的成绩等),将信息记录到当前*End中,然后End指向新的内存。

d、信息显示模块

显示录入的所有信息,使用for循环,起始条件Head->Next,终止于End。

e、信息查询模块

输入学号或名字,查询学生各门课程的成绩及总成绩,输入姓名查询,将查询到指针保存到指针数组中,同时使用i记录保存指针的数目,然后将End赋给指针数组作为结束条件;输入学号查询,成功则返回上一个指针,不成功就返回空。

f、信息删除模块

两种方式,通过姓名,调用FindItem(char * name,student *a[])并返回i,i=0不存在,i=1直接删除,i>1显示所有相同姓名的信息供用户选择删除,通过学号(唯一性)直接删除该学生的成绩信息;

g、信息修改模块

同删除模块类似,首先查询,出现重名选择修改。

h、信息排序模块

根据总成绩高低排序,交换两个数据域完成排序,用for循环完成所有的信息排序。h、信息保存模块

退出时,将学生的学号、姓名及各门课程的成绩等信息保存于外部存储器的sort.txt文件中。

(4)模块功能框架图

四、系统设计与实现

1、基类class Student用来封装学生的所有信息,以及基本操作即读写数据。

2、派生类class Studentmessage继承了Student的所有功能,同时增加了增加信息,显示,修改等功能,实现对信息的所有操作。

3、main()用来实现对程序的整体控制;code()用于保护信息安全性,限制登录。

4、定义文件输入流对象in和输出流对象out,实现对外部文件的操作,使得数据得

以保存。

5、Student * Next用于实现链表的操作,保存下一个对象的地址。

五、调试过程:测试数据及结果

1、新建

2、查找

3、修改

4、删除

六、系统有待改进的地方

七、设计心得与体会

八、参考资料

八、系统有待改进的地方

九、设计心得与体会

此次c++课程设计,在指导教师的精心教导下,我们学会了如何用C++编写一个简单的应用程序。首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。程序实现上,设计了简单的查询界面,将各个功能集中出来按照程序编写原则,便于查询。

根据C++课程所学的概念、理论和方法,按照C++程序设计的基本步骤,设计出一个适当规模的程序;进一步加深对C++语言的理解和掌握。理论联系实际,加深和巩固所学的理论知识,提高实践能力和计算机的综合运用能力。我们编写程序的过程是辛苦与快乐的,程序的编写原则很重要,只要我们在编程,就必须不断改进,才能更好提高编程能力。

十、参考资料

《C++primer》(美)普拉塔(Prata,S.)著 人民邮电出版社 《数据结构》严蔚敏 著清华大学出版社

第三篇:学生成绩管理系统实验报告

中南大学

二○一三~二○一四学年第二学期 信息科学与工程学院

C++课程设计报告

课程名称: C++课程设计班级: 通信工程1304班学号:0905130417姓名:毛腾指导教师:

二○一四年七月

目录

一. 需求分析

二.三.

四.五.六.

程序结构

算法分析运行结果

学之心得

程序源码

一. 需求分析

(一)小型学生成绩管理系统

1、需要处理的基础数据

 学生基本信息:如班级、学号、姓名、性别、年龄、宿舍号码、电话号

码等。

 学生选修课程的基本信息:课程编号、课程名称、考试成绩、平时成绩、综合成绩、学分、重修否等。

2、系统的基本功能

 数据的录入:如录入学生的基本信息,以及该学生选修课程的基本信息;  数据的修改:如修改指定学号、或者指定姓名的学生信息,或者修改其

选修课程信息;

 数据的插入:插入某个学生信息;

 数据的查询:如按学号查询、按姓名查询等;

 数据的删除:如删除指定学号、或者指定姓名的学生及其选修课程信息; 平均成绩的计算:计算每个学生各门功课的平均成绩,并按平均成绩从

高到低的次序输出学生信息;

 列出不及格学生清单(学号、姓名、不及格的课程和成绩)。 考虑用文件把数据保存起来(可选)。

二.程序结构

(1)程序框图

第四篇:C++课程设计学生成绩管理分析系统

五、解决方案 C++程序设计实践教学环节任务书

1.分析程序的功能要求,划分程序功能模块。

2.画出系统流程图。

一、题目: 学生成绩管理分析系统 3.代码的编写。定义类和各个功能函数。

4.程序的功能调试。

二、目的与要求 5.完成系统总结报告以及使用说明书。

1.目的:

六、进度安排

1)巩固C++基础知识;此次课程设计时间为一周或两周,分四个阶段完成:

2)能够运用面向对象方法进行类的设计; 1.分析设计阶段。指导教师应积极引导学生自主学习和钻研问题,明确设计要

3)锻炼学生编程能力,解决实际问题的能力。求,找出实现方法,按照需求分析、总体设计、详细设计这几个步骤进行。2.编码调试阶段:根据设计分析方案设计类并编写代码,然后调试该代码,实

2.要求现课题要求的功能。3.总结报告阶段:总结设计工作,写出课程设计说明书,要求学生写出需求分析、基本要求: 总体设计、详细设计、编码、测试的步骤和内容。

1)按照软件开发流程进行开发 4.考核阶段。

2)类的设计合理;包括类的继承多态等;

3)模块划分清晰合理;

七、撰写课程设计报告或课程设计总结

4)实用性好。课程设计报告要求: 创新要求:

在基本要求达到后,可进行创新设计,比如系统用户功能控制,对管理员级和一总结报告包括需求分析、总体设计、详细设计、编码(详细写出编程步骤)、测试的步般级别的用户系统功能操作不同。骤和内容、课程设计总结、参考资料等,不符合以上要求者,则本次设计以不及格记。

三、信息描述

八、参考资料1.《C++程序设计》.郑莉.清华大学出版社 有关该系统基本信息的描述,如:学号、姓名、系别、班级和所选科目及各科成绩2.《C++编程思想》.Bruce Eckel [刘宗田].机械工业出版社等。3.《C++ Primer》中文版.Lippman[潘爱民].中国电力出版社出版4.《Effective C++中文版》Scott Meyers[侯捷].华中科技大学出版社

四、功能描述

1.学生基本信息及成绩所选科目成绩的录入修改和删除。

2.基本信息的查询(分系、班级;分科目)。

3.对每系或每班各科成绩进行分析(即求单科平均成绩、及格率和优秀率);

4.对所开课程的成绩分析(求其平均成绩,最高分和最低分);

5.对学生考试成绩进行排名(单科按系别或班级进行排名,对每一个班级,同一

学期学生总体成绩进行排名,并显示各科成绩信息)

第五篇:学生成绩管理系统C++程序设计

项目设计题目(学生成绩管理系统)

学号:

姓名:

自评成绩:

成绩:

1.选题意义、依据

学生成绩系统的设计从学生的应用中而来,学生了解该系统的组成和运行过程,它贴近学生的生活能使学生更加方便的使用各个语句、函数、结构体等。

依据学生期末成绩表的格式。

2.系统功能设计与分析(功能模块说明)

系统主要用于从一个文件夹读入学生信息(101 张三

78 87 102 李斯

103 王红

79 87 104 赵子龙 72 75 76

李洪磊 88 98 89),包括学生学号、姓名、成绩(数学、英语、数据库),程序中引用了八个函数 void Cscore(int);void Rank(int ave);void Listnumber(int i);

void Listscore(int i);void Lookup(int);void Alter(int);void Dele(int &i);void Insert(int &i);系统主要实现的功能有:查询、修改、删除、插入、成绩单(以学号排名)和成绩单(以名次排名)。

Cscore 函数主要是对学生进行排名。具有相同总分的学生具有相同的名次,例如:第三名和第四名具有相同的总分则在表中不会出现第四名,将出现两个第三名紧接着出现第五名学生的情况。

Rank 函数主要用于按平均分对学生进行备注。把学生分为四个等级:>90分为excellent,80—90分为medium,60—80分为qualified,<60分为disqualified。Listnumber 函数主要用于把学生的信息(学号 姓名 数学 英语 数据库 总分平均分 名次 备注)以学号排名的顺序用表的形式输出,方便学生查看。Listnumber 函数中还调用了Cscore 和Rank 函数。

Listscore 函数是把学生的信息以总成绩排名的形式输出。

Lookup 函数主要运用学号或姓名形式查询单个学生信息,如果存在则输出该学生信息(学号 姓名 数学 英语 数据库 总分平均分 名次 备注),否则输出“Input message is error.”。

Alter 函数是修改指定学号的学生信息。主要用于修改指定学号学生的各科成绩并输出修改后的学生信息(学号 姓名 数学 英语 数据库 总分平均分 名次 备注)。

Delete 函数用于删除指定学生的信息。可用两种方式删除:以学号形式删除学生信息,以姓名形式删除学生信息。若要删除了学生不存在则输出“message error.”。

Insert 函数用来插入学生的信息,一次调用Insert 函数可以添加多个学生的信息。Insert 函数中还调用了Cscore 和Rank 函数。

3.涉及的主要知识点说明

(1)系统主要运用了函数的声明、定义、调用(值调用和地址调用)。

(2)对文件的读入操作。

(3)在平均分的求取上采用四舍五入的方式,运用了类型转换。(4)多次运用if和for嵌套,在for嵌套中又运用了break语句。(5)运用了switch。

(6)对字符数组的比较中运用了strcmp,还运用toupper把小写字母转换成大写。

(7)对学生信息进行的插入和有序删除操作。(8)运用iomanip对输出进行美观。

4.创新性说明(怎么解决)

创新性:系统可以对具有相同总分学生的学生输出相同的名次。若存在三个相同的分数都为第二名,则在输出时出现三个第二名不会出现第三、四名,紧接着出现第五名。

解决方法:(1)用一个数组记录具有相同分数的人数,数组下标和学生信息所具有的下标相同;(2)删除相同的总分只保留其中一个分数;(3)对删除相同总分的分数按从高到底进行排序;(4)对各个学生的总分进行排名。

5.源代码

//****************************************************************** //Student achievement program //This program has eight functions of students grade,including list //score ranking,lookup,alter,delete,insert and rank.From the file read in //student achievement.Scores of people have the same same place.//****************************************************************** #include #include #include #include #include #include

void Cscore(int);void Rank(int ave);void Listnumber(int i);void Listscore(int i);void Lookup(int);void Alter(int);void Dele(int &i);void Insert(int &i);

using namespace std;const int MAX=100;

struct student

//定义学生信息结构体 { int num;char name[8];int math;int english;int database;int sum;int average;int score;}stu[MAX];

int main()

//主函数 {

int i,k;char ch;string filename;ifstream infile;

cout<<“Please input the filenames: ”;cin>>filename;infile.open(filename.c_str());if(!infile){

cout<<“Can't open the input file.”<

return 1;} for(i=0;i

infile>>stu[i].num>>stu[i].name>>stu[i].math>>stu[i].english>>stu[i].database;

stu[i].sum=stu[i].math+stu[i].english+stu[i].database;

stu[i].average=int(float(stu[i].sum)/3+0.5);} i=i-1;cout<

学生成绩管理系统

”<

cout<<“Y or N 进入菜单栏 ”<>ch;ch=toupper(ch);while(ch=='Y'){ cout<

<<“

菜单:”<

<<“

1)查 询”<

<<“

2)修 改”<

<<“

3)删 除”<

<<“

4)插 入”<

<<“

5)成绩单(以学号排名)”<

6)成绩单(以名次排名)”<

cout<<“***请选择 1--4 中任何一个:”<

cin>>k;

cout<

switch(k){

case 1:Lookup(i);break;

case 2:Alter(i);break;

case 3:Dele(i);break;

case 4:Insert(i);break;

case 5:Listnumber(i);break;

case 6:Listscore(i);break;

default :cout<<“error input!”<

cout<

cin>>ch;

ch=toupper(ch);} cout<<“Thank you for using!”<

<<“Bye bye!”<

void Cscore(int i)

//对学生分数进行排名 { int h[MAX],b[MAX],score[MAX+1],n,k,j;int sum0[MAX],s;n=i;for(j=0;j

sum0[j]=stu[j].sum;} for(j=0;j

h[j]=0;for(k=0;k

h[j]++;

//具有同一分数的人数

} } //end for } //end for for(j=0;j

//删除多个同一分数只保留其中一个分数 { for(k=j+1;k

if(sum0[j]==sum0[k])

{

sum0[k]=sum0[i-1];

i--;

k--;

} } } //end for for(j=0;j

//按从高到底的顺序对总分进行排名 { for(k=j+1;k

if(sum0[j]

{

s=sum0[j];

sum0[j]=sum0[k];

sum0[k]=s;

} //end if } //end for } //end for b[0]=0;score[0]=1;for(j=0;j

//对学生成绩进行排名 { for(k=0;k

if(sum0[j]==stu[k].sum)

{

score[j+1]=score[j]+b[j];

stu[k].score=score[j+1];

b[j+1]=h[k];

} //end if

} //end for } //end for }

void Rank(int ave)

//对学生等级输出 { if(ave>=90)

{

cout<<“excellent”;

}

else if(ave>=80)

{

cout<<“medium”;

}

else if(ave>=60)

{

cout<<“qualified”;

}

else

{

cout<<“disqualified”;

}

cout<

void Listnumber(int i){ int j;Cscore(i);cout<<“学号

姓名

数学

英语

数据库

总分

平均分

名次

备注

”<

cout<

<

cout<

cout<

cout<

Rank(stu[j].average);} }

void Listscore(int i){ int j,k;Cscore(i);cout<<“学号

姓名

数学

英语

数据库

总分

平均分

名次

备注

”<

for(k=0;k

{

if(stu[k].score==j)

{

cout<

<

cout<

cout<

cout<

Rank(stu[k].average);

}

} } }

void Lookup(int i)

//运用学号或姓名形式查询单个学生信息 { int j,k,n,numb;char name1[8];

cout<<“Please select you check score ways.”<>n;if(n)

//以学号形式查询学生信息

{

cout<<“Please input student number: ”;

cin>>numb;

for(j=0;j

{

if(numb==stu[j].num)

{

k=j;

break;

}

} } else

//以姓名形式查询学生信息

{

cout<<“Please input student name: ”;

cin>>name1;

for(j=0;j

if(strcmp(stu[j].name,name1)==0)

{

k=j;

break;

} } if(k==MAX){

cout<<“Input message is error.”<

//如果学生存在则输出学生信息

{

Cscore(i);

cout<<“学号

姓名

数学

英语

数据库

总分

平均分

名次

备注

”<

cout<

<

cout<

cout<

cout<

Rank(stu[j].average);} }

void Alter(int i)//修改指定学号的学生信息 { int numb,j;

cout<<“alter begin...”<

cout<<“Please input number:”;

cin>>numb;for(j=0;j

if(numb==stu[j].num)

{

cout<<“find out:”<

cout<<“学号:”<

cout<<“Please input new result: 数学

英语

数据库 ”<

cin>>stu[j].math>>stu[j].english>>stu[j].database;

stu[j].sum=stu[j].math+stu[j].english+stu[j].database;

stu[j].average=int(float(stu[j].sum)/3.0+0.5);

Cscore(i);

//输出修改后该学号学生的信息

cout<<“学号

姓名

数学

英语

数据库

总分

平均分

名次

备注

”<

cout<

<

cout<

cout<

cout<

Rank(stu[j].average);

break;

} } }

void Dele(int &i)

//删除指定学生的信息 { int numb,j,k;char name0[8];cout<<“delete begin...”<

cout<<“

[1]以学号形式删除学生信息”<

[0]以姓名形式删除学生信息”<>k;if(k)

//以学号形式删除学生的信息

{

cout<<“Please input delete number:”;

cin>>numb;

for(j=0;j

{

if(numb==stu[j].num)

break;

} } else

//以姓名形式删除学生的信息

{

cout<<“Please input delete name:”;

cin>>name0;

for(j=0;j

{

if(strcmp(name0,stu[j].name)==0)

break;

}

}

void Insert(int &i)

//插入学生的信息 { int j,n;cout<<“insert begin...”<>n;i=i+n;cout<<“Please input insert message.form:”<

cin>>stu[j].num>>stu[j].name>>stu[j].math>>stu[j].english>>stu[j].database;

stu[j].sum=stu[j].math+stu[j].english+stu[j].database;

stu[j].average=int(float(stu[j].sum)/3.0+0.5);} Cscore(i);cout<<“学号

姓名

数学

英语

数据库

总分

平均分

名次

备注

”<

cout<

<

cout<

cout<

stu[j].num=stu[j+1].num;

strcpy(stu[j].name,stu[j+1].name);

stu[j].math=stu[j+1].math;

stu[j].english=stu[j+1].english;

stu[j].database=stu[j+1].database;

stu[j].sum=stu[j+1].sum;

stu[j].average=stu[j+1].average;} i=i-1;Cscore(i);} else cout<<“message error.”<

cout<

运行结果:

分析:

系统基本上能实现对成绩的查询、、修改、删除、插入、成绩单(以学号排名)和成绩单(以名次排名)等功能,并且可以插入多个学生的信息。但在插入学生后未不能成绩单以学号排名的形式输出。为了改进程序对Insert 函数进行了一下修改。

Insert 函数代码如下:

void Insert(int &i)

//插入学生的信息 {

int j,k,n,m,first,last,mid;int num0,math0,english0,database0;char name0[8];cout<<“insert begin...”<>n;m=i+n;first=0;last=i-1;mid=(first+last)/2;cout<<“Please input insert message.form:”<>stu[j].num>>stu[j].name>>stu[j].math>>stu[j].english>>stu[j].database;while(first<=last){

if(stu[j].num

{

last=mid-1;

}

else if(stu[j].num>stu[mid].num)

{

first=mid+1;

}

else

{

break;

}

mid=(first+last)/2;} if(first>last){

num0=stu[j].num;

strcpy(name0,stu[j].name);

math0=stu[j].math;

english0=stu[j].english;

database0=stu[j].database;

for(k=i-1;k>first;k--)

//进行有序插入

{

stu[k].num=stu[k-1].num;

strcpy(stu[k].name,stu[k-1].name);

stu[k].math=stu[k-1].math;

}

stu[k].english=stu[k-1].english;

stu[k].database=stu[k-1].database;

stu[k].sum=stu[k-1].sum;

stu[k].average=stu[k-1].average;

}

stu[first].num=num0;

strcpy(stu[first].name,name0);

stu[first].math=math0;

stu[first].english=english0;

stu[first].database=database0;

stu[first].sum=stu[first].math+stu[first].english+stu[first].database;

stu[first].average=int(float(stu[first].sum)/3.0+0.5);} else {

cout<<“message error.”<

last=i-1;

mid=(first+last)/2;} Cscore(i);

修改后程序经运行后结果如下:

结果发现修改后的程序运用了二分查找法、多重嵌套等,能较好的实现对学生的信息以学号为序进行了多个数据的有序插入。

下载长安大学C++设计 学生成绩管理系统实验报告word格式文档
下载长安大学C++设计 学生成绩管理系统实验报告.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    PHP学生成绩管理系统综合实验报告(模版)

    一、 实验目的: 1、掌握PHP基本语法及应用。 2、掌握SESSION和COOKIE的使用。 3、掌握使用PHP和页面进行交互。 4、掌握PHP图像处理应用。 5、掌握MySQL数据库的使用及使用PH......

    oracle学生成绩管理系统设计

    阶段1.1成绩管理系统实体关系设计 一、实验目的和要求 (1)熟练掌握实体关系设计的方法。 (2)通过需求分析结果,掌握E-R图。 二、实验内容和原理 实体关系设计是在需求分析的一个......

    学生成绩管理系统设计学案

    学生成绩管理系统设计学案 一、教学目标 1、 能力目标 能够进行需求分析,设计要实现的功能,并能画出数据流图、设计数据字典、E-R图。 2、 知识目标 (1)掌握需求分析的方法 (2)概......

    c语言实验报告三 学生成绩管理系统

    1. 实验内容 实现一个学生成绩处理程序,先输入多名学生的学号和成绩,然后进入菜单,可以选择打印,添加,修改,删除或查询成绩(学号查询和成绩段查询)。 2. 实验步骤 2.1 程序1 2.1.1......

    学生成绩管理系统

    //*学生成绩管理系统*// #include #define N 3 struct student { int no; char name[20]; float english; float computer; float math; float average; }; void getclass(s......

    学生管理系统实验报告

    数据库课程设计报告-----学生管理系统一、需求分析根据老师的要求,我主要把精力集中在学生选课的功能实现上,角色分为管理员与学生 实现功能包括如下两部分:A.学生端实现功能:1.系......

    SQL基于.net的学生成绩管理系统实习实验报告

    SQL实习《学生成绩管理系统》——ASP.NET/SQL Server班级:姓名:学号:【实验名称】:基于.net的学生成绩管理系统【实验目的】:熟悉基于.net设计系统的步骤和方法【实验步骤】:1、新......

    简单学生信息管理系统C++范文

    #include #include using namespace std; int i=0; void layout() { cout......