+c+程序设计课程设计说明个人信用卡管理系统--大学毕设论文.doc
C+程序设计课程设计说明书题 目个人信用卡管理系统学 号姓 名指导教师日 期内蒙古科技大学课程设计任务书课程名称C+语言课程设计设计题目个人信用卡管理系统的设计指导教师时间2015-2016春学期 第17、18周一、教学要求1. 巩固和加深学生对C+语言课程的基本知识的理解和掌握2. 掌握C+语言编程和程序调试的基本技能3. 利用C+语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C+语言解决实际问题的能力二、设计资料及参数用C+设计一个系统,能提供下列服务:(1) 录入信用卡信息,格式为:卡号名称账单日还款日余额6542301100220605中行淘宝卡5号25-126.5(2) 增加功能。输入卡号或名称向信用卡使用记录中增加一条记录;格式为:卡号名称日期金额类型6542301100220605中行淘宝卡11-212.4消费(或还款)如果是消费则信用卡余额减去金额,如果是还款则信用卡余额加上金额。(3) 查询功能。查询某个信用卡详细的使用记录;可以查询已出账单,即本月账单日和上月账单日之间的消费记录和消费总额;查询未出账单,及本月账单日之后的消费记录和消费总额。(4) 提醒功能。在某个信用卡还款日期的前2天给出提示信息,提示要还款的总额。三、设计要求及成果根据系统功能要求,可以将问题解决分为以下步骤:(1)分析系统中的各个实体之间的关系及其属性和行为;(2)根据问题描述,设计系统的类层次;(3)完成类层次中各个类的描述(包括属性和力一法);(4)完成类中各个成员函数的定义;(5)完成系统的应用模块;(6)功能调试;(7)提交课程设计报告:完成系统总结报告以及系统使用说明书目录第1章 需求分析4第2章 总体设计4第3章 类的设计43.1 ×××类的设计43.2 ×××类的设计5第4章 详细设计54.1 工程视图54.2 类图视图54.3 函数的调用关系64.4 主程序流程图64.5 主要算法的流程图6第5章 测试6第6章 总结6附录:程序代码7第1章 需求分析1.1引言随着目前计算机技术的发展,越来越多的生活工具机械化、方便化、人们需要的东西也越来越人性化。同时,为了巩固和加深学生对C+语言课程的基本知识的理解和掌握,掌握C+语言编程和程序调试的基本技能, 利用C+语言进行基本的软件设计,掌握书写程序设计说明文档的能力提高运用C+语言解决实际问题的能力。1.2任务概述本程序是对个人信用卡的管理,对个人信用卡信息的录入,存储,查询消费记录,还款记录以及还款提醒。1.3数据描述个人信用卡管理系统中包括创建账号,查询已有账号的信息,提醒还款,显示全部用户,退出等。试设计一个个人信用卡管理系统,使之能提供以下功能:个人信用卡信息录入功能输入;个人信用卡信息显示功能输出;个人信用卡消费/还款功能;查找信用卡及信息:按卡号查询,按消费金额区间查询,按消费日期查询;查看不良欠款记录:超过消费日80天为不良记录;1.4功能需求首先,需要创建一个主界面,包含“录入信息,消费/还款功能,账单记录,还款提醒,所有信用卡信息”。其次开始对个人信息的录入,调用成员函数void luru()进行录入,个人信用卡信息用文件保存,用户录入一条新记录信息后,这些信息就存入到相应的文件中;其中包括录入个人信用卡的卡号、户名、日期等具体信息。消费/还款功能调用成员函数void zengjia()记录消费或还款。账单记录,对个人的消费,还款记录进行查询,用户可以输入卡号在录入的信用卡中进行查询。这使我们更深入的了解对信用卡的管理,更熟练的掌握信用卡的录入,存储,记录。1.5任务计划(1)以文字和数字形式输入信息。(2)程序包含录入功能,显示功能,查询功能,提醒功能,初始化功能等。(2)若输入结果有误,则重新输入,若输入正确,则继续按照程序顺序执行。第2章 总体设计个人信用卡管理系统的操作以及总体框架的设计:按卡号查找按消费金额查找按消费日期查找消费还款功能查看所有账单查看已出账单查看未出账单上季度账单账单记录查找信用卡及信息不良记录查询Card类(包含信用卡的初始信息)public 继承录入账户基本信息查找已录入信用卡提醒还款功能显示所有用户信息Record类(所有消费记录)1.框架:2.文字描述:1、 首先创建文件。提前创建好txt文件,一个是基类Card的文件,另一个是派生类Recard的文件。2、 进入主界面选择要进行的操作3、 录入信息(输入卡号 如:6542301100220605,名称 如 中行淘宝卡;账单日 如5号 还款日 如25号 余额 如123.5)4、 消费/还款(卡号 如6542301100220605;名称 如中行淘宝卡;日期 如 11-2 金额 如12.4元 类型 消费或还款 )5、 使用记录:使用记录包括:查看所有账单、查看已出账单、查看未出账6、 提醒功能 如果还有两天还款,则有提醒7、 所有信用卡信息 显示已录入的使用信用卡信息包括欠款,余额,初始信用额度等。8、 查找信用卡及信息 通过 1.按卡号查找 2.消费金额区间查找 3.日期区间查找 第3章 类的设计3.1 Card类的设计Class Card数据成员: char cardnum20;char name20;int startday;int backday;double yu_e;double Sum;/double YU_e;/函数成员: Card()/构造函数void Set(char* cnum,char* cname,int cstartday,int cbackday,double cyu_e,double CYU_e);/初始化,给信用卡对象数组中的数据成员赋值void jie_huan(double money,char* type)/这个函数用于在后边进行余额的计算和欠款的总额的计算,当为消费类型的时候,余额-消费额=新的余额 、消费额Sum增加,当为消费类型的时候,余额+还债额=现有余额、消费额Sum减少。void luru();/输入信用卡的基本信息,如卡号、卡的名称、账单日、还款日、信用额等数据后,再调用Set函数给对象数组赋值。void tixing();/提醒函数,调用电脑当前时间,在某个信用卡还款日期的前2天给出提示信息,提示要还款的总额。void display();/显示所有信用卡的当前信息int searchCard();/输入一个卡号在当前所有记录中查找,存在的话返回一个数值i。;3.2 Record 类的设计(Card的派生类)Class Card数据成员: double money;char type20; int month; int day; 函数成员:Record()/构造函数void Set(char* cnum,char* cname,int Month,int Day,double Money,char* Type);/初始化,给消费记录对象数组中的数据成员赋值void zengjia();/通过查找函数对已录入的信用卡进行消费和还款工作。void shiyongjilu();/使用记录 void all_jilu();/消费还款的所有记录和消费还款总额。void yichu_jilu();/已出记录即本月账单日和上月账单日之间的消费记录和消费总额。void weichu_jilu();/未出记录及本月账单日之后的消费记录和消费总额。void chaozhaojiemian();/查找信用卡及信息 void jin_e();/消费金额区间查找 void kahao();/按卡号查找void riqi();日期区间查找 void xinyong();/查看不良欠款记录void loadData();/对文件进行读取void saveData();/对文件进行存储,建立card、record的txt文本文档。;第4章 详细设计4.1 工程视图图4-14.2 类图视图图4-24.3 函数的调用关系welcome()gongneng()r.loadData ()r.saveData ()主函数模块main()消费、还款模块r.zengjia()c.searchCard()c.jie_huan()功能函数模块gongneng()r.luru()tuichu()r.disply()r.tixing()r.shiyongjilu()r.zengjia()r.chaozhaojiemian()r.xinyong()账单模块r.shiyongjilu()weichu_jilu()all_jilu()yichu_jilu() ()jidu_jilu()查找模块r.chaozhaojiemian()riqi()kahao()jin_e()如下图:c.searchCard()c.jie_huan()Set()welcome()gongneng()loadData ()saveData ()主函数main()weichu_jilu()all_jilu()yichu_jilu() ()jidu_jilu()luru()tuichu()r.disply()r.tixing()r.shiyongjilu()r.zengjia()r.chaozhaojiemian()r.xinyong()riqi()searchCard()jin_e()kahao()4.4 主程序流程图第5章 测试1.欢迎界面:图5-12.功能界面:图5-23.录入功能:图5-3图5-44.消费还款功能:图5-55.使用记录界面:图5-6 所有账单:图5-7 已出账单:图5-8 未出账单:图5-9 上季度账单:6.还款提醒:图5-107.所有信用卡信息:图5-118.查找界面:图5-12 按卡号查找:图5-13图5-14图5-15 按消费金额查找:图5-16图5-17图5-18图5-19 按消费日期查找:图5-209.不良欠款图5-2110退出界面:图5-22第6章 总结课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。在这一周的程序设计练习当中并不是一帆风顺的。刚开始到指导老师面前听了一大堆,我根本就不知道要做什么,用什么做。我并没有被眼前的一点小困难所击倒,我相信困难总是有办法解决的。于是开始的两天我就在图书馆找相关图书。通过两天的原始知识积累后,我开始尝试着按照自己的想法做了一些小系统。起初会出现很多问题,不是这儿少了就是那错了。在这样那样的错误中我明白编程是一件很严谨的事,容不得半点错误,一步走错,全盘皆输!在出现错误读不懂时我通常是上网搜索错误原因,往往一个问题的解决方法是多种多样的,各自有其精妙之处。有的解决方法浅显易懂,但是易出现漏洞;有的复杂难懂,但是逻辑紧密,无丝毫破绽。编程是一门逻辑的游戏,一但了解其游戏规则,便发现乐趣无穷。有时候自己有很多的想法,但由于自己的水平有限不能很好地实现,每到那时候我就有一种强烈的愿望想要把问题解决,做出自己想的东西。一但解决了问题,那种快乐非亲身经历者不能感受!这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢。附录:程序代码#include <iostream>#include <algorithm>#include <fstream>#include <cstdio>#include <string>#include <ctime>/获取时间的文件的声明using namespace std;/信用卡类class Cardpublic:char cardnum20; char name20; int startday; int backday; double yu_e;double Sum;/欠款总额double YU_e;/初始额度Card()void Set(char* cnum,char* cname,int cstartday,int cbackday,double cyu_e,double CYU_e);/初始化 void jie_huan(double money,char* type)if( strcmp(type,"消费")=0 )yu_e=yu_e-money;Sum=Sum+money;else if( strcmp(type,"还款")=0 )yu_e=yu_e+money;Sum=Sum-money;void luru();/录入void tixing();/提醒函数void display();int searchCard();/消费记录类class Record : public Cardpublic: Record()void Set(char* cnum,char* cname,int Month,int Day,double Money,char* Type);/初始化 void zengjia();void shiyongjilu();/使用记录 void all_jilu();void yichu_jilu();void weichu_jilu(); void jidu_jilu();void loadData();void saveData();void jin_e();void kahao();void chaozhaojiemian(); void riqi();void xinyong();private: double money; char type20;int month;int day;const int CMAX=20;/信用卡存储数量const int RMAX=100;/消费记录存储数量Card cardCMAX;Record recordRMAX;int c_num=0,r_num=0;/*-Card类实现-*/初始化信用卡函数void Card: Set(char* cnum,char* cname,int cstartday,int cbackday,double cyu_e,double CYU_e)strcpy(cardnum,cnum);strcpy(name,cname);startday=cstartday;backday=cbackday;yu_e=cyu_e;YU_e=CYU_e;/*-录入模块-*/void Card:luru()char cardnum20; char name20; int startday; int backday; double yu_e; double YU_e;int a;system("cls");cout<<"t*n"cout<<"t| 个人信用卡管理系统 |n"cout<<"t| -录入信息 |n"cout<<"t*nn"jixu:cout<<"请输入信用卡号:n"cin>>cardnum;bool right=true;for(int j=0;j<c_num;j+)if(strcmp(cardj.cardnum,cardnum)=0)right=false;break;while( !right )cout<<"已经保存有这个卡号n"cout<<"请输入新的卡号:n"cin>>cardnum;right=true;for(int j=0;j<c_num;j+)if(strcmp(cardj.cardnum,cardnum)=0)right=false;break;cout<<"请输入信用卡名称:n"cin>>name;start:cout<<"请输入账单日(1-31):n"cin>>startday;if(1>startday|startday>31)cout<<"输入有误!请重新输入n"goto start;back:cout<<"请输入还款日(1-31):n"cin>>backday;if(1>backday|backday>31)cout<<"输入有误!请重新输入n"goto back;cout<<"请输入余额:n"cin>>yu_e;YU_e=yu_e;cardc_num.Set(cardnum,name,startday,backday,yu_e,YU_e);c_num+;cout<<"录入成功,回车继续n"cin.get();cin.get();ifstart:system("cls");cout<<"t*n"cout<<"t| 1.继续录入 2.返回主菜单 |n"cout<<"t*nn"cout<<"选择您要进行的操作:"cin>>a;if(a=1)goto jixu;if(a=2)if(a!=1&&a!=2)cout<<"输入错误,请重新输入(1/2)n"cin.get();cin.get();goto ifstart;/*-*/查找函数int Card:searchCard()int i=-1;bool right=false;char cardnum20;cout<<"请输入信用卡号:n"cin>>cardnum;for(int j=0;j<c_num;j+)if(strcmp(cardj.cardnum,cardnum)=0)i=j;right=true;break;while( !right )cout<<"没有找到您刚刚输入的这个卡号n"cout<<"请重新输入卡号:"cin>>cardnum;for(int j=0;j<c_num;j+)if(strcmp(cardj.cardnum,cardnum)=0)i=j;right=true;break;return i;/*-提醒模块-*/void Card:tixing()long t = time(NULL);tm* pt = localtime(&t);int month = pt->tm_mon + 1;int day = pt->tm_mday;system("cls");cout<<"tt=n"cout<<"tt| 个人信用卡管理系统 |n"cout<<"tt=nn"cout<<"tt 还款提醒 nn"for(int j=0;j<c_num;j+)if(!(cardj.backday-day>0&&cardj.backday-day<=2&&cardj.Sum>0|31<=day+backday&&day+backday<=32&&cardj.Sum>0)continue;cout<<"卡号: "<<cardj.cardnum<<" | "cout<<"名称: "<<cardj.name<<" | "cout<<"应还款日期: "<<month<<"月"cout<<cardj.backday<<"日 | "cout<<"金额: "<<cardj.Sum<<"元nnn"/显示所有卡void Card:display()int j;cout<<"tt=n"cout<<"tt| 您的信用卡信息 |n"cout<<"tt=nnn"for(j=0;j<c_num;j+)cout<<"卡号: "<<cardj.cardnum<<" | "cout<<"名称: "<<cardj.name<<" | "cout<<"账单日: "<<cardj.startday<<" | "cout<<"还款日: "<<cardj.backday<<" | "cout<<"初始额度: "<<cardj.YU_e<<" | "cout<<"消费额: "<<cardj.Sum<<" | "cout<<"余额: "<<cardj.yu_e<<endl;cout<<"键入回车返回"/*-*/*-Record类的实现-*/初始化消费记录函数void Record: Set(char* cnum,char* cname,int Month,int Day,double Money,char* Type)strcpy(cardnum,cnum);strcpy(name,cname);month=Month;day=Day;money=Money;strcpy(type,Type);/*-消费还款模块-*/void Record:zengjia()int month;int day;double money; char type20;int i=-1; system("cls");cout<<"t*n"cout<<"t| 个人信用卡管理系统 |n"cout<<"t| -消费/还款 |n"cout<<"t*n"i=searchCard();cout<<"请输入类型(还款/消费):n"cin>>type;while( strcmp(type,"消费") !=0 && strcmp(type,"还款") !=0 )cout<<"您输入的类型有误n"cout<<"请重新输入类型(还款/消费):"cin>>type;Month:cout<<"请输入月份(1-12):n"cin>>month;if(month<1|month>12)cout<<"输入有误,请输入(1-12)n"goto Month;Day:cout<<"请输入几号(1-31):n"cin>>day;if(day<1|day>31)cout<<"输入有误,请输入(1-31)n"goto Day;Money:cout<<"输入金额:n"cin>>money;if(strcmp(type,"消费")=0)if(cardi.yu_e<money)cout<<"输入有误!您的现有信用额度为 "<<cardi.yu_e<<" 元"<<endl;cout<<"请重新输入!n"cin.get();goto Money;elserecordr_num.Set(cardi.cardnum,cardi.name,month,day,money,type);r_num+;cardi.jie_huan(money,type);elseif(cardi.YU_e>cardi.yu_e)recordr_num.Set(cardi.cardnum,cardi.name,month,day,money,type);r_num+;cardi.jie_huan(money,type);elsecout<<"您的还款数额不对,您的欠款为: "<<cardi.Sum<<" 元n"cin.get();cin.get();cout<<"操作成功!键入回车返回"cin.get();/*-*/*-账单模块-*/void Record:shiyongjilu()int chazhao,y=1;while(y)system("cls");cout<<"tt=n"cout<<"tt| 个人信用卡管理系统 |n"cout<<"tt=nn"cout<<"tt >>>>>> 查询账单子菜单 <<<<<< n"cout<<"tt 1.查看所有账单 n"cout<<"tt 2.查看已出账单 n"cout<<"tt 3.查看未出账单 n"cout<<"tt 4.查看上季度账单 n"cout<<"tt 0.返回主菜单 n"cout<<endl;cout<<"请选择你所需要的功能:n"cin>>chazhao;switch(chazhao)case 1: all_jilu();cin.get();cin.get();break;case 2: yichu_jilu();cin.get(); cin.get();break;case 3: weichu_jilu();cin.get();cin.get();break;case 4: jidu_jilu();cin.get();cin.get();break;case 0:y=0;break;default:cout<<"输入有误,请键入回车重新输入"<<endl;cin.get();/所有记录void Record:all_jilu()double sum=0;system("cls");cout<<"tt=n"cout<<"tt| 您的所有账单 |n"cout<<"tt=nnn"for(int j=0;j<r_num;j+)cout<<"卡号: "<<recordj.cardnum<<" | "cout<<"名称: "<<recordj.name<<" | "cout<<"日期: "<<recordj.month<<" 月 "cout<<recordj.day<<"日 | "cout<<"类型: "<<recordj.type<<" | "cout<<"金额: "<<recordj.money<<"元nnn"if( strcmp(recordj.type,"还款")=0 )sum=sum-reco