大一下学期课c++程设计报告书Word格式.docx

上传人:b****6 文档编号:22244692 上传时间:2023-02-03 格式:DOCX 页数:38 大小:228.23KB
下载 相关 举报
大一下学期课c++程设计报告书Word格式.docx_第1页
第1页 / 共38页
大一下学期课c++程设计报告书Word格式.docx_第2页
第2页 / 共38页
大一下学期课c++程设计报告书Word格式.docx_第3页
第3页 / 共38页
大一下学期课c++程设计报告书Word格式.docx_第4页
第4页 / 共38页
大一下学期课c++程设计报告书Word格式.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

大一下学期课c++程设计报告书Word格式.docx

《大一下学期课c++程设计报告书Word格式.docx》由会员分享,可在线阅读,更多相关《大一下学期课c++程设计报告书Word格式.docx(38页珍藏版)》请在冰豆网上搜索。

大一下学期课c++程设计报告书Word格式.docx

将串置空;

求字符串中的一个字符;

将一个字符加到字符串的适当位置

运用运算符重载,完成串的赋值与合并

完成两个字符串的比较

要求用多文件结构实现,将类定义在“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;

fwrite(&

对所有对象数据成员都要初始化,以防出现使用未初始化的变量的错误!

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<

out_month;

in_month++)sum+=GetDays(in_month);

else

for(in_month;

=12;

for(;

(in_year+1)<

out_year;

in_year++)

{if((in_year%4==0)&

sum+=366;

elsesum+=365;

}

for(intmo=1;

mo<

mo++)sum+=GetDays(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();

执行对应入住管理菜单的响应操作

5.一级管理系统——主管理系统

voidMain_System_Menu();

对应主系统操作的菜单(主菜单)

voidMainSystem();

执行对应主菜单的响应操作

6.主函数

voidmain();

主程序的入口

二.功能实现块

要求实现功能:

房间管理:

显示所有房间信息、录入房间信息、修改房间信息、删除房间、按客户名和房间号来查询房间信息。

入住管理:

房间管理实现关键代码:

case0:

system("

cls"

);

Main_System_Menu();

break;

//回到主菜单

由于所有的选择模块均使用循环和switch来实现,故这里不需要直接在此调用主管理系统函数。

只要主系统的循环没有结束,程序就能继续。

除非选择结束,主循环结束,则程序结束!

case1:

for(intf=0;

f<

f++)

{RoomInfoShow(f+1);

GuestInfoShow(f+1);

}break;

//显示所有房间信息

用循环输出显示所有的房间信息

case2:

cout<

<

"

请输入你要录入信息的房间号:

;

cin>

>

i;

RoomInfoInput(i);

//录入房间信息

调用房间信息重写函数,来实现房间信息的录入

case3:

请输入你要修改信息的房间号:

原始信息:

endl;

RoomInfoShow(i);

//修改房间信息

调用房间信息重写函数,来实现房间信息的修改

case4:

请输入你要删除的房间号:

RoomDelete(i);

//删除房间信息

调用房间信息删除函数,来实现房间信息的删除

case5:

请输入你要查询的房间号:

GuestInfoShow(i);

//按房间号查询房间信息

调用房间信息查询函数,来实现房间信息的查询

case6:

system("

{stringname;

请输入你要查询的客户名:

name;

RoomInfoShow(CheckName(name));

GuestInfoShow(CheckName(name));

break;

}//按客户名查询房间信息

default:

**警告**参数错误!

入住管理实现关键代码:

//回主菜单

\n请输入客户入住的房间号:

GuestInfoInput(i);

//入住登记

调用客户信息写入函数来实现

\n请输入要结算的房间号:

InfoClear(i);

//退房结算

调用结算函数来实现。

其中要付的金额等于单价乘上客户住的天数。

for(intf=1;

f++)RoomInfoShow(f);

//房间信息浏览

使用循环输出房间信息

**警告**没没有该选项!

调试及问题解决:

调试错误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&

//若参数小于对象,返回-1,反之1,相等0

string*GetPointer();

//保存数组的指针

intGetLength();

//返回数组的长度

boolIsEmpty();

//如果是空,返回true,否则返回false

voidEmpty();

//置空

voidDisplay();

//输出显示字符串

voidInsert(inti,char*p);

//插入字符到第i个位置

voidoperator=(string&

//string对象直接赋值

voidoperator=(CMyString&

//CMyString对象直接赋值;

voidoperator=(charStrPara[]);

//char[]直接赋值

CMyStringoperator+(CMyString&

//字符串的链接

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<

iostream>

string>

windows.h>

usingnamespacestd;

structGuestInfo

intRoomID;

stringGuestName;

stringGuestIDCardNum;

intInDate;

///入住日期

intOutDate;

///退房日期

intAdvancePayment;

};

structRoom

intprice;

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<

已经成功读取文件!

rewind(fp);

fclose(fp);

voidfilesave()//写文件

inti;

wb+"

保存文件失败!

已经成功保存文件!

}}

intGetDays(intmonth)//计算每月的天数

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)//如果是同一年从入住月份+到退房的月份

else中间加整年的天数,同时判断是否是闰年以及是否要多加1天

sum-=(in%100);

sum+=(out%100);

returnsum;

intGetCurrentDate()//获取系统时间

intyear,month,day;

SYSTEMTIMEct;

//如果用GetSystemTime(&

那么获取的是格林尼治标准时间

year=ct.wYear;

month=ct.wMonth;

day=ct.wDay;

return(year*10000+month*10

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1