一.系统分析:
1.开发背景:
随着科学技术的发展,计算机管理在日常生活中的地位变得越来越重要。它能够代替人做各种重复,繁琐的劳动,并且拥有操作简单,可信度好,不易出错等优点,大大减少了不必要的人力消耗,提高个人的工作效率。学生档案管理是每个学校必须面临的问题,所以,如何开发一个应用简单,见面友好,容易操作,数据安全性好的管理系统就成为非常重要的技术问题。
学生信息管理系统,是针对学校人事处的大量业务处理工作而开发的管理软件,是典型的管理信息系统。
它是一个教育单位不可缺少的部分,它的内容对于学校管理者来说是至关重要的,能有效的帮助学校和老师掌握学生的情况。在传统模式下利用人工进行学生信息管理,存在着较多的缺点,如:效率底,保密性差,时间一长将产生大量的文件和数据,更不便于查找,更新,维护等。诸如这些情况,令学校管理者对学生的信息管理带来了很大困难,严重影响了教育工作者的工作效率。随着科学技术的不断提高,使用日趋成熟的计算机技术来代替传统的人工模式,来实现学生信息的现代化管理,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生信息进行管理,具有着手工管理所无法比拟的优点。例如:检索迅速、查找方便、易修改、可靠性高、存储量大、数据处理快捷、保密性好、寿命长、成本低等。这些优点能够极大地提高学生信息管理的效率,也是学校实现科学化、正规化管理的重要条件。因此,开发这样一套管理软件成为很有必要的事情。
2.系统开发的意义:
(1)记录学生的信息;
(2)对学生信息进行储存;
(3) 对学生信息进行修改;
(4)随时对学生信息进行查询;
(5)可以删除学生信息进行管理;
3.系统应含有那些功能:
1.界面菜单:
2.信息录入:
3.储存信息:
4.信息查询:
5.信息修改:
6删除信息:
7退出系统:
二.系统设计:
(一)系统的概要设计
1、功能模块图
2、设计思路
将学生信息定义为一个person类,在类中包含数据成员:
int num;
string name;
string sex;
int age;
int banji;,
分别表示学号、姓名、性别、年龄、班级。
分别定义小、中、大学三个类为class xiaoxuesheng、class zhongxuesheng、class daxuesheng并继承person类,而后分别为它们一个管理类并定义公有成员函数
void Add(); 实现数据添加功能
void Show(); 实现数据显示功能
void Search(); 实现数据查询功能
void Edit(); 实现数据修改功能
void Delete(); 实现数据删除功能
然后定义了一个主菜单函数和三个分菜单函数,使功能菜单显示在运行窗口以提示用户如何进行操作。
主函数是一个程序必不可少的,在主函数中,使用一个switch语句来选择调用主菜单中的各个功能函数。
1、程序中函数及数据介绍
class Person 学生类
class zhongxuesheng 中学生类
class daxuesheng 大学生类
class xiaoxuesheng 小学生类
class xiao_Manage 小学生管理类
class zhong_Manage 中学生管理类
class da_Manage 大学生管理类
void xiaoMenu() 小学生管理菜单函数
void zhongMenu() 中学生管理菜单函数
void daMenu() 大学生管理菜单函数
int main() 主函数
2、函数功能介绍
2.1显示函数
显示保存的数据
2.2 添加函数
此函数实现的功能主要是,添加一个学生的信息,也就是说调用一次这个函数只能添加一个学生的信息。在此函数中也使用文件处理的方式,但使用的是以追加的方式打开文件,使输入的学生信息写在文件里原有信息的后面。
2.3 删除函数
此函数实现的功能主要是,删除一个学生的信息。在此函数中,先以读的方式打开文件,读出文件里的信息在显示在屏幕上,用户再根据提示信息输入想要删除第几个人的信息,关闭文件。再以写的方式打开文件,以一个if条件语句控制,再重新将学生信息写入文件(除了打算删除的那个学生的信息),由于是以写的方式打开的文件,所以文件里原有的输入就都没有了,存入的新的数据。
2.4 修改函数
此函数实现的功能主要是,修改一个学生的信息。此函数的设计方法和删除函数的设计思想相类似,应用的思想都是将学生信息重新写入文件的方法,将原有数据覆盖。
2.5 查询函数
在查询功能中,可以按多条件查询,本系统分为两个查询条件,即按学号查询和按姓名查询。使用if语句来选择查询条件。
2.5.1 按学号查询
根据提示信息输入学号后,然后使用一个for循环语句,从第一个学生开始检索,如果该学生的学号和输入的学号相等,则输出该学生的信息,由于学生的学号是唯一固定的,所以并使用break语句跳出循环。
当无查询结果时,会输出一条提示信息“无此人信息!” 。
2.5.2 按姓名查询
根据提示信息输入姓名后,然后使用一个for循环语句,从第一个学生开始检索,如果该学生的姓名和输入的姓名一样,则输出该学生的信息,由于学生的姓名有可能重复出现,所以不能使用break语句跳出循环,应该从第一个学生开始检索直到最后一名学生。
当无查询结果时,会输出一条提示信息“无此人信息!” 。
2.6 显示函数
此函数实现的功能主要是,显示所有学生的信息。先是从文件中读取学生信息,然后在输出到显示窗口中。用一个for循环语句,来把所有学生的信息都输出。
2.7 退出系统
当输入“0”时,就能退出系统,这是通过while语句来控制实现的。
三、系统编码及运行
1.编译软件 :codeblocks
2.报告编写:word文档
在编写程序的过程中出现了一些语法错误,后通过调试逐一解决
收获:
附录(源代码):
#include
#include
#include
#include
const int TMAX=50;//定义常变量
using namespace std;
class Person//定义了第一个类
{
public:
int num;
string name;
string sex;
int age;
int banji;
public:
Person(int n=0,string nm="",string s="",int a=0,int b=0):num(n),name(nm),sex(s),age(a),banji(b){};//复制函数
virtual void Input(){};//虚函数,派生类中重新定义
virtual void Output(){};
int GetNum(){return num;}//获取编号
string GetName(){return name;}//获取姓名
};
class zhongxuesheng:virtual public Person//声明为虚基类是因为在派生类中只继承一次
{
public:
string depart;
int spec;
int title;
int yuwen;
int shuxue;
int yingyu;
int choice1;
int choice2;
public:
zhongxuesheng(int n=0,string nm="",string s="男",int a=0,int b=0,string d="上海路",int sp=0,int t=0,int yw=0,int sx=0,int yy=0)
:Person(n,nm,s,a,b),depart(d),spec(sp),title(t),yuwen(yw),shuxue(sx),yingyu(yy){};
void Input()
{
cout<<"请输入学生生学号"< cin>>num; cout<<"请输入学生名字"< cin>>name; cout<<"选择性别"; cout<<"(1.男 2.女)"< cout<<"请输入你的选择"< cin>>choice2; switch(choice2) { case 1:sex="男";break; case 2:sex="女";break; default:cout<<"输入错误。"< } cout<<"请输入学生年龄"< cin>>age; cout<<"请输入学生班级"< cin>>banji; cout<<"选择地址"< cout< < cout<<"请输入你的选择"< cin>>choice1; switch(choice1) { case 1:depart="三大动力路";break; case 2:depart="中央大街";break; case 3:depart="群力大道";break; case 4:depart="果戈里大街";break; case 5:depart="学府路";break; case 6:depart="林园路";break; case 7:depart="哈平路";break; case 8:depart="和兴路";break; case 9:depart="新阳路";break; default:cout<<"输入错误。"< } cout<<"地理成绩 "< cin>>spec; cout<<"历史成绩"< cin>>title; cout<<"语文成绩 "< cin>>yuwen; cout<<"数学成绩"< cin>>shuxue; cout<<"英语成绩 "< cin>>yingyu; } void Output() { cout< < < < < < cout< < < < < < cout< < < < < < < cout< < < < < < < } }; class daxuesheng:virtual public Person//大学生 { public: string zzmm;//家庭住址 string zc;//专业 int choice2;//性别选择 int choice1; int yuwen; int shuxue; int yingyu; int dili; int lishi; string lianxi; public: daxuesheng(int n=0,string nm="",string s="男",int a=0,int b=0,string z="",string zc="",int yw=0,int sx=0,int yy=0,int dl=0,int ls=0,string lx="") :Person(n,nm,s,a),zzmm(z),zc(zc),yuwen(yw),shuxue(sx),yingyu(yy),dili(dl),lishi(ls),lianxi(lx){}; void Input() { cout<<"输入学号"< cin>>num; cout<<"输入名字"< cin>>name; cout<<"选择性别"; cout<<"(1.男 2.女)"< cout<<"请输入你的选择"< cin>>choice2; switch(choice2) { case 1:sex="男";break; case 2:sex="女";break; default:cout<<"输入错误。"< } cout<<"输入年龄"< cin>>age; cout<<"请输入学生班级"< cin>>banji; cout<<"选择地址"< cout< < cout<<"请输入你的选择"< cin>>choice1; switch(choice1) { case 1:zzmm="三大动力路";break; case 2:zzmm="中央大街";break; case 3:zzmm="群力大道";break; case 4:zzmm="果戈里大街";break; case 5:zzmm="学府路";break; case 6:zzmm="林园路";break; case 7:zzmm="哈平路";break; case 8:zzmm="和兴路";break; case 9:zzmm="新阳路";break; default:cout<<"输入错误。"< } cout<<"输入专业"< cin>>zc; cout<<"大物成绩 "< cin>>dili; cout<<"c++成绩"< cin>>lishi; cout<<"语文成绩 "< cin>>yuwen; cout<<"数学成绩"< cin>>shuxue; cout<<"英语成绩 "< cin>>yingyu; cout<<"联系电话 "< cin>>lianxi; } void Output() { cout< < < < < cout< < < < < cout< < < < < < cout< < < < < < cout< < < < < cout< < < < < } }; class xiaoxuesheng:virtual public Person//小学生 { public: int yuwen;//语文 int yingyu;//英语 int shuxue;//数学 int choice2;//选择性别 public: xiaoxuesheng(int n=0,string nm="",string s="男",int a=0,int b=0,int yw=0,int yy=0,int sx=0) :Person(n,nm,s,a),yuwen(yw),yingyu(yy),shuxue(sx){}; void Input() { cout<<"输入学号"< cin>>num; cout<<"输入姓名"< cin>>name; cout<<"选择性别"; cout<<"(1.男 2.女)"< cout<<"请输入你的选择"< cin>>choice2; switch(choice2) { case 1:sex="男";break; case 2:sex="女";break; default:cout<<"输入错误。"< } cout<<"输入年龄"< cin>>age; cout<<"输入班级"< cin>>banji; cout<<"语文成绩"< cin>>yuwen; cout<<"英语成绩"< cin>>yingyu; cout<<"数学成绩"< cin>>shuxue; } void Output() { cout< < < < < < < < < cout< < < < < < < < < } }; class xiao_Manage//小学生管理类 { xiaoxuesheng zhong[TMAX]; //TMAX为常量,为数组中可存储的教师记录的最大数; int top; //top表示当前系统中存储的记录个数; public: xiao_Manage(){top=0;} //初始时记录的个数为0,所以设置top=0; void Add(); //添加; void Show(); //显示; void Search(); //查询; void Edit(); //修改; void Delete(); //删除; }; void xiao_Manage::Add()//小学生 { if(top>=TMAX) { cout<<"用户已满"<