C++课程设计报告(学生学籍管理系统)(共17页).doc
精选优质文档-倾情为你奉上学生学籍管理系统 学号: 姓名: 班级:计科0601 指导教师:李春林 海南大学三亚学院2008-9-2 目 录 【摘要】 学籍管理系统设计涉及学生信息的录入,显示,查找,删除,修改,统计,保存,退出等功能,从而能够对信息进行处理。程序中运用了相关类的知识,同时定义了一定数量的数据及成员函数。程序使用了数组记录统计的相关数据,运用了指针实现相应功能函数的功能,运用了student ,school两个类实现面向对象的要求。程序的完成涉及到程序的分析,模块的分解,程序的控制,程序的调试。【关键词】 学籍管理 vc+6.0 面向对象 程序控制 类第1章 概述1.1 系统实现的目标 课程设计的任务: 制作一个小型的学生学籍管理系统,要求制作一个菜单,实现数据的录入,数据的显示,数据查找,数据的删除,数据的保存,数据的统计,数据的修改,系统的退出。系统的设计要求用到C+面向对象的程序设计,要求用到类来实现,同时每一个功能用到一个函数。基本功能:学生基本信息(编号,姓名,性别,籍贯,民族,生日,政治面貌,省份证,数学成绩,英语成绩,计算机成绩)成绩统计(各科总成绩,各科平均成绩,各科的及格率)扩展功能:学生数据的添加、修改、与删除学生数据的读取与存储 系统特点:系统要能够对相应的数据进行很好的测试,系统的统计对每一科的总成绩,平均成绩,及格律都进行了统计;系统数据的录入 除可以手工录入外,还可以采用文件的录入;系统统计学生的基本信息较全面,包括学号,姓名,民族,政治面貌,身份证号,生日,性别,数学、英语、计算机的成绩;程序中查找运用了两种查找方式即学号查找和姓名查找。1.2 系统实现方案第一步:分析题目,建立类并派生出它的子类,画出类图。 第二步:画出流程,根据流程图编写程序清单 第三步:上机调试程序(使用单步调试,设置断点、分块调试的方法)。 第五步:及时整理资料,撰写课程设计报告中有关这个题目的内容。 1.3 系统实现环境硬件配置:586以上PC兼容机或品牌机,配有彩色显示器、鼠标、键盘,内存不小于64MB,硬盘自由空间不少于200MB。推荐配置为内存128MB或256MB(或以上),硬盘自由空间500MB以上。操作系统:Windows2000/NT/Xp、Visual C+集成开发环境。第2章 系统分析2.1 调查程序对学生学籍的数据处理要求 能够输入并浏览学生的基本信息; 能够实现对学生信息的查询和修改; 能够对成绩进行统计; 能够对学生的信息进行保存;现行的系统功能:资料维护:系统维护包括对各学生信息和成绩的录入操作。资料维护:对数据表中的信息进行浏览。系统查询:可以对不同科目的总成绩、不及率、各科平均成绩相关信息。2.2现行系统分析现行系统组织结构图:开始选择菜单序号0退出7保存信息6统计成绩5修改信息4删除信息3查找信息2显示信息1录入信息选择修改方式1?按要求逐步输入学生信息2?编号查询保存?输入学生信息姓名查找保存退出第3章 系统设计3.1 系统功能设计系统功能结构图:主程序采单程序初始化程序退出输入显示查找删除修改统计3.2 类设计类:student 数据成员编号,姓名,性别,籍贯,民族,生日,政治面貌,省份证,数学成绩,英语成绩,计算机成绩类:school成员函数录入函数Input():输入编号到计算机的成绩;统计函数count():统计各科的总成绩,计算平均成绩,统计各科的及格率;查询函数found():按学号或姓名查找学生的记录;修改函数mend():修改指定学号学生成绩记录;删除函数del():删除指定学号学生记录;输出函数show():输出班级所有学生成绩记录;UML图:Student#number:int#name20:char#sex6:char#place20:char#nation6:char#birth20:char#party10: char#id20:char#score3:float+student*next; +student() +student() + * getname():char+getnumber():int+getscore(inti)double+ getg():float+ input():void+input(ifstream & is): void +output():void+output(ofstream&os):voidschool+school()+school()+ input():void+ mend():void+ del():void+ find:int+found():void+ show():void+ count():void+ save():void+ begin():void+ clear():void+mainmenu():char+getkey():int+setkey(intk):void- *head: student - key:int3.3 输入输出的设计1界面的设计、界面设计程序运行后会出现一个简捷的窗口,便于用户查询数据。、功能设计通过主窗体调用其他窗体,具体实现可以参照系统分析相关内容。应用系统主控界面包括学生信息录入,查找等功能模块。学生信息录入功能完成学生信息和成绩的输入。记录查询功能可以对数据各分类的记录进行查询。2数据输出设计系统主界面:统计界面:查找界面:显示界面:录入界面:修改界面:第4章 系统实现1.代码#include<iostream.h>#include<string.h>#include<fstream.h>#include<iomanip.h> class student protected: int number; char name20;char sex6; char place20;char nation6; char birth20;char party10; char id20;float score3;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); void input() int e=1;cout<<"ttt按提示输入:"<<endl;cout<<"tt输入编号: " cin>>number;cout<<"tt输入姓名: " cin>>name;docout<<"tt输入性别: " cin>>sex; if(strcmp(sex,"男")=0 | strcmp(sex,"女")=0) cout<<"tt输入籍贯: "cin>>place; cout<<"tt输入民族: "cin>>nation;cout<<"tt输入生日: "cin>>birth; cout<<"tt输入政治面貌: "cin>>party; cout<<"tt输入身份证号: "cin>>id; cout<<"tt输入数学分数: "cin>>score0;cout<<"tt输入英语分数: "cin>>score1; cout<<"tt输入计算机分数: "cin>>score2; e=0; else cout<<"ttt无此类型性别!重新输入!"<<endl; e=1; while(e); return ;void input(ifstream & is) is>>number>>name>>sex>>place>>nation>>birth>>party>>id >>score0>>score1>>score2;is.get(); void output()cout<<"学生基本信息如下:"<<endl; cout<<"编号:"<<number<<" 姓名:"<<name<<" 性别:"<<sex <<" 籍贯:"<<place<<" 民族:"<<nation<<" 生日:"<<birth<<" 政治面貌:"<<party<<endl<<"身份证号:"<<id<<" 数学:"<<score0<<" 英语:"<<score1 <<" 计算机:"<<score2<<" 总分:"<<getg()<<endl<<endl;void output(ofstream & os) os<<setw(6)<<number <<setw(15)<<name<<setw(20)<<place <<setw(6)<<nation<<setw(20)<<birth<<setw(20)<<party <<setw(20)<<id<<setw(6)<<score0<<setw(6)<<score1<<setw(6)<<score2<<endl;class school public: school() head=new student; head->next=NULL; key=0; school() delete head; void input(); void mend(); void del();int find(student *p,int num,char *pn="");void found(); void show(); 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=NULL; p=p->next; school:setkey(1); cout<<"ttt按1继续,按0返回 : " cin>>n; /子查找函数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 cout<<"tt1:按编号查找,2:按姓名查找: " cin>>n;while(n<1|n>2);if(n=1) cout<<"ttt输入编号: " cin>>num;if(n=2) cout<<"ttt输入姓名: "cin>>name; if(!find(&p,num,name) ) cout<<"tt找不到你要查找的内容!"<<endl;return;(p->next)->output();/删除函数void school:del() student *p,*p2; int num;cout<<"ttt输入编号: " cin>>num;if( !find(&p,num,"") ) cout<<"tt找不到你要删除的内容!"<<endl;return;(p->next)->output();p2=p->next; p->next=p2->next;delete p2;school:setkey(1); void school:show() /显示函数 student *p; p=head;while(p->next) (p->next)->output();p=p->next;/修改函数void school:mend() student *p; int num=-1,n;char name20=""do cout<<"tt1:按编号修改,2:按姓名修改: " cin>>n;while(n<1|n>2);if(n=1) cout<<"ttt输入编号: " cin>>num;if(n=2)cout<<"ttt输入姓名: "cin>>name;if( !find(&p,num,name) ) cout<<"tt找不到你要修改的内容!"<<endl;return;(p->next)->output(); (p->next)->input();school:setkey(1);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; cout<<"ttt文件已保存! "<<endl;school:setkey(0);void school:begin()/初始化函数 student *p,*p2;p=head; clear();long t;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(); is>>num;is.seekg(t); if(num<0) is.close(); return;p2=new student; p2->input(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;void school:count()/统计函数 student *p; p=head;int n=0;double g3=0,0,0; float j3=0,0,0;while(p->next) p=p->next; n+; for(int i=0;i<3;i+) gi=gi+( p->getscore(i) ); (p->getscore(i) )>=60.0? ji+ : 0 ;cout<<"ttbbbb数学总分:"<<g0<<" 平均分:"<<g0/n<<" 及格率:"<<j0/n<<endl<<"ttbbbb英语总分:"<<g1<<" 平均分:"<<g1/n<<" 及格率:"<<j1/n<<endl<<"ttbbbb计算机总分: "<<g2<<" 平均分: "<<g2/n<<" 及格率:"<<j2/n<<endl;/主选菜单函数char school:mainmenu()char n6;cout<<"nn 欢迎进入学籍管理系统"<<endl<<endl<<" * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl<<" * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl<<" * * 1: 录入学生信息 * *"<<endl<<" * * 2: 显示学生信息 * *"<<endl<<" * * 3: 查找学生信息 * *"<<endl<<" * * 4: 删除学生信息 * *"<<endl<<" * * 5: 修改学生信息 * *"<<endl<<" * * 6: 统计学生成绩 * *"<<endl<<" * * 7: 保存学生信息 * *"<<endl<<" * * 0: 退出系统 * *"<<endl<<" * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl<<" * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl<<" 请选择:"cin>>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':pp.count(); break; case '7':pp.save(); break; case '0': if(pp.getkey()=1) cout<<"ttt是否保存? 1 : 保存 0:不保存 : " cin>>k; if(k=1) pp.save(); pp.clear(); k=0; break; 2.系统运行的结果 结论本程序基本完成了题目要求的功能。但是由于显示的限制,所罗列的学生成绩只给出了数学,英语,计算机的成绩。程序可通过改进,增加科目数。 程序在显示学生信息时输入过于繁杂,不够清晰明朗,若显示成类似表格的形式就好了。解决办法将输出函数的输出格式改一下,难点是计算输出点的控制。后记此次c+课程设计,在指导教师的精心教导下,我们学会了如何用C+编写一个简单的应用程序。首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。程序实现上,设计了简单的查询界面,将各个功能集中出来按照程序编写原则,便于查询。根据C+课程所学的概念、理论和方法,按照C+程序设计的基本步骤,设计出一个适当规模的程序;进一步加深对C+语言的理解和掌握。理论联系实际,加深和巩固所学的理论知识,提高实践能力和计算机的综合运用能力。我们编写程序的过程是辛苦与快乐的,程序的编写原则很重要,只要我们在编程,就必须不断改进,才能更好提高编程能力。参考文献1陈雪飞C+实例入门,中国青年出版社,2004年5月出版2谭浩强编,C+面向对象程序设计,清华大学出版社,2005年7月出版3李师贤等译,C+精髓,机械工业出版社,2002年8月出版4韩滨 魏海萍,C+类库使用手册,电子工业出版社,2007年7月出版5陈灿煌,C+彻底研究 中国青年出版社,2005年9月出版。 专心-专注-专业