1、 JINGCHU UNIVERSITY OF TECHNOLOGY 课程设计成果 学院:_计算机工程学院_____ 班 级: _计算机科学与技术(一) 学生姓名: 姜桥学 号:2009404010121 设计地点(单位)___ A5 -101___________ ____________ 设计题目:___ 电煤气管理系统___________________________ 完成日期: 2012 年1月 5 日 指导教师评语: _______________________________________ _________
2、 _ 成绩(五级记分制):______ __________ 教师签名:_________________________ 目 录 一.课程设计目
3、的和要求…………………………………… 2 二.课题分析 …………………………………… 2 三.设计…………………………………… 2-3 1。设计思想 2。设计分析 四.主程序……………………………………3—19 五.结果显示及分析…………………………………19—21 六.感想、收获及体会……………………………………21 七.参考文献……………………………………22 附录……………………………………22 一. 课程设计目的和要求 问题描述:设计一个水电管理信息系统,能够对高校的水电费用进行管理,包括了登记费用,查询费用,以及住户信息管理等。在设计时要考虑
4、到学生和教工在用水电时的不同,学生可以免费使用一定额度的水电,超过这个额度的随便以后必须自费使用,且自费部分水电费的价格标准要高于教工的收费标准(主要是节约资源). 基本要求: 实现对用户信息的录入 实现水电煤气数据的录入 计算并查询用户应缴费用 查询未缴纳费用名单 测试数据:可选用小区物业管理部门的数据,也可采用手工输入不少于10个用户信息的数据。 实现提示:用户基本信息类,教工用户信息类,学生用户信息类,收费标准类,该类存储水电煤气标准单位的收费标准,如:煤气,1。0元/立方米; 不同类型人员水、电、煤气信息类,这些类可以包括水表,电表,煤气表ID,抄表时间,上次抄表时间,
5、本次抄表时间,上次抄表度数,本次抄表度数,本次使用度数,费用,是否缴费标记等信息.在实现的时候考虑继承和多态技术的合理使用. 二.课题分析: 本程序是一个水电气管理信息系统,能够对高校的水电气费用进行管理,包括了成员基本信息,如学号、编号、姓名、成员水电气的用量;程序的用途包括缴纳水电气费、查询一个同学水电气费用量”、查看所有同学的缴费情况、增加学生信息、删除学生信息、退出系统等。在设计时也考虑到学生和教师在用水电气时的不同,学生可以免费使用一定额度的水电气,超过这个额度的以后必须付费,且付费部分水电气费的价格要高于教工的收费标准,该措施的实行是为了鼓励同学们节约用水,以免造成不必要的资源
6、浪费。该软件主要是为了学校的管理人员提供便捷,以更快的完成水电气费用的收缴. 三. 设计 1.设计思想: 设计面向对象的程序设计语言,首先考虑的肯定是要设计类.程序设计了四个类,两个是学生类,两个是教师类.在主函数中用动态数组,机动的分配类存,以至于不造成类存的浪费.在本程序中涉及用户的选择,用户要根据自己的实际需要选择不同的功能,由于选择的多样性,程序中必须要有switch结构控制各个功能的选择,如果需要多次进行操作,则要在switch结构的外部,通过循环来实现.首先该程序的第一目的是要读附录里的内容,然后再根据用户的选项来实现各种不同的功能,当正确按照要求就可进行更进一步进行操作,直
7、到你达到自己的目的为止。本程序通过调用不同的函数来实现不同的功能,通过用户自己的选择可以自己进行操作,在主函数中申明的函数分别起到不同的作用,在本程序中所有的子函数都是在主函数外实现的.在子函数的函数体中为了使程序的功能和细节更加的完善,在子函数中设置菜单,这样不仅使得程序更加完善还有利于用户的操作。使得程序更加简洁明了。 2.设计分析: 在这个电煤气管理系统中,共用到了四个类,一个是stut类,它起的作用是把水电煤气的用量和每个人的缴费信息结合在一起,还有赋值运算符重载、插入运算符重载,最重要的就是那些对象都有共同的属性,通过这个类把学号、姓名、水用量、电用量、气用量集中到一起,所以才能
8、设计一个类;另一个类就是arrayofStu 学生类计算类,这个类的作用主要就是一些功能的实现,有主菜单、交费菜单、交费功能和、查询菜单、查询功能、增加功能、删除菜单、删除功能、查看功能。同样定义一个teacher它起的作用是把水电煤气的用量和每个人的缴费信息结合在一起,还有赋值运算符重载、插入运算符重载,最重要的就是那些对象都有共同的属性,通过这个类把姓名、水用量、电用量、气用量集中到一起,所以才能设计一个类;其另一个类就是arrayofTeacher老师类数组计算,这个类的作用主要就是一些功能的实现,有主菜单、交费菜单、交费功能和、查询菜单、查询功能、增加功能、删除菜单、删除功能、查看功
9、能 四.主程序 #include ”iostream" #include”string” #include”fstream” #include”iomanip" using namespace std; int count1=0,count11=0; //学生总数和交钱的人数 int count2=0,count22=0; class Stu { public: Stu(double xwater=0,double xpower=0,double xgas=0,string xnum="a”,string xna=”a”); //学生类构造函数 void
10、 operator =(Stu S); //赋值运算符重载
friend ostream &operator 〈〈(ostream & a,Stu &S) //插入运算符重载
{ a〈 11、
a〈〈setw(8)<〈left〈 12、用
double water,power,gas,water_rate,circuit,gas_rate,total;
int flag;
string number,name;
};
Stu::Stu(double xwater,double xpower,double xgas,string xnum,string xna) //学生类构造函数
{
water=xwater;
power=xpower;
gas=xgas;
number=xnum;
name=xna;
fl 13、ag=0;
}
void Stu::operator =(Stu S) //赋值运算符重载
{
name=S.name;
number=S.number;
water=S.water;
power=S.power;
gas=S。gas;
}
double Stu::SGetW( ) //计算水费
{
if(water〈10)
water_rate=0;
else
water_rate=4。2*(water—10);
return water_rate;
}
doubl 14、e Stu::SGetC() //计算电费
{
if(power<10)
circuit=0;
else
circuit=0。6*(power-10);
return circuit;
}
double Stu::SGetG() //计算煤气费
{
if(gas<10)
gas_rate=0;
else
gas_rate=2。3*(gas-10);
return gas_rate;
}
double Stu::Stotal() //计算总的钱
{
total=SGe 15、tG()+SGetW()+SGetC();
return total;
}
class arrayofStu //学生类计算
{
public:
arrayofStu(int sz=1) {size=sz; student=new Stu[size];} //构造函数
~arrayofStu() { delete [] student; }
void xuesheng(); //学生用户主菜单
void jiaofei(); //学生交费菜单
void regist(); 16、 //登记学生
void amend( ); //修改用户菜单
void add( ); //增加用户
void delet(); // 删除用户菜单
void nad(); //姓名删除
void numd(); //学号删除
void check( ); //查询菜单
void nacheck(); //姓名查询
void numcheck(); //学号 17、查询
void naj(); //输入姓名交费
void numj(); //输入学号交费
void display(); //查看交费情况
void save();
private:
int size;
Stu *student;
};
void arrayofStu::regist() //学生用户注册
{
int i=0;
ifstream f(”Stu.txt");
while(f.good()) // !f.eof()
{
18、
f>〉student[i]。number;
f〉〉student[i].name;
f〉〉student[i]。water;
f>>student[i].power;
f〉>student[i]。gas;
i++;
}
f。close();
count1=i;
cout<〈”\t\t 注册成功!!!”〈〈endl;
}
void arrayofStu::naj( ) //输入姓名交费
{ char ch;
double money,money2;
cout〈<”\t\t\t欢迎使用姓名交费功能"〈〈endl;
strin 19、g na;
cout〈<”请输入学生姓名:”〈 20、
cin>〉ch;
if(ch==’Y’||ch==’y')
{student[i].flag=1;
cout〈〈”你实际交的钱是:”〈〈endl;
cin〉〉money;
if(money〉student[i]。Stotal())
cout〈〈”找零”〈〈money—student[i].Stotal()〈<"钱”<〈endl;
if(student[i].Stotal()〉money)
{ cout〈〈”交的钱不够,还应交”〈〈student[i]。 21、Stotal()-money〈〈”钱”〈〈endl;
cout<〈”补交:”;
cin〉〉money2;}
cout<<”交费成功”<〈endl;
count11++;
xuesheng();
}
else xuesheng();
}
}
if(!fl)
cout〈<"没有这个学生"〈 22、t<〈”\t\t\t欢迎使用学号交费功能"<〈endl;
string num;double money,money2;char ch;
cout<<”请输入学生学号:”〈 23、ut〈〈"你应该交”<〈student[i]。Stotal()〈<"钱”< 24、i].Stotal()〉money)
{ cout〈〈”交的钱不够,还应交”〈〈student[i].Stotal()-money〈〈"钱”<〈endl;
cout〈<”补交:”; cin〉〉money2;}
cout〈<"交费成功"〈 25、t\t欢迎使用增加学生功能”〈〈endl;
cout<〈"请输入学生的姓名:”〈 26、count1++;
cout〈<”\t\t\t学生信息已被成功的增加!”<〈endl;
}
void arrayofStu::nad( ) //按姓名删除
{cout〈〈”\t\t\t欢迎使用姓名删除学生功能”〈〈endl;
/*cout〈〈student[0];
cout〈 27、dent[i].name)
{fl=1;break;}
if(fl)
{for(j=i;j〈count1—1;j++)
student[j]=student[j+1];
count1-—;
cout〈<”你已成功删除学生信息”〈〈endl;
}
else
cout〈<”没有这个学生”<〈endl;
}
void arrayofStu::display()
{ int i;
if(count11==0)
cout<〈”暂时还无学生交费"〈〈endl;
else
{cout<〈”已交费人员信息”<〈endl;
cout〈〈”学号 "〈〈”姓名 28、 ”〈〈” 用水量 "〈〈"用电量 "〈<”用煤气量 ”〈〈”水费 ”〈<”电费 ”<〈”煤气费 ”〈〈" 总额 ”<<" 是否交费”<〈endl;
for( i=0;i 29、 "〈〈”煤气费 ”〈<" 总额 ”〈<” 是否交费"〈 30、r)
{fl=1;break;}
if(fl)
{for(j=i;j 31、or(i=0;i〈count1;i++)
if(na==student[i].name)
{ fl=1;break;}
if(fl)
{
cout<〈”学号 ”<<"姓名 ”<〈" 用水量 ”〈〈”用电量 "〈<”用煤气量 ”<〈”水费 ”〈<”电费 ”<<"煤气费 ”<<" 总额 ”<<" 是否交费"<〈endl;
cout〈 32、t欢迎使用学号查询学生功能"〈 33、
else
cout〈<"没有这个学生”< 34、t() //删除学生菜单
{
int choice;
cout〈〈”\t\t\t\t**************”<〈endl;
cout<〈"\t\t\t\t 删除信息"〈 35、hile(1)
{
cout〈〈"请输入你的选择”<〈endl;
cin〉〉choice;
switch(choice)
{
case 1: numd(); break; //学号删除
case 2: nad(); break; //姓名删除
case 3: xuesheng(); break; //返回学生管理主菜单
case 0: amend(); break; //返回上一层
}
if(choice==0)
break;
}
}
void array 36、ofStu::jiaofei() //学生缴费菜单
{
int choice;
cout<〈”\t\t\t\t****************"<〈endl;
cout〈〈"\t\t\t\t*———学生缴费——-*”〈 37、
{
cout<<"请输入你的选择”〈〈endl;
cin>>choice;
switch(choice)
{ case 1: numj(); break; //输入学号计费
case 2: naj(); break; //输入姓名计费
case 0: xuesheng(); break; //返回上一层
}
if(choice==0)
break;
}
}
void arrayofStu::xuesheng() //学生用户主菜单
{
int c 38、hoice;
cout<〈”\t\t\t\t欢迎使用学生用户管理系统”〈 39、t\t\t*———--—5,查看交费情况-—*"〈 40、 regist(); break; //注册
case 2: amend(); break; //修改
case 3: jiaofei(); break; //缴纳费用
case 4: check(); break;
case 5: display(); break;
case 6: save(); break;
case 0: break;
}
if(choice==0) break;
}
}
void arrayofStu::amend() / 41、/修改用户菜单
{
int choice;
cout〈〈"\t\t\t\t修改学生信息”〈〈endl<〈endl;
cout<〈"\t\t\t\t1,增加学生 ”<〈endl;
cout<〈"\t\t\t\t2,删除学生 "<〈endl;
cout<<"\t\t\t\t0,回上一层 ”<〈endl;
while(1)
{
cout〈〈”请输入你的选择”<〈endl;
cin>>choice;
switch(choice)
{case 1: add(); break;
case 2: delet(); br 42、eak;
case 0: xuesheng(); break;
}
if(choice==0)
break;
}
}
void arrayofStu::check() //查询菜单
{
int choice;
cout<<"\t\t 查询学生信息"〈〈endl< 43、
cout<<” 0,返回上一层 ”〈 44、ng(); break;//如果是break时分析
}
if(choice==0)break;
}
}
class Teacher //教师
{
public:
Teacher( double xwater=0,double xpower=0,double xgas=0,string xname="a")
{water=xwater;power=xpower;gas=xgas;name=xname;flag=0;}
void operator =(Teacher S); //赋值运算符重载
friend 45、ostream &operator 〈〈(ostream & a,Teacher &S) //插入运算符重载
{
a〈〈setw(6)< 46、〈”已交";
else a<<”未交”;
cout〈 47、total;
int flag;
};
void Teacher::operator =(Teacher S) //赋值运算符重载
{
name=S.name;
water=S。water;
power=S。power;
gas=S。gas;
}
double Teacher::TGetW() //计算水费
{
water_rate=3。7*water;
return water_rate;
}
double Teacher::TGetC() //计算电费
{
circuit=0。45*power;
ret 48、urn circuit;
}
double Teacher::TGetG() //计算煤气费
{
gas_rate=1.9*gas;
return gas_rate;
}
double Teacher::Ttotal() //计算应该付的的钱
{
total=TGetW()+TGetC()+TGetG();
return total;
}
class arrayofTeacher //老师类数组计算
{
public:
arrayofTeacher( int sz=1)
{size=sz;teacher=new Teacher[s 49、ize];}
~arrayofTeacher() {delete [] teacher ; }
void regist(); //注册教工
void jiaogong(); //教工主菜单
void amend( ); //修改用户菜单
void add(); //增加用户
void delet(); // 删除用户
void check(); //查询是否交费
void jiaofei(); //交水电煤气费
50、 // void display(); //展示所有的用户
void display(); //查看交费情况
void save();
private:
int size;
Teacher *teacher;
};
void arrayofTeacher::regist() //教工用户注册
{int i=0;
ifstream f(”Teacher.txt”);
while(f。good())
{
f〉>teacher[i].name;
f〉>teacher[i].water;






