学生学籍管理说明书.docx

上传人:b****6 文档编号:8453849 上传时间:2023-01-31 格式:DOCX 页数:42 大小:343.33KB
下载 相关 举报
学生学籍管理说明书.docx_第1页
第1页 / 共42页
学生学籍管理说明书.docx_第2页
第2页 / 共42页
学生学籍管理说明书.docx_第3页
第3页 / 共42页
学生学籍管理说明书.docx_第4页
第4页 / 共42页
学生学籍管理说明书.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

学生学籍管理说明书.docx

《学生学籍管理说明书.docx》由会员分享,可在线阅读,更多相关《学生学籍管理说明书.docx(42页珍藏版)》请在冰豆网上搜索。

学生学籍管理说明书.docx

学生学籍管理说明书

*******************

实践教学

*******************

 

兰州理工大学

计算机与通信学院

2012年春季学期

 

算法与数据结构课程设计

 

题目:

学籍管理

专业班级:

10级软件工程基地班

姓名:

学号:

10500233

指导教师:

王旭阳

成绩:

目录

摘要1

1.采用类c语言定义相关的数据类型2

2.各模块的伪码算法2

3.函数的调用关系图6

4.调试分析7

5.测试结果7

6.源程序(带注释)11

总结27

参考文献28

致谢29

附件Ⅰ任务一源程序代码30

摘要

学籍管理系统设计涉及学生信息的录入,显示,查找,删除,修改,统计,保存,退出等功能,从而能够对信息进行处理。

程序中运用了相关类的知识,同时定义了一定数量的数据及成员函数。

程序使用了数组记录统计的相关数据,运用了指针实现相应功能函数的功能,运用了student,school两个类实现面向对象的要求。

程序的完成涉及到程序的分析,模块的分解,程序的控制,程序的调试。

 

关键词:

学籍管理;数据结构;C++;程序控制

 

1.采用类c语言定义相关的数据类型

类:

student

数据成员

编号,姓名,年龄,专业,性别,籍贯,民族,生日,政治面貌,身份证,数学成绩,英语成绩,计算机成绩

类:

school

成员函数

录入函数Input():

输入编号到计算机的成绩;

统计函数count():

统计各科的总成绩,计算平均成绩,统计各科的及格率;

查询函数found():

按学号或姓名查找学生的记录;

修改函数mend():

修改指定学号学生成绩记录;

删除函数del():

删除指定学号学生记录;

输出函数show():

输出班级所有学生成绩记录;

2.各模块的伪码算法

2.1定义类:

classstudent

{

protected:

variable;

public:

student*next;

student(){}

~student(){}

char*getname(){returnname;}

intgetnumber(){returnnumber;}

doublegetscore(inti){returnscore[i];}

floatgetg(){return(score[0]+score[1]+score[2]+score[3]+score[4]+score[5]);}

input:

data;

output:

data。

2.2保存函数

voidschool:

:

save()

{

student*p;

p=head;

ofstreamos("student.txt",ios:

:

out);

if(school:

:

getkey()==1)

{

while(p->next)

{

(p->next)->output(os);

p=p->next;

}

}

school:

:

setkey(0);

}

2.3修改函数

voidschool:

:

mend()

{

student*p;

intnum=-1,n;

charname[20]="^";

if(n==1)学号

if(n==2)姓名

if(!

find(&p,num,name))

(p->next)->output();

(p->next)->input();

school:

:

setkey

(1);

}

2.4查找函数

voidschool:

:

found()

{

student*p;

intnum=-1,n=9;

charname[20]="^";

if(n==1):

学号

if(n==2):

姓名

if(!

find(&p,num,name))

(p->next)->output();

}

2.5初始化函数

//初始化函数

voidschool:

:

begin()

{

student*p,*p2;

p=head;

clear();

longt;

ifstreamis("student.txt",ios:

:

in);

if(!

is)

{

ofstreamos("student.txt",ios:

:

out);

os.close();

return;

}

intnum=-1;

while

(1)

{

num=-1;

t=is.tellg();

is>>num;

is.seekg(t);

if(num<0)

{

is.close();

return;

}

p2=newstudent;

p2->input(is);

p->next=p2;

p2->next=NULL;

p=p->next;

}

}

2.6清空函数:

voidschool:

:

clear()

{

student*p,*p2;

p=head->next;

while(p)

{

p2=p;

p=p->next;

deletep2;

}

}

3.

函数的调用关系图

系统组织结构图:

 

系统功能结构图

 

4.调试分析

a、调试中遇到的问题及对问题的解决方法

此次课程设计所研究的问题不是很难,即进行学籍管理,所以总的高度比较顺利。

但在最初的设计过程中犯了一个致命的错误,即没有很好的进行整体布局,也没有定义统一的函数接口,以致程序的结构与函数的混乱。

当各模块组合在一起的时候更是无没进行调试。

故只有一切从头开始,重新分配任务,以及统一定义各函数的接口。

在调试的过程中发现当输入错误的时会发生想不到的错误,为了避免这样意外的发生,写了一个判断函数judge()以及输入函数input()对其进行改进。

当一段相同的代码在程序中多次使用并且功能相对单一时,有必要将其写成一个函数,以减少工作量,并且使程序具有更好的可读性。

在编写程序的过程中,及时对重要和难懂的程序段写注释是一个很好的习惯,无论是以后的测试还是以后的维护都能够节省相当多的时间。

调试时最先进行各函数的调试,确保无误时再进行各模块的调试,最后才是将各模块组合在一起测试完整的程序。

在调试的过程中不断地进行改进、完善。

在序能够正确运行的基础上,再对各函数进行格式的优化,加强程序的结构性,并增强程序的可读性,包括给运行界面增加相应的操作提示等,使操作界面简单而又美观。

b、算法的时间复杂度和空间复杂度

本算法采用类对象的列表,假设实例化为n,则其时间复杂度和空间复杂度都是O(n)。

5.测试结果

 

5.1主菜单:

5.2录入信息界面

 

5.3显示信息界面:

 

5.4查找学生界面:

 

5.5修改学生信息界面:

5.6统计成绩界面:

5.7保存学生信息界面:

6.源程序(带注释)

#include

#include

#include

#include

usingnamespacestd;

classstudent

{

protected:

intnumber;

intage;

charname[20];

charsex[6];

charzhy[20];

charplace[20];

charnation[6];

charbirth[20];

charparty[10];

charid[20];

floatscore[6];

public:

student*next;

student(){}

~student(){}

char*getname(){returnname;}

intgetnumber(){returnnumber;}

doublegetscore(inti){returnscore[i];}

floatgetg(){return(score[0]+score[1]+score[2]+score[3]+score[4]+score[5]);}

voidinput()

{

inte=1;

cout<<"\t\t\t按提示输入:

"<

cout<<"\t\t输入学号:

";

cin>>number;

cout<<"\t\t输入年龄:

";

cin>>age;

cout<<"\t\t输入姓名:

";

cin>>name;

do

{

cout<<"\t\t输入性别:

";

cin>>sex;

if(strcmp(sex,"男")==0||strcmp(sex,"女")==0)

{

cout<<"\t\t输入专业:

";

cin>>zhy;

cout<<"\t\t输入籍贯:

";

cin>>place;

cout<<"\t\t输入民族:

";

cin>>nation;

cout<<"\t\t输入生日:

";

cin>>birth;

cout<<"\t\t输入政治面貌:

";

cin>>party;

cout<<"\t\t输入身份证号:

";

cin>>id;

cout<<"\t\t输入数学分数:

";

cin>>score[0];

cout<<"\t\t输入英语分数:

";

cin>>score[1];

cout<<"\t\t输入计算机分数:

";

cin>>score[2];

cout<<"\t\t输入语文分数:

";

cin>>score[3];

cout<<"\t\t输入算法与数据结构分数:

";

cin>>score[4];

cout<<"\t\t输入物理分数:

";

cin>>score[5];

e=0;

}

else

{

cout<<"\t\t\t无此性别类型!

重新输入!

"<

e=1;

}

}while(e);

return;

}

voidinput(ifstream&is)

{

is>>number>>age>>name>>sex>>zhy>>place>>nation>>birth>>party>>id

>>score[0]>>score[1]>>score[2]>>score[3]>>score[4]>>score[5];

is.get();

}

voidoutput()

{

cout<<"学生基本信息如下:

"<

cout<<"学号:

"<

<<"年龄:

"<

<<"姓名:

"<

<<"性别:

"<

<<"籍贯:

"<

<<"民族:

"<

<<"专业:

"<

<<"生日:

"<

<<"政治面貌:

"<

<<"身份证号:

"<

<<"数学:

"<

<<"英语:

"<

<<"计算机:

"<

<<"语文:

"<

<<"算法与数据结构:

"<

<<"物理:

"<

<<"总分:

"<

}

voidoutput(ofstream&os)

{

os<

<

<

<

<

<

<

<

<

<

<

<

<

<

<

<

}

};

classschool

{

public:

school(){head=newstudent;head->next=NULL;key=0;}

~school(){deletehead;}

voidinput();

voidmend();

voiddel();

intfind(student**p,intnum,char*pn="^");

voidfound();

voidshow();

voidcount();

voidsave();

voidbegin();

voidclear();

charmainmenu();

intgetkey(){returnkey;}

voidsetkey(intk){key=k;}

private:

student*head;

intkey;

};

//录入函数

voidschool:

:

input()

{

student*p,*p2=NULL;

p=head;

intn;

while(p->next)

p=p->next;

while(n)

{

p2=newstudent;

p2->input();

p->next=p2;

p2->next=NULL;

p=p->next;

school:

:

setkey

(1);

cout<<"\t\t\t按1继续,按0返回:

";

cin>>n;

}

}

//子查找函数

intschool:

:

find(student**p1,intnum,char*pn)

{

student*p;

p=head;

while(p->next)

{

(*p1)=p;

if((p->next)->getnumber()==num||!

strcmp((p->next)->getname(),pn))

return1;

p=p->next;

}

return0;

}

//查找函数

voidschool:

:

found()

{

student*p;

intnum=-1,n=9;

charname[20]="^";

do

{

cout<<"\t\t1:

按学号查找,2:

按姓名查找:

";

cin>>n;

}while(n<1||n>2);

if(n==1)

{

cout<<"\t\t\t输入学号:

";

cin>>num;

}

if(n==2)

{

cout<<"\t\t\t输入姓名:

";

cin>>name;

}

if(!

find(&p,num,name))

{

cout<<"\t\t找不到你要查找的内容!

"<

return;

}

(p->next)->output();

}

//删除函数

voidschool:

:

del()

{

student*p,*p2;

intnum;

cout<<"\t\t\t输入学号:

";

cin>>num;

if(!

find(&p,num,"^"))

{

cout<<"\t\t找不到你要删除的内容!

"<

return;

}

(p->next)->output();

p2=p->next;

p->next=p2->next;

deletep2;

school:

:

setkey

(1);

}

//显示函数

voidschool:

:

show()

{

student*p;

p=head;

while(p->next)

{

(p->next)->output();

p=p->next;

}

}

//修改函数

voidschool:

:

mend()

{

student*p;

intnum=-1,n;

charname[20]="^";

do

{

cout<<"\t\t1:

按学号修改,2:

按姓名修改:

";

cin>>n;

}while(n<1||n>2);

if(n==1)

{

cout<<"\t\t\t输入学号:

";

cin>>num;

}

if(n==2)

{

cout<<"\t\t\t输入姓名:

";

cin>>name;

}

if(!

find(&p,num,name))

{

cout<<"\t\t找不到你要修改的内容!

"<

return;

}

(p->next)->output();

(p->next)->input();

school:

:

setkey

(1);

}

//保存函数

voidschool:

:

save()

{

student*p;

p=head;

ofstreamos("student.txt",ios:

:

out);

if(school:

:

getkey()==1)

{

while(p->next)

{

(p->next)->output(os);

p=p->next;

}

}

cout<<"\t\t\t文件已保存!

"<

school:

:

setkey(0);

}

//初始化函数

voidschool:

:

begin()

{

student*p,*p2;

p=head;

clear();

longt;

ifstreamis("student.txt",ios:

:

in);

if(!

is)

{

ofstreamos("student.txt",ios:

:

out);

os.close();

return;

}

intnum=-1;

while

(1)

{

num=-1;

t=is.tellg();

is>>num;

is.seekg(t);

if(num<0)

{

is.close();

return;

}

p2=newstudent;

p2->input(is);

p->next=p2;

p2->next=NULL;

p=p->next;

}

}

//清空函数

voidschool:

:

clear()

{

student*p,*p2;

p=head->next;

while(p)

{

p2=p;

p=p->next;

deletep2;

}

}

//统计函数

voidschool:

:

count()

{

student*p;

p=head;

intn=0;

doubleg[6]={0,0,0,0,0,0};

floatj[6]={0,0,0,0,0,0};

while(p->next)

{

p=p->next;

n++;

for(inti=0;i<6;i++)

{

g[i]=g[i]+(p->getscore(i));

(p->getscore(i))>=60?

j[i]++:

0;

}

}

cout<<"\t\t\b\b\b\b数学总分:

"<

"<

"<

<<"\t\t\b\b\b\b英语总分:

"<

"<

"<

<<"\t\t\b\b\b\b计算机总分:

"<

"<

"<

<<"\t\t\b\b\b\b语文总分:

"<

"<

"<

<<"\t\t\b\b\b\b算法与数据结构总分:

"<

"<

"<

<<"\t\t\b\b\b\b物理总分:

"<

"<

"<

}

//主选菜单函数

charschool:

:

mainmenu()

{

charn[6];

cout<<"\n\n☆☆☆☆欢迎进入高校学籍管理系统☆☆☆☆"<

<<"\n\n班级:

10级软件工程基地班姓名:

田亚红"<

<<"****************************"<

<<"****************************"<

<<"**1:

录入学生信息**"<

<<"**2:

显示学生信息**"<

<<"**3:

查找学生信息**"<

<<"**4:

删除学生信息**"<

<<"**5:

修改学生信息**"<

<<"**6:

统计学生成绩**"<

<<"**7:

保存学生信息**"<

<<"**0:

退出系统**"<

<<"****************************"<

<<"****************************"<

<<"请选择:

";

cin>>n;

returnn[0];

}

//主函数

voidmain()

{

schoolpp;

intk=1;

charn;

pp.begin();

while(k==1)

{

n=pp.mainmenu();

switch(n)

{

case'1':

pp.input();break;

case'2':

pp.show();break;

case'3':

pp.found();break;

case'4':

pp.del();break;

case'5':

pp.mend();break;

case'6

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1