c++课程设计报告.docx_第1页
c++课程设计报告.docx_第2页
c++课程设计报告.docx_第3页
c++课程设计报告.docx_第4页
c++课程设计报告.docx_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

c+课程设计报告设计题目: 参会人员信息管理程序 学 院: 资源与安全工程学院 专业班级: 城市地下空间工程1003班 二零一一年六月中南大学c+课程设计报告目 录 第1章 绪论第2章 设计目的和主要功能第3章 概要设计 3.1 概要设计3.2 设计环境3.3 数据结构3.4 模块设计第4章 详细设计4.1主函数设计及问题4.2人员登录设计及问题4.3信息修改和删除设计及问题4.4统计同部门信息设计及问题第五章 运行程序5.1完整源程序5.2调试截图5.3不足和体会 参考文献 2第1章 绪 论一、课程设计的背景目前,随着计算机技术的飞速发展,为了适应现代化的环境,许多管理事务都由电脑来管理,从而提高了管理的速率,效率。查阅有关资料,进一步理解程序设计模块化的思想,并利用此思想编 写一个简单的管理系统。通过课程设计,使学生进一步掌握c语言基本知识和基本程序设计技巧,提高学生综合编程能力与程序调试能力,以及运用计算机解决实际问题的能力。二、课程设计主要内容及要求 (1)登录参会人员的下列信息:姓名(name);性别(sex);年龄(age);单位(department)房间号(roomnum)(设每个房间只住一人,房间号为101120,.,501520)。(2)主菜单应至少包括以下几个菜单项:人员登录、显示报到人员信息、查询、统计、修改、删除(3)程序应分别用几个个函数实现以上功能:随时对报到人员进行登录(login),来客登记的房间是根据客人要求分配的;如果客人申请的房间已有人登记了,可以让客人重新申请;如果所有的房间都已经住满,则拒绝再进行人员登录;随时按所住房间号(由小到大)输出(print)已报到人员信息;能够根据姓名实现对人员信息的查询;能够根据单位对与会人员进行分类统计,并输出统计结果;能够修改与会人员的信息;能够删除某个参会人员,并清空其所住房间;程序中的变量要使用题中给定的英文名词。三任务分工本小组由李姣阳和蔡鑫两位同学组成,由于本组成员每个人学习知识的侧重点不尽相同,每人解决问题的思路也不一样,我组成员经过查阅大量相关资料和书籍,并吸取大量前人的经验,再经过热烈得讨论,经全组成员一致同意,分工明细如下:小组分工见表1.1信息李姣阳蔡鑫班级城市地下空间工程1003班学号02021003080202100323主函数 显示信息人员登录登录信息修改登录信息删除按房号排序按姓名查询 统计同部门人员信息菜单函数表1.13第 2章 设计目的和主要功能 为了适应现代化的环境,许多工科课程的研究和施工规划都需要编出合适的程序去处理数据和优化方案,因此学好一门计算机语言也就显得尤为重要。c+是一种比较流行的编程语言,学好c+也就显得很有必要了。通过课程设计,进一步理解程序设计模块化的思想,并利用此思想编写一个简单的参会人员信息管理系统。这是一个为了解决相关统计人员工作量的统计的问题而编写的系统,是专门用来解决生产工程中工作量和工作质量的系统,实用于管理者对会议过程的精确地统计管理。通过本设计可以加深理解利用程序设计思想开发一个系统的整个流程,提高分析问题、解决问题和实际动手的能力。参会人员信息管理系统的功能:1、 录入登录信息:输入参会人员的基本信息,通过一个基本连接点,能够记录并保存参会人员的基本信息2、 显示功能:通过操作界面,可以轻松实现将保存的参会人员信息显示出来。便于整体把握参会人员的信息。能够根据单位对与会人员进行分类统计,并输出统计结果3、 排序功能:通过一组相同的信息(房号),能够通过该唯一信息为参会人员进行简单的排序,使使用者能够快速的查阅信息。也便于了解房间占用信息。4、 查询功能:登录人员都需要录入相关方面的信息(如姓名)。可以输入要查询的人的姓名,然后就可以很快获取要查询的人的相关信息。方便使用者对个人信息的搜寻。5、 统计同部门人员信息:通过搜索筛选,可以将不同部门的人员信息按不同部门分类显示出来。同时又可以通过输入某个部门实现对单个部门信息的抽调。便于工作的开展和任务分工,提高时间效率。6、 修改功能:通过该功能,对一些过时的参会人员信息进行修改,是使用者能够及时的了解参会人员的最新信息7、 删除功能:随时对一些未到会的参会人员信息,通过该功能进行删除,并清空其所住房间。实现资源的高效利用。8、 退出程序:当用户使用完以后,通过简单的操作(输入0),能够快速的推出该系统。9、 菜单功能:操作功能设计成分类的项目界面,该操作界面设置有包括人员登录,显示信息,按房号排序,按姓名查询,统计同部门人员信息,登录信息修改,登录信息删除和退出。只要在提示的区域内输入相应的操作的序号,就可以实现各个功能的录入。操作简洁方便。4第三章 概要设计3.1 概要设计该系统可以根据不同的功能进行函数划分,划分的函数模块如图3-1所示.参会人员信息管理系统修改和删除登录息函数人员登录函数显示信息函数按房号排序函数按姓名查询函数菜单函数统计同部门人员3-1 3.2 设计环境本程序的函数编译是在visual c+6.0的编辑软件下进行变异的.3.3 数据结构本系统是对参会人员信息进行管理,由于对链表连接的只是薄弱,姑而采用结构体数组储存方式。定义如下:struct staff /*参会人员的数据结构*/char name20; /*姓名*/char sex7; /*性别*/int age; /*年龄*/char department30;/*单位*/char room_num10; /*房间号*/3.4 模块设计根据不同的功能操作,设计了几个模块,如图函数名功 能 menu()菜单函数main()主函数、函数调用login()输入参会人员信息并保存show_all()显示参会人员信息sort()排序参会人员信息searchbyname()查询参会人员信息statistics ()统计同部门人员信息edit()修改参会人员信息delete()删除参会人员信息display_part()同部门显示函数表3-1功能模块表 6第四章 详细设计本次课设中,作为小组组长,在设计过程中我负责的是主函数、人员登录、登录信息修改和删除、统计同部门人员信息。4.1主函数设计及问题/*主函数*/int main()system(color 1c); /背景和字体颜色设计int length=0;/*记录登陆的人数*/staff staffmax; /*定义结构体数组*/ int i=0;ifstream infile(loginfo.txt,ios:in);if (!infile)cerr还没录入文件!staffi.sexstaffi.agestaffi.department staffi.room_num )/将文件信息逐一录入内存i+;length+;infile.close();/关闭文件流int choice=-1;menu();/执行菜单函数loop:coutchoice; /*由用户选择操作*/while(choice=0&choice=7)switch(choice)case 1:length=login(staff,length);break;case 2:show_all(staff,length);break;case 3:sort(staff,length);break;case 4:searchbyname(staff,length);break;case 5:statistics(staff,length);break;case 6:edit(staff,length);break;case 7:length=delete(staff,length);break;case 0:cout退出成功!;exit(-1); /*退出*/menu();coutchoice;cout不好意思,暂没有此功能选择! switch()是login(s);录入并保存功能break: i=1?是否show_all(0);显示功能break;i=2?否是i=3? sort(0);排序功能;break; 否searchbyname(0)查询功能;break;是i=4?否是i=5?statistics(0);统计break;、否是i=6?edit(0);修改并保存 break;否是delete(s);删除并保存break;i=7?否i=0?exit(-1) 是 结 束主函数设计中遇到的问题及解决方案:为了使程序具有保存功能,就必须设计文件流的操作。因为每个模块都有文件的读入,所以我便设想在主函数中先调入原来文件中的信息,这样在以后的每个模块中就不用每次都读入信息了。在设置读入文件流ifstream infile(loginfo.txt,ios:in);时,我遇到了问题。刚开始根本没建立文件loginfo.txt。最后经过反复看书以及和搭档交流发现文件默认路径错误,所以根本无法建立文件。经过路径修改解决了这个问题。然后便是文件接收。开始我用字符串变量record去记录发现下面函数无法和着联系起来。经过小组讨论和翻看书最后尝试用结构体词组staffi通过循环接收,经过调试发现成功了。在优化main函数是我添加了goto语句来增加程序的连贯性。4.2人员登录设计及问题/*登录信息记录保存函数*/int login(staff staff,int length)int i;if(length=50) /*房间已满,拒绝登陆*/cout没有房间了,请自行联系管理人员!;exit(-1); /*end if*/elsechar room_num10;coutroom_num;for(i=0;ilength;i+) if(strcmp(room_num,staffi.room_num)=0) /*申请的房间已经有人*/ cout这个房间已经有人了,请选择其他房间!endl;coutroom_num;i=0; /*为检查新的房间作准备*/ /*end for*/* 录入登陆信息*/ strcpy(stafflength.room_num,room_num);;coutstafflength.sex;coutstafflength.age;coutstafflength.department;length+; /*参会人数加一*/*保存信息到文件loginfo.txt中*/ofstream outfile(loginfo.txt,ios:app);if (!outfile)cerropen error1endl;exit(1);outfilesetiosflags(ios:left)setw(17) /因为前面有length+,所以这里要用length-1setw(17)stafflength-1.sexsetw(17)stafflength-1.agesetw(17)stafflength-1.departmentsetw(17)stafflength-1.room_numendl; outfile.close(); /*end else*/ return length;/*end login()*/人员登录部分遇到的问题和解决方案:人员登录是通过一个登录及记录函数实现的。当然录入每个参会人员信息这个比较简单基本没遇到大的问题。但当做到保存录入信息时,文件操作再次遇到问题。开始的问题是我录入信息后再用显示信息函数显示信息时发现屏幕显示的信息是内存中的随机汉字“烫”。这样程序进入一个死循环,只能强制关掉。这个问题我们一直分析问什么,也不知一遍的翻看文件操作那部分的书籍内容。最后在同学帮助以及自己分析下发现了问题。原来在信息录入时记录数length最后进行了length+。结果信息在stafflength中而保存信息时录入的是stafflength+1中随机信息。所以才产生了上述问题。最后把录入位置改为stafflength-1结果就可以显示信息了。4.3信息修改和删除设计及问题/*编辑修改函数*/void edit(staff staff,int length)char room_num10;int i,k;string str; ofstream outfile(loginfo.txt,ios:out);/用一个空字符变量去清空原来文件里的数据 if (!outfile)cerropen error1endl;exit(1); outfilestr; outfile.close();if(length!=0)coutroom_num;for(i=0;ilength;i+)if(strcmp(staffi.room_num,room_num)=0)coutroom_num;for(k=0;klength;k+) if(k=i) continue; /*可以选择原来的房间*/if(strcmp(room_num,staffk.room_num)=0) /*申请的房间已经有人*/ cout你选择的房间已有人,请选择其他房间endl;coutroom_num;k=0; /*为检验新的房间是否为空作准备*/ /*修改人员信息*/strcpy(staffi.room_num,room_num);;coutstaffi.sex;coutstaffi.age; coutstaffi.department;cout修改成功endl; ofstream outfile(loginfo.txt,ios:app);/保存内存信息到已清空文件loginfo.txt中if (!outfile)cerropen error1endl;exit(1); for (i=0;ilength;i+) outfilesetiosflags(ios:left)setw(17)setw(17)staffi.sexsetw(17)staffi.agesetw(17)staffi.departmentsetw(17)staffi.room_numendl;outfile.close(); elsecout还没人登录呢!_ .endl; /*end edit*/*信息删除函数*/int delete(staff staff,int length)int i,k;int counter=length;char room_num10;string str; ofstream outfile(loginfo.txt,ios:out);/文件清空 if (!outfile)cerropen error1endl;exit(1); outfilestr; outfile.close();if(length!=0)coutroom_num;for(i=0;ilength;i+)if(strcmp(staffi.room_num,room_num)=0) /*删除人员*/for(k=i;klength-1;k+)staffk=staffk+1;/*从被删人位置往后后一人员的信息覆盖前一人员信息*/cout删除成功!;length-; /*参会人数减一*/ ofstream outfile(loginfo.txt,ios:app);/保存删除后剩余信息到已清空文件loginfo.txt中if (!outfile)cerropen error1endl;exit(1);for (i=0;ilength;i+)outfilesetiosflags(ios:left)setw(17)setw(17)staffi.sexsetw(17)staffi.agesetw(17)staffi.departmentsetw(17)staffi.room_numendl; outfile.close();if(counter=length) /*未进行信息覆盖,要删除的人员还没登陆*/ cout输入的房间没人哟!endl;elsecout没有员工登陆哦!endl;return length; /*end delete()*/修改和删除部分遇到的问题:因为文件录入是主函数已经完成,所以这两部分的两个函数的关键是在进行完修改和删除以后如何把原来文件里的信息修改和删除后的保存。开始时我没在这两部分做保存。所以开始时显示后,再输入数据,修改和删除只在此次操作中起作用一旦关闭后再打开修改和删除根本就没改变。分析原因发现,修改和删除只在内存中进行,而关闭后便消失,所以文件里的东西还是录入后的信息,并没有保存修改和删除。然后我便在这两部分函数后加上了文件写入流ofstream outfile(loginfo.txt,ios:app);调试后发现可以保存修改和删除内容了,但以前的内容还是没变,只不过是在后面加上了修改删除后剩余内容。经过一天的看书讨论和搭档的交流。在书上看到app是将信息添加在原文件末尾,并没删除原文件以前的东西。然后我又吧app改为out目的是录入的同时便删除原文件内容。但很快发现向文件写内容的流要一组一组输出,这样可以刚好用结构体数组用循环将内存信息一组一组的输入文件。因此这样的话最后就只能保存最后一组信息。经过认真思考,最后我尝试先用一个空的字符串变量str通过out方式写入文件。等于先将文件清空,然后再用app方式一组一组录内存信息到文件,这样便将文件内容进行的修改和删除保存了下来。其中在文件修改和删除中也遇到length值得取舍问题。最后在在小组成员的合作下得到了解决。4.4统计同部门信息设计及问题/*统计各部门人员函数*/void statistics (staff staff,int length)int i;char partname10;int coutner=0,flag=0;if (length!=0) /*调用同部门信息显示函数*/ display_part (staff,市场部,length); display_part (staff,财务部,length); display_part (staff,技术部,length); display_part (staff,宣传部,length);coutpartname;coutpartnameendl;coutt姓名 性别 年龄 房间号endl;for (i=0;ilength;i+)if (strcmp(staffi.department,partname)=0)coutsetiosflags(ios:left)setw(11)setw(12)staffi.sexsetw(12)staffi.agesetw(13)staffi.room_numendl;coutner+;if (coutner=0)cout这个部门没人登录呀!endl;else cout总计:coutnerendl; else cout还没人登录呢!endl;/*同一部门信息显示函数*/void display_part (staff staff,char ch10,int length)int i,flag=0; cout ch endlendl; coutt姓名 性别 年龄 房间号endl;for (i=0;ilength;i+)if (strcmp(staffi.department,ch)=0)coutsetiosflags(ios:left)setw(11)setw(12)staffi.sexsetw(12)staffi.agesetw(13)staffi.room_numendl;flag+;if (flag=0)coutch还没人员登录endl;else coutch登录人数:flagendl; 统计部分遇到的问题和解决方案:这部分我是用一个同部门显示函数来实现分类将各部门信息全部显示出来。然后我又通过编写程序实现了输入某个部门然后显示出来的这个部门信息。这一部分没有文件的处理和保存,所以相对简单。但其中却要用的函数中调用函数,所以开始构建void display_part (staff staff,char ch10,int length)这个函数时,关于函数参数的选择遇到了难题。我不清楚是用int类型还是void类型。经过反复看书和比较,最终确定这个函数用一个三参数实现,在void statistics (staff staff,int length)这个函数中整体显示是调用四次。经过调试运行,最后取得了成功。15第五章 程序的调试和运行根据上述的思路与设计,对整个程序进行完整的编译,并运行检验程序.5.1 源程序代码构建完整的程序函数,试运行检验程序的正确性,是否符合自己的思路.#include #include#include #includeint const max = 50 ; /*定义最大参会人数*/using namespace std;struct staff /*参会人员的数据结构*/char name20; /*姓名*/char sex7; /*性别*/int age; /*年龄*/char department30;/*单位*/char room_num10; /*房间号*/staff;void menu()coutn;cout|-参会人员信息管理系统 -|endl;cout| 1.人员登陆 |endl; cout| 2.显示信息 |endl;cout欢 3.按房号排序 乐endl;cout迎 4.按姓名查询 意endl;cout使 5.统计同部门人员 指endl;cout用 6.登录信息修改 正endl;cout| 7.登录信息删除 |endl;cout| 0.退出 |endl;cout|-wel-()/-come-|endl;/*函数原型*/int login(staff staff,int length);void show_all(staff staff,int length);void sort(staff staff,int length);void searchbyname(staff staff,int length);void statistics(staff staff,int length);void edit(staff staff,int length);int delete(staff staff,int length);void display_part (staff staff,char ch10,int length);/*函数的定义*/ /*登录信息记录保存函数*/int login(staff staff,int length)int i;if(length=50) /*房间已满,拒绝登陆*/cout没有房间了,请自行联系管理人员!;exit(-1); /*end if*/elsechar room_num10;coutroom_num;for(i=0;ilength;i+) if(strcmp(room_num,staffi.room_num)=0) /*申请的房间已经有人*/ cout这个房间已经有人了,请选择其他房间!endl;coutroom_num;i=0; /*为检查新的房间作准备*/ /*end for*/* 录入登陆信息*/ strcpy(stafflength.room_num,room_num);;coutstafflength.sex;coutstafflength.age;coutstafflength.department;length+; /*参会人数加一*/*保存信息到文件loginfo.txt中*/ofstream outfile(loginfo.txt,ios:app);if (!outfile)cerropen error1endl;exit(1);outfilesetiosflags(ios:left)setw(17) /因为前面有length+,所以这里要用length-1setw(17)stafflength-1.sexsetw(17)stafflength-1.agesetw(17)stafflength-1.departmentsetw(17)stafflength-1.room_numendl; outfile.close(); /*end else*/ return length;/*end login()*/*显示函数*/void show_all(staff staff,int length) int i;if (length!=0)/判断是否有记录cout*员工注册信息*endl; coutt姓名 性别 年龄 工作部门 房间号 endl;for(i=0;ilength;i+) /*输出报到人员的信息*/ ;couttstaffi.sex;couttstaffi.age;couttstaffi.department;coutsetiosflags(ios:right)setw(9)staffi.room_num;coutendl;else cout还没有人登陆!endl;/*排序函数*/void sort(staff staff,int length)staff temp;int i,j;if(length!=0)for(i=0;ilength;i+) /*冒泡排序*/for(j=0;j0) temp=staffj; staffj=staffj+1;staffj+1=temp; cout*员工注册信息*endl;coutt姓名 性别 年龄 工作部门 房间号 endl;for(i=0;ilength;i+) /*输出报到人员的信息*/;couttstaffi.sex;couttstaffi.age;couttstaffi.department;coutsetw(9)staffi.room_num;coutendl;elsecout还没有人登陆!endl; /*end print()*/*按姓名查找函数*/void searchbyname(staff staff,int length)char name20;int i;int counter=0;if(length!=0)coutname;coutt姓名 性别 年龄 工作部门 房间号 endl;for(i=0;ilength;i+)if(strcmp(,name)=0) /*判断名字是否相同,相同则输出人员信息*/;couttstaffi.sex;couttstaffi.age;couttstaffi.department;coutsetw(13)staffi.room_num;coutendl;counter+;if(counter=0) /*counter+没出现,所以counter=0就是没你输入人的信息*/cout 这个人还没有登陆哦!endl;elsecout还没人登录呢!_ .endl; /*end seachbyname*/*编辑修改函数*/void edit(staff staff,int length)char room_num10;int i,k;string str; ofstream outfile(loginfo.txt,ios:out);/用一个空字符变量去清空原来文件里的数据 if (!outfile)cerropen error1endl;exit(1); outfilestr; outfile.close();if(length!=0)coutroom_num;for(i=0;ilength;i+)if(strcmp(staffi.room_num,room_num)=0)coutroom_num;for(k=0;klength;k+) if(k=i) continue; /*可以选择原来的房间*/if(strcmp(room_num,staffk.room_num)=0) /*申请的房间已经有人*/ cout你选择的房间已有人,请选择其他房间endl;coutroom_num;k=0; /*为检验新的房间是否为空作准备*/ /*修改人员信息*/strcpy(staffi.room_num,room_num);;coutstaffi.sex;coutstaffi.age; coutstaffi.department;cout修改成功endl; o

温馨提示

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

评论

0/150

提交评论