1、C+课程设计 前 言C+语言的主要特点表现在两个方面,一是全面兼容C,二是支持面向对象的方法。由于面向对象方法的突出优点,目前它已经成为开发大型软件时所采用的主要方法,而C+语言是面向对象的程序设计语言中应用最广泛的一种。C+全面兼容了 C,同时提供了比C更严格更安全的语法,从这个意义上讲,C+首先是一个更好的C。面向对象方法的出现,实际上是程序设计方法发展的一个返朴归真的过程。面向对象方法所强调的基本原则就是直接面对客观存在的事物来进行软件开发,将人们在日常生活中习惯的思维方式和表达方式应用在软件开发中,使软件开发从过分专业化的方法、规则和技巧中回到客观世界,回到人们通常的思维。 内容提要要
2、求完成以下功能:一、能够从屏幕上读取一个学生的信息并将信息存入到数据文件中。二、能够将指定的信息从文件中删除。三、能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上。四、可以统计全部学生的总成绩,及其在班上的排名。五、能够统计各科的平均成绩及及格率。六、要求有错误提示功能,例如性别只能输入男女,输入错误提示重新输入。七、如果检索不到相应的信息应提示用户目录一、课程设计目的5二、课程设计要求5三、系统结果功能图6四、设计主要仪器设备和材料6五、类的设计6六、设计内容与步骤7七、程序编写9八、小结与展望18九、主要参考文献19课程设计报告一、 课程设计目的(一)通过面向对象程序设计实践的
3、训练,使学生更系统掌握面向对象程序设计思想和方法,并熟练地应用C+语言编写解决实际应用问题的程序,提高学生的编程能力及程序调试能力。(二)通过面向对象程序设计实践的训练,使学生养成良好的程序设计习惯,初步熟悉软件开发的过程,为后续课程的学习和将来进行软件开发打下良好的基础。(三)通过面向对象程序设计实践的训练,使学生在分析问题、解决问题等方面得到锻炼,增强学生调查研究、查阅技术文献、资料、手册以及编写技术文献的能力。二、 课程设计的要求(一)对学生进行分组,每组完成一个题目。(二)每组对所做题目进行分析,完成题目所要求完成的功能。(三)描述并绘制出所做题目的功能结构框图。(四)编写C+语言源程
4、序代码,并调试运行成功。(五)编写“课程设计报告”。(六)尽可能的使界面友好、直观、易操作。(七)源程序要有适当的注释,使程序容易阅读。三、设计主要仪器设备和材料:硬件配置:586以上PC兼容机或品牌机,配有彩色显示器、鼠标、键盘,内存不小于64MB,硬盘自由空间不少于200MB。推荐配置为内存128MB或256MB(或以上),硬盘自由空间500MB以上。操作系统:Windows2000/NT/Xp、Visual C+集成开发环境。四、 系统功能结果图采单程序初始化程序退出输入显示查找删除修改统计五、 类的设计 类:student 数据成员编号,姓名,性别,籍贯,出生年月,数学成绩,英语成绩,
5、物理成绩 类:school成员函数录入函数Input():输入编号到计算机的成绩;统计函数count():统计各科的总成绩,计算平均成绩,统计各科的及格率;查询函数found():按学号或姓名查找学生的记录;修改函数mend():修改指定学号学生成绩记录;删除函数del():删除指定学号学生记录;输出函数show():输出班级所有学生成绩记录;六、设计内容和步骤(一) 数据录入功能: 录入学生的学号、姓名、出生日期、籍贯、专业。基本信息显示界面:(二)查询功能:分为学生基本情况查询和成绩查询两种输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。 查询界面:(三)统计功能:比如统计
6、某门课程不及格人数等。(四)删除功能:如学生退学,能删除这个学生的所有信息。(五)修改功能:修改学生信息。(六)保存功能:保存学生信息。退出系统界面:七、程序编写#include#include#include#include class student protected: int number; char name20; char sex6; char place100; char birth20; char major50; float score3; public: student *next; student() student() char* getname() return na
7、me; int getnumber() return number; double getscore(int i) return scorei; float getg() return (score0+score1+score2); void input() int e=1; coutttt按提示输入:endl; coutnumber; coutname; docoutsex; if(strcmp(sex,男)=0 | strcmp(sex,女)=0) coutplace; coutbirth; coutmajor; coutscore0; coutscore1; coutscore2; e=
8、0; elsecoutttt无此类型性别!重新输入!numbernamesexplacebirthmajor score0score1score2; is.get(); void output() cout 学生基本信息如下 :endl; cout 学号 :numberendl;cout 姓名 :nameendl;cout 性别 :sexendl;cout 籍贯 :placeendl;cout 出生年月 :birthendl;cout 专业 :majorendl; cout 数学 :score0endl;cout 英语 :score1endl; cout 物理 :score2endl;cout
9、 总分 :getg()endl; void output(ofstream & os) ossetw(6)number setw(15)namesetw(20)place setw(6)birthsetw(20)major setw(20)score0setw(6)score1 setw(6)score2next=NULL; key=0; school() delete head; void input(); void mend(); void del(); int find(student *p,int num,char *pn=); void found(); void show(); v
10、oid 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;
11、 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
12、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() /显示函数 s
13、tudent *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() /
14、保存函数 student *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
15、; 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;igetscore(i) ); (p-getscore(i) )=60.0? ji+ : 0 ; coutttbbbb数学总分:g0 平均分:g0/n 及格率:j0/nendlttbbbb英语总分:g1 平均分:g1/n 及格率:j1/nendl ttbbbb物理总分: g2 平均分: g2/n 及格率:j2/nendl;/主选菜单函数ch
16、ar school:mainmenu() char n6; coutnn 欢迎进入学籍管理系统endlendl * * * * * * * * * * * * * * * * * * * * * * * * * * * *endl * * * * * * * * * * * * * * * * * * * * * * * * * * * *endl * * 1: 录入学生信息 * *endl * * 2: 显示学生信息 * *endl * * 3: 查找学生信息 * *endl * * 4: 删除学生信息 * *endl * * 5: 修改学生信息 * *endl * * 6: 统计学生成绩
17、* *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
18、; 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) coutk; if(k=1) pp.save(); pp.clear(); k=0; break; 八、小结与展望这次C+课程设计,我终于可以把在课本上学到的知识熟练地应用到实际当中去了。这次课程设计还真是受益匪浅,我更加熟练了C+语言程序的
19、编写。我不但巩固了自己C+的理论知识,还进一步熟练了Microsoft Visual C+ 6.0编程软件的应用。用这个编程软件,不仅可以方便地实现程序的修改,而且还可以方便地帮我们检查出程序中的语法错误,直观地观察程序的运行情况。还可以利用单步执行的功能对程序进行调试,找出程序中的逻辑错误,真是方便多多啊!通过应用这个软件,使我不但验证了书本上的理论知识,而且也对一些抽象难懂的概念有了更加明确直观的理解。本次的课程设计还令我认识到了熟能生巧这个道理。刚刚接触C+的时候,觉得很难,好像什么都不会,各种各样的关键字、语法、结构就像象形文字一样,做一道习题或者是编写一个简单的小程序都要耗费我很多的时间。当然要学好C+,仅仅通过一次课程设计是远远不够的,我们要走的路还很长。但路漫漫其修玩兮,吾将上下而求索。只要我们不懈努力,我相信我们一定能把任何一件事做好。九、主要参考文献C+面向对象程序设计 陈维兴 林小茶 编著 中国铁道出版社17