C语言课程设计作业
由于空间原因只能分享课程设计报告的前面几个部分,主要模块设计和实现在报告中是有程序流程图的,CSTN不太会用,没法显示流程图。还有程序运行测试截图,自我感觉这个程序主要功能是齐全的,但还可以进行外观美化。小伙伴们加油了!!
大约有500行代码,运用了文件,结构,函数等知识,仅供参考。
我学习C语言时间也不是很长,可能其中有些错误,请小伙伴们多注意哦。
C语言是学习其他语言的基础,下学期学习C++也会有课程设计,完成之后会发出来给小伙伴们参考一下的。
代码函数我都做了注释,方便理解。
目录
1 需求分析
2 系统设计
3主要模块设计与实现
4 系统运行测试
5 实训小结
6 源代码清单
1 需求分析
现今,人们的金融意识、科技意识己经有了很大的提高,在紧张忙碌的生活中,己越来越来不习惯每月奔忙于各银行营业柜台之问去排队缴各种各样的费用了;同时,各种经营单位如电信、移动、供电、煤气、自来水、证券等等一是为了提高服务质量、方便客户,二是为了减轻自己日趋繁重的工作量,纷纷委托银行为其开展代收代付业务此系统操作方便效率、安全性高,只要客户开户并设定好密码就可以轻松的实现存取款。系统实现的主要有储蓄卡开户管理、存取款管理、用户查询历史数据显示、注销等功能。
2 系统设计
2.1系统功能设计
该系统具有对银行业务进行开户,取款,存款,挂失,取消挂失,销户,查询余额等功能。具体可将本系统分为以下功能,每项功能的主要任务是:
- 登录Login(): 输入用户名和密码,通过验证登录到系统的功能界面;
- 开户OpenAccount(): 在银行中为储户新建一个账户;
- 销户CloseAccount():将该账户的状态更新为销户;
- 存款Deposit(): 把储户存入的金额加到其账户上;
- 取款Withdraw(): 把储户取出的金额在账户余额中减掉;
- 查询Query (): 实现账户的余额和基本信息的查询;
- 挂失Losecard():实现将账户状态改变为挂失
- 取消挂失Opencard():实现将账户状态改变为正常
- 退出exit():退出系统
2.2数据结构设计
所有子任务都围绕着一批用户的数据,每个用户包括账号、用户名,密码,余额和账户状态,因此,定义一个用户的结构体类型如下:
struct user {
int id;//账号
char userName[10];//用户名
char userPassword[10];//密码
float money;//余额
int status;// 状态 1:正常 2. 挂失 0:销户
} users[60]; //结构数组(所有用户的个人信息)
3主要模块设计与实现
主要函数设计:
- 登录Login(): 输入用户名和密码,通过验证登录到系统的功能界面;
- 开户OpenAccount(): 在银行中为储户新建一个账户;
- 销户CloseAccount(): 取出账户余额,并将该账户的状态更新为销户;
- 存款Deposit(): 把储户存入的金额加到其账户上;
- 取款Withdraw(): 把储户取出的金额在账户余额中减掉;
- 查询Query (): 实现账户的余额和基本信息的查询;
- 挂失Losecard():实现将账户状态改变为挂失
- 取消挂失Opencard():实现将账户状态改变为正常
- 欢迎界面Welcome():进入程序的欢迎界面
- 登录Login():采用账户登录系统
下面是源代码清单
```/*银行储蓄业务系统*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void Welcome(); /*欢迎界面*/
void Login(); /*登录*/
void Mainmenu(); /*主菜单*/
void Query(); /*查询余额*/
void DisplayAccount(int count); /*账户状态*/
void OpenAccount(); /*开户*/
void CloseAccount(); /*销户*/
void Deposit(); /*存款*/
void Withdraw(); /*取款*/
void Losecard(); /*挂失*/
void Opencard(); /*解挂*/
void TransferAccounts(); /*转账*/
struct user {
int id;
char userName[10];//用户名
char userPassword[10];//密码
float money;
int status;// 状态 1:正常 2. 挂失 0:销户
} users[60]; //结构数组(所有用户的个人信息)
//全局变量
int number=0; // 记录编号和已经添加的用户人数
FILE *fp;
int main(void) {
int choose,n=5;
//欢迎界面
Welcome();
//登录
Login();
do {
/*主菜单*/
Mainmenu();
printf("请选择您要办理的业务:");
scanf("%d",&choose);
switch(choose) {
case 1:
Deposit();
break;//存款
case 2:
Withdraw();
break;//取款
case 3:
Query();
break;//查询
case 4:
OpenAccount();
break;//开户
case 5:
CloseAccount();
break;//销户
case 6:
TransferAccounts();
break;//转账
case 7:
Losecard();
break;//挂失
case 8:
Opencard();
break;//解除挂失
}
} while(choose!=0);
if(choose==0) {
printf("感谢您使用银行储蓄业务管理系统,欢迎下次继续使用!\n");
}
}
//展示账户状态
void DisplayAccount(int count) {
printf("\t|------------------------------------|\n");
printf("\t|-**********************************-|\n");
printf("\t\t账号:%d\n",users[count].id);
printf("\t\t用户名:%s\n",users[count].userName);
printf("\t\t密码:%s\n",users[count].userPassword);
printf("\t\t余额:%.2f\n",users[count].money);
printf("\t\t账户状态:");
if(users[count].status == 1)
printf("正常\n");
if(users[count].status == 2)
printf("挂失\n");
else if(users[count].status == 0)
printf("销户\n");
printf("\t|-**********************************-|\n");
printf("\t|------------------------------------|\n");
}
//欢迎界面
void Welcome() {
printf("\t|------------------------------------|\n");
printf("\t|-¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥-|\n");
printf("\t|----------银行储蓄业务系统----------|\n");
printf("\t|************************************|\n");
printf("\t|------------版本:V1.0--------------|\n");
printf("\t|--------开发时间:2020-12-3---------|\n");
printf("\t|-¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥-|\n");
printf("\t|------------------------------------|\n");
}
//登录
void Login() {
int count=0;
char username[10],password[10];
do {
printf("请输入管理员名:");
gets(username);
printf("请输入管理员密码:");
gets(password);
if(((strcmp(username,"admin")))==0&&((strcmp(password,"123456"))==0)) {
printf(" 正在登陆,请稍等\n");
printf("■■■■■■■■■■■■■■■■■■■■\n");
printf("登录成功!\n");
break;
} else {
printf("管理员名或密码错误.\n");
printf("请重新输入管理员名或密码.\n");
count++;
}
} while(count<=3);
if(count>3) {
printf("登录失败,请及时联系银行工作人员!");
}
}
/*主菜单*/
void Mainmenu() {
printf("\t|------------------------------------|\n");
printf("\t|-**********************************-|\n");
printf("\t|---------------主菜单---------------|\n");
printf("\t|--存款<1>--&--开户<4>--&--挂失<7>---|\n");
printf("\t|------------------------------------|\n");
printf("\t|--取款<2>--&--销户<5>--&--解挂<8>---|\n");
printf("\t|------------------------------------|\n");
printf("\t|--查询<3>--&--转账<6>--&--退出<0>---|\n");
printf("\t|------------------------------------|\n");
printf("\t|-**********************************-|\n");
printf("\t|------------------------------------|\n");
}
//查询余额
void Query() {
int id;
printf("请输入所要查询的用户账户:");
scanf("%d",&id);
if((fp=fopen("users.txt","r+"))==NULL) {
printf("File open error!");
exit(0);
}
while(fscanf(fp,"%d %s %s %f %d",&users[id].id,users[id].userName,users[id].userPassword,&users[id].money,&users[id].status)==5) {
if(id==users[id].id) {
break;
}
}
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}
if(users[id].status==0) { //判断用户状态
printf("该账号已销户,无法进行查询操作.\n");
} else { //不是销户状态下
char pwd1[10];
printf("请输入所要查询的账户名所对应密码:");
scanf("%s",pwd1);
if(strcmp(pwd1,users[id].userPassword)==0)//比较密码与用户名是否匹配
DisplayAccount(id);
else
printf("您的账号或密码有误,无法进行查询,请重新进行操作\n");
}
}
//存款
void Deposit() {
FILE *temp;
int i=0;
printf("请输入所要存款的账号:");
int id;
scanf("%d",&id);
if((fp=fopen("users.txt","r+"))==NULL) {
printf("File open error!");
exit(0);
}
while(fscanf(fp,"%d %s %s %f %d",&users[id].id,users[id].userName,users[id].userPassword,&users[id].money,&users[id].status)==5) {
if(id==users[id].id) {
break;
}
}
if(users[id].status == 1) {
char um[10];
printf("请输入所要存款的用户名:");
scanf("%s",um);
char pwd[10];
printf("请输入所要存款账号的密码:");
scanf("%s",pwd);
if(strcmp(um,users[id].userName)==0&&strcmp(pwd,users[id].userPassword)==0) {
printf("请输入存款金额:");
float money,money2;
scanf("%f",&money);
users[id].money+=money;
money2=users[id].money;
temp=fopen("temp.txt","w");
rewind(fp);//回到fp所指文件内容开头
while(fscanf(fp,"%d %s %s %f %d",&users[i].id,users[i].userName,users[i].userPassword,&users[i].money,&users[i].status)==5) {
if(strcmp(um,users[i].userName)==0&&strcmp(pwd,users[i].userPassword)== 0) {
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,money2,users[i].status);
users[id].money=money2;
} else
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,users[i].status);
i++;
}
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}
if(fclose(temp)) {
printf("Can not close the file!\n");
exit(0);
}
remove("users.txt");//删除users文件
rename("temp.txt","users.txt");//重命名temp文件
printf("存款已完成!\n");
DisplayAccount(id);
} else printf("您的用户名或密码有误,无法存款,请重新进行操作\n");
} else if(users[id].status==2) {
printf("该账号已挂失,无法进行存款操作!\n");
} else if(users[id].status==0) {
printf("该账号已销户,无法进行存款操作!\n");
printf("您是否选择开户操作:Yes<1> No<2>\n");
int choose;
scanf("%d",&choose);
if(choose==1) {
OpenAccount();
}
}
}
//取款
void Withdraw() {
FILE *temp;
int i=0;
printf("请输入所要取款的账号:");
int id;
scanf("%d",&id);
if((fp=fopen("users.txt","r+"))==NULL) {
printf("File open error!");
exit(0);
}
while(fscanf(fp,"%d %s %s %f %d",&users[id].id,users[id].userName,users[id].userPassword,&users[id].money,&users[id].status)==5) {
if(id==users[id].id) {
break;
}
}
if(users[id].status == 1) {
char um[10];
printf("请输入所要取款的用户名:");
scanf("%s",um);
char pwd[10];
printf("请输入所要取款账号的密码:");
scanf("%s",pwd);
if(strcmp(um,users[id].userName)==0&&strcmp(pwd,users[id].userPassword)==0) {
printf("请输入取款金额:");
float money,money2;
scanf("%f",&money);
if(users[id].money>=money) {
users[id].money-=money;
money2=users[id].money;
temp=fopen("temp.txt","w");
rewind(fp);//回到fp所指文件内容开头
while(fscanf(fp,"%d %s %s %f %d",&users[i].id,users[i].userName,users[i].userPassword,&users[i].money,&users[i].status)==5) {
if(strcmp(um,users[i].userName)==0&&strcmp(pwd,users[i].userPassword)== 0) {
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,money2,users[i].status);
users[id].money=money2;
} else
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,users[i].status);
i++;
}
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}
if(fclose(temp)) {
printf("Can not close the file!\n");
exit(0);
}
remove("users.txt");//删除users文件
rename("temp.txt","users.txt");//重命名temp文件
printf("您取款后的状态为:\n");
DisplayAccount(id);
} else
printf("您的金额已不足!\n");
} else
printf("您的用户名或密码有误,无法存款,请重新进行操作\n");
} else if(users[id].status==2) {
printf("该账号已挂失,无法进行取款操作\n");
} else if(users[id].status==0) {
printf("该账号已销户,无法进行取款操作\n");
}
}
//开户
void OpenAccount() {
int i,flag=0;
char pwd1[7],pwd2[7];
char name[10];
if((fp=fopen("users.txt","r+"))==NULL) {
fp=fopen("users.txt","w+");
//printf("File open error!\n");
//exit(0);
}
while(fscanf(fp,"%d %s %s %f %d",&number,name,pwd1,&users[number].money,&users[number].status)==5) {
number++;
}
printf("欢迎使用开户模块!\n");
printf("请输入您的用户名:");
scanf("%s",name);
for(i=1; i<number; i++) {
if(strcmp(users[i].userName,name)==0) {
printf("您输入的用户名已经存在,请重新输入:");
scanf("%s",name);
break;
}
}
if(i==number) {
printf("您申请的用户名成功!\n");
}
strcpy(users[number].userName,name);
printf("请输入您的密码(6位数字):");
scanf("%s",pwd1);
printf("请再次输入您的密码进行确认:");
scanf("%s",pwd2);
if(strcmp(pwd1,pwd2)==0) {
printf("开户成功!\n");
strcpy(users[number].userPassword,pwd1);
printf("请输入您要存款的金额:");
scanf("%f",&users[number].money);
users[number].status=1;
fprintf(fp,"%d %s %s %f %d\n",number,name,pwd1,users[number].money,users[number].status);
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}
printf("您的账户信息为:\n");
users[number].id=number;
DisplayAccount(number);
} else {
printf("开户失败,请检查错误后,重新进行操作\n");
number--;
}
return;
}
//销户
void CloseAccount() {
FILE *temp;
int i=0,t;
int num,account;
char um[10],pwd[10];
printf("请输入所要销户的账号:");
scanf("%d",&account);
if((fp=fopen("users.txt","r+"))==NULL) {
printf("File open error!");
exit(0);
}
while(fscanf(fp,"%d %s %s %f %d",&users[account].id,users[account].userName,users[account].userPassword,&users[account].money,&users[account].status)==5) {
if(account==users[account].id) {
break;
}
}
if(users[account].status == 0) {
printf("该账号已销号!\n");
printf("请输入所要销户账号对应的密码:");
} else if(users[account].status==1||users[account].status==2) {
printf("请输入所要销户的账户名:");
scanf("%s",um);
printf("请输入所要销户账号所对应的密码:");
scanf("%s",pwd);
if(strcmp(um,users[account].userName)== 0 && strcmp(pwd,users[account].userPassword)== 0) {
temp=fopen("temp.txt","w");
rewind(fp);//回到fp所指文件内容开头
while(fscanf(fp,"%d %s %s %f %d",&users[i].id,users[i].userName,users[i].userPassword,&users[i].money,&users[i].status)==5) {
if(strcmp(um,users[i].userName)== 0 && strcmp(pwd,users[i].userPassword)== 0) {
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,0);
users[i].status=0;
t=i;
} else
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,users[i].status);
i++;
}
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}
if(fclose(temp)) {
printf("Can not close the file!\n");
exit(0);
}
remove("users.txt");//删除users文件
rename("temp.txt","users.txt");//重命名temp文件
DisplayAccount(t);
} else {
printf("账号名或密码输入错误!\n");
printf("请重新输入:\n");
}
}
}
//转账
void TransferAccounts() {
FILE *temp;
int id1,i=0,t;
printf("请输入您的账号:");
scanf("%d",&id1);
printf("请输入您的账户名:");
char um1[10],pwd1[10];
scanf("%s",um1);
printf("请输入您的密码:");
scanf("%s",pwd1);
if((fp=fopen("users.txt","r+"))==NULL) {
printf("File open error!");
exit(0);
}
while(fscanf(fp,"%d %s %s %f %d",&users[id1].id,users[id1].userName,users[id1].userPassword,&users[id1].money,&users[id1].status)==5) {
if(id1==users[id1].id) {
break;
}
}
if(strcmp(um1,users[id1].userName)==0&&strcmp(pwd1,users[id1].userPassword)==0&&users[id1].status == 1) {
int id2;
printf("请输入您所要转入金额的账号:");
scanf("%d",&id2);
printf("请输入您所要转入金额的用户名:");
char um2[10];
scanf("%s",um2);
while(fscanf(fp,"%d %s %s %f %d",&users[id2].id,users[id2].userName,users[id2].userPassword,&users[id2].money,&users[id2].status)==5) {
if(id2==users[id2].id) {
break;
}
}
if(strcmp(um2,users[id2].userName)== 0) {
float money,m1,m2;
printf("请输入您要转账的金额:");
scanf("%f",&money);
if(users[id1].money>money) {
users[id1].money-=money;
users[id2].money+=money;
m1=users[id1].money;
m2=users[id2].money;
temp=fopen("temp.txt","w");
rewind(fp);//回到fp所指文件内容开头
while(fscanf(fp,"%d %s %s %f %d",&users[i].id,users[i].userName,users[i].userPassword,&users[i].money,&users[i].status)==5) {
if(strcmp(um1,users[i].userName)==0) {
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,m1,users[i].status);
users[i].money=m1;
}
else if(strcmp(um2,users[i].userName)==0) {
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,m2,users[i].status);
users[i].money=m2;
}
else
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,users[i].status);
i++;
}
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}
if(fclose(temp)) {
printf("Can not close the file!\n");
exit(0);
}
remove("users.txt");//删除users文件
rename("temp.txt","users.txt");//重命名temp文件
DisplayAccount(id1);
DisplayAccount(id2);
} else {
DisplayAccount(id1);
printf("您的金额已不足!\n");
}
} else printf("您输入的收款人姓名错误!\n");
} else printf("您输入的用户名或密码错误!\n");
}
//挂失
void Losecard() {
FILE *temp;
int i=0,t;
int num,account;
char um[10],pwd[10];
printf("请输入所要挂失的账号:");
scanf("%d",&account);
if((fp=fopen("users.txt","r+"))==NULL) {
printf("File open error!");
exit(0);
}
while(fscanf(fp,"%d %s %s %f %d",&users[account].id,users[account].userName,users[account].userPassword,&users[account].money,&users[account].status)==5) {
if(account==users[account].id) {
break;
}
}
if(users[account].status== 2) {
printf("该账号已挂失!\n");
} else if(users[account].status == 0) {
printf("该账号已销号!\n");
} else if(users[account].status == 1) {
printf("请输入所要挂失的账户名:");
scanf("%s",um);
printf("请输入所要挂失账号对应的密码:");
scanf("%s",pwd);
if(strcmp(um,users[account].userName)== 0 && strcmp(pwd,users[account].userPassword)== 0) {
temp=fopen("temp.txt","w");
rewind(fp);//回到fp所指文件内容开头
while(fscanf(fp,"%d %s %s %f %d",&users[i].id,users[i].userName,users[i].userPassword,&users[i].money,&users[i].status)==5) {
if(strcmp(um,users[i].userName)== 0 && strcmp(pwd,users[i].userPassword)== 0) {
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,2);
users[i].status=2;
t=i;
} else
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,users[i].status);
i++;
}
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}
if(fclose(temp)) {
printf("Can not close the file!\n");
exit(0);
}
remove("users.txt");//删除users文件
rename("temp.txt","users.txt");//重命名temp文件
DisplayAccount(t);
} else {
printf("账号名或密码输入错误!\n");
printf("请重新输入:\n");
}
}
}
//取消挂失
void Opencard() {
FILE *temp;
int i=0,t;
int num,account;
char um[10],pwd[10];
printf("请输入所要挂失的账号:");
scanf("%d",&account);
if((fp=fopen("users.txt","r+"))==NULL) {
printf("File open error!");
exit(0);
}
while(fscanf(fp,"%d %s %s %f %d",&users[0].id,users[0].userName,users[0].userPassword,&users[0].money,&users[0].status)==5) {
if(account==users[0].id) {
break;
}
}
if(users[0].status==1) {
printf("该账号状态正常!\n");
} else if(users[0].status == 0) {
printf("该账号已销号!\n");
} else if(users[0].status == 2) {
printf("请输入所要挂失的账户名:");
scanf("%s",um);
printf("请输入所要挂失账号对应的密码:");
scanf("%s",pwd);
if(strcmp(um,users[0].userName)== 0 && strcmp(pwd,users[0].userPassword)== 0) {
temp=fopen("temp.txt","w");
rewind(fp);//回到fp所指文件内容开头
while(fscanf(fp,"%d %s %s %f %d",&users[i].id,users[i].userName,users[i].userPassword,&users[i].money,&users[i].status)==5) {
if(strcmp(um,users[i].userName)== 0 && strcmp(pwd,users[i].userPassword)== 0) {
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,1);
users[i].status=1;
t=i;
} else
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,users[i].status);
i++;
}
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}
if(fclose(temp)) {
printf("Can not close the file!\n");
exit(0);
}
remove("users.txt");//删除users文件
rename("temp.txt","users.txt");//重命名temp文件
DisplayAccount(t);
} else {
printf("账号名或密码输入错误!\n");
printf("请重新输入:\n");
}
}
}