《C++程序设计》课程设计.docx
《《C++程序设计》课程设计.docx》由会员分享,可在线阅读,更多相关《《C++程序设计》课程设计.docx(21页珍藏版)》请在冰豆网上搜索。
《C++程序设计》课程设计
《C++程序设计》课程设计
水电管理系统
指导教师:
设计成员:
班级:
设计时间:
2010年11月15日
《C++程序设计》课程设计任务书
适用专业:
过程控制
设计题目:
水电管理系统
一、已知技术参数或设计前提
1、拖欠的的水或电费信息繁多。
2、每个用户都有自己的姓名、水电编号等信息。
3、若有新客户则可添加其信息。
4、若客户信息填写有误,可以修改其信息。
二、设计内容及要求
1、实现用户的信息录入,输入的信息如下:
顾客姓名、水或电类别、水或电价格、拖欠数量。
2、实现用户的信息查询,能够按客户的姓名或水电编号进行查询。
3、实现用户的信息输出,主要让用户输出已存档的顾客信息。
4、实现用户的信息修改,修改已存档用户的姓名、水电类别、水电价格、拖欠数量。
5、实现用户的信息删除,主要让用户删出已存档的顾客的信息。
6、实现系统的自动维护功能。
三、程设计工作计划
1、确定题目,成立设计小组,做用户分析。
(9月16日)
2、查阅资料,进行问题分析,制定方案,确定成员分工。
(9月17日-9月20日)
3、根据方案编写程序并进行调试。
(10月15日)
4、撰写设计说明书,完成设计。
(11月1日)
5、提交设计内容,答辩。
四、相关教材及参考书目
1、编著。
C++语言及其程序设计教程。
北京:
电子工业出版社,1992;
2、编著。
VisualC++程序设计。
北京:
北京大学出版社,1994;
3、主编。
C++程序设计语言。
北京:
清华大学出版社,1995;
4、HerbertSchildt.Schildt’sExpertC++。
McGraw-hill,1996;
5、主编。
C++程序设计教程。
北京:
高等教育出版社,2004。
指导教师签字:
迟立颖
系主任签字:
2010年10月16日
目录
一、需求分析……………………………………………………………………3
二、成员分工………………………………………………………………………3
三、系统功能模块图………………………………………………………………3
四、软硬件环境………………………………………………………………3
五、模块功能实现…………………………………………………………………4
六、系统使用说明……………………………………………………………………6
七、源程序………………………………………………………………………12
八、结束语………………………………………………………………………12
九、参考文献………………………………………………………………………12
一、需求分析
本系统为水电管理系统,用于登记每日售出的水或电信息的录入,查询,更改。
由于每日售出的水或电信息繁多,故此系统可以解决售出的水或电的信息问题。
又可以减速少工作人员的工作量,节约了时间。
二、成员的分工说明
李莹:
编写部分程序说明书,负责输入输出功能的实现。
胡琪:
编写部分程序说明书,负责管理查询部分的功能实现。
蔡仲彬:
编写部分程序说明书,负责水电信息修改和删除功能实现。
黄少君:
编写部分程序说明书,负责管理信息录入部分的功能实现。
三、系统功能模块图
水电管理系统
水或电信息录入模块
水或电信息查询模块
水或电信息修改模块
水或电信息输出模块
水或电信息删除模块
按顾客姓名查询
按水或电编号查询
四、系统的软硬件环境
1、软件环境
WindowsXP、VisualC++6.0
2、硬件环境
CPU(AMD4000+)、内存(1G)、硬盘(160G)
五、功能模块实现及函数分析
1、类结构:
shuidian
ClassShuidian类,此类的设计是遵循面向对象编程原理,主要是针对用户的个人信息进行操作,设计共分为两个部分,公有部分和私有部分。
公有部分:
对象的功能函数,包括:
shuidian();//构造函数
~shuidian();//析构函数
voidenter();//信息录入函数
voiddisplay();//信息输出函数
voidsetsno(inttemp);//设置水电编码
intgetsno();//获取水电编码
char*getname();//获取姓名
voidchange();//修改函数
voiddel();//删除函数
voidread();//读取函数
voidwrite();//写入函数
inttuiqian_jine();//拖欠总额计算函数
私有部分:
对象的一些属性信息包括:
intmaxnum;//最大值
charprice[6];//单位价格
charname[10];//登记名字
charlei;//水或电分类
intsno;//水电编号
chartuoqian[10];
2、模块设计分析
(1)登记信息录入模块input():
1)首先调用enter()函数。
2、录入模块是以类的成员enter()为基础的,首先建立txt文件,然后通过屏幕输入输出,对类实例的各个数据成员赋值,待一起都输入完毕,将数据以shuidian类的大小为单位,存储到txt文件中,这样便完成了一次输入过程。
(2)登记信息查询模块search():
1、查询模块是以查询模块和输入模块为基础的,前一部分就是查找模块的内容,很容易理解,首先要找到它,这就要对存储文件shuidian.txt进行遍历,寻找要检索对象。
(3)登记信息修改模块change():
1、输入修改登记的序号。
2、利用这个登记好到文件里进行查找如果存在将要更改的信息再写到文件里。
检索不到该登记号就输出“没有你所要修改的登记信息!
”。
(4)已登记水电信息查询模块search():
1、先定义输出文件流。
2、根据登记序号进行遍历。
3、如果找到指定的登记序号,则调用hcx输出器对应的登记信息。
(5)登记信息输出模块output():
1、先定义输出文件流。
2、打开文件。
输出登记的户主姓名、水或电分类、水电编号、单位价格、拖欠数量、拖欠金额信息,如果还没有向文件中输入信息则输出“还没有输入登记信息”如果已经输入了显示登记信息个数。
退出系统,正确程序再继续运行。
六、程序的使用说明
1、进入界面
2.信息录入
3.信息查询
4.信息输出
5.信息修改
6.信息删除及系统维护
七、程序源代码
#include
#include
#include
#include
#include
#include
inticc(char*c)
{
inti=0;
intsum=0;
while(c[i]!
='\0')
{
sum*=10;
sum+=(c[i++]-'0');
}
returnsum;
}
classshuidian
{
public:
shuidian();
~shuidian();
voidenter();//信息录入函数
voiddisplay();//信息输出函数
voidsetsno(inttemp);
intgetsno();
char*getname();
voidchange();
voiddel();
voidread();
voidwrite();
inttuiqian_jine();
private:
intmaxnum;
charprice[6];//单位价格
charname[10];//登记名字
charlei;//水或电分类
intsno;//水电编号
chartuoqian[10];
};
shuidian:
:
shuidian(){}
shuidian:
:
~shuidian(){}
intshuidian:
:
getsno()
{
returnsno;
}
voidshuidian:
:
setsno(inttemp)
{
sno=temp;
}
char*shuidian:
:
getname()
{
returnname;
}
voidshuidian:
:
enter()
{
inti=0;
//charl;
ifstreamffile("max.txt",ios:
:
binary|ios:
:
nocreate);
if(ffile)
{
ffile.read((char*)&maxnum,sizeofmaxnum);
}
else
{
maxnum=1000;
}
ffile.close();
sno=maxnum++;
ofstreamfile("max.txt");
file.write((char*)&maxnum,sizeofmaxnum);
file.close();
cout<<"请输入信息:
"<cout<<"户主姓名:
"<>name;
cout<<"水或电分类(w水e电):
"<cin>>lei;
cout<<"水电编号:
";cin>>sno;
while(i==0){
if((lei=='w')||(lei=='e'))
i=1;
else{
cout<<"输入错误,重新输入"<cin>>lei;}
}
cout<<"单位价格:
"<cin>>price;
cout<<"拖欠数量:
"<cin>>tuoqian;
}
intshuidian:
:
tuiqian_jine()
{
intp,t;
p=icc(this->price);
t=icc(this->tuoqian);
return(p*t);
}
voidshuidian:
:
change()
{
cout<<"请输入要修改的信息:
"<cout<<"信息是不是要改写(Y/N)"<charch;
cin>>ch;
if(ch=='Y'||ch=='y')
{
cout<<"请输入新名称:
"<cin>>name;
cout<<"水或电分类:
"<cin>>lei;
cout<<"价格:
"<cin>>price;
cout<<"拖欠数量:
"<cin>>tuoqian;
cout<<"你刚刚输入的信息如下:
"<display();
}
}
voidshuidian:
:
del()
{
name[0]='\0';
}
voidshuidian:
:
display()
{
inttj=this->tuiqian_jine();
cout<if(lei=='w')
cout<<"水";
else
cout<<"电";
cout<}
shuidianinformation;
voidmenu()
{
cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<cout<cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<cout<cout<cout<cout<cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<cout<<"请选择:
";
}
voidread()
{
ifstreamafile("shuidian.txt",ios:
:
nocreate);
afile.read((char*)&information,sizeofinformation);
}
voidwrite()
{
ofstreambfile("shuidian.txt",ios:
:
app);
bfile.write((char*)&information,sizeofinformation);
}
voidinput()
{
charch;
information.enter(),write();
cout<<"你还要输入下一户主的信息吗?
(Y/N)"<cin>>ch;
if(ch=='Y'||ch=='y')
{input();}
}
voidsearch()
{
cout<<"请输入你的查询类型:
(1.水电编号2.户主信息)"<intk,i,m=0;intj;charch1[15];cin>>j;
while(j!
=1&&j!
=2)
{
cout<<"错误请重新选择!
"<cin>>j;
}
if(j==1)
{
cout<<"请输入你要查找的水电编号:
"<>i;
}
if(j==2)
{
cout<<"请输入你要查找的户主姓名:
"<>ch1;
}
ifstreamdfile("shuidian.txt",ios:
:
nocreate);
while(dfile.good())
{
dfile.read((char*)&information,sizeofinformation);
if(i==information.getsno()||strcmp(information.getname(),ch1)==0)
{
cout<information.display();i=0;k=0;m=1;
return;
}
}
if(m!
=1)
cout<<"没有找到你要查询的户主的信息!
"<}
voidchange()
{
intch,p=0,l=0;
cout<<"请输入你要修改的水电编号:
"<cin>>ch;
ifstreamefile("shuidian.txt",ios:
:
nocreate);
while(efile.good())
{
efile.seekg(sizeof(information)*p);
if(efile.read((char*)&information,sizeofinformation))
{
if(ch==information.getsno())
{
cout<information.display();
ch=0;
information.change();
ofstreamffile("shuidian.txt",ios:
:
nocreate|ios:
:
in);
ffile.seekp(sizeof(information)*p);
ffile.write((char*)&information,sizeofinformation);
ffile.close();
l++;
return;
}
}
p++;
}
efile.close();
if(l!
=1)
cout<<"没有你所要修改的信息!
"<}
voiddel()
{
intl=0,p=0;
charch[10];
cout<<"请输入你要删除的顾客姓名:
"<cin>>ch;
ifstreamhfile("shuidian.txt",ios:
:
nocreate);
while(hfile.good())
{
hfile.seekg(sizeof(information)*p);
if(hfile.read((char*)&information,sizeofinformation))
{
if(!
strcmp(information.getname(),ch))
{
cout<information.display();
////////////////
information.del();
ofstreamffile("shuidian.txt",ios:
:
nocreate|ios:
:
in);
ffile.seekp(sizeof(information)*p);
ffile.write((char*)&information,sizeofinformation);
ffile.close();
l++;
return;
}
}
p++;
}
hfile.close();
if(l!
=1)
cout<<"没有你所要删除的信息!
"<}
voidupdate()
{
cout<<"维护完成!
"<}
voidoutput()
{
inti=0;
ifstreamefile("shuidian.txt",ios:
:
nocreate);
while(efile)
{
if(efile.read((char*)&information,sizeofinformation))
{
if(*information.getname()!
='\0'){
cout<information.display();i++;
}
}
}
if(i!
=0){
cout<<"一共有"<
getchar();
}
else{
cout<<"还没有输入信息."<getchar();
}
}
voidselect()
{
intch;
do
{
cin>>ch;
switch(ch)
{
case0:
exit(0);break;
case1:
input();break;
case2:
search();break;
case3:
output();break;
case4:
change();break;
case5:
del();break;
case6:
update();break;
default:
{
cout<cout<<"输入无效请重新输入"<cout<}
}
}while(0);
}
voidmain()
{
menu();
do{
select();
cout<cout<cout<cout<cout<cout<cout<cout<cout<<"请选择:
";
}while
(1);
}
八、结束语
1.程序运用了类(class)类是一中复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。
同时用了类的成员:
公有的(public)和私有的(private):
2.循环语句While循环语句在此程序中的功能:
计算<条件>中给出的表达式,其值为非零,则执行循环题,否则推出循环体。
用此程序在输入运动员信息时,如输入信息不相符则出现“错误请重新输入!
”。
3.应用了指和对象引用指向数据成员的指针格式为:
〈类型说明〉〈类名〉:
:
*〈指针名〉(参数表)使用指针可实现传址调用,利用它可实现函数之间的信息传递,同时使用对象指针实参仅将对象的地址值传给形参,而不进行副本的拷贝,这样可以提高运行效率,减少时空开销。
4.磁盘文件使用
(1)打开文件前,先说明一个fstream类的对象,再使用成员函数open()打开指定的文件,文件被打开后,才可以对文件进行读写操作。
如,以输出方式打开一个文件的方法如下:
fstreamoutfile;
otfil