《小区楼盘销售管理系统c课程设计.doc》由会员分享,可在线阅读,更多相关《小区楼盘销售管理系统c课程设计.doc(51页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机学院计算机科学与技术专业 程序设计综合课程设计报告 (2010/2011学年 第一学期, 学生姓名: 学生班级: 学生学号: 指导教师: 2011年 1 月 7 日 目录 一、课程设计目的和要求. 1 二、课程设计任务内容. 2 1、课程设计内容:. 2 2、设计内容分析. 3 三、详细设计说明. 4 1、函数功能说明、参数说明及函数流程图. 4 (1,、int main, . 5 ,2,、void input,residence *,. 7 (3)、void del,residence *),. 9 (4,、void amend,residence *, . 12 ,5,、void d
2、isplay(residence ,; . 15 (6,、void seek(residence *,; . 16 2、编码. 19 3、测试. 19 四、软件使用说明. 26 五、课程设计心得与体会. 28 附录1:参考文献. 29 附录2:程序清单. 29 一、课程设计目的和要求 ,1)巩固和加深学生对C+课程的基本知识的理解和掌握,通过这次课程设计,使学生从整体上把握一个学期以来所学的C+程序设计的内容,各种程序设计思路进行贯通,从而熟练掌握。 ,2)掌握C+编程和程序调试的基本技能。C+编程和程序调试是软件设计的重中之重,这两个部分占据了整个程序设计的80,以上的时间。掌握C+编程和调
3、试,是极其重要的。 ,3,利用C+进行简单软件设计的基本思路和方法。今天我们的程序设计只是一个很小很小的方面而已,从这次课程设计中,我们应该对软件设计有所认识,并且在今后的学习中要为此做出充分的准备. ,4)提高运用C+解决实际问题的能力。任何知识的学习的最终目的都是解决实际问题。C+编程在解决实际问题上具有很大的作用。 二、课程设计任务内容 1、课程设计内容: 小区楼盘销售管理程序 要用结构体数组/链表实现,用结构体表示每项记录,包含楼盘数据为:楼编号、单元号、房间号、朝向,如:南北、东西、东南等,、户型、平米单价、建筑面积、总价,售出状态,业务员等,其中总价=单价X 建筑面积。设计各个函数
4、,分别实现以下功能: ,1)录入:实现每套房源信息的输入,最好是追加方式, ,2,删除:完成房源信息的删除, (3,修改:允许对已经录入的数据重新进行编辑、修改, ,4)显示:显示所有房源信息, ,5,查询: a, 输入朝向、户型等数据,显示符合该条件的所有记录,最好做到条件动态添加, b,建筑面积范围,显示符合该条件的所有记录, c) 显示所有未售出房源情况, d,查询已售出房源的业务员姓名,成交额及总额 ,6) 退出程序。 设计菜单,通过选择菜单调用以上各函数。 要求: 1,用C语言实现系统, 2,函数功能要划分好,结构化程序设计), 3,界面友好,良好的人机交互,,加必要的注释, 4)提
5、供程序测试方案。 2、设计内容分析 输入项:楼编号、单元号、房间号、朝向,如:南北、东西、东南等)、户型、平米单价、建筑面积、总价,售出状态,业务员等,其中总价=单价X 建筑面积。 程序中也会有一些其他的循环条件输入。 输出项:小区楼盘房源的相关信息,也就是输入项的用户所需数据. 程序功能的实现: 程序设计到数据的动态添加、删除、修改、和查询,应使用链表进行存储较为方便。而且应使用一个结构体来对应相应的房间,存储其相关信息.在使用链表上,很多地功能的实现都变得很简单了,条件查找上因该会比较麻烦,应多加考虑。 三、详细设计说明 1、函数功能说明、参数说明及函数流程图 整个程序共包含6个函数: v
6、oid input(residence ,);/ 输入函数 void del,residence ,);/ 删除函数 void amend(residence *);/ 修改函数 void display(residence *),/ 显示所有信息 void seek(residence *, / 条件查找函数 int main(), /主函数 程序中使用了一个结构体,用于存储套房间的相应信息: struct residence int lou,danyuan,fangjian; /楼号/单元号/房间号 string chaoxiang,huxing, /朝向/户型 float danjia,
7、mianji,zongjia, /平米单价/面积/总价 string zhuangtai,renyuan; /售出状态,yes/no,/销售人员,没有的话为no,有的话输入相应的名字) residence ,next, /指针用来指向链表的下一个结点 ; ,1,、int main, 函数功能说明: 主函数,主要是实现两个功能:一是程序开始运行时的文件数据载入,二是显示主菜单 文件载入时先判断文件是否存在,如果不存在,使用outf。open,data.txt,ios:out,;进行新建,如果存在,从中读取数据并存入链表中. 主菜单放在一个while循环中,通过swicth进行选择相应选项。 函数
8、参数说明: int i, 用于菜单选择,不同的值对应不同的菜单 Int a, 用于记录载入的数据个数 Residence ,head,p1,,p2; 用于链表的创建,head是链表的头结点,p1,p2都是创建链表是的中间变量,起辅助传递作用. 函数流程图: 开始 ifstream inf(data.txt,ios:in); ofstream outf; N Y if(inf=0) cout数据文件不存在,将新建while(1) p1-loup1-danyuan. Y if(inf=0) N break; p2-next=p1; p2=p1; cout共载入a-1个数据endlzongjia=p
9、1-danjia,p1-mianji,来计算,减少用户的工作量。 保存数据上,用户每输入完一个房源信息就存储一个,使用的是这个语句:outfp1lou danyuan p1fangjian danjia p1-mianji chaoxianghuxing p1-zhuangtai p1renyuannext=NULL Y N break; p1=p1-next; p2=head; p1=new residence; p2-next=p1; cinp1-loup1-danyuan. outflou danyuan cinn; n!=0 图2-2 outf.close; 图2-2 ,3,、void
10、 del,residence *), 函数功能说明: 删除数据,并将删除后的数据保存在文件中 将楼号、单元号。房间号等信息存储在l、d、f三个变量中,在对查看每个节点时,if(p1-lou=l&p1-danyuan=d,p1-fangjian=f)进行判断。并且,通过判断i是否为零确定删除的数据的个数,如果i为零,提示没有改套房间。 数据保存与输入部分是一样的. 函数参数说明: residence ,head1:存储原链表的头指针 int l,d,f,n,i; l、d、f分别用于存储需要查询的房间的楼号、单元号、房间号,n用来判断是否结束修改操作返回主菜单,i用来判断是否删除成功。 resid
11、ence ,p1,,p2,中间的指针变量 函数流程图: p2=head; p1=head-next; 1 p1-lou=l&p1-danyuan=d&Y p1-fangjian=f p2-next=p1-next; N delete p1; p1-next=NULL Y N break; break; p2=p1; p1=p1-next; cinn; n!=0 p1=head; 1 p1=p1-next; outflou next=NULL (4,、void amend,residence , 函数功能说明: 修改数据,并将修改保存在文件中 查找房间所在链表的位置与删除函数是一样的。 提示用户
12、是按相应键以做相应修改,并且可以循环修改:cout相应按键为:楼号 1, 单元号 2, 房间号 3, 平米单价 4, 建筑面积 5,, 朝向 6, 户型 7, 售出状态 8, 业务员 9,退出 0endl, 当用户按0想要结束修改时,程序退出修改模块,进入存储模块,存储完毕提示cout修改已保存ldf; p2=head; p1=head-next; while(1) N p1-lou=l&p1-danyuan=d&p1-fangjian=f Y cini; switch (i) while(i!=0); Y p1-nexbreak; t=NULL N p1=p1-next; cinn; N Y
13、 n=0 break; 图2-4 ,5,、void display(residence ,), 函数功能说明: 查看所有房源信息,以列表的方式显示 函数参数说明: residence ,head1:存储原链表的头指针 residence ,p1,中间指针变量 函数流程图: p1=head-next; while(1) coutsetw(6)setiosflags(ios:left)lou; . Y p1-nextbreak; =NULL N p1=p1-next; 图2-5 (6)、void seek,residence ,), 函数功能说明:条件查询 实现的原理:将原链表进行复制,查询的时候
14、对复制链表进行查找,并把不符合条件的节点删除,这样一来剩下的就都是符合条件的节点,如果再次添加条件进行查找,仍旧执行这个操作,从而达到条件查询的目的。 其中,使用while,1,进行循环,if语句判断选择的是何种操作。 函数参数说明: residence ,head2, 存储原链表的头指针 int t, 用于选择查找条件 string s,存储提供的查询信息:朝向,户型, float m1,m2,q=0; m1,m2分别存储面积范围的左右边界,用于计算已售房源的总金额 residence ,p1,,p2,,p3,p4,*head, 除head存储新复制链表的头结点外,其他都是中间指针变量. 函
15、数流程图: head=new residence; p3=head; 1 Y break; p2-next=NULL N p1=new residence;p3-next=p1; p3-next=p1; 图2-6 p2=p2-next; 1 p2=head; p1=head-next; cint; N t=1 Y cins; 1 p1-chaoxiang=s coutsetw(6)setiosflags(ios:left)next; p2-next=p1-next; delete p3; N t=2 Y 图2-7 . cout返回主菜单; 2、编码 ASCII。数据也是存储在ASCII文件中,
16、文件名为:data.txt;可以随时查看数据。 3、测试 初始界面: 图3-1 输入数据: 图3-2 输入完成后重新打开程序: 图3-3 显示所有数据: 图34 删除数据: 图35 图3-6 修改数据: 图37 图38 查询数据: 图3-9 追加条件: 图310 程序的存在一个bug,按户型查询后,程序不能进入菜单,而是卡死。由于5个if语句中的循环代码是完全一样的,为什么在按户型查询时就出问题,有待解决。初步确定是链表尾结点赋值NULL出错,应属于编译系统的问题. 按户型 4-2查找,没问题: 图311 按户型41查找,出现错误: 图3-12 四、软件使用说明 1、开始 运行程序,显示主菜单
17、.左上角会有提示,显示数据载入的相应情况. 按相应数字键即可进入对应功能。 2、输入数据 输入分为两次,第一次包括:楼号、单元号、房间号、平米单价、建筑面积这5个信息;第二次是朝向、户型、售出状态,yes/no,、业务员(no/业务员姓名,共4个信息,第二次包括:朝向、户型、售出状态,yes/no)、业务员(no/业务员姓名,共4个信息,总价这信息程序会自行计算,用户无需输入. 输入完成一次后会提示是否继续:如果需要结束输入请按0,要继续请按1 用户输入的房源信息会与以前输入的信息放在同一个文件下,不会覆盖。数据时按时间顺序排列的。 3、删除数据 首先提示输入楼号、单元号、房间号,输入完成后即
18、开始查找删除.如果没有该房源,则会有相应提示。 4、修改数据 进入修改后,提示按相应键可进行相应修改。用户输入需要修改的房间位置信息,之后按相应的数字即可开始修改。可以修改所以数据。 5、显示所有数据 显示所有数据,按任意键返回主菜单。 6、条件查询 提供五总查询方式:朝向,1,户型,2,,建筑面积范围,3,,显示所有未售出房源,4,,查询已售出房源的业务员姓名、成交金额及总额,5,按相应数字进入查找。查找完成后如果想继续添加条件进行查找可继续按相应数字继续,也可按0退出返回菜单。 7、退出 按0即可. 五、课程设计心得与体会 这次课程设计让我受益匪浅。 学编程这么久,还是头一次写这么大的程序
19、。通过这个,也算体验到了程序设计的艰苦和团队合作的重要性,这也为以后做项目打了一些基础,而且积累了不少程序设计的经验呢。最后,得学习图形用户操作界面的设计了,dos界面确实不怎么好看,而且容易出现一些不必要的问题,比如多输入了一个数据该。 总而言之,Still have long way to go。 附录1:参考文献 1、C+程序设计 钱能 清华大学出版社 2、c+程序设计作者:谭浩强 出版时间2004年6月 附录2:程序清单 ,include #include fstream ,include using namespace std; struct residence/房源信息结构体 in
20、t lou,danyuan,fangjian; string chaoxiang,huxing; float danjia,mianji,zongjia; string zhuangtai,renyuan, residence *next; , int main() void input(residence ,/ok 输入函数 void del,residence ,),/ok 删除函数 void amend(residence *);/ok 修改函数 void display(residence *);/ok 显示所有信息 void seek(residence ,), /ok 条件查找函数
21、 / 函数定义完毕 int i, residence ,head,,p1,,p2, head=new residence; headnext=NULL; /打开文件进行,从文件进行输入,进入等待状态 ifstream inf(data。txt,ios:in, ofstream outf, if(inf=0, /文件不存在,新建 , cout数据文件不存在,将新建endl, inf。close, outf。open,data。txt,ios:out, outf.close; coutsuccessfull,p1-loup1danyuanp1fangjian, infp1danjiap1-mian
22、jip1zongjia; infp1chaoxiangp1huxingp1zhuangtaip1renyuan, if(inf=0) , break; delete p1;, p2-next=p1, p2=p1, , cout数据载入成功,endl,/文件载入完成 cout共载入a1个数据endlendl, , while,1,/菜单 , cout ,*,*,*,*,*欢迎使用小区楼盘销售管理程序,*,*, endl;/菜单 cout + + endl, cout + + endl; cout + + endl; cout要输入数据请按-1 + endl, cout要删除数据请按-2 + en
23、dl, cout + 要修改数据请按-3 + endl, cout要显示数据请按-4 + endl; cout + 要查询数据请按5 + endl; cout要退出请按-6 + endl; cout + + endl, cout + + endl, cout + + endl; cout *,*,*,*,*,*,欢迎使用小区楼盘销售管理程序*,*,*,*,endl, couti, switch(i, case 1: input(head); break, case 2: del(head,; break; case 3: amend,head,; break, case 4: display,
24、head), break; case 5: seek,head,; break, case 6: exit(1, break, , return 0; , void input,residence *head1,/ , ofstream outf,data。txt,ios:app);/打开文件,等待数据存储 residence ,p1,p2,*head, p1=head1, while ,1, if(p1-next=NULL, break, p1=p1next; head=p1, int n; p2=head; cout开始输入next=NULL, p2-next=p1; coutloup1d
25、anyuanp1-fangjian; cinp1danjiap1-mianji, p1zongjia=p1danjia,p1-mianji; cout请分别输入朝向、户型、售出状态,yes/no,、业务员,no/业务员姓名,共4个信息p1-chaoxiangp1huxingp1-zhuangtaip1-renyuan, outflou p1danyuan p1fangjian danjiamianji zongjia; outf p1chaoxiang huxing p1zhuangtai p1-renyuanendl; /输入数据的同时,将数据写入文件 cout如果需要结束输入请按0,要继续
26、请按1n; p2=p1, while,n,=0, outf.close, cout数据已保存,endl, , void del(residence * head,/ int l,d,f,n,i, residence *p1,p2; cout请输入您要删除的房间的位置信息:楼号,单元号,房间号ldf, do , if(headnext=NULL) cout没有数据next, while(1)/查找并删除数据 i=0; if,p1lou=l&,p1danyuan=d&,p1fangjian=f, , p2next=p1next, delete p1; i+;/删除操作 break, , if,p1
27、next=NULL) break, p2=p1, p1=p1next, , if,i,=0, cout删除成功endl, else cout没有该数据endl; cout如果需要结束输入请按0,要继续请按1n, while,n!=0,; ofstream outf(data。txt,ios:out,/重新存储数据 p1=head; if,p1next=NULL) cout数据已全部删除,next, outfp1-loudanyuan fangjiandanjia mianji p1zongjia, outfchaoxiang p1huxing zhuangtai p1renyuanendl;
28、if,p1-next=NULL) break; , outf.close; cout修改已保存endl, , void amend,residence *head,/ cout已进入修改,完成一次修改后可按0退出endl; int l,d,f,n,i; residence ,p1,p2, if,headnext=NULL) cout没有数据endl,return, cout相应按键为:楼号 1, 单元号 2, 房间号 3, 平米单价 4, 建筑面积 5,, 朝向 6, 户型 7, 售出状态 8, 业务员 9,退出 0endl; cout请输入您要修改的房间的位置信息:楼号,单元号,房间号df;
29、 while,1, , p2=head; p1=head-next; while (1) lou=l,p1danyuan=d,&p1-fangjian=f,/判断条件 if,p1- do cout请输入相应的数字i, switch (i) , case 1: cout新楼号,cinp1-lou;break; case 2: coutp1-danyuan;break, case 3: coutp1fangjian;break, case 4: coutzongjia=p1-danjia,p1-mianji,break, case 5: coutp1-mianji,p1-zongjia=p1-da
30、njia,p1mianji,break; case 6: coutp1chaoxiang;break; case 7: couthuxing,break, case 8: cout新售出状态;cinp1-zhuangtai,break, case 9: cout新业务员;cinp1renyuan,break; case 0: break; ,while,i!=0), /如果不符合条件,继续查找下一个 if,p1next=NULL) break; p2=p1; p1=p1next; , cout要结束修改吗,是:0,否:1n, if(n=0) break; ofstream outf(data。
31、txt,ios:out,;/数据存储 p1=head; if(p1-next=NULL, cout数据已全部删除,next; outflou p1danyuan p1-fangjian p1danjia p1mianji p1-zongjia, outf chaoxiang p1huxingzhuangtai p1renyuanendl, if(p1-next=NULL) break; , , outf.close, cout修改已保存endl, coutendl, void display(residence ,head,/显示数据/ /int i=1, if,headnext=NULL) ,cout没有数据endl,return;, cout所有房源信息:endlendl; cout楼号 单元号 房间号 平米单价 建筑面积 总价 朝向 户型 售出状态 业务员endl, residence ,p1; p1=headnext; while,1) coutsetw(6)setiosflags,ios:left,lou,/楼号 coutsetw(7)setiosflags(ios:left,danyuan,/单元号 coutsetw,7,setiosflags(
限制150内