C++课程设计报告学生成绩管理系统Word文档格式.docx
《C++课程设计报告学生成绩管理系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告学生成绩管理系统Word文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
陈东明
05
38
47
请用C/C++编写一系统,实现学生信息管理,软件的入口界面应包括如下几个方面:
功能要求:
(1)信息维护:
要求:
学生信息数据要以文件的形式保存,能实现学生信息数据的维护。
此模块包括子模块有:
增加学生信息、删除学生信息、修改学生信息
(2)信息查询:
查询时可实现按姓名查询、按学号查询
(3)成绩统计:
A输入任意的一个课程名(如数学)和一个分数段(如60--70),统计出
在此分数段的学生情况。
(4)排序:
能对用户指定的任意课程名,按成绩升序或降序排列学生
数据并显示排序结果(使用表格的形式显示排序后的输出结果)
其它要求:
(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读
(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3)学生可自动增加新功能模块(视情况可另外加分)
(4)写出课程设计报告,具体要求见相关说明文档
2、设计分析
(1)需求分析:
该程序要能实现对学生成绩信息的增加、删除、修改,实现对学生按姓名查询,按学号查询显示,对任意一个课程名和分数段的学生人数进行输出并统计人数,最好还要根据用户的需求对学生成绩排序。
(2)系统性能要求:
a.系统安全、可靠;
b.功能齐全;
c.操作方便、界面友好;
d.易于维护和扩充。
(3)系统功能模块:
学生成绩管理系统包括:
增加、删除、修改、显示、信息查询、成绩统计、
排序几个部分构成。
2
(4)模块框架图
增加删除修改显示信息查询成绩统计排序
按
输入课程
学
姓
名和分数
名和升降
号
名
段统计
序排序
查
询
3、调试说明
运行程序后,现出来一个简洁的主界面。
若没有学生信息,显示“这是一个新系统,无学生信息,请先输入。
”若已存在学生信息,显示“读取学生信息成功!
”
3
一秒钟后,自动切入主菜单界面。
首先选择1,增加学生信息。
录入学生信息后选择4,显示学生信息。
选择2,删除学生信息,输入要删除的学生姓名,这里我输入的是王露,显
4
示剩下几位同学的信息。
选择3,修改学生信息,输入要修改的学生姓名,然后输入新的学生信息,这里我修改的是张明明,显示修改后的学生信息。
将张明明和王露的信息重新输入。
输入5,信息查询,出来选择界面,“1、按学生姓名查找”、“2、按学生学号查找”,输入1,运行结果如下:
5
输入2,运行结果如下:
输入6,排序,显示选择界面,用户可根据需求选择科目和升降序,这里我是按语文成绩降序排序。
6
输入7,成绩统计,用户自行输入要统计的科目和分数段进行统计。
这里我统计的是英语成绩在60—90的学生。
4、源程序代码
#include<
iostream>
fstream>
iomanip>
stdlib.h>
Windows.h>
conio.h>
usingnamespacestd;
#defineHEADER1"
-----------------------------学生成绩
----------------------------\n"
#defineHEADER2"
|姓名|学号|数学|语文|
英语|总分|\n"
#defineHEADER3"
|----------|----------|----------|----------|----------|----------|\n
"
classStudent//定义学生类
{
public:
charname[20];
charid[20];
intmath;
intchinese;
7
intenglish;
intsum;
Student*next;
voidinput();
voidReadFile(istream&
in);
voidshow();
};
voidStudent:
:
input()//输入学生信息函数
cout<
<
\n\t\t请输入:
"
endl<
endl;
\t\t姓名:
;
cin>
>
name;
\t\t学号:
id;
\t\t数学成绩:
;
math;
\t\t语文成绩:
chinese;
\t\t英语成绩:
english;
sum=math+chinese+english;
}
ReadFile(istream&
in)//读取文件
in>
name>
id>
math>
chinese>
english>
sum;
show()//输出学生信息
|"
setw(8)<
name<
setw(6)<
id<
|"
math<
chinese<
english<
setw(7)<
sum<
classStudentMassage//定义学生信息类,包含各项处理功能
StudentMassage();
~StudentMassage();
8
voidShowMenu();
voidDisplay();
voidAddItem();
voidFind();
voidsave();
voidModifyItem();
voidRemoveItem();
voidSwap(Student*p1,Student*p2);
voidSort();
intListCount();
intCount();
private:
Student*Head,*End;
ifstreamin;
ofstreamout;
Student*FindItem(char*name);
Student*FindId(char*id);
Student*StudentMassage:
FindItem(char*name)
Student*p;
for(p=Head;
p->
next!
=End;
p=p->
next)
if(!
strcmp(p->
next->
name,name))
returnp;
returnNULL;
FindId(char*id)
id,id))
StudentMassage:
StudentMassage()//构造函数
Head=newStudent;
Head->
next=newStudent;
End=Head->
next;
in.open("
sort.txt"
);
in)
9
\n\t\t这是一个新系统,无学生信息,请先输入。
else
while(!
in.eof())
End->
ReadFile(in);
if(End->
name[0]=='
\0'
)
break;
End=End->
in.close();
\n\t\t读取学生信息成功!
~StudentMassage()//析构函数
Student*temp;
save();
for(temp;
Head->
)
temp=Head->
Head->
next=Head->
deletetemp;
deleteHead,End;
voidStudentMassage:
ShowMenu()//显示菜单
\n\n\t\t\t\t主菜单"
\t\t****************************************"
\t\t1、增加学生信息2、删除学生信息"
\t\t3、修改学生信息4、显示学生信息"
\t\t5、信息查询6、排序"
\t\t7、成绩统计0、安全退出"
<
\t\t请选择:
Display()//显示学生信息
10
HEADER1<
HEADER2<
HEADER3;
for(p=Head->
p!
p->
show();
\n\n输入任意字符,继续......"
getch();
AddItem()//添加学生信息
input();
\n\t\t添加成功!
\n输入任意字符,继续......"
Find()//查找函数
charname[20],id[20];
intx;
Student*p=NULL;
\n\t\t****************************************\n"
\t\t\t1、按学生姓名查找"
\t\t\t2、按学生学号查找"
\n\t\t****************************************\n\n\t\t请选
择:
x;
switch(x)
case1:
//按姓名查找
\n\t\t请输入要查找的学生的姓名:
if(p=FindItem(name))
\n请输入任意字符,继续......"
11
\t\t没有找到该姓名的学生!
cout<
请输入任意字符,继续......"
}break;
case2:
//按学号查找
\n\t\t请输入要查找的学生的学号:
if(p=FindId(id))
\n\t\t没有找到该学号的学生!
getch();
ModifyItem()//修改学生信息
\n\t\t请输入要修改的学生的姓名:
\n\t\t已找到该学生,请输入新的信息!
\n\t\t修改成功!
Display();
\n\t\t没有找到!
\n输入任意字符!
继续......."
12
RemoveItem()//删除学生信息
Student*p=NULL,*temp=NULL;
\n\t\t请输入要删除的学生的姓名:
temp=p->
next=p->
\n\t\t删除成功!
\t\t没有找到!
输入任意字符!
继续......"
intStudentMassage:
ListCount()//返回记录的学生总数
intn=0;
Head)
return0;
n++;
returnn;
Count()//成绩统计
intx,m,n,count=0;
\n\t\t没有资料可以统计!
13
\t\t\t
、统计数学成绩"
、统计语文成绩"
、统计英语成绩"
case1:
\n\t\t请输入分数段的起始分数和终止分数:
m;
n;
if(p->
math>
=m&
&
math<
=n)
count++;
if(count==1)
\n\t\t数学成绩在"
m<
--"
n<
的学生共有"
count<
人!
\n"
输入任意字符,继续......."
break;
case2:
chinese>
chinese<
\n\t\t语文成绩在"
14
case3:
cin>
next)if(p->
english>
english<
\n\t\t英语成绩在"
Swap(Student*p1,Student*p2)//交p1,p2
学生信息
Student*temp=newStudent;
strcpy(temp->
name,p1->
name);
id,p1->
id);
temp->
math=p1->
chinese=p1->
english=p1->
sum=p1->
strcpy(p1->
name,p2->
id,p2->
p1->
math=p2->
chinese=p2->
english=p2->
sum=p2->
strcpy(p2->
name,temp->
id,temp->
p2->
math=temp->
chinese=temp->
english=temp->
15
sum=temp->
Sort()//排序
Student*p=NULL,*p1=NULL,*k=NULL;
intn=StudentMassage:
ListCount(),x,y;
if(n<
2)
数据较少,无法排序!
return;
\n\t\t**************************************\n"
、按数学成绩排序"
、按语文成绩排序"
、按英语成绩排序"
、按总分排序"
\n\t\t**************************************\n\n\t
请选择:
\t\t\t1、按降序排序\n\t\t\t2、按升序排序"
\n\t\t***********************************