学生信息管理系统7788.docx
《学生信息管理系统7788.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统7788.docx(35页珍藏版)》请在冰豆网上搜索。
学生信息管理系统7788
湖南生物机电职业技术学院
《c++程序设计》课程实训报告
2012-2013第二学期
课程实训题目:
学生信息管理系统
实训学生姓名:
潘贸俭
所在系部名称:
信息系
所在班级名称:
软件12321班
学号:
05
参加实训时间:
2013年6月1日—2013年7月5日
指导教师姓名:
胡晶晶
二〇一三年七月四日
内容提要
该系统主要是先注册,登陆,保存学生的个人信息,并能正确快速的对系统的做出修改,删除,排序,使用户可以快速准确的找到学生的信息。
系统的主要功能如下:
目录
一课程设计及简介3
1.1意义3
1.2系统的主要功能如下3
二、设计方案4
1.输入信息函数;4
2.显示学生信息函数;4
3.排序统计信息函数;4
4.查找学生信息函数;4
5.删除学生信息函数;4
6.修改学生信息函数;5
7.保存学生信息函数;5
8.安全退出函数;5
(一)类的设计5
1、用户类5
2,学生信息类6
(二)界面设计12
1、登陆界面的设计12
2、主界面的设计13
四课程设计体会15
五源代码:
16
正文
一课程设计及简介
1.1意义
系统必须实现相应的学生信息包括:
学号、姓名、性别、年龄、五门课程成绩,使操作人员更加方便的进行操作。
1.2系统的主要功能如下:
1、注册管理员用户
2、管理员用户登陆
3、1输入学生信息
4、2显示所有学生信息或根据条件查询学生信息
5、3修改学生信息
6、删除指定的学生信息
7、根据成绩进行排序
8、统计不及格学生人数并显示具体名单
9、将学生信息保存到磁盘文件
10、从磁盘文件读取数据
二、设计方案
按照需求分析所得,学生成绩管理系统有以下几个功能模块:
1.输入信息函数;
输入学号、姓名、性别、年龄、五门课程成绩
2.显示学生信息函数;
显示出输入的学号,姓名,性别,年龄,五门成绩
3.排序统计信息函数;
按照学生的总成绩来进行从大到小的排序。
4.查找学生信息函数;
按学生的学号进行查找。
5.删除学生信息函数;
按照学生的学号来进行删除操作。
6.修改学生信息函数;
可以对学生的号进行修改。
7.保存学生信息函数;
保存所有学生的信息到“student.txt”中
8.安全退出函数;
安全退出学生成绩管理系统。
三,具体设计及截屏图
(一)类的设计
根据上述需求分析,有用户类和学生信息类
1、用户类
classUser
{
private:
stringname;
stringpassword;
User*next;
public:
User(stringna="",stringpa="",User*ne=NULL){name=na;password=pa;next=ne;}
voidinput()
{
cout<<"请输入你的用户名:
";
cin>>name;
cout<<"请输入你的密码:
";
cin>>password;
}
voidoutput()
{cout<<"name:
"<cout<<"password:
"<}
string&getName(){returnname;}
string&getPassword(){returnpassword;}
friendvoidregist();
friendvoidlogin();
};
#endlif
2,学生信息类
classStudent
{
public:
booluseing;//是否使用
stringnum;
stringname;
charsex;
intage;
floatscore[5];
floatsum;
Student*next;
friendclassStudentArray;
voidinput()//输入学生信息
{
cout<<"请输入学号、姓名、性别、年龄、五门成绩:
"<cin>>num>>name>>sex>>age;
for(inti=0;i<5;i++)
cin>>score[i];
}
voidoutput()//输出学生信息
{
cout<<"学号:
"<"<"<"<";
for(inti=0;i<5;i++)
cout<cout<}
stringgetnum(){returnnum;}
stringgetname(){returnname;}
chargetsex(){returnsex;}
intgetage(){returnage;}
floatgetscore()
{return0;}
};
classStudentArray//班级类
{
private:
Studentstu[50];//学生的最大人数
intn;//学生的实际人数
Student*head;//声明一个空链表
public:
StudentArray()
{
cout<<"请输入学生的实际人数:
"<cin>>n;
}
friendclassStudent;
voidinput();//1输入信息
voidoutput();//2输出
voidsearch();//3(查找学生信息)
voidmodify();//4(修改学生信息)
voiddelet();//5(删除指定学生信息)
voidsort();//6(排序*)
voidcount();//7统计不及格学生人数成绩
voidsave();//8保存信息
voidread();//9(从文件读取信息)
voidaddnumber();//(增加)
};
voidStudentArray:
:
input()//菜单里,输入
{head=newStudent;//创建一个带头结点的空链表
head->next=NULL;//头节点的下一个为空
while
(1)//循环语句
{chary;
Student*s=newStudent;//创建一个新结点为student;
s->input();
s->next=head->next;//
(1)
head->next=s;//
(2)
cout<<"继续输入吗(y/n)?
:
";
cin>>y;
if(y=='n'||y=='N')//访问的条件
break;//否则停止
}
}
voidStudentArray:
:
output()//菜单里,输出
{Student*p;inti=0;//以下代码用于显示链表中的所有结点,
for(p=head->next;p!
=NULL;p=p->next,i++)//p指向头结点的下一个,p不等于空节点。
i是次数
p->output();
}
voidStudentArray:
:
count()//统计
{Student*t;
intunpass[5]={0,0,0,0,0};//确定成绩不通过的数组
//以下代码逐个判断每人每科成绩
for(t=head->next;t!
=NULL;t=t->next)//确定下一个人的数
for(intj=0;j<5;j++)//确定五门科的成绩
if(t->score[j]<60)//判断是不是每门科是不是小于60
unpass[j]++;//记录小于60的
cout<<"不及格人数:
";//输出不及格的
for(intj=0;j<5;j++)//
cout<}
voidStudentArray:
:
search()//查找
{
chary;
Student*p;
stringnums;
cout<<"请输入学号进行查找:
";
cin>>nums;
while
(1)//循环语句
{
for(p=head->next;p!
=NULL&&p->num!
=nums;p=p->next);//头结点指向下一个,p不等于空并且p不等于学号,确定下一个查找的对象
if(p->num==nums)//如果指向学号等于学生信息
p->output();//就输出学生信息
else
cout<<"该学号不存在"<cout<<"想继续输入学号吗(y/n)?
:
";
cin>>y;
if(y=='n'||y=='N')//访问的条件
break;//否则停止
cout<<"请输入学号进行查找:
";
cin>>nums;
}
}
voidStudentArray:
:
sort()//按总分排序
{
Students;
Student*p;
Student*k;
Studentsum;
//以下代码排序
for(p=head->next;p!
=NULL;p=p->next)
{
p->sum=0;
for(intj=0;j<5;j++)
p->sum+=p->score[j];
}
for(p=head->next;p!
=NULL;p=p->next)
for(k=p->next;k!
=NULL;k=k->next)
if(p->sumsum)
{
s=*p;
*p=*k;
*k=s;
}
inti=0;
for(p=head->next;p!
=NULL;p=p->next,i++)
cout<<"第"<
"<getname()<<"总分为:
"<sum<
}
voidStudentArray:
:
save()//从文件写信息
{
//创建或打开文件
Student*q;
ofstreamoutfile;
outfile.open("Student.txt",ios:
:
in);
//写入数据
for(q=head->next;q!
=NULL;q=q->next)
for(inti=0;i{
outfile<getnum()<<"\t"<getname()<<"\t"<getsex()<<"\t"<getage()<<"\t";
for(intk=0;k<5;k++)
outfile<score[k]<<"\t";
outfile<}
outfile.close();//结束语句
cout<}
voidStudentArray:
:
read()//从文件读取信息
{inti=0;
ifstreaminfile;
infile.open("Student.txt");
while(!
infile.eof())//读取文件中的信息(括号中的代码意思是:
当文件读取未结束)
{
Student*s=newStudent;
infile>>s->num>>s->name>>s->sex>>s->age;
for(intk=0;k<5;k++)
infile>>s->score[k];
if(s->num!
="")
{
s->next=head->next;
head->next=s;
}
i++;//记录读取文件的条数
}
cout<<"一共读取了"<
}
voidStudentArray:
:
modify()//修改功能
{stringnums;
Student*k;
stringstd;
chary;
while
(1)
{
cout<<"请输入学号进行查找:
";
cin>>nums;
for(k=head->next;k!
=NULL&&k->num!
=nums;k=k->next)
if(k==NULL)
cout<<"该学号不存在!
!
!
"<else
k->output();
k->input();
cout<<"修改成功"<cout<<"想继续输入学号修改吗(y/n)?
:
";
cin>>y;
if(y=='n'||y=='N')//访问的条件
break;//否则停
cout<<"请输入修改的学号:
";
cin>>nums;
}
}
voidStudentArray:
:
delet()//删除功能
{stringnums;
charesc;
stringstd;
Student*b;
chary;
inti;
cout<<"请输入学号进行删除:
";
cin>>std;
while
(1)
{
for(b=head->next;b!
=NULL&&b->num!
=nums;b=b->next)
//for(inti=0;iif(std!
=b->getnum());
else
break;
if(b=NULL)
cout<<"该学号不存在!
"<else
{
b->output();
for(intk=i;kstu[k]=stu[k+1];
n=n-1;
}
}
}
#endif
(二)界面设计
1、登陆界面的设计
登陆界面中显示提出输入用户名和密码。
学生成绩管理系统登陆界面如图
图1—1登陆界面
2、主界面的设计
主界面中显示学生成绩管理系统的全部信息,输入信息,查找信息,删除学生信息,排序学生信息,修改学生信息,保存学生信息,统计学生信息,输出学生信息,保存学生信息,读取学生信息,安全退出系统。
学生成绩管理系统主界面如图1—2所示:
图1—2
查找学生信息
、修改学生信息
四课程设计体会
接近四周的C++实训课今天就要结束了,到了我们该自我总结的时候了。
这次我最大的体会就是体验到了开发软件人员的艰辛,虽说我们的程序严格来说并称不上软件开发,但我却深刻体验到了其中的困难和辛苦。
因为我现在最初的梦想就是将来可以进一个软件公司继续我的计算机深造,所以我很重视这次的实训,这也算是我第一次接触大型的编程设计。
在这次的体验,虽说有时候感觉很累,但我觉得过的很充实,我很快乐,在其中遇到了困难,请教老师,或查阅资料。
学到了许多我们课本上学不到的东西。
其实真正实验报告并不只是一个简单的源代码就完了,我还要做为源代码做备注,让外界人员可以看懂,看书学着画类流程图,做各个模块的功能总结等等,这些都是我们以前没有涉及到的,这让我学会了一些新的知识。
通过这次实训,我深刻体验到了自己学习中的不足,知识面的狭窄,这无疑对我来说是一种打击,但我并
没有因此而郁闷,因为我及时认识到了这一点,并学会了许多新东西,我应该感到庆幸。
一次实训让我欢喜让我忧啊!
我感觉到了我的梦想和现实生活的差距,但我不会放弃,我会吸取这次的教训,为我以后的梦想继续努力。
————————潘贸俭
五源代码:
#if!
defined(Student_h)
#defineStudent_h
#include
#include
#include
#include
usingnamespacestd;
classStudent
{
public:
booluseing;//是否使用
stringnum;
stringname;
charsex;
intage;
floatscore[5];
floatsum;
Student*next;
friendclassStudentArray;
voidinput()//输入学生信息
{
cout<<"请输入学号、姓名、性别、年龄、五门成绩:
"<cin>>num>>name>>sex>>age;
for(inti=0;i<5;i++)
cin>>score[i];
}
voidoutput()//输出学生信息
{
cout<<"学号:
"<"<"<"<";
for(inti=0;i<5;i++)
cout<cout<}
stringgetnum(){returnnum;}
stringgetname(){returnname;}
chargetsex(){returnsex;}
intgetage(){returnage;}
floatgetscore()
{return0;}
};
classStudentArray//班级类
{
private:
Studentstu[50];//学生的最大人数
intn;//学生的实际人数
Student*head;//声明一个空链表
public:
StudentArray()
{
cout<<"请输入学生的实际人数:
"<cin>>n;
}
friendclassStudent;
voidinput();//1输入信息
voidoutput();//2输出
voidsearch();//3(查找学生信息)
voidmodify();//4(修改学生信息)
voiddelet();//5(删除指定学生信息)
voidsort();//6(排序*)
voidcount();//7统计不及格学生人数成绩
voidsave();//8保存信息
voidread();//9(从文件读取信息)
voidaddnumber();//(增加)
};
voidStudentArray:
:
input()//菜单里,输入
{head=newStudent;//创建一个带头结点的空链表
head->next=NULL;//头节点的下一个为空
while
(1)//循环语句
{chary;
Student*s=newStudent;//创建一个新结点为student;
s->input();
s->next=head->next;//
(1)
head->next=s;//
(2)
cout<<"继续输入吗(y/n)?
:
";
cin>>y;
if(y=='n'||y=='N')//访问的条件
break;//否则停止
}
}
voidStudentArray:
:
output()//菜单里,输出
{Student*p;inti=0;//以下代码用于显示链表中的所有结点,
for(p=head->next;p!
=NULL;p=p->next,i++)//p指向头结点的下一个,p不等于空节点。
i是次数
p->output();
}
voidStudentArray:
:
count()//统计
{Student*t;
intunpass[5]={0,0,0,0,0};//确定成绩不通过的数组
//以下代码逐个判断每人每科成绩
for(t=head->next;t!
=NULL;t=t->next)//确定下一个人的数
for(intj=0;j<5;j++)//确定五门科的成绩
if(t->score[j]<60)//判断是不是每门科是不是小于60
unpass[j]++;//记录小于60的
cout<<"不及格人数:
";//输出不及格的
for(intj=0;j<5;j++)//
cout<}
voidStudentArray:
:
search()//查找
{
chary;
Student*p;
stringnums;
cout<<"请输入学号进行查找:
";
cin>>nums;
while
(1)//循环语句
{
for(p=head->next;p!
=NULL&&p->num!
=nums;p=p->next);//头结点指向下一个,p不等于空并且p不等于学号,确定下一个查找的对象
if(p->num==nums)//如果指向学号等于学生信息
p->output();//就输出学生信息
else
cout<<"该学号不存在"<cout<<"想继续输入学号吗(y/n)?
:
";
cin>>y;
if(y=='n'||y=='N')//访问的条件
break;//否则停止
cout<<"请输入学号进行查找:
";
cin>>nums;
}
}
voidStudentArray:
:
sort()//按总分排序
{
Students;
Student*p;
Student*k;
Studentsum;
//以下代码排序
for(p=head->next;p!
=NULL;p=p->next)
{
p->sum=0;
for(intj=0;j<5;j++)
p->sum+=p->score[j];
}
for(p=head->next;p!
=NULL;p=p->next)
for(k=p->next;k