《C++程序设计》课程设计

更新时间:2024-07-12 07:01:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《C++程序设计》课程设计

水电管理系统

指导教师设计成员班 级设计时间

2010年11月

1

: : : : 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、编著。Visual C++程序设计。北京:北京大学出版社,1994; 3、主编。C++程序设计语言。北京:清华大学出版社,1995;

4、Herbert Schildt.Schildt’s Expert C++。McGraw-hill,1996; 5、主编。C++程序设计教程。北京:高等教育出版社,2004。

指导教师签字:迟立颖 系主任 签字:

2010年10月16日

2

目 录

一、需求分析??????????????????????????3 二、成员分工???????????????????????????3 三、系统功能模块图????????????????????????3 四、软硬件环境????????????????????????3 五、模块功能实现?????????????????????????4 六、系统使用说明??????????????????????????6 七、源程序???????????????????????????12 八、结束语???????????????????????????12 九、参考文献???????????????????????????12 3

一、需求分析

本系统为水电管理系统,用于登记每日售出的水或电信息的录入,查询,更改。由于每日售出的水或电信息繁多,故此系统可以解决售出的水或电的信息问题。又可以减速少工作人员的工作量,节约了时间。

二、成员的分工说明

李 莹:编写部分程序说明书,负责输入输出功能的实现。 胡 琪:编写部分程序说明书,负责管理查询部分的功能实现。 蔡仲彬:编写部分程序说明书,负责水电信息修改和删除功能实现。 黄少君:编写部分程序说明书,负责管理信息录入部分的功能实现。

三、系统功能模块图

水电管理系统

水水水水水

或或或或或 电电电电电信信信信信

息息息息息 录 查修删输入 询改除出

模模模模模

块块块块块

查按 询按询 水顾或客

电姓

编名 号查

四、系统的软硬件环境

1、软件环境

WindowsXP、Visual C++6.0 2、硬件环境 CPU(AMD 4000+)、内存(1G)、硬盘(160G)

4

五、功能模块实现及函数分析

1、类结构:shuidian

Class Shuidian类,此类的设计是遵循面向对象编程原理,主要是针对用户的个人信息进行操作,设计共分为两个部分,公有部分和私有部分。

公有部分:对象的功能函数,包括:

shuidian(); //构造函数

~shuidian(); //析构函数 void enter();//信息录入函数 void display();//信息输出函数 void setsno(int temp); //设置水电编码 int getsno(); //获取水电编码

char *getname(); //获取姓名

void change(); //修改函数 void del(); //删除函数 void read(); //读取函数 void write(); //写入函数

int tuiqian_jine(); //拖欠总额计算函数

私有部分:对象的一些属性信息 包括:

int maxnum; //最大值 char price[6];//单位价格 char name[10];//登记名字 char lei;//水或电分类 int sno; //水电编号 char tuoqian[10];

2、模块设计分析

(1)登记信息录入模块input():

1)首先调用enter()函数。

2、录入模块是以类的成员enter()为基础的,首先建立txt文件,然后通过屏幕输入输出,对类实例的各个数据成员赋值,待一起都输入完毕,将数据以shuidian类的大小为单位,存储到txt文件中,这样便完成了一次输入过程。

5

(2)登记信息查询模块search ():

1、查询模块是以查询模块和输入模块为基础的,前一部分就是查找模块的内容,很容易理解,首先要找到它,这就要对存储文件shuidian.txt进行遍历,寻找要检索对象。 (3)登记信息修改模块change() :

1、输入修改登记的序号。 2、利用这个登记好到文件里进行查找如果存在将要更改的信息再写到文件里。检索不 到该登记号就输出“没有你所要修改的登记信息!”。 (4)已登记水电信息查询模块search():

1、先定义输出文件流。

2、根据登记序号进行遍历。

3、如果找到指定的登记序号,则调用hcx输出器对应的登记信息。 (5)登记信息输出模块output():

1、先定义输出文件流。 2、打开文件。

输出登记的户主姓名、水或电分类、水电编号、单位价格、拖欠数量、拖欠金额信息,如果还没有向文件中输入信息则输出 “还没有输入登记信息” 如果已经输入了显示登记信息个数。

退出系统,正确程序再继续运行。

六、程序的使用说明

1、进入界面

2.信息录入

6

3.信息查询

4.信息输出

7

5.信息修改

8

6.信息删除及系统维护

七、程序源代码

#include #include #include #include #include #include

int icc(char* c) { }

class shuidian {

public: shuidian();

9

int i = 0;

int sum = 0; while(c[i] != '\\0') { }

return sum;

sum *= 10;

sum += (c[i++] - '0');

~shuidian();

void enter();//信息录入函数 void display();//信息输出函数 void setsno(int temp); int getsno(); char *getname();

void change(); void del(); void read();

void write();

int tuiqian_jine(); private: int maxnum;

char price[6];//单位价格 char name[10];//登记名字 char lei;//水或电分类 int sno; //水电编号 char tuoqian[10];

};

shuidian::shuidian(){} shuidian::~shuidian(){} int shuidian::getsno() { return sno; }

void shuidian::setsno(int temp) {

sno=temp; }

char *shuidian::getname() {

return name;

}

void shuidian::enter() { int i = 0; // char l;

ifstream ffile(\ if(ffile) { ffile.read((char *)&maxnum,sizeof maxnum);

} else

{

10

maxnum=1000;

}

ffile.close();

sno=maxnum++;

ofstream file(\

file.write((char *)&maxnum,sizeof maxnum); file.close();

cout<<\请输入信息:\

cout<<\户主姓名:\ cin>>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;

}

int shuidian::tuiqian_jine() { int p,t;

p = icc(this->price); t = icc(this->tuoqian); return (p*t);

}

void shuidian::change() { cout<<\请输入要修改的信息:\ cout<<\信息是不是要改写(Y/N)\ char ch; cin>>ch;

if(ch=='Y'||ch=='y') { cout<<\请输入新名称:\

cin>>name;

11

}

}

cout<<\水或电分类:\cin>>lei;

cout<<\价格:\cin>>price;

cout<<\拖欠数量:\ cin>>tuoqian;

cout<<\你刚刚输入的信息如下:\display();

void shuidian::del() { }

void shuidian::display() { int tj = this->tuiqian_jine();

cout<

cout<<\水\else cout<<\电\

cout<

}

shuidian information;

void menu() { cout<<\ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\

cout<

cout<<\ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\

cout<

cout<

cout<<\ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\

cout<<\请选择:\}

void read() { }

ifstream afile(\

afile.read((char *)&information,sizeof information);

12

void write() { } { }

char ch;

information.enter(),write();

cout<<\你还要输入下一户主的信息吗?(Y/N)\cin>>ch;

if(ch=='Y'||ch=='y') { input(); }

ofstream bfile(\

bfile.write((char *)&information,sizeof information);

void input()

void search() {

cout<<\请输入你的查询类型:(1.水电编号 2.户主信息)\int k,i,m=0; int j;char ch1[15];cin>>j; while(j!=1&&j!=2) {

cout<<\错误请重新选择!\ cin>>j; }

if(j==1) { }

cout<<\请输入你要查找的水电编号:\

if(j==2) { cout<<\请输入你要查找的户主姓名:\ cin>>ch1; }

ifstream dfile(\while(dfile.good()) {

dfile.read((char *)&information,sizeof information);

if(i==information.getsno()||strcmp(information.getname(),ch1)==0) {

cout<

}

information.display(); i=0; k=0; m=1; }

return;

13

if(m!=1)

cout<<\没有找到你要查询的户主的信息!\}

void change() {

int ch,p=0,l=0;

cout<<\请输入你要修改的水电编号:\cin>>ch;

ifstream efile(\while(efile.good()) {

efile.seekg(sizeof(information)*p);

if(efile.read((char *) &information,sizeof information)) {

if(ch==information.getsno()) {

cout<

void del() {

int l = 0,p = 0; char ch[10];

cout<<\请输入你要删除的顾客姓名:\cin>>ch;

ifstream hfile(\

14

}

}

}

information.display(); ch=0;

information.change();

ofstream ffile(\ffile.seekp(sizeof(information)*p);

ffile.write((char *) &information,sizeof information); ffile.close(); l++; return;

p++;

efile.close(); if(l!=1)

cout<<\没有你所要修改的信息!\

while(hfile.good()) {

hfile.seekg(sizeof(information)*p);

if(hfile.read((char *) &information,sizeof information)) {

if(!strcmp(information.getname(),ch)) {

cout<

information.display(); //////////////// information.del();

ofstream ffile(\ ffile.seekp(sizeof(information)*p);

ffile.write((char *) &information,sizeof information); ffile.close(); l++; return;

}

} p++; }

hfile.close();

if(l!=1)

cout<<\没有你所要删除的信息!\

}

void update() { cout<<\维护完成!\

}

void output() { int i=0;

ifstream efile(\ while(efile) { if(efile.read((char *)&information,sizeof information)) {

15

if(*information.getname() !='\\0'){

cout<

}

if(i!=0){ cout<<\一共有\个信息\

getchar(); } else{ cout<<\还没有输入信息.\ getchar(); }

}

void select() { int ch; do { cin>>ch; switch(ch) {

case 0: exit(0);break; case 1: input();break; case 2: search();break; case 3: output();break; case 4: change();break; case 5: del();break; case 6: update();break; default: {

cout<

cout<<\输入无效请重新输入\ cout<

}

} }while(0);

}

void main() { menu();

do{

16

}

select();

cout<

cout<

}while(1);

八、结束语

1. 程序运用了类(class) 类是一中复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。 同时用了类的成员:公有的(public)和私有的(private):

2. 循环语句 While循环语句在此程序中的功能:计算<条件>中给出的表达式,其值为非

零,则执行循环题,否则推出循环体。用此程序在输入运动员信息时,如输入信息不相符则出现 “错误请重新输入!”。

3. 应用了指和对象引用 指向数据成员的指针格式为:〈类型说明〉〈类名〉::*〈指针名〉(参数表) 使用指针可实现传址调用,利用它可实现函数之间的信息传递,同时使用

对象指针实参仅将对象的地址值传给形参,而不进行副本的拷贝,这样可以提高运行效率,减少时空开销。 4. 磁盘文件使用

(1) 打开文件前,先说明一个fstream类的对象,再使用成员函数open()打开指定的文件,文件被打开后,才可以对文件进行读写操作。如,以输出方式打开一个文件的方法如下:

fstream outfile;

otfile.open(“f1.tex”,ios::out);

其中,outfile是fstream类的一个对象。打开函数open()有两个参数:第一个参数是要被打开的文件名,使用文件名时包含路径名和扩展名。第二个参数是说明文件的访问方式。文件访问方式包含读、写、读/写以及二进制数据模式等。

(2)关闭文件 当结束一个文件的操作后,要即时将该文件关闭。关闭文件时,调用成员函数close()。

5. 在录入源程序时会经常漏掉一些字母和符号,忘记字母的大小写,这些影响后来的程序

运行分析,在链接、运行时会有错误显示,使之不能运行出结果。但在大家的共同努力下找出了错误并将其改正。 6. 本程序的优点:

1) 界面新颖,比较通用。

2) 程序简单,易懂,容易维护。

3) 便于操作。

1. 同时,本程序存在着它的缺点:

一、1、维护模块成单纯摆设,并没有实际用途。

17

二、2、整个程序考虑的不够全面,有些地方还需要完善。

三、在编写这个程序的时候,以我们现在知识的积累是有一定的难度,尤其是文件操作部分,小组为此反复讨论,不断的克服困难,依次解决了文件的备份,文件的还原,以及重名等问题。小组成员的C++知识不断提高,友谊在共同的学习中增进,体现了团队合作的作用和效率,单单我们中的任何一人是不能独立完成这个程序的,这是我们编写这个程序的另一收获。在程序编写的时候有很多细节处理遇到了很多的困难,小组成员也报着事无巨细的态度来纠正错误。还有最重要的就是老师对我们编写程序的支持,当我们有解决不了的问题时,老师总是不厌其烦的对我们进行帮助和引导,这是我们程序能最终成型的一个重要的原因,在此感谢迟老师的谆谆教导。

九、参考文献如下:

1、编著。C++语言及其程序设计教程。北京:电子工业出版社,1992;2、编著。Visual C++程序设计。北京:北京大学出版社,1994; 3、主编。C++程序设计语言。北京:清华大学出版社,1995; 4、Herbert Schildt.Schildt’s Expert C++。McGraw-hill,1996; 5、主编。C++程序设计教程。北京:高等教育出版社,2004。

18

本文来源:https://www.bwwdw.com/article/ihw.html

Top