小区楼盘销售管理系统C++课程设计.docx
- 文档编号:14296204
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:42
- 大小:559.30KB
小区楼盘销售管理系统C++课程设计.docx
《小区楼盘销售管理系统C++课程设计.docx》由会员分享,可在线阅读,更多相关《小区楼盘销售管理系统C++课程设计.docx(42页珍藏版)》请在冰点文库上搜索。
小区楼盘销售管理系统C++课程设计
计算机学院计算机科学与技术专业
《程序设计综合课程设计》报告
(2010/2011学年第一学期)
学生姓名:
学生班级:
学生学号:
指导教师:
2011年 1 月 7 日
一、课程设计目的和要求
(1)巩固和加深学生对C++课程的基本知识的理解和掌握,通过这次课程设计,使学生从整体上把握一个学期以来所学的C++程序设计的内容,各种程序设计思路进行贯通,从而熟练掌握。
(2)掌握C++编程和程序调试的基本技能。
C++编程和程序调试是软件设计的重中之重,这两个部分占据了整个程序设计的80%以上的时间。
掌握C++编程和调试,是极其重要的。
(3)利用C++进行简单软件设计的基本思路和方法。
今天我们的程序设计只是一个很小很小的方面而已,从这次课程设计中,我们应该对软件设计有所认识,并且在今后的学习中要为此做出充分的准备。
(4)提高运用C++解决实际问题的能力。
任何知识的学习的最终目的都是解决实际问题。
C++编程在解决实际问题上具有很大的作用。
二、课程设计任务内容
1、课程设计内容:
小区楼盘销售管理程序
要用结构体数组/链表实现,用结构体表示每项记录,包含楼盘数据为:
楼编号、单元号、房间号、朝向(如:
南北、东西、东南等)、户型、平米单价、建筑面积、总价,售出状态,业务员等,其中总价=单价X建筑面积。
设计各个函数,分别实现以下功能:
(1)录入:
实现每套房源信息的输入,最好是追加方式;
(2)删除:
完成房源信息的删除;
(3)修改:
允许对已经录入的数据重新进行编辑、修改;
(4)显示:
显示所有房源信息;
(5)查询:
a)输入朝向、户型等数据,显示符合该条件的所有记录,最好做到条件动态添加;
b)建筑面积范围,显示符合该条件的所有记录;
c)显示所有未售出房源情况;
d)查询已售出房源的业务员姓名,成交额及总额
(6)退出程序.
设计菜单,通过选择菜单调用以上各函数。
要求:
1)用C语言实现系统;
2)函数功能要划分好(结构化程序设计);
3)界面友好(良好的人机交互),加必要的注释;
4)提供程序测试方案。
2、设计内容分析
输入项:
楼编号、单元号、房间号、朝向(如:
南北、东西、东南等)、户型、平米单价、建筑面积、总价,售出状态,业务员等,其中总价=单价X建筑面积。
程序中也会有一些其他的循环条件输入。
输出项:
小区楼盘房源的相关信息,也就是输入项的用户所需数据.
程序功能的实现:
程序设计到数据的动态添加、删除、修改、和查询,应使用链表进行存储较为方便.而且应使用一个结构体来对应相应的房间,存储其相关信息。
在使用链表上,很多地功能的实现都变得很简单了,条件查找上因该会比较麻烦,应多加考虑.
三、详细设计说明
1、函数功能说明、参数说明及函数流程图
整个程序共包含6个函数:
voidinput(residence*);//输入函数
voiddel(residence*);//删除函数
voidamend(residence*);//修改函数
voiddisplay(residence*);//显示所有信息
voidseek(residence*);//条件查找函数
intmain();//主函数
程序中使用了一个结构体,用于存储套房间的相应信息:
structresidence
{
intlou,danyuan,fangjian;//楼号/单元号/房间号
stringchaoxiang,huxing;//朝向/户型
floatdanjia,mianji,zongjia;//平米单价/面积/总价
stringzhuangtai,renyuan;//售出状态(yes/no)/销售人员(没有的话为no,有的话输入相应的名字)
residence*next;//指针用来指向链表的下一个结点
};
(1)、intmain()
函数功能说明:
主函数,主要是实现两个功能:
一是程序开始运行时的文件数据载入,二是显示主菜单
文件载入时先判断文件是否存在,如果不存在,使用outf.open(”data.txt”,ios:
:
out);进行新建;如果存在,从中读取数据并存入链表中.
主菜单放在一个while循环中,通过swicth进行选择相应选项。
函数参数说明:
inti;用于菜单选择,不同的值对应不同的菜单
Inta;用于记录载入的数据个数
Residence*head,*p1,*p2;用于链表的创建,head是链表的头结点,p1,p2都是创建链表是的中间变量,起辅助传递作用。
函数流程图:
图2—1
(1)
图2-1
(2)
(2)、voidinput(residence*);
函数功能说明:
输入数据并保存于文件中。
输入分成了二次,第一次是楼号、单元号、房间号、平米单价、建筑面积这5个信息;第二次是朝向、户型、售出状态(yes/no)、业务员(no/业务员姓名)共4个信息;总价这一信息使用p1—〉zongjia=p1—〉danjia*p1—>mianji;来计算,减少用户的工作量.
保存数据上,用户每输入完一个房源信息就存储一个,使用的是这个语句:
outf〈
outf〈<""〈〈p1-〉chaoxiang<〈"”〈〈p1-〉huxing<〈”"<〈p1->zhuangtai〈<”"〈〈p1-〉renyuan〈 函数参数说明: residence*head1: 存储原链表的头指针 residence*p1,*p2,*head;p1,p2为中间指针变量,head用于存储原指的尾结点 函数流程图: 图2-2 (3)、voiddel(residence*); 函数功能说明: 删除数据,并将删除后的数据保存在文件中 将楼号、单元号.房间号等信息存储在l、d、f三个变量中,在对查看每个节点时,if(p1->lou==l&&p1->danyuan==d&&p1—>fangjian==f)进行判断。 并且,通过判断i是否为零确定删除的数据的个数,如果i为零,提示没有改套房间。 数据保存与输入部分是一样的。 函数参数说明: residence*head1: 存储原链表的头指针 intl,d,f,n,i;l、d、f分别用于存储需要查询的房间的楼号、单元号、房间号;n用来判断是否结束修改操作返回主菜单;i用来判断是否删除成功。 residence*p1,*p2;中间的指针变量 函数流程图: (4)、voidamend(residence*); 函数功能说明: 修改数据,并将修改保存在文件中 查找房间所在链表的位置与删除函数是一样的。 提示用户是按相应键以做相应修改,并且可以循环修改: cout<<”相应按键为: 楼号1,单元号2,房间号3,平米单价4,建筑面积5,,朝向6,户型7,售出状态8,业务员9,退出0”<〈endl; 当用户按0想要结束修改时,程序退出修改模块,进入存储模块,存储完毕提示cout<<"修改已保存”〈〈endl;并返回主菜单。 函数参数说明: residence*head1: 存储原链表的头指针 intl,d,f,n,i;l、d、f分别用于存储需要查询的房间的楼号单元号、房间号;n用来判断是否结束修改操作返回主菜单;i用于判断是否删除成功。 residence*p1,*p2;residence*p1,*p2;中间的指针变量 函数流程图: (5)、voiddisplay(residence*); 函数功能说明: 查看所有房源信息,以列表的方式显示 函数参数说明: residence*head1: 存储原链表的头指针 residence*p1;中间指针变量 函数流程图: (6)、voidseek(residence*); 函数功能说明: 条件查询 实现的原理: 将原链表进行复制,查询的时候对复制链表进行查找,并把不符合条件的节点删除,这样一来剩下的就都是符合条件的节点;如果再次添加条件进行查找,仍旧执行这个操作,从而达到条件查询的目的. 其中,使用while (1)进行循环,if语句判断选择的是何种操作。 函数参数说明: residence*head2;存储原链表的头指针 intt;用于选择查找条件 strings;;存储提供的查询信息: 朝向,户型, floatm1,m2,q=0;m1,m2分别存储面积范围的左右边界,用于计算已售房源的总金额 residence*p1,*p2,*p3,*p4,*head;除head存储新复制链表的头结点外,其他都是中间指针变量。 函数流程图: 2、编码 ASCII.数据也是存储在ASCII文件中,文件名为: data.txt;可以随时查看数据. 3、测试 初始界面: 图3—1 输入数据: 图3—2 输入完成后重新打开程序: 图3—3 显示所有数据: 图3—4 删除数据: 图3—5 图3-6 修改数据: 图3-7 图3-8 查询数据: 图3-9 追加条件: 图3-10 程序的存在一个bug,按户型查询后,程序不能进入菜单,而是卡死.由于5个if语句中的循环代码是完全一样的,为什么在按户型查询时就出问题,有待解决.初步确定是链表尾结点赋值NULL出错,应属于编译系统的问题。 按户型4—2查找,没问题: 图3-11 按户型4—1查找,出现错误: 图3-12 四、软件使用说明 1、开始 运行程序,显示主菜单.左上角会有提示,显示数据载入的相应情况。 按相应数字键即可进入对应功能。 2、输入数据 输入分为两次,第一次包括: 楼号、单元号、房间号、平米单价、建筑面积这5个信息;第二次是朝向、户型、售出状态(yes/no)、业务员(no/业务员姓名)共4个信息;第二次包括: 朝向、户型、售出状态(yes/no)、业务员(no/业务员姓名)共4个信息;总价这信息程序会自行计算,用户无需输入。 输入完成一次后会提示是否继续: “如果需要结束输入请按0,要继续请按1” 用户输入的房源信息会与以前输入的信息放在同一个文件下,不会覆盖。 数据时按时间顺序排列的。 3、删除数据 首先提示输入楼号、单元号、房间号,输入完成后即开始查找删除.如果没有该房源,则会有相应提示。 4、修改数据 进入修改后,提示按相应键可进行相应修改。 用户输入需要修改的房间位置信息,之后按相应的数字即可开始修改。 可以修改所以数据。 5、显示所有数据 显示所有数据,按任意键返回主菜单。 6、条件查询 提供五总查询方式: 朝向 (1),户型 (2),建筑面积范围(3),显示所有未售出房源(4),查询已售出房源的业务员姓名、成交金额及总额(5);按相应数字进入查找。 查找完成后如果想继续添加条件进行查找可继续按相应数字继续,也可按0退出返回菜单。 7、退出 按0即可。 五、课程设计心得与体会 这次课程设计让我受益匪浅. 学编程这么久,还是头一次写这么大的程序。 通过这个,也算体验到了程序设计的艰苦和团队合作的重要性,这也为以后做项目打了一些基础,而且积累了不少程序设计的经验呢。 最后,得学习图形用户操作界面的设计了,dos界面确实不怎么好看,而且容易出现一些不必要的问题,比如多输入了一个数据该。 总而言之,Stillhavelongwaytogo。 附录1: 参考文献 1、《C++程序设计》钱能清华大学出版社 2、《c++程序设计》作者: 谭浩强出版时间2004年6月 附录2: 程序清单 #include #include〈fstream〉 #include〈string〉 #include〈iomanip> usingnamespacestd; structresidence//房源信息结构体 { intlou,danyuan,fangjian; stringchaoxiang,huxing; floatdanjia,mianji,zongjia; stringzhuangtai,renyuan; residence*next; }; intmain() { voidinput(residence*);//ok输入函数 voiddel(residence*);//ok删除函数 voidamend(residence*);//ok修改函数 voiddisplay(residence*);//ok显示所有信息 voidseek(residence*);//ok条件查找函数//函数定义完毕 inti; residence*head,*p1,*p2; head=newresidence;head—〉next=NULL; //打开文件进行,从文件进行输入,进入等待状态 ifstreaminf(”data.txt”,ios: : in); ofstreamoutf; if(inf==0)//文件不存在,新建 { cout〈〈"数据文件不存在,将新建"< inf.close;outf。 open(”data.txt",ios: : out); outf。 close; cout〈<”successfull! ”<〈endl; } else//文件存在,读取数据 { inta=0; p2=head; while (1) { a++;//记录载入的数据的个数 p1=newresidence;p1-〉next=NULL; inf>〉p1->lou>〉p1-〉danyuan>>p1—>fangjian; inf〉>p1—>danjia〉〉p1-〉mianji〉>p1-〉zongjia; inf>〉p1—〉chaoxiang〉〉p1—〉huxing>>p1->zhuangtai〉〉p1—〉renyuan; if(inf==0){break;deletep1;} p2->next=p1; p2=p1; } cout<<"数据载入成功! ”〈〈endl;//////////////文件载入完成
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小区 楼盘 销售 管理 系统 C+ 课程设计