c语言银行卡管理系统
- 格式:doc
- 大小:160.50 KB
- 文档页数:14
C语言银行管理系统课程设计1. 简介本文档是一个关于C语言银行管理系统的课程设计项目,旨在帮助学生理解银行管理系统的基本原理和功能,并通过编程实现一个简单的银行管理系统。
2. 功能需求银行管理系统主要包含以下几个功能:2.1 用户管理•用户注册:用户可以通过输入个人信息进行注册,包括姓名、身份证号、手机号码等,系统会为每个用户分配一个唯一的用户ID。
•用户登录:用户可以通过输入用户名和密码登录系统。
•用户注销:用户可以选择注销已有账户。
2.2 账户管理•创建账户:用户可以创建多个不同类型的银行账户,包括储蓄账户、支票账户等。
•查询账户余额:用户可以查询某个账户的余额。
•存款:用户可以向账户存入一定金额。
•取款:用户可以从账户取出一定金额。
•转账:用户可以将一定金额从一个账户转入另一个账户。
2.3 交易记录•查询交易记录:用户可以查询自己的交易记录,包括存款、取款和转账等操作的日期、时间和金额。
2.4 管理员功能•管理员登录:管理员可以通过输入用户名和密码登录系统。
•用户管理:管理员可以对用户信息进行管理,包括添加用户、删除用户、修改用户信息等。
•账户管理:管理员可以对账户信息进行管理,包括添加账户、删除账户、修改账户信息等。
•查询统计:管理员可以查询系统中的账户总数和总金额。
3. 设计思路3.1 数据结构系统需要设计合适的数据结构来存储用户和账户信息,可以使用结构体来表示用户和账户,使用链表或数组来存储多个用户和账户。
3.2 用户界面为了方便用户操作,可以设计简单的用户界面,通过菜单选择方式实现用户和管理员的各项功能。
3.3 数据持久化为了保证用户和账户信息的长期存储,可以将数据存储在文件中,例如使用文本文件存储用户和账户信息。
3.4 安全性考虑为了保护用户个人信息和账户安全,需要对用户密码进行加密存储,并且在输入密码时进行隐藏处理。
4. 开发环境和工具本项目可以在以下开发环境和工具下开发:•操作系统:Windows、Linux、MacOS等。
银行管理系统c语言程序设计代码以下是一个简单的银行管理系统的C语言程序设计代码示例:```c#include <stdio.h>#include <stdlib.h>struct BankAccount {int accountNumber;char accountHolder[50];float balance;};void createAccount(struct BankAccount *account) {printf("请输入账户号码: ");scanf("%d", &(account->accountNumber));printf("请输入账户持有人姓名: ");scanf("%s", account->accountHolder);printf("请输入账户余额: ");scanf("%f", &(account->balance));printf("账户创建成功!\n");}void deposit(struct BankAccount *account) {float amount;printf("请输入存款金额: ");scanf("%f", &amount);account->balance += amount;printf("存款成功!\n");}void withdraw(struct BankAccount *account) {float amount;printf("请输入取款金额: ");scanf("%f", &amount);if (amount > account->balance) {printf("余额不足,取款失败!\n");} else {account->balance -= amount;printf("取款成功!\n");}}void displayAccount(struct BankAccount *account) {printf("账户号码: %d\n", account->accountNumber);printf("账户持有人姓名: %s\n", account->accountHolder); printf("账户余额: %.2f\n", account->balance);}int main() {struct BankAccount account;int choice;while (1) {printf("\n银行管理系统\n");printf("1. 创建账户\n");printf("2. 存款\n");printf("3. 取款\n");printf("4. 显示账户信息\n");printf("5. 退出\n");printf("请选择操作: ");scanf("%d", &choice);switch (choice) {case 1:createAccount(&account); break;case 2:deposit(&account);break;case 3:withdraw(&account);break;case 4:displayAccount(&account);break;case 5:printf("感谢使用银行管理系统,再见!\n");exit(0);default:printf("无效的选择,请重新输入。
c语言课程设计银行系统一、教学目标本课程的目标是让学生掌握C语言编程基础,能够运用C语言实现简单的银行系统。
通过本课程的学习,学生应达到以下知识目标:1.掌握C语言的基本语法和数据结构。
2.理解函数的定义和调用,能够编写简单的函数。
3.掌握文件操作的基本方法,能够实现文件的读写。
4.能够使用C语言编写程序,解决实际问题。
5.具备良好的编程习惯,代码结构清晰,易于阅读和维护。
6.能够运用C语言实现简单的银行系统,包括账户管理、存款、取款、查询等功能。
情感态度价值观目标:1.培养学生对计算机编程的兴趣,提高学生动手实践的能力。
2.培养学生团队协作的精神,学会与他人交流和分享。
3.培养学生解决问题的能力,培养学生的创新意识。
二、教学内容本课程的教学内容主要包括以下几个部分:1.C语言的基本语法和数据结构:变量、数据类型、运算符、表达式、控制语句、数组、字符串、函数等。
2.函数的定义和调用:函数的定义、参数传递、返回值、递归等。
3.文件操作:文件的打开、关闭、读写、定位等。
4.银行系统的实现:账户管理、存款、取款、查询等功能的设计和实现。
三、教学方法本课程的教学方法主要包括以下几种:1.讲授法:通过讲解C语言的基本语法和数据结构,让学生掌握C语言的基础知识。
2.案例分析法:通过分析实际的银行系统案例,让学生学会如何运用C语言解决实际问题。
3.实验法:通过上机实验,让学生动手实践,加深对C语言编程的理解。
4.讨论法:通过小组讨论,让学生学会与他人交流和分享,培养团队协作的精神。
四、教学资源本课程的教学资源主要包括以下几种:1.教材:《C语言程序设计》等相关教材。
2.参考书:提供一些相关的参考书籍,供学生自主学习。
3.多媒体资料:制作一些教学视频和PPT,帮助学生更好地理解教学内容。
4.实验设备:提供计算机实验室,让学生能够进行上机实验。
五、教学评估本课程的评估方式包括以下几个方面:1.平时表现:通过课堂参与、提问、讨论等方式评估学生的学习态度和积极性。
C语言做的银行系统#include<stdio.h>#include<stdlib.h>#include<string.h>struct cust{int zhanghao; //帐号char mingzi[20]; //名字float bal; //开户的金额};struct tran{int acc_no;char trantype;float amt;};void addcust();void rectran();void prnlowbal();void huizong();void main(){int choice;while(choice!=5){system("cls");printf("\n****************************************\n");printf("\n* 银行交易系统 *\n");printf("\n* -1- 创建新用户信息 *\n");printf("\n* -2- 银行业务办理 *\n"); printf("\n* -3- 显示低存款用户信息 *\n");printf("\n* -4- 汇总 *\n");printf("\n* -5- 退出 *\n");printf("\n****************************************\n");printf("请选择:");scanf(" %d",&choice);switch(choice){case 1:addcust();break;case 2:rectran();break;case 3:prnlowbal();break;case 4:huizong();break;default:exit(0);}}}void addcust(){FILE *fp;char flag='y';struct cust people;if((fp=fopen("sql.txt","w"))==NULL){printf("\n **** 操作错误,重新输入 ****\n"); getchar();return;}while(flag=='y'){system("cls");printf("\n 帐号:");scanf("%d",&people.zhanghao);printf("\n 姓名:");scanf("%s",&people.mingzi);printf("\n 金额:");scanf("%f",&people.bal);fwrite(&people,sizeof(struct cust),1,fp);getchar();printf("\n 是否继续(y/n)?:");scanf(" %c",&flag);}fclose(fp);}void rectran(){FILE *fp1,*fp2;char flag='y',found,val_flag;struct cust people;struct tran people2;int size=sizeof(struct cust);if((fp1=fopen("sql.txt","a+f"))==NULL){printf("\n **** 操作错误,重新输入! ****\n");getchar();exit(0);}if((fp2=fopen("trans.dat","a+f"))==NULL){printf("\n **** 操作错误,重新输入! ****\n");getchar();return;}while(flag=='y'){system("cls");printf("\n帐号:");scanf("%d",&people2.acc_no);found='n';val_flag='n';rewind(fp1);while((fread(&people,size,1,fp1))==1 && found=='n'){if(people.zhanghao==people2.acc_no){found='y';break;}}if(found=='y'){while(val_flag=='n'){printf("\n 选择交易方式存/取(D/W)?:");scanf(" %c",&people2.trantype);if(people2.trantype!='D'&&people2.trantype!='d'&&people2.trantype!='w'&&people2.trantype!='W') {printf("\n **** 交易错误,重新输入 ****\n");}else{val_flag='y';}}val_flag='n';while(val_flag=='n'){printf("\n 金额:");scanf("%f",&people2.amt);if(people2.trantype=='w'||people2.trantype=='W'){if(people2.amt>people.bal){printf("\n *** 余额:%.2f不足.重新输入。
1.题目要求题目十三:银行卡管理系统设计设计银行卡管理系统,系统主要模块:实现系统内制卡、发卡功能;实现系统内账户及相关账户管理;实现卡交易和合法性检查;实现卡金融交易积分功能;实现卡报表功能;数据以文件形式存储。
(提示)制卡:指申请一张银行卡,但还没有使用。
发卡:指该银行卡已经启用。
实现卡交易:指从卡中取出掉一定的金额。
2.需求分析struct CCard{char cardNo[20]; //卡号char name[20]; //持卡人姓名char ID[20]; //持卡人身份证号码char password[20]; //密码int flag; //标志该卡是否启用(0表示未启用,1表示启用)float account; //账户金额fnt integral; //积分}card[M];(1)制卡指申请一个银行卡。
即建立一个CCard对象,输入信息对其初始化。
(2)账户信息存储到账户信息文件中,当制作一新卡时,就把该新卡追加到账户信息文件。
对账户信息的管理需要实现账户信息查询,用基本的查找算法按卡号对账户信息文件进行查找,并打印输出。
(3)实现卡交易和合法性检查。
用户首先依靠卡号和密码登陆(通过查找账户信息文件,来查看卡号和密码是否正确匹配),输入交易金额,如果account>=输入金额,则输出“交易成功!”,并更改account=account-输入金额。
否则输出“对不起,您的余额不够!”。
整加到积分上。
(5)实现卡报表功能。
读账户信息文件,分屏输出所有账户的帐号和交易金额3.总体设计分析了整个系统之后,根据上面的系统需求分析,可以将这个系统的设计分为如下七大模块:制卡、发卡、存款、取款、查询账户相关信息、查询账户交易记录、查询全部信息4.详细设计#include<stdio.h>#include<ctype.h> /*调用字符函数*/#include<stdlib.h>#include<conio.h> /*通用输入输出库*/#include<string.h>#define M 1000void menu();void add();void life();void enter();void browse();void huo(int k);void hedui(int k);void menu1(int k);void fetch(int k);void change(int k);void deposit(int k);void stat_one(int k);void print_one(int j);int search(char h[20]);int n=0;struct CCard /*定义信用卡结构体*/{int number;char cardNO[20]; //卡号char name[20]; //持卡人姓名char ID[20]; //持卡人身份证号码char password[20]; //密码int flag; //标志该卡是否启用(0表示未启用,1表示启用)float account; //账户金额int integal; //积分}card[M];void menu() /*主菜单*/{int v,w1;do{printf("\n\n\n\n");printf("\t\t<_______________________ THE MENU ______________________>\n");printf("\t\t|| (1) 制卡操作||\n");printf("\t\t||------------------------------------------------------||\n");printf("\t\t|| (2) 帐号激活||\n");printf("\t\t||------------------------------------------------------||\n");printf("\t\t|| (3) 帐户登录||\n");printf("\t\t||------------------------------------------------------||\n");printf("\t\t|| (4) 报表操作||\n");printf("\t\t||------------------------------------------------------||\n");printf("\t\t||______________________________________________________||\n");printf("\n\n\t\t 请选择操作(1--5):< >\b\b");scanf("%d",&v);if(v<1||v>5){printf("\n\n\t\t**********输入有误!************");w1=1;getchar();}else w1=0;}while(w1==1);switch(v){case 1:made();break; /*制卡操作*/case 2:life();break; /*账号激活*/case 3:enter();break; /*账户登录*/case 4:browse();break; /*报表操作*/case 5:exit(0); /*退出*/}}void main() /*主题*/{printf("\n\n\n\n\n\n\n\n\n");printf("\t\t*********************银行卡管理系统************************\n");menu();}void made() /*制卡操作*/{int i;char h[20];do{printf("\n\n\t请输入要申请的号码:<\t\t\t>\b\b\b\b\b\b\b");scanf("%s",h);if(strlen(h)!=6){printf("\n\n\n\t\t**************输入有误,请重新输入***************\n\n");continue;}if(strcmp(card[i].cardNO,h)==0){printf("\n\n\t\t**********该号码已经存在,请重新输入**********\n\n");break;}}while(((strlen(h))!=6)||strcmp(card[i].cardNO,h)==0);card[n].number=n;strcpy(card[n].cardNO,h);strcpy(card[n].name,"***");strcpy(card[n].ID,"********");strcpy(card[n].password,"000000");card[n].flag=0;card[n].account=0.00;card[n].integal=0;printf("\n\n\n\t\t********************制卡成功!**********************\n\n");print_one(n);n++;add();menu();}void print_one(int j) /*显示消息*/{printf("\n|----|--------------|----------|----------------|----|----------|----------|");printf("\n|NO. | 姓名| 卡号| I D |flag| account | integal |");printf("\n|----|--------------|----------|----------------|----|----------|----------|");printf("\n|%4d|%14s|%10s|%16s|%4d|%10.2f|%10d|",card[j].number,card[j].name,card[j].cardNO,card[j].ID,card[j].flag,card[j].account,card[j].integal);printf("\n|----|--------------|----------|----------------|----|----------|----------|");}void life() /*登录*/{int k=-1;char h[20];if(n==0)printf("\n\n\t\t****************请先制卡*********************\n");else{printf("\n\n\t请输入银行卡号码:<\t\t\t>\b\b\b\b\b\b\b");k=search(h);if(k==-1)printf("\n\n\t\t\t*****************该号码不存在!****************\n");else{if(card[k].flag==1)printf("\n\n\t\t****************该卡已经激活!*****************\n");else huo(k);}}menu();}int search(char h[20]){int i,k=-1;for(i=0;i<n;i++)if(strcmp(card[i].cardNO,h)==0)k=i;return(k);}void huo(int k) /*激活操作*/{char m[20],q[20],p[20];int x,w2;do{printf("\n\n\t\t 是否激活该卡? (1) 是(2) 否\n");printf("\n\t\t 请选择卡号:< >\b\b");scanf("%d",&x);if(x!=1&&x!=2){w2=1;getchar();}else w2=0;}while(w2==1);if(x==1){printf("\n\n\t\t请输入姓名:<\t\t\t>\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");scanf("%s",m);strcpy(card[k].name,m);printf("\n\n\t\t请输入身份证号码:< >\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");strcpy(card[k].ID,q);printf("\n\n\t\t请输入六位数密码:< >\b\b\b\b\b\b\b");scanf("%s",p);strcpy(card[k].password,p);card[k].flag=1;printf("\n\n\n\t\t*******************激活成功!**********************\n\n");print_one(k);add();}}void enter() /*进入*/{int k=-1;char h[20];if(n==0)printf("\n\n\t\t****************请先制卡*********************\n");else{printf("\n\n\t请输入银行卡号码:<\t\t\t>\b\b\b\b\b\b\b");scanf("%s",h);k=search(h);if(k==-1)printf("\n\n\t\t\t*****************该号码不存在!****************\n");else{if(card[k].flag=0)printf("\n\n\t\t************该卡还未激活,请先激活!************\n");elsehedui(k);}}menu();}void hedui(int k) /*验证核对*/{int c=0,w3=0;char p[8];do{printf("\n\n\t\t*******请输入密码:< >\b\b\b\b\b\b\b");if(strcmp(card[k].password,p)!=0){printf("\n\n\t\t********密码不正确,请重新输入!**********\n");continue;}else{printf("\n\n\t\t**********密码正确!***********\n");w3=1;menu1(k);}}while(w3==0&&c<3);}void menu1(int k) /*副菜单*/{int v,w4;do{printf("\n\n\n");printf("\t\t<_______________________THE MENU1______________________>\n");printf("\t\t|| (1) 查询||\n");printf("\t\t||------------------------------------------------------||\n");printf("\t\t|| (2) 存款||\n");printf("\t\t||------------------------------------------------------||\n");printf("\t\t|| (3) 取款||\n");printf("\t\t||------------------------------------------------------||\n");printf("\t\t|| (4) 修改密码||\n");printf("\t\t||------------------------------------------------------||\n");printf("\t\t|| (5) 返回主菜单||\n");printf("\t\t||______________________________________________________||\n");printf("\n\n\t\t Choice your number(1--5):< >\b\b");scanf("%d",&v);if(v<1||v>5){w4=1;getchar();}else w4=0;}while(w4==1);switch(v){case 2:deposit(k);break;case 3:fetch(k);break;case 4:change(k);break;case 5:menu();}}void stat_one(int k){printf("\n\n\t\t*************操作成功!***************");print_one(k);menu1(k);}void add(){int i;FILE *fp;if((fp=fopen("jieguo.txt","wb"))==NULL){printf("\t\t Can not open the file \n");return;}for(i=0;i<n;i++)if(fwrite(&card[i],sizeof(struct CCard),1,fp)!=1){printf("\t\t File write error \n");return;}fclose(fp);printf("\n\n\n\t\t************成功保存!!!************"); }void deposit(int k) /*存款*/{float a=0.00;printf("\n\n\t\t请输入存款金额:<\t\t>\b\b\b\b\b\b\b\b\b\b\b");scanf("%f",&a);card[k].account+=a;printf("\n\n\t\t**********存款成功!***********");print_one(k);add();menu1(k);void fetch(int k) /*取款*/{float b=0.00;printf("\n\n\t\t请输入取款金额:<\t\t>\b\b\b\b\b\b\b\b\b\b\b");scanf("%f",&b);if(b>card[k].account)printf("\n\n\t\t**********对不起,您的余额不足*************");else{card[k].account-=b;card[k].integal+=b;printf("\n\n\t\t**********交易成功***********");print_one(k);add();}menu1(k);}void change(int k) /*修改密码*/{char a[20],b[20];printf("\n\n\t\t请输入新六位数密码:< >\b\b\b\b\b\b\b");scanf("%s",a);printf("\n\t\t请再次输入新六位数密码:< >\b\b\b\b\b\b\b");scanf("%s",b);if(strcmp(a,b)==0){printf("\n\n\t\t**********密码修改成功!*************");add();}elseprintf("\n\n\t\t两次密码输入不一致,密码修改失败!");menu1(k);}void browse(){int i;if(n==0)printf("\n\n\t\t**********无记录,请先制卡!***********");else{printf("\n|----|--------------|----------|----------------|------|----------|----------|");printf("\n|NO. | 姓名| 卡号| I D | flag | account | integal |");printf("\n|----|--------------|----------|----------------|------|----------|----------|");for(i=0;i<n;i++)printf("\n|%4d|%14s|%10s|%16s|%4d|%10.2f|%10d|",card[i].number,card[i].name,card[i].cardNO,card[i].ID,card[i].flag,card[i].account,card[i].integal);printf("\n|----|--------------|----------|----------------|------|----------|----------|");}menu();}5.上机操作(1)主菜单(2)制卡操作(3)激活操作(4)副菜单(5)修改密码(6)报表操作。
c 银行管理系统实验报告C 银行管理系统实验报告摘要:本实验报告介绍了使用C语言开发的银行管理系统。
该系统包括客户信息管理、账户管理、存取款操作、转账操作等功能。
通过本次实验,我们深入了解了C语言的应用,掌握了银行管理系统的开发流程和技术要点。
1. 系统设计银行管理系统主要包括客户信息管理、账户管理、存取款操作、转账操作等功能模块。
在系统设计阶段,我们首先确定了系统的功能需求和流程,然后进行了数据结构的设计和数据库的建立。
在C语言中,我们使用结构体来定义客户信息和账户信息,使用文件来存储数据。
2. 系统实现在系统实现阶段,我们使用C语言编写了客户信息管理、账户管理、存取款操作、转账操作等功能的代码。
在代码编写过程中,我们充分考虑了系统的健壮性和安全性,对用户输入进行了合法性检查,对数据进行了有效性验证。
3. 系统测试在系统测试阶段,我们对银行管理系统进行了功能测试、性能测试和安全测试。
通过测试,我们发现系统在客户信息管理、账户管理、存取款操作、转账操作等方面表现良好,能够满足实际应用需求。
4. 实验总结通过本次实验,我们深入了解了C语言的应用,掌握了银行管理系统的开发流程和技术要点。
在实验中,我们遇到了一些问题,如数据结构的设计和文件操作的实现,但通过不懈努力和团队合作,最终成功完成了银行管理系统的开发和测试。
总之,本次实验为我们提供了宝贵的实践经验,增强了我们的编程能力和团队合作能力。
希望通过今后的学习和实践,能够进一步提升自己的技术水平,为银行管理系统的实际应用做出更大的贡献。
银行管理系统C语言程序设计代码简介银行管理系统是一个用于模拟银行业务的计算机程序。
它可以实现用户账户的创建、存取款、转账等功能,同时还可以进行利息计算、账单管理等操作。
本文将详细介绍银行管理系统的设计和实现,包括系统的功能模块、数据结构和算法等内容。
功能模块银行管理系统主要包括以下功能模块:1.用户管理:包括用户账户的创建、修改、删除等操作。
2.账户管理:包括存款、取款、查询余额、转账等操作。
3.利息计算:根据存款金额和存款期限计算利息。
4.账单管理:记录用户的交易明细和账户余额变动。
数据结构银行管理系统使用了以下数据结构:1.用户账户结构体:包括账户ID、账户名称、账户类型等信息。
2.用户交易结构体:包括交易类型、交易金额、交易时间等信息。
3.用户账户链表:用于保存所有用户账户的信息。
4.用户交易链表:用于保存用户的交易明细。
算法设计银行管理系统使用了以下算法:1.用户账户创建算法:通过用户输入的信息创建新的账户,并将其添加到账户链表中。
2.存款算法:根据用户输入的存款金额,将其添加到账户余额中。
3.取款算法:根据用户输入的取款金额,从账户余额中扣除相应金额。
4.转账算法:根据用户输入的转账金额和目标账户ID,将相应金额从当前账户中转到目标账户中。
5.利息计算算法:根据存款金额和存款期限,计算相应的利息。
6.账单记录算法:将用户的交易明细和账户余额变动记录到交易链表中。
代码实现以下是银行管理系统的C语言代码示例:#include <stdio.h>// 用户账户结构体typedef struct {int accountId;char accountName[100];char accountType[100];float balance;} Account;// 用户交易结构体typedef struct {int accountId;char transactionType[100];float amount;char transactionTime[100];} Transaction;// 用户账户链表typedef struct {Account account;struct AccountNode* next;} AccountNode;// 用户交易链表typedef struct {Transaction transaction;struct TransactionNode* next;} TransactionNode;// 创建用户账户void createAccount(AccountNode** head, Account account) { // 创建新的账户节点AccountNode* newNode = (AccountNode*)malloc(sizeof(AccountNode)); newNode->account = account;newNode->next = NULL;// 将新的账户节点添加到链表中if (*head == NULL) {*head = newNode;} else {AccountNode* current = *head;while (current->next != NULL) {current = current->next;current->next = newNode;}}// 存款void deposit(AccountNode* head, int accountId, float amount) {AccountNode* current = head;while (current != NULL) {if (current->account.accountId == accountId) {current->account.balance += amount;break;}current = current->next;}}// 取款void withdraw(AccountNode* head, int accountId, float amount) {AccountNode* current = head;while (current != NULL) {if (current->account.accountId == accountId) {if (current->account.balance >= amount) {current->account.balance -= amount;} else {printf("Insufficient balance.\n");}break;}current = current->next;}}// 转账void transfer(AccountNode* head, int sourceAccountId, int targetAccountId, flo at amount) {AccountNode* current = head;while (current != NULL) {if (current->account.accountId == sourceAccountId) {if (current->account.balance >= amount) {current->account.balance -= amount;break;} else {printf("Insufficient balance.\n");}current = current->next;}current = head;while (current != NULL) {if (current->account.accountId == targetAccountId) {current->account.balance += amount;break;}current = current->next;}}// 利息计算float calculateInterest(float principal, int years) {float rate = 0.05; // 假设利率为5%return principal * rate * years;}// 账单记录void recordTransaction(TransactionNode** head, Transaction transaction) { // 创建新的交易节点TransactionNode* newNode = (TransactionNode*)malloc(sizeof(TransactionNod e));newNode->transaction = transaction;newNode->next = NULL;// 将新的交易节点添加到链表中if (*head == NULL) {*head = newNode;} else {TransactionNode* current = *head;while (current->next != NULL) {current = current->next;}current->next = newNode;}}int main() {AccountNode* accountList = NULL;TransactionNode* transactionList = NULL;// 创建账户Account account1 = {1, "John Doe", "Savings", 1000.0};createAccount(&accountList, account1);Account account2 = {2, "Jane Smith", "Checking", 2000.0};createAccount(&accountList, account2);// 存款deposit(accountList, 1, 500.0);// 取款withdraw(accountList, 1, 200.0);// 转账transfer(accountList, 1, 2, 300.0);// 利息计算float interest = calculateInterest(1000.0, 1);printf("Interest: %.2f\n", interest);// 账单记录Transaction transaction1 = {1, "Deposit", 500.0, "2022-01-01 10:00:00"};recordTransaction(&transactionList, transaction1);Transaction transaction2 = {1, "Withdraw", 200.0, "2022-01-02 11:00:00"};recordTransaction(&transactionList, transaction2);return 0;}总结银行管理系统是一个功能丰富的计算机程序,通过使用C语言进行设计和实现,可以实现用户账户的创建、存取款、转账等功能,同时还可以进行利息计算、账单管理等操作。
1.题目要求题目十三:银行卡管理系统设计设计银行卡管理系统,系统主要模块:实现系统内制卡、发卡功能;实现系统内账户及相关账户管理;实现卡交易和合法性检查;实现卡金融交易积分功能;实现卡报表功能;数据以文件形式存储。
(提示)制卡:指申请一张银行卡,但还没有使用。
发卡:指该银行卡已经启用。
实现卡交易:指从卡中取出掉一定的金额。
2.需求分析struct CCard{char cardNo[20]; //卡号char name[20]; //持卡人姓名char ID[20]; //持卡人身份证号码char password[20]; //密码int flag; //标志该卡是否启用(0表示未启用,1表示启用)float account; //账户金额fnt integral; //积分}card[M];(1)制卡指申请一个银行卡。
即建立一个CCard对象,输入信息对其初始化。
(2)账户信息存储到账户信息文件中,当制作一新卡时,就把该新卡追加到账户信息文件。
对账户信息的管理需要实现账户信息查询,用基本的查找算法按卡号对账户信息文件进行查找,并打印输出。
(3)实现卡交易和合法性检查。
用户首先依靠卡号和密码登陆(通过查找账户信息文件,来查看卡号和密码是否正确匹配),输入交易金额,如果account>=输入金额,则输出“交易成功!”,并更改account=account-输入金额。
否则输出“对不起,您的余额不够!”。
(4)实现卡金融交易积分功能。
在把积分初始化为0,只需在卡交易的时候,把交易金额取整加到积分上。
(5)实现卡报表功能。
读账户信息文件,分屏输出所有账户的帐号和交易金额3.总体设计分析了整个系统之后,根据上面的系统需求分析,可以将这个系统的设计分为如下七大模块:制卡、发卡、存款、取款、查询账户相关信息、查询账户交易记录、查询全部信息4.详细设计#include<stdio.h>#include<ctype.h> /*调用字符函数*/#include<stdlib.h>#include<conio.h> /*通用输入输出库*/#include<string.h>#define M 1000void menu();void made();void add();void life();void enter();void browse();void huo(int k);void hedui(int k);void menu1(int k);void fetch(int k);void change(int k);void deposit(int k);void stat_one(int k);void print_one(int j);int search(char h[20]);int n=0;struct CCard /*定义信用卡结构体*/{int number;char cardNO[20]; //卡号char name[20]; //持卡人姓名char ID[20]; //持卡人身份证号码char password[20]; //密码int flag; //标志该卡是否启用(0表示未启用,1表示启用)float account; //账户金额int integal; //积分}card[M];void menu() /*主菜单*/{int v,w1;do{printf("\n\n\n\n");printf("\t\t<_______________________ THE MENU ______________________>\n");printf("\t\t|| (1) 制卡操作||\n");printf("\t\t||------------------------------------------------------||\n");printf("\t\t|| (2) 帐号激活||\n");printf("\t\t||------------------------------------------------------||\n");printf("\t\t|| (3) 帐户登录||\n");printf("\t\t||------------------------------------------------------||\n");printf("\t\t|| (4) 报表操作||\n");printf("\t\t||------------------------------------------------------||\n");printf("\t\t|| (5) 退出||\n");printf("\t\t||______________________________________________________||\n");printf("\n\n\t\t 请选择操作(1--5):< >\b\b");scanf("%d",&v);if(v<1||v>5){printf("\n\n\t\t**********输入有误!************");w1=1;getchar();}else w1=0;}while(w1==1);switch(v){case 1:made();break; /*制卡操作*/case 2:life();break; /*账号激活*/case 3:enter();break; /*账户登录*/case 4:browse();break; /*报表操作*/case 5:exit(0); /*退出*/}}void main() /*主题*/{printf("\n\n\n\n\n\n\n\n\n");printf("\t\t*********************银行卡管理系统************************\n");menu();}void made() /*制卡操作*/{int i;char h[20];do{printf("\n\n\t请输入要申请的号码:<\t\t\t>\b\b\b\b\b\b\b");scanf("%s",h);if(strlen(h)!=6){printf("\n\n\n\t\t**************输入有误,请重新输入***************\n\n");continue;}for(i=0;i<n;i++)if(strcmp(card[i].cardNO,h)==0){printf("\n\n\t\t**********该号码已经存在,请重新输入**********\n\n");break;}}while(((strlen(h))!=6)||strcmp(card[i].cardNO,h)==0);card[n].number=n;strcpy(card[n].cardNO,h);strcpy(card[n].name,"***");strcpy(card[n].ID,"********");strcpy(card[n].password,"000000");card[n].flag=0;card[n].account=0.00;card[n].integal=0;printf("\n\n\n\t\t********************制卡成功!**********************\n\n");print_one(n);n++;add();menu();}void print_one(int j) /*显示消息*/{printf("\n|----|--------------|----------|----------------|----|----------|----------|");printf("\n|NO. | 姓名| 卡号| I D |flag| account | integal |");printf("\n|----|--------------|----------|----------------|----|----------|----------|");printf("\n|%4d|%14s|%10s|%16s|%4d|%10.2f|%10d|",card[j].number,card[j].name,card[j].cardNO,card[j].ID,card[j].flag,card[j].account,card[j].integal);printf("\n|----|--------------|----------|----------------|----|----------|----------|");}void life() /*登录*/{int k=-1;char h[20];if(n==0)printf("\n\n\t\t****************请先制卡*********************\n");else{printf("\n\n\t请输入银行卡号码:<\t\t\t>\b\b\b\b\b\b\b");scanf("%s",h);k=search(h);if(k==-1)printf("\n\n\t\t\t*****************该号码不存在!****************\n");else{if(card[k].flag==1)printf("\n\n\t\t****************该卡已经激活!*****************\n");else huo(k);}}menu();}int search(char h[20]){int i,k=-1;for(i=0;i<n;i++)if(strcmp(card[i].cardNO,h)==0)k=i;return(k);}void huo(int k) /*激活操作*/{char m[20],q[20],p[20];int x,w2;do{printf("\n\n\t\t 是否激活该卡? (1) 是(2) 否\n");printf("\n\t\t 请选择卡号:< >\b\b");scanf("%d",&x);if(x!=1&&x!=2){w2=1;getchar();}else w2=0;}while(w2==1);if(x==1){printf("\n\n\t\t请输入姓名:<\t\t\t>\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");scanf("%s",m);strcpy(card[k].name,m);printf("\n\n\t\t请输入身份证号码:< >\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");scanf("%s",q);strcpy(card[k].ID,q);printf("\n\n\t\t请输入六位数密码:< >\b\b\b\b\b\b\b");scanf("%s",p);strcpy(card[k].password,p);card[k].flag=1;printf("\n\n\n\t\t*******************激活成功!**********************\n\n");print_one(k);add();}}void enter() /*进入*/{int k=-1;char h[20];if(n==0)printf("\n\n\t\t****************请先制卡*********************\n");else{printf("\n\n\t请输入银行卡号码:<\t\t\t>\b\b\b\b\b\b\b");scanf("%s",h);k=search(h);if(k==-1)printf("\n\n\t\t\t*****************该号码不存在!****************\n");else{if(card[k].flag=0)printf("\n\n\t\t************该卡还未激活,请先激活!************\n");elsehedui(k);}}menu();}void hedui(int k) /*验证核对*/{int c=0,w3=0;char p[8];do{printf("\n\n\t\t*******请输入密码:< >\b\b\b\b\b\b\b");scanf("%s",p);if(strcmp(card[k].password,p)!=0){printf("\n\n\t\t********密码不正确,请重新输入!**********\n");continue;}else{printf("\n\n\t\t**********密码正确!***********\n");w3=1;menu1(k);}}while(w3==0&&c<3);}void menu1(int k) /*副菜单*/{int v,w4;do{printf("\n\n\n");printf("\t\t<_______________________THE MENU1______________________>\n");printf("\t\t|| (1) 查询||\n");printf("\t\t||------------------------------------------------------||\n");printf("\t\t|| (2) 存款||\n");printf("\t\t||------------------------------------------------------||\n");printf("\t\t|| (3) 取款||\n");printf("\t\t||------------------------------------------------------||\n");printf("\t\t|| (4) 修改密码||\n");printf("\t\t||------------------------------------------------------||\n");printf("\t\t|| (5) 返回主菜单||\n");printf("\t\t||______________________________________________________||\n");printf("\n\n\t\t Choice your number(1--5):< >\b\b");scanf("%d",&v);if(v<1||v>5){w4=1;getchar();}else w4=0;}while(w4==1);switch(v){case 1:stat_one(k);break;case 2:deposit(k);break;case 3:fetch(k);break;case 4:change(k);break;case 5:menu();}}void stat_one(int k){printf("\n\n\t\t*************操作成功!***************");print_one(k);menu1(k);}void add(){int i;FILE *fp;if((fp=fopen("jieguo.txt","wb"))==NULL){printf("\t\t Can not open the file \n");return;}for(i=0;i<n;i++)if(fwrite(&card[i],sizeof(struct CCard),1,fp)!=1){printf("\t\t error \n");return;}fclose(fp);printf("\n\n\n\t\t************成功保存!!!************");}void deposit(int k) /*存款*/{float a=0.00;printf("\n\n\t\t请输入存款金额:<\t\t>\b\b\b\b\b\b\b\b\b\b\b");scanf("%f",&a);card[k].account+=a;printf("\n\n\t\t**********存款成功!***********");print_one(k);add();menu1(k);}void fetch(int k) /*取款*/{float b=0.00;printf("\n\n\t\t请输入取款金额:<\t\t>\b\b\b\b\b\b\b\b\b\b\b");scanf("%f",&b);if(b>card[k].account)printf("\n\n\t\t**********对不起,您的余额不足*************");else{card[k].account-=b;card[k].integal+=b;printf("\n\n\t\t**********交易成功***********");print_one(k);add();}menu1(k);}void change(int k) /*修改密码*/{char a[20],b[20];printf("\n\n\t\t请输入新六位数密码:< >\b\b\b\b\b\b\b");scanf("%s",a);printf("\n\t\t请再次输入新六位数密码:< >\b\b\b\b\b\b\b");scanf("%s",b);if(strcmp(a,b)==0){printf("\n\n\t\t**********密码修改成功!*************");add();}elseprintf("\n\n\t\t两次密码输入不一致,密码修改失败!");menu1(k);}void browse(){int i;if(n==0)printf("\n\n\t\t**********无记录,请先制卡!***********");else{printf("\n\n\t\t*************操作成功!**************\n");printf("\n|----|--------------|----------|----------------|------|----------|----------|");printf("\n|NO. | 姓名| 卡号| I D | flag | account | integal |");printf("\n|----|--------------|----------|----------------|------|----------|----------|");for(i=0;i<n;i++)printf("\n|%4d|%14s|%10s|%16s|%4d|%10.2f|%10d|",card[i].number,card[i].name,card[i].cardNO,card[i].ID,card[i].flag,card[i].account,card[i].integal);printf("\n|----|--------------|----------|----------------|------|----------|----------|");}menu();}5.上机操作(1)主菜单(2)制卡操作(3)激活操作(4)副菜单(5)修改密码(6)报表操作。