图书管理系统设计报告
- 格式:doc
- 大小:536.00 KB
- 文档页数:32
HUNAN UNIVERSITY 程序设计训练报告学生姓名梁金翠学生学号20110504214专业班级视觉传达2班指导老师易卫起止时间2012年5月20日----2012年6月17日实训一 水费管理系统1.1 系统功能模块图通过查阅相关资料和仔细分析,得出系统功能模块图如图1所示。
系统主要由用户信息管理、收费管理、查询与统计、存盘等几个功能模块组成,我负责的是收费管理、查询与统计、存盘功能。
其中收费管理包括用户本月用水量、本月所收水费、收费时间,查询与统计包括用户信息查询与收费查询与统计,存盘包括用户信息和收费信息存盘。
1.2 系统登陆模块系统登陆模块主要完成系统登陆和系统退出功能。
其详细流程图如图2所示。
1、密码输入;2、判断密码的正确与否,即当前用户是否具有进入系统运行的权限;主菜单中选择1、2、3、4,分别进入用户基本信息管理、收费管理、查询水 费 管 理 系 统 收 费 管 理 用户信息管理 查询.统计 时 间 编号 修 改 删除 添加 本月用水量查询 水费 统计本月收水费收费时间 时间 记 录图 1 水费管理系统模块与准 备登 录 系 统输 入 密 码 判 断 权 限主 菜 单 操 作是否1 23 4子 菜 单 操 作退 出图 2 水费管理系统流程图1.3 收费管理收费管理模块主要完成对用户进行收费的功能,该模块包含用户本月所收水费、存盘等功能。
其流程图如图3所示。
1.3.1 子菜单2模块1、从子菜单2中选择1、2分别进入本月所收水费、存盘操作;2、选择0,返回主菜单。
1.3.2 本月所收水费模块该模块主要完成对用户本月收取水费的功能,其流程图如图 4所示。
1. 进入子菜单 2中选择 1,进行用户信息的添加;2. 键盘输入要收水费用户的编、名称、收费时间和本月用水量,计算对该用户所收水费;3. 一次用户信息输入完成,系统回到上一级菜单,提示存盘;4. 输入2,进行存盘。
主菜单 操作退出子菜单22操作选择1 2进入收费管理操作图 3 子菜单2流程图1.3.3 存盘模块该模块主要完成用户收费信息的存盘,详情见流程图 5.所示。
1、子菜单2中选择2,进行添加用户信息和所收水费存盘; 2、继续输入用户信息或返回上级菜单。
子菜单 21添加用户信息键盘输入计算水费图 4 本月所收水费流程图子菜单 2 添加用户信息 1 键盘输入计算水费 存 盘 图 5 存盘操作流程图1.4 查询与统计模块查询、统计模块主要完成对用户基本信息的和收费信息的查询和统计的功能,详情见流程图 6所示。
1、从主菜单中选择3,进入查询与统计子菜单 3;2、从子菜单中选择1、2分别进行用户基本信息查询和收费记录的统计;3、输入要查询用户的名称或编号,系统从consumer 文本文档中找到要查询用户的基本信息,屏幕输出信息,返回子菜单 3;4、输入要查询用户收费记录的日期,系统从charge 文本文档中找到该用户信息及收费记录,在屏幕上输出,返回子菜单 3;5、如果没找到该用户信息,返回子菜单 3。
主菜单操作退出3子菜单 31. 用户信息查询2. 用户收费记录统计输入查询条件是否找到信息是屏幕输出用户信息或收费记录否图 6 查询与统计模块流程图2 程序源代码#include <stdio.h>#include <string.h>#include <stdlib.h>#include <fstream.h>#include <iostream.h>#define NULL 0//定义用户基本信息类class consumer{char *num;float price;char *name;int kind;public:char *getnum(){return num;}consumer *next;float getprice(){return price;}char *getname(){return name;}int getkind(){return kind;}};//由组员郭文君完成//定义收费信息类class charge{char * name; //用户名称char * kind; //用户类型float volumn; //本月用水量float money; //本月所收水费char * time; //收费时间public:static int i; //交费次数charge * next;//指向charge类对象的指针charge(char * n,char * k,float v,float m,char * t) {name=new char[strlen(n)+1];strcpy(name,n);kind=new char[strlen(k)+1];strcpy(kind,k);volumn=v;money=m;time=new char[strlen(t)+1];strcpy(time,t);++i;}charge(){name=new char[10];kind=new char[10];volumn=0;money=0;time=new char[10];++i;}~charge()//析构函数{--i;delete []kind;delete []name;delete []time;}char *getname(){return name;}char *getkind(){return kind;}float getvolumn(){return volumn;}float getmoney(){return money;}char *gettime(){return time;}void setname(char *x)//用成员函数修改私有数据成员{strcpy(name,x);}void setkind(char *y){strcpy(kind,y);}void setvolumn(float z){volumn=z;}void setmoney(float p){money=p;}void settime(char *q){strcpy(time,q);}//声明运算符重载函数为charge类的友元函数friend ostream & operator<< (ostream & os, charge &ob);friend istream & operator>> (istream & is, charge &ob); };int charge::i=0;//*重载<<运算符函数 *ostream & operator << (ostream & os,charge &ob){os<<<<" "<<ob.kind<<" "<<ob.volumn<<" "<<ob.money<<" "<<ob.time<<" ";return os;}//*重载>>运算符函数 *istream & operator >> (istream & is,charge &ob){is>>;is>>ob.kind;is>>ob.volumn;is>>ob.money;is>>ob.time;return is;}consumer *head=NULL;//用户信息类链表头初始化charge *link=NULL; //收费标准类链表头void load(){}//从硬盘读取用户基本信息void save(){} //将用户信息存入硬盘//由组员郭文君完成void Cload() //从硬盘读取收费信息{ifstream fin("charge.txt",ios::in|ios::nocreate);if(!fin){cout<<"不能打开文件"<<endl<<endl;exit(0);}else{int count,x;fin>>count; //读入收费类型数x=1;while(x<=count){charge *temp= new charge;fin>>*temp; //读入一个用户收费记录到内存//将用户记录插入内存链表if(link == NULL) //链表为空{link = temp;temp->next=NULL;}else //将新节点插入到头结点之前{temp->next = link;link=temp;}x++;}charge::i=count;if(link == NULL) charge::i=0;}fin.close();}void Csave() //将用户收费信息存入硬盘{if(link==NULL) Cload();ofstream fout("charge.txt",ios::out);//存入用户收费记录总条数,以控制读取收费记录时的循环次数fout<<charge::i<<" ";charge *p=link;while(p!=NULL){fout<<*p;p=p->next;}fout.close();link=NULL;cout<<"收费信息保存成功!"<<endl<<endl;}//**用户基本信息管理***//由组员郭文君完成void sub1(){int x;while(x){void sub11();cout<<"**用户基本信息管理**"<<endl;cout<<"********************"<<endl;cout<<"*1>输入用户信息 *"<<endl;cout<<"*2>存盘 *"<<endl;cout<<"*0>返回主菜单 *"<<endl;cout<<"********************"<<endl;cout<<"*请选择:";cin>>x;if(x>=0&&x<=2){switch(x){case 1:sub11();break;case 2:Csave();break;case 0:return;}}elsecout<<"选择有误,请重新选择!"<<endl<<endl;}}void sub11(){char N[20];char L[20];char K[20];float V;char D[20];float P;float sum;cout<<"请输入用户编号:";cin>>L;cout<<"请输入用户类型:";cin>>K;cout<<"请输入用户姓名:";cin>>D;cout<<"请输入用户价格:";cin>>V;if(head == NULL) load();consumer * ptr=head;while(ptr!=NULL){if(strcmp(ptr->getnum(),L)!=0) ptr=ptr->next;else{P=ptr->getprice();strcpy(N,ptr->getname());break;}}charge *temp=new charge(N,K,V,P,D); if(link ==NULL) Cload();if(link==NULL){link=temp;temp->next=NULL;}else{temp->next=link;link=temp;}sum=V*P;cout<<"用户"<<N<<" "<<D<<"的用水量为:"<<V<<"吨。