学生管理系统Word文档下载推荐.docx
- 文档编号:3860080
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:31
- 大小:21.51KB
学生管理系统Word文档下载推荐.docx
《学生管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《学生管理系统Word文档下载推荐.docx(31页珍藏版)》请在冰点文库上搜索。
06李果男50287734333
07张园园女10287756122
……...…………..
学生成绩基本信息文件(B.TXT)及其内容:
学号课程编号课程名称学分平时成绩实验成绩卷面成绩综合成绩实得学分
01A01大学物理3667882
02B03高等数学478-190
01B03高等数学445-188
02C01VF3657666
…….……….....…
功能要求及说明:
(1)数据录入功能:
对B.TXT进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据.综合成绩、学分由程序根据条件自动运算。
综合成绩的计算:
如果本课程的实验成绩为-1,则表示无实验,综合成绩=平时成绩*30%+卷面成绩*70%;
如果实验成绩不为-1,表示本课程有实验,综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70%.
实得学分的计算:
采用等级学分制.
综合成绩在90-100之间,应得学分=学分*100%综合成绩在80-90之间,应得学分=学分*80%
综合成绩在70-80之间,应得学分=学分*75%综合成绩在60-70之间,应得学分=学分*60%
综合成绩在60以下,应得学分=学分*0%
(2)查询功能:
分为学生基本情况查询和成绩查询两种
A:
学生基本情况查询:
A1----输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。
A2---输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。
B:
成绩查询:
B1:
输入一个学号时,查询出此生的所有课程情况,格式如下:
学号:
xx姓名:
xxxxx
课程编号:
xxx课程名称:
xxxxx综合成绩:
xxxx实得学分:
xx
………………………
共修:
xx科,实得总学分为:
xxx
(3)删除功能:
当在A.TXT中删除一个学生时,自动地在B.TXT中删除此人所有信息。
(4)排序功能:
能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
(二)其它要求:
(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读
(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3)学生可自动增加新功能模块(视情况可另外加分)
(4)写出课程设计报告,具体要求见相关说明文档
2概要设计
2.1存储结构
首先,为了能使自己得到锻炼,存储结构我使用了顺序存储与链式存储,学生基本信息用的数组来存储,对学生成绩基本信息使用链表进行存储。
结构体定义如下:
//学生基本信息的结构体定义
typedefstructstudent
{stringxuehao;
//学号
stringname;
//姓名
stringgender;
//性别
stringsushe;
//宿舍号
stringtel;
//电话
}student;
//学生成绩信息的结构体定义
typedefstructgrade
//学号
stringcourseno;
//课程号
stringcoursename;
//课程名称
intxuefen;
//学分
intpingshi;
//平时成绩
intshiyan;
//实验成绩
intjuanmian;
//卷面成绩
floatzonghe;
//综合成绩
floatshide;
//实得学分
grade*next;
}grade;
2.2基本操作
(1)数据录入功能
(2)查询功能
(3)删除功能
(4)排序功能
(5)显示所有学生信息
(6)保存
(7)退出
3详细设计
3.1流程图
各个算法的设计如下:
1.主函数:
intmain();
从A.txt中读取存储的学生基本信息到内存,以便进行处理,过程如图1
开始
创建存储学生信息的单链表的头结点
将学生信息读取到内存
调用菜单函数
结束
图1
菜单函数:
voidmenu(student*stu,grade*head,grade*gra);
stu是指向学生基本信息数组的指针,head是指向学生成绩信息链表头结点的指针,gra是指向学生成绩信息链表最后一个结点的指针。
用于进行指示进行各种操作,是与每个函数都相联系的一个函数,功能操作见图2
6保存
0退出
输入i
菜单
4排序
3删除
5显示学生信息
2查询
1数据录入
其他有误误
图2
数据录入函数:
voidluru(grade*gra);
其中gra是指向单链表最后一个结点的指针,用于后插法中进行插入。
将学生成绩信息依次输入单链表中,其中单链表边输入边创建,综合成绩和实得学分可由计算机自己计算。
流程图见图3
判断成绩范围
应得学分=学分*100%
应得学分=学分*80%
应得学分=学分*75%
应得学分=学分*60%
应得学分=0
综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70%
输入学生平时成绩
输入学生实验成绩
输入学生卷面成绩
输入学生课程编号
输入学生的学号
输入学生学分
gra->
shiyan=-1
综合成绩=平时成绩*30%+卷面成绩*70%
YN
90-10080-9070-8060-7060以下
图3
4.查询功能:
voidlookfor(student*p,grade*head);
P为指向学生基本信息数组的指针,head为指向学生成绩链表的头结点的指针。
有学生基本情况查询和成绩查询两种大功能,基本情况查询又分为按学号或姓名查找单个学生基本信息,也可输入宿舍号查询整个宿舍学生的基本信息。
成绩查询只要输入学号便可查询相应学生的成绩信息。
见图4
1.输入一个学号或姓名
2.输入一个宿舍号码
a按学号查找
b按姓名查找
输出一个宿舍学生信息
输出相应学生信息
输出相应学生所有成绩
A:
学生基本情况查询
B:
成绩查询
输入j
输入学号
图4
删除功能:
voiddel(student*stu,grade*head);
stu为指向学生基本信息数组的指针,head为指向学生成绩链表的头结点的指针。
执行删除功能时在存储学生基本信息的数组中与存储学生成绩信息的链表中同时删除该学生信息,以便进行下面操作与向文件中存储信息。
功能见图5
输入要删除学生的学号
在学生基本信息中删除
在学生成绩基本信息中删除
图5
排序功能:
voidsort(grade*head);
head为指向学生成绩链表的头结点的指针。
下面流程图实现的是按综合成绩升序排序,使用的选择排序法,虽说使用的存储结构为链式存储结构,但排序时并非改变的指针指向,而是只修改存储的信息,指针指向不用改变。
如图6
head=head->
next
head->
next!
=NULL
p=head->
P!
zonghe>
p->
zonghe
交换相邻节点中数据
p=p->
N
Y
图6
显示所有学生信息:
voidshow(student*stud);
stud为指向学生基本信息数组的指针
用于显示内存中学生基本情况信息,以便更好了解学生的一些情况.
i=1
stud[i].xuehao!
="
0"
输出学号,姓名,性别,宿舍,电话号
i++
图7
保存功能:
voidsave1(student*stud);
voidsave2(grade*head);
stud为指向学生基本信息数组的指针,head为指向学生成绩链表的头结点的指针。
函数用于将内存中数据存储到文件中以便更好保存信息。
i==1
I==2
保存学生基本信息到A.TXT
保存学生成绩信息到B.TXT
输入有误,重新操作!
图8
3.2源程序
#definenum10
#include<
iostream>
.
string>
#include<
fstream>
//定义文件输入输出流
usingnamespacestd;
voidluru(grade*gra);
voidlookfor(student*p,grade*head);
voidsort(grade*head);
voidout(grade*head);
voidsort1(grade*head);
voiddel(student*stu,grade*head);
voidshow(student*stu);
voidsave2(grade*head);
voidleave();
//数据录入
voidluru(grade*gra)
{stringstr;
cout<
<
"
请输入学生的学号,"
endl;
cin>
>
str;
xuehao=str;
请录入该生课程编号"
courseno;
请录入该生课程名称"
coursename;
请录入该生学分"
xuefen;
请录入该生平时成绩"
pingshi;
请录入该生实验成绩"
shiyan;
请录入该生卷面成绩"
juanmian;
//综合成绩计算
if(gra->
shiyan==-1)
zonghe=gra->
pingshi*0.3+gra->
juanmian*0.7;
else
pingshi*0.15+gra->
juanmian*0.7+gra->
shiyan*0.15;
//实得学分的计算
=90&
&
zonghe<
=100)
shide=gra->
elseif(gra->
=80)
xuefen*0.8;
=70)
xuefen*0.75;
=60)
xuefen*0.60;
60)
shide=0;
您输入有误,请按提示操作!
}
//查询功能
voidlookfor(student*p,grade*head)
{chari,k;
stringstr;
intj,x=0;
floatsum=0;
-------------------------------------------------"
--A:
学生基本情况查询B:
成绩查询--"
i;
switch(i)
{//学生基本情况查询
case'
A'
:
--1.输入一个学号或姓名2.输入一个宿舍号码--"
j;
//A1----输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。
if(j==1)
{cout<
*****************************************************"
************a按学号查找b按姓名查找************"
k;
if(k=='
a'
)
{cout<
请输入学号:
for(j=1;
j<
8;
j++)
{if(p[j].xuehao==str)
p[j].xuehao<
"
p[j].name<
p[j].gender<
p[j].sushe<
p[j].tel;
elseif(k=='
b'
请输入姓名:
{if(p[j].name==str)
//A2---输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。
elseif(j==2)
请输入宿舍号:
{if(p[j].sushe==str)
break;
//成绩查询
B'
请输入要查询学生的学号:
for(j=1;
学号:
str<
\t"
姓名:
next;
//指向首元结点
while(head!
=NULL)
{
if(head->
xuehao==str)
courseno<
课程名称:
coursename<
综合成绩:
实得学分:
shide<
x++;
sum=sum+head->
shide;
//指针后指
x<
科,实得总学分为:
sum<
default:
//删除功能
voiddel(student*stu,grade*head)
grade*p=head->
grade*q;
请输入要删除学生的学号:
//在学生基本信息中删除
for(inti=1;
stu[i].xuehao!
;
i++)
if(stu[i].xuehao==str)
{for(intj=i;
stu[j].xuehao!
{stu[j].gender=stu[j+1].gender;
stu[j].name=stu[j+1].name;
stu[j].sushe=stu[j+1].sushe;
stu[j].tel=stu[j+1].tel;
stu[j].xuehao=stu[j+1].xuehao;
stu[j].gender="
stu[j].name="
stu[j].sushe="
stu[j].tel="
stu[j].xuehao="
//在学生成绩基本信息中删除
while(p)
if(p->
{head->
next=p->
q=p;
deleteq;
{p=p->
删除成功!
//排序功能
//按综合成绩升序排序
voidsort(grade*head)
{grade*temp=newgrade;
grade*h=head;
for(head=head->
next)
{for(grade*p=head->
p;
zonghe)
{temp->
xuehao=head->
xuehao;
xuehao=p->
xuehao=temp->
temp->
courseno=head->
courseno=p->
courseno=temp->
coursename=head->
coursename=p->
coursename=temp->
xuefen=head->
xuefen=p->
xuefen=temp->
pingshi=head->
pings
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 管理 系统
![提示](https://static.bingdoc.com/images/bang_tan.gif)