资源描述
《C++程序设计》课程设计报告
题 目: 学生学籍管理系统
学 院:计算机科学与工程学院
专 业:计算机科学与技术
学生姓名:
学 号:
指导教师:
2012年 06 月 20 日
目 录
10.学生学籍管理系统 II
1.前言 1
2.需求分析 1
3.概要设计 1
4.详细设计 1
5.测试 1
6.总结 2
附录 2
1. 前言
题目:学生学籍信息管理系统
1 前言
21世纪随着计算机技术的不断成熟,带来了信息技术的高速发展。信息技术的发展极大地推动了整个社会信息化的进程。在日益庞大的信息管理领域,信息管理自动化直接地改变了传统的文档管理方式,极大地提高了工作效率和管理水平。
2. 需求分析
鉴于高等院校在校学生、教职员工、日常事务处理信息数据的繁多,学校信息管理部门通常感到无法高效的进行管理。就高等院校学生学籍管理这一方面,由于院校学生人数众多,专业不同,学校所安排的教学计划也就因人而异。这对于管理学生学籍信息的教务老师来说,无疑是一项庞大和复杂的工作。不仅要考虑学校对某一专业整体的教学计划安排,也要对各专业相关老师的教学任务进行统一协调,还要考虑某些学生的特别学籍变化。为解决学校上述的学生学籍管理难题,提高教务老师的信息管理效率,以及为了方便学生更好、更便捷的查看自己的学籍信息;让老师的教学工作更加顺利和对教学信息的及时掌握。本系统特参照一般高等院校对在校学生课程选修的数据库管理办法,结合实践,设计出学生,教师和管理员三大功能模块,根据赋予系统权限不同,分别对系统进行相关操作,方便了学生、教师对学籍信息的查看,同时,也大大减少了管理员的信息管理工作量,提高了系统效率。
3 概要设计
1)、通过对高等院校管理学生学籍的管理模式和步骤流程,设计出系统的总体结构和各主要功能模块。
2)、了解面向对象语言的编程风格,以及数据库对数据信息处理的特点,确定好系统的设计语言和数据库平台。
3)、及时与学校管理信息老师和课程设计指导老师沟通,进一步熟悉学生学籍信息管理系统的数据流程、数据处理以及操作步骤。提出自己的设计想法,征求老师意见,改正不合理的地方,为下面的概念设计和详细设计奠定基础。
3.1 概要设计阶段总体结构设计
1)、确定系统的总体结构以及子结构:
系统根据用户模式的不同,实现不同的系统功能。系统功能层次图如下:
1.登记学生信息
登录学生信息系统
学生学籍管理系统
6.退出
3.查找学生信息
2.删除学生信息
5.按要求输出信息
4.修改学生信息
退出系统
保存信息
学生信息管理(选择操作)
3.2 概要设计阶段成果
系统登录界面
信息修改编辑界面
信息浏览界面
信息保存退出界面
4详细设计
4.1 界面设计
系统开始运行后自动从当前目录下的xueshen文件中读取信息,并实时显示信息的读取情况。用户登录系统主界面,输入用户名和密码,。系统对用户进行安全验证,若通过,则跳转到相应操作界面;若失败,则提示相应错误信息。系统主界面如下图所示,各功能模块前面都标注了编码 ,用户只要输入相应的编码就可以选择相应的功能模块,方便了各层次用户对系统的功能操作。同时界面中也显示了整体的结构图,以便用户对系统的整个功能结构有着清晰的认识。在用户选择每一个具体的功能模块后,系统都会提示用户做出相应的操作,并根据用户的指令反馈相应的信息处理结果。另外在显示新的菜单时,都会将之前的内容清空,使系统的操作界面简洁,提高用户使用系统的效率。
图1
功能描述:
图1为学生学籍管理系统操作界面
选择1:进入学生信息登记界面,可查看学生的学籍信息,对信息进行添
加
选择2:进入学生信息删除界面,输入学生学号,进行学生信息删除功
提示。
选择3:进入学生信息查找界面,录入学生学号,对学生的相关信息进行查找。
选择4:进入学生信息修改界面,录入要修改的学生编号,选择要修改的信息,输入新信息。
选择5:按要求输出学生信息界面,输入要输出的学生信息进行相同信
息学生的统计输出。
选择6:退出操作界面,退出系统操作。
图2
功能描述:
图2为是否进行操作界面
选择Y:返回学生学籍管理系统操作界面
选择N:退出操作界面
图3
功能描述:
图3为信息保存界面。
选择Y:进行信息保存退出系统
选择N:不保存信息退出系统
4.2 编码。
1)头文件代码
//MyStudent.h
#ifndef MYSTUDENT_H_
#define MYSTUDENT_H_
#include<iostream>
#include<string>
using namespace std;
class Student
{
public:
double Num;
string Name;string Sex;int Age;
string Jiguan;
string Xibie;
string Zuanye;
string Class;
string bianhua;
Student *next;};
#endif
//MyLIST.h
#include<iostream>
#include<string>
#include<fstream>
#include"MyStudent.h"
using namespace std;
class LIST
{ private:
public:
Student *head;
LIST()
{ head=new Student;
head->next=NULL;
};
int length();
bool isempty(){ return head->next==NULL?true:false;}
bool get_data(int i,Student &x);
bool get_succ(int i,Student &x);
bool get_prior(int i,Student &x); //取前驱元素函数
bool replace_data(double i); //置换元素
bool insert_data(Student data,int i); //插入元素函数
bool delete_data(double i); //删除元素函数
bool find_data(double i,Student &result);
void tongji(Student x);//查找函数
void print_list();
void shuchu();
~LIST() //析构函数
{ Student *p;
while(head) //将链表中所有元素占用空间释放
{ p = head;
head = head->next;
delete p;
}
}
};
#endif
//Myvoid.h
#include<iostream>
#include"MyLIST.h"
#include"MyStudent.h"
void In( int i,Student chuandi[])
{
double Num;
string Name;
string Sex;
int Age;
string Jiguan;
string Xibie;
string Zuanye;
string Class;
string bianhua;
ifstream in("xuesheng");
if(!in){cout<<"不能打开!"<<endl;}
for(int j=1;j<=i;j++)
{
in>>Num>>Name >>Sex
>>Age>>Jiguan
>>Xibie >>Zuanye>>Class>>bianhua ;
in.close ;
chuandi[j].Num =Num;
chuandi[j].Name =Name;
chuandi[j].Sex =Sex;
chuandi[j].Age =Age;
chuandi[j].Jiguan =Jiguan;
chuandi[j].Xibie =Xibie;
chuandi[j].Zuanye =Zuanye;
chuandi[j].Class =Class;
chuandi[j].bianhua =bianhua;
}
}
void changdu(LIST lis)
{
ofstream out("len");
out<<lis.length ();
out.close;
}
int len()
{
int i;
ifstream in("len");
in>>i;
return i;
}
void output()
{
cout<<endl<<endl<<endl<<endl<<endl
<<" ****************************************************"<<endl
<<" * *"<<endl
<<" * 学生学籍管理系统 *"<<endl
<<" * *"<<endl
<<" * 1.登记学生信息 *"<<endl
<<" * 2.删除学生信息 *"<<endl
<<" * 3.查找学生信息 *"<<endl
<<" * 4.修改学生信息 *"<<endl
<<" * 5.按要求输出籍贯表 *"<<endl
<<" * 6.退出操作选择 *"<<endl
<<" * *"<<endl
<<" * *"<<endl
<<" ****************************************************"<<endl;
cout<<endl<<endl<<" 请选择需要的功能<1-6>:";
}
void baochun()
{
cout<<endl<<endl<<endl<<endl<<endl<<endl;
cout<<" ############################################"<<endl
<<" # #"<<endl
<<" # 是否保存修改信息? #"<<endl
<<" # 是输入Y, #"<<endl
<<" # 退出输入N #"<<endl
<<" # #"<<endl
<<" ############################################"<<endl;
cout<<"输入您的选择:";
}
void jixu()
{
cout<<endl<<endl<<endl<<endl<<endl<<endl;
cout<<" ############################################"<<endl
<<" # #"<<endl
<<" # 是否继续操作? #"<<endl
<<" # 是输入Y, #"<<endl
<<" # 退出输入N #"<<endl
<<" # #"<<endl
<<" ############################################"<<endl;
cout<<"输入您的选择:";
}
#endif
5. 测试
创建数据库,建立好相应的数据表,插入系统用户、学生、课程等数据信息,进行系统测试与调试。
5.1创建系统测试数据
学号 姓名 性别年龄 籍贯 系别 专业 班级 学籍变化
11003 小虎 男 21 广西 计算机 软件 102 入学
09002 小华 女 23 湖北 机电 制作 301 毕业
10004 小东 男 22 湖南 材料 开发 501 转专业
6.总结
课程设计总结:
学习C++课程两个学期,现在刚刚学完,学校安排大一下学期做面向对象语言程序设计。知识的掌握和了解还不是很到位,应用起来不灵活,拿起书本不断的翻看查找,复习一下所学的知识,开始在脑海中酝酿要做一个什么样的系统。经过一周的努力,算是完成了任务吧。马上进入大二了,还没有完全巩固学习过的知识,所以只能每天白天查阅资料,基本上都是晚上敲一些代码,所以会有许多不足之处,也遇到了不少问题。例如:在测试连接数据库时,对学生信息的更新总是失败。我对程序执行过程进行了细致分析,没有发现任何逻辑上的问题,于是我在所有的地方都添加断点,多次调试后,发现问题出在类的构造函数和析构函数被多次调用,而且每次调用对象时,都会建立类的临时对象。后来我弄明白了在对对象进行操作时,没有使用引用方式,所以任何操作都不会对其产生实质作用。当我把菜单函数中对类对象的调用方式都改成引用后,问题迎刃而解。在完成课程设计的过程中,这种问题还有很多,加上时间紧迫,中途时不时会灰心丧气,但是最后还是坚持了下来。这次的课程设计经历告诉我,做一件事情,只要自己不放弃,就一定能得到自己所要的。
参考文献
[1] 张俊.王庆春.面向对象程序设计(C++).武汉:武汉大学出版社.2009
[2] 谭浩强.语言程序设计.北京:清华大学出版社.2004
[3] 李普曼.C++ Primer中文版(第4版).北京:人民邮电出版社.2008
[4] 钱雪忠.黄建华.数据库原理及应用第二版.北京:北京邮电大学出版社.2005
[5] 罗建军. 朱丹军.顾刚.刘路放. 高等教育出版社__2版
附录 部分代码
//MyLIST.cpp
#include"MyLIST.h"
int LIST::length()
{
int counter=0;
Student *current;
current=head->next;
while(current!=NULL)
{
current=current->next;
counter++;
}
return counter;
}
bool LIST::get_data(int i,Student &x)
{ Student *current;
int j=1;
if((i<1)||(i>length()))
{
cout<<"非法位置读取元素,不能读取! \n";
return false;
}
current=head->next;
while(current!=NULL&&j<i)
{
j++;
current=current->next;
}
x=*current;
return true;
}
bool LIST::get_succ (int i, Student &x)
{
Student *current ;
int j=1;
if((i<1)||(i>length()))
{ cout<<"非法位置读取元素,不能读取! \n";
return false;
}
current=head->next;
while(current!=NULL&&j<i)
{
j++;
current=current->next;
}
if(current->next!=NULL)
{
x=*current->next;
return true;
}
else
{
cout<<"第"<<i<<"个元素无后续,不能读取!\n";
return false;
}
}
bool LIST::get_prior (int i, Student &x)
{
Student*current ,*previous;
int j=1;
if((i<1)||(i>length()))
{ cout<<"非法位置读取元素,不能读取! \n";
return false;
}
previous=head;
current=head->next;
while(current!=NULL&&j<i)
{
j++;
previous=current;
current=current->next;
}
if( previous!=head)
{
x=*previous;
return true;
}
else
{
cout<<"第"<<i<<"个元素无前驱,不能读取!\n";
return false;
}
}
bool LIST::replace_data (double i)
{
int j=0;
Student *current =head;
current=head->next;
while(current!=NULL&¤t->Num !=i)
{
j++;
current=current->next;
}
if(j==length())
{
cout<<"没有找到该学号相关信息!"<<endl;
return false;
}
int xg;
cout<<"输入您要修改的学生信息:1学号,2姓名,3性别,4年龄,5籍贯,6系别,7专业,8班级, 9学籍变化."<<endl;
cin>>xg;
string xingming;
string xingbie;
string jiguan;
string xibie;
string zhuanye;
string banji;
string bianhua;
switch(xg)
{
case 1:
double num;
cout<<"您将修改学号,请输入新的学号"<<endl;
cin>>num;
current->Num =num;
break;
case 2:
cout<<"您将修改姓名,请输入新姓名"<<endl;
cin>>xingming;
current->Name =xingming;
break;
case 3:
cout<<"您将修改性别,请输入新性别"<<endl;
cin>>xingbie;
current->Sex =xingbie;
break;
case 4:
int nianling;
cout<<"您将修改年龄,请输入新的年龄"<<endl;
cin>>nianling;
current->Num =nianling;
break;
case 5:
cout<<"您将修改籍贯,请输入新籍贯"<<endl;
cin>>jiguan;
current->Jiguan=jiguan;
break;
case 6:
cout<<"您将修改系别,请输入新系别"<<endl;
cin>>xibie;
current->Xibie=xibie;
break;
case 7:
cout<<"您将修改专业,请输入新专业"<<endl;
cin>>zhuanye;
current->Zuanye =zhuanye;
break;
case 8:
cout<<"您将修改班级,请输入新班级"<<endl;
cin>>banji;
current->Class =banji;
break;
case 9:
cout<<"您将修改学籍,请输入新学籍"<<endl;
cin>>bianhua;
current->bianhua =bianhua;
break;
}
return true;
}
bool LIST::insert_data ( Student data,int i)
{
Student*current ,*previous,*newnode;
int j=1;
newnode=new Student;
if( newnode==NULL)
{
cout<<"内存无空闲空间,不能插入:";
return false;
}
newnode->Age =data.Age ;
newnode->Num =data.Num ;
newnode->Class =data.Class;
newnode->Jiguan =data.Jiguan;
newnode->Name =data.Name;
newnode->Sex =data.Sex;
newnode->Xibie =data.Xibie;
newnode->Zuanye =data.Zuanye;
newnode->bianhua =data.bianhua ;
newnode->next=NULL;
previous=head;
current=head->next;
while(current!=NULL&&j<i+1)
{
previous=current;
current=current->next;
j++;
};
newnode->next=current;
previous->next=newnode;
return true;
}
bool LIST::delete_data (double i)
{
Student *current ,*previous;
int j=0;
if(isempty())
{
cout<<"表已空,不能删除!\n";
return false;
};
previous=head;
current=head->next;
while(current!=NULL&¤t->Num !=i)
{
previous=current;
current=current->next;
j++;
};
if(j==length())
{
cout<<"没有该学号信息,不能删除!"<<endl;
return false;
}
previous->next=current->next;
delete current;
return true;
}
bool LIST::find_data (double i,Student &result)
{
Student *current ;
current=head->next;
while(current!=NULL)
{
if(current->Num !=i )
current=current->next;
else
{
result.Age =current->Age ;
result.Num =current->Num ;
result.Class=current->Class;
result.Jiguan=current->Jiguan;
result.Name=current->Name;
result.Sex=current->Sex;
result.Xibie=current->Xibie;
result.Zuanye=current->Zuanye;
result.bianhua =current->bianhua ;
cout<<"查找结果如下:"<<endl;
cout<<"学号"<<"\t"<<"姓名"<<"\t" <<"性别"
<<"\t"<<"年龄" <<"\t"<<"籍贯"
<<"\t" <<"系别" <<"\t"<<"专业" <<"\t"<<"班级"<<"\t"<<"学籍变化"<<endl ;
cout<<result.Num <<"\t"<<result.Name <<"\t" <<result.Sex <<"\t"<<result.Age
<<"\t" <<result.Jiguan <<"\t" <<result.Xibie <<"\t"<<result.Zuanye
<<"\t"<<result.Class <<"\t"<<result.bianhua <<endl ;
return true;
}
}
cout<<"没有该学号的学生信息!"<<endl;
return false;
}
void LIST::tongji (Student x)
{
Student *current;
string xingming;
string xingbie;
string jiguan;
string xibie;
string zhuanye;
string banji;
string bianhua;
int nl;
int sum=0;
int tj;
cout<<"选择统计信息:1性别,2年龄,3籍贯,4系别,5专业,6班级,7学籍变化"<<endl;
cin>>tj;
switch(tj)
{
case 1:
cout<<"输入要输出的性别: ";
cin>>xingbie;
cout<<jiguan<<"生的信息如下"<<endl;
cout<<"学号"<<"\t"<<"姓名"<<"\t" <<"性别"
<<"\t"<<"年龄" <<"\t"<<"籍贯"
<<"\t" <<"系别" <<"\t"<<"专业" <<"\t"<<"班级"<<"\t"<<"学籍变化"<<endl ;
current=head->next;
while(current!=NULL)
{
if(current->Sex==xingbie)
{
sum=sum+1;
cout<<current->Num<<"\t"<<current->Name<<"\t" <<current->Sex
<<"\t"<<current->Age <<"\t"<<current->Jiguan
<<"\t" <<current->Xibie <<"\t"<<current->Zuanye <<"\t"<<current->Class<<"\t"<<current->bianhua <<endl ;
}
current=current->next;
}
break;
case 2:
cout<<"输入要输出的年龄: ";
cin>>nl;
cout<<"年龄为"<<nl<<"的学生信息如下"<<endl;
cout<<"\t"<<"学号"<<"\t"<<"姓名"<<"\t" <<"性别"
<<"\t"<<"年龄" <<"\t"<<"籍贯"
<<"\t" <<"系别" <<"\t"<<"专业" <<"\t"<<"班级"<<"\t"<<"学籍变化"<<endl ;
current=head->next;
while(current!=NULL)
{
if(current->Age ==nl)
{
sum=sum+1;
cout<<current->Num<<"\t"<<current->Name<<"\t" <<current->Sex
<<"\t"<<current->Age <<"\t"<<current->Jiguan
<<"\t" <<current->Xibie <<"\t"<<current->Zuanye <<"\t"<<current->Class<<"\t"<<current->bianhua <<endl ;
}
current=current->next;
}
break;
case 3:
cout<<"输入要输出的籍贯: ";
cin>>jiguan;
cout<<"籍贯为"<<jiguan<<"的学生信息如下"<<endl;
cout<<"学号"<<"\t"<<"姓名"<<"\t" <<"性别"
<<"\t"<<"年龄" <<"\t"<<"籍贯"
<<"\t" <<"系别" <<"\t"<<"专业" <<"\t"<<"班级"<<"\t"<<"学籍变化"<<endl ;
current=head->next;
while(current!=NULL)
{
if(current->Jiguan ==jiguan)
{
sum=sum+1;
cout<<current->Num<<"\t"<<current->Name<<"\t" <<current->Sex
<<"\t"<<current->Age <<"\t"<<cu
展开阅读全文