学生信息管理系统txt.docx
《学生信息管理系统txt.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统txt.docx(17页珍藏版)》请在冰点文库上搜索。
学生信息管理系统txt
学生信息管理系统
完成时间2013年5月27日
1、编程目的
(1)对C++语法、基础知识进行综合运用,编写具有一定综合应用价值的稍大一些的程序,掌握面向对象程序设计(OOP)的思想,培养学生使用面向对象的程序设计思想分析和解决实际问题的能力;
(2)掌握在VisualC++集成开发环境下编辑、编译、链接和运行一个C++程序的基本方法;
(3)加深对所学知识的理解和掌握;
(4)培养文档报告书面表达和思辨的能力。
2、系统简介
利用面向对象的方法以及C++的编程思想来完成学生信息管理系统的设计。
学生信息包括:
学号、姓名、性别、班级、联系电话等等信息(也可自主设计其他的学生相关信息)。
要求实现学生信息的增加、修改、查询、删除、浏览等基本功能。
学生信息保存在文件中,要求文件中至少要记录10位学生信息的相关数据。
3、编程思路
本程序建立了带表头节点的链表类、菜单类、主函数。
菜单类包括增加学生信息、删除信息、查找、浏览等功能。
链表类包括建立链表和删除链表
4、总体设计
下表是根据程序画的基本结构图:
5、关键技术说明
运用了面向对象设计中的类和链表,类是逻辑上相关的函数及数据的封装,它是对所要处理的问题的抽象描述。
类实际上也就相当于用户自定义的类型,和基本数据类型的不同之处在于,类这个特殊类型中同时包含了对数据进行操作的函数。
链表类的基本操作应该包括:
生成新节点、插入节点、删除节点、访问/修改节点数据、遍历链表等。
因此,在链表类中应该包含完成上述操作的成员函数,以及为了实现这些函数而添加的一些辅助函数,为了方便链表类对象间的赋值,还应重载“=”运算符。
另外,由于面向对象的封装特性,当然还要提供一些接口函数。
6、源代码
#include
#include
classStuList;
classStudent
{
friendStuList;
private:
charname[9];
charsex[6];
charadd[20];
intnumber;
Student*next;
public:
Student(char*val=NULL,char*sal=NULL,char*adl=NULL,intNo=0)
{
number=No;next=NULL;
if(val!
=NULL)
strcpy(name,val);
if(sal!
=NULL)
strcpy(sex,sal);
if(adl!
=NULL)
strcpy(add,adl);
}
};
classStuList//带表头节点的链表类
{
private:
Student*head,*current;
intcount;
public:
StuList()
{
current=head=newStudent;
count=2003060;
cout<<"链表已建立"<}
~StuList()
{
makeEmpty();
deletehead;
cout<<"链表已删除"<}
//以下是成员函数
voidmakeEmpty();
voidadd(char*value,char*salue,char*adl);
voidinsert(intNo,char*value,char*salue,char*adl);
voidremove(intNo);
voidprint();
voidsearchStu(char*value);
intlength()
{
returncount-2003060;
}
};
voidStuList:
:
makeEmpty()//清空链表
{
Student*p;
while(head->next!
=NULL)
{
p=head->next;
head->next=p->next;
deletep;
}
current=head;
count=0;
}
voidStuList:
:
add(char*value,char*salue,char*adl)//将新元素value插入到最后
{
Student*newStu;
newStu=newStudent(value,salue,adl);
while(current->next!
=NULL)
current=current->next;
newStu->next=current->next;
current=current->next=newStu;
newStu->number=count+1;
count++;
cout<}
voidStuList:
:
insert(intNo,char*value,char*salue,char*adl)//将新元素value插入,使他的学号变为No
{
Student*newStu;
Student*node=head;
newStu=newStudent(value,salue,adl,No);
while(node->next!
=NULL)
{
if(node->number==No-1)break;
node=node->next;
}
newStu->next=node->next;
newStu->number=No;
node=node->next=newStu;
Student*p=node->next;
while(p!
=NULL)
{
p->number++;
p=p->next;
}
count++;
cout<}
voidStuList:
:
remove(intNo)//删除元素value
{
Student*p,*q;
q=head->next;
while(q!
=NULL)
{
if(q->number==No)break;
q=q->next;
}
if(q==NULL)
{
cout<<"没找到!
"<return;
}
p=head;
while(p!
=NULL)//找到q的前一个节点p
{
if(p->next==q)break;
p=p->next;
}
p->next=q->next;
deleteq;
count--;
p=p->next;
while(p!
=NULL)
{
p->number--;
p=p->next;
}
cout<<"学号"<}
voidStuList:
:
print()//输出链表
{
Student*p;
if(head->next==NULL)//链表为空
{
cout<<"链表为空!
"<return;
}
cout<<"学号"<<"姓名"<<"性别"<<"地址"<p=head->next;
while(p->next!
=NULL)
{
cout<number<<""<name<<""<sex<<""<add<p=p->next;
}
cout<number<<""<name<<""<sex<<""<add<}
voidStuList:
:
searchStu(char*value)//查找含数据value的节点,返回该地址
{
current=head->next;
while(current!
=NULL)
{
if(strcmp(current->name,value)==0)break;
current=current->next;
}
if(current==NULL)cout<<"没找到!
"<elsecout<<"找到学号为"<number<<''<}
classMenu//菜单类
{
char*c1,*c2;
public:
Menu()
{
c1="*";
c2="*\n";
}
voidshow()
{
cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<}
};
voidmain()
{
charcmd;
StuList*list=NULL;
Menumenu;
menu.show();
do{
cout<";
cin>>cmd;
if(list==NULL)//检查输入的命令是否合适
while(cmd!
='1'&&cmd!
='9'&&cmd!
='0')
{
cout<<"还没有建立链表,请先建立链表";
cin>>cmd;
}
switch(cmd)//匹配命令
{
case('1'):
//建表
list=newStuList;
break;
case('2'):
//加入学生到链表后
charinsname2[9],inssex2[6],insadd2[20];
cout<<"请输入姓名,性别(maleorfemale),地址。
"<cin>>insname2;
cin>>inssex2;
cin>>insadd2;
list->add(insname2,inssex2,insadd2);
break;
case('3'):
//按学号插入一个学生
charinsname3[9],inssex3[6],insadd3[20];
intinsnum;
cout<<"学号(200306x):
";
cin>>insnum;
cout<<"姓名:
";
cin>>insname3;
cout<<"性别:
";
cin>>inssex3;
cout<<"地址:
";
cin>>insadd3;
list->insert(insnum,insname3,inssex3,insadd3);
break;
case('4'):
//删除一个学生
intrem;
cout<<"学号(200306x):
";
cin>>rem;
list->remove(rem);
break;
case('5'):
//显示所有学生
list->print();
break;
case('6'):
//按姓名查找一个学生
charsear[9];
cout<<"姓名:
";
cin>>sear;
list->searchStu(sear);
list->print();
break;
case('7'):
//学生总数
cout<<"共有"<length()<<"个学生"<break;
case('8'):
//清空链表
list->makeEmpty();
cout<<"链表为空"<break;
case('9'):
//显示菜单
menu.show();
break;
case('0'):
//退出
if(list==NULL)break;
chartemp;
cout<<"删除链表退出?
(y/n):
";
cin>>temp;
if(temp=='y')
{
list->~StuList();list=NULL;
}
elsecmd=10;
break;
default:
cout<<"请输入菜单中的命令!
"<}
}while(cmd!
='0');
}
7、测试(程序有相似只列出部分程序)。
()
(1)开始界面:
(2)加入学生资料:
本程序可以添加很多的学生资料(加一个为例)
(3)插入一个学生:
(4)移除一个学生信息:
(5)显示学生人数:
由于移除一个学生,下面的学生学号自动升一位。
(6)按姓名查找:
8、系统评价及展望
优点:
(1)界面友好(良好的人机交互),提供菜单选项,并给出足够的选择信息以及提示信息。
(2)程序具有一定的健壮性,不会因为用户的输入错误引起程序运行错误而中断执行。
(3)源程序要加适当的注释,使程序容易阅读;
(4)可无限添加学生资料
缺点:
(1)学生学号是系统默认的,如果要更改学号要重新编写程序。
(2)本程序要进行操作,首先要建立链表,否则不能进行。
(3)界面中的9操作及彩单重复
展望:
在此程序基础之上还可以进行添加其他功能,例如添加学生的成绩。
且不会对原程序任何影响。