C++课程设计--同学录的设计与实现.doc_第1页
C++课程设计--同学录的设计与实现.doc_第2页
C++课程设计--同学录的设计与实现.doc_第3页
C++课程设计--同学录的设计与实现.doc_第4页
C++课程设计--同学录的设计与实现.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

*实践教学* 兰州理工大学计算机与通信学院2011年秋季学期面向对象课程设计题 目:同学录的设计与实现 专业班级:计算机科学与技术1班姓 名:陈万鹏 学 号:10240125 指导教师:年福忠 成 绩: 摘要 通过设计一个同学录管理系统,进一步熟悉C+中类的概念、基本知识和技能,类的封装、继承的实现方式。掌握面向对象程序设计的基本思路和方法,并利用所学的基本知识和技能解决简单的面向对象的程序设计问题。了解系统开发的需求分析、类层次设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对C+的理解与Visual C+环境的使用:逐步熟悉程序设计的方法,并养成良好的编程习惯。关键字:C+;添加;查询;修改;删除目 录一、需求分析4二、总体设计51.设计类,对象及基本数据类型:52.实现各模块功能的相应程序:6三、详细设计8四、测试12五、设计总结15参考文献15致谢16附录17一、需求分析以本班的同学的具体数据为背景,设计一个本班同学同学录,要求如下:(1) 录入信息,必须包括:姓名,性别,电话,家庭地址,邮编,E-mail等基本信息;(2)修改信息,包括插入一条或多条信息,修改或者删除某人的信息;(3)查询信息,可以按姓名,家庭住址,性别等多种方式查询;(4)显示所有信息 ;二、总体设计同学录管理系统关闭通讯录查询同学修改信息显示所有同学删除信息添加同学 图1数据结构及各模块分析:1.设计类,对象及基本数据类型:创建一个Classmates类,它有五个私有数据成员:string name;姓名string address;地址string number;电话号码string post; 邮编string email E-mail包含七个公有成员函数:功能如下:char diaplay();首页void add_person();添加同学void del_person();删除同学void show_all(); 显示所有同学void alter();修改信息void inquiry();查询同学void save_new();保存新增加的同学在主函数main()之中,.Classmates obj; 创建名为obj的对象结构体:struct recordClassmates object; object对象作为结构体record的一个成员record *prior;定义一个指向前驱的结构体指针record *next;定义一个指向后继的结构体指针;该结构体是在alter()修改函数中用来处理相关信息的修改.字符串变量: str,record;字符变量: choose;布尔型变量: flag;数据保存方式以及格式:该同学录管理系统将把输入的人员信息保存为pClassmates.txt 文本文件,在文件读取时系统将会把该文件中相关信息读出,并在屏幕上显示出相关信息.2.实现各模块功能的相应程序:1.界面:display()system(cls);coutendl;couttt-. fflush(stdin);return choose;添加同学:add_person()coutendl根据下面 . .save_new()ofstream outData(pClassmates.txt, ios:app);if(!outData) outData.close();coutendl新同学信息已经保存好!endlendl;system(pause);删除同学信息del_person()ofstream outData(temp.txt, ios:out); coutendl这个人的信息已经从你的同学录中删除!endlendl;system(pause);显示所有同学信息:show_all()ifstream inData(pClassmates.txt,ios:in); cout所有同学信息已经全部显示出来!endl;system(pause);修改同学信息alter()ifstream inData(pClassmates.txt, ios:in); coutendl信息已经修改完成!endlendl;system(pause);查询同学信息select()ifstream inData(pClassmates.txt,ios:in); system(pause);三、详细设计详细功能如下:A,添加:系统将提示用户输入新添加人员信息,输入到文件中,人员信息数据包括姓名,电话号码 ,邮箱,邮编,地址.B,删除:首先由用户输入要删除的人员的姓名或者电话号码,然后调用删除函数,删除该人员的所有相关资料.C,显示所有人员信息:该功能将显示已经保存的所有人员的姓名,电话, ,邮编及地址.D,修改:首先由用户输入要修改的人员姓名或者电话号码,然后系统用修改函数查找,显示该名同学的资料,然后系统提示用户输入需要修改的人员的相关信息.并用双向链表来实现修改功能E,查询:可由用户输入要查找的人员姓名或电话号码,然后系统用查找函数查找,接着系统使用相关文件命令输出所查找的人员的全部信息.F,退出系统关闭同学录管理系统.菜单用于选择各项功能:其中包括:.a:添加新同学; .b:删除同学;.c:显示所有人员信息;.d:修改人员信息;.e: 查询同学; .f:关闭同学录.采用面向对象的程序设计方法,a,b,c,d,e,这五项菜单都调用一个函数来实现. void Classmates:alter() ifstream inData(pClassmates.txt, ios:in); /打开文件pClassmates.txt,进行读操作 if(!inData)/判断文件打开是否成功 coutendl对不起不能打开文件!endlendl; /如果打开失败,输出 “对不起不能打开文件!” system(pause);/屏幕暂停 return; string sign;/定义字符串变量sign coutendlsign;/输入变量sign fflush(stdin);/清空缓冲区 record *H=new record;/新建结构体指针变量H,并为其分配空间 record *p=H;/使p指针指向指针H record *q=H;/使q指针也指向指针H bool flag=true;/定义布尔型变量flag. while(inDp-object.numberp-object.qq p-object.postp-object.address)/读取文件中一个人的信息 p-next=new record; /建立双向链表 p=p-next; p-prior=q; q-next=p; q=p; p-next=NULL;/使p的next成员指向NULL. inData.close();/关闭pClassmates.txt文件 p=H;/使指针变量P指向结构指针H的头节点 while(p)/当p不为空时 if(=sign)|(p-object.number=sign)/判断输入是否为空. if(flag) coutendl你想修改你同学的信息如下:endlendl; coutsetiosflags(ios:left)setw(17) setw(16)object.number setw(18)object.qq setw(14)object.postsetw(20)object.addressendl;/输出要修改的人的信息 flag=false; coutendl请根据下面提示修改信息 : endl; ; fflush(stdin); coutp-object.number; fflush(stdin); cinp-object.qq; fflush(stdin); coutp-object.post; fflush(stdin); coutp-object.address; fflush(stdin); break;/根据提示进行修改 p=p-next;/使结构体指针p指向该指针的末尾 if(flag) coutendl你的同学录中没有你找的联人!;coutendlendl; system(pause); return; else ofstream out(pClassmates.txt,ios:out); /打开文件pClassmates.txt,进行写操作 if (!out)/判断文件打开是否成功打开 cout endl 对不起!不能打开文件! endl; system(pause); return; p=H; /使结构体指针p指向被修改的人的记录的首地址. while(p)/如果p不为空,则执行以下语句 outsetiosflags(ios:left)setw(17) setw(16)object.number setw(18)object.qq setw(14)object.post setw(20)object.addressnext;/使用p指针指向其本身的末尾 out.close();/关闭pClassmates.txt文件 coutendl信息已经修改完成!endlendl; system(pause);/屏幕暂停 四、测试进入主页如图2所示图2信息添加如图3所示图3信息浏览如图4所示图4信息查询如图5所示图5图6信息修改如图7所示图7五、设计总结通过这三周的课程设计,我学到了在理论课中学不到的内容,同时发现候动手实践比学习理论知识重要得多。看理论的东西貌似很有道理,但一上机实践,发现完全不是那么回事。书看得再多,以上机你还是会发现一些很小的但又很重要的错误,而程序是容不得半点错的,这也是我最近实践所学到的。勇于向老师,同学请教,也是得以完成课程设计的重要因素,还有,图书馆丰富的参考书也给了我很大帮助。在此次的课程设计中,搞清楚了一些以前不明白的问题,同时发现面向对象程序设计还有太多的东西值得学习。在以后的学习与实践中,定会要严格要求自己,学习到更多的知识。扎实的学习基础知识,提高解决问题和调试程序的能力。参考文献1初小璐完全掌握SQL Server 2000 M 机械工业出版社,20042Jeraod V.Post.数据库管理系统(英文版.第三版)美清华大学出版社,2006.13张海藩.软件工程导论M.北京:清华大学出版社,1998.4谢希仁.计算机网络(第二版)M.北京:电子工业出版社,2003.6 5戴志诚,赵国峰.JSP信息化系统建设案例M.北京:人民邮电出版社,2006.126成晓静,毕靖.网页设计三剑客完全学习手册M.北京:中国电力出版社,2004.117赵强.精通JSP编程M.北京:电子工业出版社,2006.38萨师煊,王珊.数据库系统概论M.北京:高等教育出版社,2002.29张海藩,李劲,谢兆阳.SQL Server2000数据库设计与系统管理M.北京:清华大学出版社,2000.910刘禾,蔡锋.Web数据库假设技巧M.北京:科技技术出版社,1999.411徐建波. Internet与Web设计教程M.北京:中国矿业大学出版社,2000.1212于书举,许向众.数据库设计与开发教程M.北京:电子工业出版社,2003.1113安海忠,李文斌,林旭新.商业网站建设与管理M.北京:人民交通出版社,2006.814T.Umeda and S.Hagiwara.web-based database for EPR centers in semiconductorsJ.BPhysica B:Condensed Matter,3(7),249-252,2006.315Yih-Ling Hedley,Muhammad Younas.Sampling,information extraction and summarisation of Hidden Web databasesJ.Data & Knowledge Engineering,In Press,Uncorrected Proof,Available online 10 March 2006.2致谢对于这样一个编程,要付出很多的劳动,在此我向在此次课程设计时对我伸出援助之手的周小健老师,还有帮助我的同学们。这个软件的实现固然需要自身的努力,当然也离不开同学们与老师的帮助与讲解。缺少了这些也许我的程序就无法调试完成。谢谢老师和同学们的帮助与讲解。附录源代码#include #include#include /使用CString对字符串的操作更直接。如:CString型转化成int型#include /文件流,主要提供操作文件函数using namespace std; const int m=100;int i; struct student1 long num; char name20; / 自动申请内存空间,用完自动释放内存空间,下同 int age; char sex10; long year; int month; char address20; string phonenumber; char email100; ; class student2 /定义类 public: void add(); /添加录入函数 void display(); / 申明一个名为display 的显示输出函数 void inquiry(); /查询信息函数 void sort(); /排序信息函数 void del(); /删除信息函数 void update(); /修改信息函数 void face(); /界面浏览函数 void tishi(); /提示用户下一步操作函数 void quit(); /退出操作函数protected: student1 studm; int renshu; ; /对同学信息的录入void student2:add() ofstream outfile(C:classmates.txt,ios:binary); /建立classmates.txt 文件,用于存储录入的内容,并以二进制的方式进行存储 if(!outfile) /如果目录不存在 cerr对不起,文件打开失败!endl; /报错 abort(); /程序异常终止进程 coutrenshu; coutendlendl; for(i=0;irenshu;i+) /用for循环语句实现对同学姓名,年龄,性别,出生年月,地址,电话等添加录入 cout这是第(i+1)个同学的信息:endl; coutstudi.num; ; coutstudi.age; coutstudi.sex; cout出生年月:endl; coutstudi.year; coutstudi.month; coutstudi.address; coutstudi.phonenumber; coutstudi.email; coutendlendl; outfile.write(char*)&studi,sizeof(student1); /将&studi指针所指向的内容输出,每次输出的数据单元占sizeof(student1)个字节 outfile.close(); /输出文件关闭 /对同学信息的显示void student2:display() student1 sm; ifstream infile(C:classmates.txt,ios:binary); /将信息从硬盘中调到内存中 if(!infile) cerr对不起,打开失败!endl; abort(); /终止 for(i=0;irenshu;i+) infile.read(char*)&si,sizeof(student1); /一旦读取成功,循环读取&si指针所指的内容,输出的数据占sizeof(student1)字节 infile.close(); for(i=0;irenshu;i+) /循环输出 cout第(i+1)个同学的信息:endl; cout学号:si.numendl; cout姓名:endl; cout年龄:si.ageendl; cout性别:si.sexendl; cout出生年月:endl; cout年:si.yearendl; cout月:si.monthendl; cout地址:si.addressendl; cout电话:si.phonenumberendl; coutEmail:si.emailendl; coutendlendl; /对同学信息的查询void student2:inquiry() int m,flag=0; long n; char xm20; cout1.按学号查询;2.按姓名查询.请选择!m; if(m=1) coutn; coutendlendl; for(i=0;irenshu;i+) if(studi.num=n) cout这是第(i+1)个同学的信息endl; cout学号:studi.numendl; cout姓名:endl; cout年龄:studi.ageendl; cout性别:studi.sexendl; cout出生年月:endl; cout年:studi.yearendl; cout月:studi.monthendl; cout地址:studi.addressendl; cout电话:studi.phonenumberendl; coutEmail:studi.emailendl; flag=1; /用flag提示用户是否查到信息 if(flag=0) /0表示没有查到 cout没有您要查询的信息!endl; if(m=2) cout请输入姓名:xm; /输入姓名 for(i=0;irenshu;i+) if(strcmp(,xm)=0) /strcmp用来比较字符串name和xm cout这是第(i+1)个同学的信息endl; cout学号:studi.numendl; cout姓名:endl; cout年龄:studi.ageendl; cout性别:studi.sexendl; cout出生年月:endl; cout年:studi.yearendl; cout月:studi.monthendl; cout地址:studi.addressendl; cout电话:studi.phonenumberendl; coutEmail:studi.emailendl; flag=1; if(flag=0) cout没有您要查询的信息!endl; /对同学信息的排序void student2:sort() int am,j,t; /利用冒泡法进行排序 for(i=0;irenshu;i+) ai=i; for(i=0;irenshu;i+) for(j=0;jstudaj+ 1.num) /若前面学号比后面大,则交换 t=aj; aj=aj+ 1; aj+ 1=t; cout这是排序后的信息:endl; for(i=0;irenshu;i+) cout这是第(i+1)个同学的信息endl; cout学号:studai.numendl; cout姓名:endl; cout年龄:studai.ageendl; cout性别:studai.sexendl; cout出生年月:endl; cout年:studai.yearendl; cout月:studai.monthendl; cout地址:studai.addressendl; cout电话:studai.phonenumberendl; coutEmail:studai.emailendl; coutendlendl; /对同学信息的删除void student2:del() int j,am,t,flag=0; long n; char na20; for(i=0;irenshu;i+) ai=i; cout1.按学号删除;2.按姓名删除.; cout请您做出选择!j; if(j=1) coutn; for(i=0;irenshu;i+) if(studi.num=n) t=i; flag=1; cout查到您要删除的同学信息!endl; coutendlendl; cout删除后的同学信息为:endl; for( ;trenshu;t+) at=t+1; for(i=0;irenshu-1;i+) cout这是第(i+1)个同学的信息endl; cout学号:studai.numendl; cout姓名:endl; cout年龄:studai.ageendl; cout性别:studai.sexendl; cout出生年月:endl; cout年:studai.yearendl; cout月:studai.monthendl; cout地址:studai.addressendl; cout电话:studai.phonenumberendl; coutEmail:studai.emailendl; coutendlendl; if(flag=0) cout没有查到您要删除的信息!endl; if(j=2) coutna; for(i=0;irenshu;i+) if(strcmp(,na)=0) /strcmp用来比较字符串 t=i; flag=1; cout查到您删除的同学信息!endl; coutendlendl; cout删除后的同学信息为:endl; for( ;trenshu;t+) at=t+1; for(i=0;irenshu-1;i+) cout这是第(i+1)个同学的信

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论