1、学生学籍管理说明书*实践教学*兰州理工大学计算机与通信学院2012年春季学期算法与数据结构课程设计题 目: 学籍管理 专业班级: 10级软件工程基地班 姓 名: 学 号: 10500233 指导教师: 王旭阳 成 绩: 目 录摘 要 11. 采用类c语言定义相关的数据类型 22. 各模块的伪码算法 23. 函数的调用关系图 64. 调试分析 75. 测试结果 76. 源程序(带注释) 11总 结 27参考文献 28致 谢 29附件 任务一源程序代码 30摘 要学籍管理系统设计涉及学生信息的录入,显示,查找,删除,修改,统计,保存,退出等功能,从而能够对信息进行处理。程序中运用了相关类的知识,同
2、时定义了一定数量的数据及成员函数。程序使用了数组记录统计的相关数据,运用了指针实现相应功能函数的功能,运用了student ,school两个类实现面向对象的要求。程序的完成涉及到程序的分析,模块的分解,程序的控制,程序的调试。关键词:学籍管理;数据结构;C+;程序控制 1. 采用类c语言定义相关的数据类型类:student 数据成员编号,姓名,年龄,专业,性别,籍贯,民族,生日,政治面貌,身份证,数学成绩,英语成绩,计算机成绩类:school成员函数录入函数Input():输入编号到计算机的成绩;统计函数count():统计各科的总成绩,计算平均成绩,统计各科的及格率;查询函数found()
3、:按学号或姓名查找学生的记录;修改函数mend():修改指定学号学生成绩记录;删除函数del():删除指定学号学生记录;输出函数show():输出班级所有学生成绩记录;2. 各模块的伪码算法2.1定义类:class student protected: variable; public: student *next; student() student() char* getname() return name; int getnumber() return number; double getscore(int i) return scorei; float getg() return (s
4、core0+score1+score2+score3+score4+score5); input:data;output:data。2.2保存函数void school:save() student *p; p=head; ofstream os(student.txt,ios:out); if (school:getkey()=1) while(p-next) (p-next)-output(os); p=p-next; school:setkey(0);2.3修改函数void school:mend() student *p; int num=-1,n; char name20=; if(
5、n=1) 学号if(n=2) 姓名 if( !find(&p,num,name) )(p-next)-output(); (p-next)-input(); school:setkey(1);2.4查找函数void school:found() student *p; int num=-1,n=9; char name20=;if(n=1) :学号if(n=2) :姓名if(!find(&p,num,name) )(p-next)-output();2.5初始化函数/初始化函数void school:begin() student *p,*p2; p=head; clear(); long t
6、; ifstream is(student.txt,ios:in); if(!is) ofstream os(student.txt,ios:out); os.close(); return ; int num=-1; while(1) num=-1; t=is.tellg(); isnum; is.seekg(t); if(numinput(is); p-next=p2; p2-next=NULL; p=p-next; 2.6清空函数:void school:clear() student *p,*p2; p=head-next; while( p ) p2=p; p=p-next; del
7、ete p2; 3. 函数的调用关系图系统组织结构图:系统功能结构图:4. 调试分析a、 调试中遇到的问题及对问题的解决方法 此次课程设计所研究的问题不是很难,即进行学籍管理,所以总的高度比较顺利。但在最初的设计过程中犯了一个致命的错误,即没有很好的进行整体布局,也没有定义统一的函数接口,以致程序的结构与函数的混乱。当各模块组合在一起的时候更是无没进行调试。故只有一切从头开始,重新分配任务,以及统一定义各函数的接口。在调试的过程中发现当输入错误的时会发生想不到的错误,为了避免这样意外的发生,写了一个判断函数judge()以及输入函数input()对其进行改进。当一段相同的代码在程序中多次使用并
8、且功能相对单一时,有必要将其写成一个函数,以减少工作量,并且使程序具有更好的可读性。在编写程序的过程中,及时对重要和难懂的程序段写注释是一个很好的习惯,无论是以后的测试还是以后的维护都能够节省相当多的时间。调试时最先进行各函数的调试,确保无误时再进行各模块的调试,最后才是将各模块组合在一起测试完整的程序。在调试的过程中不断地进行改进、完善。在序能够正确运行的基础上,再对各函数进行格式的优化,加强程序的结构性,并增强程序的可读性,包括给运行界面增加相应的操作提示等,使操作界面简单而又美观。b、算法的时间复杂度和空间复杂度本算法采用类对象的列表,假设实例化为n,则其时间复杂度和空间复杂度都是 O(
9、n)。5. 测试结果5.1 主菜单: 5.2录入信息界面5.3显示信息界面:5.4查找学生界面:5.5修改学生信息界面:5.6统计成绩界面:5.7保存学生信息界面:6. 源程序(带注释)#include#include#include#include using namespace std;class student protected: int number; int age; char name20; char sex6; char zhy20; char place20; char nation6; char birth20; char party10; char id20; float
10、 score6;public: student *next; student() student() char* getname() return name; int getnumber() return number; double getscore(int i) return scorei; float getg() return (score0+score1+score2+score3+score4+score5); void input() int e=1; coutttt按提示输入:endl; coutnumber; coutage; coutname; do coutsex; if
11、(strcmp(sex,男)=0 | strcmp(sex,女)=0) coutzhy; coutplace; coutnation; coutbirth; coutparty; coutid; coutscore0; coutscore1; coutscore2; coutscore3; coutscore4; coutscore5; e=0; else coutttt无此性别类型!重新输入!numberagenamesexzhyplacenationbirthpartyid score0score1score2score3score4score5; is.get(); void outpu
12、t() cout 学生基本信息如下:endl; cout 学号:number 年龄:age 姓名:name 性别:sex 籍贯:placeendl 民族:nation 专业:zhy 生日:birthendl 政治面貌:party 身份证号:idendl 数学:score0 英语:score1 计算机:score2endl 语文:score3 算法与数据结构:score4 物理:score5 总分:getg()endlendl; void output(ofstream & os) ossetw(6)number setw(6)age setw(15)name setw(6)sex setw(2
13、0)zhy setw(20)place setw(6)nation setw(20)birth setw(20)party setw(20)id setw(6)score0 setw(6)score1 setw(6)score2 setw(6)score3 setw(6)score4 setw(6)score5next=NULL; key=0; school() delete head; void input(); void mend(); void del(); int find(student *p,int num,char *pn=); void found(); void show()
14、; void count(); void save(); void begin(); void clear(); char mainmenu(); int getkey() return key; void setkey(int k) key=k; private: student *head; int key;/录入函数void school:input() student *p,*p2=NULL; p=head; int n; while(p-next) p=p-next; while(n) p2=new student; p2-input(); p-next=p2; p2-next=NU
15、LL; p=p-next; school:setkey(1); coutn; /子查找函数int school:find(student *p1,int num,char *pn) student *p; p=head; while(p-next) (*p1)=p; if( (p-next)-getnumber()=num|!strcmp( (p-next)-getname(),pn ) ) return 1; p=p-next; return 0;/查找函数void school:found() student *p; int num=-1,n=9; char name20=; do cou
16、tn; while(n2); if(n=1) coutnum; if(n=2) coutname; if(!find(&p,num,name) ) couttt找不到你要查找的内容!next)-output();/删除函数void school:del() student *p,*p2; int num; coutnum; if( !find(&p,num,) ) couttt找不到你要删除的内容!next)-output(); p2=p-next; p-next=p2-next; delete p2; school:setkey(1);/显示函数void school:show() stud
17、ent *p; p=head; while(p-next) (p-next)-output(); p=p-next; /修改函数void school:mend() student *p; int num=-1,n; char name20=; do coutn; while(n2); if(n=1) coutnum; if(n=2) coutname; if( !find(&p,num,name) ) couttt找不到你要修改的内容!next)-output(); (p-next)-input(); school:setkey(1);/保存函数void school:save() stud
18、ent *p; p=head; ofstream os(student.txt,ios:out); if (school:getkey()=1) while(p-next) (p-next)-output(os); p=p-next; coutttt文件已保存! num; is.seekg(t); if(numinput(is); p-next=p2; p2-next=NULL; p=p-next; /清空函数 void school:clear() student *p,*p2; p=head-next; while( p ) p2=p; p=p-next; delete p2; /统计函数
19、 void school:count() student *p; p=head; int n=0; double g6=0,0,0,0,0,0; float j6=0,0,0,0,0,0; while(p-next) p=p-next; n+; for(int i=0;igetscore(i) ); (p-getscore(i) )=60? ji+ : 0 ; coutttbbbb数学总分:g0 平均分:g0/n 及格率:j0/nendl ttbbbb英语总分:g1 平均分:g1/n 及格率:j1/nendl ttbbbb计算机总分: g2 平均分: g2/n 及格率:j2/nendl ttb
20、bbb语文总分:g3 平均分:g3/n 及格率:j3/nendl ttbbbb算法与数据结构总分:g4 平均分:g4/n 及格率:j4/nendl ttbbbb物理总分:g1 平均分:g5/n 及格率:j5/nendl;/主选菜单函数char school:mainmenu() char n6; coutnn 欢迎进入高校学籍管理系统endl nn 班级:10级软件工程基地班 姓名:田亚红 endl * * * * * * * * * * * * * * * * * * * * * * * * * * * *endl * * * * * * * * * * * * * * * * * * *
21、* * * * * * * * *endl * * 1: 录入学生信息 * *endl * * 2: 显示学生信息 * *endl * * 3: 查找学生信息 * *endl * * 4: 删除学生信息 * *endl * * 5: 修改学生信息 * *endl * * 6: 统计学生成绩 * *endl * * 7: 保存学生信息 * *endl * * 0: 退出系统 * *endl * * * * * * * * * * * * * * * * * * * * * * * * * * * *endl * * * * * * * * * * * * * * * * * * * * * * * * * * * *endl n; return n0;/主函数void main() school pp; int k=1; char n; 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