《C++语言程序设计》课程设计-学生通讯信息管理系统.doc_第1页
《C++语言程序设计》课程设计-学生通讯信息管理系统.doc_第2页
《C++语言程序设计》课程设计-学生通讯信息管理系统.doc_第3页
《C++语言程序设计》课程设计-学生通讯信息管理系统.doc_第4页
《C++语言程序设计》课程设计-学生通讯信息管理系统.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

C+语言程序设计课程设计 学生通讯信息管理系统目 录一、引言I二、课程设计目的及要求11、目的12、具体要求1三、课程设计具体实现21、总体设计22、详细设计33、 调试及问题解决15四、心得体会16五、源代码(加注释)1612C+语言程序设计课程设计 学生通讯信息管理系统C+语言程序设计课程设计学生通讯信息管理系统一、引言C+语言程序设计介绍了一种目前流行的面向对象程序设计语言,是学习数据结构、操作系统等计算机课程的基础,是学习可视化程序设计软件的语言基础,是计算机专业及许多工科专业学生应掌握的一门计算机语言课程。主要讲授C+数据类型和表达式、算法的基本控制结构、函数、类、数据和指针等,其中算法的基本控制结构是C+编程的基础,是课程的重点和难点。为了让学生能融会贯通各知识点,增强对C+语言程序设计的理解,掌握面向对象编程的过程,课程设计以面向对象的程序设计为框架结构,用所学的C+基本编写程序。考虑到学生的基础,本次课程设计的题目是“学生通讯系统的设计与实现”,通过该课程设计,希望学生在理论与实践相结合的基础上,加深对计算机基本语法的理解和运用,进一步理解面向对象程序设计的思想和在Visual C+ 6.0中具体方法和实现步骤,从而提高C+编程能力和自行分析、设计和解决问题的能力。二、课程设计目的及要求1、目的巩固和深刻理解“C+语言程序设计”课程所讲解的C+基本语句和面向对象的思想。掌握Visual C+ 6.0面向对象程序设计的具体步骤。培养学生独立工作和创新思维的能力,取得设计与调试的实践经验。提高和加强计算机应用及软件开发能力。2、具体要求 学生信息包括:学号、姓名、生日、性别、班级、电话、宿舍、地址等信息。现要求编写程序来完成如下功能:1、新建学生通讯录:采用头插入的方式建链表,并询问是否保存到文件。2、向学生通讯录插入学生信息:采用头插入的方式把结点插进去。3、在通讯录删除学生信息:删除结点(按学号、姓名删除),并询问是否从文件中删除。4、在通讯录中查询学生信息:按姓名或学号的形式查找,然后显示学生信息。5、在屏幕中输出全部学生信息:输出链表的每一个内容,按照一定格式进行显示。6、修改学生信息:按学号、姓名修改查询到的位置对应的学生信息。7、统计学生信息学生信息:按性别、班级统计查询到的位置对应的学生信息。8、保存并退出:告知结束运行系统。向文件写入学生通讯录信息,把链表中的结点都保存到文件中。通过系统分析和实现,掌握简单软件开发的一般过程。学生独立思考解决问题为主,教师指导为辅,结合上机操作,完成指定的任务,撰写课程设计报告。三、课程设计具体实现1、总体设计图1:总体设计图2、详细设计图2:主界面图3:新建学生通讯录/新建学生通讯录/功能:采用头插入的方式建链表,并询问是否保存到文件/参数:无/返回值:无void txl:Creat() coutn; coutn*录入工作开*nendl; for(i=1;inext=head; /头插入建链表 head=currptr; coutn个学生的信息已全部输入完成!endlendl;图4:向学生通讯录插入学生信息/向学生通讯录插入学生信息/功能:采用头插入的方式把结点插进去,并询问是否保存到文件/参数:无/返回值:无void txl:Insert() char mf1;coutk; student *p=head,*q=NULL,*t=head; while(t) t=t-next; n+; if(kn+1|k1) /不存在此位置,不能存入 coutcurrptr-data.address;if(k=1) /建链表currptr-next=head;head=currptr;elsefor(int i=1;inext;q-next=currptr;currptr-next=p; 图5:在通讯录删除学生信息/在通讯录删除学生信息/ 功能:删除结点,并询问是否从文件中删除(采用覆盖原有文件的形式)/ 参数:无/返回值:无void txl:Delete() if(head!=NULL) /链表存在时就做删除操作 int k,n=0;student *cu=head;student *p=head,*q=head-next,*t=head;cout你可以通过以下方式删除:endl;cout1、按学号删除endl;cout2、按姓名删除endl;coutch;while(ch!=1&ch!=2) /判断输入是否符合if(ch=1)char num20;coutnum;while(cu!=NULL)n+;if(strcmp(cu-data.number,num)=0) /判断是否是所查学号 break;cu=cu-next;if(cu=NULL)cout不存在这个学号!next;elsefor(int i=1;inext;if(q=NULL)p=NULL;elsep-next=q-next;cout删除成功!endl;else /按姓名删除略 /在屏幕中输出全部学生信息/ 功能:输出链表的每一个内容/ 参数:无/返回值:无void txl:Display() if(head=NULL) cout通讯录里没有内容!nn; elsestudent *k=head;coutsetiosflags(ios:left)setw(10)学号setiosflags(ios:left)setw(10)姓名setiosflags(ios:left)setw(10)生日setiosflags(ios:left)setw(6)性别setiosflags(ios:left)setw(10)班级setiosflags(ios:left)setw(15)电话setiosflags(ios:left)setw(6)宿舍setiosflags(ios:left)setw(10)地址endl; /设置左对齐输出 while(k) coutsetiosflags(ios:left)setw(10)data.numbersetw(10)setiosflags(ios:left)setw(10)setiosflags(ios:left)data.birthdaysetw(6)setiosflags(ios:left)data.sexsetw(10)setiosflags(ios:left)data.class_numsetw(15)setiosflags(ios:left)data.telephonesetw(6)setiosflags(ios:left)data.domsetw(10)setiosflags(ios:left)data.addressnext; coutnext,*t=head;cout你可以通过以下方式修改:endl;cout1、按学号修改endl;cout2、按姓名修改endl;coutch;while(ch!=1&ch!=2)coutendl;coutch;/判断输入是否符合if(ch=1)char num20;coutnum;while(cu!=NULL)if(strcmp(cu-data.number,num)=0) /判断是否是所查学号 break;cu=cu-next;if(cu=NULL)cout不存在这个学号!endl;else cout请输入你要更改的学生的信息!endl; /需更改的学生信息else/按姓名修改图7:统计学生信息学生信息/统计学生信息学生信息/ 功能:修改输入位置对应的学生信息/ 参数:无/返回值:无void txl:Count() cout你可以通过以下方式统计:endl; cout1、按性别统计endl; cout2、按班级统计endl; coutch; while(ch!=1&ch!=2) coutendl; coutch; student *cu=head; if(ch=1) /按性别统计 coutsexs; if(cu!=NULL) cout你要找的学生信息为:data.sex,sexs)=0) /判断是否是所查性别 n+; /输出学生信息 cu=cu-next; if(n=0) cout该班不存在学生!endl; else cout共有n个学生endl; else /按班级统计 coutcls; if(cu!=NULL) cout你要找的学生信息为:data.class_num,cls)=0) /判断是否是所查班级 n+; /输出学生信息 cu=cu-next; if(n=0) cout该班不存在学生!endl; else cout共有n个学生endl; 图8:保存并退出/保存并退出/ 功能:告知结束运行系统/ 参数:无/返回值:无void txl:Exit() /退出 WriteFile(); /询问是否保存对文件的修改 cout感谢使用本系统!endl; exit(1); /命令整个程序退出;/向文件写入学生通讯录信息/ 功能:把链表中的结点都保存到文件中/ 参数:链表的一个结点/返回值:无void txl:WriteFile() student *s=head; ofstream fop; fop.open(通讯录.dat,ios:binary|ios:trunc); /以二进制形式打开文件/覆盖原来的文件且重新保存删除后的内容 if(!fop) cout通讯录.dat 无法打开!endl; abort(); char Y_N; coutY_N; while(Y_N!=Y&Y_N!=y&Y_N!=N&Y_N!=n) /使输入为yes或no coutY_N; if(Y_N=Y|Y_N=y) /保存 while(s) while(fop.write(char *)&s-data,sizeof(s-data) s=s-next; flush(cout); cout保存成功!data,sizeof(currptr-data) currptr-next=head; head=currptr; currptr=new student; fip.close(); delete currptr;/在通讯录中查询学生信息/ 功能:按姓名或学号的形式查找/ 参数:无/返回值:无void txl:Search() cout你可以通过以下方式查询:endl; cout1、按学号查询endl; cout2、按姓名查询endl; coutch; cout你要查询的信息是:; while(ch!=1&ch!=2) coutendl; coutch; student *cu=head; if(ch=1) /按学号查询 char num20; cinnum; while(cu!=NULL) if(strcmp(cu-data.number,num)=0) /判断是否是所查学号 cout你要找的学生信息为:next; if(cu=NULL) cout不存在这个学生!na; while(cu!=NULL) if(strcmp(,na)=0) /判断是否是所查姓名 cout你要找的学生信息为:endl; coutdata.number data.birthday data.sex data.class_num data.telephone data.dom data.addressnext; if(cu=NULL) /查询不到 cout不存在这个学生!endl; 3、 调试及问题解决问题1:在性别的判断过程中,性别在结构体内定义的是长度为2,而在判断中定义的是char型,导致在二级制赋值过程中,格式不匹配。解决方法:采用取值的方式进行性别的判断,使输入的性别存入数组,然后调用数组中的值进行比较。问题2:在删除过程中,无法直接删除匹配数据点对应的值。解决办法:用匹配的方法查询到所要删除的值之后,返回该值所在的的首地址,进行整条记录覆盖删除。未解决的问题:性别输入正确后,在显示过程中,会出现溢出现象,直接调用了后一个数据的第一个值。如:性别为m,而班级为1班,结果显示的性别为m1。该问题未能解决。四、心得体会通过这次课程设计,我对很多的函数有了新的认识,我对C+也有了更深刻的了解,增强了函数的综合应用能力,巩固了专业知识。写程序的过程中我又学到了曾经自己不知道的函数或是自己不会的函数的用法。特别是文件的二进制读、写及保存。这次课程设计课总的来说让我受益匪浅。虽然在调试程序遇到了很多的困难,但是都一一去把它解决了。当真正通过自己的努力解决一个问题的时候,那种成就感和心中的喜悦是不能言喻的。从本次课程设计中也让我知道了要学好一门课程,只考上课老师讲的和仅学习书本上的知识是不够的,还要有较强的自我钻研和实践能力。借助网络,学习更多比较新的和比较前端的知识,因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握更多的知识。五、源代码(加注释)#include#include#include#includeusing namespace std;struct DataType /定义所有信息 char number20; /学号 char name20; /姓名 char birthday20; /生日 char sex1; /性别char class_num20; /班级 char telephone12; /电话char dom10; /宿舍 char address20; /地址;struct student /定义学生信息 DataType data; student *next; ;class txlprivate: student *head; /头指针 student *currptr; /当前指针public: txl(); txl(); void Creat(); /新建学生通讯录 void Insert(); /向学生通讯录插入学生信息 void Delete(); /在通讯录删除学生信息 void WriteFile(); /从文件中读取通讯录的信息 void ReadFile(); /向文件写入学生通讯录信息 void Search(); /在通讯录中查询学生信息 void Display(); /在屏幕中输出全部学生信息void Revise(); /修改通讯录中学生信息void Count(); /在屏幕中按照统计输出学生信息 void Exit(); /退出;txl:txl() /构造函数 head=currptr=NULL;txl:txl() /析构函数 student *temp=head; /释放空间 while(temp) delete temp; /新建学生通讯录/ 功能:采用头插入的方式建链表,并询问是否保存到文件/ 参数:无/返回值:无void txl:Creat() coutn; coutn*录入工作开始*nendl; for(i=1;i=n;i+) /输入学生信息 currptr=new student; cout请输入第icurrptr-data.number; cout请输入第; cout请输入第icurrptr-data.birthday; cout请输入第i*mf; while(*mf)!=m & (*mf)!=f) /使输入为男女 cout输入格式有误,请输入m/f。endl; cout请输入第i*mf; if(*mf)=m|(*mf)=f) /保存*(currptr-data.sex)=(*mf); cout请输入第icurrptr-data.class_num; cout请输入第icurrptr-data.telephone; cout请输入第icurrptr-data.dom; cout请输入第icurrptr-data.address; coutn*华丽的分割线*nnext=head; /头插入建链表 head=currptr; coutn个学生的信息已全部输入完成!endlendl;/向学生通讯录插入学生信息/ 功能:采用头插入的方式把结点插进去,并询问是否保存到文件/ 参数:无/返回值:无void txl:Insert() char mf1;coutk; student *p=head,*q=NULL,*t=head; while(t) t=t-next; n+; if(kn+1|k1) /不存在此位置,不能存入 cout此位置不合法; elsecurrptr=new student;cout请输入你要插入的学生的信息!endl; /需插入的学生信息coutcurrptr-data.number;;coutcurrptr-data.birthday;cout*mf;while(*mf)!=m & (*mf)!=f) /使输入为男女cout输入格式有误,请输入m/f。endl;cout*mf;if(*mf)=m|(*mf)=f) /保存*(currptr-data.sex)=(*mf); coutcurrptr-data.class_num; coutcurrptr-data.telephone;coutcurrptr-data.dom; coutcurrptr-data.address;if(k=1) /建链表currptr-next=head;head=currptr;elsefor(int i=1;inext;q-next=currptr;currptr-next=p; /在通讯录删除学生信息/ 功能:删除结点,并询问是否从文件中删除(采用覆盖原有文件的形式)/ 参数:无/返回值:无void txl:Delete() if(head!=NULL) /链表存在时就做删除操作 int k,n=0;student *cu=head;student *p=head,*q=head-next,*t=head;cout你可以通过以下方式删除:endl;cout1、按学号删除endl;cout2、按姓名删除endl;coutch;while(ch!=1&ch!=2)coutendl;coutch;/判断输入是否符合if(ch=1)char num20;coutnum;while(cu!=NULL)n+;if(strcmp(cu-data.number,num)=0) /判断是否是所查学号 break;cu=cu-next;if(cu=NULL)cout不存在这个学号!next;elsefor(int i=1;inext;if(q=NULL)p=NULL;elsep-next=q-next;cout删除成功!endl;else int n=0;char nam20;coutnam;while(cu!=NULL)n+;if(strcmp(,nam)=0) /判断是否是所查姓名 break;cu=cu-next;if(cu=NULL)cout不存在这个姓名!未能成功删除!next;elsefor(int i=1;inext;if(q=NULL)p=NULL;elsep-next=q-next;cout删除成功!endl; /向文件写入学生通讯录信息/ 功能:把链表中的结点都保存到文件中/ 参数:链表的一个结点/返回值:无void txl:WriteFile() student *s=head; ofstream fop; fop.open(通讯录.dat,ios:binary|ios:trunc); /以二进制形式打开文件/覆盖原来的文件且重新保存删除后的内容 if(!fop) cout通讯录.dat 无法打开!endl; abort(); char Y_N; coutY_N; while(Y_N!=Y&Y_N!=y&Y_N!=N&Y_N!=n) /使输入为yes或no coutY_N; if(Y_N=Y|Y_N=y) /保存 while(s) while(fop.write(char *)&s-data,sizeof(s-data) s=s-next; flush(cout); cout保存成功!data,sizeof(currptr-data) currptr-next=head; head=currptr; currptr=new student; fip.close(); delete currptr;/在通讯录中查询学生信息/ 功能:按姓名或学号的形式查找/ 参数:无/返回值:无void txl:Search() cout你可以通过以下方式查询:endl; cout1、按学号查询endl; cout2、按姓名查询endl; coutch; cout你要查询的信息是:; while(ch!=1&ch!=2) coutendl; coutch; student *cu=head; if(ch=1) /按学号查询 char num20; cinnum; while(cu!=NULL) if(strcmp(cu-d

温馨提示

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

评论

0/150

提交评论