《C++》课程设计学生成绩管理系统Word下载.docx
- 文档编号:20515035
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:30
- 大小:87.36KB
《C++》课程设计学生成绩管理系统Word下载.docx
《《C++》课程设计学生成绩管理系统Word下载.docx》由会员分享,可在线阅读,更多相关《《C++》课程设计学生成绩管理系统Word下载.docx(30页珍藏版)》请在冰豆网上搜索。
C++语言面向对象的编程思想来完成系统的设计,突出函数特征,以多个函数实现每一个子功能,并且画出功能模块图,进行简单界面设计,能够实现友好的交互;
另一方面要具有清晰的程序流程图和数据结构的详细定义,熟练掌握C++语言对文件的各种操作。
据学生成绩表特点,决定选用链表这种数据结构来作为组成成绩数据库的基本框架。
链表是最简单也是最常用的一种动态数据结构。
它是对动态获得的内存进行组织的一种结构。
选用链表有即用即申请,不会造成内存空间的浪费;
数据之间既有独立性,又便于数据的相互连系;
便于
数据的添加及删除等优点。
而用模块化程序设计理念,对各个功能定义不同函数分块处理,这样有利于后期调试及今后对功能的完善。
功能图如下:
每条链表有自己独立的函数和特定的功能,“学生信息管理”里面包含了学生成绩的排序等特有函数,而且主函数简单易懂明了。
其中三条链表中都有上面所画功能图的功能,让人能一目了然。
3系统设计
经过我们的讨论决定将“学生成绩管理系统”分为三块,包括学生基本信息管理系统、学生课程管理系统和班级管理系统。
每个人各自负责自己的一部分,然后共同讨论,编写出主函数。
主要编写部分学生基本信息管理系统:
学生信息管理系统内共包含了7个不同的函数,而每一个函数是一个模块,并对它们具体编写,使之具有不同的功能,能实行相应的操作。
3.1各模块功能分析
1.增添学生信息:
增添学生信息包括增添学生的姓名、学号、基本科目的成绩等,用voidsadd()函数去实现。
2、删除学生信息:
具体定义voidsremove();
函数,使之实现其功能。
3、查找学生信息:
定义voidssearch()函数去具体实现其操作,可以输入学号或姓名找到相应学生的信息,若不存在,则显示“未找到”。
4、排序:
根据学生情况,先定义voidstaxis()函数可选择按学号排序和以总分排序,然后,分别用voidpxh()函数和voidpAA()函数去实现它们的具体功能。
5、保存学生信息:
定义voidssave()函数
6、读取学生信息:
定义voidsread()函数,具体解法可从源程序中得出。
7、处理学生信息模块菜单:
具体功能由voidMenu()函数实现。
此模块可如下编写:
intstudentlist:
:
MenuSelect()//处理学生信息模块菜单
{
chars[10];
intcn;
cout<
<
"
\t**********************\n"
;
\t-----学生信息管理-----\n"
\t1……增加学生\n"
\t2……删除学生\n"
cout<
\t3……修改学生\n"
\t4……查询学生信息\n"
\t5……排序\n"
\t6……保存信息\n"
\t7……读取信息\n"
\t0.返回主菜单\n"
\t选择0-7:
for(;
)
{
gets(s);
cn=atoi(s);
if(cn>
7)
cout<
\n\t输入错误,重选0-7:
else
break;
}
returncn;
}
3.2类、函数及说明
本链表里定义的类如下:
一.
#definemax100000
#include<
string>
usingnamespacestd;
classstudent//定义student类
{
public:
student*next;
stringname;
//学生姓名
longnum;
//学生学号
intx,y,z;
//学生成绩
intAA;
//学生总成绩
voidplay();
//显示函数
student(stringsname,longsnum,intsx,intsy,intsz);
//构造函数
};
二.
#include"
student.h"
classstudentlist
private:
student*stu;
intMenuSelect();
//显示和处理学生信息模块菜单
studentlist()//构造函数初始化
{
stu=0;
sread();
}
~studentlist()//定义析构函数
student*p;
p=stu;
while(p)
{
p=p->
next;
deletestu;
stu=p;
}
voidsadd();
//增添学生信息
voidsremove();
//删除学生信息
voidsamend();
//修改学生信息
voidssearch();
//查找学生信息
voidstaxis();
//排序
voidssave();
//保存学生信息
voidsread();
//读取学生信息
voidpxh();
//以学号排序
voidpAA();
以总分排序
voidMenu();
//处理学生信息模块菜单
3.3重要模块算法
运用“冒泡法”,以学生的学号或总成绩排序:
下面例举出运用指针按学号从小到大排序
voidstudentlist:
pxh()//按学号从小到大排序
student*p1,*p2;
intn;
p1=stu;
n=1;
while(p1->
next)
{n++;
p1=p1->
共有"
n<
条信息..."
endl;
inti;
for(i=1;
i<
n;
i++)
p1=stu;
if(p1->
num>
p1->
next->
num)
p2=p1->
p1->
next=p1->
p2->
next=p1;
stu=p2;
while(p1->
p2=p1;
p1=p1->
if(p1->
{
p2->
p1->
p1=p2->
}
do
p1->
play();
p1=p1->
}while(p1);
}
显示结果下图所示:
按总分从小到大排序
4系统测试
1.界面管理:
进入1,学生资料管理系统
2.主菜单管理:
进入6,排序
可以分为按学号从小到大和按成绩从低到高两种排序方式:
3,功能选择:
4.删除和修改学生信息:
5.保存和读取学生信息:
输入相应的数字,即可以得到相应的结果,进行对应的操作,若操作错误,则会给出相应的提醒。
5心得体会
整整两周的程序设计弄我把本以为开学的轻松抛得一干二净,只是在心中默默地说到“要想把一个程序设计完全弄好还真不是一件简单的是。
”
虽然,上学期我们也搞了C语言程序设计,可跟这次比起来真的是有一定的差距。
因为上学期老师不是抓的太严,所以我们大部分的人的任务是只要把程序看懂就足够了,而源程序一般都是从网上找的,实践报告也马马虎虎就能过了,可这学期完全不同。
因为三个人一组每人都必须要有自己的链表,所以网上的程序一般都不符合老师要求,我们只能认认真真地也了。
在大家的共同努力下,我们总算将此程序设计出来。
尽管不是自己独立完成,但仍然很高兴,因为在设计的过程中,让我了解到要设计一个大型程序,查找资料是至关重要的,在他人的基础上,再根据自己所学进行修改与调试,最后设计出自己想要的程序,这过程艰辛,但只要你持之以恒,成功指日可待。
另外平时扎实的基础也很关键,因为如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。
为了解决此。
类问题,最好就是多向同学,老师请教,不要怕难为情。
尤其是老师,评他们多年的编写程序的经验,要解决我们的问题,对他们来说只是smallcase。
在设计这个程序时,我们刚开始是根据老师给我们提供的资料,用画图以及循环将框架设计出来,但是接下去便无从下手了,计算是个关键和难点,我们也查了相应的资料,但是它上面用得是坐标来做的,所以为了方便设计程序,我们也改为坐标来做的,这样计算问题解决了。
接下去就是按键问题,我们的资料是用鼠标做的,所以关于按键这个函数就只能我们自己设计,还好手头有类似的资料,经过自己的反复尝试以及与与同学的讨论,这也不难,最好还是被我们搞定了。
最后就是闪烁,这个设计的方法很死板,都一个类型,就是算坐标比较烦琐,要确定好它的位置,但是这些只要你自己愿意去尝试,问题都可以迎刃而解的。
在学程序的过程中,还确实遇到了不少麻烦。
首先,因为我们都已经习惯了把所有程序都写在一起,而老师要求必须分模块写,确实这样做对我们真的是有很大的帮助,特别有利于错误的查找;
接着是链表的应用,由于以前很少接触链表,在C语言中我们也只学了一些简单的数组和指针等,而链表是属于数据结构部分,我们这学期才开始学习,特别对于排序,要用到链表就更有一定的难度。
于是,只好看书、查找资料,认真地去学习,去理解,终究还是有所收获。
在编写“stuent”链表的时候,我给它设计了不同的独立模块,分别去实现不同的功能。
如:
增添学生信息、删除学生信息、修改学生信息、查找学生信息、排序、保存学生信息读取学生信息、以学号排序、以总分排序和处理学生信息模块菜单等。
不停地思索,然后不停地学习,看着程序一点点地被自己亲手编写出来正是有一种说不出的高兴,即使有些部分是仿照老师的编写的。
呵呵,原来,只要肯学就一定会有所所获!
参考文献
[1]严蔚敏吴伟民.数据结构(C语言版)北京:
清华大学出版社
[2]王竹林.校园网组建与管理[M].北京:
清华大学出版社,2002
[3]陈维兴,林小茶《C++面向对象程序设计教程》清华大学出版
[4]网站:
附录源程序
#include"
iostream>
student:
student(stringsname,longsnum,intsx,intsy,intsz)//初始化构造函数
name=sname;
num=snum;
x=sx;
y=sy;
z=sz;
voidstudent:
play()
{cout<
name<
学生的学号是"
num<
数学:
x<
语文:
<
y<
英语:
z<
总分:
AA<
/*******************************************************************/
studentlist.h"
fstream>
voidstudentlist:
sadd()//增添学生信息
student*q;
stringname1;
longnum1;
intx1,y1,z1;
system("
cls"
);
\n**增加的学生**\n"
请输入学生的(中间用空格间隔)"
姓名学号数学成绩语文成绩英语成绩:
cin>
>
name1>
num1>
x1>
y1>
z1;
q=newstudent(name1,num1,x1,y1,z1);
q->
next=0;
AA=x1+y1+z1;
if(stu)
student*t;
t=stu;
if(t->
num==num1)
学号已存在,请重新输入"
return;
while(t->
if(t->
cout<
return;
t=t->
t->
next=q;
else
stu=q;
输入完毕"
sremove()//删除学生信息
intnum1;
\n**删除学生信息**\n"
请输入想要删除学生的学号:
num1;
while(p1)
if(p1->
else
if(p1!
=NULL)
确定删除吗?
[Y/N]"
charc;
cin>
c;
if(toupper(c)!
='
Y'
)return;
if(p1==stu)
stu=p1->
deletep1;
找到学号为"
num1<
的学生,并删除\n"
未找到想要删除的学生!
\n"
samend()//修改学生信息
\n**修改学生信息**\n"
输入要修改学生的学号"
=NULL)
学号是"
的学生的信息"
姓名"
数学"
语文"
英语"
请输入修改后的信息:
姓名数学成绩语文成绩英语成绩"
name>
x>
y>
z;
AA=p1->
x+p1->
y+p1->
修改成功"
未找到!
ssearch()//查找学生信息
\n**查询学生信息**\n"
请输入查询方式:
1.按学号查询"
2.按姓名查询"
3.返回"
charc;
switch(c)
case'
1'
longnum1;
要查询的学号"
cin>
student*p1,*p2;
p1=stu;
while(p1)
if(p1->
break;
else
{
p2=p1;
p1=p1->
}
if(p1!
姓名:
数学:
语文:
英语:
查询完毕..."
else
2'
stringname1;
要查询的学生姓名"
name1;
name==name1)
name1<
学号:
3'
return;
p1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 学生 成绩管理系统