9512.net
甜梦文库
当前位置:首页 >> IT/计算机 >>

C++课程设计学生成绩管理 [文档在线提供]


学校
C++ 程 序 设 计

课程设计报告

选题名称: 选题名称 系(院): 专 班 姓 业: 级: 名:

成绩管理



号:

指导教师: 指导教师 学年学期: 学年学期 ~ 学年 第 学期







摘要: 随着科学技术的发展,计算机领域不断取得新的研究成果.计算机在代替和延伸 脑力劳动方面发挥越来越重要的作用,不仅在工业方面而且在日常生活中也越来越离 不开计算机.尤其是在学校里,要处理大量的学生数据.随着科学技术的不断提高,计 算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并 发挥着越来越重要的作用.作为计算机应用的一部分,使用计算机对学生成绩信息进行 管理,有着手工管理所无法比拟的优点. 学生成绩管理系统能方便用户迅速,准确处理学生的成绩,得到想要的数据并能 将学生的信息以文档保存.本文介绍了简易学生成绩管理系统在 Microsoft Visual C++ 6.0 环境下的实现过程:系统的分析,功能模块的设计,系统的调试和测试.此系统的 主要管理的信息有:学生的班级,学号,姓名和三(可以更改)门课的成绩.本系统的主 要功能有学生成绩的添加,删除,插入,显示,能对学生成绩按分数或学号进行排序, 可以根据用户的要求按班级,姓名,学号查询学生的成绩信息,计算每位学生的总分 和均分,计算所有同学的总分和平均分,分类汇总统计每门课的的总分均分能保存信 息到文件以及从文件中读取信息等功能.

关键词:学生成绩管理系统;功能模块(函数) ;指针;结构;链表;文件保存及读取.

目 录
1 需求分析 1
1.1 功能需求分析: 1 1.2 环境需求分析: 1 1.3 方法需求分析 1

2 概要设计 2
2.1 系统功能模块图 2 2.2 设计思想: 2

3 详细设计 3
3.1 设计原理 3 3.2 主要代码描述 3 3.3 程序详细代码 7 3.4 系统界面 16

4 调试与操作说明 17
4.1 调试过程 17 4.2 操作说明 24

总 致

结 25 谢 26

《C++程序设计课程设计报告》

1 需求分析
1.1 功能需求分析: 功能需求分析:
简易学生成绩管理系统主要有 4 个大的模块:学生成绩从文件读入和写入,学生 成绩的输入和删除,学生成绩信息的查询,以及学生成绩的分类汇总. 1.11 学生成绩的读入和写出模块 主要功能是读出要管理的成绩文档,保存修改后的成绩文档.实际生活中学生成 绩的文件主要以 word 或 excel 保存,为了方便操作我在调式本系统中成绩文件采用了 txt 的文档格式保存,当然以 word 文档形式保存也是可以的. 1.12 学生成绩输入删除模块 主要功能是输入,追加,删除学生成绩的操作.添加操作是根据用户的要求实现 的.例如用户可以输入要删除学生的学号删除学生的信息.此程序输入学生成绩时就 计算个人的总分和均分,并保存到数据结构中相应的变量中. 1.13 学生成绩的查询模块 主要功能是按照用户的要求查询学生的成绩.其中用户可以选择查询单个学生的 成绩还是某个班级的成绩,成绩查询中包括个人学生的总分和平均分,. 1.14 学生成绩的分类汇总模块 统计主要功能是某个班级的每门学科的总分和平均分.

1.2 环境需求分析: 环境需求分析:
操作系统: Windows XP 开发软件: Visual C++ 6.0

1.3 方法需求分析
由于数组存放数据的时候要先确定数组的规模,不能动态的分配内存空间,而单 链表是非连续存放的,可以对内存空间进行动态分配,此系统是用单链表完成的. 然后定义链表的结点类型为结构就可以实现对学生学号,姓名,成绩,班级等学保存. 每次只要返回头指针,就可以对整个链表进行操作,因此选链表来存放学生信息.
1

《C++程序设计课程设计报告》

2 概要设计
2.1 系统功能模块图

学 生 成 绩 管 理 系 统

链 表 的 初 始 化

输 入 学 生 成 绩

删 除 学 生 成 绩

显 示 学 生 成 绩

按 姓 名 找 学 生

保 存 学 生 成 绩

读 取 学 生 成 绩

计 算 总 分 均 分

学 生 成 绩 排 序

按 学 号 查 成 绩

分 类 合 计

2.2 设计思想: 设计思想:
学生成绩管理系统是用面向对象的方法设计,由于数组的存放是连续的,而单链 表是非连续存放的,是动态分配内存空间,因此此系统采用单链表来完成.各个功能 模块的实现主要转变到对单链表的遍历,添加和删除结点.

2

《C++程序设计课程设计报告》

3 详细设计
3.1 设计原理
学生成绩管理系统以菜单选择,通过调用各个函数,对单链表的遍历,实现不同的 功能,不同函数处理后返回的只是一个头结点,但是通过头结点可以找到所有链表中 的信息,只要有函数,找到头指针就能进行相应的操作,所以模块化的程序方便以后 添加或者删除某些功能,程序中通过 system("cls")清屏函数实现界面的转换,主函数中 的循环保证程序不会退出,一个循环和一个清屏函数实现了主菜单和各子画面的切换 (子函数) .这样的话各个子函数都可以调用一开始输入的数据,这样就实现了各个不 同函数调用时都能使用整个系统连续起来了.作为一个学生成绩管理系统,增加了文 件的读入和写出功能,增加了程序的实用性.

3.2 主要代码描述 主要代码描述
3.21 学生信息输入的实现; 通过创建单链表,对链表中各个结点,而此结点是结构类型的,可以给各个结点赋 不同学生的的信息,输入后就把各个学生的总分,均分计算好并存入结构变量中.最 后返回的是头指针,主函数只要找到这个头指针就可以对其进行需要的操作.创建链 表的具体代码如下: //创建链表 student *creat() { int i;int s;student *h=NULL,*ps1,*pend1;char flag; system("cls"); cout<<"请输入信息..."<<endl; do{ ps1=new student; //开辟一个新的结点 cout<<"输入班级:"; cin>>ps1->cla; cout<<"输入学号:"; cin>>ps1->no; cout<<"输入姓名:"; cin>>ps1->name; cout<<"请输入"<<N<<"门课的分数"<<endl; s=0;
3

《C++程序设计课程设计报告》

for(i=0;i<N;i++) { do { cout<<"输入第"<<i+1<<"门课成绩:"; cin>>ps1->score[i]; if(ps1->score[i]>100||ps1->score[i]<0) cout<<"输入的成绩不正确,请重新输入"<<'\n'; }while(ps1->score[i]>100||ps1->score[i]<0); s=s+ps1->score[i]; } ps1->sum=s; ps1->average=(float)s/N; ps1->order=0; //未排序前此值为 0 if(h==NULL) h=ps1; else pend1->next=ps1; pend1=ps1; //创建链表 cout<<"是否继续输入学生信息(y or n)?"; cin>>flag; }while(flag=='y'||flag=='Y'); //提示是否继续输入学生的信息 pend1->next=NULL; //给链表尾赋空值 return h; } 3.22 学生成绩删除的实现 删除学生成绩是这样实现的:通过两个辅助指针找到链表中要删除的学生信息所 在的结点,让辅助指针的前驱辅助指针指向辅助指针的后一结点,这样辅助指针所指 项就自动从链表中删除了,然后输出该学生的信息以确认是否是该学生,是的话按任 一键就可删除,最后返回头指针.具体代码如下: //删除记录 student *delet(student *h) { system("cls"); student *ps2,*pend2; char s[30]; cout<<"输入要删除记录的学号:"<<endl; cin>>s; pend2=h; ps2=h; while(strcmp(ps2->no,s)&&ps2!=NULL) //当记录的学号不是要找 { pend2=ps2; //将 p 的指针赋给 q 指针作为 p 的前驱指针
4

《C++程序设计课程设计报告》

ps2=ps2->next;

//将 p 指向下一条记录

} if(ps2==NULL) //如果 p 为空,说明链表中没有该结点 cout<<"没有学号为"<<s<<"的同学"<<endl; else //p 不为空时,显示找到的记录信息 { cout<<"**************已经找到****************"<<endl; cout<<" 班 级 "<<'\t'<<" 学 号 "<<'\t'<<" 姓 名 "<<'\t'<<" 成 绩 1"<<'\t'<<" 成 绩 2"<<'\t'<<"成绩 3"<<'\t'<<"总分"<<'\t'<<"平均分"<<"名次"<<endl; cout<<"----"<<'\t'<<"--------"<<'\t'<<"----"<<'\t'<<"-----"<<endl; cout<<ps2->cla<<'\t'<<ps2->no<<ps2->name<<'\t'<<ps2->score[0]<<'\t'<<ps2->sc ore[1]<<'\t'<<ps2->score[2]<<'\t'<<ps2->sum<<'\t'<<ps2->a verage<<"\t"<<ps2->order<<endl; cout<<"***************结束***************"<<endl; cout<<"按任意一键删除该学生的记录"<<endl; getch(); //压任一键后,开始删除 if(ps2==h) //如果 p==h,说明被删除结点是头结点 h=ps2->next; else pend2->next=ps2->next;//不是头指针,将 p 的后继结点作为 q 的后继结点 cout<<"不要忘记保存文件"<<endl; } return h; } 3.23 成绩排序的实现: 本系统排序有两种方法,用到的是插入排序法(参照的是教学用的 PPT 文件) .按 照分数排序的代码如下: //按照分数排序 student *sort(student *h) { system("cls"); int i=0; //保存名次

student *p5,*q5,*h1,*t; h1=h->next;//将原表的头指针所指的下一个结点作头指针 h->next=NULL;//第一个结点作为新表的头结点 while(h1!=NULL)//当原表不为空时,进行排序 { t=h1;//取原表的头结点 h1=h1->next;//原表结点指针后移
5

《C++程序设计课程设计报告》

p5=h;//设定移动指针 p,从头指针开始 q5=h;//设定移动指针 q 为 p 的前驱初值为头指针 while(t->sum<p5->sum&&p5!=NULL)//作总分比较 { q5=p5; p5=p5->next; } if(p5==q5) { t->next=p5; h=t; } else //待排序点应插入在中间某个位置 q 和 p 之间,如 p 为空指针尾部 { t->next=p5 5->next=t; } } p5=h; while(p5!=NULL) { i++;//结点序号 p5->order=i; p5=p5->next; } Cout<<"排序成功!\n"; return h; } //返回头指针 //将名次赋值 //指针后移 //已排好序的头指针赋给 p,准备填写名次 //当 p 不为空时,进行下列操作 ;//后继是 p //待排序点后继为 p //新头结点为待排序点 //p=q 说明排序点值小,应排在首位 //待排序点值小,则新表指针后移

3.24 成绩查询显示分类汇总模块 查找相关学生信息只要输入学生的名字,进行链表的遍历查找到后统计成绩
6

《C++程序设计课程设计报告》

具体代码见 3.3 中.

3.3 程序详细代码
#include<iostream.h> #include<stdio.h> //I/O 函数 #include<stdlib.h> //其他说明 #include<string.h> //字符串函数 #include<conio.h> //屏幕操作函数 #define N 3 //定义常数 struct student //定义数据结构 { char cla[30]; char no[30]; char name[30]; int score[N]; float sum; float average; int order; student *next; }; //初始化函数 student *init() { system("cls"); cout<<"完成初始化链表......."<<endl<<endl; return NULL; } //创建链表 student *creat() { int i;int s;student *h=NULL,*ps1,*pend1;char flag; system("cls"); cout<<"请输入信息..."<<endl; do{ ps1=new student; //开辟一个新的结点 cout<<"输入班级:"; cin>>ps1->cla; cout<<"输入学号:"; cin>>ps1->no; cout<<"输入姓名:"; cin>>ps1->name; cout<<"请输入"<<N<<"门课的分数"<<endl; s=0; for(i=0;i<N;i++)
7

《C++程序设计课程设计报告》

{ do { cout<<"输入第"<<i+1<<"门课成绩:"; cin>>ps1->score[i]; if(ps1->score[i]>100||ps1->score[i]<0) cout<<"输入的成绩不正确,请重新输入"<<'\n'; }while(ps1->score[i]>100||ps1->score[i]<0); s=s+ps1->score[i]; } ps1->sum=s; ps1->average=(float)s/N; ps1->order=0; //未排序前此值为 0 if(h==NULL) h=ps1; else pend1->next=ps1; pend1=ps1; //创建链表 cout<<"是否继续输入学生信息(y or n)?"; cin>>flag; }while(flag=='y'||flag=='Y'); //提示是否继续输入学生的信息 pend1->next=NULL; //给链表尾赋空值 return h; } //删除记录 student *delet(student *h) { system("cls"); student *ps2,*pend2; char s[30]; cout<<"输入要删除记录的学号:"<<endl; cin>>s; pend2=h; ps2=h; while(strcmp(ps2->no,s)&&ps2!=NULL) //当记录的学号不是要找 { pend2=ps2; //将 p 的指针赋给 q 指针作为 p 的前驱指针 ps2=ps2->next; //将 p 指向下一条记录 } if(ps2==NULL) //如果 p 为空,说明链表中没有该结点 cout<<"没有学号为"<<s<<"的同学"<<endl; else //p 不为空时,显示找到的记录信息 { cout<<"******************已经找到****************"<<endl; cout<<" 班 级 "<<'\t'<<" 学 号 "<<'\t'<<" 姓 名 "<<'\t'<<" 成 绩 1"<<'\t'<<" 成 绩 2"<<'\t'<<"成绩 3"<<'\t'<<"总分"<<'\t'<<"平均分"<<" "<<"名次"<<endl;
8

《C++程序设计课程设计报告》

cout<<"----"<<'\t'<<"----------"<<'\t'<<"------"<<'\t'<<"-----"<<'\t'<<"-----"<<'\t'<<"----"<<'\t'<<"----"<<'\t'<<"--------"<<" "<<"----"<<endl; cout<<ps2->cla<<'\t'<<ps2->no<<ps2->name<<'\t'<<ps2->score[0]<<'\t'<<ps2->sco re[1]<<'\t'<<ps2->score[2]<<'\t'<<ps2->sum<<'\t'<<ps2->av erage<<"\t"<<ps2->order<<endl; cout<<"*****************结束********************"<<endl; cout<<"按任意一键删除该学生的记录"<<endl; getch(); //压任一键后,开始删除 if(ps2==h) //如果 p==h,说明被删除结点是头结点 h=ps2->next; else pend2->next=ps2->next;//不是头指针,将 p 的后继结点作为 q 的后继结点 cout<<"不要忘记保存文件"<<endl; } return h; } //输出链表中的结点信息 void print(student *h) { int i=0; student *p1; system("cls"); p1=h; cout<<"****************学生信息*********************"<<'\n'; cout<<"班级"<<'\t'<<"学 号"<<'\t'<<"姓 名"<<'\t'<<"成绩 1"<<'\t'<<"成绩 2"<<'\t'<<"成绩 3"<<'\t'<<"总分"<<'\t'<<"平 均 分"<<" "<<"名次"<<endl; cout<<"----"<<'\t'<<"----------"<<'\t'<<"------"<<'\t'<<"-----"<<'\t'<<"-----"<<'\t'<<"-----" <<'\t'<<"----"<<'\t'<<"--------"<<" "<<"----"<<endl; while(p1!=NULL) { i++; cout<<p1->cla<<'\t'<<p1->no<<"\t"<<p1->name<<'\t'<<p1->score[0]<<'\t'<<p1->s core[1]<<'\t'<<p1->score[2]<<'\t'<<p1->sum<<'\t'<<p1->average<<"\t"<<p1->order <<endl; p1=p1->next; } cout<<"**********结束*************************"<<endl; } //查找记录 void search(student *h) { system("cls"); student *p2; char s[15]; cout<<"请输入要查找的姓名"<<endl; scanf("%s",s);
9

《C++程序设计课程设计报告》

p2=h; while(strcmp(p2->name,s)&&p2!=NULL)//当记录姓名不是要找,或指针不为空时 p2=p2->next; if(p2==NULL) cout<<"没有"<<s<<"这位学生"<<endl; else { cout<<"*****************已经找到*******************"<<endl; cout<<"班级"<<'\t'<<"学 号"<<'\t'<<"姓 名"<<'\t'<<"成绩 1"<<'\t'<<"成绩 2"<<'\t'<<"成绩 3"<<'\t'<<"总分"<<'\t'<<"平 均 分"<<" "<<"名次"<<endl; cout<<"----"<<'\t'<<"----------"<<'\t'<<"------"<<'\t'<<"-----"<<'\t'<<"-----"<<'\t'<<"----"<<'\t'<<"----"<<'\t'<<"--------"<<" "<<"----"<<endl; cout<<p2->cla<<'\t'<<p2->no<<p2->name<<'\t'<<p2->score[0]<<'\t'<<p2->score[1] <<'\t'<<p2->score[2]<<'\t'<<p2->sum<<'\t'<<p2->average<<"\t"<<p2->order<<endl ; cout<<"*****************结束**********************"<<endl; } } //保存数据到文件 void save(student *h) { system("cls"); FILE *fp; //定义指向文件的指针 student *p3; //定义移动指针 char outfile[30]; //保存输出文件名 cout<<"输入保存文件的名字,例如 D:\zxc.txt\t";//提示文件名格式信息 cin>>outfile; if((fp=fopen(outfile,"wb"))==NULL) //为输出打开一个二进制文件,如没建立 { cout<<"不能打开文件!"<<endl; exit(1); } cout<<"正在保存......."<<endl; //打开文件,提示正在保存 p3=h; //移动指针从头指针开始 while(p3!=NULL) { fwrite(p3,sizeof(student),1,fp); //写入一条记录 p3=p3->next; //指针后移 } fclose(fp); //关闭文件 cout<<"--------保存成功!---------\n"; } //从文件读数据 student *load() { system("cls");
10

《C++程序设计课程设计报告》

student *ps3,*pend3,*h=NULL; FILE *fp; //定义指向文件的指针 char infile[30]; //保存文件名 ciut<<"输入要读取文件的名字,例如 D:\zxc.txt\n"; cin>>infile; //输入文件名 if((fp=fopen(infile,"rb"))==NULL) //打开一个二进制文件,为读方式 { cout<<"不能打开"<<endl; exit(1); } cout<<"------读取文件中!------"<<endl; ps3=new student; h=ps3; while(!feof(fp)) //循环读数据直到文件尾结束 { if(1!=fread(ps3,sizeof(student),1,fp)) break; ps3->next=new student; pend3=ps3; //保存当前结点的指针,作为下一个结点的前驱 ps3=ps3->next; } pend3->next=NULL; fclose(fp); cout<<"----你已经成功从文件中读取数据----\n"; return h; } //计算总分和均值 void computer(student *h) { student *p4; int i=0; long s=0; float average=0; p4=h; system("cls"); while(p4!=NULL) { s+=p4->sum; i++; p4=p4->next; } average=(float)s/i; cout<<"所有学生的总分是"<<s<<'\t'<<"平均分为"<<average<<endl; } //排序 student *sort(student *h)
11

《C++程序设计课程设计报告》

{ system("cls"); int i=0; //保存名次 student *p5,*q5,*h1,*t; h1=h->next; //将原表的头指针所指的下一个结点作头指针 h->next=NULL; //第一个结点作为新表的头结点 while(h1!=NULL) //当原表不为空时,惊醒排序 { t=h1; //取原表的头结点 h1=h1->next; //原表结点指针后移 p5=h; //设定移动指针 p,从头指针开始 q5=h; //设定移动指针 q 为 p 的前驱初值为头指针 while(t->sum<p5->sum&&p5!=NULL)//作总分比较 { q5=p5; //待排序点值小,则新表指针后移 p5=p5->next; } if(p5==q5) //p=q 说明排序点值小,应排在首位 { t->next=p5; //待排序点后继为 p h=t; //新头结点为待排序点 } else/ /待排序点应插入在中间某个位置 q 和 p 之间,如 p 为空指针尾部 { t->next=p5; //后继是 p q5->next=t; } } p5=h; //已排好序的头指针赋给 p,准备填写名次 while(p5!=NULL) //当 p 不为空时,进行下列操作 { i++; //结点序号 p5->order=i; //将名次赋值 p5=p5->next; //指针后移 } Cout<<"排序成功!\n"; return h; //返回头指针 } student *index(student *h) { int i=0; //保存名次 student *p6,*q6,*h11,*t1; h11=h->next; //将原表的头指针所指的下一个结点作头指针 h->next=NULL; //第一个结点作为新表的头结点 while(h11!=NULL) //当原表不为空时,惊醒排序
12

《C++程序设计课程设计报告》

{ t1=h11; //取原表的头结点 h11=h11->next; //原表结点指针后移 p6=h; /设定移动指针 p,从头指针开始 q6=h; //设定移动指针 q 为 p 的前驱初值为头指针 while(strcmp(t1->no,p6->no)>0&&p6!=NULL)//作总分比较 { q6=p6; //待排序点值小,则新表指针后移 p6=p6->next; } if(p6==q6) //p=q 说明排序点值小,应排在首位 { t1->next=p6; //待排序点后继为 p h=t1; //新头结点为待排序点 } else//待排序点应插入在中间某个位置 q 和 p 之间,如 p 为空指针尾部 { t1->next=p6; //后继是 p q6->next=t1; } } p6=h; //已排好序的头指针赋给 p,准备填写名次 while(p6!=NULL) //当 p 不为空时,进行下列操作 { i++;//结点序号 p6->order=i; //将名次赋值 p6=p6->next; //指针后移 } Cout<<"索引排序成功!\n"; return h; //返回头指针 } //追加文件记录 void append() { system("cls"); FILE *fp; student *info; int s1,i; char infile[30]; cout<<"请输入新的学生成绩信息"<<'\n'; info=new student; cout<<"输入班级:"; cin>>info->cla; cout<<"输入学号:"; cin>>info->no; cout<<"输入姓名:";
13

《C++程序设计课程设计报告》

cin>>info->name; cout<<"请输入"<<N<<"门分数"<<endl; s1=0; for(i=0;i<N;i++) { do{ cout<<"输入第"<<i+1<<"门课成绩"; cin>>info->score[i]; if(info->score[i]>100||info->score[i]<0) cout<<"数据错误,请重新输入"<<endl; }while(info->score[i]>100||info->score[i]<0); s1=s1+info->score[i]; } info->sum=s1; //保存总分 info->average=(float)s1/N; //求均分 info->order=0; //名次初始值为 0 info->next=NULL; //将新记录后继指针赋值为空 cout<<"输入要读取文件的名字,例如 E:\zxc.txt\n"; cin>>infile; if((fp=fopen(infile,"ab"))==NULL) //向二进制文件尾增加数据方式打开文件 { cout<<"不能打开文件"<<endl; exit(1); } cout<<"\n------正在写入文件.....------\n"; if(1!=fwrite(info,sizeof(student),1,fp)) //写文件操作 { cout<<"----文件写入错误!----\n"; return; } cout<<"----写入成功!----"<<endl; fclose(fp); }

//分类合计 void total(student *h) { system("cls"); int i=0; float s[N]={0},a[N]={0}; while(h!=NULL) { s[0]+=h->score[0]; s[1]+=h->score[1]; s[2]+=h->score[2];
14

《C++程序设计课程设计报告》

h=h->next; i++; } a[0]=s[0]/i; a[1]=s[1]/i; a[2]=s[2]/i; cout<<"成绩 1:"<<"---\t"<<"成绩 2"<<"---\t"<<"成绩 3-----"<<endl; cout<<"总分:"<<'\t'<<"均分:"<<'\t'<<"总分:"<<'\t'<<"均分:"<<'\t'<<"总分:"<<'\t'<<" 均分:"<<endl; cout<<s[0]<<'\t'<<a[0]<<'\t'<<s[1]<<'\t'<<a[1]<<'\t'<<s[2]<<'\t'<<a[2]<<endl<<endl<< endl; } //菜单函数,返回值为整数 int menu_select() { char *menu[]= {"\n================菜单===================================\n\n", 链表的初始化 |\n", "| 0. "| 1. 输入学生成绩 |\n", "| 2. 删除学生成绩 |\n", 显示学生成绩 |\n", "| 3. "| 4. 按姓名找学生 |\n", 保存学生成绩 |\n", "| 5. "| 6. 读取学生成绩 |\n", "| 7. 计算总分均分 |\n", 学生成绩排序 |\n", "| 8. "| 9. 按学号查成绩 |\n", |\n", "| 10. 插入学生成绩 "| 11. 分类合计 |\n", "| 12. 退出 |\n", }; int c,i; cout<<"\n 按任意一键进入主菜单......\n"; getch(); //输入任一键 system("cls"); cout<<" 欢迎使用我的学生成绩管理系统"<<endl; for(i=0;i<14;i++) { cout<<menu[i];} cout<<"================================================="<<endl<<e ndl; do{ cout<<"输入你的选择(0~12):"; cin>>c; }while(c<0||c>12); return c;
15

《C++程序设计课程设计报告》

} void main() { int i=1; char a; student *head; while(i>0) { system("cls"); switch (menu_select())//调用主菜单函数,返回值整数作开关语句的条件 { //值不同,执行的函数不同,break 不能省略 case 0:head=init();break; //执行初始化 case 1:head=creat();break; //创建链表 case 2:head=delet(head);break; //删除记录 case 3:print(head);break; //显示全部记录 case 4:search(head);break; //查找记录 case 5:save(head);break; //保存文件 case 6:head=load();break; //读文件 case 7:computer(head);break; //计算总分和均分 case 8:head=sort(head);break; //排序 case 9:head=index(head);break; case 10:append();break; //追加记录 case 11:total(head);break; //分类合计 case 12:exit(0); //如菜单返回值为 14 程序结 } i=-1; cout<<"是否返回菜单(y or n)?"; cin>>a; if(a=='y'||a=='Y') i=1; } } 注意:以上代码为了格式整齐已做了适当的修改,和原代码可能有不同,像一些输出 格式可能不整齐.运行请用原代码.

3.4 系统界面
系统主菜单列出了该程序的所有功能, 学生个人的总分, 平均分在输入创建链表是 就计算好并储存好了,同时显示学生信息是就一起显示出来了,使用时该适当的使用 第一个初始化链表的功能,否则可能出现意想不到的错误.
界面图 01:

16

《C++程序设计课程设计报告》

图 01

4 调试与操作说明
4.1 调试过程
初始化功能可防止指针以外指向不该指的地点,防止出现错误: 初始化如图 02:

图 02

17

《C++程序设计课程设计报告》

为了便于程序的调试,先输入了几个学生的信息并存如文件中,如图 03:

图 03 对学生成绩按总分进行排序(图 04) :

图 04

18

《C++程序设计课程设计报告》

如图 05:排序后名次出现

图 05 保存学生信息到 1.txt 文件(如图 06) :

图 06
19

《C++程序设计课程设计报告》

如图 07,保存到文件后,以后就可以通过 6 功能直接读入:

图 07 查找学生信息: (如图 08)

图 08

计算每门成绩的总分和平均分(图 09) :

图 09
20

《C++程序设计课程设计报告》

计算所有学生的总分和平均分(图 10):

图 10 插入新的学生信息: (图 11)

图 11

21

《C++程序设计课程设计报告》

如图 12,读入后的数据显示(前三名同学已排过序已按成绩排好序的):

图 12 按学生学号排序(图 13) :

图 13

22

《C++程序设计课程设计报告》

删除学生信息(图 14):

图 14

删除 1071301101 同学成绩后如图 15 显示:

图 15
23

《C++程序设计课程设计报告》

按 12 则如图退出该系统: (如图 16)

图 16

4.2 操作说明
一个成绩管理系统如果不能进行文档的读出和写入的操作,功能再多,程序关闭 后,所做的操作都将没有,这就失去了实际的意义.此系统当用户退出系统时,用户 可以选择是否保存已做的修改.当用户任意选择一个操作时,系统将会提示.此外在 输入成绩时,输入错误的数字系统可以提示错误,但是如果输入标点和字母时,系统 将会出错,因此输入成绩时不可以输入字母和标点.此外,注意适当的使用链表初始 化,防止出现意外错误,例如,一开始不初始化就显示学生信息,由于链表还未创建, 会出现内存不能为 read 的错误.提示是否返回主菜单,如果不返回则自动提示退出系 统,选择是的话返回主菜单.

24

《C++程序设计课程设计报告》





一开始知道课题后,以为很简单,但我想如果用数组实现的话,在内存中是以连 续地址存放的,不方便操作,所以我选择了使用链表,它可以实现无序的在内存中存 放,只要有一个头结点,就可以对整个链表进行相关的操作,在调式时遇到了很多问 题,最多的是指针问题引起的内存不能为 read,因此指针这一块知识还得好好的加强, 当我将学生成绩管理系统的程序调试完毕后,心里感到轻松了许多,但还是对自己的 程序不最满意,因为有时还是会出现内存不能 read.我现在体会到程序的调试是相当 的重要的.在使用指针时要特别注意用过后的指针不使用就要删除,已防出错.链表 的尾部要指向 NULL,这点需特别注意的. 成绩管理系统如果只是将结果在屏幕显示后就不存在了,就没有意义了,于是我 添加了文件的读出和写入的功能,写入时如果没有目标文件,则系统会自动在目标文 件夹里生成一个文件用来储存用户数据,该文件类型可以按用户要求生成,如 txt 文本 文档或 doc 文档等.编写这次代码,在如何进行成绩排序上费了些力气,虽然老师讲 过冒泡排序和选择排序,可是运用到单链表上就着实感到困难了,参考了老师 PPT 上 的插入排序方法实现了,我调试程序的时候用无效数据测试时,没有用特殊的符号去 测试,我用一些符号测试了我的程序,结果如我所料,程序出现了错误,我没有找到 解决的方法.如果我能解决上述缺点,我想这个程序应该算是合格了. 不管怎么说,这次课程设计还是锻炼了我编写程序的能力,对以前学过的知识有 了进一不的了解,特别是链表这一知识点. 此次课程设计最大的收获是:学会了自己学习. C++我会好好学的,真的很有用!

25

《C++程序设计课程设计报告》





衷心的感谢老师给了精心的指导和热情的帮助,这样使得我们得以顺利的完成课程 设计开发工作,感谢我的导师,一丝不苟给我留下了深刻的印象,在课程设计即将完成 之际,我的心情无法平静,从开始进入课题到文章的顺利完成,有多少人给了我无言 的帮助,在这里请接受我诚挚的谢意! 谢谢各位老师在这段时间内给予的帮助支持,让我有信心完成这个课程,也谢谢 学校提供的学习环境,让我能够有条件来完成这项课程,感谢同学们这些天的共同努 力,给我的鼓励,感谢大家给我的帮助,最后,也要谢谢自己的不懈努力,让自己温 顾了学的知识外又学了很多新的知识.

26

《C++程序设计课程设计报告》

参考文献
1.于长辉,C++程序设计课程设计指导书,淮阴工学院 2.吴乃陵,C++程序设计,高等教育出版社 3. 聂雪军(译) ,C++捷径教程(第三版) ,清华大学出版社 4.刘天印,C++程序设计,北京大学出版社 5.教学用 PPT(7 指针与引用,8 结构与链表) 6.百度网络资源(strlen_百度百科,C++语言程序设计等)

27

指导教师评语
学号 选题 名称 序号 1 2 3 评价内容 考勤记录,学习态度,工作作风与表现. 自学情况: 上网检索机时数,文献阅读情况(笔记) . 论文选题是否先进, 是否具有前沿性或前瞻性. 成果验收: 4 是否完成设计任务;能否运行,可操作性 如何等. 报告的格式规范程度,是否图文并茂,语言规 范及流畅程度;主题是否鲜明,重心是否突出, 5 论述是否充分,结论是否正确;是否提出了自 己的独到见解. 6 文献引用是否合理,充分,真实. 答辩情况: 7 自我陈述,回答问题的正确性,用语准确 性,逻辑思维,是否具有独到见解等. 合计 25 5 30 20 10 5 姓名 班级

成绩管理
权重(%) 5 得分

指导教师(签章) :








赞助商链接

更多相关文章:
C++课程设计学生成绩管理_[文档在线提供]
C++课程设计学生成绩管理_[文档在线提供] - 学校 C++ 程序设计 课程设计报告 选题名称: 选题名称 系(院): 专班姓业: 级: 名: 成绩管理 学 号: 指导...
C++课程设计报告(学生成绩管理系统)
暂无评价|0人阅读|0次下载 | 举报文档 标签: 工学| 学生成绩| 课程设计| 管理系统|C++课程设计报告(学生成绩管理系统)_工学_高等教育_教育专区。面向对象编程...
学生成绩管理系统C++课程设计
享专业文档下载特权 赠共享文档下载特权 100W篇文档免费专享 每天抽奖多种福利 立即...学生成绩管理系统C++课程设计_工学_高等教育_教育专区。信息科学与技术学院 程序...
C++课程设计(学生成绩管理系统)
暂无评价|0人阅读|0次下载|举报文档C++课程设计(学生成绩管理系统)_管理学_高等教育_教育专区。C++成绩管理系统 《面向对象程序设计》课程设计报告设计题目 学生姓名...
C++课程设计学生成绩管理 [文档在线提供]
C++课程设计学生成绩管理 [文档在线提供] - 学校 C++ 程序设计 课程设计报告 选题名称: 选题名称 系(院): 专班姓业: 级: 名: 成绩管理 学 号: 指导...
C++学生成绩管理系统课程设计报告
暂无评价|0人阅读|0次下载|举报文档C++学生成绩管理系统课程设计报告_工学_高等教育_教育专区。C++ 成绩管理系统 C++面向对象程序设计课程设计 设计题目:成绩管理系统...
C++课程设计结构体'-学生成绩管理系统用结构体
暂无评价|0人阅读|0次下载 | 举报文档 C++课程设计结构体'-学生成绩管理系统用结构体_工学_高等教育_教育专区。C++课程设计结构体'-学生成绩管理系统用结构体 C+...
c++面向对象课程设计报告_(学生成绩管理系统)
暂无评价|0人阅读|0次下载 | 举报文档 c++面向对象课程设计报告_(学生成绩管理系统)_工学_高等教育_教育专区。C++语言编写,附加设计过程,运行截图 课程...
C++学生成绩管理系统课程设计报告
暂无评价|0人阅读|0次下载 | 举报文档 标签: 学生成绩| 课程设计| 管理系统|C++学生成绩管理系统课程设计报告_电脑基础知识_IT/计算机_专业资料。C++学生成绩管...
数据结构课程设计-学生成绩管理系统(C++)
暂无评价|0人阅读|0次下载 | 举报文档 数据结构课程设计-学生成绩管理系统(C++)_工学_高等教育_教育专区。数据结构课程设计-学生成绩管理系统(C++) 课程...
更多相关标签:

All rights reserved Powered by 甜梦文库 9512.net

copyright ©right 2010-2021。
甜梦文库内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图