2024年5月2日发(作者:)

C++ 课程设计报告

课 题: 电费管理系统

专业班级: 网络工程***班

学 号: ************

姓 名: ********

指导教师: ********

评阅意见:

评定成绩:

指导老师签名:

年 月 日

目 录

一 课程设计的目的和意义

《C++与面向对象程序设计》是计算机专业的一门专业基础课,主要内容是介绍

C++语言中的数据类型,运算,语句结构及其程序设计的基本方法。C++是当今最流

行的高级程序设计语言之一,应用十分广泛。它也是一门复杂的语言,与C语言兼

容,既支持结构化的程序设计方法,也支持面向对象的程序设计方法。

《C++课程设计》是在学生学习完上述课程以后进行的设计性试验课程,面向对

象的思想只有通过具体的程序才能真正掌握,故在我们学习完《C++与面向对象程序

设计》课程后,开设C++课程设计实验课程。目的是使学生能够更好地掌握C++课程

设计语言,更深地理解面向对象程序设计的基本概念与方法,要求我们达到熟练掌

握C++语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;能够利

用所学的基本知识和技能,解决简单的面向对象程序设计问题,提高动手编程解决

实际问题的能力,并为后续专业课程的学习奠定程序设计基础。

通过做课程实验,我们应能加深对讲授内容的理解,积累经验,学会独立上机调

试程序;并且逐步达到综合运用封装,继承和多态等C++难点知识,真正掌握C++

语言的精华,从而熟练应用C++程序设计语言。

本次课程设计要求使用C++编译有关链表的程序。完成我们所选的课题。我们小组选的课题

是电费管理系统。我们通过链表完成对用户基本信息的一般性管理工作:用户及用户基本信息

的增加、修改和删除和对用户用电情况与显示用户所缴电费情况的记录等功能。在我的链表中

是对用户的缴费情况记录的一个链表,要求将用户的基本信息、用电情况、所缴电费及电费余

额以数据文件的形式存储,所有的用户基本情况均以文件操作的方式进行。在查找时,以记录

的“用户姓名”或“身份证”为关键字进行查找。但由于我们知识的有限性,我们只能对信息进

行简单的处理,希望我们能在以后的学习中进一步改善。

1

二 需求分析

2.1 电费管理系统功能分析

电费管理系统总共分三个链表,用户基本信息链表,用电量的链表,缴费情况

链表。电费管理系统功能分六个模块:添加用户,显示所有用户,修改用户信息,

保存用户信息,读取用户信息,查询用户信息;

此系统将要能够实现后台对用户的设置包括(增、删、查、改)以及前台用户

的查询;

2.2 电费管理系统流程图

图2-1电费管理系统流程图

开始

菜单界面

选择1 选择2 选择3 选择4 选择0

添加用户资

料如:

姓名:

身份证:

电量:

缴费情况:

余额:

读 取

所 保

存 的

用 户

信 息

退

返回菜单界面

结束

2

三 系统设计

3.1 个人负责模块功能分析

电费管理系统

姓名

身份证

电费

姓名

身份证

用电量

缴费额

余额

图3-1电费管理系统层次图

模块:此模块为缴费链表

此程序中我主要负责此链表的编写,此模块将实现客户的缴费管理和余额

查询,同时用户的基本资料也一并显示;

3

1、添加用户:录入用户的基本信息,包括用户姓名和账号;

2、显示所有用户缴费情况:自动列出所有保存过的用户缴费信息;

3、修改用户缴费信息:可对系统中已录入的用户缴费信息进行修改;

4、保存用户缴费信息:将录入的用户缴费信息保存在文件中,以便下次再打

开系统时,录入的用户缴费信息还在。

5、读取用户缴费信息:将保存在文件中的用户缴费信息读取出来。

6、查询用户缴费信息:每个用户可以匿名查询所有用户缴费情况,可以按不

同的条件进行查询,如输如账号进行查询,或者输入姓名进行查询。

3.2 类、函数及说明

定义的类:

1、class pay //定义一个缴费的类

{

private:

char name[20]; //用户姓名

char num[20]; //用户身份证号码

char jine[20]; //缴费金额

char balance[20]; //电费余额

char ydl[20]; //用电量

public:

pay *next; //定义一个指针

public:

void SetName(char[]); //设置用户名

char *GetName();

void SetNum(char[]); // 设置用户账号

char *GetNum();

4

void Setjine(char[]); // 录入用户缴费金额

char *Getjine();

void Setydl(char[]); // 录入用户用电量

char *Getydl();

void Setbalance(char[]); // 计算并显示用户余额

char *Getbalance();

void Input();

void Display();

};

2、

class paylist //定义一个用户缴费菜单类

{

public:

pay *pHead; //定义一个头指针

public:

paylist(); //无参数构造函数

void Addpays(); //添加多个用户

void Display(); //显示所有用户信息

void Save(char fileName[]); //保存所有用户信息到文件

void Load(char fileName[]); //从文件中读取用户信息

~paylist(); //析构函数,释放资源

void Menu(); //处理用户信息模块菜单

void Menu_1();

void MainMenu_1();

5

void Menu_2();

void Menu_3();

void payMenu();

void MainMenu();

private:

void Addpay(); //添加一个用户

int Menu_1Select(); //显示和处理用户信息模块菜单

int MainMenu_1Select();

int MainMenuSelect(); };

四 系统测试

4.1 功能演示

1 程序主界面

图4-1 程序主界面

6

——>>选择1进入管理员界面

图4-2 管理员进入界面

2 用户缴费管理界面

——>>选择4进入缴费管理界面

图4-3用户缴费管理界面

3

添加用户信息及缴费金额界面,在用户缴费信息管理界面选择1

7

图4-4 添加用户信息及缴费金额界面

4 保存录入信息

8

图 4-5保存录入信息

5 读取所保存的信息

图4-6 读取所保存的信息

6 显示所保存用户的缴费信息 选择2

9

图4-7显示所保存用户的缴费信息

7在主菜单中选择2,用户登录就可以匿名查询所有用户的缴费情

况.

图4-8 用户登录界面

4.2

存在的问题与不足

其实此系统与实际生活中所用到的电费管理系统还是有蛮大的差距的,我

们一直都在努力,来缩小与之的差距。譬如,在实际生活中,电费的价格是波动

的,而我们的电费价格是规定死了的,一旦电费价格有变动,我们的这个系统将

毫无意义。另外,此系统未进行任何安全设置,管理员应该验证信息后才能登陆,

这样才有实用性。

五 心得体会

在为期不到两周的课程设计中,我体会颇多,学到很多东西。我懂得了如

何用 MFC编写可视化界面的应用程序,利用C++课程设计这次机会,我加强了对

10

C++的认识,复习了自己以前的知识,自己的逻辑思考能力也提高不少。从而对

Microsoft Visual C++ 6.0又有了更深入的认识!在这次课程设计中,我还懂

得了程序开发的一些比较重要的步骤,比如需求分析、总体设计、数据结构设计、

程序模块设计(含功能需求、用户界面设计、程序代码设计与分析、运行结果)、

系统使用说明等。

总之,通过这次课程设计,我收获颇丰,相信会为自己以后的学习和工作带

来很大的好处。最重要的还是激发了我编程的兴趣和热情,让我从一个只懂得理

论知识变成能做得一些小型程序,让我对编程更加热爱了。整体地评价这次课程

设计,我认为收获很大,正如上面所说的那样,通过课程设计,既复习了以前的

旧知识,又学到了一些新的知识;设计增强了我们用所学知识去解决具体问题的

能力,进一步培养了我们独立思考问题和解决问题的能力。特别是学会了在

Visual C++ 集成开发环境中如何调试程序的方法。

当然,老师的悉心指导和同学的帮助也是不可忽视的,在此感谢本次课程设

计中所有辅导老师对我们的关心和帮助,诚心诚意感谢你们对我的鼓励与教导,

是你们在我迷茫的时候给了我们许多提示,激发了我编程的灵感;还有,我在此

也十分感谢本次课程设计中同学们对我的帮助,由于此次我们是团队合作完成电

费管理系统这个程序,是我深刻的体会到团队重要性。

尽管此次课程设计很累,基本上我们都是在凌晨3、4点钟才睡,但是我们

还是坚持了下来,到最后程序终于能够运行了,尽管不分功能没有实现,但这也

是对我们努力后的一种回报吧课程设计后,我将和我的团队继续努力,把其中的

一些缺陷和不足给弥补上,使整个程序更加的完善,更加具有实用性。

六 参考文献

[1] 张昕.C语言课程设计:Visual C++环境.北京:中国水利水电出版社,2005

[2] 陈维兴,林小茶.C++面向对象程序设计教程(第三版).北京:清华大学出

版社,2005

[3] 严蔚敏 吴伟明 数据结构(C语言版).清华大学出版社,2007

11

七 附录 源程序

(只包括主函数和用户缴费信息管理这条链表)

Pay.h

#if !defined (PAY_H)

# define PAY_H

class pay

{

private:

char name[20];//用户姓名

char num[20];//用户身份证号码

char jine[20];//缴费金额

char balance[20];//电费余额

char ydl[20];//用电量

public:

pay *next;

public:

void SetName(char[]);

char *GetName();

void SetNum(char[]);

char *GetNum();

void Setjine(char[]);

12

char *Getjine();

void Setydl(char[]);

char *Getydl();

void Setbalance(char[]);

char *Getbalance();

void Input();

void Display();

};

#endif

Paylist.h

#if !defined(USERLIST_H)

#define USERLIST_H

#include "pay.h"

class paylist

{

public:

pay *pHead;

public:

paylist(); //无参数构造函数

void Addpays(); //添加多个用户

void Display(); //显示所有用户信息

void Save(char fileName[]); //保存所有用户信息到文件

void Load(char fileName[]); //从文件中读取用户信息

~paylist(); //析构函数,释放资源

void Menu(); //处理用户信息模块菜单

13

void Menu_1();

void MainMenu_1();

void Menu_2();

void Menu_3();

void payMenu();

void MainMenu();

private:

void Addpay(); //添加一个用户

int Menu_1Select(); //显示和处理用户信息模块菜单

int MainMenu_1Select();

int MainMenuSelect();

};

#endif

#include "pay.h"

#include

using namespace std;

void pay::SetName(char n[])

{

strcpy(name,n);

}

char*pay::GetName()

{

return name;

14

}

void pay::SetNum(char n[])

{

strcpy(num,n);

}

char*pay::GetNum()

{

return num;

}

void pay::Setjine(char n[])

{

strcpy(jine,n);

}

char *pay::Getjine()

{

return jine;

}

void pay:: Setydl(char n[])

{

strcpy(ydl,n);

}

char *pay::Getydl()

{

return ydl;

}

void pay::Setbalance(char n[])

{

strcpy(balance,ydl);

}

char *pay::Getbalance()

{

return 0;

}

void pay::Setbalance(char n[])

{

strcpy(balance,ydl);

}

15

char *pay::Getbalance()

{

return 0;

}

void pay::Input()

{

char ch[20];

cout<<"姓名:

";

e(ch,'n');

SetName(ch);

cout<<"账号:";

e(ch,'n');

SetNum(ch);

cout<<"预存电费:"

;

e(ch,'n');

Setjine(ch);

cout<<"用电量:";

e(ch,'n');

Setydl(ch);

cout<<"电费余额:";

e(ch,'n');

Setbalance(ch);

}

void pay::Display()

{

16

cout<<"t"<

Setbalance()<

}

#include "paylist.h"

#include

#include

using namespace std;

paylist::paylist()

{

pHead= NULL;

};

void paylist::Addpay()

{

pay *pCurrent;

if(pHead== NULL)

{

pHead= new pay();

pHead->Input();

pHead->next = NULL;

}

else

{

pCurrent = pHead;

while(pCurrent->next != NULL)

pCurrent = pCurrent->next;

pCurrent->next = new pay();

pCurrent = pCurrent->next;

pCurrent->Input();

pCurrent->next = NULL;

}

17

};

void paylist::Addpays()

{

int n;

cout<<"请输入用户数量:";

cin>>n;

getchar();

if(n<=0)

return;

for(int i=1;i<=n;i++)

{

Addpay();

}

};

void paylist::Display()

{

cout<<"t--------------------------------------------------------------------"<

cout<<"t姓名"<<"t身份证号"<<"t预存电费 (元)"<<"t用电量(度)"<<"t余额 (元)

"<

cout<<"t--------------------------------------------------------------------"<

pay *pCurrent;

pCurrent = pHead;

while(pCurrent!=NULL)

{

pCurrent->Display();

pCurrent=pCurrent->next;

}

cout<<"t--------------------------------------------------------------------"<

};

paylist::~paylist()

{

if( pHead!=NULL )

{

pay *pCurrent;

pCurrent=pHead;

while(pCurrent->next!=NULL)

18

{

pHead=pHead->next;

free(pCurrent);

pCurrent=pHead;

}

free(pCurrent);

}

};

void paylist::Save(char fileName[])

{

ofstream oFile(fileName,ios::out|ios::binary);

if(!oFile)

{

cout<<"t文件“"<

return;

}

pay *pCurrent;

pCurrent=pHead;

while(pCurrent!=NULL)

{

((char *)pCurrent,sizeof(*pCurrent));

pCurrent=pCurrent->next;

}

cout<<"t用户信息保存成功!"<

();

};

void paylist::Load(char fileName[])

{

ifstream iFile(fileName,ios::in|ios::binary);

if(!iFile)

{

cout<<"t文件“"<

return;

}

if( ()!=EOF )

{

19

pHead = new pay();

((char *)pHead,sizeof(*pHead));

}

else

{

pHead=NULL;

return;

}

pay *pCurrent;

pCurrent = pHead;

while(()!=EOF)

{

pCurrent->next = new pay();

((char *)&(*(pCurrent->next)),sizeof(*(pCurrent->next)));

pCurrent=pCurrent->next;

}

pCurrent->next = NULL;

cout<<"t读取成功!"<

();

};

int paylist::MainMenuSelect()

{

char s[2];

int cn;

cout<

cout<

cout<<"+----------------------------+"<

cout<<"| |"<

cout<<"| 用户缴费信息管理 |"<

cout<<"| |"<

cout<<"|----------------------------|"<

cout<<"|1.添加用户信息及缴费金额 |"<

cout<<"|----------------------------|"<

cout<<"|2.显示所有用户余额情况 |"<

cout<<"|----------------------------|"<

cout<<"|3.保存用户缴费记录 |"<

cout<<"|----------------------------|"<

cout<<"|4.读取用户缴费记录 |"<

cout<<"|----------------------------|"<

cout<<"|5.修改用户缴费信息 |"<

cout<<"|----------------------------|"<

20

cout<<"|0.返回主菜单 |"<

cout<<"+----------------------------+"<

cout<<"请选择0-5:"<

for(;;)

{

gets(s);

cn = atoi(s);

if(cn>5)

cout<<"nt您的输入有误,请重选0-5:";

else

break;

}

return cn;

};

int paylist::MainMenu_1Select()

{

char ss[2];

int cn;

cout<<"+------------------------------------------------+"<

cout<<"| 欢迎进入管理员界面

cout<<"|--------------------------+---------------------|"<

cout<<"+--------------------------+---------------------+"<

cout<<"| 查询用户信息:1 |用户基本信息管理:2

cout<<"+--------------------------+---------------------+"<

cout<<"+ 用户用电量管理:3 |用户缴费管理:4

cout<<"+----------------------+-------------------------+"<

cout<<"| 返回主菜单:0

cout<<"+----------------------+-------------------------+"<

cout<<"请选择0-4:"<

for(;;)

{

gets(ss);

cn=atoi(ss);

if(cn>4)

cout<<"您的输入有误,请重新输入0-4:";

else

break;

}

return cn;

21

|"<

|"<

|"<

|"<

}

void paylist::Menu_1()

{

for(;;)

{

switch(MainMenu_1Select())

{

case 1:

Menu_2();

break;

case 2:

Menu_3();

break;

case 0:

return;

}

}

};

void paylist::Menu_2()

{

Load("");

Display();

};

void paylist::Menu_3()

{

for(;;)

{

switch(MainMenuSelect())

{

case 1:

Addpays();

break;

case 2:

Display();

22

break;

case 3:

Save("");

break;

case 4:

Load("");

break;

case 5:

cout<<"功能待定 ";

case 0:

return;

}

}

};

void paylist::payMenu()

{

Load("");

Display();

};

Main.h

#include "paylist.h"

#include

using namespace std;

paylist pays;

int MainMenu_1Select()

{

char s[2];

int cn;

cout<<"+***********************n";

cout<<"|-------主菜单---------|n";

cout<<"|----------------------|n";

cout<<"|1.管理员登陆 |n";

cout<<"|----------------------|n";

23

cout<<"|2.用户登陆 |n";

cout<<"|----------------------|n";

cout<<"|0.退出系统 |n";

cout<<"+**********************|n";

cout<<"t选择0-2:";

for(;;)

{

gets(s);

cn=atoi(s);

if(cn>2)

cout<<"您的输入有误,请重新输入0-2:";

else

break;

}

return cn;

}

void MainMenu_1()

{

for(;;)

{

switch(MainMenu_1Select())

{

case 1:

_1();

break;

case 2:

u();

break;

case 0:

cout<<"t谢谢使用! n";

return;

}

}

}

int main()

{

MainMenu_1();

return 0;

}

24