《c课设个人信用卡管理系统最新】.doc》由会员分享,可在线阅读,更多相关《c课设个人信用卡管理系统最新】.doc(86页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C+程序设计课 程 设 计 说 明 书题 目个人信用卡管理系统学 号1367159113姓 名王岩指导教师周李涌日 期2014-06-29课程名称C+语言课程设计设计题目个人信用卡管理系统的设计指导教师时间2011-2012春学期 第17、18周一、教学要求1. 巩固和加深学生对C+语言课程的基本知识的理解和掌握2. 掌握C+语言编程和程序调试的基本技能3. 利用C+语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C+语言解决实际问题的能力二、设计资料及参数用C+设计一个系统,能提供下列服务:(1) 录入信用卡信息,格式为:卡号名称账单日还款日余额65423011002
2、20605中行淘宝卡5号25(2) 增加功能。输入卡号或名称向信用卡使用记录中增加一条记录;格式为:卡号名称日期金额类型6542301100220605中行淘宝卡11-2消费(或还款)如果是消费则信用卡余额减去金额,如果是还款则信用卡余额加上金额。(3) 查询功能。查询某个信用卡详细的使用记录;可以查询已出账单,即本月账单日和上月账单日之间的消费记录和消费总额;查询未出账单,及本月账单日之后的消费记录和消费总额。(4) 提醒功能。在某个信用卡还款日期的前2天给出提示信息,提示要还款的总额。三、设计要求及成果根据系统功能要求,可以将问题解决分为以下步骤:(1)分析系统中的各个实体之间的关系及其属
3、性和行为;(2)根据问题描述,设计系统的类层次;(3)完成类层次中各个类的描述(包括属性和力一法);(4)完成类中各个成员函数的定义;(5)完成系统的应用模块;(6)功能调试;目录目录2第1章 需求分析4第2章 总体设计4第3章 类的设计43.1 Date类的设计43.2 CreditCard类的设计5第4章 详细设计74.1 工程视图74.2 类图视图74.3 函数的调用关系84.4 主程序流程图9第5章 测试10第6章 总结18附录:程序代码19内蒙古科技大学课程设计任务书第1章 需求分析 随着目前计算机技术的发展,越来越多的生活工具机械化、方便化、人们需要的东西也越来越人性化。同时,为了
4、巩固和加深学生对C+语言课程的基本知识的理解和掌握,掌握C+语言编程和程序调试的基本技能, 利用C+语言进行基本的软件设计,掌握书写程序设计说明文档的能力 提高运用C+语言解决实际问题的能力。本程序是对个人行用卡的管理,对个人信用卡信息的录入,存储,查询。包括消费记录,还款记录以及还款提醒。首先,需要创建一个主界面,包含“录入信息,增加功能,使用记录,还款提醒”。其次开始对个人信息的录入void luru()个人信用卡信息用文件保存,用户录入一条新记录信息后,这些信息就存入到相应的文件中;其中包括录入个人信用卡的卡号、户名、日期等具体信息。.增加功能void zengjia()记录消费或还款(
5、注意输入类型)。查询功能,对个人的余额,消费,还款记录进行查询,用户可以根据卡号,户名等条件在数组中进行查询。这使我们更深入的了解对信用卡的管理,更熟练的掌握信用卡的录入,存储,记录。, 第2章 总体设计个人信用卡管理系统的操作以及总体框架的设计:1、 首先创建文件。提前创建好txt文件,一个是基类CReditCard的文件,另一个是派生类Recard的文件。2、 进入主界面选择要进行的操作3、 录入信息(输入卡号 如:6542301100220605,名称 如 建行;账单日 如5号 还款日 如25号 余额 如123.5)4、 增添信息(卡号 如6542301100220605;名称 如 建行
6、 ;日期 如 11-2 金额 如22元 类型 消费或还款 )5、 使用记录:使用记录包括:查看所有账单、查看已出账单、查看未出账6、 提醒功能 如果还有两天还款,则有提醒第3章 类的设计3.1 Date类的设计Class Datepublic:int month;int day; ;数据成员: month、day。用来定义在派生类Record中记账日日期的函数;3.2 CreditCard类的设计Class CreditCardpublic: char cardNumber20; char name20; int billDay; int repayDay; double balance;Cr
7、editCard()void intoFile ();void init(char* cardNumber,char* name,int billDay,int repayDay,double balance);/初始化 void renewBalance(double money,char* type)if( strcmp(type,消费)=0 )this-balance=this-balance-money;else if( strcmp(type,还款)=0 )this-balance=this-balance+money;数据成员: cardNumber 卡号name 姓名billDa
8、y 账单日repayDate 还款日balance 余额函数成员:CreditDate()构造函数intoFile ()init(char* cardNumber,char* name,int billDay,int repayDay,double balance)这个函数主要是将CreditCard这个类里边的成员函数放在一起,对于文件的存取有很好的作用renewBalance(double money,char* type) 这个函数适用于在后边进行余额的计算的时候用到的,当时消费类型的时候,余额-消费额=新的余额 否则就是余额+还债额。3.3 Record 类的设计(CreditCard
9、的派生类)class Record : public CreditCardpublic: Date date; double money; char type20;Record()void init(char* cardNumber,char* name,int month,int day,double money,char* type);/初始化 ;/定义两个全局变量 以后用着方便const int MaxCardNum=10;/最大信用卡记录存储数量const int MaxRecordNum=100;/最大消费记录存储数量CreditCard cardMaxCardNum;Record
10、recordMaxRecordNum;int c_num=0,r_num=0;void jiemian();/界面函数void shiyongjilu();/使用记录void xiaofeizonge();/消费总额void tixing();/提醒函数/初始化信用卡函数void CreditCard: init(char* cardNumber,char* name,int billDay,int repayDay,double balance)strcpy(this-cardNumber,cardNumber);strcpy(this-name,name);this-billDay=bil
11、lDay;this-repayDay=repayDay;this-balance=balance;第4章 详细设计4.1 工程视图说明有几个源代码文件,可以截取工程文件视图表示 工程视图4.2 类图视图每个文件包含哪些类和函数,可以截图说明 类图4.3 函数的调用关系如下图:Main函数zengjia()Jiemian()tixing()shiyongjilu()luru()loadDate()Card.init()luru()csrd.renewBalance()zengjiasearchCard()shiyongjilu()showNopayingRecord()showNextPayin
12、gRecord()showAllRecord() 函数的调用关系4.4 程序功能开始录入信息增添信息查询信息提醒功能查看所有账单查看已出账单查看未出账单 功能图第5章 测试开始,首先创建了两个文件,方便而且不用后期创建。读取此时对应的函数是:void loadData()ifstream file(card.txt,ios:in);if (!file) ofstream file1(card.txt,ios:out);file1卡号 名称 账单日 还款日 余额endl;file1.close();elsecoutcardc_num.cardNumbercardc_num.cardNumberc
13、ardc_num.cardNumbercardc_num.cardNumbercardc_num.cardNumber;while( !file.eof()filecardc_num.cardNumber;filecardc_num.name;filecardc_num.billDay;filecardc_num.repayDay;filecardc_num.balance;c_num+;c_num-;file .close();cout信用卡信息读取完毕!endlendl;ifstream loadFromFile ( record.txt ,ios:in) ;if (!loadFromFi
14、le) ofstream file1(record.txt,ios:out);file1卡号 名称 月份 几号 金额 类型endl;file1.close();elsecoutrecordr_num.cardNumberrecordr_num.cardNumberrecordr_num.cardNumberrecordr_num.cardNumberrecordr_num.cardNumberrecordr_num.cardNumber;while( !loadFromFile.eof()loadFromFilerecordr_num.cardNumber;loadFromFilerecord
15、r_num.name;loadFromFilerecordr_num.date.month;loadFromFilerecordr_num.type;loadFromFilerecordr_num.date.day;loadFromFilerecordr_num.money;loadFromFilerecordr_num.type;r_num+;r_num-;loadFromFile .close();cout消费记录信息读取完毕!endlendl;而后 进入主界面 主界面这是 主界面函数为:void jiemian()system(cls);cout*endl;cout/* 个人信用卡管理系
16、统 */endl;coutn;cout 1、录入信息 endl;cout 2、增加功能 endl;cout 3、使用记录 endl;cout 4、还款提醒 endl;coutn;cout请输入要选择的功能,按0结束: ;录入信息阶段: 录入信息界面此模块 的函数代码为:void luru()char cardNumber20; char name20; int billDay; int repayDay; double balance;system(cls);cout*endl;cout/* 个人信用卡管理系统 */endl;coutn;cout 录入功能 endl;coutendl; cou
17、tendl; coutcardNumber;bool isright=true;for(int j=0;jc_num;j+)if(strcmp(cardj.cardNumber,cardNumber)=0)isright=false;break;while( !isright )cout已经保存有这个卡号n;coutcardNumber;isright=true;for(int j=0;jc_num;j+)if(strcmp(cardj.cardNumber,cardNumber)=0)isright=false;break;coutname;coutbillDay;coutrepayDay;
18、coutbalance;cardc_num.init(cardNumber,name,billDay,repayDay,balance);c_num+;增加模块: 增加功能界面代码:void zengjia()int month;int day;double money; char type20;int i=-1; system(cls); cout*endl; cout/* 个人信用卡管理系统 */endl; coutn; cout 增加功能 endl;i=searchCard();coutmonth;coutday;coutmoney;couttype;while( strcmp(type
19、,消费) !=0 & strcmp(type,还款) !=0 )cout您输入的类型有误n;couttype;recordr_num.init(cardi.cardNumber,cardi.name,month,day,money,type);r_num+;cardi.renewBalance(money,type);查询功能:1、 查询全部账单 查询全部账单界面void showAllRecord()double sum=0;cout卡号tt 名称tt日 期t类型t金额endl;for(int j=0;jr_num;j+)coutrecordj.cardNumber ;coutrecordj
20、.namet;coutrecordj.date.month 月 ;coutrecordj.date.dayt;coutrecordj.typet;coutrecordj.money元endl;if( strcmp(recordj.type,还款)=0 )sum=sum-recordj.money;elsesum=sum+recordj.money;cout消费还款小计:sumtm_mon + 1;coutn卡号tt 名称tt日 期t类型t金额endlendl;for(int j=0;j cardi.billDay |recordj.date.month = month & recordj.da
21、te.day cardi.billDay) )continue;coutrecordj.cardNumber ;coutrecordj.namet;coutrecordj.date.month 月 ;coutrecordj.date.dayt;coutrecordj.typet;coutrecordj.money元endl;sum=sum+recordj.money;cout消费总额:sum元nn;3、 查询未出账单 查询未出账单界面代码实现:if( strcmp(recordj.type,还款)=0 )continue;if( strcmp(cardi.cardNumber,recordj.
22、cardNumber )!=0 )continue;if( recordj.date.month month-1 |recordj.date.month = month-1 & recordj.date.day tm_mon + 1;int day = pt-tm_mday;system(cls);cout*endl;cout/* 个人信用卡管理系统 */endl;coutn;cout 备忘&提醒 endl;cout卡号tt 名称tt应还款日期t应还金额endl;for(int j=0;jc_num;j+)if( day+2 0 )continue;coutcardj.cardNumber ;
23、coutcardj.nametmonth月;coutcardj.repayDay日tt;cout0-cardj.balanceendl;第6章 总结 这学期,在上学期C语言的基础之上学了c+面向对象程序设计,c+比C语言更为高级化、这次课设做的是个人信用卡管理系统,这个系统我自己认为是一个个人的信用卡记账本,所以,就按着这样的思路,进行了程序的编写、在程序的编写中,能够很顺利地用到一些简单的编程语言、如for循环 strcpy字符串复制以及strcmp字符串的比较、这些在C语言c+中都是相同的用法。但是不同的在于c+的文件的打开 c+中文件打开需要用到ofstream和ifstream、而且
24、这个程序用文件和数组同时处理的方法、在查询功能中运用时就非常简单了。虽然这次进行了c+的课程设计的训练,但是对于类,还是一个很迷糊的概念,我只能说我会用,我能解决一些关于类的基本错误,但是要我来说类到底是什么东西,我还是说不出来,浅显的看,类包括了public里面的成员函数以及private里面的数据成员,这些是直观上看见的! 其次就是头文件的使用,数据流的头文件以及其他头文件的使用。特别要声明的一点就是using namespace std的使用,不知道把这个问题拿到头文件这一部分来说合适与否,但至少我觉得拿到其他位置不合适,没有这个东西string是使用不了,在c+程序里面我们常常使用的不
25、是char了,而是使用string了,因为这个更合适,或者说它更加的强大,有了char所不具有的功能。 经过练习我学会了一些,但也找到了很多不足,具体的还需要课下进一步回扣与总结。附录:程序代码/个人信用卡管理系统 13-1班 王岩 1367159113#include #include #include #include #include #include #include /获取时间的文件的声明using namespace std;class Datepublic:int month;int day; ;class CreditCardpublic: char cardNumber20;
26、 char name20; int billDay; int repayDay; double balance;CreditCard()void init(char* cardNumber,char* name,int billDay,int repayDay,double balance);/初始化 void renewBalance(double money,char* type)if( strcmp(type,消费)=0 )this-balance=this-balance-money;else if( strcmp(type,还款)=0 )this-balance=this-balan
27、ce+money;class Record : public CreditCardpublic: Date date; double money; char type20;Record()void init(char* cardNumber,char* name,int month,int day,double money,char* type);/初始化 ;/定义全局变量 以后用着方便const int MaxCardNum=10;/最大信用卡记录存储数量const int MaxRecordNum=100;/最大消费记录存储数量CreditCard cardMaxCardNum;Recor
28、d recordMaxRecordNum;int c_num=0,r_num=0;void jiemian();/界面函数void shiyongjilu();/使用记录void tixing();/提醒函数/初始化信用卡函数void CreditCard: init(char* cardNumber,char* name,int billDay,int repayDay,double balance)strcpy(this-cardNumber,cardNumber);strcpy(this-name,name);this-billDay=billDay;this-repayDay=repa
29、yDay;this-balance=balance;/初始化消费记录函数void Record: init(char* cardNumber,char* name,int month,int day,double money,char* type)strcpy(this-cardNumber,cardNumber);strcpy(this-name,name);this-date.month=month;this-date.day=day;this-money=money;strcpy(this-type,type);void luru()char cardNumber20; char nam
30、e20; int billDay; int repayDay; double balance;system(cls);cout*endl;cout/* 个人信用卡管理系统 */endl;coutn;cout 录入功能 endl;coutendl; coutendl; coutcardNumber;bool isright=true;for(int j=0;jc_num;j+)if(strcmp(cardj.cardNumber,cardNumber)=0)isright=false;break;while( !isright )cout已经保存有这个卡号n;coutcardNumber;isr
31、ight=true;for(int j=0;jc_num;j+)if(strcmp(cardj.cardNumber,cardNumber)=0)isright=false;break;coutname;coutbillDay;coutrepayDay;coutbalance;cardc_num.init(cardNumber,name,billDay,repayDay,balance);c_num+;int searchCard()int i=-1;bool isright=false;char cardNumber20;coutcardNumber;for(int j=0;jc_num;j
32、+)if(strcmp(cardj.cardNumber,cardNumber)=0)i=j;isright=true;break;while( !isright )cout没有找到您刚刚输入的这个卡号n;coutcardNumber;for(int j=0;jc_num;j+)if(strcmp(cardj.cardNumber,cardNumber)=0)i=j;isright=true;break;return i;/增加函数void zengjia()int month;int day;double money; char type20;int i=-1; system(cls); cout*endl; cout/* 个人信用卡管理系统 */endl; coutn; cout 增加功能