资源描述
实 验 报 告
课程名称 程序设计实践(C++)
实验题目 高校水电费管理系统
实验仪器 计算机
系 别 计算机学院
专 业 计算机科学与技术
班级/学号
学生姓名
实验日期 2015-6-15
成 绩
指导教师
实验题目 高校水电费管理系统
一 、实验目的(10分)
面向对象程序设计实践课程设计是该课程集中实践性环节之一,是学习完《面向对象程序设计》课程后进行的一次全面的综合练习和实践。要求学生能够熟练掌握C++语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;能够利用所学的基础知识和技能,解决简单的面向对象程序设计问题,从而提高动手编程解决实际问题的能力,达到课程学习的目的和要求。
二、 需求分析 (20分)
2.1 环境分析
随着科学技术的发展,不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻的认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
而面对现今社会的发展,水电费管理系统是每一个高校管理机构对学校资源进行有效管理的不可或缺的一个管理信息系统,它的内容对于学校资源管理机构的管理者来说是至关重要的,该系统应该能够为资源管理机构的管理者提供有效的帮助,使之能够对有效信息进行快捷的整理和查询,大大的方便了管理机构的管理者的合理有效管理。
2.2 要求
具体要求:
(1)添加功能:程序能够添加不同学生和教工的记录,提供选择界面供用户选择所要添加的类别,要求编号号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:可根据姓名、用水量、用电量信息对已添加的学生或教工记录进行查询如果未找到,给出相应的提示信息;如果找到,则显示相应的记录信息。
(3)显示功能:可显示当前系统中所有学生或教工的记录,每条记录占据一行。
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除功能:主要实现对已添加的学生或教工记录进行删除。如果当前
系统中没有相应的记录则提示“记录为空”并返回操作。
(6)统计功能:能统计学生和教工的用水用电量、所要交
纳的电费和水费信息等。
(7)保存功能:可将当前系统中各类记录存入文件中,存入方式位“学生.txt”和“教师.txt”。
(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。
2.3运行环境
(1)Windows XP/Windows 7/Windows 8 等系统
(2)Visual C++ 6.0编译环境或VS 2013编译环境等
2.4 开发工具
C++语言
三、实验课时
24课时
四、 实验步骤(20分)
4.1 系统功能分析:
系统通过调用函数来实现教师、学生信息地录入、修改、删除、查询以及数据保存文件等功能。input()函数用于录入信息;output()函数用来输出信息;statistics()函数用来统计信息;compile()函数用来修改教师和学生的信息;add()函数用来添加新增信息;reading()函数用来读取已有的文件;show()函数用于显示所有已有的记录;deletes()函数用来删除教师和学生的信息;search()函数用来查询信息;saving()函数用于将输入的信息存入文件内;主函数main()用于调用这些函数。
4.2系统功能模块划分与设计:
本系统定义了College类、Teacher类、Student类、Student_message类以及Teacher_message这五个类,定义了input()、output()、statistics()、compile()、add()、reading()、show()、deletes()、search()、saving()等函数来实现系统所需功能。
4.3详细设计
1.基类College的设计:
class College //声明基类大学类
{
public: //公有数据成员
College(string nam = " ", string s = " ", int a = 0, int num = 0, double wat = 0.0,
double ele = 0.0, double powerf = 0.0, double waterf = 0.0) :
name(nam), sex(s), age(a), number(num), water(wat),
electric(ele), powerfare(powerf), waterfee(waterf){}; //定义构造函数
void input(); //声明输入函数
void output(); //声明输出函数
string getname(){ return name; } //获取姓名
int getage(){ return age; } //获取年龄
double getwater(){ return water; } //获取用水量
double geteletric(){ return electric; } //获取用电量
double getpowerfare(){ return powerfare; } //获取电费
double getwaterfee(){ return waterfee; } //获取水费
int getnumber(){ return number; } //获取编号
public: //公有类数据成员
string name; //姓名
string sex; //性别
int age; //年龄
int number; //编号
double water; //用水量
double electric; //用电量
double powerfare; //电费
double waterfee; //水费
};
2. 派生类Student类的设计
class Student : public College //公有继承基类
{
public: //公有数据成员
Student(string nam = " ", string s = " ", int a = 0, int num = 0,
double wat = 0.0, double ele = 0.0, double powerf = 0.0, double waterf = 0.0, string grad = " ") :
College(nam, s, a, num, wat, ele, powerf, waterf), grade(grad){} //定义学生类构造函数
void input(); //声明学生类输入函数
void output(); //声明学生类输出函数
public: //公有数据成员
string grade;
};
3. 派生类Teacher类的设计
class Teacher : public College //公有继承基类
{
public: //公用数据成员
Teacher(string nam = " ", string s = " ", int a = 0,
int num = 0, double wat = 0.0, double ele = 0.0,
double powerf = 0.0, double waterf = 0.0, string depart = " ") :
College(nam, s, a, num, wat, ele, powerf, waterf), department(depart){} //定义教师类构造函数
void input(); //声明教师类输入函数
void output(); //声明教师类输出函数
public:
string department;
};
4.Student_message类的设计
class Student_message //声明学生信息类
{
Student stu[capacity]; //学生数组
int amount; //当前的数据量
public:
Student_message(){ amount = 0; } //定义当前学生信息容量为0
void add(); //声明学生信息添加函数
void search(); //声明学生信息查询函数
void show(); //声明学生信息显示函数
void compile(); //声明学生信息编辑函数
void deletes(); //声明学生信息删除函数
void statistics(); //声明学生信息统计函数
void saving(); //声明学生信息保存函数
void reading(); //声明学生信息读取函数
};
5. Teacher_message类的设计
class Teacher_message //声明教师信息类
{
Teacher teach[capacity];
int amount; //定义当前数据数
public:
Teacher_message(){ amount = 0; } //初始记录数据数为0
void add(); //声明教师信息添加函数
void search(); //声明教师信息查询函数
void show(); //声明教师信息显示函数
void compile(); //声明教师信息编辑函数
void deletes(); //声明教师信息删除函数
void statistics(); //声明统计函数
void saving(); //声明教师信息保存函数
void reading(); //声明教师信息读取函数
};
五、实验心得(10分)
在课程设计刚开始时,我不清楚到底需要做什么,无从下手,因为这不是平时的实验,平时的实验都是有目的,有内容的,而此次的设计是需要自己去设计去实践的,没有什么东西,需要自己去一步一步实现,一步一步的写。后来,回想老师所讲的方法和技巧,开始有了目的,也有了思路。
首先,在确定我的设计题目之后,并且在对本题目进行分析的时候,我懂得了一个很重要的道理,那就是说一个程序的产生需要一个对题目要求有一个正确全面的分析。其次,就该考虑程序算法的问题了,一个好的算法是一个好程序的灵魂,也决定了一个程序的质量。
经过三个星期的设计和实践,虽然有些疲劳和困倦,但带给我很多的收获。C++已经学了一个学期了,有许多知识都存在似懂非懂的现象,后来这种现象通过实际的上机操作和实验,以及老师的讲解,同学的帮助,已经减少了许多。对这些知识也有了更深的理解和很好的掌握。同时也有很多理论上可以说得过去的代码,但到了实际操作的时候,却是行不通的。这种困惑,有许多已经通过实际
地操作解决了,并能够深刻地认识,但也有很多不是很清楚。后来,只能避过这些方法,转换策略实现。在课程设计之前,因为有了多次的综合实验的经验与教训,明白了写代码这一步是非常重要的,因为当你把代码输入电脑,并用编译器将其运行,发现通过不了,再来检查找出问题,这是一件非常辛苦的事情,也很浪费时间。于是在课程设计的时候,我先花了几天的时间来规划要写的代码,将要实现的内容分析清楚,才把代码输入电脑。这样就能够有效地降低了错误的几率,提高了写代码的效率,并且也减少了设计时的盲目性,无序性。
同时,这次的课程设计,让我充分的感觉到了自己要设计一个好的程序是多么的难和不容易,以及学习好C++是多么的重要。在这个程序的设计过程中,我清楚的意识到了自己的编程水平有多么的薄弱,课程的知识学得有多么的不扎实。在程序调试的时候系统总是在报错,还有很多警告,每增加一个函数就要调试好久,有时候因为少了一个大括号或是分号,要找很久很久。在完成课程设计的过程中,我发现运行后的界面非常的不好看,效果不是很好,有些数据之间没有分开,格式较拥挤,分辨不清各个数据所代表的含义。后来,对程序进行了修改和添补,有了一定的好转,加了一些必要的空格和符号,以及一些标识,使得程序的界面更加的友好、美观,更佳的适用。尽管系统后来可以正常地运行,也具有了一些基本的功能,但我还是意识到了自己有太多的不足。
但是呢,好在以后还会有很多的课程设计,我则一定要吸取这次的教训,把知识学懂学透学精,真正的为我所用,这样走上社会我才能真正的发挥所长。
六、 程序运行结果截图以及C++程序源代码(40分)
程序运行结果截图
1.开始运行界面截图:
2.退出主界面:
3.进入教师水电费管理系统:
4.添加功能:
5.查找功能:
6.修改功能:
7.读取显示功能:
8.添加、保存功能:
9.统计功能:
10.删除功能:
11.退出教师水电费管理系统:
注:学生水电费管理系统运行原理与教师水电费管理系统运行与原理一样。
程序源代码:
#include<iostream>
#include<string>
#include<fstream>
#include<iomanip>
const int capacity = 1500; //定义常变量数据容量为1500
using namespace std;
class College //声明基类大学类
{
public: //公有数据成员
College(string nam = " ", string s = " ", int a = 0, int num = 0, double wat = 0.0,
double ele = 0.0, double powerf = 0.0, double waterf = 0.0) :
name(nam), sex(s), age(a), number(num), water(wat),
electric(ele), powerfare(powerf), waterfee(waterf){}; //定义构造函数
void input(); //声明输入函数
void output(); //声明输出函数
string getname(){ return name; } //获取姓名
int getage(){ return age; } //获取年龄
double getwater(){ return water; } //获取用水量
double geteletric(){ return electric; } //获取用电量
double getpowerfare(){ return powerfare; } //获取电费
double getwaterfee(){ return waterfee; } //获取水费
int getnumber(){ return number; } //获取编号
public: //公有类数据成员
string name; //姓名
string sex; //性别
int age; //年龄
int number; //编号
double water; //用水量
double electric; //用电量
double powerfare; //电费
double waterfee; //水费
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Student : public College //公有继承基类
{
public: //公有数据成员
Student(string nam = " ", string s = " ", int a = 0, int num = 0,
double wat = 0.0, double ele = 0.0, double powerf = 0.0, double waterf = 0.0, string grad = " ") :
College(nam, s, a, num, wat, ele, powerf, waterf), grade(grad){} //定义学生类构造函数
void input(); //声明学生类输入函数
void output(); //声明学生类输出函数
public: //公有数据成员
string grade;
};
class Student_message //声明学生信息类
{
Student stu[capacity]; //学生数组
int amount; //当前的数据量
public:
Student_message(){ amount = 0; } //定义当前学生信息容量为0
void add(); //声明学生信息添加函数
void search(); //声明学生信息查询函数
void show(); //声明学生信息显示函数
void compile(); //声明学生信息编辑函数
void deletes(); //声明学生信息删除函数
void statistics(); //声明学生信息统计函数
void saving(); //声明学生信息保存函数
void reading(); //声明学生信息读取函数
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Student::input() //学生信息输入函数
{
cout << "请输入姓名:" << endl;
cin >> name;
int choice;
cout << "请选择性别(1.男,2.女):" << endl;
cin >> choice;
switch (choice)
{
case 1:sex = "男"; break;
case 2:sex = "女"; break;
default:cout << "输入错误!" << endl; break;
}
cout << "请输入年龄:" << endl;
cin >> age;
cout << "请输入班级:" << endl;
cin >> grade;
cout << "请输入学号:" << endl;
cin >> number;
cout << "请输入本月用水量:" << endl;
cin >> water;
cout << "请输入本月用电量:" << endl;
cin >> electric;
cout << "请输入水费:" << endl;
cin >> waterfee;
cout << "请输入电费:" << endl;
cin >> powerfare;
}
void Student::output() //学生信息输出函数
{
cout << "姓名:" << name << " "
<< "性别:" << sex << " "
<< "年龄:" << age << endl;
cout << "班级:" << grade << " "
<< "学号:" << number << " "
<< "用水量:" << water << endl;
cout << "用电量:" << electric << " "
<< "水费:" << waterfee << " "
<< "电费:" << powerfare
<< endl
<< endl;
}
void Student_message::add() //学生信息添加函数
{
if (amount >= capacity)
{
cout << "警告!用户已满!" << endl;
return;
}
Student stud;
cout << "请输入添加人员的信息" << endl;
stud.input();
for (int i = 0; i < amount; i++)
if (stud.getnumber() == stu[i].getnumber())
{
cout << "该编号人员已存在!" << endl;
return;
}
stu[amount] = stud;
amount = amount + 1;
cout << "添加成功!" << endl;
}
void Student_message::search() //学生信息查询函数
{
if (amount == 0)
{
cout << "当前没有人员记录!" << endl;
return;
}
int choice;
cout << "请选择查询方式:1.编号查找 2.姓名查找 3.用水量查找 4.用电量查找" << endl;
cin >> choice;
switch (choice)
{
case 1:
{
cout << "请输入要查询的编号:" << endl;
int number;
cin >> number;
cout << "姓名" << " "
<< "性别" << " "
<< "年龄" << " "
<< "班级" << " "
<< "学号" << setw(10)
<< "用水量" << setw(10)
<< "用电量" << setw(10)
<< "水费" << setw(10)
<< "电费"
<< endl
<< endl;
for (int i = 0; i < amount; i++)
{
if (stu[i].getnumber() == number)
{
stu[i].output();
}
}
return;
cout << "此人不存在!" << endl;
}break;
case 2:
{
cout << "请输入要查询的姓名:" << endl;
string name;
cin >> name;
cout << "姓名" << " "
<< "性别" << " "
<< "年龄" << " "
<< "班级" << " "
<< "学号" << setw(10)
<< "用水量" << setw(10)
<< "用电量" << setw(10)
<< "水费" << setw(10)
<< "电费"
<< endl
<< endl;
for (int i = 0; i < amount; i++)
{
if (stu[i].getname() == name)
{
stu[i].output();
}
}
return;
cout << "此人不存在!" << endl;
}break;
case 3:
{
cout << "请输入要查询的用水量:" << endl;
double water;
cin >> water;
cout << "姓名" << " "
<< "性别" << " "
<< "年龄" << " "
<< "班级" << " "
<< "学号" << setw(10)
<< "用水量" << setw(10)
<< "用电量" << setw(10)
<< "水费" << setw(10)
<< "电费"
<< endl
<< endl;
for (int i = 0; i < amount; i++)
{
if (stu[i].getwater() == water)
{
stu[i].output();
}
}
return;
cout << "此人不存在!" << endl;
}break;
case 4:
{
cout << "请输入要查询的用电量:" << endl;
double electric;
cin >> electric;
cout << "姓名" << " "
<< "性别" << " "
<< "年龄" << " "
<< "班级" << " "
<< "学号" << setw(10)
<< "用水量" << setw(10)
<< "用电量" << setw(10)
<< "水费" << setw(10)
<< "电费"
<< endl
<< endl;
for (int i = 0; i < amount; i++)
{
if (stu[i].geteletric() == electric)
{
stu[i].output();
}
}
return;
cout << "此人不存在!" << endl;
}break;
default:cout << "无此选项,请重试!" << endl; break;
}
}
void Student_message::show() //学生信息显示函数
{
if (amount == 0)
{
cout << "没有数据!" << endl;
return;
}
cout << "姓名" << " "
<< "性别" << " "
<< "年龄" << " "
<< "班级" << " "
<< "学号" << setw(10)
<< "用水量" << setw(10)
<< "用电量" << setw(10)
<< "水费" << setw(10)
<< "电费"
<< endl
<< endl;
for (int i = 0; i < amount; i++)
{
stu[i].output();
}
}
void Student_message::compile() //学生信息编辑函数
{
if (amount == 0)
{
cout << "当前没有人员记录!" << endl;
return;
}
int num;
cout << "请输入要查找的编号:" << endl;
cin >> num;
for (int i = 0; i < amount; i++)
{
if (stu[i].getnumber() == num)
{
cout << "请输入修改的信息" << endl;
stu[i].input();
cout << "修改成功!" << endl;
return;
}
}
cout << "查无此人!" << endl;
}
void Student_message::deletes() //学生信息删除函数
{
if (amount == 0)
{
cout << "当前没有人员记录!" << endl;
return;
}
cout << "请输入您的选择:" << endl;
cout << "1.编号查找删除 2.姓名查找删除" << endl;
int choice;
cin >> choice;
switch (choice)
{
case 1:
{
cout << "请输入编号:" << endl;
int num;
cin >> num;
for (int i = 0; i < amount; i++)
{
if (num == stu[i].number)
{
cout << "是否删除?" << endl;
cout << "1.是 2.否" << endl;
int choice1;
cin >> choice1;
switch (choice1)
{
case 1:
{
for (int k = i; k < amount - 1; k++)
stu[k] = stu[k + 1];
cout << "删除成功!" << endl;
amount--;
}; break;
case 2:return;
default:cout << "不存在此选项!" << endl; break;
}return;
}
}
cout << "不存在此人!" << endl;
}; break;
case 2:
{
cout << "请输入姓名:" << endl;
string name;
cin >> name;
for (int i = 0; i < amount; i++)
{
if (name == stu[i].name)
{
cout << "是否删除?" << endl;
cout << "1.是 2.否 " << endl;
int choice2;
cin >> choice2;
switch (choice2)
{
case 1:
{
for (int k = i; k < amount - 1; k++)
stu[k] = stu[k + 1];
cout << "删除成功!" << endl;
amount--;
}; break;
case 2:return;
default:cout << "无此项,失败!" << endl; break;
}return;
}
}
cout << "无此人!" << endl;
}; break;
default:cout << "没有此选项,失败!" << endl; break;
}
}
void Student_message::statistics() //统计函数
{
cout << "1.学生用水总量和用电总量 2.学生总的水电费" << endl;
int choice;
cout << "请选择您的选项:" << endl;
cin >> choice;
switch (choice)
{
case 1:
{
double all_water = 0.0, all_electric = 0.0;
for (int i = 0; i < amount; i++)
{
all_water += stu[i].water;
all_electric += stu[i].electric;
}
cout << "学生总用水量为:" << all_water << endl;
cout << "学生总用电量为:" << all_electric << endl;
}break;
case 2:
{
double all_waterfare = 0.0, all_powerfee = 0.0;
for (int i = 0; i < amount
展开阅读全文