面向对象课程设计报告
重庆科技学院
《面向对象程序设计》
课程设计报告
学 院:_电气与信息工程学院_ 专业班级: 计科12-5班
学生姓名: 郑鹏 学 号: 2012442081
设计地点(单位)________计算机自主学习中心 ________ __
设计题目:________ 高校水电费管理系统___________ _____
完成日期: 2014 年1月10日
指导教师评语: ______________________ _________________
__________________________________________________________________________________
__________________________________________________________________________________
成绩(五级记分制):______ __________
指导教师(签字):
重庆科技学院
课程设计任务书
设计题目:高校水电费管理系统设计
2013年12月12日
摘 要
本设计是用编译器VC++完成的一个高校水电费管理系统,该高校水电费管理系统主要是实现对住宿学生和教职工的信息进行统计和对他们的各项数据进行处理。用户可以根据选择界面进行选择进行不同的工作,有添加、查询、显示、编辑、删除、统计,计算功能。每个功能的实现都用到链表。在每一个功能的实现上,都运用到文件的读取或写入,这样保证了信息的实时更新。
关键字:类 键表 水电费管理系统 文件
目 录
摘 要 . .................................................................................................................................. 4
第一章 软件需求分析说明书 . ........................................................................................ 6
1.1 软件功能 . .............................................................................................................. 6
1.2 界面要求 . .............................................................................................................. 6
1.3 数据结构要求 . ...................................................................................................... 7
第二章 系统分析与设计 . ................................................................................................ 8
2.1 软件界面设计 . ...................................................................................................... 8
2.2 软件的数据(结构)设计 . ................................................................................ 15
2.3 软件的算法设计 . ................................................................................................ 16
第三章 软件的实现 . ...................................................................................................... 19
3.1文件读取 . ............................................................................................................. 19
3.2文件写入 . ............................................................................................................. 20
第四章 软件测试 . ............................................................................................................ 21
4.1 添加功能测试 . .................................................................................................. 21
4.2 查询功能测试 . .................................................................................................. 21
4.3 显示功能测试 . .................................................................................................. 22
4.4 编辑功能测试 . .................................................................................................. 22
4.5 删除功能测试 . .................................................................................................. 22
4.6 统计功能测试 . .................................................................................................. 23
4.7 计算功能测试 . .................................................................................................. 23
第五章 软件使用说明书 . ................................................................................................ 24
致 谢 . ................................................................................................................................ 25
参考文献 . .......................................................................................................................... 26
第一章 软件需求分析说明书
1.1 软件功能
(1)添加功能:程序能够添加不同学生和教工的记录,提供选择界面供用户选择所要添加的类别,由于编号的唯一性,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。界面提示按任意键继续,然后选择添加项,也可以放弃退出添加工作。对于添加的时候对输入的数据的要求是string 、string 、string 、int 、string 、int 、int 的顺序。
(2)查询功能:可根据姓名、用水量、用电量信息对已添加的学生或教工记录进行查询,如果未找到,界面会给出相应的提示信息。
(3)显示功能:可显示当前系统中所有学生和教工的记录,每条记录占据一行。在显示的时候用户可以选择显示的对象学生或员工。
(4)编辑功能:可根据查询结果对相应的学生记录或教工记录进行修改,修改时由于编号的唯一性。修改时需要对一个对象学生或员工的信息重新录入,类似添加过程,注意要修改的项的输入。
(5)删除功能:主要实现对已添加的学生或教工记录进行删除,可以通过姓名和学号或教工号进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”界面会有相应的提示并返回操作。
(6)统计功能:能根据多种参数进行统计。能统计学生和教工的用水用电量、所要交纳的电费和水费等。。
(7)计算电费和水费。学生每月都有一定额度的水电是免费使用的,超过的部分需要交费。在计算所要缴纳的电费或水费的时候界面上会提示要输入学校免费提供的水量或电量。然后就会计算得到并在屏幕上显示出需要缴纳的学生或教工的信息和需缴纳的费用。
1.2 界面要求
主界面上显示所有的功能选择,选择进入每一个功能后,界面上显示该功能选项和退出选项。
1.3 数据结构要求
该软件主要借助类实现数据存储,传输,修改并写入文件。stu 为基类,student 为学生类,stuff 为教工类都继承了stu 类,person 类里面有链表list、list作为成员,以实现学生和教工共同管理。
重庆科技学院《面向对象程序设计》课程设计报告
第二章 系统分析与设计
2.1 软件界面设计
图2-1 首界面
该主界面的功能主要是提供给用户选择自己所要实现的功能,输入功能前面的序号,则选择成功。如:输入“1”,进入到添加功能。
图2-2 添加功能界面
该添加界面主要功能是提供给用户选择所要添加的对象或退出添加功能,如输入“1”,进入到添加学生项,输入“3”, 回到主界面及退出添加项。
图2-3学生信息录入界面
现信息录入错误。 该学生信息录入界面的主要功能是供给用户一个提示信息,以便添加学生的时候出
图2-4 教工信息录入界面
重庆科技学院《面向对象程序设计》课程设计报告
该教工信息录入界面的主要功能是供给用户一个提示信息,以便添加教工的时候出现信息录入错误。
图2-5 添加结果反馈界面一
加人员已经存在。
该反馈界面的主要功能是对用户添加完毕后的结果的一种反馈,提示添加失败,添
图2-6 添加结果反馈界面二
该反馈界面的主要功能是对用户添加完毕后的结果的一种反馈,提示添加成功。
图 2 -7 查询功能界面
该查询界面主要功能是提供给用户选择所要查询的对象或退出查询功能,如输入“1”,进入到查询学生项,输入“3”, 回到主界面及退出添加项。
图 2-8查询学生方式选择界面
该界面的主要功能是提供给用户一个查询方式选择提示,如输入“1”, 进入到姓名查找项,输入“3”,回到查询界面。
图 2-9 姓名查询学生结果信息反馈界面一
xiafusen ,存在名字为xiafusen 的学生,所以输入,如果出现同名,将都会输出。
该界面的主要功能是将用户查询到学生的结果反馈给用户。如输入的为:
图 2-10 姓名查询学生结果信息反馈界面二
重庆科技学院《面向对象程序设计》课程设计报告
该界面的主要功能是将用户查询到学生的结果反馈给用户。如输入为:jjjj ,不存在名为jjjj 的学生,提示没有。
图 2-11 学号查询学生结果信息反馈界面一
该界面的主要功能是将用户查询到学生的结果反馈给用户。如输入的学号为:2011442043 ,存在学号为2011442043的学生,所以输入。
图 2-12 学号查询学生结果信息反馈界面二
该界面的主要功能是将用户查询到学生的结果反馈给用户。如输入学号为2000,不存在学号为2000
的学生,提示没有。
图 2-13查询教工方式选择界面
该界面的主要功能是提供给用户一个查询方式选择提示,如输入“1”进入到姓名查找项,输入“3”,回到查询界面。
图 2-14名字查询教工结果信息反馈界面一
该界面的主要功能是将用户查询到教工的结果反馈给用户。如输入的教工名为:xiafusen ,存在名字为xiafusen 的教工,所以输入,如果出现同名,将都会输出。
图 2.1-15名字查询教工结果信息反馈界面二
该界面的主要功能是将用户查询到教工的结果反馈给用户。如输入的教工名为:jjjj ,不存在名字为jjjj 的教工,提示无。
重庆科技学院《面向对象程序设计》课程设计报告
图 2-16
教工号查询教工结果信息反馈界面一
该界面的主要功能是将用户查询到教工的结果反馈给用户。如输入的教工号为:2011442043 ,存在学号为2011442043的教工,所以输入。
图 2-17教工号查询教工结果信息反馈界面二
该界面的主要功能是将用户查询到教工的结果反馈给用户。如输入教工号为2000,不存在教工号为2000的教工,提示没有。
图2-18 编辑功能界面
该界面主要功能是给用户提供选择编辑对象,如输入“
1”, 进入到编辑学生项,输入“3”,回到主界面。
图2-19 提示输入需编辑学生学号界面
该界面主要功能是提示用户输入要编辑的学生的学号,学号具有唯一性。
图2-20
编辑结果信息反馈界面
该界面主要功能是给用户返回编辑完成后的提示和编辑教工完成后的提示界面相同。
图2-21 提示输入需编辑的教工的教工号界面
该界面主要功能是提示用户输入要编辑的教工的教工号,教工号具有唯一性。
重庆科技学院《面向对象程序设计》课程设计报告
图2-22
显示功能界面
该添加界面主要功能是提供给用户选择所要显示的对象或退出显示功能,如输入“1”,进入到显示学生项,输入“3”, 回到主界面及退出显示功能项。
图2-23 学生信息展示界面
该界面的主要功能是把所有的学生的信息,展现给用户。
图2-24 教工信息展示界面
该界面的主要功能是把所有的教工的信息,展现给用户。
图2-25 删除功能界面
该界面主要功能是给用户提供选择删除对象,如输入“1”, 进入到删除学生项,输入“3”,回到主界面及退出删除功能项。
图 2-26 删除学生成功提示界面
该界面主要功能就是向用户反馈删除的对象(学生)成功。
图 2-27 删除学生不存在提示界面
该界面主要功能就是向用户反馈删除对象(学生)不存在,删除失败。需要重新输入。
图 2-28 删除教工成功提示界面
该界面主要功能就是向用户反馈删除的对象(教工)成功。
图2-29 删除教工不存在提示界面
该界面主要功能就是向用户反馈删除对象(教工)不存在,删除失败。 需要重新输入。
图2-30 统计功能界面
该界面主要功能是给用户提供选择统计对象,如输入“
1”, 进入到统计学生项,输入“3”,回到主界面及退出统计功能项。
图2-31 统计学生类别选择界面
该界面主要是为用户提供选择统计水费(水量)或电费(电量)。如输入“1”,进入统计水费(水量)统计(水三元一吨)。
图 2-32 统计教工类别选择界面
该界面主要是为用户提供选择统计水费(水量)或电费(电量)。如输入“2”,进入统计电费(电量)统计(电一元一度)。
图2-33 计算功能界面
该界面主要功能是给用户提供选择计算对象,如输入“
1”, 进入到计算学生项,输入“3”,回到主界面及退出计算功能项。
图2-34 选择统计对象界面
该界面主要是为用户提示选择输入要计算的对象,如输入“1”,进入计算水费项(计算学生和计算教工该界面相同)。
图2-35 计算学生结果显示界面
同,文字提示有小小变化。这里需要用户自定义最大免费水量(或电量)。
该界面主要是为用户展示出需缴纳水费的学生的某一部分信息。计算电费时界面相
图 2-36 计算教工结果显示界面
该界面主要是为用户展示出需缴纳电费的教工的某一部分信息。计算水费时界面相同,文字提示有小小变化。这里需要用户自定义最大免费电量(或水量)。
2.2 软件的数据(结构)设计
该软件使用的文件有xia01.txt ,和xia02.txt 两个,文件xia01.txt 是用来存储所有学
生信息,xi02.txt 是用来存储所有的教工的信息,两个文件里面的存储的数据类型都是一样的,每一行存储一个人(学生或教工)的信息,分别为名字,性别,学号(教工号),年龄,用水量,用电量。数据类型分别为string ,string ,string ,int ,string ,int ,int 。
图2-37 总设计流程图
图 2-38 添加功能流程图 图2-39 查询功能流程图
图2-40 编辑功能流程图 图2-41 显示功能流程图
图2-42 删除功能流程图
图2-43
统计功能流程图
图2-45 计算功能流程图
第三章 软件的实现
对于该软件的实现,最为核心的部分就是关于文件的读取与写入,以下是对该两部分的详细分析:
3.1文件读取
ifstream fin01("xia01.txt");
//读取方式打开存储学生信息的文件xia01.txt
ifstream fin02("xia02.txt");
//读取方式打开存储教工信息的文件xia02.txt string xue;string yuan;
{
list arr1;//定义一个学生类的链表 people H;//定义一个管理学生和教工的对象
istringstream strin(xue); string s1,s2,s3,s4; int n1,n2,n3;
strin>>s1;strin>>s2;strin>>s3;strin>>n1;strin>>s4;strin>>n2;strin>>n3; //分解字符串,得到每一条具体信息 student stu1;//定义一个学生对象 stu1.set_name(s1);stu1.set_sex(s2); stu1.set_studentnumber(s3);stu1.set_age(n1);
stu1.set_studentadd(s4);stu1.set_ele(n2);stu1.set_water(n3);
stu1.set_elefee(n3*1);stu1.set_waterfee(n2*3);//完成学生对象信息存储 arr1.push_back(stu1); //将一个学生对象整体压入链表} H.set_arr1(arr1);//将所有的学生信息存入管理对象中 fin01.close();//关闭文件
while(getline(fin02, yuan)) //将一个学教工的信息读入到一个字符串当中 {
istringstream strin(yuan);string s1,s2,s3,s4;int n1,n2,n3; //分解字符串,得到每一条具体信息
list arr2;//定义一个教工类的链表
while(getline(fin01, xue))//将一个学生的信息读入到一个字符串当中
//循环结束完成所有学生信息提取
strin>>s1;strin>>s2;strin>>s3;strin>>n1;strin>>s4;strin>>n2;strin>>n3;
stuff stu2; //定义一个教工对象
stu2.set_name(s1);stu2.set_sex(s2); stu2.set_stuffnumber(s3);stu2.set_age(n1);
stu2.set_stuffadd(s4);stu2.set_ele(n2);stu2.set_water(n3);
stu2.set_elefee(n3*1);stu2.set_waterfee(n2*3);//完成教工对象信息存储 arr2.push_back(stu2); //将一个教工对象整体压入链表 }
//循环结束完成所有教工信息提取
H.set_arr2(arr2); //将所有的教工信息存入管理对象中fin02.close();//关闭文件
3.2文件写入
ofstream fin01("Xia01.txt");
//以写入的方式打开存储学生信息文件xia01.txt
list::const_iterator iter;
for (iter = ss1.begin(); iter != ss1.end(); ++iter)
{fin01get_name()get_sex()
//定义一个指向学生链表的指针
"get_studentnumber()get_age()
"get_studentadd()get_water()get_ele()
//将信息存储在链表中的第一个学生开始到最后一个学生,将每一个学生信息写入文件
fin01.close();//关闭文件
//以写入的方式打开存储教工信息文件xia02.txt
list::const_iterator iter1;
for (iter1 = ss2.begin(); iter1 != ss2.end(); ++iter1)
{fin01get_name()get_sex()
//定义一个指向教工链表的指针 ofstream fin02("Xia02.txt");
"get_stuffnumber()get_age()
"get_stuffadd()get_water()get_ele()
//将信息存储在链表中的第一个教工开始到最后一个教工,将每一个教工信息写入文件
fin02.close();//关闭文件
第四章 软件测试
本软件能实现的功能有添加,查询,编辑,显示、删除、统计。计算等功能。其核心是几个函数,其测试如下:
4.1 添加功能测试
用例1:input: 1 output: 请输入添加学生信息
用例2:input: 2 output: 请输入添加教工信息
用例3:input: 3 output: 返回主界面
用例4:input: 2011442043(学号)
output: 添加失败,已存在,按任意键继续
用例5:input: 2011442044(学号)
output: 添加成功,请按任意键继续
用例6:input: 2012442043(教工号)
output: 添加失败,已存在,按任意键继续
用例7:input: 2012442044教工号)
output: 添加成功,按任意键继续
4.2 查询功能测试
用例1:input: 1 output: 请输入查找方式
用例2:input: 2 output: 请输入查找方式
用例3:input: 3 output: 返回主界面
用例4:input: 1 output: 请输入学生姓名
用例5:input: 2 output: 请输入学生学号
用例6:input: 1 output: 请输入教工姓名
用例7:input: 1 output: 请输入教工教工号
用例8:input: 3 output: 返回查询对象界面
用例9:input: xia
output: 显示该名字学生(教工)信息,按任意键继续
用例10:input: 2011442043
output: 显示学号为2011442043的学生的所有信息按任意键继续。
用例11:input: love
output: 没有你查询的这个人,按任意键继续请输入添加学生信息
4.3 显示功能测试
用例1:input: 1 output: 显示所有学生信息,按任意键继续
用例2:input: 2 output: 显示所有教工信息,按任意键继续
用例3:input: 3 output: 返回主界面
4.4 编辑功能测试
用例1:input: 1 output: 显示所有学生信息,提示输入学号
用例2:input: 2 output: 显示所有教工信息,提示输入教工号
用例3:input: 3 output: 返回主界面
用例4:input: 2011442043(学号/教工号)
output: 按任意键继续
用例5:input: 一个学生的所有信息
output:编辑成功,按任意键继续
用例6:input: 2012442043 output: 按任意键继续
用例7:input: 任意键 output: 无该学生记录
4.5 删除功能测试
用例1:input: 1
output: 显示所有学生信息,提示输入要删除学生学号
用例2:input: 2
output: 显示所有教工信息,提示输入要删除教工教工号
用例3:input: 3 output: 返回主界面
用例4:input: 2012442043
output: 没有你输入的学号的学生,提示重新输入
用例5:input: 2011442043
output: 删除成功,按任意键继续
用例6:input: 3 output: 返回选择删除对象界面
4.6 统计功能测试
用例1:input: 1 output:选择统计水量(水费)或电量(电费)
用例2:input: 2 output:选择统计水量(水费)或电量(电费)
用例3:input: 3 output: 返回主界面
用例4:input: 1 output:学生总的用水用电量,任意键继续
用例5:input: 2 output:教工总的用水用电量,任意键继续
4.7 计算功能测试
用例1:input: 1 output:选择计算水费或电费
用例2:input: 2 output:选择计算水费或电费
用例3:input: 3 output: 返回主界面
用例4:input: 15(免费提供的水量)
output:计算出需要交纳的水费的学生或教工,输出在屏幕
用例5:input: 25(免费提供的电量)
output:计算出需要交纳的电费的学生或教工,输出在屏幕
第五章 软件使用说明书
该软件主要就是有添加、查询、显示、编辑、删除、统计、计算等功能。每个功能的使用方法以及注意事项如下:
(1)添加功能:主页面提示输入“1”选择添加功能,添加功能分为添加学生和添加教工两类,界面上有相应的提示,1::添加学生;2:添加教工。,添加时要求编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加按任意键返回操作。
(2)查询功能:主页面提示输入“2”选择查询功能,查询功能分为查询学生和查询教工两类,界面上有相应的提示,1:查询学生;2:查询教工。查询时可根据姓名、用水量或用电量信息对已添加的学生或教工记录进行查询,如果未找到,给出相应的提示信息并按任意键返回操作,如果找到,则显示相应的记录信息并按任意键返回操作。
(3)编辑功能:主页面提示输入“3”选择编辑功能,编辑功能分编辑学生和编辑教工两类,界面上有相应的提示,1:编辑学生;2:编辑教工,修改时建立在你查询结果上对记录进行修改的,修改时注意编号的唯一性。修改完成后按任意键返回操作。
(4)显示功能:主页面上有相应的提示输入“4”选择显示功能,显示功能分为显示学生和显示教工两类,界面上有相应的提示,1:显示学生:可显示当前系统中所有学生的记录,每条记录占据一行,按任意键返回操作;2:显示教工:可显示当前系统中所有教工的记录,每条记录占据一行,按任意键返回操作。
(5)删除功能:界面上有相应的提示输入“5”选择删除功能,删除功能分为删除学生和删除教工两类,界面上有相应的提示,1:删除学生:主要实现对已添加的学生进行删除2:删除教工,主要实现对已添加的教工记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并按任意键返回操作。
(6)统计功能:界面上有相应的提示输入“6”选择统计功能能,统计功能分为统计学生和统计教工两类,界面上有相应的提示,1:统计学生;2:统计教工。能统计学生和教工的用水用电量、所要交纳的电费和水费等。
(7)计算功能:界面上有相应的提示输入“7”选择计算功能,计算功能分为计算学生和计算教工两类,界面上有相应的提示,1:计算学生;2:计算教工;学生每月都有一定额度的水电是免费使用的,超过的部分需要交费。所以在计算时需要用户临时定义一个免费水(电)量。
(8)退出:界面上有相应的提示输入“8”退出。
致 谢
通过这次课程设计,使我得到一次用所学专业知识、专业技能分析和解决问题的系统锻炼,也使我在综合知识的选用方面,在应用软件开发的基本思想与方法方面,以及在常用编程思路技巧的掌握方面都向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。在课程设计中,我学到了很多东西。我们得到了多位指导老师耐心的教导,仔细的讲解,让我们对所学知识有了更进一步的认识,也使自身的综合运用水平得到了一定程度上的提高。非常感谢陈各位指导老师的辛勤工作和对我们孜孜不倦的教诲。同时也感谢我的同学,感谢他们对我的帮助,让我明白团队合作的重要性,同时我还想说在论文完成过程中,我同样遇到了许许多多的麻烦,在老师和同学的帮助下最终的完成了这个报告,我相信在没有你们这些人的帮助下,我在这个过程中一定不会走得那么轻松的,在这里对你们说一声“辛苦了”并表达我深深谢意。
签名 夏福森
日期 2013 1 11
参考文献
[1]Richard Johnsonbaugh. Martin Kalin.《面向对象程序设计—C++语言描述》. 机械工业出版社.2009年
[2]钱能. 《C++语言程序设计教程》. 清华大学出版社.2005年