小区楼盘销售管理系统C课程设计.docx

上传人:b****9 文档编号:25671719 上传时间:2023-06-11 格式:DOCX 页数:40 大小:555.39KB
下载 相关 举报
小区楼盘销售管理系统C课程设计.docx_第1页
第1页 / 共40页
小区楼盘销售管理系统C课程设计.docx_第2页
第2页 / 共40页
小区楼盘销售管理系统C课程设计.docx_第3页
第3页 / 共40页
小区楼盘销售管理系统C课程设计.docx_第4页
第4页 / 共40页
小区楼盘销售管理系统C课程设计.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

小区楼盘销售管理系统C课程设计.docx

《小区楼盘销售管理系统C课程设计.docx》由会员分享,可在线阅读,更多相关《小区楼盘销售管理系统C课程设计.docx(40页珍藏版)》请在冰豆网上搜索。

小区楼盘销售管理系统C课程设计.docx

小区楼盘销售管理系统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<lou<<""<danyuan<<""<fangjian<<""<danjia<<""<mianji<<""<<""<zongjia;

outf<<""<chaoxiang<<""<huxing<<""<zhuangtai<<""<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"<

当用户按0想要结束修改时,程序退出修改模块,进入存储模块,存储完毕提示cout<<"修改已保存"<

函数参数说明:

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

#include

#include

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!

"<

}

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<<"数据载入成功!

"<

cout<<"共载入"<

}

while

(1)//菜单

{

cout<<"****************欢迎使用小区楼盘销售管理程序***************"<

cout<<"++"<

cout<<"++"<

cout<<"++"<

cout<<"+>>>>要输入数据请按--1+"<

cout<<"+>>>>要删除数据请按--2+"<

cout<<"+>>>>要修改数据请按--3+"<

cout<<"+>>>>要显示数据请按--4+"<

cout<<"+>>>>要查询数据请按--5+"<

cout<<"+>>>>要退出请按------6+"<

cout<<"++"<

cout<<"++"<

cout<<"++"<

cout<<"****************欢迎使用小区楼盘销售管理程序***************"<

cout<

cin>>i;

switch(i)

{

case1:

input(head);break;

case2:

del(head);break;

case3:

amend(head);break;

case4:

display(head);break;

case5:

seek(head);break;

case6:

exit

(1);break;

}

}

return0;

}

voidinput(residence*head1)////////////////////////////////////////////////////////////////////////////////

{

ofstreamoutf("data.txt",ios:

:

app);//打开文件,等待数据存储

residence*p1,*p2,*head;

p1=head1;

while

(1)

{

if(p1->next==NULL)break;

p1=p1->next;

}

head=p1;

intn;

p2=head;

cout<<"开始输入"<

do

{

p1=newresidence;

p1->next=NULL;

p2->next=p1;

cout<<"楼号、单元号、房间号、平米单价、建筑面积这5个信息"<

cin>>p1->lou>>p1->danyuan>>p1->fangjian;

cin>>p1->danjia>>p1->mianji;

p1->zongjia=p1->danjia*p1->mianji;

cout<<"请分别输入朝向、户型、售出状态(yes/no)、业务员(no/业务员姓名)共4个信息"<

cin>>p1->chaoxiang>>p1->huxing>>p1->zhuangtai>>p1->renyuan;

outf<lou<<""<danyuan<<""<fangjian<<""<danjia<<""<mianji<<""<<""<zongjia;

outf<<""<chaoxiang<<""<huxing<<""<zhuangtai<<""<renyuan<

//输入数据的同时,将数据写入文件

cout<<"如果需要结束输入请按0,要继续请按1"<

cin>>n;

p2=p1;

}while(n!

=0);

outf.close;

cout<<"数据已保存!

"<

}

voiddel(residence*head)////////////////////////////////////////////////////////////////////////////////////////

{

intl,d,f,n,i;

residence*p1,*p2;

cout<<"请输入您要删除的房间的位置信息:

楼号,单元号,房间号"<

cin>>l>>d>>f;

do

{

if(head->next==NULL){cout<<"没有数据"<

p2=head;

p1=head->next;

while

(1)//查找并删除数据

{

i=0;

if(p1->lou==l&&p1->danyuan==d&&p1->fangjian==f)

{

p2->next=p1->next;

deletep1;i++;//删除操作

break;

}

if(p1->next==NULL)break;

p2=p1;

p1=p1->next;

}

if(i!

=0)cout<<"删除成功"<

elsecout<<"没有该数据"<

cout<<"如果需要结束输入请按0,要继续请按1"<

cin>>n;

}while(n!

=0);

ofstreamoutf("data.txt",ios:

:

out);//重新存储数据

p1=head;

if(p1->next==NULL)cout<<"数据已全部删除!

"<

else

{

while

(1)

{

p1=p1->next;

outf<lou<<""<danyuan<<""<fangjian<<""<danjia<<""<mianji<<""<<""<zongjia;

outf<<""<chaoxiang<<""<huxing<<""<zhuangtai<<""<renyuan<

if(p1->next==NULL)break;

}

}

outf.close;

cout<<"修改已保存"<

}

voidamend(residence*head)/////////////////////////////////////////////////////////////////////////////////

{

cout<<"已进入修改,完成一次修改后可按‘0’退出"<

intl,d,f,n,i;

residence*p1,*p2;

if(head->next==NULL){cout<<"没有数据"<

cout<<"相应按键为:

楼号1,单元号2,房间号3,平米单价4,建筑面积5,,朝向6,户型7,售出状态8,业务员9,退出0"<

cout<<"请输入您要修改的房间的位置信息:

楼号,单元号,房间号"<

cin>>l>>d>>f;

while

(1)

{

p2=head;

p1=head->next;

while

(1)

{

if(p1->lou==l&&p1->danyuan==d&&p1->fangjian==f)//判断条件

{

do

{

cout<<"请输入相应的数字"<

cin>>i;

switch(i)

{

case1:

cout<<"新楼号";cin>>p1->lou;break;

case2:

cout<<"新单元号";cin>>p1->danyuan;break;

case3:

cout<<"新房

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

当前位置:首页 > 工程科技

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

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