1、 该模块完成用户查看用户信息、用户资料、近期明细三个文件的查询。此模块比较简单,通过文件逐行读入,然后输出到屏幕上。值得注意的是,这里由于不同函数参数类型的需要,我们使用了多次类型转换。并且,由于用户资料里有用户密码,所以我们通过strstr函数找到密码字段,然后循环continue,不把密码输出到屏幕。1.4转账该模块比较复杂,大体设计是用户1输入要转到用户2的卡号、金额,若余额不足则转账失败,若余额充足,我们则修改用户信息里余额这一字段的数额。关于修改这里,我们通过getline函数把文件逐行读入,通过strstr来查找字符串“余额:”所在的位置,然后修改后面的金额。要注意的是,用户资料文
2、件里有包含时间,所以不能把时间修改了,要把时间这一行的字符串跳过。接下来就是修改近期明细文件,这一方面比较简单,把卡号,金额写入文件里即可。1.5销户这里是要用户确认是否销户,若确定,我们则把该卡号写入申请销户.txt文件,提交内部系统来处理。1.6计算利率 在用户登录并确认其身份后,调用计算利率函数,计算申请时间与当前时间的时间差,再根据利率和余额计算每天的利率,最后改变当前余额的值,修改用户信息里的相关值。1.7内部处理开户申请我们通过读入申请开户.txt文件,然后来让内部人员决定是否同意该用户开户。若同意则不做任何处理,若不同意则通过dos命令删除该用户开户时创立的所有文件。1.8内部处
3、理销户申请销户申请和开户申请类似,只不过是同意销户的时候用dos命令删除用户的所有文件,不同意不做任何处理。2总体设计2.1框架结构图图2- 12.2对各种类的定义以及类内的成员方法以及属性的定义在该程序中一共有四个类class Bank、class Date、class Account、class Administrator,四个类分别对应四种不同的功能。 对于Bank类而言,在Bank类中实现的整个程序中最重要的一部分,可以说是整个系统的主体,里边包括了账号account_ID、姓名name、性别sex、住址address、密码password、余额money、利率rate、创建时间bui
4、ltYears、存储至哪一年totalYears等属性,每一个都是用string类型进行存储的,因为每个长短不同,具体实现的时候会进行格式转换。还有包括了开户void add_Account(Bank* bank)、销户void delete_Account(Bank* bank,Administrator *admin)、查找void inquiry_bank(Administrator *admin,Bank *bank)、显示信息void show_bank(Bank* bank)、存款void save_money(Administrator *admin,Bank *bank)、取款
5、void draw_money(Administrator *admin,Bank *bank)、计算利率void comculat_Rate(Bank *bank,Administrator *admin)等方法,含括了基本上所有的账户操作,其中的开户和销户进行操作的时候会进行内部处理。而且所有的文件都是存储到.txt的项目源文件夹下的,方便程序员查看每一步的操作。其中在属性中有一个建立日期builtYears和存储至哪一年totalYears都是Date-类的对象。 Date类的定义以及其中的类的属性了成员方法的定义,Date类包含了年year、月month、日day、时h、分m、秒s等成
6、员属性,因为这些属性都占用字节比较小,所以基本上都用的是int作为数据类型进行操作的,该类算是以Bank类为主题的辅助Bank类的一个辅助类,用于获取系统当前时间以及输入要存储的年份的时候使用其类的属性进行变量辅助。其中的方法都是返回一个日期的相关量的,有一个计算年差的方法int distance(const Date& date)const是为了辅助Bank类中计算利率的时候用的。在用户类中,主要是为了用户登录使用的一个进入系统的用户类,可以说是一个周转站用于进行Bank类中的方法进行的入口类。3、详细设计在银行定期存储管理系统中,我负责的是系统时间的调用和开户模块。3.1.系统时间的调用(
7、1)设计思路:首先创建一个Date类,私有成员为日期的具体日 期,成员函数的作用是获取具体年、月、日、时、分、秒、星期几。 isLeapYear()函数是判断是否为闰年; Distance()函数是计算时间 差的函数,为当前日期减去公元一月一日的日期差。 time_t curtime=time(0);tm tim =*localtime(&curtime);tm其实是一 个结构体,里面有时间的信息。年月日时分秒,相关信息可以自行查看。 由于time_t类型的数据其实是一个unsigned的数字,不能区分出时分 时分秒年月日。Localtime这个函数就是将time_t的数据转换成tm这 样的结
8、构体,这样做是为了更好地当前时间的年月日时分秒。(2)相关代码: #includeBank.h #ifndef _DATE_H_ #define _DATE_H_ class Date friend class Bank; private: int year;/年 int month;/月 int day;/日 int h;/时 int m;/分 int s;/秒 int dayOfWeek;/星期几 int totalDays;/公元元年一月一日开始的第几天 public: Date(); int getMaxDay() const;/获得当月一共有多少天 int getYear() con
9、streturn year; int getMonth() constreturn month; int getDay() constreturn day; int getS() constreturn s; int getM() constreturn m; int getH() constreturn h; int getDOW() constreturn dayOfWeek; /判断是否为闰年 bool isLeapYear()const return year%4=0&year%100!=0|year%400=0; /计算日期差 int distance(const Date& dat
10、e)const return totalDays-date.totalDays; void show() const; ; #endifDate.h #includetime.h using namespace std; /int Date:totalDays=0;/总天数设定为0 /获取系统的日期时间 namespace /存储木平年的某个月1日之前有多少天 constintDAYS_BEFORE_MONTH=0,31,59,90,120,151,181,212,243,27 3,304,334,365; Date:Date() tm tim =*localtime(& day=tim.tm
11、_mday; month=tim.tm_mon+1; year=tim.tm_year+1900; h=tim.tm_hour; m=tim.tm_min; s=tim.tm_sec; dayOfWeek=tim.tm_wday; int years=year-1; totalDays=years*365+years/4-years/100+years/400+DAYS_BEFORE_MO NTHmonth-1+day; if(isLeapYear()&month2) totalDays+; void Date:show() const coutgetYear()-getMonth()getD
12、ay() getH()时getM()分getS()bank-name;请输入性别:sex;请输入身份证号:ID;请输入您的住址:address;请输入密码:password; while(bank-password.length()!=6) cout请再次输入密码:password_copy; if(bank-password!=password_copy) while(bank- cout srand(time(0);/设置随机数种子 long num_=(rand()%9000+1000);/随机后四位的账号 char num5; itoa(num_,num,10);/数字转换字符数组 s
13、tring str=num;/字符数组转换字符串 bank-account_ID=1305104account_ID.append(num);/最后几位存入到卡号中用户创建成功! for(int i=0;i10;i+)| _sleep(0.5*1000);/每次延迟0.5秒 相关函数解释:srand(time(0);就是给这个算法一个启动种子,也就是算法的随机种子数,有这个数以后才可以产生随机数。itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转移数字时所用的基数,代码中是将数字转换为字符数组。 std:stringstream sfi
14、le; sfile用户资料account_ID;.txtstring strfile=sfile.str(); /创建用户的资料文档,写入相关数据stringstream sfile_1;/创建字符串输出流 sfile_1用户信息string strfile_1=sfile_1.str();/返回输出流生成的字符串 ofstream f_2in(strfile_1.c_str(); /创建近期明细文档stringstream sfile_2; sfile_2近期明细string strfile_2=sfile_2.str(); ofstream f_3in(strfile_2.c_str();
15、 f_3in.close(); /将银行卡账号写入总文档中 ofstream fin; fin.open(用户.txt,ios_base:app);/打开文档并输入到末尾 finaccount_ID fin.close(); 以上代码是用C+流的输入输出来创建用户资料,用户信息,近期明细3个文件夹。用户资料用来存储姓名,性别,身份证号,住址,密码这些个人信息。用户信息和近期明细两个文件的创建方法与用户资料是一样的。用户信息用来存储银行卡余额及存入时间。近期明细存储用户近期银行卡收入支出情况。std:是创建字符串输出流的一个对象sfile,将3个类型不同的字符串合并,返回输出流生成的字符串。然后
16、生成.TXT文档,3个文档的创建方法相同。4、系统调试4.1问题一:如何读取当前的系统时间? 解决方法:查找资料找到time_t curtime=time(0);相关代码并解决。 问题二:一些函数的参数类型不同,如何统一?强制类型转换,例如学会了itoa函数的使用方法。 问题三:如何使用C+流的输入输出来读取文件,保存数据?创建字符串输出流,把3个不同的 字符串合并一起,最后返回输出流生成的字符串。便可创建一个.txt文档, 用来保存用户个人信息。4.2屏幕截图图4-2- 1图4-2- 2图4-2- 35、结果分析该课程设计的目的采用面向对象的程序设计语言,开发实现一个应用程序,学生更好的掌握
17、面向对象程序设计语言及其开发工具,掌握如何使用面向对象的程序设计语言设计一个小的软件系统。通过该课程设计培养学生分析和解决实际问题的能力,培养学生综合应用基本概念,基本原理,和技术方法的能力,真正做到学以致用,使课本上抽象的理论,方法与具体的实践应用相结合。6、结论与体会这次的课程设计实验是对我们C+语言学习成果的一次大考验。自己动手,发现问题和解决问题。并发现了许多自己的不足,平时没掌握的知识在实践中暴漏,经过不断的思考,查阅书籍和上网查资料及上机运行,解决了大部分问题,还稍微有些小问题。但是,我相信在今后的学习中,一定能把它解决好。 整理后进行综合应用,最后对所需资料及要编的程序进行整理得出最后程序。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1