大一下学期课c++程设计报告书.docx
- 文档编号:9108580
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:38
- 大小:228.23KB
大一下学期课c++程设计报告书.docx
《大一下学期课c++程设计报告书.docx》由会员分享,可在线阅读,更多相关《大一下学期课c++程设计报告书.docx(38页珍藏版)》请在冰豆网上搜索。
大一下学期课c++程设计报告书
计算机学院
计算机科学与技术专业
课程设计报告
课程设计题目:
旅馆管理系统、字符串封装
院系班级:
计算机学院计科101班
姓名:
000
学号:
201000814114
指导老师:
000
2011年6月10日
Ø设计目的
Ø设计要求
Ø
(一)旅馆管理系统
.总体设计
2.详细设计
3.调试问题解决
(二)字符串封装
.总体设计
2.详细设计
3.调试问题解决
Ø心得体会
Ø源码
(一)设计目的
提高和加强学生的计算机应用与软件开发能力,使学生由初学者向专业的程序员过渡。
培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应计算机产业日新月异发展的形势。
学习和掌握C++程序设计方法以及上机调试技巧,为今后学习其它专业课程打好基础。
(二)设计要求
01.宾馆客房管理系统设计要求
宾馆的客房信息包括客房号、客房类型、客房价格、空闲情况、客人姓名、客人身份证号、入住时间、退房时间,预付费用等信息。
试设计一宾馆客房管理系统统,系统以菜单方式工作,使之能提供以下功能:
客房信息的录入功能
客人入住登记
客人退房结算
客房信息浏览功能,浏览全部客房的信息
客房信息查询:
查询空房间情况、按姓名或房间号查询
客房信息的删除、修改功能
02.封装一个,完善字符串,字符串的基本操作设计要求
定义一个串类Cstring,建立适当的构造函数
串作为数组的基本操作,包括求串的长度;判断串是否为空;将串置空;求字符串中的一个字符;将一个字符加到字符串的适当位置
运用运算符重载,完成串的赋值与合并
完成两个字符串的比较
要求用多文件结构实现,将类定义在“Cstring.h”中作为原型,在“Cstring.cpp”中实现类,在“Test.cpp”中测试类的功能。
在字符串类的基础上封装彩色字符串类。
(学会使用继承和多态)
(三)具体实现
一.旅馆管理系统
总体设计
菜单设计:
1.主菜单 选项:
退出、房间管理、入住管理
2.房间管理菜单 选项:
显示所有房间信息、录入房间信息、修改已有房间信息、删除已有房间信息、按人名查询、按房间号查询
3.入住管理菜单 选项:
入住登记、退房结算、房间信息浏览
流程图如下:
选择设计:
所有选择的实现通过switch语句实现。
实现设计:
首先写好函数,然后再选择后的case子句中调用函数来实现操作。
数据层设计
数据层均通过结构实现.其中,客户信息为房间信息的一部分.
详细设计
具体实现:
一.函数块:
1.界面美化函数
voidwelcome();
voidend();
作用:
美化界面
2.相关操作函数(部分参数略写)
voidfileread();作用:
从文件读取初始化对象信息
关键代码
for(intr=1;r<=10;r++)
for(i=0;i<10;i++)
{
fread(&room[i],sizeof(Room),1,fp);
}
filesave();文件保存系统关闭前保存相关信息
关键代码
for(i=0;i<10;i++)
{
fwrite(&room[i],sizeof(Room),1,fp);
}
对所有对象数据成员都要初始化,以防出现使用未初始化的变量的错误!
intGetDays();作用:
计算每个月的天数
关键代码:
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)return31;
elseif(month==4||month==6||month==9||month==11)return30;
elsereturn28;
不同的月份的天数不一样,返回对应的天数。
二月同一先使用28天,具体计算时在根据闰年的判断,在决定是否要+1天。
intDaySum();作用:
计算共住了多少天
关键代码:
if(in_year==out_year)
{
if((in_year%4==0)&&(in_year%100!
=0)||(in_year%400==0))
sum+=1;
for(in_month;in_month } else { for(in_month;in_month<=12;in_month++)sum+=GetDays(in_month); for(;(in_year+1) {if((in_year%4==0)&&(in_year%100! =0)||(in_year%400==0)) sum+=366; elsesum+=365; } for(intmo=1;mo } 时间的保存类型为int,例如: 20110523然后对其进行取余,整出来获得年月日得具体时间。 intGetCurrentDate();作用: 获取系统当前日期 关键代码: GetLocalTime(&ct); 使用windows的API函数来获得当前时间。 voidRoomInfoShow();作用: 显示房间的信息 输出对应的对象成员。 voidGuestInfoShow();作用: 显示客户的信息 输出对应的对象成员。 voidRoomInfoInput();作用: 输入房间信息 对对象成员的值进行重写。 voidGuestInfoInput();作用: 输入客户的信息 对对象成员的值进行重写。 voidInfoClear();作用: 清除客户信息 主要用于退房时,只需要对成员IsUsing赋值为false做标记就行了。 voidDeleteRoom();作用: 删除房间信息 删除房间,只要对成员IsAble赋值为false做标记就好! intChaeckName();作用: 检索该客户名对应的房间号 关键代码: if(room[i].IsUsing==true&&room[i].guestinfo.GuestName==name)return(i+1);//返回房间号 elsereturn-1; 遍历房间的信息;返回对应的房间号,以便于进行操作! 3.二级管理系统——房间管理 voidRoomManager_Menu();作用: 对应房间管理的菜单 voidRoomManager();作用: 执行对应菜单的响应操作 通过switch语句执行case子句来实现对应的不同功能 4.二级管理系统——入住管理 voidStay_In_Manager_Menu();作用: 对应入住管理的菜单 voidStay_In_Manager();作用: 执行对应入住管理菜单的响应操作 通过switch语句执行case子句来实现对应的不同功能 5.一级管理系统——主管理系统 voidMain_System_Menu();作用: 对应主系统操作的菜单(主菜单) voidMainSystem();作用: 执行对应主菜单的响应操作 通过switch语句执行case子句来实现对应的不同功能 6.主函数 voidmain();作用: 主程序的入口 二.功能实现块 要求实现功能: 房间管理: 显示所有房间信息、录入房间信息、修改房间信息、删除房间、按客户名和房间号来查询房间信息。 入住管理: 入住登记、退房结算、房间信息浏览 房间管理实现关键代码: case0: system("cls");Main_System_Menu();break;//回到主菜单 由于所有的选择模块均使用循环和switch来实现,故这里不需要直接在此调用主管理系统函数。 只要主系统的循环没有结束,程序就能继续。 除非选择结束,主循环结束,则程序结束! case1: system("cls");for(intf=0;f<10;f++) {RoomInfoShow(f+1);GuestInfoShow(f+1);}break; //显示所有房间信息 用循环输出显示所有的房间信息 case2: system("cls");cout<<"请输入你要录入信息的房间号: "; cin>>i;RoomInfoInput(i);break;//录入房间信息 调用房间信息重写函数,来实现房间信息的录入 case3: system("cls"); cout<<"请输入你要修改信息的房间号: ";cin>>i; cout<<"原始信息: "< //修改房间信息 调用房间信息重写函数,来实现房间信息的修改 case4: system("cls");cout<<"请输入你要删除的房间号: "; cin>>i;RoomDelete(i);break;//删除房间信息 调用房间信息删除函数,来实现房间信息的删除 case5: system("cls");cout<<"请输入你要查询的房间号: "; cin>>i;RoomInfoShow(i);GuestInfoShow(i);break; //按房间号查询房间信息 调用房间信息查询函数,来实现房间信息的查询 case6: system("cls");{stringname; cout<<"请输入你要查询的客户名: "; cin>>name;RoomInfoShow(CheckName(name)); GuestInfoShow(CheckName(name));break; }//按客户名查询房间信息 调用房间信息查询函数,来实现房间信息的查询 default: cout<<"**警告**参数错误! "< 入住管理实现关键代码: case0: system("cls");Main_System_Menu();break; //回主菜单 case1: system("cls");cout<<"\n请输入客户入住的房间号: "; cin>>i;GuestInfoInput(i);break;//入住登记 调用客户信息写入函数来实现 case2: system("cls");cout<<"\n请输入要结算的房间号: "; cin>>i;InfoClear(i);break;//退房结算 调用结算函数来实现。 其中要付的金额等于单价乘上客户住的天数。 case3: system("cls");for(intf=1;f<=10;f++)RoomInfoShow(f);break;//房间信息浏览 使用循环输出房间信息 default: cout<<"**警告**没没有该选项! "< 调试及问题解决: 调试错误1: 在进行登记操作后,再查看所有信息时,发现登记的房间号是1,然而显示的却是2号房间登记过了! 解决方法: 问题的原因很明显是操作对象数组时数组的下标不一致;仔细查看后发现,输出信息时下标用i;二输入信息时用的却是i-1;所以为了统一不出错,外界的房间标号用1到10,若外界要操作i,内部数组的处理时下标统一用外界输入的i-1(内部处理数组标号是0到9)。 调试错误2: 退房结算时没有实现消费额的计算,仅仅是将房间的属性标注为空房! 解决方法: 对实现退房结算的那个函数进行修改,加入计算入住时间到退房时间之间的时间差为住房的时间;然后乘以单价就是要付的金额! 调试错误3: 程序不够优化! 在住房登记时,入住时间和退房时间需要自己输入! 解决方法: 加入一个函数GetCurrentDate();来实现自动获取系统日期! 同时在入住登记和退房结算的实现代码中修改自动加入入住时间的赋值! 二.字符串封装 总体设计 文件关系体系设计: 类设计: 基类: CMyString { public: CMyString();//无参数构造 CMyString(stringinput);//含参数构造 CMyString(CMyString&StrPara);//字符串类的复制拷贝构造函数 intoperator<(CMyString&StrPara); //若参数小于对象,返回-1,反之1,相等0 string*GetPointer();//保存数组的指针 intGetLength();//返回数组的长度 boolIsEmpty(); //如果是空,返回true,否则返回false voidEmpty();//置空 voidDisplay();//输出显示字符串 voidInsert(inti,char*p);//插入字符到第i个位置 voidoperator=(string&StrPara); //string对象直接赋值 voidoperator=(CMyString&StrPara); //CMyString对象直接赋值; voidoperator=(charStrPara[]);//char[]直接赋值 CMyStringoperator+(CMyString&StrPara); //字符串的链接 charoperator[](inti);//求第i个位置的字符 stringstr;//数据成员 string*strpointer;//保存数据的指针! }; 继承类: classCColorString: publicCMyString { public: CColorString(): CMyString()//无参构造 CColorString(stringinput,stringcolorPara): CMyString(input) //含参构造 CColorString: : CColorString(CColorString&StrPara)//拷贝构造 voidDisplay1()//Display1()函数的重写 } 详细设计 功能实现 1.求字符串的长度: 使用类的成员stringstr自带的函数length(); 关键代码: returnstr.length(); 2.判断串是否为空: 使用类的成员stringstr自带的函数empty(); 关键代码: returnstr.empty(); 3.将串置空; 对类的成员str重新赋值为空 关键代码: str=""; 4.求字符串中的一个字符: 重载下标运算符[],同时使用string类的[]重载函数; 关键代码: returnstr[i-1]; 5.将一个字符加到字符串的适当位置: 使用string的自带函数 关键代码: str.insert(i,p);//I是插入位置p是插入的字符 6.运用运算符重载,完成串的赋值与合并: 重载+和=运算符同时使用string自带的+和=运算符重载 关键代码 str+=StrPara.str; str=StrPara; 7.完成两个字符串的比较: 重载<运算符同时使用string的>或<重载函数 关键代码: return(pare(StrPara.str)); 调试及问题解决: 调试问题1: 插入字符时,如果输入的插入位置超过了类对象的长度,发生越界异常,导致程序崩溃! 解决办法: 在接受插入的位置时,用if判断一下是否发生越界! 若越界,直接提示并不进行插入操作;否则进行插入操作! 调试问题2: 运行时直接查看所有信息,出现异常! 解决办法: 根据出现的错误的提示,然后调试,查看变量的值,系统给的错误是: 使用了未赋值的变量。 然后添加初始化函数,对对象数组初始化。 三、心得体会 这次课设花费时间两周,仅完成两个题目的完整设计! 从这词课设中,我深刻认识到平时的理论所学到实践时是相差那么远! 同时也积累了一定c++入门经验! 经过两个星期的实践学习,使我对C++语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C++语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C++语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。 通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C++语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。 通过分析、设计、编码、调试等各环节的训练,深刻理解、C++程序设计技术,掌握分析、解决实际问题的能力。 综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,逐步掌握软件开发的基本思想、方法和实现步骤,提高实际应用水平。 学会应用VsualC++环境编程,调试程序。 四、源码 旅馆管理系统: //////////////////////////////////////////////////////////////////房间结构(Room.h)/////////////////////////////////////////////////// #include #include #include usingnamespacestd; structGuestInfo { intRoomID; stringGuestName; stringGuestIDCardNum; intInDate;///入住日期 intOutDate;///退房日期 intAdvancePayment; }; structRoom { intprice; intRoomID; charRoomType; GuestInfoguestinfo;//客户信息 boolIsUsing;///入住情况 boolIsAble; }; /////////////////////////////////////////////main.cpp/////////////////////////////////////// #include"Room.h"//客房信息和客户信息 voidMainSystem(); voidMain_System_Menu();//函数声明 ///*******************************************/////相关操作函数 Roomroom[10]; voidfileread()//读文件 { cout<<"\n\n正在配置管理系统..."; inti; FILE*fp; if((fp=fopen("Room.inf","rb"))==NULL)cout<<"打开文件失败! \n"; elsecout<<"已经成功读取文件! \n"; rewind(fp); for(i=0;i<10;i++) { fread(&room[i],sizeof(Room),1,fp); } fclose(fp); } voidfilesave()//写文件 { inti; FILE*fp; if((fp=fopen("Room.inf","wb+"))==NULL)cout<<"保存文件失败! \n"; elsecout<<"已经成功保存文件! \n"; rewind(fp); for(i=0;i<10;i++) { fwrite(&room[i],sizeof(Room),1,fp); } fclose(fp); }} intGetDays(intmonth)//计算每月的天数 { if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)return31; elseif(month==4||month==6||month==9||month==11)return30; elsereturn28; } intDaySum(intin,intout)//计算共住了多少天 { intin_year=in/10000;//时间用整形保存! 分别获取年月日 intin_month=(in/100)%100; intout_year=out/10000; intout_month=(out/100)%100; intsum=0; if(in_year==out_year)//如果是同一年从入住月份+到退房的月份 { if((in_year%4==0)&&(in_year%100! =0)||(in_year%400==0)) sum+=1; for(in_month;in_month } else中间加整年的天数,同时判断是否是闰年以及是否要多加1天 { for(in_month;in_month<=12;in_month++)sum+=GetDays(in_month); for(;(in_year+1) {if((in_year%4==0)&&(in_year%100! =0)||(in_year%400==0)) sum+=366; elsesum+=365; } for(intmo=1;mo } sum-=(in%100); sum+=(out%100); returnsum; } intGetCurrentDate()//获取系统时间 { intyear,month,day; SYSTEMTIMEct; GetLocalTime(&ct);//如果用GetSystemTime(&ct);那么获取的是格林尼治标准时间 year=ct.wYear; month=ct.wMonth; day=ct.wDay; return(year*10000+month*10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一下 学期 c+ 设计 报告书